ホットキー 2

ホットキーの登録を GUI で行う

前章のホットキーの自動登録を、 GUI を使ってできるようにしてみましょう。

textScrollList と scrollField

今回は、登録してあるコマンドを表示・編集するために テキストスクロールリスト(textScrollList) と スクロールフィールド(scrollField) を使用しています。
テキストスクロールリスト は複数の項目をリスト表示して、 ひとつまたは、いくつかの項目をセレクトすることができます。
スクロールフィールドは複数行のテキストを表示して、 編集することができます。 Script Editor のインプットウインドウと同じものです。

ホットキーの表示例

まず、現在登録されているホットキーと、ホットキーに割り当てられているコマンドを表示する GUI を作ってみましょう。

  1. 以下の MEL スクリプトを setHotkey5.mel という名前で作ります。
    proc showHotkeyCommand()
    {
    	string $com;
    	string $selected[] = `textScrollList -q -selectItem myHotkeyTextScrollList`;
    	if($selected[0] != "")
    	{
    		$com = `runTimeCommand -q -c $selected[0]`;
    	}
    	scrollField -e -text $com myHotkeyScrollField;
    }
    
    global proc setHotkey5()
    {
    	int $i;
    
    	textScrollList -e -removeAll myHotkeyTextScrollList;
    	string $array[] = `runTimeCommand -q -userCommandArray`;
    	for($i = 0; $i <= size($array); $i++)
    	{
    		textScrollList -e -append $array[$i] myHotkeyTextScrollList;
    	}
    }
    
    {
    	string $winName = `window -title "setHotkey5"`;
    	columnLayout -adjustableColumn true;
    	textScrollList -numberOfRows 5 -selectCommand "showHotkeyCommand()" myHotkeyTextScrollList;
    	setHotkey5();
    	scrollField -height 100 myHotkeyScrollField;
    	button -label "Close" -align "center" -annotation "Close Window" -command ("deleteUI " + $winName);
    	showWindow;
    }
    
  2. Script EditorFile → Source Script によって setHotkey5.mel を読み込みます。
  3. すると、以下のようなウインドウが表示されます。
    [setHotkey5.mel の実行図]
    登録されているホットキーが無い場合は、上図のように何も表示されません。
  4. 試しにホットキーを登録してみましょう。
    前章の setHotkey1.mel を Script Editor で読みこんで、setHotkey1() を実行します。
  5. もう一度、setHotkey5.mel を読み込と、現在、User カテゴリーに登録されているホットキーが表示されます。
    [setHotkey5.mel の実行図]
  6. ウインドウに表示されている項目をクリックしてセレクトされた状態にすると、 下のウインドウに、そのホットキーに登録されているコマンドが表示されます。
    [項目をセレクトした図]

スクリプトの解説

proc showHotkeyCommand()
showHotkeyCommand というプロシージャの宣言です。
proc の前に global が付いていないので、 このファイルの中のみで呼び出すことができるプロシージャです。
string $com;
ホットキーに割り当てられている、コマンドをいれておくための変数です。
string $selected[] = `textScrollList -q -selectItem myHotkeyTextScrollList`;
ウインドウ上部のテキストスクロールリスト(myHotkeyTextScrollList)において、 現在セレクトされている項目を調べて、 文字列の配列 $selected に代入しています。
if($selected[0] != "")
配列 $selected の 0 番目が空文字列( "" )であるかどうか調べています。 $selected[0] に何か文字列が入っていれば、 セレクトされている項目が存在したということなので、 セレクトされたホットキーのコマンドを調べます。
$com = `runTimeCommand -q -c $selected[0]`;
$selected[0] に入っている名前のホットキーに割り当てられているコマンドを調べて、 $com に代入しています。
scrollField -e -text $com myHotkeyScrollField;
ウインドウ下部のスクロールフィールド(myHotkeyScrollField)に、 $com に入っているホットキーに割り当てられたコマンドを表示しています。
global proc setHotkey5()
setHotkey5 というプロシージャの宣言です。
int $i;
for 文のカウンターとして使う変数 $i の宣言です。
textScrollList -e -removeAll myHotkeyTextScrollList;
テキストスクロールリスト(myHotkeyTextScrollList)の表示をクリアします。
string $array[] = `runTimeCommand -q -userCommandArray`;
ユーザーランタイムコマンド(User カテゴリに登録されたコマンド)のリストを、 文字列の配列 $array に代入しています。
for($i = 0; $i <= size($array); $i++)
$array のサイズだけ for 文を実行します。
size($array) によって配列 $array の要素数(サイズ)を調べることができます。
textScrollList -e -append $array[$i] myHotkeyTextScrollList;
テキストスクロールリスト(myHotkeyTextScrollList)に $array[$i] に入っているユーザーランタイムコマンドの名前を表示します。
string $winName = `window -title "setHotkey5"`;
setHotkey5 というタイトルのついたウインドウを作ります。
作られたウインドウの名前は、 文字列変数 $winName に代入しておきます。
columnLayout -adjustableColumn true;
テキストスクロールリストとスクロールフィールドがウインドウいっぱいに表示されるようにするために、 -adjustableColumn フラグを付けて columnLayout を実行します。
textScrollList -numberOfRows 5 -selectCommand "showHotkeyCommand()" myHotkeyTextScrollList;
myHotkeyTextScrollList という名前でテキストスクロールリストを作ります。
各フラグの意味は以下のとおりです。
-numberOfRows 5
見えている列の数は 5
-selectCommand "showHotkeyCommand"
項目をセレクトしたときに showHotkeyCommand を実行
setHotkey5();
プロシージャー setHotkey5 を実行します。
setHotkey5 によって、テキストスクロールリスト(myHotkeyTextScrollList)にユーザーランタイムコマンドのリストを表示します。
scrollField -height 100 myHotkeyScrollField;
ホットキーに割り当てられているコマンドを表示するために、 myHotkeyScrollField という名前でスクロールフィールドを作ります。
各フラグの意味は以下のとおりです。
-height 100
スクロールフィールドの高さは 100
button -label "Close" -align "center" -annotation "Close Window" -command ("deleteUI " + $winName);
ウインドウを閉じるためのボタンを作ります。
各フラグの意味は以下のとおりです。
-label "Close"
ボタン上のラベルは Close
-align "center"
ラベルの位置はボタンの中央
-annotation "Close Window"
マウスカーソルがボタン上にきたときに表示する註釈は Close Window
-command ("deleteUI " + $winName);
ボタンが押されたときに実行するコマンドの定義
$winName にはウインドウの名前が入っているので、 このウインドウを deleteUI コマンドで閉じます。
showWindow;
ウインドウを表示します。

Tips (textScrollList のセレクト方法)

テキストスクロールリストはデフォールトでは、 ひとつの項目だけがセレクト可能なので、 複数のセレクトを可能にするには -allowMultiSelection true というフラグを使用します。
また、 -allowAutomaticSelection true を使用するとマウスをドラッグすることによって、 複数の項目をセレクトすることが可能になります。

練習

練習課題

参考


Prev | Next
Home | Contents
Mail