3 /* local function protos */
4 static void _e_toolbar_free(E_Toolbar *tbar);
5 static void _e_toolbar_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info);
6 static void _e_toolbar_menu_cb_post(void *data, E_Menu *mn);
7 static void _e_toolbar_menu_cb_pre(void *data, E_Menu *mn);
8 static void _e_toolbar_menu_append(E_Toolbar *tbar, E_Menu *mn);
9 static void _e_toolbar_menu_cb_edit(void *data, E_Menu *mn, E_Menu_Item *mi);
10 static void _e_toolbar_menu_cb_config(void *data, E_Menu *mn, E_Menu_Item *mi);
11 static void _e_toolbar_menu_cb_contents(void *data, E_Menu *mn, E_Menu_Item *mi);
12 static void _e_toolbar_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
13 static const char *_e_toolbar_orient_string_get(E_Toolbar *tbar);
14 static void _e_toolbar_fm2_changed(void *data, Evas_Object *obj, void *event_info);
15 static void _e_toolbar_fm2_dir_changed(void *data, Evas_Object *obj, void *event_info);
16 static void _e_toolbar_fm2_dir_deleted(void *data, Evas_Object *obj, void *event_info);
17 static void _e_toolbar_fm2_files_deleted(void *data, Evas_Object *obj, void *event_info);
18 static void _e_toolbar_fm2_selected(void *data, Evas_Object *obj, void *event_info);
19 static void _e_toolbar_fm2_selection_changed(void *data, Evas_Object *obj, void *event_info);
20 static void _e_toolbar_menu_items_append(void *data, E_Gadcon_Client *gcc, E_Menu *mn);
23 static Eina_List *toolbars = NULL;
32 e_toolbar_shutdown(void)
38 tbar = eina_list_data_get(toolbars);
39 e_object_del(E_OBJECT(tbar));
45 e_toolbar_new(Evas *evas, const char *name, E_Win *fwin, Evas_Object *fm2)
47 E_Toolbar *tbar = NULL;
49 if (!name) return NULL;
50 if ((!fwin) || (!fm2)) return NULL;
52 tbar = E_OBJECT_ALLOC(E_Toolbar, E_TOOLBAR_TYPE, _e_toolbar_free);
53 if (!tbar) return NULL;
55 // tbar->id = eina_list_count(toolbars) + 1;
56 tbar->x = tbar->y = 0;
60 tbar->name = eina_stringshare_add(name);
64 evas_object_smart_callback_add(tbar->fm2, "changed",
65 _e_toolbar_fm2_changed, tbar);
66 evas_object_smart_callback_add(tbar->fm2, "dir_changed",
67 _e_toolbar_fm2_dir_changed, tbar);
68 evas_object_smart_callback_add(tbar->fm2, "dir_deleted",
69 _e_toolbar_fm2_dir_deleted, tbar);
70 evas_object_smart_callback_add(tbar->fm2, "files_deleted",
71 _e_toolbar_fm2_files_deleted, tbar);
72 evas_object_smart_callback_add(tbar->fm2, "selected",
73 _e_toolbar_fm2_selected, tbar);
74 evas_object_smart_callback_add(tbar->fm2, "selection_change",
75 _e_toolbar_fm2_selection_changed, tbar);
77 tbar->o_event = evas_object_rectangle_add(evas);
78 evas_object_color_set(tbar->o_event, 0, 0, 0, 0);
79 evas_object_resize(tbar->o_event, tbar->w, tbar->h);
80 evas_object_event_callback_add(tbar->o_event, EVAS_CALLBACK_MOUSE_DOWN,
81 _e_toolbar_cb_mouse_down, tbar);
82 evas_object_layer_set(tbar->o_event, 0);
83 evas_object_show(tbar->o_event);
85 tbar->o_base = edje_object_add(evas);
86 evas_object_resize(tbar->o_base, tbar->w, tbar->h);
87 e_theme_edje_object_set(tbar->o_base, "base/theme/fileman/toolbar",
88 "e/fileman/toolbar/default/base");
90 e_toolbar_move_resize(tbar, tbar->x, tbar->y, tbar->w, tbar->h);
92 tbar->gadcon = e_gadcon_swallowed_new(tbar->name, tbar->id, tbar->o_base,
94 e_gadcon_size_request_callback_set(tbar->gadcon,
95 _e_toolbar_gadcon_size_request, tbar);
96 /* FIXME: We want to implement "styles" here ? */
98 e_toolbar_orient(tbar, E_GADCON_ORIENT_TOP);
100 e_gadcon_toolbar_set(tbar->gadcon, tbar);
101 e_gadcon_util_menu_attach_func_set(tbar->gadcon,
102 _e_toolbar_menu_items_append, tbar);
103 e_gadcon_populate(tbar->gadcon);
105 toolbars = eina_list_append(toolbars, tbar);
110 e_toolbar_fwin_set(E_Toolbar *tbar, E_Win *fwin)
112 E_OBJECT_CHECK(tbar);
113 E_OBJECT_TYPE_CHECK(tbar, E_TOOLBAR_TYPE);
118 e_toolbar_fwin_get(E_Toolbar *tbar)
120 E_OBJECT_CHECK_RETURN(tbar, NULL);
121 E_OBJECT_TYPE_CHECK_RETURN(tbar, E_TOOLBAR_TYPE, NULL);
126 e_toolbar_fm2_set(E_Toolbar *tbar, Evas_Object *fm2)
128 E_OBJECT_CHECK(tbar);
129 E_OBJECT_TYPE_CHECK(tbar, E_TOOLBAR_TYPE);
134 e_toolbar_fm2_get(E_Toolbar *tbar)
136 E_OBJECT_CHECK_RETURN(tbar, NULL);
137 E_OBJECT_TYPE_CHECK_RETURN(tbar, E_TOOLBAR_TYPE, NULL);
142 e_toolbar_show(E_Toolbar *tbar)
144 E_OBJECT_CHECK(tbar);
145 E_OBJECT_TYPE_CHECK(tbar, E_TOOLBAR_TYPE);
146 evas_object_show(tbar->o_event);
147 evas_object_show(tbar->o_base);
151 e_toolbar_hide(E_Toolbar *tbar)
153 E_OBJECT_CHECK(tbar);
154 E_OBJECT_TYPE_CHECK(tbar, E_TOOLBAR_TYPE);
155 evas_object_hide(tbar->o_event);
156 evas_object_hide(tbar->o_base);
160 e_toolbar_move(E_Toolbar *tbar, int x, int y)
162 E_OBJECT_CHECK(tbar);
163 E_OBJECT_TYPE_CHECK(tbar, E_TOOLBAR_TYPE);
166 evas_object_move(tbar->o_event, tbar->x, tbar->y);
167 evas_object_move(tbar->o_base, tbar->x, tbar->y);
171 e_toolbar_resize(E_Toolbar *tbar, int w, int h)
173 E_OBJECT_CHECK(tbar);
174 E_OBJECT_TYPE_CHECK(tbar, E_TOOLBAR_TYPE);
178 e_gadcon_swallowed_min_size_set(tbar->gadcon, w, h);
179 evas_object_resize(tbar->o_event, tbar->w, tbar->h);
180 evas_object_resize(tbar->o_base, tbar->w, tbar->h);
184 e_toolbar_move_resize(E_Toolbar *tbar, int x, int y, int w, int h)
186 E_OBJECT_CHECK(tbar);
187 E_OBJECT_TYPE_CHECK(tbar, E_TOOLBAR_TYPE);
193 e_gadcon_swallowed_min_size_set(tbar->gadcon, w, h);
194 evas_object_move(tbar->o_event, x, y);
195 evas_object_move(tbar->o_base, x, y);
196 evas_object_resize(tbar->o_event, w, h);
197 evas_object_resize(tbar->o_base, w, h);
201 e_toolbar_orient(E_Toolbar *tbar, E_Gadcon_Orient orient)
205 E_OBJECT_CHECK(tbar);
206 E_OBJECT_TYPE_CHECK(tbar, E_TOOLBAR_TYPE);
207 e_gadcon_orient(tbar->gadcon, orient);
208 snprintf(buf, sizeof(buf), "e,state,orientation,%s",
209 _e_toolbar_orient_string_get(tbar));
210 edje_object_signal_emit(tbar->o_base, buf, "e");
211 edje_object_message_signal_process(tbar->o_base);
215 e_toolbar_position_calc(E_Toolbar *tbar)
217 E_Gadcon_Orient orient = E_GADCON_ORIENT_TOP;
219 E_OBJECT_CHECK(tbar);
220 E_OBJECT_TYPE_CHECK(tbar, E_TOOLBAR_TYPE);
221 if (!tbar->fwin) return;
222 orient = tbar->gadcon->orient;
225 case E_GADCON_ORIENT_HORIZ:
226 case E_GADCON_ORIENT_TOP:
230 tbar->w = tbar->fwin->w;
233 case E_GADCON_ORIENT_BOTTOM:
236 tbar->w = tbar->fwin->w;
237 tbar->y = (tbar->fwin->h - tbar->h);
240 case E_GADCON_ORIENT_VERT:
241 case E_GADCON_ORIENT_LEFT:
244 tbar->h = tbar->fwin->h;
248 case E_GADCON_ORIENT_RIGHT:
251 tbar->x = (tbar->fwin->w - tbar->w);
252 tbar->h = tbar->fwin->h;
258 e_toolbar_move_resize(tbar, tbar->x, tbar->y, tbar->w, tbar->h);
262 e_toolbar_populate(E_Toolbar *tbar)
264 E_OBJECT_CHECK(tbar);
265 E_OBJECT_TYPE_CHECK(tbar, E_TOOLBAR_TYPE);
266 e_gadcon_populate(tbar->gadcon);
269 /* local functions */
271 _e_toolbar_free(E_Toolbar *tbar)
273 toolbars = eina_list_remove(toolbars, tbar);
277 e_menu_post_deactivate_callback_set(tbar->menu, NULL, NULL);
278 e_object_del(E_OBJECT(tbar->menu));
281 if (tbar->cfg_dlg) e_object_del(E_OBJECT(tbar->cfg_dlg));
282 e_object_del(E_OBJECT(tbar->gadcon));
283 if (tbar->name) eina_stringshare_del(tbar->name);
284 evas_object_del(tbar->o_event);
285 evas_object_del(tbar->o_base);
290 _e_toolbar_cb_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
292 Evas_Event_Mouse_Down *ev;
300 if (ev->button != 3) return;
302 e_menu_post_deactivate_callback_set(mn, _e_toolbar_menu_cb_post, tbar);
304 _e_toolbar_menu_append(tbar, mn);
305 zone = e_util_zone_current_get(e_manager_current_get());
306 ecore_x_pointer_xy_get(zone->container->win, &x, &y);
307 e_menu_activate_mouse(mn, zone, x, y, 1, 1,
308 E_MENU_POP_DIRECTION_DOWN, ev->timestamp);
312 _e_toolbar_menu_cb_post(void *data, E_Menu *mn __UNUSED__)
317 if (!tbar->menu) return;
318 e_object_del(E_OBJECT(tbar->menu));
323 _e_toolbar_menu_cb_pre(void *data, E_Menu *mn)
329 e_menu_pre_activate_callback_set(mn, NULL, NULL);
331 mi = e_menu_item_new(mn);
332 if (tbar->gadcon->editing)
333 e_menu_item_label_set(mi, _("Stop Moving/Resizing Items"));
335 e_menu_item_label_set(mi, _("Begin Moving/Resizing Items"));
336 e_util_menu_item_theme_icon_set(mi, "transform-scale");
337 e_menu_item_callback_set(mi, _e_toolbar_menu_cb_edit, tbar);
339 mi = e_menu_item_new(mn);
340 e_menu_item_separator_set(mi, 1);
342 mi = e_menu_item_new(mn);
343 e_menu_item_label_set(mi, _("Toolbar Settings"));
344 e_util_menu_item_theme_icon_set(mi, "configure");
345 e_menu_item_callback_set(mi, _e_toolbar_menu_cb_config, tbar);
347 mi = e_menu_item_new(mn);
348 e_menu_item_label_set(mi, _("Set Toolbar Contents"));
349 e_util_menu_item_theme_icon_set(mi, "preferences-toolbar");
350 e_menu_item_callback_set(mi, _e_toolbar_menu_cb_contents, tbar);
354 _e_toolbar_menu_items_append(void *data, E_Gadcon_Client *gcc __UNUSED__, E_Menu *mn)
359 _e_toolbar_menu_append(tbar, mn);
363 _e_toolbar_menu_append(E_Toolbar *tbar, E_Menu *mn)
369 mi = e_menu_item_new(mn);
370 e_menu_item_label_set(mi, tbar->name);
371 e_util_menu_item_theme_icon_set(mi, "preferences-toolbar");
372 e_menu_pre_activate_callback_set(subm, _e_toolbar_menu_cb_pre, tbar);
373 e_menu_item_submenu_set(mi, subm);
374 e_object_unref(E_OBJECT(subm));
378 _e_toolbar_menu_cb_edit(void *data, E_Menu *mn __UNUSED__, E_Menu_Item *mi __UNUSED__)
383 if (tbar->gadcon->editing)
384 e_gadcon_edit_end(tbar->gadcon);
386 e_gadcon_edit_begin(tbar->gadcon);
390 _e_toolbar_menu_cb_config(void *data, E_Menu *mn __UNUSED__, E_Menu_Item *mi __UNUSED__)
395 if (!tbar->cfg_dlg) e_int_toolbar_config(tbar);
399 _e_toolbar_menu_cb_contents(void *data, E_Menu *mn __UNUSED__, E_Menu_Item *mi __UNUSED__)
404 if (!tbar->gadcon->config_dialog) e_int_gadcon_config_toolbar(tbar->gadcon);
408 _e_toolbar_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h)
411 Evas_Coord nx, ny, nw, nh, ww, hh;
419 evas_object_geometry_get(gc->o_container, NULL, NULL, &ww, &hh);
422 case E_GADCON_ORIENT_TOP:
423 case E_GADCON_ORIENT_BOTTOM:
428 case E_GADCON_ORIENT_LEFT:
429 case E_GADCON_ORIENT_RIGHT:
437 e_gadcon_swallowed_min_size_set(gc, w, h);
438 edje_object_size_min_calc(tbar->o_base, &nw, &nh);
441 case E_GADCON_ORIENT_TOP:
445 if (nw > tbar->fwin->w) nw = tbar->fwin->w;
446 if (nh > tbar->fwin->h) nh = 32;
449 case E_GADCON_ORIENT_BOTTOM:
453 if (nw > tbar->fwin->w) nw = tbar->fwin->w;
454 if (nh > tbar->fwin->h) nh = 32;
455 ny = (tbar->fwin->h - nh);
458 case E_GADCON_ORIENT_LEFT:
462 if (nh > tbar->fwin->h) nh = tbar->fwin->h;
463 if (nw > tbar->fwin->w) nw = 32;
466 case E_GADCON_ORIENT_RIGHT:
470 if (nw > tbar->fwin->w) nw = 32;
471 if (nh > tbar->fwin->h) nh = tbar->fwin->h;
472 nx = (tbar->fwin->w - tbar->w);
478 e_toolbar_move_resize(tbar, nx, ny, nw, nh);
482 _e_toolbar_orient_string_get(E_Toolbar *tbar)
484 const char *sig = "";
486 switch (tbar->gadcon->orient)
488 case E_GADCON_ORIENT_HORIZ:
492 case E_GADCON_ORIENT_VERT:
496 case E_GADCON_ORIENT_LEFT:
500 case E_GADCON_ORIENT_RIGHT:
504 case E_GADCON_ORIENT_TOP:
508 case E_GADCON_ORIENT_BOTTOM:
519 _e_toolbar_fm2_changed(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
523 E_Gadcon_Client *gcc = NULL;
527 EINA_LIST_FOREACH(tbar->gadcon->clients, l, gcc)
530 evas_object_smart_callback_call(gcc->o_base, "changed", tbar);
535 _e_toolbar_fm2_dir_changed(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
539 E_Gadcon_Client *gcc = NULL;
543 EINA_LIST_FOREACH(tbar->gadcon->clients, l, gcc)
546 evas_object_smart_callback_call(gcc->o_base, "dir_changed", tbar);
551 _e_toolbar_fm2_dir_deleted(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
555 E_Gadcon_Client *gcc = NULL;
559 EINA_LIST_FOREACH(tbar->gadcon->clients, l, gcc)
562 evas_object_smart_callback_call(gcc->o_base, "dir_deleted", tbar);
567 _e_toolbar_fm2_files_deleted(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
571 E_Gadcon_Client *gcc = NULL;
575 EINA_LIST_FOREACH(tbar->gadcon->clients, l, gcc)
578 evas_object_smart_callback_call(gcc->o_base, "files_deleted", tbar);
583 _e_toolbar_fm2_selected(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
587 E_Gadcon_Client *gcc = NULL;
591 EINA_LIST_FOREACH(tbar->gadcon->clients, l, gcc)
594 evas_object_smart_callback_call(gcc->o_base, "selected", tbar);
599 _e_toolbar_fm2_selection_changed(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
603 E_Gadcon_Client *gcc = NULL;
607 EINA_LIST_FOREACH(tbar->gadcon->clients, l, gcc)
610 evas_object_smart_callback_call(gcc->o_base, "selection_changed", tbar);