1 # SPDX-License-Identifier: GPL-2.0-or-later
2 # Contributed to by: meta-androcto, JayDez, sim88, sam, lijenstina, mkb, wisaac, CoDEmanX.
5 "name": "Dynamic Context Menu",
6 "author": "meta-androcto",
9 "location": "View3D > Spacebar",
10 "description": "Object Mode Context Sensitive Spacebar Menu",
12 "doc_url": "{BLENDER_MANUAL_URL}/addons/interface/context_menu.html",
13 "category": "Interface",
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
)
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
39 from bpy
.types
import (
44 from bpy
.props
import (
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
):
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')
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')
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')
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')
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')
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')
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",
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')
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",
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')
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",
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')
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')
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",
478 UseSeparator(self
, context
)
479 layout
.operator("armature.delete", text
="Delete Object",
481 UseSeparator(self
, context
)
482 layout
.menu("VIEW3D_MT_UndoS", icon
='ARROW_LEFTRIGHT')
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')
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')
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",
640 layout
.prop_menu_enum(settings
, "proportional_edit_falloff",
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')
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')
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')
812 def menu_func(self
, context
):
815 layout
.menu("VIEW3D_MT_View_Menu", icon
='ZOOM_ALL')
816 layout
.menu("VIEW3D_MT_select_edit_text", icon
='VIEW3D')
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",
826 layout
.menu("VIEW3D_MT_UndoS", icon
='ARROW_LEFTRIGHT')
829 # Preferences utility functions
832 def UseSeparator(operator
, context
):
833 useSep
= bpy
.context
.preferences
.addons
[__name__
].preferences
.use_separators
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
):
850 use_separators
: BoolProperty(
851 name
="Use Separators in the menus",
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",
859 description
=("Use more compact menus instead \n"
860 "of thumbnails for displaying brushes")
863 def draw(self
, context
):
865 row
= layout
.row(align
=True)
866 row
.prop(self
, "use_separators", toggle
=True)
867 row
.prop(self
, "use_brushes_lists", toggle
=True)
873 VIEW3D_MT_Space_Dynamic_Menu
,
874 VIEW3D_MT_Space_Dynamic_Menu_Pref
878 # Register Classes & Hotkeys #
880 from bpy
.utils
import register_class
882 bpy
.utils
.register_class(cls
)
884 bpy
.types
.VIEW3D_MT_edit_font_context_menu
.append(menu_func
)
886 object_menus
.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
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 #
906 wm
= bpy
.context
.window_manager
907 kc
= wm
.keyconfigs
.addon
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
)
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__":