Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/editors/include/UI_interface.h6
-rw-r--r--source/blender/editors/interface/interface_templates.c36
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c17
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c12
4 files changed, 60 insertions, 11 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index f5721c008b2..8f205173011 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -2021,6 +2021,12 @@ void uiTemplateEditModeSelection(uiLayout *layout, struct bContext *C);
void uiTemplateReportsBanner(uiLayout *layout, struct bContext *C);
void uiTemplateInputStatus(uiLayout *layout, struct bContext *C);
void uiTemplateKeymapItemProperties(uiLayout *layout, struct PointerRNA *ptr);
+
+bool uiTemplateEventFromKeymapItem(struct uiLayout *layout,
+ const char *text,
+ const struct wmKeyMapItem *kmi,
+ bool text_fallback);
+
void uiTemplateComponentMenu(uiLayout *layout,
struct PointerRNA *ptr,
const char *propname,
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index fe484676ddd..021d7733fae 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -6657,6 +6657,42 @@ void uiTemplateKeymapItemProperties(uiLayout *layout, PointerRNA *ptr)
/** \} */
/* -------------------------------------------------------------------- */
+/** \name Event Icon Template
+ *
+ * \{ */
+
+bool uiTemplateEventFromKeymapItem(struct uiLayout *layout,
+ const char *text,
+ const struct wmKeyMapItem *kmi,
+ bool text_fallback)
+{
+ bool ok = false;
+
+ int icon_mod[4];
+#ifdef WITH_HEADLESS
+ int icon = 0;
+#else
+ int icon = UI_icon_from_keymap_item(kmi, icon_mod);
+#endif
+ if (icon != 0) {
+ for (int j = 0; j < ARRAY_SIZE(icon_mod) && icon_mod[j]; j++) {
+ uiItemL(layout, "", icon_mod[j]);
+ }
+ uiItemL(layout, text, icon);
+ ok = true;
+ }
+ else if (text_fallback) {
+ const char *event_text = WM_key_event_string(kmi->type, true);
+ uiItemL(layout, event_text, ICON_NONE);
+ uiItemL(layout, text, ICON_NONE);
+ ok = true;
+ }
+ return ok;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
/** \name Color Management Template
* \{ */
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index 74d1743dfc1..94fe43a0a77 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -479,6 +479,14 @@ static void rna_uiTemplatePathBuilder(uiLayout *layout,
uiTemplatePathBuilder(layout, ptr, propname, root_ptr, name);
}
+static void rna_uiTemplateEventFromKeymapItem(
+ uiLayout *layout, wmKeyMapItem *kmi, const char *name, const char *text_ctxt, bool translate)
+{
+ /* Get translated name (label). */
+ name = rna_translate_ui_text(name, text_ctxt, NULL, NULL, translate);
+ uiTemplateEventFromKeymapItem(layout, name, kmi, true);
+}
+
static int rna_ui_get_rnaptr_icon(bContext *C, PointerRNA *ptr_icon)
{
return UI_rnaptr_icon_get(C, ptr_icon, RNA_struct_ui_icon(ptr_icon->type), false);
@@ -1526,6 +1534,15 @@ void RNA_api_ui_layout(StructRNA *srna)
parm = RNA_def_pointer(func, "params", "FileSelectParams", "", "");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+
+ func = RNA_def_function(
+ srna, "template_event_from_keymap_item", "rna_uiTemplateEventFromKeymapItem");
+ RNA_def_function_ui_description(func, "Display keymap item as icons/text");
+ parm = RNA_def_property(func, "item", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(parm, "KeyMapItem");
+ RNA_def_property_ui_text(parm, "Item", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ api_ui_item_common_text(func);
}
#endif
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 97fad9fcf59..1dd37dd2843 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -5318,17 +5318,7 @@ bool WM_window_modal_keymap_status_draw(bContext *UNUSED(C), wmWindow *win, uiLa
/* Assume release events just disable something which was toggled on. */
continue;
}
- int icon_mod[4];
-#ifdef WITH_HEADLESS
- int icon = 0;
-#else
- int icon = UI_icon_from_keymap_item(kmi, icon_mod);
-#endif
- if (icon != 0) {
- for (int j = 0; j < ARRAY_SIZE(icon_mod) && icon_mod[j]; j++) {
- uiItemL(row, "", icon_mod[j]);
- }
- uiItemL(row, items[i].name, icon);
+ if (uiTemplateEventFromKeymapItem(row, items[i].name, kmi, false)) {
show_text = false;
}
}