summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <marcel-hollerbach@t-online.de>2015-02-05 21:57:39 +0100
committerMarcel Hollerbach <marcel-hollerbach@t-online.de>2015-02-05 21:57:39 +0100
commitc099ccc549027fa2eeeaa245be65cc137ac8da03 (patch)
tree14af8bb659820f6aa150c2b23815adffa26ff6da
parent532104e905ce0266f89c488618a350e79e8f5cba (diff)
downloadenlightenment-c099ccc549027fa2eeeaa245be65cc137ac8da03.tar.gz
module config: Improved config panel
Scrolling focuses the current category in the toolbar, toolbar is left and vertical.
-rw-r--r--src/bin/e_int_config_modules.c94
1 files changed, 68 insertions, 26 deletions
diff --git a/src/bin/e_int_config_modules.c b/src/bin/e_int_config_modules.c
index cd2a62fe36..acc3f18124 100644
--- a/src/bin/e_int_config_modules.c
+++ b/src/bin/e_int_config_modules.c
@@ -19,7 +19,7 @@ struct _CFModule
struct _CFType
{
const char *key, *name, *icon;
- Elm_Object_Item *gindex;
+ Elm_Object_Item *gindex, *tbitem;
Eina_Hash *modules_hash; /* just used before constructing list */
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
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_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
toolbar_item(Evas_Object *obj, CFType *cft)
{
- Elm_Object_Item *it;
- Evas_Object *ic;
-
- it = elm_toolbar_item_append(obj, cft->icon, cft->name, _toolbar_selected_cb, cft);
+ cft->tbitem = elm_toolbar_item_append(obj, cft->icon, cft->name, _toolbar_selected_cb, cft);
}
static char *
@@ -481,54 +478,99 @@ _unload_cb(void *data, Evas_Object *obj, void *event)
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*
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);
- evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_show(bx);
+
+ tab = elm_table_add(parent);
+ evas_object_size_hint_align_set(tab, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(tab, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(tab);
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);
- evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0);
- evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, 0.0);
- elm_box_pack_end(bx, tb);
+ evas_object_size_hint_align_set(tb, 0.0, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND);
+ elm_table_pack(tab, tb, 0, 0, 1, 1);
evas_object_show(tb);
list = elm_genlist_add(parent);
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);
- 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);
- bx2 = elm_box_add(parent);
- evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0.0);
- evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
- elm_box_horizontal_set(bx2, EINA_TRUE);
- elm_box_pack_end(bx, bx2);
- evas_object_show(bx2);
+ bx = elm_box_add(parent);
+ evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, 0.0);
+ evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0);
+ elm_box_horizontal_set(bx, EINA_TRUE);
+ elm_table_pack(tab, bx, 0, 1, 2, 1);
+ evas_object_show(bx);
load = elm_button_add(parent);
elm_object_text_set(load, _("load"));
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_size_hint_align_set(load, EVAS_HINT_FILL, 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);
unload = elm_button_add(parent);
elm_object_text_set(unload, _("unload"));
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_size_hint_align_set(unload, EVAS_HINT_FILL, 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);
{
@@ -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