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;
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to