ホットキー 2
ホットキーの登録を GUI で行う
前章のホットキーの自動登録を、
GUI を使ってできるようにしてみましょう。
textScrollList と scrollField
今回は、登録してあるコマンドを表示・編集するために
テキストスクロールリスト(textScrollList)
と
スクロールフィールド(scrollField)
を使用しています。
テキストスクロールリスト
は複数の項目をリスト表示して、
ひとつまたは、いくつかの項目をセレクトすることができます。
スクロールフィールドは複数行のテキストを表示して、
編集することができます。
Script Editor のインプットウインドウと同じものです。
ホットキーの表示例
まず、現在登録されているホットキーと、ホットキーに割り当てられているコマンドを表示する GUI を作ってみましょう。
- 以下の 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;
}
- の によって setHotkey5.mel を読み込みます。
- すると、以下のようなウインドウが表示されます。
登録されているホットキーが無い場合は、上図のように何も表示されません。
- 試しにホットキーを登録してみましょう。
前章の setHotkey1.mel を Script Editor で読みこんで、setHotkey1() を実行します。
- もう一度、setHotkey5.mel を読み込と、現在、User カテゴリーに登録されているホットキーが表示されます。
- ウインドウに表示されている項目をクリックしてセレクトされた状態にすると、
下のウインドウに、そのホットキーに登録されているコマンドが表示されます。
スクリプトの解説
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
を使用するとマウスをドラッグすることによって、
複数の項目をセレクトすることが可能になります。
練習
- 使用例の setHotkey5.mel に Add ボタンを追加して、setHotkey6.mel を作り、
スクロールフィールドに表示されているコマンドを、
ホットキーに自動登録できるようにしてみましょう。
(使用例)
- setHotkey6.mel を Script Editor で読みこむと以下のようなウインドウが表示されます。
- スクロールフィールド(ウインドウの下部)に cone; と入力して Add ボタンを押します。
すると下図のように、新しいホットキー(myHotkey_ctl_f)が登録されます。
(ヒント 1)
スクロールフィールドに表示されている MEL コマンドを得るためには、
以下のコマンドを使用します。
scrollField -q -text スクロールフィールド名;
返り値は文字列(string)なので、その文字列を前章の setHotkey2.mel などを利用して登録すれば良いでしょう。
(ヒント 2)
もし、
// Error: line 1: Cannot find procedure "showHotkeyCommand". //
などというエラーがでた場合は、
proc showHotkeyCommand() の前に global を付けてみてください。
- setHotkey6.mel に Delete ボタンを追加して、setHotkey7.mel を作り、
テキストスクロールリストに表示されているホットキーを削除することができるようにしてみましょう。
(使用例)
- setHotkey7.mel を Script Editor で読みこむと以下のようなウインドウが表示されます。
- テキストスクロールリストに表示されているホットキーのひとつをセレクトします。
- Delete ボタンを押すと、セレクトされていたホットキーが削除されて、
テキストスクロールリストに表示されなくなります。
(ヒント 1)
テキストスクロールリストでセレクトされている項目を得るには以下のコマンドを使用します。
textScrollList -q -selectItem テキストスクロールリスト名;
また、ホットキーを消去するためには、まず runTimeCommand コマンドを消去します。
runTimeCommand -e -delete $com;
その後で、名前に空文字 "" をあたえてホットキーを消去します。
hotkey -ctl -k "ホットキーの文字" -name "";
(ヒント 2)
コマンドの名前(myHotkey_ctl_?)からホットキーの文字を取り出すためには、
以下のコマンドを使用します。
substring "文字列" n1 n2;
このコマンドで、"文字列" から n1 番目の文字から、n2 番目の文字を取り出すことができます。
例えば、以下の例では、"H" が返ります。
substring "myHotkey_ctl_a" 3 3;
返り値は文字列です。
練習課題
参考
Prev | Next
Home | Contents
Mail