将看到用于指 UI 元素和 ELF 命令的术语“父对象”和“子对象”。在该上下文中,父对象只是一个包含其他 UI 元素的 UI 元素,而子对象是包含在父对象中的元素。一个父对象的子对象也可以是其他子对象的父对象。
窗口是层次的最顶层父对象。层次中的其他元素可以是布局、控件、菜单、菜单项等。层次可以是任意深的,因为布局可以包含其他布局,菜单项可以包含子菜单。
为简化窗口的创建并减少脚本 ELF 命令中的混乱,请了解默认父对象的概念。这意味着不必为每个创建的元素显式指定父对象。创建一个窗口后,该窗口将成为所有后续菜单或控件的默认父对象。新的 UI 元素将一直显示在该窗口内部,直到显式更改了默认父对象(使用 setParent 命令)或创建了另一个窗口为止。
布局和菜单有不同的默认父对象。窗口是控件的初始默认父对象,并且如果该窗口是使用菜单栏创建的,那么它也是菜单的初始默认父对象。创建一个布局后,该布局将成为布局和控件的新默认父对象。创建一个菜单栏布局后,该菜单栏布局将成为菜单的新默认父对象。创建一个菜单后,该菜单将成为菜单项的默认父对象。
默认父对象可以通过创建新父对象隐式进行更改,或者可以通过使用“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;
“文本”元素和“文本字段”元素是行列布局的子对象。按照行列布局,它们排列在两列中。如果未使用“setParent ..”命令,那么默认父对象将继续是行列布局,且复选框也会在两个列中进行布局。为了进行演示,以下示例与上一个示例相同,除了已将“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”标志以分别将层次向上移动一个级别,或移动到层次的顶层。类似地,还可以显式指定一个新默认父对象,例如“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”标志时,集合将没有父对象。为集合设置父对象仅仅是为了方便其删除。如果删除了该父对象,也将删除该集合。全局集合必须显式删除。