Skip to content

Commit 49bf489

Browse files
authored
Add menu fix (#3959)
* add menu fix * Almost perfect * seems done * Deleting Monkey Patch * remove unnecesary import * cleaning * cleaning 2
1 parent 8a08f15 commit 49bf489

File tree

4 files changed

+79
-82
lines changed

4 files changed

+79
-82
lines changed

__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
from sverchok.core import reload_event, handle_reload_event
7070
from sverchok.utils import utils_modules
7171
from sverchok.ui import ui_modules
72-
from sverchok.ui.nodeview_add_menu import perform_menu_monkey_patch
72+
7373
from sverchok.utils.profile import profiling_startup
7474

7575
imported_modules = init_architecture(__name__, utils_modules, ui_modules)
@@ -92,7 +92,7 @@ def register():
9292
if reload_event:
9393
data_structure.RELOAD_EVENT = True
9494
menu.reload_menu()
95-
# perform_menu_monkey_patch() <-- this hijacks other custom node trees
95+
9696

9797
def unregister():
9898
sverchok.utils.clear_node_classes()

menu.py

+5-10
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ def make_categories():
485485
items=node_items))
486486
node_count += len(nodes)
487487
node_categories.append(SverchNodeCategory("SVERCHOK_MONAD", "Monad", items=sv_group_items))
488-
488+
SverchNodeItem.new('SvMonadInfoNode')
489489
return node_categories, node_count, original_categories
490490

491491
def register_node_panels(identifier, std_menu):
@@ -593,11 +593,10 @@ def unregister_node_panels():
593593

594594
def reload_menu():
595595
menu, node_count, original_categories = make_categories()
596-
if 'SVERCHOK' in nodeitems_utils._node_categories:
596+
if hasattr(bpy.types, "SV_PT_NodesTPanel"):
597597
unregister_node_panels()
598-
nodeitems_utils.unregister_node_categories("SVERCHOK")
599598
unregister_node_add_operators()
600-
nodeitems_utils.register_node_categories("SVERCHOK", menu)
599+
601600
register_node_panels("SVERCHOK", menu)
602601
register_node_add_operators()
603602

@@ -632,10 +631,8 @@ def register():
632631
global logger
633632
logger = getLogger("menu")
634633
menu, node_count, original_categories = make_categories()
635-
if 'SVERCHOK' in nodeitems_utils._node_categories:
634+
if hasattr(bpy.types, "SV_PT_NodesTPanel"):
636635
unregister_node_panels()
637-
nodeitems_utils.unregister_node_categories("SVERCHOK")
638-
nodeitems_utils.register_node_categories("SVERCHOK", menu)
639636

640637
categories = [(category.identifier, category.name, category.name, i) for i, category in enumerate(menu)]
641638
bpy.types.Scene.sv_selected_category = bpy.props.EnumProperty(
@@ -656,9 +653,7 @@ def register():
656653
print(f"sv: {node_count} nodes.")
657654

658655
def unregister():
659-
if 'SVERCHOK' in nodeitems_utils._node_categories:
660-
unregister_node_panels()
661-
nodeitems_utils.unregister_node_categories("SVERCHOK")
656+
unregister_node_panels()
662657
unregister_node_add_operators()
663658
bpy.utils.unregister_class(SvResetNodeSearchOperator)
664659
del bpy.types.Scene.sv_selected_category

ui/nodeview_add_menu.py

-63
This file was deleted.

ui/nodeview_space_menu.py

+72-7
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,19 @@
2626

2727
import bpy
2828

29-
from sverchok.menu import make_node_cats, draw_add_node_operator, is_submenu_call, get_submenu_call_name, compose_submenu_name
29+
from sverchok.menu import (
30+
make_node_cats,
31+
draw_add_node_operator,
32+
is_submenu_call,
33+
get_submenu_call_name,
34+
compose_submenu_name,
35+
draw_node_ops as monad_node_ops)
36+
3037
from sverchok.utils import get_node_class_reference
3138
from sverchok.utils.extra_categories import get_extra_categories
3239
from sverchok.ui.sv_icons import node_icon, icon, get_icon_switch, custom_icon
3340
from sverchok.ui import presets
41+
import nodeitems_utils
3442
# from nodeitems_utils import _node_categories
3543

3644
sv_tree_types = {'SverchCustomTreeType', 'SverchGroupTreeType'}
@@ -75,7 +83,7 @@ def category_has_nodes(cat_name):
7583
["NODEVIEW_MT_AddScene", 'SCENE_DATA'],
7684
["NODEVIEW_MT_AddExchange", 'SCENE_DATA'],
7785
["NODEVIEW_MT_AddLayout", 'NODETREE'],
78-
["NODE_MT_category_SVERCHOK_BPY_Data", "BLENDER"],
86+
["NODEVIEW_MT_AddBPYData", "BLENDER"],
7987
["separator"],
8088
["NODEVIEW_MT_AddScript", "WORDWRAP_ON"],
8189
["NODEVIEW_MT_AddNetwork", "SYSTEM"],
@@ -163,8 +171,8 @@ def draw(self, context):
163171
layout = self.layout
164172
layout.operator_context = 'INVOKE_REGION_WIN'
165173

166-
if self.bl_idname == 'NODEVIEW_MT_Dynamic_Menu':
167-
layout.operator("node.sv_extra_search", text="Search", icon='OUTLINER_DATA_FONT')
174+
# if self.bl_idname == 'NODEVIEW_MT_Dynamic_Menu':
175+
layout.operator("node.sv_extra_search", text="Search", icon='OUTLINER_DATA_FONT')
168176

169177
for item in menu_structure:
170178
if item[0] == 'separator':
@@ -211,6 +219,14 @@ def draw(self, context):
211219
layout_draw_categories(self.layout, self.bl_label, node_cats[self.bl_label])
212220
layout.menu("NODEVIEW_MT_AddGeneratorsExt", **icon('PLUGIN'))
213221

222+
class NODEVIEW_MT_AddBPYData(bpy.types.Menu):
223+
bl_label = "BPY Data"
224+
225+
def draw(self, context):
226+
layout = self.layout
227+
layout_draw_categories(self.layout, self.bl_label, node_cats['BPY Data'])
228+
layout_draw_categories(self.layout, self.bl_label, node_cats['Objects'])
229+
214230
class NODEVIEW_MT_AddModifiers(bpy.types.Menu):
215231
bl_label = "Modifiers"
216232

@@ -276,6 +292,41 @@ def draw(self, context):
276292
layout.operator('node.add_node_output_input', text="Group output").node_type = 'output'
277293
layout.operator('node.add_group_tree_from_selected')
278294

295+
class NODE_MT_category_SVERCHOK_MONAD(bpy.types.Menu):
296+
bl_label = "Monad"
297+
label = 'Monad'
298+
299+
def draw(self, context):
300+
301+
if context is None:
302+
return
303+
space = context.space_data
304+
if not space:
305+
return
306+
ntree = space.edit_tree
307+
if not ntree:
308+
return
309+
layout = self.layout
310+
311+
monad_node_ops(self, layout, context)
312+
313+
if ntree.bl_idname == "SverchGroupTreeType":
314+
draw_add_node_operator(layout, "SvMonadInfoNode")
315+
layout.separator()
316+
317+
for monad in context.blend_data.node_groups:
318+
if monad.bl_idname != "SverchGroupTreeType":
319+
continue
320+
if monad.name == ntree.name:
321+
continue
322+
# make sure class exists
323+
cls_ref = get_node_class_reference(monad.cls_bl_idname)
324+
325+
if cls_ref and monad.cls_bl_idname and monad.cls_bl_idname:
326+
op = layout.operator('node.add_node', text=monad.name)
327+
op.type = monad.cls_bl_idname
328+
op.use_transform = True
329+
279330

280331
extra_category_menu_classes = dict()
281332

@@ -308,8 +359,10 @@ def draw(self, context):
308359
NODEVIEW_MT_AddListOps,
309360
NODEVIEW_MT_AddModifiers,
310361
NODEVIEW_MT_AddGenerators,
362+
NODEVIEW_MT_AddBPYData,
311363
NODEVIEW_MT_AddPresetOps,
312364
NODE_MT_category_SVERCHOK_GROUP,
365+
NODE_MT_category_SVERCHOK_MONAD,
313366
# like magic.
314367
# make | NODEVIEW_MT_Add + class name , menu name
315368
make_class('GeneratorsExt', "Generators Extended"),
@@ -351,15 +404,27 @@ def draw(self, context):
351404
make_class('Alphas', "Alpha Nodes"),
352405
# NODEVIEW_MT_Solids_Special_Menu
353406
]
407+
def sv_draw_menu(self, context):
408+
409+
tree_type = context.space_data.tree_type
410+
if not tree_type in sv_tree_types:
411+
return
412+
layout = self.layout
413+
layout.operator_context = "INVOKE_DEFAULT"
414+
415+
if not any([(g.bl_idname in sv_tree_types) for g in bpy.data.node_groups]):
416+
layout.operator("node.new_node_tree", text="New Sverchok Node Tree", icon="RNA_ADD")
417+
return
418+
419+
NODEVIEW_MT_Dynamic_Menu.draw(self, context)
354420

355421
def register():
356-
#global menu_class_by_title
357-
#menu_class_by_title = dict()
358422

359423
for category in presets.get_category_names():
360424
make_preset_category_menu(category)
361425
for class_name in classes:
362426
bpy.utils.register_class(class_name)
427+
bpy.types.NODE_MT_add.append(sv_draw_menu)
363428

364429
def unregister():
365430
global menu_class_by_title
@@ -369,5 +434,5 @@ def unregister():
369434
for category in presets.get_category_names():
370435
if category in preset_category_menus:
371436
bpy.utils.unregister_class(preset_category_menus[category])
372-
437+
bpy.types.NODE_MT_add.remove(sv_draw_menu)
373438
menu_class_by_title = dict()

0 commit comments

Comments
 (0)