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
24 importlib
.reload(internals
)
25 importlib
.reload(qcd_move_widget
)
26 importlib
.reload(qcd_operators
)
28 importlib
.reload(preferences
)
31 from . import internals
32 from . import qcd_move_widget
33 from . import qcd_operators
35 from . import preferences
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
= []
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
,
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()
75 def load_internal_data(dummy
):
76 cm
= bpy
.context
.scene
.collection_manager
77 data
= cm
.qcd_slots_blend_data
82 internals
.qcd_slots
.load_blend_data(data
)
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
]
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
132 ["THREE", False, "3"],
133 ["FOUR", False, "4"],
134 ["FIVE", False, "5"],
136 ["SEVEN", False, "7"],
137 ["EIGHT", False, "8"],
138 ["NINE", False, "9"],
139 ["ZERO", False, "10"],
142 ["THREE", True, "13"],
143 ["FOUR", True, "14"],
144 ["FIVE", True, "15"],
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
203 ["THREE", False, "3"],
204 ["FOUR", False, "4"],
205 ["FIVE", False, "5"],
207 ["SEVEN", False, "7"],
208 ["EIGHT", False, "8"],
209 ["NINE", False, "9"],
210 ["ZERO", False, "10"],
213 ["THREE", True, "13"],
214 ["FOUR", True, "14"],
215 ["FIVE", True, "15"],
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()