File headers: use SPDX license identifiers
[blender-addons.git] / space_view3d_spacebar_menu / __init__.py
blobb7a7670894dc34b14637d07a212d6543a72eae0c
1 # SPDX-License-Identifier: GPL-2.0-or-later
2 # Contributed to by: meta-androcto, JayDez, sim88, sam, lijenstina, mkb, wisaac, CoDEmanX.
4 bl_info = {
5 "name": "Dynamic Context Menu",
6 "author": "meta-androcto",
7 "version": (1, 9, 4),
8 "blender": (2, 80, 0),
9 "location": "View3D > Spacebar",
10 "description": "Object Mode Context Sensitive Spacebar Menu",
11 "warning": "",
12 "doc_url": "{BLENDER_MANUAL_URL}/addons/interface/context_menu.html",
13 "category": "Interface",
16 if "bpy" in locals():
17 import importlib
18 importlib.reload(object_menus)
19 importlib.reload(edit_mesh)
20 importlib.reload(transform_menus)
21 importlib.reload(view_menus)
22 importlib.reload(armature_menus)
23 importlib.reload(curve_menus)
24 importlib.reload(snap_origin_cursor)
25 importlib.reload(animation_menus)
27 else:
28 from . import object_menus
29 from . import edit_mesh
30 from . import transform_menus
31 from . import view_menus
32 from . import armature_menus
33 from . import curve_menus
34 from . import snap_origin_cursor
35 from . import animation_menus
38 import bpy
39 from bpy.types import (
40 Operator,
41 Menu,
42 AddonPreferences,
44 from bpy.props import (
45 BoolProperty,
46 StringProperty,
50 # Dynamic Context Sensitive Menu #
51 # Main Menu based on Object Type & 3d View Editor Mode #
53 class VIEW3D_MT_Space_Dynamic_Menu(Menu):
54 bl_label = "Dynamic Context Menu"
56 def draw(self, context):
57 layout = self.layout
58 settings = context.tool_settings
59 layout.operator_context = 'INVOKE_REGION_WIN'
60 obj = context.active_object
61 view = context.space_data
63 # No Object Selected #
64 ob = bpy.context.object
65 if not ob or not ob.select_get():
67 layout.operator_context = 'INVOKE_REGION_WIN'
68 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
69 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
70 layout.menu("VIEW3D_MT_Animation_Player",
71 text="Animation", icon='PLAY')
72 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
73 UseSeparator(self, context)
74 layout.menu("INFO_MT_area", icon='WORKSPACE')
75 layout.menu("VIEW3D_MT_view_viewpoint", icon='ZOOM_ALL')
76 layout.menu("VIEW3D_MT_view_navigation", icon='PIVOT_BOUNDBOX')
77 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
78 UseSeparator(self, context)
79 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
80 UseSeparator(self, context)
81 layout.operator("view3d.snap_cursor_to_center",
82 text="Cursor to World Origin")
83 layout.operator("view3d.snap_cursor_to_grid",
84 text="Cursor to Grid")
85 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
86 UseSeparator(self, context)
87 layout.prop(view, "show_region_toolbar", icon='MENU_PANEL')
88 layout.prop(view, "show_region_ui", icon='MENU_PANEL')
90 else:
91 # Mesh Object Mode #
93 if obj and obj.type == 'MESH' and obj.mode in {'OBJECT'}:
95 layout.operator_context = 'INVOKE_REGION_WIN'
96 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
97 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
98 layout.menu("VIEW3D_MT_Animation_Player",
99 text="Animation", icon='PLAY')
100 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
101 layout.menu("VIEW3D_MT_InteractiveMode", icon='VIEW3D')
102 UseSeparator(self, context)
103 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
104 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
105 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
106 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
107 UseSeparator(self, context)
108 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
109 layout.menu("VIEW3D_MT_TransformMenu", icon='EMPTY_ARROWS')
110 layout.menu("VIEW3D_MT_CursorMenu", icon='PIVOT_CURSOR')
111 UseSeparator(self, context)
112 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
113 UseSeparator(self, context)
114 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
115 UseSeparator(self, context)
116 layout.operator("object.delete", text="Delete Object", icon='X')
117 UseSeparator(self, context)
118 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
120 # Mesh Edit Mode #
121 if obj and obj.type == 'MESH' and obj.mode in {'EDIT'}:
123 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
124 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
125 layout.menu("VIEW3D_MT_Animation_Player",
126 text="Animation", icon='PLAY')
127 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
128 layout.menu("VIEW3D_MT_InteractiveMode", icon='EDITMODE_HLT')
129 layout.menu("VIEW3D_MT_Edit_Multi", icon='VERTEXSEL')
130 UseSeparator(self, context)
131 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
132 layout.menu("VIEW3D_MT_select_edit_mesh", icon='RESTRICT_SELECT_OFF')
133 layout.menu("VIEW3D_MT_mesh_add", text="Add Mesh", icon='MESH_CUBE')
134 layout.menu("VIEW3D_MT_edit_mesh", text="Mesh", icon='MESH_DATA')
135 UseSeparator(self, context)
136 layout.menu("VIEW3D_MT_edit_mesh_vertices", icon='VERTEXSEL')
137 layout.menu("VIEW3D_MT_edit_mesh_edges", icon='EDGESEL')
138 layout.menu("VIEW3D_MT_edit_mesh_faces", icon='FACESEL')
139 UseSeparator(self, context)
140 layout.menu("VIEW3D_MT_uv_map", icon='MOD_UVPROJECT')
141 UseSeparator(self, context)
142 layout.menu("VIEW3D_MT_EditCursorMenu", icon='PIVOT_CURSOR')
143 UseSeparator(self, context)
144 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
145 UseSeparator(self, context)
146 layout.menu("VIEW3D_MT_edit_mesh_delete", icon='X')
147 UseSeparator(self, context)
148 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
150 # Sculpt Mode #
151 if obj and obj.type == 'MESH' and obj.mode in {'SCULPT'}:
153 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
154 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
155 layout.menu("VIEW3D_MT_Animation_Player",
156 text="Animation", icon='PLAY')
157 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
158 layout.menu("VIEW3D_MT_InteractiveMode", icon='EDITMODE_HLT')
159 UseSeparator(self, context)
160 layout.menu("VIEW3D_MT_view", icon='ZOOM_ALL')
161 layout.menu("VIEW3D_MT_sculpt", icon='SCULPTMODE_HLT')
162 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
164 # Vertex Paint #
165 if obj and obj.type == 'MESH' and obj.mode in {'VERTEX_PAINT'}:
167 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
168 layout.menu("VIEW3D_MT_Animation_Player",
169 text="Animation", icon='PLAY')
170 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
171 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
172 layout.menu("VIEW3D_MT_InteractiveMode", icon='EDITMODE_HLT')
173 UseSeparator(self, context)
174 layout.menu("VIEW3D_MT_view", icon='ZOOM_ALL')
175 layout.menu("VIEW3D_MT_paint_vertex", icon='VPAINT_HLT')
176 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
178 # Weight Paint Menu #
179 if obj and obj.type == 'MESH' and obj.mode in {'WEIGHT_PAINT'}:
181 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
182 layout.menu("VIEW3D_MT_Animation_Player",
183 text="Animation", icon='PLAY')
184 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
185 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
186 layout.menu("VIEW3D_MT_InteractiveMode", icon='EDITMODE_HLT')
187 UseSeparator(self, context)
188 layout.menu("VIEW3D_MT_view", icon='ZOOM_ALL')
189 layout.menu("VIEW3D_MT_paint_weight", icon='WPAINT_HLT')
190 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
192 # Texture Paint #
193 if obj and obj.type == 'MESH' and obj.mode in {'TEXTURE_PAINT'}:
195 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
196 layout.menu("VIEW3D_MT_Animation_Player",
197 text="Animation", icon='PLAY')
198 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
199 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
200 layout.menu("VIEW3D_MT_InteractiveMode", icon='EDITMODE_HLT')
201 UseSeparator(self, context)
202 layout.menu("VIEW3D_MT_view", icon='ZOOM_ALL')
203 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
205 # Curve Object Mode #
206 if obj and obj.type == 'CURVE' and obj.mode in {'OBJECT'}:
208 layout.operator_context = 'INVOKE_REGION_WIN'
209 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
210 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
211 layout.menu("VIEW3D_MT_Animation_Player",
212 text="Animation", icon='PLAY')
213 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
214 layout.menu("VIEW3D_MT_Object_Interactive_Other", icon='OBJECT_DATA')
215 UseSeparator(self, context)
216 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
217 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
218 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
219 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
220 UseSeparator(self, context)
221 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
222 layout.menu("VIEW3D_MT_TransformMenu", icon='EMPTY_ARROWS')
223 layout.menu("VIEW3D_MT_CursorMenu", icon='PIVOT_CURSOR')
224 UseSeparator(self, context)
225 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
226 UseSeparator(self, context)
227 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
228 UseSeparator(self, context)
229 layout.operator("object.delete", text="Delete Object", icon='X')
230 UseSeparator(self, context)
231 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
233 # Edit Curve #
234 if obj and obj.type == 'CURVE' and obj.mode in {'EDIT'}:
236 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
237 layout.menu("VIEW3D_MT_Animation_Player",
238 text="Animation", icon='PLAY')
239 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
240 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
241 layout.menu("VIEW3D_MT_Object_Interactive_Other", icon='OBJECT_DATA')
242 UseSeparator(self, context)
243 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
244 layout.menu("VIEW3D_MT_select_edit_curve",
245 icon='RESTRICT_SELECT_OFF')
246 layout.menu("VIEW3D_MT_curve_add", text="Add Curve",
247 icon='OUTLINER_OB_CURVE')
248 UseSeparator(self, context)
249 layout.menu("VIEW3D_MT_Edit_Curve", icon='CURVE_DATA')
250 layout.menu("VIEW3D_MT_transform", icon='EMPTY_ARROWS')
251 layout.menu("VIEW3D_MT_CursorMenu", icon='PIVOT_CURSOR')
252 layout.menu("VIEW3D_MT_edit_curve_ctrlpoints",
253 icon='CURVE_BEZCURVE')
254 UseSeparator(self, context)
255 layout.menu("VIEW3D_MT_edit_curve_delete", text="Delete",
256 icon='X')
257 UseSeparator(self, context)
258 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
260 # Surface Object Mode #
261 if obj and obj.type == 'SURFACE' and obj.mode in {'OBJECT'}:
263 layout.operator_context = 'INVOKE_REGION_WIN'
264 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
265 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
266 layout.menu("VIEW3D_MT_Animation_Player",
267 text="Animation", icon='PLAY')
268 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
269 layout.menu("VIEW3D_MT_Object_Interactive_Other", icon='OBJECT_DATA')
270 UseSeparator(self, context)
271 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
272 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
273 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
274 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
275 UseSeparator(self, context)
276 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
277 layout.menu("VIEW3D_MT_TransformMenu", icon='EMPTY_ARROWS')
278 layout.menu("VIEW3D_MT_CursorMenu", icon='PIVOT_CURSOR')
279 UseSeparator(self, context)
280 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
281 UseSeparator(self, context)
282 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
283 UseSeparator(self, context)
284 layout.operator("object.delete", text="Delete Object", icon='X')
285 UseSeparator(self, context)
286 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
288 # Edit Surface #
289 if obj and obj.type == 'SURFACE' and obj.mode in {'EDIT'}:
291 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
292 layout.menu("VIEW3D_MT_Animation_Player",
293 text="Animation", icon='PLAY')
294 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
295 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
296 layout.menu("VIEW3D_MT_Object_Interactive_Other", icon='OBJECT_DATA')
297 UseSeparator(self, context)
298 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
299 layout.menu("VIEW3D_MT_select_edit_surface", icon='RESTRICT_SELECT_OFF')
300 layout.menu("VIEW3D_MT_surface_add", text="Add Surface",
301 icon='OUTLINER_OB_SURFACE')
302 UseSeparator(self, context)
303 layout.menu("VIEW3D_MT_Edit_Curve", icon='CURVE_DATA')
304 layout.menu("VIEW3D_MT_transform", icon='EMPTY_ARROWS')
305 layout.menu("VIEW3D_MT_CursorMenu", icon='PIVOT_CURSOR')
306 layout.menu("VIEW3D_MT_edit_curve_ctrlpoints",
307 icon='CURVE_BEZCURVE')
308 UseSeparator(self, context)
309 layout.menu("VIEW3D_MT_edit_curve_delete", text="Delete",
310 icon='X')
311 UseSeparator(self, context)
312 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
315 # Metaball Object Mode #
316 if obj and obj.type == 'META' and obj.mode in {'OBJECT'}:
318 layout.operator_context = 'INVOKE_REGION_WIN'
319 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
320 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
321 layout.menu("VIEW3D_MT_Animation_Player",
322 text="Animation", icon='PLAY')
323 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
324 layout.menu("VIEW3D_MT_Object_Interactive_Other", icon='OBJECT_DATA')
325 UseSeparator(self, context)
326 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
327 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
328 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
329 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
330 UseSeparator(self, context)
331 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
332 layout.menu("VIEW3D_MT_TransformMenu", icon='EMPTY_ARROWS')
333 layout.menu("VIEW3D_MT_CursorMenu", icon='PIVOT_CURSOR')
334 UseSeparator(self, context)
335 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
336 UseSeparator(self, context)
337 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
338 UseSeparator(self, context)
339 layout.operator("object.delete", text="Delete Object", icon='X')
340 UseSeparator(self, context)
341 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
343 # Edit Metaball #
344 if obj and obj.type == 'META' and obj.mode in {'EDIT'}:
346 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
347 layout.menu("VIEW3D_MT_Animation_Player",
348 text="Animation", icon='PLAY')
349 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
350 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
351 layout.menu("VIEW3D_MT_Object_Interactive_Other", icon='OBJECT_DATA')
352 UseSeparator(self, context)
353 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
354 layout.menu("VIEW3D_MT_select_edit_metaball", icon='RESTRICT_SELECT_OFF')
355 layout.operator_menu_enum("object.metaball_add", "type",
356 text="Add Metaball",
357 icon='OUTLINER_OB_META')
358 UseSeparator(self, context)
359 layout.menu("VIEW3D_MT_transform", icon='EMPTY_ARROWS')
360 layout.menu("VIEW3D_MT_mirror", icon='MOD_MIRROR')
361 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
362 layout.operator("mball.duplicate_metaelems", icon='OUTLINER_DATA_META')
363 layout.menu("VIEW3D_MT_edit_meta_showhide", icon='HIDE_OFF')
364 UseSeparator(self, context)
365 layout.operator("mball.delete_metaelems", text="Delete", icon='X')
366 UseSeparator(self, context)
367 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
369 # Camera Object Mode #
370 if obj and obj.type == 'CAMERA' and obj.mode in {'OBJECT'}:
372 layout.operator_context = 'INVOKE_REGION_WIN'
373 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
374 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
375 layout.menu("VIEW3D_MT_Animation_Player",
376 text="Animation", icon='PLAY')
377 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
378 UseSeparator(self, context)
379 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
380 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
381 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
382 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
383 UseSeparator(self, context)
384 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
385 layout.menu("VIEW3D_MT_TransformMenuCamera", icon='EMPTY_ARROWS')
386 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
387 UseSeparator(self, context)
388 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
389 UseSeparator(self, context)
390 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
391 UseSeparator(self, context)
392 layout.operator("object.delete", text="Delete Object", icon='X')
393 UseSeparator(self, context)
394 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
396 # Lamp Object Mode #
397 if obj and obj.type == 'LIGHT' and obj.mode in {'OBJECT'}:
399 layout.operator_context = 'INVOKE_REGION_WIN'
400 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
401 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
402 layout.menu("VIEW3D_MT_Animation_Player",
403 text="Animation", icon='PLAY')
404 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
405 UseSeparator(self, context)
406 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
407 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
408 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
409 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
410 UseSeparator(self, context)
411 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
412 layout.menu("VIEW3D_MT_TransformMenuLite", icon='EMPTY_ARROWS')
413 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
414 UseSeparator(self, context)
415 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
416 UseSeparator(self, context)
417 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
418 UseSeparator(self, context)
419 layout.operator("object.delete", text="Delete Object", icon='X')
420 UseSeparator(self, context)
421 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
423 # Armature Object Mode #
424 if obj and obj.type == 'ARMATURE' and obj.mode in {'OBJECT'}:
426 layout.operator_context = 'INVOKE_REGION_WIN'
427 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
428 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
429 layout.menu("VIEW3D_MT_Animation_Player",
430 text="Animation", icon='PLAY')
431 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
432 layout.menu("VIEW3D_MT_Object_Interactive_Armature", icon='VIEW3D')
433 UseSeparator(self, context)
434 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
435 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
436 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
437 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
438 UseSeparator(self, context)
439 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
440 layout.menu("VIEW3D_MT_TransformMenu", icon='EMPTY_ARROWS')
441 layout.menu("VIEW3D_MT_CursorMenu", icon='PIVOT_CURSOR')
442 UseSeparator(self, context)
443 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
444 UseSeparator(self, context)
445 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
446 UseSeparator(self, context)
447 layout.operator("object.delete", text="Delete Object", icon='X')
448 UseSeparator(self, context)
449 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
451 # Armature Edit #
452 if obj and obj.type == 'ARMATURE' and obj.mode in {'EDIT'}:
454 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
455 layout.menu("VIEW3D_MT_Animation_Player",
456 text="Animation", icon='PLAY')
457 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
458 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
459 layout.menu("VIEW3D_MT_Object_Interactive_Armature", icon='VIEW3D')
460 UseSeparator(self, context)
461 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
462 layout.menu("VIEW3D_MT_select_edit_armature",
463 icon='RESTRICT_SELECT_OFF')
464 UseSeparator(self, context)
465 layout.menu("VIEW3D_MT_armature_add", text="Add Armature",
466 icon='ARMATURE_DATA')
467 layout.menu("VIEW3D_MT_Edit_Armature", text="Armature",
468 icon='OUTLINER_DATA_ARMATURE')
469 layout.menu("VIEW3D_MT_EditArmatureTK",
470 icon='ARMATURE_DATA')
471 UseSeparator(self, context)
472 layout.menu("VIEW3D_MT_transform_armature", icon='EMPTY_ARROWS')
473 layout.menu("VIEW3D_MT_mirror", icon='MOD_MIRROR')
474 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
475 layout.menu("VIEW3D_MT_object_parent")
476 layout.menu("VIEW3D_MT_edit_armature_roll",
477 icon='BONE_DATA')
478 UseSeparator(self, context)
479 layout.operator("armature.delete", text="Delete Object",
480 icon='X')
481 UseSeparator(self, context)
482 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
484 # Armature Pose #
485 if obj and obj.type == 'ARMATURE' and obj.mode in {'POSE'}:
487 arm = context.active_object.data
489 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
490 layout.menu("VIEW3D_MT_Animation_Player",
491 text="Animation", icon='PLAY')
492 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
493 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
494 layout.menu("VIEW3D_MT_Object_Interactive_Armature", icon='VIEW3D')
495 UseSeparator(self, context)
496 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
497 layout.menu("VIEW3D_MT_select_pose", icon='RESTRICT_SELECT_OFF')
498 UseSeparator(self, context)
499 layout.menu("VIEW3D_MT_Pose", icon='ARMATURE_DATA')
500 layout.menu("VIEW3D_MT_transform_armature", icon='EMPTY_ARROWS')
501 layout.menu("VIEW3D_MT_pose_transform", icon='EMPTY_DATA')
502 UseSeparator(self, context)
503 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
504 layout.menu("VIEW3D_MT_PoseCopy", icon='FILE')
506 if arm.display_type in {'BBONE', 'ENVELOPE'}:
507 layout.operator("transform.transform",
508 text="Scale Envelope Distance").mode = 'BONE_SIZE'
510 layout.menu("VIEW3D_MT_pose_apply", icon='AUTO')
511 layout.operator("pose.relax", icon='ARMATURE_DATA')
512 layout.menu("VIEW3D_MT_pose_group", icon='GROUP_BONE')
513 UseSeparator(self, context)
514 layout.operator_menu_enum("pose.constraint_add",
515 "type", text="Add Constraint", icon='CONSTRAINT_BONE')
516 UseSeparator(self, context)
517 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
519 # Lattice Object Mode #
520 if obj and obj.type == 'LATTICE' and obj.mode in {'OBJECT'}:
522 layout.operator_context = 'INVOKE_REGION_WIN'
523 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
524 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
525 layout.menu("VIEW3D_MT_Animation_Player",
526 text="Animation", icon='PLAY')
527 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
528 layout.menu("VIEW3D_MT_Object_Interactive_Other", icon='OBJECT_DATA')
529 UseSeparator(self, context)
530 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
531 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
532 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
533 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
534 UseSeparator(self, context)
535 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
536 layout.menu("VIEW3D_MT_TransformMenuLite", icon='EMPTY_ARROWS')
537 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
538 UseSeparator(self, context)
539 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
540 UseSeparator(self, context)
541 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
542 UseSeparator(self, context)
543 layout.operator("object.delete", text="Delete Object", icon='X')
544 UseSeparator(self, context)
545 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
547 # Edit Lattice #
548 if obj and obj.type == 'LATTICE' and obj.mode in {'EDIT'}:
550 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
551 layout.menu("VIEW3D_MT_Animation_Player",
552 text="Animation", icon='PLAY')
553 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
554 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
555 layout.menu("VIEW3D_MT_Object_Interactive_Other", icon='OBJECT_DATA')
556 UseSeparator(self, context)
557 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
558 layout.menu("VIEW3D_MT_select_edit_lattice",
559 icon='RESTRICT_SELECT_OFF')
560 UseSeparator(self, context)
561 layout.menu("VIEW3D_MT_TransformMenuLite", icon='EMPTY_ARROWS')
562 layout.menu("VIEW3D_MT_mirror", icon='MOD_MIRROR')
563 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
564 UseSeparator(self, context)
565 layout.operator("lattice.make_regular")
566 UseSeparator(self, context)
567 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
569 # Empty Object Mode #
570 if obj and obj.type == 'EMPTY' and obj.mode in {'OBJECT'}:
572 layout.operator_context = 'INVOKE_REGION_WIN'
573 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
574 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
575 layout.menu("VIEW3D_MT_Animation_Player",
576 text="Animation", icon='PLAY')
577 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
578 UseSeparator(self, context)
579 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
580 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
581 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
582 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
583 UseSeparator(self, context)
584 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
585 layout.menu("VIEW3D_MT_TransformMenuLite", icon='EMPTY_ARROWS')
586 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
587 UseSeparator(self, context)
588 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
589 UseSeparator(self, context)
590 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
591 UseSeparator(self, context)
592 layout.operator("object.delete", text="Delete Object", icon='X')
593 UseSeparator(self, context)
594 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
596 # Speaker Object Mode #
597 if obj and obj.type == 'SPEAKER' and obj.mode in {'OBJECT'}:
599 layout.operator_context = 'INVOKE_REGION_WIN'
600 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
601 layout.menu("VIEW3D_MT_Animation_Player",
602 text="Animation", icon='PLAY')
603 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
604 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
605 UseSeparator(self, context)
606 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
607 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
608 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
609 UseSeparator(self, context)
610 layout.menu("VIEW3D_MT_Object", icon='VIEW3D')
611 layout.menu("VIEW3D_MT_TransformMenuLite", icon='EMPTY_ARROWS')
612 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
613 UseSeparator(self, context)
614 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
615 UseSeparator(self, context)
616 layout.operator("object.delete", text="Delete Object", icon='X')
617 UseSeparator(self, context)
618 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
620 # Particle Menu #
621 if obj and context.mode == 'PARTICLE':
623 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
624 layout.menu("VIEW3D_MT_Animation_Player",
625 text="Animation", icon='PLAY')
626 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
627 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
628 layout.menu("VIEW3D_MT_InteractiveMode", icon='VIEW3D')
629 UseSeparator(self, context)
630 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
631 layout.menu("VIEW3D_MT_select_particle",
632 text="Select", icon='PARTICLE_PATH')
633 UseSeparator(self, context)
634 layout.menu("VIEW3D_MT_TransformMenu", icon='EMPTY_ARROWS')
635 layout.menu("VIEW3D_MT_mirror", icon='MOD_MIRROR')
636 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
637 UseSeparator(self, context)
638 # layout.prop_menu_enum(settings, "proportional_edit",
639 # icon="PROP_CON")
640 layout.prop_menu_enum(settings, "proportional_edit_falloff",
641 icon="SMOOTHCURVE")
642 UseSeparator(self, context)
643 layout.menu("VIEW3D_MT_particle", icon='PARTICLEMODE')
644 layout.menu("VIEW3D_MT_particle_context_menu", text="Hair Specials", icon='HAIR')
645 UseSeparator(self, context)
646 layout.operator("object.delete", text="Delete Object", icon='X')
647 UseSeparator(self, context)
648 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
650 # Grease Pencil Object Mode #
651 if obj and obj.type == 'GPENCIL' and obj.mode in {'OBJECT'}:
653 layout.operator_context = 'INVOKE_REGION_WIN'
654 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
655 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
656 layout.menu("VIEW3D_MT_Animation_Player",
657 text="Animation", icon='PLAY')
658 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
659 layout.menu("VIEW3D_MT_interactive_mode_gpencil", icon='EDITMODE_HLT')
660 UseSeparator(self, context)
661 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
662 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
663 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
664 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
665 UseSeparator(self, context)
666 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
667 layout.menu("VIEW3D_MT_TransformMenu", icon='EMPTY_ARROWS')
668 layout.menu("VIEW3D_MT_CursorMenu", icon='PIVOT_CURSOR')
669 UseSeparator(self, context)
670 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
671 UseSeparator(self, context)
672 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
673 UseSeparator(self, context)
674 layout.operator("object.delete", text="Delete Object", icon='X')
675 UseSeparator(self, context)
676 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
678 # Grease Pencil Edit Mode #
679 if obj and obj.type == 'GPENCIL' and obj.mode in {'EDIT_GPENCIL'}:
680 layout.operator_context = 'INVOKE_REGION_WIN'
682 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
683 layout.menu("VIEW3D_MT_Animation_Player",
684 text="Animation", icon='PLAY')
685 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
686 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
687 UseSeparator(self, context)
688 layout.menu("VIEW3D_MT_interactive_mode_gpencil", icon='EDITMODE_HLT')
689 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
690 layout.menu("VIEW3D_MT_select_gpencil", icon='RESTRICT_SELECT_OFF')
691 layout.menu("VIEW3D_MT_edit_gpencil", icon='GREASEPENCIL')
692 UseSeparator(self, context)
693 layout.operator("view3d.snap_cursor_to_center",
694 text="Cursor to World Origin", icon='CURSOR')
695 layout.operator("view3d.snap_cursor_to_grid",
696 text="Cursor to Grid", icon='SNAP_GRID')
697 UseSeparator(self, context)
698 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
700 # Grease Pencil Sculpt Mode #
701 if obj and obj.type == 'GPENCIL' and obj.mode in {'SCULPT_GPENCIL'}:
702 layout.operator_context = 'INVOKE_REGION_WIN'
704 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
705 layout.menu("VIEW3D_MT_Animation_Player",
706 text="Animation", icon='PLAY')
707 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
708 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
709 UseSeparator(self, context)
710 layout.menu("VIEW3D_MT_interactive_mode_gpencil", icon='EDITMODE_HLT')
711 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
712 UseSeparator(self, context)
713 layout.operator("view3d.snap_cursor_to_center",
714 text="Cursor to World Origin", icon='CURSOR')
715 layout.operator("view3d.snap_cursor_to_grid",
716 text="Cursor to Grid", icon='SNAP_GRID')
717 UseSeparator(self, context)
718 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
720 # Grease Pencil Paint Mode #
721 if obj and obj.type == 'GPENCIL' and obj.mode in {'PAINT_GPENCIL'}:
722 layout.operator_context = 'INVOKE_REGION_WIN'
724 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
725 layout.menu("VIEW3D_MT_Animation_Player",
726 text="Animation", icon='PLAY')
727 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
728 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
729 UseSeparator(self, context)
730 layout.menu("VIEW3D_MT_interactive_mode_gpencil", icon='EDITMODE_HLT')
731 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
732 layout.menu("VIEW3D_MT_paint_gpencil", icon='RESTRICT_SELECT_OFF')
733 UseSeparator(self, context)
734 layout.operator("view3d.snap_cursor_to_center",
735 text="Cursor to World Origin", icon='CURSOR')
736 layout.operator("view3d.snap_cursor_to_grid",
737 text="Cursor to Grid", icon='SNAP_GRID')
738 UseSeparator(self, context)
739 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
741 # Grease Pencil Weight Mode #
742 if obj and obj.type == 'GPENCIL' and obj.mode in {'WEIGHT_GPENCIL'}:
743 layout.operator_context = 'INVOKE_REGION_WIN'
745 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
746 layout.menu("VIEW3D_MT_Animation_Player",
747 text="Animation", icon='PLAY')
748 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
749 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
750 UseSeparator(self, context)
751 layout.menu("VIEW3D_MT_interactive_mode_gpencil", icon='EDITMODE_HLT')
752 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
753 layout.menu("VIEW3D_MT_weight_gpencil", icon="GPBRUSH_WEIGHT")
754 UseSeparator(self, context)
755 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
757 # Light Probe Menu #
758 if obj and obj.type == 'LIGHT_PROBE':
759 layout.operator_context = 'INVOKE_REGION_WIN'
761 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
762 layout.menu("VIEW3D_MT_Animation_Player",
763 text="Animation", icon='PLAY')
764 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
765 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
766 UseSeparator(self, context)
767 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
768 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
769 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
770 UseSeparator(self, context)
771 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
772 layout.menu("VIEW3D_MT_TransformMenuLite", icon='EMPTY_ARROWS')
773 layout.menu("VIEW3D_MT_CursorMenuLite", icon='PIVOT_CURSOR')
774 UseSeparator(self, context)
775 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
776 UseSeparator(self, context)
777 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
778 UseSeparator(self, context)
779 layout.prop(view, "show_region_toolbar", icon='MENU_PANEL')
780 layout.prop(view, "show_region_ui", icon='MENU_PANEL')
782 # Text Object Mode #
783 if obj and obj.type == 'FONT' and obj.mode in {'OBJECT'}:
785 layout.operator_context = 'INVOKE_REGION_WIN'
786 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
787 layout.operator("wm.toolbar", text="Tools", icon='TOOL_SETTINGS')
788 layout.menu("VIEW3D_MT_Animation_Player",
789 text="Animation", icon='PLAY')
790 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
791 layout.menu("VIEW3D_MT_Object_Interactive_Other", icon='OBJECT_DATA')
792 UseSeparator(self, context)
793 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
794 layout.menu("VIEW3D_MT_select_object", icon='RESTRICT_SELECT_OFF')
795 layout.menu("VIEW3D_MT_add", icon='MESH_CUBE')
796 layout.menu("VIEW3D_MT_Camera_Options", icon='CAMERA_DATA')
797 UseSeparator(self, context)
798 layout.menu("VIEW3D_MT_Object", icon='OBJECT_DATAMODE')
799 layout.menu("VIEW3D_MT_TransformMenu", icon='EMPTY_ARROWS')
800 layout.menu("VIEW3D_MT_CursorMenu", icon='PIVOT_CURSOR')
801 UseSeparator(self, context)
802 layout.menu("VIEW3D_MT_object_collection", text = "Collections", icon='GROUP')
803 UseSeparator(self, context)
804 layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
805 UseSeparator(self, context)
806 layout.operator("object.delete", text="Delete Object", icon='X')
807 UseSeparator(self, context)
808 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
811 # Text Edit Mode
812 def menu_func(self, context):
813 layout = self.layout
815 layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
816 layout.menu("VIEW3D_MT_select_edit_text", icon='VIEW3D')
817 layout.separator()
818 layout.operator_context = 'INVOKE_REGION_WIN'
819 layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
820 layout.menu("VIEW3D_MT_Animation_Player",
821 text="Animation", icon='PLAY')
822 layout.menu("SCREEN_MT_user_menu", text="Quick Favorites", icon='HEART')
823 layout.operator("object.editmode_toggle", text="Enter Object Mode",
824 icon='OBJECT_DATA')
825 layout.separator()
826 layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
829 # Preferences utility functions
831 # Draw Separator #
832 def UseSeparator(operator, context):
833 useSep = bpy.context.preferences.addons[__name__].preferences.use_separators
834 if useSep:
835 operator.layout.separator()
838 # Use compact brushes menus #
839 def UseBrushesLists():
840 # separate function just for more convenience
841 useLists = bpy.context.preferences.addons[__name__].preferences.use_brushes_lists
843 return bool(useLists)
846 # Addon Preferences #
847 class VIEW3D_MT_Space_Dynamic_Menu_Pref(AddonPreferences):
848 bl_idname = __name__
850 use_separators: BoolProperty(
851 name="Use Separators in the menus",
852 default=True,
853 description=("Use separators in the menus, a trade-off between \n"
854 "readability vs. using more space for displaying items")
856 use_brushes_lists: BoolProperty(
857 name="Use compact menus for brushes",
858 default=False,
859 description=("Use more compact menus instead \n"
860 "of thumbnails for displaying brushes")
863 def draw(self, context):
864 layout = self.layout
865 row = layout.row(align=True)
866 row.prop(self, "use_separators", toggle=True)
867 row.prop(self, "use_brushes_lists", toggle=True)
870 # List The Classes #
872 classes = (
873 VIEW3D_MT_Space_Dynamic_Menu,
874 VIEW3D_MT_Space_Dynamic_Menu_Pref
878 # Register Classes & Hotkeys #
879 def register():
880 from bpy.utils import register_class
881 for cls in classes:
882 bpy.utils.register_class(cls)
884 bpy.types.VIEW3D_MT_edit_font_context_menu.append(menu_func)
886 object_menus.register()
887 edit_mesh.register()
888 transform_menus.register()
889 view_menus.register()
890 armature_menus.register()
891 curve_menus.register()
892 snap_origin_cursor.register()
893 animation_menus.register()
896 wm = bpy.context.window_manager
897 kc = wm.keyconfigs.addon
898 if kc:
899 km = kc.keymaps.new(name='3D View', space_type='VIEW_3D')
900 kmi = km.keymap_items.new('wm.call_menu', 'SPACE', 'PRESS')
901 kmi.properties.name = "VIEW3D_MT_Space_Dynamic_Menu"
904 # Unregister Classes & Hotkeys #
905 def unregister():
906 wm = bpy.context.window_manager
907 kc = wm.keyconfigs.addon
908 if kc:
909 km = kc.keymaps['3D View']
910 for kmi in km.keymap_items:
911 if kmi.idname == 'wm.call_menu':
912 if kmi.properties.name == "VIEW3D_MT_Space_Dynamic_Menu":
913 km.keymap_items.remove(kmi)
914 break
916 object_menus.unregister()
917 edit_mesh.unregister()
918 transform_menus.unregister()
919 view_menus.unregister()
920 armature_menus.unregister()
921 curve_menus.unregister()
922 snap_origin_cursor.unregister()
923 animation_menus.unregister()
926 for cls in reversed(classes):
927 bpy.utils.unregister_class(cls)
929 bpy.types.VIEW3D_MT_edit_font_context_menu.remove(menu_func)
931 if __name__ == "__main__":
932 register()