@@ -67,10 +67,21 @@ void EditorContextMenuPlugin::add_context_menu_item_from_shortcut(const String &
6767 context_menu_items.insert (p_name, item);
6868}
6969
70+ void EditorContextMenuPlugin::add_context_submenu_item (const String &p_name, PopupMenu *p_menu, const Ref<Texture2D> &p_texture) {
71+ ERR_FAIL_NULL (p_menu);
72+
73+ ContextMenuItem item;
74+ item.item_name = p_name;
75+ item.icon = p_texture;
76+ item.submenu = p_menu;
77+ context_menu_items.insert (p_name, item);
78+ }
79+
7080void EditorContextMenuPlugin::_bind_methods () {
7181 ClassDB::bind_method (D_METHOD (" add_menu_shortcut" , " shortcut" , " callback" ), &EditorContextMenuPlugin::add_menu_shortcut);
7282 ClassDB::bind_method (D_METHOD (" add_context_menu_item" , " name" , " callback" , " icon" ), &EditorContextMenuPlugin::add_context_menu_item, DEFVAL (Ref<Texture2D>()));
7383 ClassDB::bind_method (D_METHOD (" add_context_menu_item_from_shortcut" , " name" , " shortcut" , " icon" ), &EditorContextMenuPlugin::add_context_menu_item_from_shortcut, DEFVAL (Ref<Texture2D>()));
84+ ClassDB::bind_method (D_METHOD (" add_context_submenu_item" , " name" , " menu" , " icon" ), &EditorContextMenuPlugin::add_context_submenu_item, DEFVAL (Ref<Texture2D>()));
7485
7586 GDVIRTUAL_BIND (_popup_menu, " paths" );
7687
@@ -117,12 +128,17 @@ void EditorContextMenuPluginManager::add_options_from_plugins(PopupMenu *p_popup
117128 EditorContextMenuPlugin::ContextMenuItem &item = E.value ;
118129 item.id = id;
119130
120- if (item.icon .is_valid ()) {
121- p_popup->add_icon_item (item.icon , item.item_name , id);
122- p_popup->set_item_icon_max_width (-1 , icon_size);
131+ if (item.submenu ) {
132+ p_popup->add_submenu_node_item (item.item_name , item.submenu , id);
123133 } else {
124134 p_popup->add_item (item.item_name , id);
125135 }
136+
137+ if (item.icon .is_valid ()) {
138+ p_popup->set_item_icon (-1 , item.icon );
139+ p_popup->set_item_icon_max_width (-1 , icon_size);
140+ }
141+
126142 if (item.shortcut .is_valid ()) {
127143 p_popup->set_item_shortcut (-1 , item.shortcut , true );
128144 }
0 commit comments