Cleanup: simplify file name incrementing logic
[blender-addons.git] / object_collection_manager / preferences.py
blob53f4bacc0bde4d88c23de7b4b346a2e46680f6df
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 else:
44 qcd_init.unregister_qcd()
46 def update_qcd_view_hotkeys_status(self, context):
47 if self.enable_qcd_view_hotkeys:
48 qcd_init.register_qcd_view_hotkeys()
49 else:
50 qcd_init.unregister_qcd_view_hotkeys()
52 def update_qcd_view_edit_mode_hotkeys_status(self, context):
53 if self.enable_qcd_view_edit_mode_hotkeys:
54 qcd_init.register_qcd_view_edit_mode_hotkeys()
55 else:
56 qcd_init.unregister_qcd_view_edit_mode_hotkeys()
58 def get_tool_text(self):
59 if self.tool_text_override:
60 return self["tool_text_color"]
61 else:
62 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.text
63 self["tool_text_color"] = color.r, color.g, color.b
64 return self["tool_text_color"]
66 def set_tool_text(self, values):
67 self["tool_text_color"] = values[0], values[1], values[2]
70 def get_tool_text_sel(self):
71 if self.tool_text_sel_override:
72 return self["tool_text_sel_color"]
73 else:
74 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.text_sel
75 self["tool_text_sel_color"] = color.r, color.g, color.b
76 return self["tool_text_sel_color"]
78 def set_tool_text_sel(self, values):
79 self["tool_text_sel_color"] = values[0], values[1], values[2]
82 def get_tool_inner(self):
83 if self.tool_inner_override:
84 return self["tool_inner_color"]
85 else:
86 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.inner
87 self["tool_inner_color"] = color[0], color[1], color[2], color[3]
88 return self["tool_inner_color"]
90 def set_tool_inner(self, values):
91 self["tool_inner_color"] = values[0], values[1], values[2], values[3]
94 def get_tool_inner_sel(self):
95 if self.tool_inner_sel_override:
96 return self["tool_inner_sel_color"]
97 else:
98 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.inner_sel
99 self["tool_inner_sel_color"] = color[0], color[1], color[2], color[3]
100 return self["tool_inner_sel_color"]
102 def set_tool_inner_sel(self, values):
103 self["tool_inner_sel_color"] = values[0], values[1], values[2], values[3]
106 def get_tool_outline(self):
107 if self.tool_outline_override:
108 return self["tool_outline_color"]
109 else:
110 color = bpy.context.preferences.themes[0].user_interface.wcol_tool.outline
111 self["tool_outline_color"] = color.r, color.g, color.b
112 return self["tool_outline_color"]
114 def set_tool_outline(self, values):
115 self["tool_outline_color"] = values[0], values[1], values[2]
118 def get_menu_back_text(self):
119 if self.menu_back_text_override:
120 return self["menu_back_text_color"]
121 else:
122 color = bpy.context.preferences.themes[0].user_interface.wcol_menu_back.text
123 self["menu_back_text_color"] = color.r, color.g, color.b
124 return self["menu_back_text_color"]
126 def set_menu_back_text(self, values):
127 self["menu_back_text_color"] = values[0], values[1], values[2]
130 def get_menu_back_inner(self):
131 if self.menu_back_inner_override:
132 return self["menu_back_inner_color"]
133 else:
134 color = bpy.context.preferences.themes[0].user_interface.wcol_menu_back.inner
135 self["menu_back_inner_color"] = color[0], color[1], color[2], color[3]
136 return self["menu_back_inner_color"]
138 def set_menu_back_inner(self, values):
139 self["menu_back_inner_color"] = values[0], values[1], values[2], values[3]
142 def get_menu_back_outline(self):
143 if self.menu_back_outline_override:
144 return self["menu_back_outline_color"]
145 else:
146 color = bpy.context.preferences.themes[0].user_interface.wcol_menu_back.outline
147 self["menu_back_outline_color"] = color.r, color.g, color.b
148 return self["menu_back_outline_color"]
150 def set_menu_back_outline(self, values):
151 self["menu_back_outline_color"] = values[0], values[1], values[2]
154 def get_tooltip_text(self):
155 if self.tooltip_text_override:
156 return self["tooltip_text_color"]
157 else:
158 color = bpy.context.preferences.themes[0].user_interface.wcol_tooltip.text
159 self["tooltip_text_color"] = color.r, color.g, color.b
160 return self["tooltip_text_color"]
162 def set_tooltip_text(self, values):
163 self["tooltip_text_color"] = values[0], values[1], values[2]
166 def get_tooltip_inner(self):
167 if self.tooltip_inner_override:
168 return self["tooltip_inner_color"]
169 else:
170 color = bpy.context.preferences.themes[0].user_interface.wcol_tooltip.inner
171 self["tooltip_inner_color"] = color[0], color[1], color[2], color[3]
172 return self["tooltip_inner_color"]
174 def set_tooltip_inner(self, values):
175 self["tooltip_inner_color"] = values[0], values[1], values[2], values[3]
178 def get_tooltip_outline(self):
179 if self.tooltip_outline_override:
180 return self["tooltip_outline_color"]
181 else:
182 color = bpy.context.preferences.themes[0].user_interface.wcol_tooltip.outline
183 self["tooltip_outline_color"] = color.r, color.g, color.b
184 return self["tooltip_outline_color"]
186 def set_tooltip_outline(self, values):
187 self["tooltip_outline_color"] = values[0], values[1], values[2]
190 class CMPreferences(AddonPreferences):
191 bl_idname = __package__
193 # ENABLE DISABLE OBJECTS OVERRIDE
194 enable_disable_objects_override: BoolProperty(
195 name="Disable objects instead of Hiding",
196 description=(
197 "Replace the object hiding hotkeys with object disabling hotkeys and add them to the Object->Show/Hide menu.\n"
198 "Disabling objects prevents them from being automatically shown again when collections are unexcluded"
200 default=False,
201 update=update_disable_objects_hotkeys_status,
204 # ENABLE QCD BOOLS
205 enable_qcd: BoolProperty(
206 name="QCD",
207 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",
208 default=True,
209 update=update_qcd_status,
212 enable_qcd_view_hotkeys: BoolProperty(
213 name="QCD Hotkeys",
214 description="Enable/Disable the numerical hotkeys to view QCD slots",
215 default=True,
216 update=update_qcd_view_hotkeys_status,
219 enable_qcd_view_edit_mode_hotkeys: BoolProperty(
220 name="QCD Edit Mode Hotkeys",
221 description="Enable/Disable the numerical hotkeys to view QCD slots in Edit Mode",
222 default=False,
223 update=update_qcd_view_edit_mode_hotkeys_status,
227 # OVERRIDE BOOLS
228 tool_text_override: BoolProperty(
229 name="Text",
230 description="Override Theme Text Color",
231 default=False,
234 tool_text_sel_override: BoolProperty(
235 name="Selection",
236 description="Override Theme Text Selection Color",
237 default=False,
240 tool_inner_override: BoolProperty(
241 name="Inner",
242 description="Override Theme Inner Color",
243 default=False,
246 tool_inner_sel_override: BoolProperty(
247 name="Selection",
248 description="Override Theme Inner Selection Color",
249 default=False,
252 tool_outline_override: BoolProperty(
253 name="Outline",
254 description="Override Theme Outline Color",
255 default=False,
258 menu_back_text_override: BoolProperty(
259 name="Text",
260 description="Override Theme Text Color",
261 default=False,
264 menu_back_inner_override: BoolProperty(
265 name="Inner",
266 description="Override Theme Inner Color",
267 default=False,
270 menu_back_outline_override: BoolProperty(
271 name="Outline",
272 description="Override Theme Outline Color",
273 default=False,
276 tooltip_text_override: BoolProperty(
277 name="Text",
278 description="Override Theme Text Color",
279 default=False,
282 tooltip_inner_override: BoolProperty(
283 name="Inner",
284 description="Override Theme Inner Color",
285 default=False,
288 tooltip_outline_override: BoolProperty(
289 name="Outline",
290 description="Override Theme Outline Color",
291 default=False,
295 # OVERRIDE COLORS
296 qcd_ogl_widget_tool_text: FloatVectorProperty(
297 name="",
298 description="QCD Move Widget Tool Text Color",
299 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.text,
300 subtype='COLOR_GAMMA',
301 min=0.0,
302 max=1.0,
303 get=get_tool_text,
304 set=set_tool_text,
307 qcd_ogl_widget_tool_text_sel: FloatVectorProperty(
308 name="",
309 description="QCD Move Widget Tool Text Selection Color",
310 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.text_sel,
311 subtype='COLOR_GAMMA',
312 min=0.0,
313 max=1.0,
314 get=get_tool_text_sel,
315 set=set_tool_text_sel,
318 qcd_ogl_widget_tool_inner: FloatVectorProperty(
319 name="",
320 description="QCD Move Widget Tool Inner Color",
321 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.inner,
322 subtype='COLOR_GAMMA',
323 min=0.0,
324 max=1.0,
325 size=4,
326 get=get_tool_inner,
327 set=set_tool_inner,
330 qcd_ogl_widget_tool_inner_sel: FloatVectorProperty(
331 name="",
332 description="QCD Move Widget Tool Inner Selection Color",
333 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.inner_sel,
334 subtype='COLOR_GAMMA',
335 min=0.0,
336 max=1.0,
337 size=4,
338 get=get_tool_inner_sel,
339 set=set_tool_inner_sel,
342 qcd_ogl_widget_tool_outline: FloatVectorProperty(
343 name="",
344 description="QCD Move Widget Tool Outline Color",
345 default=bpy.context.preferences.themes[0].user_interface.wcol_tool.outline,
346 subtype='COLOR_GAMMA',
347 min=0.0,
348 max=1.0,
349 get=get_tool_outline,
350 set=set_tool_outline,
353 qcd_ogl_widget_menu_back_text: FloatVectorProperty(
354 name="",
355 description="QCD Move Widget Menu Back Text Color",
356 default=bpy.context.preferences.themes[0].user_interface.wcol_menu_back.text,
357 subtype='COLOR_GAMMA',
358 min=0.0,
359 max=1.0,
360 get=get_menu_back_text,
361 set=set_menu_back_text,
364 qcd_ogl_widget_menu_back_inner: FloatVectorProperty(
365 name="",
366 description="QCD Move Widget Menu Back Inner Color",
367 default=bpy.context.preferences.themes[0].user_interface.wcol_menu_back.inner,
368 subtype='COLOR_GAMMA',
369 min=0.0,
370 max=1.0,
371 size=4,
372 get=get_menu_back_inner,
373 set=set_menu_back_inner,
376 qcd_ogl_widget_menu_back_outline: FloatVectorProperty(
377 name="",
378 description="QCD Move Widget Menu Back Outline Color",
379 default=bpy.context.preferences.themes[0].user_interface.wcol_menu_back.outline,
380 subtype='COLOR_GAMMA',
381 min=0.0,
382 max=1.0,
383 get=get_menu_back_outline,
384 set=set_menu_back_outline,
387 qcd_ogl_widget_tooltip_text: FloatVectorProperty(
388 name="",
389 description="QCD Move Widget Tooltip Text Color",
390 default=bpy.context.preferences.themes[0].user_interface.wcol_tooltip.text,
391 subtype='COLOR_GAMMA',
392 min=0.0,
393 max=1.0,
394 get=get_tooltip_text,
395 set=set_tooltip_text,
398 qcd_ogl_widget_tooltip_inner: FloatVectorProperty(
399 name="",
400 description="QCD Move Widget Tooltip Inner Color",
401 default=bpy.context.preferences.themes[0].user_interface.wcol_tooltip.inner,
402 subtype='COLOR_GAMMA',
403 min=0.0,
404 max=1.0,
405 size=4,
406 get=get_tooltip_inner,
407 set=set_tooltip_inner,
410 qcd_ogl_widget_tooltip_outline: FloatVectorProperty(
411 name="",
412 description="QCD Move Widget Tooltip Outline Color",
413 default=bpy.context.preferences.themes[0].user_interface.wcol_tooltip.outline,
414 subtype='COLOR_GAMMA',
415 min=0.0,
416 max=1.0,
417 get=get_tooltip_outline,
418 set=set_tooltip_outline,
421 # NON ACTIVE ICON ALPHA
422 qcd_ogl_selected_icon_alpha: FloatProperty(
423 name="Selected Icon Alpha",
424 description="Set the 'Selected' icon's alpha value",
425 default=0.9,
426 min=0.0,
427 max=1.0,
430 qcd_ogl_objects_icon_alpha: FloatProperty(
431 name="Objects Icon Alpha",
432 description="Set the 'Objects' icon's alpha value",
433 default=0.5,
434 min=0.0,
435 max=1.0,
438 def draw(self, context):
439 layout = self.layout
440 box = layout.box()
442 box.row().prop(self, "enable_disable_objects_override")
443 box.row().prop(self, "enable_qcd")
445 if not self.enable_qcd:
446 return
448 box.row().prop(self, "enable_qcd_view_hotkeys")
449 box.row().prop(self, "enable_qcd_view_edit_mode_hotkeys")
451 box.row().label(text="QCD Move Widget")
453 # TOOL OVERRIDES
454 tool_box = box.box()
455 tool_box.row().label(text="Tool Theme Overrides:")
457 overrides = tool_box.split(align=True)
459 # Column 1
460 col = overrides.column()
461 col.alignment = 'RIGHT'
463 # Text
464 override = col.row(align=True)
465 override.alignment = 'RIGHT'
466 checkbox = override.row(align=True)
467 checkbox.alignment = 'RIGHT'
468 checkbox.label(text="Text")
469 checkbox.prop(self, "tool_text_override", text="")
470 color_picker = override.row(align=True)
471 color_picker.alignment = 'RIGHT'
472 color_picker.enabled = self.tool_text_override
473 color_picker.prop(self, "qcd_ogl_widget_tool_text")
475 # Text Selection
476 override = col.row(align=True)
477 override.alignment = 'RIGHT'
478 checkbox = override.row(align=True)
479 checkbox.alignment = 'RIGHT'
480 checkbox.label(text="Selection")
481 checkbox.prop(self, "tool_text_sel_override", text="")
482 color_picker = override.row(align=True)
483 color_picker.alignment = 'RIGHT'
484 color_picker.enabled = self.tool_text_sel_override
485 color_picker.prop(self, "qcd_ogl_widget_tool_text_sel")
487 # Column 2
488 col = overrides.column()
489 col.alignment = 'RIGHT'
491 # Inner
492 override = col.row(align=True)
493 override.alignment = 'RIGHT'
494 checkbox = override.row(align=True)
495 checkbox.alignment = 'RIGHT'
496 checkbox.label(text="Inner")
497 checkbox.prop(self, "tool_inner_override", text="")
498 color_picker = override.row(align=True)
499 color_picker.alignment = 'RIGHT'
500 color_picker.enabled = self.tool_inner_override
501 color_picker.prop(self, "qcd_ogl_widget_tool_inner")
503 # Inner Selection
504 override = col.row(align=True)
505 override.alignment = 'RIGHT'
506 checkbox = override.row(align=True)
507 checkbox.alignment = 'RIGHT'
508 checkbox.label(text="Selection")
509 checkbox.prop(self, "tool_inner_sel_override", text="")
510 color_picker = override.row(align=True)
511 color_picker.alignment = 'RIGHT'
512 color_picker.enabled = self.tool_inner_sel_override
513 color_picker.prop(self, "qcd_ogl_widget_tool_inner_sel")
515 # Outline
516 override = col.row(align=True)
517 override.alignment = 'RIGHT'
518 checkbox = override.row(align=True)
519 checkbox.alignment = 'RIGHT'
520 checkbox.label(text="Outline")
521 checkbox.prop(self, "tool_outline_override", text="")
522 color_picker = override.row(align=True)
523 color_picker.alignment = 'RIGHT'
524 color_picker.enabled = self.tool_outline_override
525 color_picker.prop(self, "qcd_ogl_widget_tool_outline")
527 # Icon Alpha
528 tool_box.row().label(text="Icon Alpha:")
529 icon_fade_row = tool_box.row()
530 icon_fade_row.alignment = 'EXPAND'
531 icon_fade_row.prop(self, "qcd_ogl_selected_icon_alpha", text="Selected")
532 icon_fade_row.prop(self, "qcd_ogl_objects_icon_alpha", text="Objects")
535 # MENU BACK OVERRIDES
536 menu_back_box = box.box()
537 menu_back_box.row().label(text="Menu Back Theme Overrides:")
539 overrides = menu_back_box.split(align=True)
541 # Column 1
542 col = overrides.column()
543 col.alignment = 'RIGHT'
545 # Text
546 override = col.row(align=True)
547 override.alignment = 'RIGHT'
548 checkbox = override.row(align=True)
549 checkbox.alignment = 'RIGHT'
550 checkbox.label(text="Text")
551 checkbox.prop(self, "menu_back_text_override", text="")
552 color_picker = override.row(align=True)
553 color_picker.alignment = 'RIGHT'
554 color_picker.enabled = self.menu_back_text_override
555 color_picker.prop(self, "qcd_ogl_widget_menu_back_text")
557 # Column 2
558 col = overrides.column()
559 col.alignment = 'RIGHT'
561 # Inner
562 override = col.row(align=True)
563 override.alignment = 'RIGHT'
564 checkbox = override.row(align=True)
565 checkbox.alignment = 'RIGHT'
566 checkbox.label(text="Inner")
567 checkbox.prop(self, "menu_back_inner_override", text="")
568 color_picker = override.row(align=True)
569 color_picker.alignment = 'RIGHT'
570 color_picker.enabled = self.menu_back_inner_override
571 color_picker.prop(self, "qcd_ogl_widget_menu_back_inner")
573 # Outline
574 override = col.row(align=True)
575 override.alignment = 'RIGHT'
576 checkbox = override.row(align=True)
577 checkbox.alignment = 'RIGHT'
578 checkbox.label(text="Outline")
579 checkbox.prop(self, "menu_back_outline_override", text="")
580 color_picker = override.row(align=True)
581 color_picker.alignment = 'RIGHT'
582 color_picker.enabled = self.menu_back_outline_override
583 color_picker.prop(self, "qcd_ogl_widget_menu_back_outline")
586 # TOOLTIP OVERRIDES
587 tooltip_box = box.box()
588 tooltip_box.row().label(text="Tooltip Theme Overrides:")
590 overrides = tooltip_box.split(align=True)
592 # Column 1
593 col = overrides.column()
594 col.alignment = 'RIGHT'
596 # Text
597 override = col.row(align=True)
598 override.alignment = 'RIGHT'
599 checkbox = override.row(align=True)
600 checkbox.alignment = 'RIGHT'
601 checkbox.label(text="Text")
602 checkbox.prop(self, "tooltip_text_override", text="")
603 color_picker = override.row(align=True)
604 color_picker.alignment = 'RIGHT'
605 color_picker.enabled = self.tooltip_text_override
606 color_picker.prop(self, "qcd_ogl_widget_tooltip_text")
608 # Column 2
609 col = overrides.column()
610 col.alignment = 'RIGHT'
612 # Inner
613 override = col.row(align=True)
614 override.alignment = 'RIGHT'
615 checkbox = override.row(align=True)
616 checkbox.alignment = 'RIGHT'
617 checkbox.label(text="Inner")
618 checkbox.prop(self, "tooltip_inner_override", text="")
619 color_picker = override.row(align=True)
620 color_picker.alignment = 'RIGHT'
621 color_picker.enabled = self.tooltip_inner_override
622 color_picker.prop(self, "qcd_ogl_widget_tooltip_inner")
624 # Outline
625 override = col.row(align=True)
626 override.alignment = 'RIGHT'
627 checkbox = override.row(align=True)
628 checkbox.alignment = 'RIGHT'
629 checkbox.label(text="Outline")
630 checkbox.prop(self, "tooltip_outline_override", text="")
631 color_picker = override.row(align=True)
632 color_picker.alignment = 'RIGHT'
633 color_picker.enabled = self.tooltip_outline_override
634 color_picker.prop(self, "qcd_ogl_widget_tooltip_outline")