26
26
27
27
import bpy
28
28
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
+
30
37
from sverchok .utils import get_node_class_reference
31
38
from sverchok .utils .extra_categories import get_extra_categories
32
39
from sverchok .ui .sv_icons import node_icon , icon , get_icon_switch , custom_icon
33
40
from sverchok .ui import presets
41
+ import nodeitems_utils
34
42
# from nodeitems_utils import _node_categories
35
43
36
44
sv_tree_types = {'SverchCustomTreeType' , 'SverchGroupTreeType' }
@@ -75,7 +83,7 @@ def category_has_nodes(cat_name):
75
83
["NODEVIEW_MT_AddScene" , 'SCENE_DATA' ],
76
84
["NODEVIEW_MT_AddExchange" , 'SCENE_DATA' ],
77
85
["NODEVIEW_MT_AddLayout" , 'NODETREE' ],
78
- ["NODE_MT_category_SVERCHOK_BPY_Data " , "BLENDER" ],
86
+ ["NODEVIEW_MT_AddBPYData " , "BLENDER" ],
79
87
["separator" ],
80
88
["NODEVIEW_MT_AddScript" , "WORDWRAP_ON" ],
81
89
["NODEVIEW_MT_AddNetwork" , "SYSTEM" ],
@@ -163,8 +171,8 @@ def draw(self, context):
163
171
layout = self .layout
164
172
layout .operator_context = 'INVOKE_REGION_WIN'
165
173
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' )
168
176
169
177
for item in menu_structure :
170
178
if item [0 ] == 'separator' :
@@ -211,6 +219,14 @@ def draw(self, context):
211
219
layout_draw_categories (self .layout , self .bl_label , node_cats [self .bl_label ])
212
220
layout .menu ("NODEVIEW_MT_AddGeneratorsExt" , ** icon ('PLUGIN' ))
213
221
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
+
214
230
class NODEVIEW_MT_AddModifiers (bpy .types .Menu ):
215
231
bl_label = "Modifiers"
216
232
@@ -276,6 +292,41 @@ def draw(self, context):
276
292
layout .operator ('node.add_node_output_input' , text = "Group output" ).node_type = 'output'
277
293
layout .operator ('node.add_group_tree_from_selected' )
278
294
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
+
279
330
280
331
extra_category_menu_classes = dict ()
281
332
@@ -308,8 +359,10 @@ def draw(self, context):
308
359
NODEVIEW_MT_AddListOps ,
309
360
NODEVIEW_MT_AddModifiers ,
310
361
NODEVIEW_MT_AddGenerators ,
362
+ NODEVIEW_MT_AddBPYData ,
311
363
NODEVIEW_MT_AddPresetOps ,
312
364
NODE_MT_category_SVERCHOK_GROUP ,
365
+ NODE_MT_category_SVERCHOK_MONAD ,
313
366
# like magic.
314
367
# make | NODEVIEW_MT_Add + class name , menu name
315
368
make_class ('GeneratorsExt' , "Generators Extended" ),
@@ -351,15 +404,27 @@ def draw(self, context):
351
404
make_class ('Alphas' , "Alpha Nodes" ),
352
405
# NODEVIEW_MT_Solids_Special_Menu
353
406
]
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 )
354
420
355
421
def register ():
356
- #global menu_class_by_title
357
- #menu_class_by_title = dict()
358
422
359
423
for category in presets .get_category_names ():
360
424
make_preset_category_menu (category )
361
425
for class_name in classes :
362
426
bpy .utils .register_class (class_name )
427
+ bpy .types .NODE_MT_add .append (sv_draw_menu )
363
428
364
429
def unregister ():
365
430
global menu_class_by_title
@@ -369,5 +434,5 @@ def unregister():
369
434
for category in presets .get_category_names ():
370
435
if category in preset_category_menus :
371
436
bpy .utils .unregister_class (preset_category_menus [category ])
372
-
437
+ bpy . types . NODE_MT_add . remove ( sv_draw_menu )
373
438
menu_class_by_title = dict ()
0 commit comments