Rework of the ilist widget.
- Added ability to optionally do multi-select and range-select. - Update Font Config Dialog to allow multi-select & setting of fonts in batch. No changes should be necessary for existing apps/dialogs that use ilist. If you would like to implement multi-select in something, have a look at the font config dialog for usage. SVN revision: 27875
This commit is contained in:
parent
ed8c48f4ae
commit
332f1bc2ce
1044
src/bin/e_ilist.c
1044
src/bin/e_ilist.c
File diff suppressed because it is too large
Load Diff
|
@ -1,36 +1,54 @@
|
|||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
||||
*/
|
||||
#ifdef E_TYPEDEFS
|
||||
|
||||
typedef struct _E_Ilist_Item E_Ilist_Item;
|
||||
|
||||
#else
|
||||
#ifndef E_ILIST_H
|
||||
#define E_ILIST_H
|
||||
|
||||
struct _E_Ilist_Item
|
||||
{
|
||||
void *sd;
|
||||
Evas_Object *o_base;
|
||||
Evas_Object *o_icon;
|
||||
unsigned char header : 1;
|
||||
unsigned char selected : 1;
|
||||
|
||||
void (*func) (void *data, void *data2);
|
||||
void (*func_hilight) (void *data, void *data2);
|
||||
void *data, *data2;
|
||||
};
|
||||
|
||||
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, const 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_clear (Evas_Object *obj);
|
||||
EAPI void e_ilist_freeze (Evas_Object *obj);
|
||||
EAPI void e_ilist_thaw (Evas_Object *obj);
|
||||
EAPI int e_ilist_count (Evas_Object *obj);
|
||||
EAPI int e_ilist_selector_get (Evas_Object *obj);
|
||||
EAPI void e_ilist_selector_set (Evas_Object *obj, int selector);
|
||||
EAPI int e_ilist_multi_select_get (Evas_Object *obj);
|
||||
EAPI void e_ilist_multi_select_set (Evas_Object *obj, int multi);
|
||||
EAPI void e_ilist_min_size_get (Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
|
||||
EAPI void e_ilist_unselect (Evas_Object *obj);
|
||||
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);
|
||||
EAPI void *e_ilist_selected_data_get (Evas_Object *obj);
|
||||
EAPI void *e_ilist_selected_data2_get (Evas_Object *obj);
|
||||
EAPI Evas_Object *e_ilist_selected_icon_get (Evas_Object *obj);
|
||||
EAPI void e_ilist_selected_geometry_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
|
||||
EAPI void e_ilist_min_size_get (Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
|
||||
EAPI void e_ilist_selector_set (Evas_Object *obj, int selector);
|
||||
EAPI int e_ilist_selector_get (Evas_Object *obj);
|
||||
EAPI void e_ilist_unselect (Evas_Object *obj);
|
||||
EAPI void e_ilist_remove_num (Evas_Object *obj, int n);
|
||||
EAPI void e_ilist_remove_label (Evas_Object *obj, const char *label);
|
||||
EAPI const char *e_ilist_nth_label_get (Evas_Object *obj, int n);
|
||||
EAPI void e_ilist_nth_label_set (Evas_Object *obj, int n, const char *label);
|
||||
EAPI void e_ilist_nth_icon_set (Evas_Object *obj, int n, Evas_Object *icon);
|
||||
EAPI Evas_Object *e_ilist_nth_icon_get (Evas_Object *obj, int n);
|
||||
EAPI Evas_Object *e_ilist_selected_icon_get (Evas_Object *obj);
|
||||
EAPI int e_ilist_count (Evas_Object *obj);
|
||||
EAPI void e_ilist_clear (Evas_Object *obj);
|
||||
EAPI const char *e_ilist_nth_label_get (Evas_Object *obj, int n);
|
||||
EAPI void e_ilist_nth_label_set (Evas_Object *obj, int n, const char *label);
|
||||
EAPI Evas_Object *e_ilist_nth_icon_get (Evas_Object *obj, int n);
|
||||
EAPI void e_ilist_nth_icon_set (Evas_Object *obj, int n, Evas_Object *icon);
|
||||
EAPI int e_ilist_nth_is_header (Evas_Object *obj, int n);
|
||||
EAPI void e_ilist_freeze (Evas_Object *obj);
|
||||
EAPI void e_ilist_thaw (Evas_Object *obj);
|
||||
EAPI void e_ilist_icon_size_set (Evas_Object *obj, Evas_Coord w, Evas_Coord h);
|
||||
EAPI Evas_List *e_ilist_items_get (Evas_Object *obj);
|
||||
EAPI void e_ilist_multi_select (Evas_Object *obj, int n);
|
||||
EAPI void e_ilist_range_select (Evas_Object *obj, int n);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -21,6 +21,8 @@ static void _ilist_font_cb_change(void *data, Evas_Object *obj);
|
|||
static void _enabled_font_cb_change(void *data, Evas_Object *obj);
|
||||
static void _enabled_fallback_cb_change(void *data, Evas_Object *obj);
|
||||
static int _sort_fonts(void *data1, void *data2);
|
||||
static void _size_cb_change(void *data, Evas_Object *obj);
|
||||
static void _font_cb_change(void *data, Evas_Object *obj);
|
||||
|
||||
struct _E_Text_Class_Pair
|
||||
{
|
||||
|
@ -193,13 +195,10 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
tc->font = evas_stringshare_add(efd->font);
|
||||
else
|
||||
tc->font = evas_stringshare_add("");
|
||||
|
||||
tc->size = efd->size;
|
||||
}
|
||||
else
|
||||
{
|
||||
tc->font = evas_stringshare_add("");
|
||||
}
|
||||
tc->font = evas_stringshare_add("");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -209,9 +208,6 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
|
||||
/* Fill Hinting */
|
||||
cfdata->hinting = e_config->font_hinting;
|
||||
|
||||
/* Font fallbacks configured in widgets */
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -274,7 +270,6 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
}
|
||||
|
||||
e_font_apply();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -294,6 +289,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
/* Create Font Class Widgets */
|
||||
of = e_widget_framelist_add(evas, _("Font Classes"), 0);
|
||||
cfdata->gui.class_list = e_widget_ilist_add(evas, 16, 16, NULL);
|
||||
e_widget_ilist_multi_select_set(cfdata->gui.class_list, 1);
|
||||
e_widget_min_size_set(cfdata->gui.class_list, 100, 250);
|
||||
e_widget_on_change_hook_set(cfdata->gui.class_list, _ilist_font_cb_change, cfdata);
|
||||
_fill_ilist(cfdata);
|
||||
|
@ -312,6 +308,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
cfdata->gui.size = e_widget_slider_add(evas, 1, 0, _("%2.1f pixels"), 5.0, 25.0, 0.5, 0, &(cfdata->cur_size), NULL, 25);
|
||||
e_widget_disabled_set(cfdata->gui.size, 1);
|
||||
e_widget_min_size_set(cfdata->gui.size, 180, 25);
|
||||
e_widget_on_change_hook_set(cfdata->gui.size, _size_cb_change, cfdata);
|
||||
e_widget_table_object_append(ott, cfdata->gui.size,
|
||||
1, 1, 1, 1, 1, 0, 1, 0);
|
||||
e_widget_table_object_append(ot, ott,
|
||||
|
@ -319,6 +316,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
|
||||
of = e_widget_framelist_add(evas, _("Fonts"), 0);
|
||||
cfdata->gui.font_list = e_widget_ilist_add(evas, 16, 16, &(cfdata->cur_font));
|
||||
e_widget_on_change_hook_set(cfdata->gui.font_list, _font_cb_change, cfdata);
|
||||
evas_event_freeze(evas_object_evas_get(cfdata->gui.font_list));
|
||||
edje_freeze();
|
||||
e_widget_ilist_freeze(cfdata->gui.font_list);
|
||||
|
@ -352,7 +350,6 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
e_widget_table_object_append(ot, of, 1, 1, 2, 4, 1, 1, 1, 1);
|
||||
|
||||
e_widget_list_object_append(o, ot, 1, 1, 0.5);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
|
@ -376,9 +373,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
for (next = cfdata->text_classes; next; next = next->next)
|
||||
{
|
||||
tc = next->data;
|
||||
|
||||
if (!tc->class_name) continue;
|
||||
|
||||
if (tc->enabled && tc->font)
|
||||
e_font_default_set(tc->class_name, tc->font, tc->size);
|
||||
else
|
||||
|
@ -404,7 +399,6 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
e_config->font_hinting = cfdata->hinting;
|
||||
e_config_save_queue();
|
||||
e_canvas_rehint();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -425,6 +419,7 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
/* Create Font Class Widgets */
|
||||
of = e_widget_frametable_add(evas, _("Font Class Configuration"), 0);
|
||||
cfdata->gui.class_list = e_widget_ilist_add(evas, 16, 16, NULL);
|
||||
e_widget_ilist_multi_select_set(cfdata->gui.class_list, 1);
|
||||
e_widget_min_size_set(cfdata->gui.class_list, 100, 100);
|
||||
e_widget_on_change_hook_set(cfdata->gui.class_list, _ilist_font_cb_change, cfdata);
|
||||
_fill_ilist(cfdata);
|
||||
|
@ -442,6 +437,7 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
1, 2, 1, 1, 1, 1, 1, 1);
|
||||
|
||||
cfdata->gui.font = e_widget_entry_add(evas, &(cfdata->cur_font));
|
||||
e_widget_on_change_hook_set(cfdata->gui.font, _font_cb_change, cfdata);
|
||||
e_widget_disabled_set(cfdata->gui.font, 1);
|
||||
e_widget_min_size_set(cfdata->gui.font, 100, 25);
|
||||
e_widget_frametable_object_append(of, cfdata->gui.font,
|
||||
|
@ -452,6 +448,7 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
1, 3, 1, 1, 1, 1, 1, 1);
|
||||
|
||||
cfdata->gui.size = e_widget_slider_add(evas, 1, 0, _("%2.1f pixels"), 5.0, 25.0, 0.5, 0, &(cfdata->cur_size), NULL, 25);
|
||||
e_widget_on_change_hook_set(cfdata->gui.size, _size_cb_change, cfdata);
|
||||
e_widget_disabled_set(cfdata->gui.size, 1);
|
||||
e_widget_min_size_set(cfdata->gui.size, 180, 25);
|
||||
e_widget_frametable_object_append(of, cfdata->gui.size,
|
||||
|
@ -508,7 +505,6 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
e_widget_change(ob);
|
||||
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
|
@ -566,17 +562,16 @@ _ilist_font_cb_change(void *data, Evas_Object *obj)
|
|||
cfdata = data;
|
||||
if (!cfdata) return;
|
||||
|
||||
/* Save old data */
|
||||
if (cfdata->cur_index >= 0)
|
||||
{
|
||||
tc = evas_list_nth(cfdata->text_classes, cfdata->cur_index);
|
||||
tc->enabled = cfdata->cur_enabled;
|
||||
tc->size = cfdata->cur_size;
|
||||
if (tc->font) evas_stringshare_del(tc->font);
|
||||
if (cfdata->cur_font)
|
||||
tc->font = evas_stringshare_add(cfdata->cur_font);
|
||||
}
|
||||
|
||||
/* Fillout form with new data */
|
||||
indx = e_widget_ilist_selected_get(cfdata->gui.class_list);
|
||||
tc = evas_list_nth(cfdata->text_classes, indx);
|
||||
cfdata->cur_index = indx;
|
||||
|
@ -610,31 +605,94 @@ static void
|
|||
_enabled_font_cb_change(void *data, Evas_Object *obj)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
Evas_Object *icon;
|
||||
Evas_List *l;
|
||||
int n;
|
||||
|
||||
cfdata = data;
|
||||
if (!cfdata) return;
|
||||
e_widget_disabled_set(cfdata->gui.font, !cfdata->cur_enabled);
|
||||
e_widget_disabled_set(cfdata->gui.size, !cfdata->cur_enabled);
|
||||
|
||||
n = e_widget_ilist_selected_get(cfdata->gui.class_list);
|
||||
if (cfdata->cur_enabled)
|
||||
for (n = 0, l = e_widget_ilist_items_get(cfdata->gui.class_list); l; l = l->next, n++)
|
||||
{
|
||||
e_widget_disabled_set(cfdata->gui.font, 0);
|
||||
e_widget_disabled_set(cfdata->gui.size, 0);
|
||||
icon = edje_object_add(cfdata->evas);
|
||||
e_util_edje_icon_set(icon, ILIST_ICON_WITH_DEFINED_FONT);
|
||||
E_Ilist_Item *i;
|
||||
Evas_Object *icon = NULL;
|
||||
CFText_Class *tc;
|
||||
|
||||
i = l->data;
|
||||
if (!i) continue;
|
||||
if (!i->selected) continue;
|
||||
|
||||
tc = evas_list_nth(cfdata->text_classes, n);
|
||||
tc->enabled = cfdata->cur_enabled;
|
||||
tc->size = cfdata->cur_size;
|
||||
if (tc->font) evas_stringshare_del(tc->font);
|
||||
if (cfdata->cur_font)
|
||||
tc->font = evas_stringshare_add(cfdata->cur_font);
|
||||
if (cfdata->cur_enabled)
|
||||
{
|
||||
icon = edje_object_add(cfdata->evas);
|
||||
e_util_edje_icon_set(icon, ILIST_ICON_WITH_DEFINED_FONT);
|
||||
}
|
||||
e_widget_ilist_nth_icon_set(cfdata->gui.class_list, n, icon);
|
||||
}
|
||||
else
|
||||
}
|
||||
|
||||
static void
|
||||
_size_cb_change(void *data, Evas_Object *obj)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
Evas_List *l;
|
||||
int n;
|
||||
|
||||
cfdata = data;
|
||||
if (!cfdata) return;
|
||||
|
||||
for (n = 0, l = e_widget_ilist_items_get(cfdata->gui.class_list); l; l = l->next, n++)
|
||||
{
|
||||
e_widget_disabled_set(cfdata->gui.font, 1);
|
||||
e_widget_disabled_set(cfdata->gui.size, 1);
|
||||
icon = NULL;
|
||||
E_Ilist_Item *i;
|
||||
Evas_Object *icon = NULL;
|
||||
CFText_Class *tc;
|
||||
|
||||
i = l->data;
|
||||
if (!i) continue;
|
||||
if (!i->selected) continue;
|
||||
|
||||
tc = evas_list_nth(cfdata->text_classes, n);
|
||||
tc->size = cfdata->cur_size;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_font_cb_change(void *data, Evas_Object *obj)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
Evas_List *l;
|
||||
int n;
|
||||
|
||||
cfdata = data;
|
||||
if (!cfdata) return;
|
||||
|
||||
for (n = 0, l = e_widget_ilist_items_get(cfdata->gui.class_list); l; l = l->next, n++)
|
||||
{
|
||||
E_Ilist_Item *i;
|
||||
Evas_Object *icon = NULL;
|
||||
CFText_Class *tc;
|
||||
|
||||
i = l->data;
|
||||
if (!i) continue;
|
||||
if (!i->selected) continue;
|
||||
|
||||
tc = evas_list_nth(cfdata->text_classes, n);
|
||||
if (tc->font) evas_stringshare_del(tc->font);
|
||||
if (cfdata->cur_font)
|
||||
tc->font = evas_stringshare_add(cfdata->cur_font);
|
||||
}
|
||||
e_widget_ilist_nth_icon_set(cfdata->gui.class_list, n, icon);
|
||||
}
|
||||
|
||||
/* Private Font Fallback Functions */
|
||||
static void _enabled_fallback_cb_change(void *data, Evas_Object *obj)
|
||||
static void
|
||||
_enabled_fallback_cb_change(void *data, Evas_Object *obj)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata;
|
||||
|
||||
|
|
|
@ -59,7 +59,6 @@ e_widget_ilist_add(Evas *evas, int icon_w, int icon_h, char **value)
|
|||
evas_object_show(o);
|
||||
evas_object_smart_callback_add(o, "selected", _e_wid_cb_selected, obj);
|
||||
|
||||
|
||||
evas_object_resize(obj, 32, 32);
|
||||
e_widget_min_size_set(obj, 32, 32);
|
||||
return obj;
|
||||
|
@ -157,9 +156,7 @@ e_widget_ilist_go(Evas_Object *obj)
|
|||
e_widget_min_size_set(obj, mw + (w - vw), wmh);
|
||||
}
|
||||
else if (mw < vw)
|
||||
{
|
||||
evas_object_resize(wd->o_ilist, vw,mh);
|
||||
}
|
||||
evas_object_resize(wd->o_ilist, vw,mh);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -286,6 +283,51 @@ e_widget_ilist_thaw(Evas_Object *obj)
|
|||
e_ilist_thaw(wd->o_ilist);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_widget_ilist_multi_select_set(Evas_Object *obj, int multi)
|
||||
{
|
||||
E_Widget_Data *wd;
|
||||
|
||||
wd = e_widget_data_get(obj);
|
||||
e_ilist_multi_select_set(wd->o_ilist, multi);
|
||||
}
|
||||
|
||||
EAPI int
|
||||
e_widget_ilist_multi_select_get(Evas_Object *obj)
|
||||
{
|
||||
E_Widget_Data *wd;
|
||||
|
||||
wd = e_widget_data_get(obj);
|
||||
return e_ilist_multi_select_get(wd->o_ilist);
|
||||
}
|
||||
|
||||
EAPI Evas_List *
|
||||
e_widget_ilist_items_get(Evas_Object *obj)
|
||||
{
|
||||
E_Widget_Data *wd;
|
||||
|
||||
wd = e_widget_data_get(obj);
|
||||
return e_ilist_items_get(wd->o_ilist);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_widget_ilist_multi_select(Evas_Object *obj, int n)
|
||||
{
|
||||
E_Widget_Data *wd;
|
||||
|
||||
wd = e_widget_data_get(obj);
|
||||
e_ilist_multi_select(wd->o_ilist, n);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_widget_ilist_range_select(Evas_Object *obj, int n)
|
||||
{
|
||||
E_Widget_Data *wd;
|
||||
|
||||
wd = e_widget_data_get(obj);
|
||||
e_ilist_range_select(wd->o_ilist, n);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_wid_del_hook(Evas_Object *obj)
|
||||
{
|
||||
|
|
|
@ -27,6 +27,11 @@ EAPI void e_widget_ilist_clear(Evas_Object *obj);
|
|||
EAPI int e_widget_ilist_nth_is_header(Evas_Object *obj, int n);
|
||||
EAPI void e_widget_ilist_freeze(Evas_Object *obj);
|
||||
EAPI void e_widget_ilist_thaw(Evas_Object *obj);
|
||||
|
||||
EAPI void e_widget_ilist_multi_select_set(Evas_Object *obj, int multi);
|
||||
EAPI int e_widget_ilist_multi_select_get(Evas_Object *obj);
|
||||
EAPI Evas_List *e_widget_ilist_items_get(Evas_Object *obj);
|
||||
EAPI void e_widget_ilist_multi_select(Evas_Object *obj, int n);
|
||||
EAPI void e_widget_ilist_range_select(Evas_Object *obj, int n);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue