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