なかなか難しい?

最近、Urumaで遊んでます。だいぶハマった気がする・・・。
以下、気付いた/ハマった点を列挙。
ていうか、なら自分で修正すれ(*.*


まだまだ使い込み足りないので知らないで書いていることはあるかと思いますが、その辺はご勘弁を。


1.テーブルヘッダ、1列目の位置指定がきかない

<?xml version="1.0" encoding="UTF-8"?>
<template xmlns="http://uruma.sandbox.seasar.org">
  <window title="Journal" width="25%" height="25%"
    minimumWidth="480" minimumHeight="400" statusLine="true" id="Journal">

  <gridLayout numColumns="1" horizontalSpacing="0" marginWidth="0" marginHeight="0">
    <gridData horizontalAlignment="FILL" grabExcessHorizontalSpace="true"></gridData></gridLayout>
    <composite id="contents">
      <gridData horizontalAlignment="FILL" grabExcessHorizontalSpace="true"></gridData>
      <rowLayout type="VERTICAL" marginWidth="0" marginHeight="0" spacing="0"></rowLayout>
      <table id="table"
             style="H_SCROLL, V_SCROLL" fontName="MS ゴシック" columnOrder="0,1,2,3">
      <rowData height="380"/>
      <tableColumn id="eventTime" alignment="CENTER" text="時刻" width="120"/>
      <tableColumn id="location" alignment="CENTER" text="場所" width="120"/>
      <tableColumn id="status" alignment="CENTER" text="状態" width="100"/>
      <tableColumn id="value" alignment="CENTER" text="値" width="100"/>
    </table>
  </composite>
  </window>
  </template>

こんなカンジになる。一番左の「時刻」列ヘッダで「alignment="CENTER"」指定が有効になっていないのね。


2.同時に開けるモードレス画面は1枚?
StandAloneUrumaStarter#openWindow()は、ウィンドウを開くとブロックするのね。まだ非RCP版でしか動かしていないんですが、openWindow()がブロックするから、アプリ起動時に初期ウィンドウを複数枚開くには、自前でスレッドを立ててやらなきゃだめ?
UrumaWindowManagerにはopenDialog(String, boolean)っていうのがあってモーダル指定ができるようですが、ダイアログウィンドウになっちゃうんですか?
#ちなみに、UrumaWindowManagerは、Actionクラスに以下のように書いておくと放り込んでくれるらしい。(未確認)

    public UrumaWindowManager windowManager;


3.コンポーネントの重ね合わせがしたい!
XML画面定義でレイアウトを指定してコンポーネントをきれいに並べるのは楽ですが、画面に気ままにコンポーネントを配置したり、重ね合わせたりするのはできないんですね。
マップ(以前にAIRで試してみたやつみたいなもの)を作ろうとしたら、できなさそうだったので強引にCanvas置いて自前描画しました。
こうすれば自由ですが、一から実装なので開発効率は上がらないですね。あと、再描画が重たい・・・のはCanvasの使い方が悪いのでしょうか(汗


4.非RCPブランクは、もう少しファイルがあってもいいかも
特にdicon周り。ActionとかDtoとかLogicとかは、Urumaお作法に則ろうとするなら大抵使うのかと。結局、従業員管理のExampleから持ってきたんだけど、色々なものがくっついてくるので最初は煩わしいです。
え、RCP版にしろ?そうですか。


5.基本、ユーザ操作主導
アプリがバックグラウンドで動いた結果を表示する、というのは自前の実装が必要。上にちょこっと書いたマップは、ウィンドウ表示時(@InitializeMethod)にスレッドを起こしました。
で、SWTのお作法でユーザスレッドからコンポーネントの再描画ができないから、色々なところでDisplayオブジェクトを引っ張る必要があるらしい。
この辺は、他のS2コンポーネントとの組み合わせなんでしょうかね。プラクティスがあるといいな。