[Bf-blender-cvs] [fbfda21fe46] blender2.8: UI: show tool-tips for each tools shortcuts

Campbell Barton noreply at git.blender.org
Sat Nov 4 15:31:23 CET 2017


Commit: fbfda21fe46b8fa7e8470e57d4eb3794a3a9c83a
Author: Campbell Barton
Date:   Sun Nov 5 01:29:52 2017 +1100
Branches: blender2.8
https://developer.blender.org/rBfbfda21fe46b8fa7e8470e57d4eb3794a3a9c83a

UI: show tool-tips for each tools shortcuts

===================================================================

M	source/blender/editors/interface/interface_region_tooltip.c

===================================================================

diff --git a/source/blender/editors/interface/interface_region_tooltip.c b/source/blender/editors/interface/interface_region_tooltip.c
index 6d45c5bd02b..e3d90ceb7a2 100644
--- a/source/blender/editors/interface/interface_region_tooltip.c
+++ b/source/blender/editors/interface/interface_region_tooltip.c
@@ -307,6 +307,65 @@ static void ui_tooltip_region_free_cb(ARegion *ar)
 /** \name ToolTip Creation
  * \{ */
 
+static uiTooltipData *ui_tooltip_data_from_keymap(bContext *C, wmKeyMap *keymap)
+{
+	char buf[512];
+
+	/* create tooltip data */
+	uiTooltipData *data = MEM_callocN(sizeof(uiTooltipData), "uiTooltipData");
+
+	BLI_assert(data->fields_len < MAX_TOOLTIP_LINES);
+
+	for (wmKeyMapItem *kmi = keymap->items.first; kmi; kmi = kmi->next) {
+		wmOperatorType *ot = WM_operatortype_find(kmi->idname, true);
+		if (ot != NULL) {
+			/* Tip */
+			{
+				uiTooltipField *field = text_field_add(
+				        data, &(uiTooltipFormat){
+				            .style = UI_TIP_STYLE_NORMAL,
+				            .color_id = UI_TIP_LC_MAIN,
+				            .is_pad = true,
+				        });
+				field->text = BLI_strdup(ot->description[0] ? ot->description : ot->name);
+			}
+			/* Shortcut */
+			{
+				uiTooltipField *field = text_field_add(
+				        data, &(uiTooltipFormat){
+				            .style = UI_TIP_STYLE_NORMAL,
+				            .color_id = UI_TIP_LC_NORMAL,
+				        });
+				bool found = false;
+				if (WM_keymap_item_to_string(kmi, false, sizeof(buf), buf)) {
+					found = true;
+				}
+				field->text = BLI_sprintfN(TIP_("Shortcut: %s"), found ? buf : "None");
+			}
+
+			/* Python */
+			{
+				uiTooltipField *field = text_field_add(
+				        data, &(uiTooltipFormat){
+				            .style = UI_TIP_STYLE_NORMAL,
+				            .color_id = UI_TIP_LC_PYTHON,
+				        });
+				char *str = WM_operator_pystring_ex(C, NULL, false, false, ot, kmi->ptr);
+				WM_operator_pystring_abbreviate(str, 32);
+				field->text = BLI_sprintfN(TIP_("Python: %s"), str);
+				MEM_freeN(str);
+			}
+		}
+	}
+	if (data->fields_len == 0) {
+		MEM_freeN(data);
+		return NULL;
+	}
+	else {
+		return data;
+	}
+}
+
 static uiTooltipData *ui_tooltip_data_from_button(bContext *C, uiBut *but)
 {
 	uiStringInfo but_tip = {BUT_GET_TIP, NULL};
@@ -587,8 +646,27 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
 	if (but->drawflag & UI_BUT_NO_TOOLTIP) {
 		return NULL;
 	}
+	uiTooltipData *data = NULL;
+
+	/* custom tips for pre-defined operators */
+	if (but->optype) {
+		if (STREQ(but->optype->idname, "WM_OT_tool_set")) {
+			char keymap[64] = "";
+			RNA_string_get(but->opptr, "keymap", keymap);
+			if (keymap[0]) {
+				ScrArea *sa = CTX_wm_area(C);
+				wmKeyMap *km = WM_keymap_find_all(C, keymap, sa->spacetype, RGN_TYPE_WINDOW);
+				if (km != NULL) {
+					data = ui_tooltip_data_from_keymap(C, km);
+				}
+			}
+		}
+	}
+	/* toolsystem exception */
 
-	uiTooltipData *data = ui_tooltip_data_from_button(C, but);
+	if (data == NULL) {
+		data = ui_tooltip_data_from_button(C, but);
+	}
 	if (data == NULL) {
 		return NULL;
 	}



More information about the Bf-blender-cvs mailing list