Keymap: add Keymap.keymap_items.new_from_item

Needed to copy keymap items from other keymaps.
This commit is contained in:
Campbell Barton 2018-11-23 15:16:13 +11:00
parent 1fcb3e791f
commit cfffe615f4
3 changed files with 43 additions and 0 deletions

View File

@ -240,6 +240,25 @@ static wmKeyMapItem *rna_KeyMap_item_new(
return kmi;
}
static wmKeyMapItem *rna_KeyMap_item_new_from_item(
wmKeyMap *km, ReportList *reports, wmKeyMapItem *kmi_src, bool head)
{
/* wmWindowManager *wm = CTX_wm_manager(C); */
if ((km->flag & KEYMAP_MODAL) == (kmi_src->idname[0] != '\0')) {
BKE_report(reports, RPT_ERROR, "Can not mix mondal/non-modal items");
return NULL;
}
/* create keymap item */
wmKeyMapItem *kmi = WM_keymap_add_item_copy(km, kmi_src);
if (head) {
BLI_remlink(&km->items, kmi);
BLI_addhead(&km->items, kmi);
}
return kmi;
}
static wmKeyMapItem *rna_KeyMap_item_new_modal(
wmKeyMap *km, ReportList *reports, const char *propvalue_str,
int type, int value, bool any, bool shift, bool ctrl, bool alt,
@ -855,6 +874,14 @@ void RNA_api_keymapitems(StructRNA *srna)
parm = RNA_def_pointer(func, "item", "KeyMapItem", "Item", "Added key map item");
RNA_def_function_return(func, parm);
func = RNA_def_function(srna, "new_from_item", "rna_KeyMap_item_new_from_item");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "item", "KeyMapItem", "Item", "Item to use as a reference");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
RNA_def_boolean(func, "head", 0, "At Head", "");
parm = RNA_def_pointer(func, "result", "KeyMapItem", "Item", "Added key map item");
RNA_def_function_return(func, parm);
func = RNA_def_function(srna, "remove", "rna_KeyMap_item_remove");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");

View File

@ -67,6 +67,8 @@ wmKeyMapItem *WM_keymap_verify_item(
wmKeyMapItem *WM_keymap_add_item(
struct wmKeyMap *keymap, const char *idname, int type,
int val, int modifier, int keymodifier);
wmKeyMapItem *WM_keymap_add_item_copy(
struct wmKeyMap *keymap, wmKeyMapItem *kmi_src);
bool WM_keymap_remove_item(struct wmKeyMap *keymap, struct wmKeyMapItem *kmi);
int WM_keymap_item_to_string(wmKeyMapItem *kmi, const bool compact, char *result, const int result_len);

View File

@ -513,6 +513,20 @@ wmKeyMapItem *WM_keymap_add_item(wmKeyMap *keymap, const char *idname, int type,
return kmi;
}
wmKeyMapItem *WM_keymap_add_item_copy(
struct wmKeyMap *keymap, wmKeyMapItem *kmi_src)
{
wmKeyMapItem *kmi_dst = wm_keymap_item_copy(kmi_src);
BLI_addtail(&keymap->items, kmi_dst);
keymap_item_set_id(keymap, kmi_dst);
WM_keyconfig_update_tag(keymap, kmi_dst);
return kmi_dst;
}
bool WM_keymap_remove_item(wmKeyMap *keymap, wmKeyMapItem *kmi)
{
if (BLI_findindex(&keymap->items, kmi) != -1) {