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