また、フローティングウィンドウにくっつけると、タブ化され、ウィンドウタイトルが無くなってしまうのも嫌な感じです。
やっぱ、自分のツールは自分の作ったウィンドウだけに収めたい感じです。
そこで、特定のウィンドウへドッキングさせるために dockControlコマンドというのがあります。
これは前からあるコマンドなのですが、dockControlのコマンドヘルプには、こんなサンプルコードしか書かれていません。
1 2 3 4 5 6 7 8 9 10 | { string $myWindow = `window`; string $buttonForm = `formLayout -parent $myWindow `; button -parent $buttonForm ; dockControl -area "left" -content $myWindow -allowedArea "left" -allowedArea "right" ; } |
これをスクリプトエディタで実行すると、こんな感じのメインウィンドウにドッキングしたUIが作られます。
こんな短いサンプルコードでは、きっかけを掴みづらいんですけど、実は、windowコマンドのコマンドヘルプのほうに、こんなサンプルコードが載っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | { 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の状態を出力できるので活用します。
こんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 | 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 件のコメント:
コメントを投稿