forked from bartvdbraak/blender
Speed up keymap editor a bit (less context changes)
This commit is contained in:
parent
30c317de70
commit
70109d0dc1
@ -1062,9 +1062,9 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
if km.modal:
|
if km.modal:
|
||||||
row.label(text="", icon='LINKED')
|
row.label(text="", icon='LINKED')
|
||||||
if km.user_defined:
|
if km.user_defined:
|
||||||
row.operator("wm.keymap_restore", text="Restore")
|
op = row.operator("wm.keymap_restore", text="Restore")
|
||||||
else:
|
else:
|
||||||
row.operator("wm.keymap_edit", text="Edit")
|
op = row.operator("wm.keymap_edit", text="Edit")
|
||||||
|
|
||||||
if km.children_expanded:
|
if km.children_expanded:
|
||||||
if children:
|
if children:
|
||||||
@ -1086,7 +1086,7 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
col = self.indented_layout(col, level + 1)
|
col = self.indented_layout(col, level + 1)
|
||||||
subcol = col.split(percentage=0.2).column()
|
subcol = col.split(percentage=0.2).column()
|
||||||
subcol.active = km.user_defined
|
subcol.active = km.user_defined
|
||||||
subcol.operator("wm.keyitem_add", text="Add New", icon='ZOOMIN')
|
op = subcol.operator("wm.keyitem_add", text="Add New", icon='ZOOMIN')
|
||||||
|
|
||||||
col.separator()
|
col.separator()
|
||||||
|
|
||||||
@ -1099,9 +1099,7 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
self.draw_entry(kc, entry, col, level + 1)
|
self.draw_entry(kc, entry, col, level + 1)
|
||||||
|
|
||||||
def draw_kmi(self, kc, km, kmi, layout, level):
|
def draw_kmi(self, kc, km, kmi, layout, level):
|
||||||
# reset keymap pointer, it might get changed by modal keymaps added after keymap items
|
map_type = kmi.map_type
|
||||||
layout.set_context_pointer("keymap", km)
|
|
||||||
layout.set_context_pointer("keyitem", kmi)
|
|
||||||
|
|
||||||
col = self.indented_layout(layout, level)
|
col = self.indented_layout(layout, level)
|
||||||
|
|
||||||
@ -1127,27 +1125,30 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
|
|
||||||
row = split.row()
|
row = split.row()
|
||||||
row.prop(kmi, "map_type", text="")
|
row.prop(kmi, "map_type", text="")
|
||||||
if kmi.map_type == 'KEYBOARD':
|
if map_type == 'KEYBOARD':
|
||||||
row.prop(kmi, "type", text="", full_event=True)
|
row.prop(kmi, "type", text="", full_event=True)
|
||||||
elif kmi.map_type == 'MOUSE':
|
elif map_type == 'MOUSE':
|
||||||
row.prop(kmi, "type", text="", full_event=True)
|
row.prop(kmi, "type", text="", full_event=True)
|
||||||
elif kmi.map_type == 'TWEAK':
|
elif map_type == 'TWEAK':
|
||||||
subrow = row.row()
|
subrow = row.row()
|
||||||
subrow.prop(kmi, "type", text="")
|
subrow.prop(kmi, "type", text="")
|
||||||
subrow.prop(kmi, "value", text="")
|
subrow.prop(kmi, "value", text="")
|
||||||
elif kmi.map_type == 'TIMER':
|
elif map_type == 'TIMER':
|
||||||
row.prop(kmi, "type", text="")
|
row.prop(kmi, "type", text="")
|
||||||
else:
|
else:
|
||||||
row.label()
|
row.label()
|
||||||
|
|
||||||
row.operator("wm.keyitem_restore", text="", icon='BACK')
|
if kmi.id:
|
||||||
row.operator("wm.keyitem_remove", text="", icon='X')
|
op = row.operator("wm.keyitem_restore", text="", icon='BACK')
|
||||||
|
op.item_id = kmi.id
|
||||||
|
op = row.operator("wm.keyitem_remove", text="", icon='X')
|
||||||
|
op.item_id = kmi.id
|
||||||
|
|
||||||
# Expanded, additional event settings
|
# Expanded, additional event settings
|
||||||
if kmi.expanded:
|
if kmi.expanded:
|
||||||
box = col.box()
|
box = col.box()
|
||||||
|
|
||||||
if kmi.map_type not in ('TEXTINPUT', 'TIMER'):
|
if map_type not in ('TEXTINPUT', 'TIMER'):
|
||||||
split = box.split(percentage=0.4)
|
split = box.split(percentage=0.4)
|
||||||
sub = split.row()
|
sub = split.row()
|
||||||
|
|
||||||
@ -1159,10 +1160,10 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
sub = split.column()
|
sub = split.column()
|
||||||
subrow = sub.row(align=True)
|
subrow = sub.row(align=True)
|
||||||
|
|
||||||
if kmi.map_type == 'KEYBOARD':
|
if map_type == 'KEYBOARD':
|
||||||
subrow.prop(kmi, "type", text="", event=True)
|
subrow.prop(kmi, "type", text="", event=True)
|
||||||
subrow.prop(kmi, "value", text="")
|
subrow.prop(kmi, "value", text="")
|
||||||
elif kmi.map_type == 'MOUSE':
|
elif map_type == 'MOUSE':
|
||||||
subrow.prop(kmi, "type", text="")
|
subrow.prop(kmi, "type", text="")
|
||||||
subrow.prop(kmi, "value", text="")
|
subrow.prop(kmi, "value", text="")
|
||||||
|
|
||||||
@ -1198,6 +1199,7 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
kmm = kc.find_keymap_modal(kmi.idname)
|
kmm = kc.find_keymap_modal(kmi.idname)
|
||||||
if kmm:
|
if kmm:
|
||||||
self.draw_km(kc, kmm, None, layout, level + 1)
|
self.draw_km(kc, kmm, None, layout, level + 1)
|
||||||
|
layout.set_context_pointer("keymap", km)
|
||||||
|
|
||||||
def draw_input_prefs(self, inputs, layout):
|
def draw_input_prefs(self, inputs, layout):
|
||||||
# General settings
|
# General settings
|
||||||
@ -1259,7 +1261,6 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
filtered_items = [kmi for kmi in km.items if filter in kmi.name.lower()]
|
filtered_items = [kmi for kmi in km.items if filter in kmi.name.lower()]
|
||||||
|
|
||||||
if len(filtered_items) != 0:
|
if len(filtered_items) != 0:
|
||||||
layout.set_context_pointer("keymap", km)
|
|
||||||
col = layout.column()
|
col = layout.column()
|
||||||
|
|
||||||
row = col.row()
|
row = col.row()
|
||||||
@ -1269,9 +1270,11 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
row.label()
|
row.label()
|
||||||
|
|
||||||
if km.user_defined:
|
if km.user_defined:
|
||||||
row.operator("wm.keymap_restore", text="Restore")
|
op = row.operator("wm.keymap_restore", text="Restore")
|
||||||
|
op.keymap = km
|
||||||
else:
|
else:
|
||||||
row.operator("wm.keymap_edit", text="Edit")
|
op = row.operator("wm.keymap_edit", text="Edit")
|
||||||
|
op.keymap = km
|
||||||
|
|
||||||
for kmi in filtered_items:
|
for kmi in filtered_items:
|
||||||
self.draw_kmi(kc, km, kmi, col, 1)
|
self.draw_kmi(kc, km, kmi, col, 1)
|
||||||
@ -1280,7 +1283,8 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
col = self.indented_layout(layout, 1)
|
col = self.indented_layout(layout, 1)
|
||||||
subcol = col.split(percentage=0.2).column()
|
subcol = col.split(percentage=0.2).column()
|
||||||
subcol.active = km.user_defined
|
subcol.active = km.user_defined
|
||||||
subcol.operator("wm.keyitem_add", text="Add New", icon='ZOOMIN')
|
op = subcol.operator("wm.keyitem_add", text="Add New", icon='ZOOMIN')
|
||||||
|
op.keymap = km
|
||||||
|
|
||||||
def draw_hierarchy(self, defkc, layout):
|
def draw_hierarchy(self, defkc, layout):
|
||||||
for entry in KM_HIERARCHY:
|
for entry in KM_HIERARCHY:
|
||||||
@ -1288,6 +1292,10 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
|
|
||||||
|
#import time
|
||||||
|
|
||||||
|
#start = time.time()
|
||||||
|
|
||||||
userpref = context.user_preferences
|
userpref = context.user_preferences
|
||||||
wm = context.manager
|
wm = context.manager
|
||||||
@ -1322,6 +1330,8 @@ class USERPREF_PT_input(bpy.types.Panel):
|
|||||||
self.draw_filtered(kc, col)
|
self.draw_filtered(kc, col)
|
||||||
else:
|
else:
|
||||||
self.draw_hierarchy(kc, col)
|
self.draw_hierarchy(kc, col)
|
||||||
|
|
||||||
|
#print("runtime", time.time() - start)
|
||||||
|
|
||||||
bpy.types.register(USERPREF_HT_header)
|
bpy.types.register(USERPREF_HT_header)
|
||||||
bpy.types.register(USERPREF_PT_tabs)
|
bpy.types.register(USERPREF_PT_tabs)
|
||||||
@ -1651,15 +1661,12 @@ class WM_OT_keyitem_restore(bpy.types.Operator):
|
|||||||
bl_idname = "wm.keyitem_restore"
|
bl_idname = "wm.keyitem_restore"
|
||||||
bl_label = "Restore Key Map Item"
|
bl_label = "Restore Key Map Item"
|
||||||
|
|
||||||
def poll(self, context):
|
item_id = IntProperty(attr="item_id", name="Item Identifier", description="Identifier of the item to remove")
|
||||||
kmi = context.keyitem
|
|
||||||
km = context.keymap
|
|
||||||
return km and kmi and kmi.id != 0
|
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
wm = context.manager
|
wm = context.manager
|
||||||
kmi = context.keyitem
|
|
||||||
km = context.keymap
|
km = context.keymap
|
||||||
|
kmi = km.item_from_id(self.properties.item_id)
|
||||||
|
|
||||||
km.restore_item_to_default(kmi)
|
km.restore_item_to_default(kmi)
|
||||||
|
|
||||||
@ -1695,10 +1702,12 @@ class WM_OT_keyitem_remove(bpy.types.Operator):
|
|||||||
bl_idname = "wm.keyitem_remove"
|
bl_idname = "wm.keyitem_remove"
|
||||||
bl_label = "Remove Key Map Item"
|
bl_label = "Remove Key Map Item"
|
||||||
|
|
||||||
|
item_id = IntProperty(attr="item_id", name="Item Identifier", description="Identifier of the item to remove")
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
wm = context.manager
|
wm = context.manager
|
||||||
kmi = context.keyitem
|
|
||||||
km = context.keymap
|
km = context.keymap
|
||||||
|
kmi = km.item_from_id(self.properties.item_id)
|
||||||
km.remove_item(kmi)
|
km.remove_item(kmi)
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
@ -365,6 +365,12 @@ void RNA_api_keymap(StructRNA *srna)
|
|||||||
parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
|
parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
|
||||||
RNA_def_property_flag(parm, PROP_REQUIRED);
|
RNA_def_property_flag(parm, PROP_REQUIRED);
|
||||||
|
|
||||||
|
func= RNA_def_function(srna, "item_from_id", "WM_keymap_item_find_id");
|
||||||
|
parm= RNA_def_property(func, "id", PROP_INT, PROP_NONE);
|
||||||
|
RNA_def_property_ui_text(parm, "id", "ID of the item.");
|
||||||
|
parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
|
||||||
|
RNA_def_function_return(func, parm);
|
||||||
|
|
||||||
func= RNA_def_function(srna, "copy_to_user", "WM_keymap_copy_to_user");
|
func= RNA_def_function(srna, "copy_to_user", "WM_keymap_copy_to_user");
|
||||||
parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "User editable key map.");
|
parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "User editable key map.");
|
||||||
RNA_def_function_return(func, parm);
|
RNA_def_function_return(func, parm);
|
||||||
|
@ -688,12 +688,7 @@ void WM_keymap_restore_item_to_default(bContext *C, wmKeyMap *keymap, wmKeyMapIt
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (km) {
|
if (km) {
|
||||||
wmKeyMapItem *orig;
|
wmKeyMapItem *orig = WM_keymap_item_find_id(km, kmi->id);
|
||||||
|
|
||||||
for (orig = km->items.first; orig; orig = orig->next) {
|
|
||||||
if (orig->id == kmi->id)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (orig) {
|
if (orig) {
|
||||||
if(strcmp(orig->idname, kmi->idname) != 0) {
|
if(strcmp(orig->idname, kmi->idname) != 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user