Merge branch 'master' into blender2.8
[blender.git] / source / blender / windowmanager / intern / wm_keymap_utils.c
index 1774b876f389a5a3910cbe705c2179e2c5a6acb8..ba1874b992cf40892915cf0cc6cd85cbe6c788e9 100644 (file)
@@ -46,6 +46,7 @@
 /** \name Wrappers for #WM_keymap_add_item
  * \{ */
 
+/* menu wrapper for WM_keymap_add_item */
 wmKeyMapItem *WM_keymap_add_menu(wmKeyMap *keymap, const char *idname, int type, int val, int modifier, int keymodifier)
 {
        wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_call_menu", type, val, modifier, keymodifier);
@@ -60,6 +61,41 @@ wmKeyMapItem *WM_keymap_add_menu_pie(wmKeyMap *keymap, const char *idname, int t
        return kmi;
 }
 
+wmKeyMapItem *WM_keymap_add_panel(wmKeyMap *keymap, const char *idname, int type, int val, int modifier, int keymodifier)
+{
+       wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_call_panel", type, val, modifier, keymodifier);
+       RNA_string_set(kmi->ptr, "name", idname);
+       /* TODO: we might want to disable this. */
+       RNA_boolean_set(kmi->ptr, "keep_open", false);
+       return kmi;
+}
+
+/* tool wrapper for WM_keymap_add_item */
+wmKeyMapItem *WM_keymap_add_tool(wmKeyMap *keymap, const char *idname, int type, int val, int modifier, int keymodifier)
+{
+       wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_tool_set_by_name", type, val, modifier, keymodifier);
+       RNA_string_set(kmi->ptr, "name", idname);
+       return kmi;
+}
+
+/** Useful for mapping numbers to an enum. */
+void WM_keymap_add_context_enum_set_items(
+        wmKeyMap *keymap, const EnumPropertyItem *items, const char *data_path,
+        int type_start, int val, int modifier, int keymodifier)
+{
+       for (int i = 0, type_offset = 0; items[i].identifier; i++) {
+               if (items[i].identifier[0] == '\0') {
+                       continue;
+               }
+               wmKeyMapItem *kmi = WM_keymap_add_item(
+                       keymap, "WM_OT_context_set_enum",
+                       type_start + type_offset, val, modifier, keymodifier);
+               RNA_string_set(kmi->ptr, "data_path", data_path);
+               RNA_string_set(kmi->ptr, "value", items[i].identifier);
+               type_offset += 1;
+       }
+}
+
 /** \} */
 
 /* -------------------------------------------------------------------- */
@@ -209,10 +245,6 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const char *opname)
                                break;
                }
        }
-       /* Timeline */
-       else if (STRPREFIX(opname, "TIME_OT")) {
-               km = WM_keymap_find_all(C, "Timeline", sl->spacetype, 0);
-       }
        /* Image Editor */
        else if (STRPREFIX(opname, "IMAGE_OT")) {
                km = WM_keymap_find_all(C, "Image", sl->spacetype, 0);