Tizen 2.1 release
[platform/core/uifw/e17.git] / src / bin / e_menu.h
1 #ifdef E_TYPEDEFS
2
3 #define E_MENU_POP_DIRECTION_NONE  0
4 #define E_MENU_POP_DIRECTION_LEFT  1
5 #define E_MENU_POP_DIRECTION_RIGHT 2
6 #define E_MENU_POP_DIRECTION_UP    3
7 #define E_MENU_POP_DIRECTION_DOWN  4
8 #define E_MENU_POP_DIRECTION_AUTO  5
9 #define E_MENU_POP_DIRECTION_LAST  6
10
11 typedef struct _E_Menu         E_Menu;
12 typedef struct _E_Menu_Item    E_Menu_Item;
13 typedef struct _E_Menu_Category_Callback E_Menu_Category_Callback;
14
15
16 #else
17 #ifndef E_MENU_H
18 #define E_MENU_H
19
20 #define E_MENU_TYPE 0xE0b01009
21
22 #define E_MENU_ITEM_TYPE 0xE0b0100a
23
24 typedef void (*E_Menu_Cb) (void *data, E_Menu *m, E_Menu_Item *mi);
25
26
27 struct _E_Menu
28 {
29    E_Object             e_obj_inherit;
30
31    const char          *category;
32
33    struct {
34       char              visible : 1;
35       int               x, y, w, h;
36    } cur, prev;
37
38    int                  frozen;
39
40    struct {
41       const char       *title;
42       const char       *icon_file;
43       Evas_Object      *icon;
44    } header;
45
46    Eina_List           *items;
47
48    /* the zone it belongs to */
49    E_Zone              *zone;
50
51    /* if a menu item spawned this menu, what item is it? */
52    E_Menu_Item         *parent_item;
53
54    /* only useful if realized != 0 (ie menu is ACTUALLY realized) */
55    Ecore_Evas          *ecore_evas;
56    Evas                *evas;
57    Ecore_X_Window       evas_win;
58    Evas_Object         *bg_object;
59    Evas_Object         *container_object;
60    Evas_Coord           container_x, container_y, container_w, container_h;
61    E_Container_Shape   *shape;
62    int                  shape_rects_num;
63    Ecore_X_Rectangle   *shape_rects;
64
65    struct {
66       void *data;
67       void (*func) (void *data, E_Menu *m);
68    } pre_activate_cb, post_deactivate_cb;
69
70    unsigned char        realized : 1; /* 1 if it is realized */
71    unsigned char        active : 1; /* 1 if it is in active list */
72    unsigned char        changed : 1;
73    unsigned char        fast_mouse : 1;
74    unsigned char        pending_new_submenu : 1;
75    unsigned char        have_submenu : 1;
76    unsigned char        in_active_list : 1;
77    unsigned char        shaped : 1;
78    unsigned char        need_shape_export : 1;
79 };
80
81 struct _E_Menu_Item
82 {
83    E_Object       e_obj_inherit;
84    E_Menu        *menu;
85    const char    *icon;
86    const char    *icon_key;
87    const char    *label;
88    E_Menu        *submenu;
89
90    Evas_Object   *separator_object;
91
92    Evas_Object   *bg_object;
93
94    Evas_Object   *container_object;
95
96    Evas_Object   *toggle_object;
97    Evas_Object   *icon_bg_object;
98    Evas_Object   *icon_object;
99    Evas_Object   *label_object;
100    Evas_Object   *submenu_object;
101
102    Evas_Object   *event_object;
103
104    Eina_List     *list_position;
105
106    int            label_w, label_h;
107    int            icon_w, icon_h;
108    int            separator_w, separator_h;
109    int            submenu_w, submenu_h;
110    int            toggle_w, toggle_h;
111    int            radio_group;
112    int            x, y, w, h;
113
114    struct {
115       void *data;
116       E_Menu_Cb func;
117    } cb; /* Callback for menu item activation */
118
119    struct {
120       void *data;
121       E_Menu_Cb func;
122    } realize_cb; /* Callback for menu item icon realization */
123
124     struct {
125       void *data;
126       E_Menu_Cb func;
127    } submenu_pre_cb;
128
129     struct {
130       void *data;
131       E_Menu_Cb func;
132    } submenu_post_cb;
133
134    struct {
135       void *data;
136       E_Menu_Cb func;
137    } drag_cb; /* Callback for menu item dragging */
138
139    struct {
140       int x, y;
141    } drag;
142
143    unsigned char  separator : 1;
144    unsigned char  radio : 1;
145    unsigned char  check : 1;
146    unsigned char  toggle : 1;
147    unsigned char  changed : 1;
148    unsigned char  active : 1;
149    unsigned char  disable : 1;
150 };
151
152 struct _E_Menu_Category_Callback
153 {
154    const char *category;
155    void *data;
156    void (*create) (E_Menu *m, void *category_data, void *data);
157    void (*free) (void *data);
158 };
159
160
161 EINTERN int          e_menu_init(void);
162 EINTERN int          e_menu_shutdown(void);
163
164 EAPI E_Menu      *e_menu_new(void);
165 EAPI void         e_menu_activate_key(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir);
166 EAPI void         e_menu_activate_mouse(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir, Ecore_X_Time activate_time);
167 EAPI void         e_menu_activate(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir);
168 EAPI void         e_menu_deactivate(E_Menu *m);
169 EAPI int          e_menu_freeze(E_Menu *m);
170 EAPI int          e_menu_thaw(E_Menu *m);
171 EAPI void         e_menu_title_set(E_Menu *m, const char *title);
172 EAPI void         e_menu_icon_file_set(E_Menu *m, const char *icon);
173
174 /* menu categories functions */
175 EAPI void         e_menu_category_set(E_Menu *m, const char *category);
176 EAPI void         e_menu_category_data_set(char *category, void *data);
177 EAPI E_Menu_Category_Callback  *e_menu_category_callback_add(char *category, void (*create) (E_Menu *m, void *category_data, void *data), void (free) (void *data), void *data);
178 EAPI void         e_menu_category_callback_del(E_Menu_Category_Callback *cb);
179
180
181 EAPI void         e_menu_pre_activate_callback_set(E_Menu *m,  void (*func) (void *data, E_Menu *m), void *data);
182 EAPI void         e_menu_post_deactivate_callback_set(E_Menu *m,  void (*func) (void *data, E_Menu *m), void *data);
183
184 EAPI E_Menu      *e_menu_root_get(E_Menu *m);
185
186 EAPI E_Menu_Item *e_menu_item_new(E_Menu *m);
187 EAPI E_Menu_Item *e_menu_item_new_relative(E_Menu *m, E_Menu_Item *rel);
188 EAPI E_Menu_Item *e_menu_item_nth(E_Menu *m, int n);
189 EAPI int          e_menu_item_num_get(const E_Menu_Item *mi);
190 EAPI void         e_menu_item_icon_file_set(E_Menu_Item *mi, const char *icon);
191 EAPI void         e_menu_item_icon_edje_set(E_Menu_Item *mi, const char *icon, const char *key);
192 EAPI void         e_menu_item_label_set(E_Menu_Item *mi, const char *label);
193 EAPI void         e_menu_item_submenu_set(E_Menu_Item *mi, E_Menu *sub);
194 EAPI void         e_menu_item_separator_set(E_Menu_Item *mi, int sep);
195 EAPI void         e_menu_item_check_set(E_Menu_Item *mi, int chk);
196 EAPI void         e_menu_item_radio_set(E_Menu_Item *mi, int rad);
197 EAPI void         e_menu_item_radio_group_set(E_Menu_Item *mi, int radg);
198 EAPI void         e_menu_item_toggle_set(E_Menu_Item *mi, int tog);
199 EAPI int          e_menu_item_toggle_get(E_Menu_Item *mi);
200 EAPI void         e_menu_item_callback_set(E_Menu_Item *mi,  E_Menu_Cb func, const void *data);
201 EAPI void         e_menu_item_realize_callback_set(E_Menu_Item *mi,  E_Menu_Cb func, void *data);
202 EAPI void         e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi,  E_Menu_Cb func, const void *data);
203 EAPI void         e_menu_item_submenu_post_callback_set(E_Menu_Item *mi,  E_Menu_Cb func, const void *data);
204 EAPI void         e_menu_item_drag_callback_set(E_Menu_Item *mi,  E_Menu_Cb func, void *data);
205 EAPI E_Menu_Item *e_menu_item_active_get(void);
206 EAPI void         e_menu_active_item_activate(void);
207 EAPI void         e_menu_item_active_set(E_Menu_Item *mi, int active);
208 EAPI void         e_menu_item_disabled_set(E_Menu_Item *mi, int disable);
209
210 EAPI void         e_menu_idler_before(void);
211
212 EAPI Ecore_X_Window e_menu_grab_window_get(void);
213
214 EAPI E_Menu      *e_menu_find_by_window(Ecore_X_Window win);
215
216 #endif
217 #endif