forked from bartvdbraak/blender
Added search filtering to key map editor - searches in UI names of operators
This commit is contained in:
parent
8a61ad3cd2
commit
b9dbd53aea
@ -1260,7 +1260,6 @@ class USERPREF_PT_input(bpy.types.Panel):
|
||||
km = kc.find_keymap(idname, space_type = spaceid, region_type = regionid)
|
||||
|
||||
if km:
|
||||
km = km.active()
|
||||
self.draw_km(kc, km, children, col, level)
|
||||
|
||||
def indented_layout(self, layout, level):
|
||||
@ -1275,6 +1274,8 @@ class USERPREF_PT_input(bpy.types.Panel):
|
||||
return col
|
||||
|
||||
def draw_km(self, kc, km, children, layout, level):
|
||||
km = km.active()
|
||||
|
||||
layout.set_context_pointer("keymap", km)
|
||||
|
||||
col = self.indented_layout(layout, level)
|
||||
@ -1463,7 +1464,35 @@ class USERPREF_PT_input(bpy.types.Panel):
|
||||
sub.prop(inputs, "ndof_rotate_speed", text="Orbit Speed")
|
||||
|
||||
row.separator()
|
||||
|
||||
def draw_filtered(self, kc, layout):
|
||||
|
||||
for km in kc.keymaps:
|
||||
filtered_items = [kmi for kmi in km.items if kmi.name.lower().find(kc.filter.lower()) != -1]
|
||||
|
||||
if len(filtered_items) != 0:
|
||||
km = km.active()
|
||||
|
||||
col = layout.column()
|
||||
col.set_context_pointer("keymap", km)
|
||||
row = col.row()
|
||||
row.label(text=km.name, icon="DOT")
|
||||
|
||||
row.label()
|
||||
row.label()
|
||||
|
||||
if km.user_defined:
|
||||
row.operator("WM_OT_keymap_restore", text="Restore")
|
||||
else:
|
||||
row.operator("WM_OT_keymap_edit", text="Edit")
|
||||
|
||||
for kmi in filtered_items:
|
||||
self.draw_kmi(kc, km, kmi, col, 1)
|
||||
|
||||
def draw_hierarchy(self, defkc, layout):
|
||||
for entry in KM_HIERARCHY:
|
||||
self.draw_entry(defkc, entry, layout)
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
@ -1480,17 +1509,23 @@ class USERPREF_PT_input(bpy.types.Panel):
|
||||
# Keymap Settings
|
||||
col = split.column()
|
||||
# kc = wm.active_keyconfig
|
||||
defkc = wm.default_keyconfig
|
||||
kc = wm.default_keyconfig
|
||||
|
||||
sub = col.column()
|
||||
subrow = sub.row()
|
||||
subrow.prop_object(wm, "active_keyconfig", wm, "keyconfigs", text="Configuration:")
|
||||
subrow.label()
|
||||
|
||||
subsplit = sub.split()
|
||||
subcol = subsplit.column()
|
||||
subcol.prop_object(wm, "active_keyconfig", wm, "keyconfigs", text="Configuration:")
|
||||
|
||||
subcol = subsplit.column()
|
||||
subcol.prop(kc, "filter", icon="VIEWZOOM")
|
||||
|
||||
col.separator()
|
||||
|
||||
for entry in KM_HIERARCHY:
|
||||
self.draw_entry(defkc, entry, col)
|
||||
if kc.filter != "":
|
||||
self.draw_filtered(kc, col)
|
||||
else:
|
||||
self.draw_hierarchy(kc, col)
|
||||
|
||||
bpy.types.register(USERPREF_HT_header)
|
||||
bpy.types.register(USERPREF_PT_tabs)
|
||||
@ -1607,7 +1642,7 @@ class WM_OT_keymap_edit(bpy.types.Operator):
|
||||
|
||||
def execute(self, context):
|
||||
wm = context.manager
|
||||
km = context.keymap # wm.active_keymap
|
||||
km = context.keymap
|
||||
km.copy_to_user()
|
||||
return ('FINISHED',)
|
||||
|
||||
@ -1626,7 +1661,7 @@ class WM_OT_keymap_restore(bpy.types.Operator):
|
||||
for km in wm.default_keyconfig.keymaps:
|
||||
km.restore_to_default()
|
||||
else:
|
||||
km = context.keymap # wm.active_keymap
|
||||
km = context.keymap
|
||||
km.restore_to_default()
|
||||
|
||||
return ('FINISHED',)
|
||||
@ -1639,7 +1674,7 @@ class WM_OT_keyitem_add(bpy.types.Operator):
|
||||
|
||||
def execute(self, context):
|
||||
wm = context.manager
|
||||
km = context.keymap # wm.active_keymap
|
||||
km = context.keymap
|
||||
if km.modal:
|
||||
km.add_modal_item("", 'A', 'PRESS') # kmi
|
||||
else:
|
||||
@ -1655,7 +1690,7 @@ class WM_OT_keyitem_remove(bpy.types.Operator):
|
||||
def execute(self, context):
|
||||
wm = context.manager
|
||||
kmi = context.keyitem
|
||||
km = context.keymap # wm.active_keymap
|
||||
km = context.keymap
|
||||
km.remove_item(kmi)
|
||||
return ('FINISHED',)
|
||||
|
||||
|
@ -123,7 +123,6 @@ typedef struct wmWindowManager {
|
||||
|
||||
ListBase keyconfigs; /* known key configurations */
|
||||
struct wmKeyConfig *defaultconf; /* default configuration, not saved */
|
||||
int defaultactmap, pad2; /* active keymap from default for editing */
|
||||
|
||||
ListBase timers; /* active timers */
|
||||
struct wmTimer *autosavetimer; /* timer for auto save */
|
||||
@ -301,6 +300,8 @@ typedef struct wmKeyConfig {
|
||||
char idname[64]; /* unique name */
|
||||
char basename[64]; /* idname of configuration this is derives from, "" if none */
|
||||
|
||||
char filter[64]; /* search term for filtering in the UI */
|
||||
|
||||
ListBase keymaps;
|
||||
int actkeymap, flag;
|
||||
} wmKeyConfig;
|
||||
|
@ -535,36 +535,6 @@ static void rna_WindowManager_active_keyconfig_set(PointerRNA *ptr, PointerRNA v
|
||||
BLI_strncpy(U.keyconfigstr, kc->idname, sizeof(U.keyconfigstr));
|
||||
}
|
||||
|
||||
static PointerRNA rna_WindowManager_active_keymap_get(PointerRNA *ptr)
|
||||
{
|
||||
wmWindowManager *wm= ptr->data;
|
||||
wmKeyMap *km= NULL;
|
||||
|
||||
if(wm->defaultconf) {
|
||||
km= BLI_findlink(&wm->defaultconf->keymaps, wm->defaultactmap);
|
||||
|
||||
if(!km)
|
||||
km= wm->defaultconf->keymaps.first;
|
||||
}
|
||||
|
||||
return rna_pointer_inherit_refine(ptr, &RNA_KeyMap, WM_keymap_active(wm, km));
|
||||
}
|
||||
|
||||
static void rna_WindowManager_active_keymap_set(PointerRNA *ptr, PointerRNA value)
|
||||
{
|
||||
wmWindowManager *wm= ptr->data;
|
||||
wmKeyMap *km= value.data;
|
||||
int index;
|
||||
|
||||
if(wm->defaultconf && km) {
|
||||
km= WM_keymap_find(wm->defaultconf, km->idname, km->spaceid, km->regionid);
|
||||
index= BLI_findindex(&wm->defaultconf->keymaps, km);
|
||||
|
||||
if(index != -1) wm->defaultactmap= index;
|
||||
else wm->defaultactmap= 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void rna_wmKeyMapItem_idname_get(PointerRNA *ptr, char *value)
|
||||
{
|
||||
wmKeyMapItem *kmi= ptr->data;
|
||||
@ -848,12 +818,6 @@ static void rna_def_windowmanager(BlenderRNA *brna)
|
||||
RNA_def_property_struct_type(prop, "KeyConfig");
|
||||
RNA_def_property_ui_text(prop, "Default Key Configuration", "");
|
||||
|
||||
prop= RNA_def_property(srna, "active_keymap", PROP_POINTER, PROP_NEVER_NULL);
|
||||
RNA_def_property_struct_type(prop, "KeyMap");
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_pointer_funcs(prop, "rna_WindowManager_active_keymap_get", "rna_WindowManager_active_keymap_set", 0);
|
||||
RNA_def_property_ui_text(prop, "Active Key Map", "");
|
||||
|
||||
RNA_api_wm(srna);
|
||||
}
|
||||
|
||||
@ -881,6 +845,10 @@ static void rna_def_keyconfig(BlenderRNA *brna)
|
||||
RNA_def_property_string_sdna(prop, NULL, "idname");
|
||||
RNA_def_property_ui_text(prop, "Name", "Name of the key configuration.");
|
||||
RNA_def_struct_name_property(srna, prop);
|
||||
|
||||
prop= RNA_def_property(srna, "filter", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_string_sdna(prop, NULL, "filter");
|
||||
RNA_def_property_ui_text(prop, "Filter", "Search term for filtering in the UI.");
|
||||
|
||||
prop= RNA_def_property(srna, "keymaps", PROP_COLLECTION, PROP_NONE);
|
||||
RNA_def_property_struct_type(prop, "KeyMap");
|
||||
@ -1011,7 +979,7 @@ static void rna_def_keyconfig(BlenderRNA *brna)
|
||||
|
||||
prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", KMI_EXPANDED);
|
||||
RNA_def_property_ui_text(prop, "Expanded", "Expanded in the user interface.");
|
||||
RNA_def_property_ui_text(prop, "Expanded", "Show key map event and property details in the user interface.");
|
||||
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
|
||||
|
||||
prop= RNA_def_property(srna, "propvalue", PROP_ENUM, PROP_NONE);
|
||||
|
Loading…
Reference in New Issue
Block a user