また、フローティングウィンドウにくっつけると、タブ化され、ウィンドウタイトルが無くなってしまうのも嫌な感じです。
やっぱ、自分のツールは自分の作ったウィンドウだけに収めたい感じです。
そこで、特定のウィンドウへドッキングさせるために dockControlコマンドというのがあります。
これは前からあるコマンドなのですが、dockControlのコマンドヘルプには、こんなサンプルコードしか書かれていません。
{ string $myWindow = `window`; string $buttonForm = `formLayout -parent $myWindow`; button -parent $buttonForm; dockControl -area "left" -content $myWindow -allowedArea "left" -allowedArea "right"; }
これをスクリプトエディタで実行すると、こんな感じのメインウィンドウにドッキングしたUIが作られます。
こんな短いサンプルコードでは、きっかけを掴みづらいんですけど、実は、windowコマンドのコマンドヘルプのほうに、こんなサンプルコードが載っています。
{ string $window =`window -title "Long Name" -iconName "Short Name" -widthHeight 200 55 -dockStation -nestedDockingEnabled true -dockCorner "topLeft" "left"`; columnLayout -adjustableColumn true; button -label "Do Nothing"; button -label "Close" -command ("deleteUI -window "+$window); setParent ..; showWindow $window; string $subWindow =`window`; string $buttonForm =`formLayout -parent $subWindow`; button -parent $buttonForm; dockControl -area "left" -content $subWindow -allowedArea "left" -allowedArea "right" -dockStation $window; }
これを実行すると、自作のウィンドウへしかドッキングしないUIを作成することが出来ます。
ウィンドウを作成するときに、5行目みたいな、-dockStattionのフラグを立てないといけません。あわせて、dockControlには22行目のように同じく-dockSatationフラグで、ドッキングさせるウィンドウ名を指定します。
これを指定しないと、メインウィンドウにドッキングするようになっているため、dockControlのサンプルのようになってしまいます。
このdockControlコマンドには、いくつか注意点があるようです。
まずは、メニュー。
windowコマンドには、メニューを追加するための-mebuBarフラグがあります。が、dockControlをドッキングさせると、メニューの文字列に、ドッキングしたバーの部分が重なってしまい、ウィンドウのメニューが使えなくなってしまいます。こんな風に。
ラベルは見えるんですが、クリック出来たり出来なかったり。
ドッキングしていても、していなくてもなので、windowに-dockControlフラグが立っているとメニューが使えなくなるようです。
ドッキングもして、メニューも追加したい場合には menuBarLayoutというコマンドを使います。
こんな感じで、メインウィンドウにメニューが出るので、どこにドッキングされても、レイアウトが崩れることはありません。ちょっとマージンがデカイですが・・・。
次に、dockControlをタブ化することが出来ますが、ウィンドウやレイアウトにサイズを指定していると、ドッキング先に、その大きさの隙間が無いとドッキングしてくれません。で、タブ化されたタブの位置は、下側で固定です。
workspaceControl や tabLayoutで下側にタブを配置できなくなっているのは、これが原因かもしれないですね。
さらに、dockControlを個別に閉じる事ができるため、表示させるプロシージャを自前で作成しておく必要があります。
復帰させるときには、-state(-st)フラグを使用するとdockControlの状態を出力できるので活用します。
こんな感じ。
global proc updateDockControlState(string $dockStation) { if(`optionVar -exists ($dockStation+"State")` && `window -exists $dockStation`) dockControl -e -state `optionVar -q ($dockStation+"State")` $dockStation; } global proc saveDockControlState(string $dockStation) { if(`dockControl -exists $dockStation` && `dockControl -q -floating $dockStation`) optionVar -stringValue ($dockStation+"State") `dockControl -q -state $dockStation`; }
dockControlは配置を入れ替えられるので、再起動などでツールの状態を復帰させる場合には、windowコマンドにも-stateフラグが有るので、同じように使用できます。
0 件のコメント:
コメントを投稿