module config: Improved config panel

Scrolling focuses the current category in the toolbar,
toolbar is left and vertical.
This commit is contained in:
Marcel Hollerbach 2015-02-05 21:57:39 +01:00
parent 532104e905
commit c099ccc549
1 changed files with 68 additions and 26 deletions

View File

@ -19,7 +19,7 @@ struct _CFModule
struct _CFType struct _CFType
{ {
const char *key, *name, *icon; const char *key, *name, *icon;
Elm_Object_Item *gindex; Elm_Object_Item *gindex, *tbitem;
Eina_Hash *modules_hash; /* just used before constructing list */ Eina_Hash *modules_hash; /* just used before constructing list */
Eina_List *modules; /* sorted and ready to be used */ Eina_List *modules; /* sorted and ready to be used */
}; };
@ -75,7 +75,7 @@ static void e_int_config_modules_free_cb(const char *path, const char *part, voi
EAPI void EAPI void
e_int_config_modules_init(void) e_int_config_modules_init(void)
{ {
e_config_panel_item_add("modules", "preferences-plugin", _("Modules100"), "Extensions to extend Enlightenments functions", 0, "modules"); e_config_panel_item_add("modules", "preferences-plugin", _("Modules"), "Extensions to extend Enlightenments functions", 0, "modules");
e_config_panel_part_add("modules", "modules", _("Modules"), _("Mark a module as loaded to load them on startup"), 1, "extensions", e_config_panel_part_add("modules", "modules", _("Modules"), _("Mark a module as loaded to load them on startup"), 1, "extensions",
e_int_config_modules_create_cb, e_int_config_modules_apply_cb, e_int_config_modules_data_cb, e_int_config_modules_free_cb, NULL); e_int_config_modules_create_cb, e_int_config_modules_apply_cb, e_int_config_modules_data_cb, e_int_config_modules_free_cb, NULL);
} }
@ -344,10 +344,7 @@ _toolbar_selected_cb(void *data, Evas_Object *obj, void *event)
static void static void
toolbar_item(Evas_Object *obj, CFType *cft) toolbar_item(Evas_Object *obj, CFType *cft)
{ {
Elm_Object_Item *it; cft->tbitem = elm_toolbar_item_append(obj, cft->icon, cft->name, _toolbar_selected_cb, cft);
Evas_Object *ic;
it = elm_toolbar_item_append(obj, cft->icon, cft->name, _toolbar_selected_cb, cft);
} }
static char * static char *
@ -481,54 +478,99 @@ _unload_cb(void *data, Evas_Object *obj, void *event)
elm_object_disabled_set(obj, EINA_TRUE); elm_object_disabled_set(obj, EINA_TRUE);
} }
static void
_list_scroll_start_cb(void *data, Evas_Object *obj, void *event)
{
evas_object_data_set(obj, "__anim", (void*) 1);
}
static void
_list_scroll_stop_cb(void *data, Evas_Object *obj, void *event)
{
evas_object_data_del(obj, "__anim");
}
static void
_list_scroll_cb(void *data, Evas_Object *obj, void *event)
{
int x, y, w, h;
Elm_Object_Item *it, *gi;
CFType *cft;
if (evas_object_data_get(obj, "__anim")) return;
evas_object_geometry_get(obj, &x, &y, &w ,&h);
it = elm_genlist_at_xy_item_get(obj, x + 3, y + 3, NULL);
if(!it) return; //something went wrong ...
if (elm_genlist_item_type_get(it) == ELM_GENLIST_ITEM_GROUP)
gi = it;
else
gi = elm_genlist_item_parent_get(it);
cft = elm_object_item_data_get(gi);
elm_toolbar_item_selected_set(cft->tbitem, EINA_TRUE);
}
static Evas_Object* static Evas_Object*
e_int_config_modules_create_cb(const char *path, const char *part, Evas_Object *parent, void *cbdata, void *data) e_int_config_modules_create_cb(const char *path, const char *part, Evas_Object *parent, void *cbdata, void *data)
{ {
Evas_Object *bx, *bx2, *tb, *list, *lb, *load, *unload; Evas_Object *tab, *bx, *tb, *list, *lb, *load, *unload;
bx = elm_box_add(parent);
evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); tab = elm_table_add(parent);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(tab, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(bx); evas_object_size_hint_weight_set(tab, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(tab);
tb = elm_toolbar_add(parent); tb = elm_toolbar_add(parent);
elm_toolbar_select_mode_set(tb, ELM_OBJECT_SELECT_MODE_ALWAYS);
elm_toolbar_horizontal_set(tb, EINA_FALSE);
elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_NONE);
elm_toolbar_icon_order_lookup_set(tb, ELM_ICON_LOOKUP_THEME_FDO); elm_toolbar_icon_order_lookup_set(tb, ELM_ICON_LOOKUP_THEME_FDO);
evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); evas_object_size_hint_align_set(tb, 0.0, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND);
elm_box_pack_end(bx, tb); elm_table_pack(tab, tb, 0, 0, 1, 1);
evas_object_show(tb); evas_object_show(tb);
list = elm_genlist_add(parent); list = elm_genlist_add(parent);
evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_pack_end(bx, list); evas_object_smart_callback_add(list, "scroll", _list_scroll_cb, list);
evas_object_smart_callback_add(list, "scroll,anim,start", _list_scroll_start_cb, list);
evas_object_smart_callback_add(list, "scroll,anim,stop", _list_scroll_stop_cb, list);
evas_object_data_set(list, "__toolbar", tb);
elm_table_pack(tab, list, 1, 0, 1, 1);
evas_object_show(list); evas_object_show(list);
bx2 = elm_box_add(parent); bx = elm_box_add(parent);
evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0.0); evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, 0.0);
evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0);
elm_box_horizontal_set(bx2, EINA_TRUE); elm_box_horizontal_set(bx, EINA_TRUE);
elm_box_pack_end(bx, bx2); elm_table_pack(tab, bx, 0, 1, 2, 1);
evas_object_show(bx2); evas_object_show(bx);
load = elm_button_add(parent); load = elm_button_add(parent);
elm_object_text_set(load, _("load")); elm_object_text_set(load, _("load"));
elm_object_disabled_set(load, EINA_TRUE); elm_object_disabled_set(load, EINA_TRUE);
evas_object_data_set(bx, "__load_btn", load); evas_object_data_set(tab, "__load_btn", load);
evas_object_smart_callback_add(load, "clicked", _load_cb, list); evas_object_smart_callback_add(load, "clicked", _load_cb, list);
evas_object_size_hint_align_set(load, EVAS_HINT_FILL, 0.0); evas_object_size_hint_align_set(load, EVAS_HINT_FILL, 0.0);
evas_object_size_hint_weight_set(load, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_weight_set(load, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx2, load); elm_box_pack_end(bx, load);
evas_object_show(load); evas_object_show(load);
unload = elm_button_add(parent); unload = elm_button_add(parent);
elm_object_text_set(unload, _("unload")); elm_object_text_set(unload, _("unload"));
elm_object_disabled_set(unload, EINA_TRUE); elm_object_disabled_set(unload, EINA_TRUE);
evas_object_data_set(bx, "__unload_btn", unload); evas_object_data_set(tab, "__unload_btn", unload);
evas_object_smart_callback_add(unload, "clicked", _unload_cb, list); evas_object_smart_callback_add(unload, "clicked", _unload_cb, list);
evas_object_size_hint_align_set(unload, EVAS_HINT_FILL, 0.0); evas_object_size_hint_align_set(unload, EVAS_HINT_FILL, 0.0);
evas_object_size_hint_weight_set(unload, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_weight_set(unload, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx2, unload); elm_box_pack_end(bx, unload);
evas_object_show(unload); evas_object_show(unload);
{ {
@ -573,7 +615,7 @@ e_int_config_modules_create_cb(const char *path, const char *part, Evas_Object *
} }
} }
return bx; return tab;
} }
static Eina_Bool static Eina_Bool