From f96980dbe845846b3f5037203cc97079bed0e0c3 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Mon, 27 Mar 2006 14:46:26 +0000 Subject: [PATCH] add ilist headers - much easier to organise things now SVN revision: 21513 --- data/themes/default_ilist.edc | 75 +++++++++++++++++++++++++++++++++++ src/bin/e_configure.c | 39 +++++++++++++----- src/bin/e_configure.h | 1 + src/bin/e_ilist.c | 53 +++++++++++++++++++------ src/bin/e_ilist.h | 2 +- src/bin/e_test.c | 22 +++++----- src/bin/e_widget_ilist.c | 12 +++++- src/bin/e_widget_ilist.h | 1 + 8 files changed, 173 insertions(+), 32 deletions(-) diff --git a/data/themes/default_ilist.edc b/data/themes/default_ilist.edc index 4bb13b551..db08b18a8 100644 --- a/data/themes/default_ilist.edc +++ b/data/themes/default_ilist.edc @@ -935,3 +935,78 @@ group { } } } + +group { + name: "widgets/ilist_header"; + parts { + part { + name: "base"; + mouse_events: 0; + description { + state: "default" 0.0; + color: 64 64 64 255; + image { + normal: "e17_ilist_bg0.png"; + border: 3 3 3 3; + } + } + } + part { + name: "icon_swallow"; + type: SWALLOW; + mouse_events: 0; + description { + state: "default" 0.0; + align: 0.0 0.5; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; +// fixed: 1 1; + rel1 { + relative: 0.0 0.0; + offset: 4 4; + } + rel2 { + relative: 0.0 1.0; + offset: 4 -5; + } + } + } + part { + name: "label"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + description { + state: "default" 0.0; + min: 16 16; + rel1 { + to_x: "icon_swallow"; + relative: 1.0 0.0; + offset: 16 4; + } + rel2 { + relative: 1.0 1.0; + offset: -5 -5; + } + color: 255 255 255 255; + color2: 0 0 0 64; + text { + text: "Item Label"; + font: "Edje-Vera-Bold"; + size: 16; + min: 1 1; + align: 0.0 0.5; + text_class: "ilist_item"; + } + } + } + part { + name: "event"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } +} diff --git a/src/bin/e_configure.c b/src/bin/e_configure.c index fb94d7de0..910c60b35 100644 --- a/src/bin/e_configure.c +++ b/src/bin/e_configure.c @@ -63,24 +63,35 @@ e_configure_show(E_Container *con) edje_object_part_text_set(eco->edje, "title", _("Configuration Panel")); /* add items here */ + e_configure_header_item_add(eco, "enlightenment/appearance", _("Appearance")); e_configure_standard_item_add(eco, "enlightenment/desktops", _("Background Settings"), e_int_config_background); e_configure_standard_item_add(eco, "enlightenment/themes", _("Theme Selector"), e_int_config_theme); - e_configure_standard_item_add(eco, "enlightenment/modules", _("Module Settings"), e_int_config_modules); - e_configure_standard_item_add(eco, "enlightenment/configuration", _("Config Dialog Settings"), e_int_config_cfgdialogs); - e_configure_standard_item_add(eco, "enlightenment/mouse", _("Cursor Settings"), e_int_config_cursor); - e_configure_standard_item_add(eco, "enlightenment/desktops", _("Desktop Settings"), e_int_config_desks); - e_configure_standard_item_add(eco, "enlightenment/desktops", _("Desktop Lock Settings"), e_int_config_desklock); - e_configure_standard_item_add(eco, "enlightenment/desktops", _("Display Settings"), e_int_config_display); - e_configure_standard_item_add(eco, "enlightenment/e", _("Focus Settings"), e_int_config_focus); e_configure_standard_item_add(eco, "enlightenment/e", _("Font Display Hinting"), e_int_config_hinting); + e_configure_standard_item_add(eco, "enlightenment/mouse", _("Cursor Settings"), e_int_config_cursor); + e_configure_standard_item_add(eco, "enlightenment/windows", _("Window Display Settings"), e_int_config_window_display); + + e_configure_header_item_add(eco, "enlightenment/extensions", _("Extensions")); + e_configure_standard_item_add(eco, "enlightenment/modules", _("Module Settings"), e_int_config_modules); + + e_configure_header_item_add(eco, "enlightenment/screen_setup", _("Screen")); + e_configure_standard_item_add(eco, "enlightenment/desktops", _("Desktop Settings"), e_int_config_desks); + e_configure_standard_item_add(eco, "enlightenment/desktops", _("Display Settings"), e_int_config_display); + e_configure_standard_item_add(eco, "enlightenment/desktops", _("Desktop Lock Settings"), e_int_config_desklock); + + e_configure_header_item_add(eco, "enlightenment/behavior", _("Behavior")); + e_configure_standard_item_add(eco, "enlightenment/e", _("Focus Settings"), e_int_config_focus); e_configure_standard_item_add(eco, "enlightenment/e", _("Key Binding Settings"), e_int_config_keybindings); e_configure_standard_item_add(eco, "enlightenment/favorites", _("Menu Settings"), e_int_config_menus); + + e_configure_header_item_add(eco, "enlightenment/misc", _("Miscellaneous")); e_configure_standard_item_add(eco, "enlightenment/configuration", _("Performance Settings"), e_int_config_performance); - e_configure_standard_item_add(eco, "enlightenment/run", _("Run Command Settings"), e_int_config_exebuf); + e_configure_standard_item_add(eco, "enlightenment/configuration", _("Config Dialog Settings"), e_int_config_cfgdialogs); + + e_configure_header_item_add(eco, "enlightenment/advanced", _("Advanced")); e_configure_standard_item_add(eco, "enlightenment/run", _("Startup Settings"), e_int_config_startup); e_configure_standard_item_add(eco, "enlightenment/windows", _("Window List Settings"), e_int_config_winlist); - e_configure_standard_item_add(eco, "enlightenment/windows", _("Window Display Settings"), e_int_config_window_display); e_configure_standard_item_add(eco, "enlightenment/windows", _("Window Manipulation Settings"), e_int_config_window_manipulation); + e_configure_standard_item_add(eco, "enlightenment/run", _("Run Command Settings"), e_int_config_exebuf); /* FIXME: we should have a way for modules to hook in here and add their * own entries @@ -122,6 +133,16 @@ e_configure_standard_item_add(E_Configure *eco, char *icon, char *label, E_Confi e_widget_ilist_append(eco->ilist, o, label, _e_configure_cb_standard, ecocb, NULL); } +EAPI void +e_configure_header_item_add(E_Configure *eco, char *icon, char *label) +{ + Evas_Object *o; + + o = edje_object_add(eco->evas); + e_util_edje_icon_set(o, icon); + e_widget_ilist_header_append(eco->ilist, o, label); +} + /* local subsystem functions */ static void _e_configure_free(E_Configure *eco) diff --git a/src/bin/e_configure.h b/src/bin/e_configure.h index 466b0c829..2ac5edbb8 100644 --- a/src/bin/e_configure.h +++ b/src/bin/e_configure.h @@ -24,6 +24,7 @@ struct _E_Configure EAPI E_Configure *e_configure_show(E_Container *con); EAPI void e_configure_standard_item_add(E_Configure *eco, char *icon, char *label, E_Config_Dialog *(*func) (E_Container *con)); +EAPI void e_configure_header_item_add(E_Configure *eco, char *icon, char *label); #endif #endif diff --git a/src/bin/e_ilist.c b/src/bin/e_ilist.c index 7130aeb49..79007aa0d 100644 --- a/src/bin/e_ilist.c +++ b/src/bin/e_ilist.c @@ -30,6 +30,7 @@ struct _E_Smart_Item void (*func_hilight) (void *data, void *data2); void *data; void *data2; + unsigned char header : 1; }; /* local subsystem functions */ @@ -92,7 +93,7 @@ e_ilist_icon_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h) } EAPI void -e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data, void *data2), void (*func_hilight) (void *data, void *data2), void *data, void *data2) +e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, int header, void (*func) (void *data, void *data2), void (*func_hilight) (void *data, void *data2), void *data, void *data2) { E_Smart_Item *si; Evas_Coord mw = 0, mh = 0; @@ -101,12 +102,15 @@ e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (v si = E_NEW(E_Smart_Item, 1); si->sd = sd; si->base_obj = edje_object_add(evas_object_evas_get(sd->smart_obj)); - - if (evas_list_count(sd->items) & 0x1) - e_theme_edje_object_set(si->base_obj, "base/theme/widgets", + + if (header) + e_theme_edje_object_set(si->base_obj, "base/theme/widgets", + "widgets/ilist_header"); + else if (evas_list_count(sd->items) & 0x1) + e_theme_edje_object_set(si->base_obj, "base/theme/widgets", "widgets/ilist_odd"); else - e_theme_edje_object_set(si->base_obj, "base/theme/widgets", + e_theme_edje_object_set(si->base_obj, "base/theme/widgets", "widgets/ilist"); edje_object_part_text_set(si->base_obj, "label", label); si->icon_obj = icon; @@ -120,6 +124,7 @@ e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (v si->func_hilight = func_hilight; si->data = data; si->data2 = data2; + si->header = header; sd->items = evas_list_append(sd->items, si); edje_object_size_min_calc(si->base_obj, &mw, &mh); e_box_pack_end(sd->box_obj, si->base_obj); @@ -364,17 +369,41 @@ _e_smart_event_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info) ev = event_info; if (!strcmp(ev->keyname, "Up")) { - int n; - - n = e_ilist_selected_get(sd->smart_obj); - e_ilist_selected_set(sd->smart_obj, n - 1); + int n, ns; + E_Smart_Item *si; + + ns = e_ilist_selected_get(sd->smart_obj); + do + { + n = e_ilist_selected_get(sd->smart_obj); + if (n == 0) + { + e_ilist_selected_set(sd->smart_obj, ns); + break; + } + e_ilist_selected_set(sd->smart_obj, n - 1); + si = evas_list_nth(sd->items, sd->selected); + } + while ((si) && (si->header)); } else if (!strcmp(ev->keyname, "Down")) { - int n; + int n, ns; + E_Smart_Item *si; - n = e_ilist_selected_get(sd->smart_obj); - e_ilist_selected_set(sd->smart_obj, n + 1); + ns = e_ilist_selected_get(sd->smart_obj); + do + { + n = e_ilist_selected_get(sd->smart_obj); + if (n == (evas_list_count(sd->items) - 1)) + { + e_ilist_selected_set(sd->smart_obj, ns); + break; + } + e_ilist_selected_set(sd->smart_obj, n + 1); + si = evas_list_nth(sd->items, sd->selected); + } + while ((si) && (si->header)); } else if ((!strcmp(ev->keyname, "Return")) || (!strcmp(ev->keyname, "space"))) diff --git a/src/bin/e_ilist.h b/src/bin/e_ilist.h index 360141e4e..debb2069a 100644 --- a/src/bin/e_ilist.h +++ b/src/bin/e_ilist.h @@ -8,7 +8,7 @@ EAPI Evas_Object *e_ilist_add (Evas *evas); EAPI void e_ilist_icon_size_set (Evas_Object *obj, Evas_Coord w, Evas_Coord h); -EAPI void e_ilist_append (Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data, void *data2), void (*func_hilight) (void *data, void *data2), void *data, void *data2); +EAPI void e_ilist_append (Evas_Object *obj, Evas_Object *icon, char *label, int header, void (*func) (void *data, void *data2), void (*func_hilight) (void *data, void *data2), void *data, void *data2); EAPI void e_ilist_selected_set (Evas_Object *obj, int n); EAPI int e_ilist_selected_get (Evas_Object *obj); EAPI const char *e_ilist_selected_label_get (Evas_Object *obj); diff --git a/src/bin/e_test.c b/src/bin/e_test.c index b6a28e556..c320552fa 100644 --- a/src/bin/e_test.c +++ b/src/bin/e_test.c @@ -443,39 +443,43 @@ _e_test_internal(E_Container *con) e_theme_edje_object_set(o4, "base/theme/borders", "widgets/border/default/border"); e_livethumb_thumb_set(o3, o4); - e_ilist_append(o, o3, "Item 1", _e_test_sel, NULL, NULL); + e_ilist_append(o, o3, "Item 1", 0, _e_test_sel, NULL, NULL, NULL); o3 = e_icon_add(dia->win->evas); e_icon_file_set(o3, "/home/raster/C/stuff/icons/palette.png"); - e_ilist_append(o, o3, "Item 2 (Some really long text goes here for testing)", _e_test_sel, NULL, NULL); + e_ilist_append(o, o3, "Item 2 (Some really long text goes here for testing)", 0, _e_test_sel, NULL, NULL, NULL); o3 = e_icon_add(dia->win->evas); e_icon_file_set(o3, "/home/raster/C/stuff/icons/mozilla.png"); - e_ilist_append(o, o3, "Item 3 (Medium length)", _e_test_sel, NULL, NULL); + e_ilist_append(o, o3, "Item 3 (Medium length)", 0, _e_test_sel, NULL, NULL, NULL); o3 = e_icon_add(dia->win->evas); e_icon_file_set(o3, "/home/raster/C/stuff/icons/trash_open.png"); - e_ilist_append(o, o3, "Item POOP", _e_test_sel, NULL, NULL); + e_ilist_append(o, o3, "Item POOP", 0, _e_test_sel, NULL, NULL, NULL); o3 = e_icon_add(dia->win->evas); e_icon_file_set(o3, "/home/raster/C/stuff/icons/watch.png"); - e_ilist_append(o, o3, "Item BLING BLING", _e_test_sel, NULL, NULL); + e_ilist_append(o, o3, "Item BLING BLING", 0, _e_test_sel, NULL, NULL, NULL); o3 = e_icon_add(dia->win->evas); e_icon_file_set(o3, "/home/raster/C/stuff/icons/quake3.png"); - e_ilist_append(o, o3, "Sukebelinth", _e_test_sel, NULL, NULL); + e_ilist_append(o, o3, "Sukebelinth", 0, _e_test_sel, NULL, NULL, NULL); o3 = e_icon_add(dia->win->evas); e_icon_file_set(o3, "/home/raster/C/stuff/icons/opera6.png"); - e_ilist_append(o, o3, "Panties", _e_test_sel, NULL, NULL); + e_ilist_append(o, o3, "A header", 1, NULL, NULL, NULL, NULL); + + o3 = e_icon_add(dia->win->evas); + e_icon_file_set(o3, "/home/raster/C/stuff/icons/opera6.png"); + e_ilist_append(o, o3, "Panties", 0, _e_test_sel, NULL, NULL, NULL); o3 = e_icon_add(dia->win->evas); e_icon_file_set(o3, "/home/raster/C/stuff/icons/drawer_open.png"); - e_ilist_append(o, o3, "Flimbert the cagey", _e_test_sel, NULL, NULL); + e_ilist_append(o, o3, "Flimbert the cagey", 0, _e_test_sel, NULL, NULL, NULL); o3 = e_icon_add(dia->win->evas); e_icon_file_set(o3, "/home/raster/C/stuff/icons/cd.png"); - e_ilist_append(o, o3, "Norbert", _e_test_sel, NULL, NULL); + e_ilist_append(o, o3, "Norbert", 0, _e_test_sel, NULL, NULL, NULL); e_ilist_min_size_get(o, &mw, &mh); evas_object_resize(o, mw, mh); diff --git a/src/bin/e_widget_ilist.c b/src/bin/e_widget_ilist.c index 36f023af4..8eb73d053 100644 --- a/src/bin/e_widget_ilist.c +++ b/src/bin/e_widget_ilist.c @@ -73,7 +73,17 @@ e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*f wcb->data = data; if (val) wcb->value = strdup(val); wd->callbacks = evas_list_append(wd->callbacks, wcb); - e_ilist_append(wd->o_ilist, icon, label, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb); + e_ilist_append(wd->o_ilist, icon, label, 0, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb); + if (icon) evas_object_show(icon); +} + +EAPI void +e_widget_ilist_header_append(Evas_Object *obj, Evas_Object *icon, char *label) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(obj); + e_ilist_append(wd->o_ilist, icon, label, 1, NULL, NULL, NULL, NULL); if (icon) evas_object_show(icon); } diff --git a/src/bin/e_widget_ilist.h b/src/bin/e_widget_ilist.h index 4f66e36fd..f8c18f0c1 100644 --- a/src/bin/e_widget_ilist.h +++ b/src/bin/e_widget_ilist.h @@ -8,6 +8,7 @@ EAPI Evas_Object *e_widget_ilist_add(Evas *evas, int icon_w, int icon_h, char **value); EAPI void e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data), void *data, char *val); +EAPI void e_widget_ilist_header_append(Evas_Object *obj, Evas_Object *icon, char *label); EAPI void e_widget_ilist_selected_set(Evas_Object *obj, int n); EAPI void e_widget_ilist_selector_set(Evas_Object *obj, int selector); EAPI void e_widget_ilist_go(Evas_Object *obj);