また、フローティングウィンドウにくっつけると、タブ化され、ウィンドウタイトルが無くなってしまうのも嫌な感じです。
やっぱ、自分のツールは自分の作ったウィンドウだけに収めたい感じです。
そこで、特定のウィンドウへドッキングさせるために 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 件のコメント:
コメントを投稿