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       Eina_Bool         visible E_BITFIELD;
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_Job           *dangling_job;
56    Evas                 *evas;
57    Evas_Object         *comp_object;
58    Evas_Object         *bg_object;
59    Evas_Object         *container_object;
60    Evas_Coord           container_x, container_y, container_w, container_h;
61 
62    struct {
63       void *data;
64       void (*func) (void *data, E_Menu *m);
65    } pre_activate_cb, post_deactivate_cb;
66 
67    Eina_Bool        realized E_BITFIELD; /* 1 if it is realized */
68    Eina_Bool        active E_BITFIELD; /* 1 if it is in active list */
69    Eina_Bool        changed E_BITFIELD;
70    Eina_Bool        fast_mouse E_BITFIELD;
71    Eina_Bool        pending_new_submenu E_BITFIELD;
72    Eina_Bool        have_submenu E_BITFIELD;
73    Eina_Bool        in_active_list E_BITFIELD;
74    Eina_Bool        hold_mode E_BITFIELD;
75 };
76 
77 struct _E_Menu_Item
78 {
79    E_Object       e_obj_inherit;
80    E_Menu        *menu;
81    const char    *icon;
82    const char    *icon_key;
83    const char    *label;
84    E_Menu        *submenu;
85 
86    Evas_Object   *separator_object;
87 
88    Evas_Object   *bg_object;
89 
90    Evas_Object   *container_object;
91 
92    Evas_Object   *toggle_object;
93    Evas_Object   *icon_bg_object;
94    Evas_Object   *icon_object;
95    Evas_Object   *label_object;
96    Evas_Object   *submenu_object;
97 
98    Eina_List	 *list_position;
99 
100    int            label_w, label_h;
101    int            icon_w, icon_h;
102    int            separator_w, separator_h;
103    int            submenu_w, submenu_h;
104    int            toggle_w, toggle_h;
105    int            radio_group;
106    int            x, y, w, h;
107 
108    struct {
109       void *data;
110       E_Menu_Cb func;
111    } cb; /* Callback for menu item activation */
112 
113    struct {
114       void *data;
115       E_Menu_Cb func;
116    } realize_cb; /* Callback for menu item icon realization */
117 
118     struct {
119       void *data;
120       E_Menu_Cb func;
121    } submenu_pre_cb;
122 
123     struct {
124       void *data;
125       E_Menu_Cb func;
126    } submenu_post_cb;
127 
128    struct {
129       void *data;
130       E_Menu_Cb func;
131    } drag_cb; /* Callback for menu item dragging */
132 
133    struct {
134       int x, y;
135    } drag;
136 
137    Eina_Bool  separator E_BITFIELD;
138    Eina_Bool  radio E_BITFIELD;
139    Eina_Bool  check E_BITFIELD;
140    Eina_Bool  toggle E_BITFIELD;
141    Eina_Bool  changed E_BITFIELD;
142    Eina_Bool  active E_BITFIELD;
143    Eina_Bool  disable E_BITFIELD;
144 };
145 
146 struct _E_Menu_Category_Callback
147 {
148    const char *category;
149    void *data;
150    void (*create) (void *data, E_Menu *m, void *category_data);
151    Ecore_Cb free;
152 };
153 
154 
155 EINTERN int          e_menu_init(void);
156 EINTERN int          e_menu_shutdown(void);
157 
158 E_API void         e_menu_hide_all(void);
159 E_API E_Menu      *e_menu_new(void);
160 E_API void         e_menu_hold_mode_set(E_Menu *m, Eina_Bool hold_mode);
161 E_API void         e_menu_activate_key(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir);
162 E_API void         e_menu_activate_mouse(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir, unsigned int activate_time);
163 E_API void         e_menu_activate(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir);
164 E_API void         e_menu_deactivate(E_Menu *m);
165 E_API int          e_menu_freeze(E_Menu *m);
166 E_API int          e_menu_thaw(E_Menu *m);
167 E_API void         e_menu_title_set(E_Menu *m, const char *title);
168 E_API void         e_menu_icon_file_set(E_Menu *m, const char *icon);
169 
170 /* menu categories functions */
171 E_API void         e_menu_category_set(E_Menu *m, const char *category);
172 E_API void         e_menu_category_data_set(char *category, void *data);
173 E_API E_Menu_Category_Callback  *e_menu_category_callback_add(char *category, void (*create_cb) (void *data, E_Menu *m, void *category_data), Ecore_Cb free_cb, void *data);
174 E_API void         e_menu_category_callback_del(E_Menu_Category_Callback *cb);
175 
176 
177 E_API void         e_menu_pre_activate_callback_set(E_Menu *m,  void (*func) (void *data, E_Menu *m), void *data);
178 E_API void         e_menu_post_deactivate_callback_set(E_Menu *m,  void (*func) (void *data, E_Menu *m), void *data);
179 
180 E_API E_Menu      *e_menu_root_get(E_Menu *m);
181 
182 E_API E_Menu_Item *e_menu_item_new(E_Menu *m);
183 E_API E_Menu_Item *e_menu_item_new_relative(E_Menu *m, E_Menu_Item *rel);
184 E_API E_Menu_Item *e_menu_item_nth(E_Menu *m, int n);
185 E_API int          e_menu_item_num_get(const E_Menu_Item *mi);
186 E_API void         e_menu_item_icon_file_set(E_Menu_Item *mi, const char *icon);
187 E_API void         e_menu_item_icon_edje_set(E_Menu_Item *mi, const char *icon, const char *key);
188 E_API void         e_menu_item_label_set(E_Menu_Item *mi, const char *label);
189 E_API void         e_menu_item_submenu_set(E_Menu_Item *mi, E_Menu *sub);
190 E_API void         e_menu_item_separator_set(E_Menu_Item *mi, int sep);
191 E_API void         e_menu_item_check_set(E_Menu_Item *mi, int chk);
192 E_API void         e_menu_item_radio_set(E_Menu_Item *mi, int rad);
193 E_API void         e_menu_item_radio_group_set(E_Menu_Item *mi, int radg);
194 E_API void         e_menu_item_toggle_set(E_Menu_Item *mi, int tog);
195 E_API int          e_menu_item_toggle_get(E_Menu_Item *mi);
196 E_API void         e_menu_item_callback_set(E_Menu_Item *mi,  E_Menu_Cb func, const void *data);
197 E_API void         e_menu_item_realize_callback_set(E_Menu_Item *mi,  E_Menu_Cb func, void *data);
198 E_API void         e_menu_item_submenu_pre_callback_set(E_Menu_Item *mi,  E_Menu_Cb func, const void *data);
199 E_API void         e_menu_item_submenu_post_callback_set(E_Menu_Item *mi,  E_Menu_Cb func, const void *data);
200 E_API void         e_menu_item_drag_callback_set(E_Menu_Item *mi,  E_Menu_Cb func, void *data);
201 E_API E_Menu_Item *e_menu_item_active_get(void);
202 E_API void         e_menu_active_item_activate(void);
203 E_API void         e_menu_item_active_set(E_Menu_Item *mi, int active);
204 E_API void         e_menu_item_disabled_set(E_Menu_Item *mi, int disable);
205 
206 E_API void         e_menu_idler_before(void);
207 
208 E_API Eina_Bool    e_menu_is_active(void);
209 E_API E_Menu      *e_menu_active_get(void);
210 
211 #endif
212 #endif
213