Sun Position: fix error in HDRI mode when no env tex is selected
[blender-addons.git] / object_collection_manager / preferences.py
blobec8bc25a6bdd4528dcc36cb50307a25184a19c77
1 # SPDX-License-Identifier: GPL-2.0-or-later
3 # Copyright 2011, Ryan Inch
5 import bpy
6 from bpy.types import AddonPreferences
7 from bpy.props import (
8 BoolProperty,
9 FloatProperty,
10 FloatVectorProperty,
13 from . import cm_init
14 from . import qcd_init
16 def update_disable_objects_hotkeys_status(self, context):
17 if self.enable_disable_objects_override:
18 cm_init.register_disable_objects_hotkeys()
20 else:
21 cm_init.unregister_disable_objects_hotkeys()
23 def update_qcd_status(self, context):
24 if self.enable_qcd:
25 qcd_init.register_qcd()
27 else:
28 qcd_init.unregister_qcd()
30 def update_qcd_view_hotkeys_status(self, context):
31 if self.enable_qcd_view_hotkeys:
32 qcd_init.register_qcd_view_hotkeys()
33 else:
34 qcd_init.unregister_qcd_view_hotkeys()
36 def update_qcd_view_edit_mode_hotkeys_status(self, context):
37 if self.enable_qcd_view_edit_mode_hotkeys:
38 qcd_init.register_qcd_view_edit_mode_hotkeys()
39 else:
40 qcd_init.unregister_qcd_view_edit_mode_hotkeys()
42 def update_qcd_3dview_header_widget_status(self, context):
43 if self.enable_qcd_3dview_header_widget:
44 qcd_init.register_qcd_3dview_header_widget()
45 else:
46 qcd_init.unregister_qcd_3dview_header_widget()
48 def get_tool_text(self):
49 if self.tool_text_override:
50 return self["tool_text_color"]
51 else:
52 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.text
53 self["tool_text_color"] = color.r, color.g, color.b
54 return self["tool_text_color"]
56 def set_tool_text(self, values):
57 self["tool_text_color"] = values[0], values[1], values[2]
60 def get_tool_text_sel(self):
61 if self.tool_text_sel_override:
62 return self["tool_text_sel_color"]
63 else:
64 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.text_sel
65 self["tool_text_sel_color"] = color.r, color.g, color.b
66 return self["tool_text_sel_color"]
68 def set_tool_text_sel(self, values):
69 self["tool_text_sel_color"] = values[0], values[1], values[2]
72 def get_tool_inner(self):
73 if self.tool_inner_override:
74 return self["tool_inner_color"]
75 else:
76 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.inner
77 self["tool_inner_color"] = color[0], color[1], color[2], color[3]
78 return self["tool_inner_color"]
80 def set_tool_inner(self, values):
81 self["tool_inner_color"] = values[0], values[1], values[2], values[3]
84 def get_tool_inner_sel(self):
85 if self.tool_inner_sel_override:
86 return self["tool_inner_sel_color"]
87 else:
88 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.inner_sel
89 self["tool_inner_sel_color"] = color[0], color[1], color[2], color[3]
90 return self["tool_inner_sel_color"]
92 def set_tool_inner_sel(self, values):
93 self["tool_inner_sel_color"] = values[0], values[1], values[2], values[3]
96 def get_tool_outline(self):
97 if self.tool_outline_override:
98 return self["tool_outline_color"]
99 else:
100 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.outline
101 self["tool_outline_color"] = color.r, color.g, color.b
102 return self["tool_outline_color"]
104 def set_tool_outline(self, values):
105 self["tool_outline_color"] = values[0], values[1], values[2]
108 def get_menu_back_text(self):
109 if self.menu_back_text_override:
110 return self["menu_back_text_color"]
111 else:
112 color = bpy.context.preferences.themes[0].user_interface.wcol_menu_back.text
113 self["menu_back_text_color"] = color.r, color.g, color.b
114 return self["menu_back_text_color"]
116 def set_menu_back_text(self, values):
117 self["menu_back_text_color"] = values[0], values[1], values[2]
120 def get_menu_back_inner(self):
121 if self.menu_back_inner_override:
122 return self["menu_back_inner_color"]
123 else:
124 color = bpy.context.preferences.themes[0].user_interface.wcol_menu_back.inner
125 self["menu_back_inner_color"] = color[0], color[1], color[2], color[3]
126 return self["menu_back_inner_color"]
128 def set_menu_back_inner(self, values):
129 self["menu_back_inner_color"] = values[0], values[1], values[2], values[3]
132 def get_menu_back_outline(self):
133 if self.menu_back_outline_override:
134 return self["menu_back_outline_color"]
135 else:
136 color = bpy.context.preferences.themes[0].user_interface.wcol_menu_back.outline
137 self["menu_back_outline_color"] = color.r, color.g, color.b
138 return self["menu_back_outline_color"]
140 def set_menu_back_outline(self, values):
141 self["menu_back_outline_color"] = values[0], values[1], values[2]
144 def get_tooltip_text(self):
145 if self.tooltip_text_override:
146 return self["tooltip_text_color"]
147 else:
148 color = bpy.context.preferences.themes[0].user_interface.wcol_tooltip.text
149 self["tooltip_text_color"] = color.r, color.g, color.b
150 return self["tooltip_text_color"]
152 def set_tooltip_text(self, values):
153 self["tooltip_text_color"] = values[0], values[1], values[2]
156 def get_tooltip_inner(self):
157 if self.tooltip_inner_override:
158 return self["tooltip_inner_color"]
159 else:
160 color = bpy.context.preferences.themes[0].user_interface.wcol_tooltip.inner
161 self["tooltip_inner_color"] = color[0], color[1], color[2], color[3]
162 return self["tooltip_inner_color"]
164 def set_tooltip_inner(self, values):
165 self["tooltip_inner_color"] = values[0], values[1], values[2], values[3]
168 def get_tooltip_outline(self):
169 if self.tooltip_outline_override:
170 return self["tooltip_outline_color"]
171 else:
172 color = bpy.context.preferences.themes[0].user_interface.wcol_tooltip.outline
173 self["tooltip_outline_color"] = color.r, color.g, color.b
174 return self["tooltip_outline_color"]
176 def set_tooltip_outline(self, values):
177 self["tooltip_outline_color"] = values[0], values[1], values[2]
180 class CMPreferences(AddonPreferences):
181 bl_idname = __package__
183 # ENABLE DISABLE OBJECTS OVERRIDE
184 enable_disable_objects_override: BoolProperty(
185 name="Disable objects instead of Hiding",
186 description=(
187 "Replace the object hiding hotkeys with object disabling hotkeys and add them to the Object->Show/Hide menu.\n"
188 "Disabling objects prevents them from being automatically shown again when collections are unexcluded"
190 default=False,
191 update=update_disable_objects_hotkeys_status,
194 # ENABLE QCD BOOLS
195 enable_qcd: BoolProperty(
196 name="QCD",
197 description="Enable/Disable QCD System.\nThe Quick Content Display system allows you to specify collections as QCD \"slots\" up to a maximum of 20. You can then interact with them through numerical hotkeys, a popup move widget, and a 3D Viewport header widget",
198 default=True,
199 update=update_qcd_status,
202 enable_qcd_view_hotkeys: BoolProperty(
203 name="QCD Hotkeys",
204 description="Enable/Disable the numerical hotkeys to view QCD slots",
205 default=True,
206 update=update_qcd_view_hotkeys_status,
209 enable_qcd_view_edit_mode_hotkeys: BoolProperty(
210 name="QCD Edit Mode Hotkeys",
211 description="Enable/Disable the numerical hotkeys to view QCD slots in Edit Mode",
212 default=False,
213 update=update_qcd_view_edit_mode_hotkeys_status,
216 enable_qcd_3dview_header_widget: BoolProperty(
217 name="QCD 3D Viewport Header Widget",
218 description="Enable/Disable the 3D Viewport header widget. This widget graphically represents the 20 QCD slots and allows you to interact with them through the GUI",
219 default=True,
220 update=update_qcd_3dview_header_widget_status,
224 # OVERRIDE BOOLS
225 tool_text_override: BoolProperty(
226 name="Text",
227 description="Override Theme Text Color",
228 default=False,
231 tool_text_sel_override: BoolProperty(
232 name="Selection",
233 description="Override Theme Text Selection Color",
234 default=False,
237 tool_inner_override: BoolProperty(
238 name="Inner",
239 description="Override Theme Inner Color",
240 default=False,
243 tool_inner_sel_override: BoolProperty(
244 name="Selection",
245 description="Override Theme Inner Selection Color",
246 default=False,
249 tool_outline_override: BoolProperty(
250 name="Outline",
251 description="Override Theme Outline Color",
252 default=False,
255 menu_back_text_override: BoolProperty(
256 name="Text",
257 description="Override Theme Text Color",
258 default=False,
261 menu_back_inner_override: BoolProperty(
262 name="Inner",
263 description="Override Theme Inner Color",
264 default=False,
267 menu_back_outline_override: BoolProperty(
268 name="Outline",
269 description="Override Theme Outline Color",
270 default=False,
273 tooltip_text_override: BoolProperty(
274 name="Text",
275 description="Override Theme Text Color",
276 default=False,
279 tooltip_inner_override: BoolProperty(
280 name="Inner",
281 description="Override Theme Inner Color",
282 default=False,
285 tooltip_outline_override: BoolProperty(
286 name="Outline",
287 description="Override Theme Outline Color",
288 default=False,
292 # OVERRIDE COLORS
293 qcd_ogl_widget_tool_text: FloatVectorProperty(
294 name="",
295 description="QCD Move Widget Tool Text Color",
296 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.text,
297 subtype='COLOR_GAMMA',
298 min=0.0,
299 max=1.0,
300 get=get_tool_text,
301 set=set_tool_text,
304 qcd_ogl_widget_tool_text_sel: FloatVectorProperty(
305 name="",
306 description="QCD Move Widget Tool Text Selection Color",
307 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.text_sel,
308 subtype='COLOR_GAMMA',
309 min=0.0,
310 max=1.0,
311 get=get_tool_text_sel,
312 set=set_tool_text_sel,
315 qcd_ogl_widget_tool_inner: FloatVectorProperty(
316 name="",
317 description="QCD Move Widget Tool Inner Color",
318 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.inner,
319 subtype='COLOR_GAMMA',
320 min=0.0,
321 max=1.0,
322 size=4,
323 get=get_tool_inner,
324 set=set_tool_inner,
327 qcd_ogl_widget_tool_inner_sel: FloatVectorProperty(
328 name="",
329 description="QCD Move Widget Tool Inner Selection Color",
330 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.inner_sel,
331 subtype='COLOR_GAMMA',
332 min=0.0,
333 max=1.0,
334 size=4,
335 get=get_tool_inner_sel,
336 set=set_tool_inner_sel,
339 qcd_ogl_widget_tool_outline: FloatVectorProperty(
340 name="",
341 description="QCD Move Widget Tool Outline Color",
342 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.outline,
343 subtype='COLOR_GAMMA',
344 min=0.0,
345 max=1.0,
346 get=get_tool_outline,
347 set=set_tool_outline,
350 qcd_ogl_widget_menu_back_text: FloatVectorProperty(
351 name="",
352 description="QCD Move Widget Menu Back Text Color",
353 default=bpy.context.preferences.themes[0].user_interface.wcol_menu_back.text,
354 subtype='COLOR_GAMMA',
355 min=0.0,
356 max=1.0,
357 get=get_menu_back_text,
358 set=set_menu_back_text,
361 qcd_ogl_widget_menu_back_inner: FloatVectorProperty(
362 name="",
363 description="QCD Move Widget Menu Back Inner Color",
364 default=bpy.context.preferences.themes[0].user_interface.wcol_menu_back.inner,
365 subtype='COLOR_GAMMA',
366 min=0.0,
367 max=1.0,
368 size=4,
369 get=get_menu_back_inner,
370 set=set_menu_back_inner,
373 qcd_ogl_widget_menu_back_outline: FloatVectorProperty(
374 name="",
375 description="QCD Move Widget Menu Back Outline Color",
376 default=bpy.context.preferences.themes[0].user_interface.wcol_menu_back.outline,
377 subtype='COLOR_GAMMA',
378 min=0.0,
379 max=1.0,
380 get=get_menu_back_outline,
381 set=set_menu_back_outline,
384 qcd_ogl_widget_tooltip_text: FloatVectorProperty(
385 name="",
386 description="QCD Move Widget Tooltip Text Color",
387 default=bpy.context.preferences.themes[0].user_interface.wcol_tooltip.text,
388 subtype='COLOR_GAMMA',
389 min=0.0,
390 max=1.0,
391 get=get_tooltip_text,
392 set=set_tooltip_text,
395 qcd_ogl_widget_tooltip_inner: FloatVectorProperty(
396 name="",
397 description="QCD Move Widget Tooltip Inner Color",
398 default=bpy.context.preferences.themes[0].user_interface.wcol_tooltip.inner,
399 subtype='COLOR_GAMMA',
400 min=0.0,
401 max=1.0,
402 size=4,
403 get=get_tooltip_inner,
404 set=set_tooltip_inner,
407 qcd_ogl_widget_tooltip_outline: FloatVectorProperty(
408 name="",
409 description="QCD Move Widget Tooltip Outline Color",
410 default=bpy.context.preferences.themes[0].user_interface.wcol_tooltip.outline,
411 subtype='COLOR_GAMMA',
412 min=0.0,
413 max=1.0,
414 get=get_tooltip_outline,
415 set=set_tooltip_outline,
418 # NON ACTIVE ICON ALPHA
419 qcd_ogl_selected_icon_alpha: FloatProperty(
420 name="Selected Icon Alpha",
421 description="Set the 'Selected' icon's alpha value",
422 default=0.9,
423 min=0.0,
424 max=1.0,
427 qcd_ogl_objects_icon_alpha: FloatProperty(
428 name="Objects Icon Alpha",
429 description="Set the 'Objects' icon's alpha value",
430 default=0.5,
431 min=0.0,
432 max=1.0,
435 def draw(self, context):
436 layout = self.layout
437 box = layout.box()
439 box.row().prop(self, "enable_disable_objects_override")
440 box.row().prop(self, "enable_qcd")
442 if not self.enable_qcd:
443 return
445 box.row().prop(self, "enable_qcd_view_hotkeys")
446 box.row().prop(self, "enable_qcd_view_edit_mode_hotkeys")
447 box.row().prop(self, "enable_qcd_3dview_header_widget")
449 box.row().label(text="QCD Move Widget")
451 # TOOL OVERRIDES
452 tool_box = box.box()
453 tool_box.row().label(text="Tool Theme Overrides:")
455 overrides = tool_box.split(align=True)
457 # Column 1
458 col = overrides.column()
459 col.alignment = 'RIGHT'
461 # Text
462 override = col.row(align=True)
463 override.alignment = 'RIGHT'
464 checkbox = override.row(align=True)
465 checkbox.alignment = 'RIGHT'
466 checkbox.label(text="Text")
467 checkbox.prop(self, "tool_text_override", text="")
468 color_picker = override.row(align=True)
469 color_picker.alignment = 'RIGHT'
470 color_picker.enabled = self.tool_text_override
471 color_picker.prop(self, "qcd_ogl_widget_tool_text")
473 # Text Selection
474 override = col.row(align=True)
475 override.alignment = 'RIGHT'
476 checkbox = override.row(align=True)
477 checkbox.alignment = 'RIGHT'
478 checkbox.label(text="Selection")
479 checkbox.prop(self, "tool_text_sel_override", text="")
480 color_picker = override.row(align=True)
481 color_picker.alignment = 'RIGHT'
482 color_picker.enabled = self.tool_text_sel_override
483 color_picker.prop(self, "qcd_ogl_widget_tool_text_sel")
485 # Column 2
486 col = overrides.column()
487 col.alignment = 'RIGHT'
489 # Inner
490 override = col.row(align=True)
491 override.alignment = 'RIGHT'
492 checkbox = override.row(align=True)
493 checkbox.alignment = 'RIGHT'
494 checkbox.label(text="Inner")
495 checkbox.prop(self, "tool_inner_override", text="")
496 color_picker = override.row(align=True)
497 color_picker.alignment = 'RIGHT'
498 color_picker.enabled = self.tool_inner_override
499 color_picker.prop(self, "qcd_ogl_widget_tool_inner")
501 # Inner Selection
502 override = col.row(align=True)
503 override.alignment = 'RIGHT'
504 checkbox = override.row(align=True)
505 checkbox.alignment = 'RIGHT'
506 checkbox.label(text="Selection")
507 checkbox.prop(self, "tool_inner_sel_override", text="")
508 color_picker = override.row(align=True)
509 color_picker.alignment = 'RIGHT'
510 color_picker.enabled = self.tool_inner_sel_override
511 color_picker.prop(self, "qcd_ogl_widget_tool_inner_sel")
513 # Outline
514 override = col.row(align=True)
515 override.alignment = 'RIGHT'
516 checkbox = override.row(align=True)
517 checkbox.alignment = 'RIGHT'
518 checkbox.label(text="Outline")
519 checkbox.prop(self, "tool_outline_override", text="")
520 color_picker = override.row(align=True)
521 color_picker.alignment = 'RIGHT'
522 color_picker.enabled = self.tool_outline_override
523 color_picker.prop(self, "qcd_ogl_widget_tool_outline")
525 # Icon Alpha
526 tool_box.row().label(text="Icon Alpha:")
527 icon_fade_row = tool_box.row()
528 icon_fade_row.alignment = 'EXPAND'
529 icon_fade_row.prop(self, "qcd_ogl_selected_icon_alpha", text="Selected")
530 icon_fade_row.prop(self, "qcd_ogl_objects_icon_alpha", text="Objects")
533 # MENU BACK OVERRIDES
534 menu_back_box = box.box()
535 menu_back_box.row().label(text="Menu Back Theme Overrides:")
537 overrides = menu_back_box.split(align=True)
539 # Column 1
540 col = overrides.column()
541 col.alignment = 'RIGHT'
543 # Text
544 override = col.row(align=True)
545 override.alignment = 'RIGHT'
546 checkbox = override.row(align=True)
547 checkbox.alignment = 'RIGHT'
548 checkbox.label(text="Text")
549 checkbox.prop(self, "menu_back_text_override", text="")
550 color_picker = override.row(align=True)
551 color_picker.alignment = 'RIGHT'
552 color_picker.enabled = self.menu_back_text_override
553 color_picker.prop(self, "qcd_ogl_widget_menu_back_text")
555 # Column 2
556 col = overrides.column()
557 col.alignment = 'RIGHT'
559 # Inner
560 override = col.row(align=True)
561 override.alignment = 'RIGHT'
562 checkbox = override.row(align=True)
563 checkbox.alignment = 'RIGHT'
564 checkbox.label(text="Inner")
565 checkbox.prop(self, "menu_back_inner_override", text="")
566 color_picker = override.row(align=True)
567 color_picker.alignment = 'RIGHT'
568 color_picker.enabled = self.menu_back_inner_override
569 color_picker.prop(self, "qcd_ogl_widget_menu_back_inner")
571 # Outline
572 override = col.row(align=True)
573 override.alignment = 'RIGHT'
574 checkbox = override.row(align=True)
575 checkbox.alignment = 'RIGHT'
576 checkbox.label(text="Outline")
577 checkbox.prop(self, "menu_back_outline_override", text="")
578 color_picker = override.row(align=True)
579 color_picker.alignment = 'RIGHT'
580 color_picker.enabled = self.menu_back_outline_override
581 color_picker.prop(self, "qcd_ogl_widget_menu_back_outline")
584 # TOOLTIP OVERRIDES
585 tooltip_box = box.box()
586 tooltip_box.row().label(text="Tooltip Theme Overrides:")
588 overrides = tooltip_box.split(align=True)
590 # Column 1
591 col = overrides.column()
592 col.alignment = 'RIGHT'
594 # Text
595 override = col.row(align=True)
596 override.alignment = 'RIGHT'
597 checkbox = override.row(align=True)
598 checkbox.alignment = 'RIGHT'
599 checkbox.label(text="Text")
600 checkbox.prop(self, "tooltip_text_override", text="")
601 color_picker = override.row(align=True)
602 color_picker.alignment = 'RIGHT'
603 color_picker.enabled = self.tooltip_text_override
604 color_picker.prop(self, "qcd_ogl_widget_tooltip_text")
606 # Column 2
607 col = overrides.column()
608 col.alignment = 'RIGHT'
610 # Inner
611 override = col.row(align=True)
612 override.alignment = 'RIGHT'
613 checkbox = override.row(align=True)
614 checkbox.alignment = 'RIGHT'
615 checkbox.label(text="Inner")
616 checkbox.prop(self, "tooltip_inner_override", text="")
617 color_picker = override.row(align=True)
618 color_picker.alignment = 'RIGHT'
619 color_picker.enabled = self.tooltip_inner_override
620 color_picker.prop(self, "qcd_ogl_widget_tooltip_inner")
622 # Outline
623 override = col.row(align=True)
624 override.alignment = 'RIGHT'
625 checkbox = override.row(align=True)
626 checkbox.alignment = 'RIGHT'
627 checkbox.label(text="Outline")
628 checkbox.prop(self, "tooltip_outline_override", text="")
629 color_picker = override.row(align=True)
630 color_picker.alignment = 'RIGHT'
631 color_picker.enabled = self.tooltip_outline_override
632 color_picker.prop(self, "qcd_ogl_widget_tooltip_outline")