UI 要素にコマンドをアタッチする

必要な要素をすべて含むウィンドウを作成すると、何か付け加えたくなることもあるでしょう。各コントロールは、ユーザのアクションによってトリガされた MEL コマンドやプロシージャを実行できます。コントロールでサポートされているアクションのタイプは、それぞれのコントロールの性質によって異なります。たとえば、ボタンは押したときにコマンドの実行だけをサポートし、スライダはドラッグするか値を変更したときに、コマンドをサポートします。各コントロールでサポートされているコールバックのリストについては、コマンドのマニュアルを参照してください。

単純な例としては、ボタンにコマンドをアタッチする場合が挙げられます。次のコマンドでは、ボタンを押すとボタンのラベル テキストが変更されます。

スクリプト 5. 単純な機能

window -width 200 -title "Test Window" ExampleWindow5;
 columnLayout;
 // Create the button.
 // 
 string $button = `button -label "Initial Label"`;
 // Add the command.
 // 
 string $buttonCmd;
 $buttonCmd = ("button -edit -label \"Final Label\" " + $button);
 button -edit -command $buttonCmd $button;
showWindow ExampleWindow5;

この例では、ボタンにコマンドが 1 つアタッチされます。引数を持つプロシージャをアタッチするのも同じくらい簡単です。次の例は、前述の例を少し変更したものです。

スクリプト 6. プロシージャでの単純な機能

window -title "Test Window" -widthHeight 200 100 ExampleWindow6;
 columnLayout;
 // Create the button.
 // 
 string $button = `button -label "Initial Label"`;
 // Add the command.
 // 
 button -edit -command ("changeButtonLabel " + $button) $button;
showWindow ExampleWindow6;
proc changeButtonLabel (string $whichButton) {
 string $labelA;
 string $labelB;
 string $currentLabel;
 
 $currentLabel = `button -query -label $whichButton`;
 $labelA = "New Label A";
 $labelB = "New Label B";
 if ($currentLabel != $labelA) {
 button -edit -label $labelA $whichButton;
 } else {
 button -edit -label $labelB $whichButton;
 }
}

実行されるコマンドのパラメータとして、コントロールの値が必要なことがよくあります。状態が変わるたびにコントロールを照会しなくても済むように、コントロールの値を文字列「#1」としてコマンドに埋め込むことができます。コントロールの値が変わると、そのコマンドを送るときに「#1」がコントロールの実際の値に置き換えられます。複数の値を持つグループは異なるコンポーネントの値に対して、「#2」、「#3」などを使用します。たとえば、3 つのフィールドがある float フィールド グループは、「#1」、「#2」、「#3」を使用して、コマンドで各フィールドの値を表すことができます。

ノードのアトリビュートの値を表示したり、アトリビュートが変更されたときに更新されるコントロールが必要になることはよくあります。これを実現するには、コントロールの 'attr' バージョン、つまり floatFieldGrp の代わりに attrFieldGrp を使用すると最も簡単です。'attr' コマンドが存在しない場合は、connectControl コマンドを使用します。