Cleanup: simplify file name incrementing logic
[blender-addons.git] / object_collection_manager / qcd_init.py
blob49951da351cbfb145dad778164cec179892ecde2
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 if "bpy" in locals():
22 import importlib
24 importlib.reload(internals)
25 importlib.reload(qcd_move_widget)
26 importlib.reload(qcd_operators)
27 importlib.reload(ui)
28 importlib.reload(preferences)
30 else:
31 from . import internals
32 from . import qcd_move_widget
33 from . import qcd_operators
34 from . import ui
35 from . import preferences
37 import os
38 import bpy
39 import bpy.utils.previews
40 from bpy.app.handlers import persistent
43 addon_qcd_keymaps = []
44 addon_qcd_view_hotkey_keymaps = []
45 addon_qcd_view_edit_mode_hotkey_keymaps = []
48 qcd_classes = (
49 qcd_move_widget.QCDMoveWidget,
50 qcd_operators.EnableAllQCDSlotsMeta,
51 qcd_operators.EnableAllQCDSlots,
52 qcd_operators.EnableAllQCDSlotsIsolated,
53 qcd_operators.IsolateSelectedObjectsCollections,
54 qcd_operators.DisableSelectedObjectsCollections,
55 qcd_operators.DisableAllNonQCDSlots,
56 qcd_operators.DisableAllCollections,
57 qcd_operators.SelectAllQCDObjects,
58 qcd_operators.DiscardQCDHistory,
59 qcd_operators.MoveToQCDSlot,
60 qcd_operators.ViewQCDSlot,
61 qcd_operators.ViewMoveQCDSlot,
62 qcd_operators.RenumerateQCDSlots,
63 ui.EnableAllQCDSlotsMenu,
67 @persistent
68 def save_internal_data(dummy):
69 cm = bpy.context.scene.collection_manager
71 cm.qcd_slots_blend_data = internals.qcd_slots.get_data_for_blend()
74 @persistent
75 def load_internal_data(dummy):
76 cm = bpy.context.scene.collection_manager
77 data = cm.qcd_slots_blend_data
79 if not data:
80 return
82 internals.qcd_slots.load_blend_data(data)
85 @persistent
86 def load_pre_handler(dummy):
87 internals.qcd_collection_state.clear()
88 for key in list(internals.qcd_history.keys()):
89 del internals.qcd_history[key]
92 def register_qcd():
93 for cls in qcd_classes:
94 bpy.utils.register_class(cls)
96 pcoll = bpy.utils.previews.new()
97 icons_dir = os.path.join(os.path.dirname(__file__), "icons")
98 pcoll.load("active_icon_base", os.path.join(icons_dir, "minus.png"), 'IMAGE', True)
99 pcoll.load("active_icon_text", os.path.join(icons_dir, "minus.png"), 'IMAGE', True)
100 pcoll.load("active_icon_text_sel", os.path.join(icons_dir, "minus.png"), 'IMAGE', True)
101 ui.preview_collections["icons"] = pcoll
103 wm = bpy.context.window_manager
104 if wm.keyconfigs.addon: # not present when started with --background
105 km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
106 kmi = km.keymap_items.new('view3d.qcd_move_widget', 'V', 'PRESS')
107 addon_qcd_keymaps.append((km, kmi))
109 bpy.app.handlers.save_pre.append(save_internal_data)
110 bpy.app.handlers.load_post.append(load_internal_data)
111 bpy.app.handlers.load_pre.append(load_pre_handler)
113 prefs = bpy.context.preferences.addons[__package__].preferences
115 if prefs.enable_qcd_view_hotkeys:
116 register_qcd_view_hotkeys()
118 if prefs.enable_qcd_view_edit_mode_hotkeys:
119 register_qcd_view_edit_mode_hotkeys()
121 bpy.types.VIEW3D_HT_header.append(ui.view3d_header_qcd_slots)
122 bpy.types.TOPBAR_HT_upper_bar.append(ui.view_layer_update)
125 def register_qcd_view_hotkeys():
126 wm = bpy.context.window_manager
127 if wm.keyconfigs.addon: # not present when started with --background
128 # create qcd hotkeys
129 qcd_hotkeys = [
130 ["ONE", False, "1"],
131 ["TWO", False, "2"],
132 ["THREE", False, "3"],
133 ["FOUR", False, "4"],
134 ["FIVE", False, "5"],
135 ["SIX", False, "6"],
136 ["SEVEN", False, "7"],
137 ["EIGHT", False, "8"],
138 ["NINE", False, "9"],
139 ["ZERO", False, "10"],
140 ["ONE", True, "11"],
141 ["TWO", True, "12"],
142 ["THREE", True, "13"],
143 ["FOUR", True, "14"],
144 ["FIVE", True, "15"],
145 ["SIX", True, "16"],
146 ["SEVEN", True, "17"],
147 ["EIGHT", True, "18"],
148 ["NINE", True, "19"],
149 ["ZERO", True, "20"],
152 for key in qcd_hotkeys:
153 for mode in ['Object Mode', 'Pose', 'Weight Paint']:
154 km = wm.keyconfigs.addon.keymaps.new(name=mode)
155 kmi = km.keymap_items.new('view3d.view_qcd_slot', key[0], 'PRESS', alt=key[1])
156 kmi.properties.slot = key[2]
157 kmi.properties.toggle = False
158 addon_qcd_view_hotkey_keymaps.append((km, kmi))
160 km = wm.keyconfigs.addon.keymaps.new(name=mode)
161 kmi = km.keymap_items.new('view3d.view_qcd_slot', key[0], 'PRESS',shift=True, alt=key[1])
162 kmi.properties.slot = key[2]
163 kmi.properties.toggle = True
164 addon_qcd_view_hotkey_keymaps.append((km, kmi))
166 km = wm.keyconfigs.addon.keymaps.new(name=mode)
167 kmi = km.keymap_items.new('view3d.enable_all_qcd_slots', 'PLUS', 'PRESS', shift=True)
168 addon_qcd_view_hotkey_keymaps.append((km, kmi))
170 km = wm.keyconfigs.addon.keymaps.new(name=mode)
171 kmi = km.keymap_items.new('view3d.isolate_selected_objects_collections', 'EQUAL', 'PRESS')
172 addon_qcd_view_hotkey_keymaps.append((km, kmi))
174 km = wm.keyconfigs.addon.keymaps.new(name=mode)
175 kmi = km.keymap_items.new('view3d.disable_selected_objects_collections', 'MINUS', 'PRESS')
176 addon_qcd_view_hotkey_keymaps.append((km, kmi))
178 km = wm.keyconfigs.addon.keymaps.new(name=mode)
179 kmi = km.keymap_items.new('view3d.disable_all_non_qcd_slots', 'PLUS', 'PRESS', shift=True, alt=True)
180 addon_qcd_view_hotkey_keymaps.append((km, kmi))
182 km = wm.keyconfigs.addon.keymaps.new(name=mode)
183 kmi = km.keymap_items.new('view3d.disable_all_collections', 'EQUAL', 'PRESS', alt=True, ctrl=True)
184 addon_qcd_view_hotkey_keymaps.append((km, kmi))
186 km = wm.keyconfigs.addon.keymaps.new(name=mode)
187 kmi = km.keymap_items.new('view3d.select_all_qcd_objects', 'PLUS', 'PRESS', shift=True, ctrl=True)
188 addon_qcd_view_hotkey_keymaps.append((km, kmi))
191 km = wm.keyconfigs.addon.keymaps.new(name=mode)
192 kmi = km.keymap_items.new('view3d.discard_qcd_history', 'EQUAL', 'PRESS', alt=True)
193 addon_qcd_view_hotkey_keymaps.append((km, kmi))
196 def register_qcd_view_edit_mode_hotkeys():
197 wm = bpy.context.window_manager
198 if wm.keyconfigs.addon: # not present when started with --background
199 # create qcd hotkeys
200 qcd_hotkeys = [
201 ["ONE", False, "1"],
202 ["TWO", False, "2"],
203 ["THREE", False, "3"],
204 ["FOUR", False, "4"],
205 ["FIVE", False, "5"],
206 ["SIX", False, "6"],
207 ["SEVEN", False, "7"],
208 ["EIGHT", False, "8"],
209 ["NINE", False, "9"],
210 ["ZERO", False, "10"],
211 ["ONE", True, "11"],
212 ["TWO", True, "12"],
213 ["THREE", True, "13"],
214 ["FOUR", True, "14"],
215 ["FIVE", True, "15"],
216 ["SIX", True, "16"],
217 ["SEVEN", True, "17"],
218 ["EIGHT", True, "18"],
219 ["NINE", True, "19"],
220 ["ZERO", True, "20"],
223 for mode in ["Mesh", "Curve", "Armature", "Metaball", "Lattice", "Grease Pencil Stroke Edit Mode"]:
224 for key in qcd_hotkeys:
225 km = wm.keyconfigs.addon.keymaps.new(name=mode)
226 kmi = km.keymap_items.new('view3d.view_qcd_slot', key[0], 'PRESS', alt=key[1])
227 kmi.properties.slot = key[2]
228 kmi.properties.toggle = False
229 addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
231 km = wm.keyconfigs.addon.keymaps.new(name=mode)
232 kmi = km.keymap_items.new('view3d.view_qcd_slot', key[0], 'PRESS',shift=True, alt=key[1])
233 kmi.properties.slot = key[2]
234 kmi.properties.toggle = True
235 addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
237 km = wm.keyconfigs.addon.keymaps.new(name=mode)
238 kmi = km.keymap_items.new('view3d.enable_all_qcd_slots', 'PLUS', 'PRESS', shift=True)
239 addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
241 km = wm.keyconfigs.addon.keymaps.new(name=mode)
242 kmi = km.keymap_items.new('view3d.isolate_selected_objects_collections', 'EQUAL', 'PRESS')
243 addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
245 km = wm.keyconfigs.addon.keymaps.new(name=mode)
246 kmi = km.keymap_items.new('view3d.disable_all_non_qcd_slots', 'PLUS', 'PRESS', shift=True, alt=True)
247 addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
249 km = wm.keyconfigs.addon.keymaps.new(name=mode)
250 kmi = km.keymap_items.new('view3d.disable_all_collections', 'EQUAL', 'PRESS', alt=True, ctrl=True)
251 addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
253 km = wm.keyconfigs.addon.keymaps.new(name=mode)
254 kmi = km.keymap_items.new('view3d.discard_qcd_history', 'EQUAL', 'PRESS', alt=True)
255 addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
258 km = wm.keyconfigs.addon.keymaps.new(name="Mesh")
259 kmi = km.keymap_items.new('wm.call_menu', 'ACCENT_GRAVE', 'PRESS')
260 kmi.properties.name = "VIEW3D_MT_edit_mesh_select_mode"
261 addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
265 def unregister_qcd():
266 bpy.types.VIEW3D_HT_header.remove(ui.view3d_header_qcd_slots)
267 bpy.types.TOPBAR_HT_upper_bar.remove(ui.view_layer_update)
269 for cls in qcd_classes:
270 bpy.utils.unregister_class(cls)
272 bpy.app.handlers.save_pre.remove(save_internal_data)
273 bpy.app.handlers.load_post.remove(load_internal_data)
274 bpy.app.handlers.load_pre.remove(load_pre_handler)
276 for pcoll in ui.preview_collections.values():
277 bpy.utils.previews.remove(pcoll)
278 ui.preview_collections.clear()
279 ui.last_icon_theme_text = None
280 ui.last_icon_theme_text_sel = None
282 # remove keymaps when qcd is deactivated
283 for km, kmi in addon_qcd_keymaps:
284 km.keymap_items.remove(kmi)
285 addon_qcd_keymaps.clear()
288 unregister_qcd_view_hotkeys()
290 unregister_qcd_view_edit_mode_hotkeys()
293 def unregister_qcd_view_hotkeys():
294 # remove keymaps when qcd view hotkeys are deactivated
295 for km, kmi in addon_qcd_view_hotkey_keymaps:
296 km.keymap_items.remove(kmi)
297 addon_qcd_view_hotkey_keymaps.clear()
300 def unregister_qcd_view_edit_mode_hotkeys():
301 # remove keymaps when qcd view hotkeys are deactivated
302 for km, kmi in addon_qcd_view_edit_mode_hotkey_keymaps:
303 km.keymap_items.remove(kmi)
304 addon_qcd_view_edit_mode_hotkey_keymaps.clear()