Skip to content

Commit 22f4770

Browse files
committed
Merge remote-tracking branch 'github/main'
2 parents c17eb52 + 60e0444 commit 22f4770

17 files changed

+1099
-810
lines changed

__init__.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
from . import preferences, public
2-
from .tool.addon_search import remember_expanded
3-
1+
from . import registration
42
bl_info = {
53
"name": "Development Kit Tool",
64
"version": (1, 0, 2),
@@ -14,11 +12,8 @@
1412

1513

1614
def register():
17-
public.PublicClass.clear_cache()
18-
preferences.register()
15+
registration.register()
1916

2017

2118
def unregister():
22-
remember_expanded()
23-
public.PublicClass.clear_cache()
24-
preferences.unregister()
19+
registration.unregister()

keymap.py

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import bpy
2+
3+
from mathutils import Vector, Euler, Matrix
4+
5+
6+
def get_keymap(keymap_name) -> "bpy.types.KeyMap":
7+
kc = bpy.context.window_manager.keyconfigs
8+
addon = kc.addon
9+
keymap = kc.default.keymaps.get(keymap_name, None)
10+
return addon.keymaps.new(
11+
keymap_name,
12+
space_type=keymap.space_type,
13+
region_type=keymap.region_type
14+
)
15+
16+
17+
def get_kmi_operator_properties(kmi: 'bpy.types.KeyMapItem') -> dict:
18+
"""获取kmi操作符的属性"""
19+
properties = kmi.properties
20+
prop_keys = dict(properties.items()).keys()
21+
dictionary = {i: getattr(properties, i, None) for i in prop_keys}
22+
del_key = []
23+
for item in dictionary:
24+
prop = getattr(properties, item, None)
25+
typ = type(prop)
26+
if prop:
27+
if typ == Vector:
28+
# 属性阵列-浮点数组
29+
dictionary[item] = dictionary[item].to_tuple()
30+
elif typ == Euler:
31+
dictionary[item] = dictionary[item][:]
32+
elif typ == Matrix:
33+
dictionary[item] = tuple(i[:] for i in dictionary[item])
34+
elif typ == bpy.types.bpy_prop_array:
35+
dictionary[item] = dictionary[item][:]
36+
elif typ in (str, bool, float, int, set, list, tuple):
37+
...
38+
elif typ.__name__ in [
39+
'TRANSFORM_OT_shrink_fatten',
40+
'TRANSFORM_OT_translate',
41+
'TRANSFORM_OT_edge_slide',
42+
'NLA_OT_duplicate',
43+
'ACTION_OT_duplicate',
44+
'GRAPH_OT_duplicate',
45+
'TRANSFORM_OT_translate',
46+
'OBJECT_OT_duplicate',
47+
'MESH_OT_loopcut',
48+
'MESH_OT_rip_edge',
49+
'MESH_OT_rip',
50+
'MESH_OT_duplicate',
51+
'MESH_OT_offset_edge_loops',
52+
'MESH_OT_extrude_faces_indiv',
53+
]: # 一些奇怪的操作符属性,不太好解析也用不上
54+
...
55+
del_key.append(item)
56+
else:
57+
print('emm 未知属性,', typ, dictionary[item])
58+
del_key.append(item)
59+
for i in del_key:
60+
dictionary.pop(i)
61+
return dictionary
62+
63+
64+
def draw_key(layout: bpy.types.UILayout):
65+
"""在偏好设置绘制插件快捷键"""
66+
import rna_keymap_ui
67+
from .tool.development_key import register_keymap_items
68+
69+
kc = bpy.context.window_manager.keyconfigs.user
70+
71+
for km, kmi in register_keymap_items:
72+
kmm = kc.keymaps.get(km.name)
73+
if kmm:
74+
is_find = False
75+
for kmii in kmm.keymap_items:
76+
if kmi.idname == kmii.idname:
77+
if get_kmi_operator_properties(kmi) == get_kmi_operator_properties(kmii):
78+
col = layout.column(align=True)
79+
if (not kmii.is_user_defined) and kmii.is_user_modified:
80+
col.context_pointer_set("keymap", kmm)
81+
is_find = True
82+
rna_keymap_ui.draw_kmi(["ADDON", "USER", "DEFAULT"], kc, kmm, kmii, col, 0)
83+
break # 找到了,但有可能会找到多个
84+
if not is_find:
85+
column = layout.column(align=True)
86+
column.label(text="Not Found Keymap, Please check the shortcut keys that have been changed")
87+
draw_restore_keymap_button(column)

preferences.py

Lines changed: 59 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,130 +1,88 @@
1-
import bpy.utils
2-
from bpy.props import BoolProperty, IntProperty, StringProperty, CollectionProperty
3-
from bpy.types import AddonPreferences
1+
import bpy
42

5-
from .public import PublicClass
6-
from .tool import (auto_reload_script,
7-
custom_key,
8-
fast_open_addon_code,
9-
restart_blender,
10-
addon_search,
11-
)
3+
from .tool import update_by_tool_name
4+
from .tool.auto_reload_script import AutoReloadScriptPreferences
125

13-
tool_mod = {'fast_open_addon_code': fast_open_addon_code,
14-
'enabled_reload_script': auto_reload_script,
15-
'restart_blender': restart_blender,
16-
'custom_key': custom_key,
17-
'save_addon_search': addon_search
18-
}
196

7+
class ShowExpandedItem(bpy.types.PropertyGroup):
8+
"""Used to record the expansion status of the addon"""
9+
show_expanded: bpy.props.BoolProperty(default=False)
2010

21-
def update_tool(un_register=False):
22-
pref = PublicClass.pref_()
23-
for prop_name, tool in tool_mod.items():
24-
is_enable = getattr(pref, prop_name, False)
25-
if un_register or (not is_enable):
26-
tool.unregister()
27-
elif is_enable:
28-
tool.register()
2911

30-
31-
class ShowExpanded(bpy.types.PropertyGroup):
32-
show_expanded: BoolProperty(default=False)
33-
34-
35-
class ToolPreferences(AddonPreferences):
12+
class ToolPreferences(bpy.types.AddonPreferences, AutoReloadScriptPreferences):
3613
bl_idname = __package__
3714

38-
@staticmethod
39-
def update_by_tool_name(tool_name):
40-
"""Change prop update tool"""
41-
42-
def update(self, context):
43-
prop = getattr(self, tool_name, None)
44-
if prop:
45-
tool_mod[tool_name].register()
46-
elif prop is False:
47-
tool_mod[tool_name].unregister()
15+
activate_auto_reload_script: bpy.props.BoolProperty(
16+
default=True,
17+
name="ReLoad Script",
18+
description="Automatically reload scripts and run them",
19+
update=update_by_tool_name("auto_reload_script"),
20+
)
4821

49-
return update
22+
activate_development_key: bpy.props.BoolProperty(
23+
default=True,
24+
name="Development Keymap",
25+
description="Commonly used Keymaps to speed up the development process",
26+
update=update_by_tool_name("development_key"),
27+
)
5028

51-
fast_open_addon_code: BoolProperty(
29+
activate_open_addon_script: bpy.props.BoolProperty(
5230
default=False,
53-
name='Feat Open Addon Script or Folder',
54-
description='Rewrite the drawing method of the addon section,'
55-
' and display it in the expansion of the addon',
56-
update=update_by_tool_name('fast_open_addon_code'), )
57-
restart_blender: BoolProperty(
58-
default=True,
59-
name='Restart Blender',
60-
description='Enabled Multiple Blender,or Restart Blender',
61-
update=update_by_tool_name('restart_blender'),
31+
name="Addon Open",
32+
description="Rewrite the drawing method of the addon section, and display it in the expansion of the addon",
33+
update=update_by_tool_name("open_addon_script")
6234
)
63-
custom_key: BoolProperty(
35+
activate_remember_addon_expanded: bpy.props.BoolProperty(
6436
default=True,
65-
name='Development Key',
66-
description='alt+Space Toggle Full Screen'
67-
'ctrl+alt+MiddleMouse Show Console'
68-
'ctrl+alt+RightMouse Switch User Translate Interface'
69-
'ctrl+alt+AccentGrave Save Home File',
70-
update=update_by_tool_name('custom_key'),
37+
name="Remember addon expanded",
38+
description="Record the expanded Addon and restore it the next time you open Blender",
39+
update=update_by_tool_name("remember_addon_expanded"),
7140
)
72-
save_addon_search: BoolProperty(
41+
42+
activate_remember_addon_search: bpy.props.BoolProperty(
7343
default=True,
74-
name='Save addon search',
75-
description='',
76-
update=update_by_tool_name('save_addon_search'),
44+
name="Remember addon search",
45+
description="Record the Addon search and restore it the next time you start Blender",
46+
update=update_by_tool_name("remember_addon_search"),
7747
)
78-
addon_search: StringProperty()
79-
addon_show_expanded: CollectionProperty(type=ShowExpanded)
8048

81-
enabled_reload_script: BoolProperty(
49+
activate_restart_blender: bpy.props.BoolProperty(
8250
default=True,
83-
name='ReLoad Script Tool',
84-
description='',
85-
update=update_by_tool_name('enabled_reload_script'),
51+
name="Restart Blender",
52+
description="Enable multiple Blenders or restart Blender, please be careful to save the edit file!!!!",
53+
update=update_by_tool_name("restart_blender"),
8654
)
8755

88-
# Auto Reload
89-
def update_reload_script(self, context):
90-
text = context.space_data.text
91-
try:
92-
bpy.ops.text.reload()
93-
if self.auto_run_script:
94-
try:
95-
bpy.ops.text.run_script()
96-
print(f'Reload Script {text.name},and Run Script!!!')
97-
except Exception as e:
98-
print('Run Error!!', e.args)
99-
except Exception as e:
100-
print(f'Reload Script {text.name} Error,Perhaps this script does not exist', e.args)
101-
self.auto_reload_script = False
102-
103-
reload_script_number: IntProperty(default=True,
104-
update=update_reload_script)
105-
auto_run_script: BoolProperty(name='Auto run script switch, only when auto reload script is turned on can it run',
106-
options={'SKIP_SAVE'},
107-
default=False)
108-
109-
auto_reload_script: BoolProperty(name="Whether to automatically reload scripts", default=True, )
56+
# Other Property
57+
addon_show_expanded: bpy.props.CollectionProperty(type=ShowExpandedItem)
58+
addon_search: bpy.props.StringProperty(default="")
11059

11160
def draw(self, context):
112-
for i in ('fast_open_addon_code',
113-
'enabled_reload_script',
114-
'restart_blender',
115-
'custom_key',
116-
'save_addon_search',
117-
):
118-
self.layout.prop(self, i)
61+
from .keymap import draw_key
62+
63+
column = self.layout.column(align=True)
64+
for prop in self.bl_rna.properties:
65+
if prop.identifier.startswith("activate_"):
66+
self.draw_prop(column, prop.identifier)
67+
68+
if self.activate_development_key:
69+
column.separator()
70+
col = column.box().column(align=True)
71+
col.label(text="Keymap")
72+
draw_key(col)
73+
74+
def draw_prop(self, layout, identifier) -> None:
75+
split = layout.row(align=True).split(factor=.2, align=True)
76+
prop = self.bl_rna.properties[identifier]
77+
split.prop(self, identifier, toggle=True, expand=True)
78+
split.label(text=prop.description)
11979

12080

12181
def register():
122-
bpy.utils.register_class(ShowExpanded)
82+
bpy.utils.register_class(ShowExpandedItem)
12383
bpy.utils.register_class(ToolPreferences)
124-
update_tool()
12584

12685

12786
def unregister():
12887
bpy.utils.unregister_class(ToolPreferences)
129-
bpy.utils.unregister_class(ShowExpanded)
130-
update_tool(un_register=True)
88+
bpy.utils.unregister_class(ShowExpandedItem)

public.py

Lines changed: 0 additions & 99 deletions
This file was deleted.

0 commit comments

Comments
 (0)