熟悉的配方,通用的使用方法
除了在编辑器界面上添加菜单项,我们通过TAPython创建的Chameleon Tools中的部分Slate组件也支持右键菜单,用户可以通过右键菜单对当前选中的Item进行操作。
添加的方法是在对应的Slate控件中添加"OnContextMenuOpening"
字段,字段中的内容格式和Pre-defined Menu Entry等菜单设置格式是一致的。
以下这些控件支持右键菜单
支持的控件¶
支持的控件注意分为以下三类
文本输入控件¶
- SEditableTextBox
"SEditableTextBox":
{
"Text": "",
"SelectAllTextWhenFocused": true,
"HintText": "Type some thing, and press enter",
"OnTextChanged": "print(%)",
"OnTextCommitted": "print('input text: {}'.format(%))",
"OnContextMenuOpening":
{
"items":
[
{
"name": "ContextMenu A1",
"Command": "print ('ContextMenu A')",
"icon": {
"style": "EditorStyle",
"name": "LevelEditor.Tabs.Details"
}
},
{
"name": "ContextMenu B1",
"Command": "print ('ContextMenu B')",
"icon": { "style": "ChameleonStyle", "name": "Flash"}
}
]
}
}
在Command中可以触发Python工具中的某个函数,通过“Aka”名获取、修改控件中当前的内容。
下面其他的类型的文本控件也是类似的设置方法。事实上它们有着类似的继承关系。
-
SEditableText
-
SEditableTextBox
-
SMultiLineEditableText
-
SMultiLineEditableTextBox
SListView¶
SListView中的Context Menu是很实用的。例如,下面的Object Manager中就可以通过右键菜单对选中的Item进行操作。
"SListView":
{
"ItemHeight": 1,
"Aka": "SubNameList",
"ListItemsSource": [],
"SHeaderRow": {
"Columns":
[
{
"DefaultLabel": "SubName",
"FillWidth": 1
}
]
},
"OnContextMenuOpening": {
"items": [
{
"name": "Spawn this Category",
"Command": "chameleon_object_manager.SpawnCurrentSubCategoryPrefabs()"
},
{
"name": "Spawn this Category with LODs",
"Command": "chameleon_object_manager.SpawnCurrentSubCategoryPrefabs(bSpawnAtSelection=True, bSpawnAllLOD=True)"
},
{
"name": "Generate Mesh",
"Command": "chameleon_object_manager.generate_mesh_for_sub_categorys()"
}
]
},
"OnSelectionChanged": "chameleon_object_manager.ui_on_listview_SubNameList_selected_changed(%index)",
"OnMouseButtonDoubleClick": "chameleon_object_manager.ui_on_listview_SubNameList_double_click(%index)"
}
和文本输出框一样,我们可以通过chameleon_data_instance.get_selected_item_in_view_list
获取当前选中的Item,然后对其进行操作。例如下面的代码中的self.data.get_selected_item_in_view_list
,将会返回整个SListView中的Item项,和它们是否被选中的状态。
def get_selected_item_in_view_list(self, ui_name):
items, isSelected = self.data.get_list_view_items(ui_name)
...
除了通过get_selected_item_in_view_list
这个方法以外,我们也可以在"OnSelectionChanged"
和"OnMouseButtonDoubleClick"
中获取用户的选择操作。然后在Python代码中记录下"当前状态"。
TIP
"OnContextMenuOpening"中没有%index
这样的变量占位符,可以理解为触发了一个事件,至于是哪个Item触发的,需要在Python中获取。
STreeView¶
STeeView 和 SListView的使用方法是一样的,只是它是一个树形结构的控件。我们可以用同样的方式为它加上右键菜单。