Merge branch 'blender2.7'
[blender.git] / source / blender / windowmanager / WM_keymap.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2007 Blender Foundation.
17  * All rights reserved.
18  */
19
20 #ifndef __WM_KEYMAP_H__
21 #define __WM_KEYMAP_H__
22
23 /** \file blender/windowmanager/WM_keymap.h
24  *  \ingroup wm
25  */
26
27 /* dna-savable wmStructs here */
28 #include "DNA_windowmanager_types.h"
29 #include "BLI_utildefines.h"
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 struct EnumPropertyItem;
36
37 /* Key Configuration */
38
39 void            WM_keyconfig_init       (struct bContext *C);
40 void            WM_keyconfig_reload     (struct bContext *C);
41
42 wmKeyConfig *WM_keyconfig_new   (struct wmWindowManager *wm, const char *idname, bool user_defined);
43 wmKeyConfig *WM_keyconfig_new_user(struct wmWindowManager *wm, const char *idname);
44 bool        WM_keyconfig_remove (struct wmWindowManager *wm, struct wmKeyConfig *keyconf);
45 void            WM_keyconfig_clear      (struct wmKeyConfig *keyconf);
46 void            WM_keyconfig_free       (struct wmKeyConfig *keyconf);
47
48 void            WM_keyconfig_set_active(struct wmWindowManager *wm, const char *idname);
49
50 void            WM_keyconfig_update(struct wmWindowManager *wm);
51 void            WM_keyconfig_update_tag(struct wmKeyMap *keymap, struct wmKeyMapItem *kmi);
52 void        WM_keyconfig_update_operatortype(void);
53
54 /* Keymap */
55
56 void            WM_keymap_clear         (struct wmKeyMap *keymap);
57
58 wmKeyMapItem *WM_keymap_verify_item(
59         struct wmKeyMap *keymap, const char *idname, int type,
60         int val, int modifier, int keymodifier);
61 wmKeyMapItem *WM_keymap_add_item(
62         struct wmKeyMap *keymap, const char *idname, int type,
63         int val, int modifier, int keymodifier);
64 wmKeyMapItem *WM_keymap_add_item_copy(
65         struct wmKeyMap *keymap, wmKeyMapItem *kmi_src);
66
67 bool        WM_keymap_remove_item(struct wmKeyMap *keymap, struct wmKeyMapItem *kmi);
68 int         WM_keymap_item_to_string(wmKeyMapItem *kmi, const bool compact, char *result, const int result_len);
69
70 wmKeyMap        *WM_keymap_list_find(ListBase *lb, const char *idname, int spaceid, int regionid);
71 wmKeyMap        *WM_keymap_list_find_spaceid_or_empty(ListBase *lb, const char *idname, int spaceid, int regionid);
72 wmKeyMap        *WM_keymap_ensure(struct wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid);
73 wmKeyMap        *WM_keymap_find_all(const struct bContext *C, const char *idname, int spaceid, int regionid);
74 wmKeyMap        *WM_keymap_find_all_spaceid_or_empty(const struct bContext *C, const char *idname, int spaceid, int regionid);
75 wmKeyMap        *WM_keymap_active(struct wmWindowManager *wm, struct wmKeyMap *keymap);
76 bool             WM_keymap_remove(struct wmKeyConfig *keyconfig, struct wmKeyMap *keymap);
77 bool         WM_keymap_poll(struct bContext *C, struct wmKeyMap *keymap);
78
79 wmKeyMapItem *WM_keymap_item_find_id(struct wmKeyMap *keymap, int id);
80 bool          WM_keymap_item_compare(struct wmKeyMapItem *k1, struct wmKeyMapItem *k2);
81
82 /* keymap_utils.c */
83
84 /** Wrappers for #WM_keymap_add_item */
85 wmKeyMapItem *WM_keymap_add_menu(
86         struct wmKeyMap *keymap, const char *idname, int type,
87         int val, int modifier, int keymodifier);
88 wmKeyMapItem *WM_keymap_add_menu_pie(
89         struct wmKeyMap *keymap, const char *idname, int type,
90         int val, int modifier, int keymodifier);
91 wmKeyMapItem *WM_keymap_add_panel(
92         struct wmKeyMap *keymap, const char *idname, int type,
93         int val, int modifier, int keymodifier);
94 wmKeyMapItem *WM_keymap_add_tool(
95         struct wmKeyMap *keymap, const char *idname, int type,
96         int val, int modifier, int keymodifier);
97
98 void WM_keymap_add_context_enum_set_items(
99         wmKeyMap *keymap, const struct EnumPropertyItem *items, const char *data_path,
100         int type_start, int val, int modifier, int keymodifier);
101
102 wmKeyMap *WM_keymap_guess_from_context(const struct bContext *C);
103 wmKeyMap *WM_keymap_guess_opname(const struct bContext *C, const char *opname);
104
105 void WM_keymap_fix_linking(void);
106
107 /* Modal Keymap */
108
109 int WM_modalkeymap_items_to_string(
110         struct wmKeyMap *km, const int propvalue, const bool compact,
111         char *result, const int result_len);
112 int WM_modalkeymap_operator_items_to_string(
113         struct wmOperatorType *ot, const int propvalue, const bool compact,
114         char *result, const int result_len);
115 char *WM_modalkeymap_operator_items_to_string_buf(
116         struct wmOperatorType *ot, const int propvalue, const bool compact,
117         const int max_len, int *r_available_len, char **r_result);
118
119 wmKeyMap        *WM_modalkeymap_add(struct wmKeyConfig *keyconf, const char *idname, const struct EnumPropertyItem *items);
120 wmKeyMap        *WM_modalkeymap_get(struct wmKeyConfig *keyconf, const char *idname);
121 wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, int type, int val, int modifier, int keymodifier, int value);
122 wmKeyMapItem *WM_modalkeymap_add_item_str(struct wmKeyMap *km, int type, int val, int modifier, int keymodifier, const char *value);
123 wmKeyMapItem *WM_modalkeymap_find_propvalue(wmKeyMap *km, const int propvalue);
124 void            WM_modalkeymap_assign(struct wmKeyMap *km, const char *opname);
125
126 /* Keymap Editor */
127
128 void            WM_keymap_restore_to_default(struct wmKeyMap *keymap, struct bContext *C);
129 void            WM_keymap_properties_reset(struct wmKeyMapItem *kmi, struct IDProperty *properties);
130 void            WM_keymap_restore_item_to_default(struct bContext *C, struct wmKeyMap *keymap, struct wmKeyMapItem *kmi);
131 int                     WM_keymap_map_type_get(struct wmKeyMapItem *kmi);
132
133 /* Key Event */
134
135 const char *WM_key_event_string(const short type, const bool compact);
136 int WM_keymap_item_raw_to_string(
137         const short shift, const short ctrl, const short alt, const short oskey, const short keymodifier,
138         const short val, const short type, const bool compact,
139         char *result, const int result_len);
140 wmKeyMapItem *WM_key_event_operator(
141         const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties,
142         const short include_mask, const short exclude_mask,
143         struct wmKeyMap **r_keymap);
144 char *WM_key_event_operator_string(
145         const struct bContext *C, const char *opname, int opcontext,
146         struct IDProperty *properties, const bool is_strict,
147         char *result, const int result_len);
148
149 wmKeyMapItem *WM_key_event_operator_from_keymap(
150         struct wmKeyMap *keymap, const char *opname, struct IDProperty *properties,
151         const short include_mask, const short exclude_mask);
152
153 const char *WM_bool_as_string(bool test);
154
155 #ifdef __cplusplus
156 }
157 #endif
158
159 #endif /* __WM_KEYMAP_H__ */