Sun position: Fix T80379 - Custom startup breaks the add-on
[blender-addons.git] / object_collection_manager / preferences.py
blob4a1d654048b419c64a124559bf03dcfbab581b4c
1 # ##### BEGIN GPL LICENSE BLOCK #####
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 # ##### END GPL LICENSE BLOCK #####
19 # Copyright 2011, Ryan Inch
21 import bpy
22 from bpy.types import AddonPreferences
23 from bpy.props import (
24 BoolProperty,
25 FloatProperty,
26 FloatVectorProperty,
29 from . import cm_init
30 from . import qcd_init
32 def update_disable_objects_hotkeys_status(self, context):
33 if self.enable_disable_objects_override:
34 cm_init.register_disable_objects_hotkeys()
36 else:
37 cm_init.unregister_disable_objects_hotkeys()
39 def update_qcd_status(self, context):
40 if self.enable_qcd:
41 qcd_init.register_qcd()
43 if self.enable_qcd_view_hotkeys:
44 qcd_init.register_qcd_view_hotkeys()
46 if self.enable_qcd_view_edit_mode_hotkeys:
47 qcd_init.register_qcd_view_edit_mode_hotkeys()
49 else:
50 qcd_init.unregister_qcd()
52 def update_qcd_view_hotkeys_status(self, context):
53 if self.enable_qcd_view_hotkeys:
54 qcd_init.register_qcd_view_hotkeys()
55 else:
56 qcd_init.unregister_qcd_view_hotkeys()
58 def update_qcd_view_edit_mode_hotkeys_status(self, context):
59 if self.enable_qcd_view_edit_mode_hotkeys:
60 qcd_init.register_qcd_view_edit_mode_hotkeys()
61 else:
62 qcd_init.unregister_qcd_view_edit_mode_hotkeys()
64 def get_tool_text(self):
65 if self.tool_text_override:
66 return self["tool_text_color"]
67 else:
68 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.text
69 self["tool_text_color"] = color.r, color.g, color.b
70 return self["tool_text_color"]
72 def set_tool_text(self, values):
73 self["tool_text_color"] = values[0], values[1], values[2]
76 def get_tool_text_sel(self):
77 if self.tool_text_sel_override:
78 return self["tool_text_sel_color"]
79 else:
80 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.text_sel
81 self["tool_text_sel_color"] = color.r, color.g, color.b
82 return self["tool_text_sel_color"]
84 def set_tool_text_sel(self, values):
85 self["tool_text_sel_color"] = values[0], values[1], values[2]
88 def get_tool_inner(self):
89 if self.tool_inner_override:
90 return self["tool_inner_color"]
91 else:
92 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.inner
93 self["tool_inner_color"] = color[0], color[1], color[2], color[3]
94 return self["tool_inner_color"]
96 def set_tool_inner(self, values):
97 self["tool_inner_color"] = values[0], values[1], values[2], values[3]
100 def get_tool_inner_sel(self):
101 if self.tool_inner_sel_override:
102 return self["tool_inner_sel_color"]
103 else:
104 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.inner_sel
105 self["tool_inner_sel_color"] = color[0], color[1], color[2], color[3]
106 return self["tool_inner_sel_color"]
108 def set_tool_inner_sel(self, values):
109 self["tool_inner_sel_color"] = values[0], values[1], values[2], values[3]
112 def get_tool_outline(self):
113 if self.tool_outline_override:
114 return self["tool_outline_color"]
115 else:
116 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.outline
117 self["tool_outline_color"] = color.r, color.g, color.b
118 return self["tool_outline_color"]
120 def set_tool_outline(self, values):
121 self["tool_outline_color"] = values[0], values[1], values[2]
124 def get_menu_back_text(self):
125 if self.menu_back_text_override:
126 return self["menu_back_text_color"]
127 else:
128 color = bpy.context.preferences.themes[0].user_interface.wcol_menu_back.text
129 self["menu_back_text_color"] = color.r, color.g, color.b
130 return self["menu_back_text_color"]
132 def set_menu_back_text(self, values):
133 self["menu_back_text_color"] = values[0], values[1], values[2]
136 def get_menu_back_inner(self):
137 if self.menu_back_inner_override:
138 return self["menu_back_inner_color"]
139 else:
140 color = bpy.context.preferences.themes[0].user_interface.wcol_menu_back.inner
141 self["menu_back_inner_color"] = color[0], color[1], color[2], color[3]
142 return self["menu_back_inner_color"]
144 def set_menu_back_inner(self, values):
145 self["menu_back_inner_color"] = values[0], values[1], values[2], values[3]
148 def get_menu_back_outline(self):
149 if self.menu_back_outline_override:
150 return self["menu_back_outline_color"]
151 else:
152 color = bpy.context.preferences.themes[0].user_interface.wcol_menu_back.outline
153 self["menu_back_outline_color"] = color.r, color.g, color.b
154 return self["menu_back_outline_color"]
156 def set_menu_back_outline(self, values):
157 self["menu_back_outline_color"] = values[0], values[1], values[2]
160 def get_tooltip_text(self):
161 if self.tooltip_text_override:
162 return self["tooltip_text_color"]
163 else:
164 color = bpy.context.preferences.themes[0].user_interface.wcol_tooltip.text
165 self["tooltip_text_color"] = color.r, color.g, color.b
166 return self["tooltip_text_color"]
168 def set_tooltip_text(self, values):
169 self["tooltip_text_color"] = values[0], values[1], values[2]
172 def get_tooltip_inner(self):
173 if self.tooltip_inner_override:
174 return self["tooltip_inner_color"]
175 else:
176 color = bpy.context.preferences.themes[0].user_interface.wcol_tooltip.inner
177 self["tooltip_inner_color"] = color[0], color[1], color[2], color[3]
178 return self["tooltip_inner_color"]
180 def set_tooltip_inner(self, values):
181 self["tooltip_inner_color"] = values[0], values[1], values[2], values[3]
184 def get_tooltip_outline(self):
185 if self.tooltip_outline_override:
186 return self["tooltip_outline_color"]
187 else:
188 color = bpy.context.preferences.themes[0].user_interface.wcol_tooltip.outline
189 self["tooltip_outline_color"] = color.r, color.g, color.b
190 return self["tooltip_outline_color"]
192 def set_tooltip_outline(self, values):
193 self["tooltip_outline_color"] = values[0], values[1], values[2]
196 class CMPreferences(AddonPreferences):
197 bl_idname = __package__
199 # ENABLE DISABLE OBJECTS OVERRIDE
200 enable_disable_objects_override: BoolProperty(
201 name="Disable Objects Override",
202 description=(
203 "Replace the object hiding hotkeys with object disabling hotkeys and add them to the Object->Show/Hide menu.\n"
204 "Disabling objects prevents them from being automatically shown again when collections are unexcluded"
206 default=False,
207 update=update_disable_objects_hotkeys_status,
210 # ENABLE QCD BOOLS
211 enable_qcd: BoolProperty(
212 name="QCD",
213 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 View header widget",
214 default=True,
215 update=update_qcd_status,
218 enable_qcd_view_hotkeys: BoolProperty(
219 name="QCD Hotkeys",
220 description="Enable/Disable the numerical hotkeys to view QCD slots",
221 default=True,
222 update=update_qcd_view_hotkeys_status,
225 enable_qcd_view_edit_mode_hotkeys: BoolProperty(
226 name="QCD Edit Mode Hotkeys",
227 description="Enable/Disable the numerical hotkeys to view QCD slots in Edit Mode",
228 default=False,
229 update=update_qcd_view_edit_mode_hotkeys_status,
233 # OVERRIDE BOOLS
234 tool_text_override: BoolProperty(
235 name="Text",
236 description="Override Theme Text Color",
237 default=False,
240 tool_text_sel_override: BoolProperty(
241 name="Selection",
242 description="Override Theme Text Selection Color",
243 default=False,
246 tool_inner_override: BoolProperty(
247 name="Inner",
248 description="Override Theme Inner Color",
249 default=False,
252 tool_inner_sel_override: BoolProperty(
253 name="Selection",
254 description="Override Theme Inner Selection Color",
255 default=False,
258 tool_outline_override: BoolProperty(
259 name="Outline",
260 description="Override Theme Outline Color",
261 default=False,
264 menu_back_text_override: BoolProperty(
265 name="Text",
266 description="Override Theme Text Color",
267 default=False,
270 menu_back_inner_override: BoolProperty(
271 name="Inner",
272 description="Override Theme Inner Color",
273 default=False,
276 menu_back_outline_override: BoolProperty(
277 name="Outline",
278 description="Override Theme Outline Color",
279 default=False,
282 tooltip_text_override: BoolProperty(
283 name="Text",
284 description="Override Theme Text Color",
285 default=False,
288 tooltip_inner_override: BoolProperty(
289 name="Inner",
290 description="Override Theme Inner Color",
291 default=False,
294 tooltip_outline_override: BoolProperty(
295 name="Outline",
296 description="Override Theme Outline Color",
297 default=False,
301 # OVERRIDE COLORS
302 qcd_ogl_widget_tool_text: FloatVectorProperty(
303 name="",
304 description="QCD Move Widget Tool Text Color",
305 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.text,
306 subtype='COLOR_GAMMA',
307 min=0.0,
308 max=1.0,
309 get=get_tool_text,
310 set=set_tool_text,
313 qcd_ogl_widget_tool_text_sel: FloatVectorProperty(
314 name="",
315 description="QCD Move Widget Tool Text Selection Color",
316 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.text_sel,
317 subtype='COLOR_GAMMA',
318 min=0.0,
319 max=1.0,
320 get=get_tool_text_sel,
321 set=set_tool_text_sel,
324 qcd_ogl_widget_tool_inner: FloatVectorProperty(
325 name="",
326 description="QCD Move Widget Tool Inner Color",
327 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.inner,
328 subtype='COLOR_GAMMA',
329 min=0.0,
330 max=1.0,
331 size=4,
332 get=get_tool_inner,
333 set=set_tool_inner,
336 qcd_ogl_widget_tool_inner_sel: FloatVectorProperty(
337 name="",
338 description="QCD Move Widget Tool Inner Selection Color",
339 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.inner_sel,
340 subtype='COLOR_GAMMA',
341 min=0.0,
342 max=1.0,
343 size=4,
344 get=get_tool_inner_sel,
345 set=set_tool_inner_sel,
348 qcd_ogl_widget_tool_outline: FloatVectorProperty(
349 name="",
350 description="QCD Move Widget Tool Outline Color",
351 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.outline,
352 subtype='COLOR_GAMMA',
353 min=0.0,
354 max=1.0,
355 get=get_tool_outline,
356 set=set_tool_outline,
359 qcd_ogl_widget_menu_back_text: FloatVectorProperty(
360 name="",
361 description="QCD Move Widget Menu Back Text Color",
362 default=bpy.context.preferences.themes[0].user_interface.wcol_menu_back.text,
363 subtype='COLOR_GAMMA',
364 min=0.0,
365 max=1.0,
366 get=get_menu_back_text,
367 set=set_menu_back_text,
370 qcd_ogl_widget_menu_back_inner: FloatVectorProperty(
371 name="",
372 description="QCD Move Widget Menu Back Inner Color",
373 default=bpy.context.preferences.themes[0].user_interface.wcol_menu_back.inner,
374 subtype='COLOR_GAMMA',
375 min=0.0,
376 max=1.0,
377 size=4,
378 get=get_menu_back_inner,
379 set=set_menu_back_inner,
382 qcd_ogl_widget_menu_back_outline: FloatVectorProperty(
383 name="",
384 description="QCD Move Widget Menu Back Outline Color",
385 default=bpy.context.preferences.themes[0].user_interface.wcol_menu_back.outline,
386 subtype='COLOR_GAMMA',
387 min=0.0,
388 max=1.0,
389 get=get_menu_back_outline,
390 set=set_menu_back_outline,
393 qcd_ogl_widget_tooltip_text: FloatVectorProperty(
394 name="",
395 description="QCD Move Widget Tooltip Text Color",
396 default=bpy.context.preferences.themes[0].user_interface.wcol_tooltip.text,
397 subtype='COLOR_GAMMA',
398 min=0.0,
399 max=1.0,
400 get=get_tooltip_text,
401 set=set_tooltip_text,
404 qcd_ogl_widget_tooltip_inner: FloatVectorProperty(
405 name="",
406 description="QCD Move Widget Tooltip Inner Color",
407 default=bpy.context.preferences.themes[0].user_interface.wcol_tooltip.inner,
408 subtype='COLOR_GAMMA',
409 min=0.0,
410 max=1.0,
411 size=4,
412 get=get_tooltip_inner,
413 set=set_tooltip_inner,
416 qcd_ogl_widget_tooltip_outline: FloatVectorProperty(
417 name="",
418 description="QCD Move Widget Tooltip Outline Color",
419 default=bpy.context.preferences.themes[0].user_interface.wcol_tooltip.outline,
420 subtype='COLOR_GAMMA',
421 min=0.0,
422 max=1.0,
423 get=get_tooltip_outline,
424 set=set_tooltip_outline,
427 # NON ACTIVE ICON ALPHA
428 qcd_ogl_selected_icon_alpha: FloatProperty(
429 name="Selected Icon Alpha",
430 description="Set the 'Selected' icon's alpha value",
431 default=0.9,
432 min=0.0,
433 max=1.0,
436 qcd_ogl_objects_icon_alpha: FloatProperty(
437 name="Objects Icon Alpha",
438 description="Set the 'Objects' icon's alpha value",
439 default=0.5,
440 min=0.0,
441 max=1.0,
444 def draw(self, context):
445 layout = self.layout
446 box = layout.box()
448 box.row().prop(self, "enable_disable_objects_override")
449 box.row().prop(self, "enable_qcd")
451 if not self.enable_qcd:
452 return
454 box.row().prop(self, "enable_qcd_view_hotkeys")
455 box.row().prop(self, "enable_qcd_view_edit_mode_hotkeys")
457 box.row().label(text="QCD Move Widget")
459 tool_box = box.box()
460 tool_box.row().label(text="Tool Theme Overrides:")
461 tool_box.use_property_split = True
463 flow = tool_box.grid_flow(row_major=False, columns=2, even_columns=True, even_rows=False, align=False)
465 col = flow.column()
466 col.alignment = 'LEFT'
468 row = col.row(align=True)
469 row.alignment = 'RIGHT'
470 row.prop(self, "tool_text_override")
471 row = row.row(align=True)
472 row.alignment = 'RIGHT'
473 row.enabled = self.tool_text_override
474 row.prop(self, "qcd_ogl_widget_tool_text")
476 row = col.row(align=True)
477 row.alignment = 'RIGHT'
478 row.prop(self, "tool_text_sel_override")
479 row = row.row(align=True)
480 row.alignment = 'RIGHT'
481 row.enabled = self.tool_text_sel_override
482 row.prop(self, "qcd_ogl_widget_tool_text_sel")
484 col = flow.column()
485 col.alignment = 'RIGHT'
487 row = col.row()
488 row.alignment = 'RIGHT'
489 row.prop(self, "tool_inner_override")
490 row = row.row(align=True)
491 row.alignment = 'RIGHT'
492 row.enabled = self.tool_inner_override
493 row.prop(self, "qcd_ogl_widget_tool_inner")
495 row = col.row()
496 row.alignment = 'RIGHT'
497 row.prop(self, "tool_inner_sel_override")
498 row = row.row(align=True)
499 row.alignment = 'RIGHT'
500 row.enabled = self.tool_inner_sel_override
501 row.prop(self, "qcd_ogl_widget_tool_inner_sel")
503 row = col.row()
504 row.alignment = 'RIGHT'
505 row.prop(self, "tool_outline_override")
506 row = row.row(align=True)
507 row.alignment = 'RIGHT'
508 row.enabled = self.tool_outline_override
509 row.prop(self, "qcd_ogl_widget_tool_outline")
511 tool_box.use_property_split = False
512 tool_box.row().label(text="Icon Alpha:")
513 icon_fade_row = tool_box.row()
514 icon_fade_row.alignment = 'EXPAND'
515 icon_fade_row.prop(self, "qcd_ogl_selected_icon_alpha", text="Selected")
516 icon_fade_row.prop(self, "qcd_ogl_objects_icon_alpha", text="Objects")
519 menu_back_box = box.box()
520 menu_back_box.use_property_split = True
521 menu_back_box.row().label(text="Menu Back Theme Overrides:")
523 flow = menu_back_box.grid_flow(row_major=False, columns=2, even_columns=True, even_rows=False, align=False)
525 col = flow.column()
526 col.alignment = 'LEFT'
528 row = col.row(align=True)
529 row.alignment = 'RIGHT'
530 row.prop(self, "menu_back_text_override")
531 row = row.row(align=True)
532 row.alignment = 'RIGHT'
533 row.enabled = self.menu_back_text_override
534 row.prop(self, "qcd_ogl_widget_menu_back_text")
536 col = flow.column()
537 col.alignment = 'RIGHT'
539 row = col.row()
540 row.alignment = 'RIGHT'
541 row.prop(self, "menu_back_inner_override")
542 row = row.row(align=True)
543 row.alignment = 'RIGHT'
544 row.enabled = self.menu_back_inner_override
545 row.prop(self, "qcd_ogl_widget_menu_back_inner")
547 row = col.row()
548 row.alignment = 'RIGHT'
549 row.prop(self, "menu_back_outline_override")
550 row = row.row(align=True)
551 row.alignment = 'RIGHT'
552 row.enabled = self.menu_back_outline_override
553 row.prop(self, "qcd_ogl_widget_menu_back_outline")
556 tooltip_box = box.box()
557 tooltip_box.use_property_split = True
558 tooltip_box.row().label(text="Tooltip Theme Overrides:")
560 flow = tooltip_box.grid_flow(row_major=False, columns=2, even_columns=True, even_rows=False, align=False)
562 col = flow.column()
563 col.alignment = 'LEFT'
565 row = col.row(align=True)
566 row.alignment = 'RIGHT'
567 row.prop(self, "tooltip_text_override")
568 row = row.row(align=True)
569 row.alignment = 'RIGHT'
570 row.enabled = self.tooltip_text_override
571 row.prop(self, "qcd_ogl_widget_tooltip_text")
573 col = flow.column()
574 col.alignment = 'RIGHT'
576 row = col.row()
577 row.alignment = 'RIGHT'
578 row.prop(self, "tooltip_inner_override")
579 row = row.row(align=True)
580 row.alignment = 'RIGHT'
581 row.enabled = self.tooltip_inner_override
582 row.prop(self, "qcd_ogl_widget_tooltip_inner")
584 row = col.row()
585 row.alignment = 'RIGHT'
586 row.prop(self, "tooltip_outline_override")
587 row = row.row(align=True)
588 row.alignment = 'RIGHT'
589 row.enabled = self.tooltip_outline_override
590 row.prop(self, "qcd_ogl_widget_tooltip_outline")