UI 要素と ELF コマンドに関連して、「親」と「子」という用語が使用されます。この場合は、親はほかの UI 要素を含む UI 要素で、子は親に含まれる要素です。ある親の子が、別の子の親であることもあります。
ウィンドウは階層の最上位の親です。階層には他にも、レイアウト、コントロール、メニュー、メニュー項目などの要素があります。レイアウトは他のレイアウトを、メニュー項目はサブメニューを含むことがあるので、階層は任意の深さにすることができます。
ウィンドウの作成を簡略化し、スクリプトを簡潔にするために、ELF コマンドはデフォルト ペアレントの概念を認識するようになっています。これは、作成された要素それぞれについて、親を明示的に指定する必要がないことを意味します。ウィンドウが作成されると、そのウィンドウは後で作成されるメニューやコントロールのデフォルト ペアレントになります。setParent コマンドでデフォルト ペアレントを明示的に変更するか別のウィンドウを作成するまで、新しい UI エレメントはこのウィンドウの内に表示されます。
レイアウトやメニューには異なるデフォルト ペアレントがあります。ウィンドウはコントロールに対する最初のデフォルト ペアレントで、メニュー バーのあるウィンドウを作成した場合、このウィンドウはメニューのデフォルト ペアレントにもなります。作成されたレイアウトは、レイアウトやコントロールの新しいデフォルト ペアレントになります。メニュー バー レイアウトが作成されると、このレイアウトはメニューの新しいデフォルト ペアレントになります。メニューが作成されると、このメニューがメニュー項目のデフォルト ペアレントになります。
デフォルト ペアレントは、新しい親を作成することにより暗黙的に変更することもできますし、「setParent」コマンドを使用して明示的に変更することもできます。メニューのデフォルト ペアレントを変更するには、「-m/menu」フラグを使用します。親をウィンドウまたはメニュー バー レイアウトに設定すると、メニューとレイアウト両方のデフォルト ペアレントが設定されます。次の短いサンプル コードでは、レイアウトのデフォルト ペアレントの使用法を表しています。
window ExampleWindow1;
columnLayout;
button -label "Button 1";
button -label "Button 2";
rowColumnLayout -numberOfColumns 2;
text -label "Name:";
textField;
text -label "City:";
textField;
setParent ..;
checkBox -label "Lights ";
checkBox -label "Camera ";
checkBox -label "Action ";
showWindow ExampleWindow1;
「text」要素と「textField」要素は rowColumnLayout の子です。rowColumnLayout によってこれらは 2 列になるように配置されています。「setParent ..」コマンドが使用されていなければ、デフォルト ペアレントは rowColumnLayout のままで、チェック ボックスは 2 列にレイアウトされます。これをわかりやすく表すための次の例は、前の例と同じですが、「setParent」コマンドがコメントになっています。
スクリプト 2. デフォルト ペアレント レイアウトでの setParent コマンドの効果
window ExampleWindow2;
columnLayout;
button -label "Button 1";
button -label "Button 2";
rowColumnLayout -numberOfColumns 2;
text -label "Name:";
textField;
text -label "City:";
textField;
//setParent ..;
checkBox -label "Lights ";
checkBox -label "Camera ";
checkBox -label "Action ";
showWindow ExampleWindow2;
「setParent」コマンドはフラグとして「-up」や「-top」を受け取り、1 レベル上の階層や一番上の階層に移動したりすることができます。また、たとえば「setParent <windowOrLayoutName>;」のように、新しいデフォルト ペアレントを明示的に指定することもできます。「setParent」コマンドを「setParent -query」のように使用すると、現在の親を照会することも可能です。
window -menuBar true ExampleWindow3;
menu -label "File" TestFileMenu;
menuItem -label "Open" menuItem1;
menuItem -label "Close" menuItem2;
menuItem -label "Quit" menuItem3;
menu -label "Edit" TestEditMenu;
menuItem -label "Cut" menuItem1;
menuItem -label "Copy" menuItem2;
menuItem -label "Paste" menuItem3;
menu -label "Options" TestOptionsMenu;
menuItem -label "Color" -subMenu true menuItem1;
menuItem -label "Red";
menuItem -label "Green";
menuItem -label "Blue";
setParent -menu ..;
menuItem -label "Size" -subMenu true menuItem2;
menuItem -label "Small";
menuItem -label "Medium";
menuItem -label "Large";
setParent -menu ..;
showWindow ExampleWindow3;
UI 要素を作成するコマンドはすべて、要素の親を明示的に指定する「-p/parent parentName」フラグを受け付けます。このフラグは常に、デフォルト ペアレントに優先されます。
コレクションはまた別の扱いをされます。コレクションでは、現在のレイアウトがデフォルト ペアレントとして使用されます。また、明示的に親を指定するための「-p/parent」フラグを使用することもできます。しかし、コレクションには、ウィンドウをスパンする機能があり、「-g/global」フラグでこの動作を選択できます。「-g/global」フラグを使用した場合、コレクションは親を持ちません。コレクションが親を持つのは、コレクションを削除しやすくする場合だけです。親が削除されると、コレクションも同時に削除されます。グローバル コレクションは、明示的に削除する必要があります。