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