2025-07-01
This commit is contained in:
@@ -0,0 +1,350 @@
|
||||
"""
|
||||
Copyright (C) 2019 Remington Creative
|
||||
|
||||
This file is part of Atomic Data Manager.
|
||||
|
||||
Atomic Data Manager is free software: you can redistribute
|
||||
it and/or modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
Atomic Data Manager is distributed in the hope that it will
|
||||
be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with Atomic Data Manager. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
This file contains the Atomic preferences UI, preferences properties, and
|
||||
some functions for syncing the preference properties with external factors.
|
||||
|
||||
"""
|
||||
|
||||
import bpy
|
||||
from bpy.utils import register_class
|
||||
from bpy.utils import unregister_class
|
||||
from atomic_data_manager import config
|
||||
from atomic_data_manager.updater import addon_updater_ops
|
||||
|
||||
|
||||
def set_enable_support_me_popup(value):
|
||||
# sets the value of the enable_support_me_popup boolean property
|
||||
|
||||
bpy.context.preferences.addons["atomic_data_manager"]\
|
||||
.preferences.enable_support_me_popup = value
|
||||
copy_prefs_to_config(None, None)
|
||||
bpy.ops.wm.save_userpref()
|
||||
|
||||
|
||||
def set_last_popup_day(day):
|
||||
# sets the value of the last_popup_day float property
|
||||
|
||||
bpy.context.preferences.addons["atomic_data_manager"]\
|
||||
.preferences.last_popup_day = day
|
||||
copy_prefs_to_config(None, None)
|
||||
|
||||
|
||||
def copy_prefs_to_config(self, context):
|
||||
# copies the values of Atomic's preferences to the variables in
|
||||
# config.py for global use
|
||||
|
||||
preferences = bpy.context.preferences
|
||||
|
||||
atomic_preferences = preferences.addons['atomic_data_manager']\
|
||||
.preferences
|
||||
|
||||
# visible atomic preferences
|
||||
config.enable_missing_file_warning = \
|
||||
atomic_preferences.enable_missing_file_warning
|
||||
|
||||
config.enable_pie_menu_ui = \
|
||||
atomic_preferences.enable_pie_menu_ui
|
||||
|
||||
config.enable_support_me_popup = \
|
||||
atomic_preferences.enable_support_me_popup
|
||||
|
||||
config.include_fake_users = \
|
||||
atomic_preferences.include_fake_users
|
||||
|
||||
# hidden atomic preferences
|
||||
config.pie_menu_type = \
|
||||
atomic_preferences.pie_menu_type
|
||||
|
||||
config.pie_menu_alt = \
|
||||
atomic_preferences.pie_menu_alt
|
||||
|
||||
config.pie_menu_any = \
|
||||
atomic_preferences.pie_menu_any
|
||||
|
||||
config.pie_menu_ctrl = \
|
||||
atomic_preferences.pie_menu_ctrl
|
||||
|
||||
config.pie_menu_oskey = \
|
||||
atomic_preferences.pie_menu_oskey
|
||||
|
||||
config.pie_menu_shift = \
|
||||
atomic_preferences.pie_menu_shift
|
||||
|
||||
config.last_popup_day = \
|
||||
atomic_preferences.last_popup_day
|
||||
|
||||
|
||||
def update_pie_menu_hotkeys(self, context):
|
||||
preferences = bpy.context.preferences
|
||||
atomic_preferences = preferences.addons['atomic_data_manager'] \
|
||||
.preferences
|
||||
|
||||
# add the hotkeys if the preference is enabled
|
||||
if atomic_preferences.enable_pie_menu_ui:
|
||||
add_pie_menu_hotkeys()
|
||||
|
||||
# remove the hotkeys otherwise
|
||||
else:
|
||||
remove_pie_menu_hotkeys()
|
||||
|
||||
|
||||
def add_pie_menu_hotkeys():
|
||||
# adds the pie menu hotkeys to blender's addon keymaps
|
||||
|
||||
global keymaps
|
||||
keyconfigs = bpy.context.window_manager.keyconfigs.addon
|
||||
|
||||
# check to see if a window keymap already exists
|
||||
if "Window" in keyconfigs.keymaps.keys():
|
||||
km = keyconfigs.keymaps['Window']
|
||||
|
||||
# if not, crate a new one
|
||||
else:
|
||||
km = keyconfigs.keymaps.new(
|
||||
name="Window",
|
||||
space_type='EMPTY',
|
||||
region_type='WINDOW'
|
||||
)
|
||||
|
||||
# add a new keymap item to that keymap
|
||||
kmi = km.keymap_items.new(
|
||||
idname="atomic.invoke_pie_menu_ui",
|
||||
type=config.pie_menu_type,
|
||||
value="PRESS",
|
||||
alt=config.pie_menu_alt,
|
||||
any=config.pie_menu_any,
|
||||
ctrl=config.pie_menu_ctrl,
|
||||
oskey=config.pie_menu_oskey,
|
||||
shift=config.pie_menu_shift,
|
||||
)
|
||||
|
||||
# # point the keymap item to our pie menu
|
||||
# kmi.properties.name = "ATOMIC_MT_main_pie"
|
||||
keymaps.append((km, kmi))
|
||||
|
||||
|
||||
def remove_pie_menu_hotkeys():
|
||||
# removes the pie menu hotkeys from blender's addon keymaps if they
|
||||
# exist there
|
||||
|
||||
global keymaps
|
||||
|
||||
# remove each hotkey in our keymaps list if it exists in blenders
|
||||
# addon keymaps
|
||||
for km, kmi in keymaps:
|
||||
km.keymap_items.remove(kmi)
|
||||
|
||||
# clear our keymaps list
|
||||
keymaps.clear()
|
||||
|
||||
|
||||
# Atomic Data Manager Preference Panel UI
|
||||
class ATOMIC_PT_preferences_panel(bpy.types.AddonPreferences):
|
||||
bl_idname = "atomic_data_manager"
|
||||
|
||||
# visible atomic preferences
|
||||
enable_missing_file_warning: bpy.props.BoolProperty(
|
||||
description="Display a warning on startup if Atomic detects "
|
||||
"missing files in your project",
|
||||
default=True
|
||||
)
|
||||
|
||||
enable_support_me_popup: bpy.props.BoolProperty(
|
||||
description="Occasionally display a popup asking if you would "
|
||||
"like to support Remington Creative",
|
||||
default=True
|
||||
)
|
||||
|
||||
include_fake_users: bpy.props.BoolProperty(
|
||||
description="Include data-blocks with only fake users in unused "
|
||||
"data detection",
|
||||
default=False
|
||||
)
|
||||
|
||||
enable_pie_menu_ui: bpy.props.BoolProperty(
|
||||
description="Enable the Atomic pie menu UI, so you can clean "
|
||||
"your project from anywhere.",
|
||||
default=True,
|
||||
update=update_pie_menu_hotkeys
|
||||
)
|
||||
|
||||
# hidden atomic preferences
|
||||
pie_menu_type: bpy.props.StringProperty(
|
||||
default="D"
|
||||
)
|
||||
|
||||
pie_menu_alt: bpy.props.BoolProperty(
|
||||
default=False
|
||||
)
|
||||
|
||||
pie_menu_any: bpy.props.BoolProperty(
|
||||
default=False
|
||||
)
|
||||
|
||||
pie_menu_ctrl: bpy.props.BoolProperty(
|
||||
default=False
|
||||
)
|
||||
|
||||
pie_menu_oskey: bpy.props.BoolProperty(
|
||||
default=False
|
||||
)
|
||||
|
||||
pie_menu_shift: bpy.props.BoolProperty(
|
||||
default=False
|
||||
)
|
||||
|
||||
last_popup_day: bpy.props.FloatProperty(
|
||||
default=0
|
||||
)
|
||||
|
||||
# add-on updater properties
|
||||
auto_check_update: bpy.props.BoolProperty(
|
||||
name="Auto-check for Update",
|
||||
description="If enabled, auto-check for updates using an interval",
|
||||
default=True,
|
||||
)
|
||||
|
||||
updater_intrval_months: bpy.props.IntProperty(
|
||||
name='Months',
|
||||
description="Number of months between checking for updates",
|
||||
default=0,
|
||||
min=0,
|
||||
max=6
|
||||
)
|
||||
updater_intrval_days: bpy.props.IntProperty(
|
||||
name='Days',
|
||||
description="Number of days between checking for updates",
|
||||
default=7,
|
||||
min=0,
|
||||
)
|
||||
updater_intrval_hours: bpy.props.IntProperty(
|
||||
name='Hours',
|
||||
description="Number of hours between checking for updates",
|
||||
default=0,
|
||||
min=0,
|
||||
max=23
|
||||
)
|
||||
updater_intrval_minutes: bpy.props.IntProperty(
|
||||
name='Minutes',
|
||||
description="Number of minutes between checking for updates",
|
||||
default=0,
|
||||
min=0,
|
||||
max=59
|
||||
)
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
split = layout.split()
|
||||
|
||||
# left column
|
||||
col = split.column()
|
||||
|
||||
# enable missing file warning toggle
|
||||
col.prop(
|
||||
self,
|
||||
"enable_missing_file_warning",
|
||||
text="Show Missing File Warning"
|
||||
)
|
||||
|
||||
# enable support me popup toggle
|
||||
col.prop(
|
||||
self,
|
||||
"enable_support_me_popup",
|
||||
text="Show \"Support Me\" Popup"
|
||||
)
|
||||
|
||||
# right column
|
||||
col = split.column()
|
||||
|
||||
# ignore fake users toggle
|
||||
col.prop(
|
||||
self,
|
||||
"include_fake_users",
|
||||
text="Include Fake Users"
|
||||
)
|
||||
|
||||
# pie menu settings
|
||||
pie_split = col.split(factor=0.55) # nice
|
||||
|
||||
# enable pie menu ui toggle
|
||||
pie_split.prop(
|
||||
self,
|
||||
"enable_pie_menu_ui",
|
||||
text="Enable Pie Menu"
|
||||
)
|
||||
|
||||
# put the property in a row so it can be disabled
|
||||
pie_row = pie_split.row()
|
||||
pie_row.enabled = self.enable_pie_menu_ui
|
||||
|
||||
if pie_row.enabled:
|
||||
# keymap item that contains our pie menu hotkey
|
||||
# note: keymap item index hardcoded with an index -- may be
|
||||
# dangerous if more keymap items are added
|
||||
kmi = bpy.context.window_manager.keyconfigs.addon.keymaps[
|
||||
'Window'].keymap_items[0]
|
||||
|
||||
# hotkey property
|
||||
pie_row.prop(
|
||||
kmi,
|
||||
"type",
|
||||
text="",
|
||||
full_event=True
|
||||
)
|
||||
|
||||
# update hotkey preferences
|
||||
self.pie_menu_type = kmi.type
|
||||
self.pie_menu_any = kmi.any
|
||||
self.pie_menu_alt = kmi.alt
|
||||
self.pie_menu_ctrl = kmi.ctrl
|
||||
self.pie_menu_oskey = kmi.oskey
|
||||
self.pie_menu_shift = kmi.shift
|
||||
|
||||
separator = layout.row() # extra space
|
||||
|
||||
# add-on updater box
|
||||
addon_updater_ops.update_settings_ui(self, context)
|
||||
|
||||
# update config with any new preferences
|
||||
copy_prefs_to_config(None, None)
|
||||
|
||||
|
||||
reg_list = [ATOMIC_PT_preferences_panel]
|
||||
keymaps = []
|
||||
|
||||
|
||||
def register():
|
||||
for cls in reg_list:
|
||||
register_class(cls)
|
||||
|
||||
# make sure global preferences are updated on registration
|
||||
copy_prefs_to_config(None, None)
|
||||
|
||||
# update keymaps
|
||||
add_pie_menu_hotkeys()
|
||||
|
||||
|
||||
def unregister():
|
||||
for cls in reg_list:
|
||||
unregister_class(cls)
|
||||
|
||||
remove_pie_menu_hotkeys()
|
||||
Reference in New Issue
Block a user