Add font fallbacks configuration to font config dialog

* Add arrow icons to default theme
 * Add api to ilist for manipulating list labels (for moving)
 * TODO: need to split list manipulation code out to its own widget but
   what should the diget be called? e_widget_editable_list?


SVN revision: 21806
This commit is contained in:
Stafford Mitchell Horne 2006-04-04 14:00:19 +00:00
parent 7f422515a1
commit 5828935a95
8 changed files with 386 additions and 24 deletions

View File

@ -29,6 +29,9 @@ images {
image: "e17_pager_window.png" COMP;
image: "e17_icon_right_arrow.png" COMP;
image: "e17_icon_up_arrow.png" COMP;
image: "e17_icon_down_arrow.png" COMP;
image: "e17_pointer.png" COMP;
}
@ -511,6 +514,40 @@ group {
}
}
}
group {
name: "icons/widget/up_arrow";
parts {
part {
name: "icon";
mouse_events: 0;
description {
state: "default" 0.0;
aspect: 0.83333333333 0.83333333333;
max: 12 10;
image {
normal: "e17_icon_up_arrow.png";
}
}
}
}
}
group {
name: "icons/widget/down_arrow";
parts {
part {
name: "icon";
mouse_events: 0;
description {
state: "default" 0.0;
aspect: 0.83333333333 0.83333333333;
max: 12 10;
image {
normal: "e17_icon_down_arrow.png";
}
}
}
}
}
group {
name: "icons/enlightenment/mouse";
max: 64 64;

Binary file not shown.

Binary file not shown.

View File

@ -296,6 +296,29 @@ e_ilist_remove_label(Evas_Object *obj, const char *label)
}
}
EAPI const char *
e_ilist_nth_label_get(Evas_Object *obj, int n)
{
E_Smart_Item *si;
API_ENTRY return NULL;
if (!sd->items) return NULL;
si = evas_list_nth(sd->items, n);
if (si) return edje_object_part_text_get(si->base_obj, "label");
return NULL;
}
EAPI void
e_ilist_nth_label_set(Evas_Object *obj, int n, const char *label)
{
E_Smart_Item *si;
API_ENTRY return;
if (!sd->items) return;
si = evas_list_nth(sd->items, n);
if (si) edje_object_part_text_set(si->base_obj, "label", label);
}
EAPI int
e_ilist_count(Evas_Object *obj)
{

View File

@ -20,6 +20,8 @@ EAPI void e_ilist_selector_set (Evas_Object *obj, int selector)
EAPI int e_ilist_selector_get (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 int e_ilist_count (Evas_Object *obj);
EAPI void e_ilist_clear (Evas_Object *obj);

View File

@ -3,28 +3,24 @@
*/
#include "e.h"
#define CLASS_ENABLED 0
#define CLASS_DISABLED 1
typedef struct _E_Text_Class_Pair E_Text_Class_Pair;
typedef struct _CFText_Class CFText_Class;
typedef struct _E_Widget_Data E_Widget_Data;
static void *_create_data(E_Config_Dialog *cfd);
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
static void _ilist_cb_change(void *data, Evas_Object *obj);
static void _enabled_cb_change(void *data, Evas_Object *obj);
static void _ilist_font_cb_change(void *data, Evas_Object *obj);
static void _enabled_font_cb_change(void *data, Evas_Object *obj);
struct _E_Widget_Data
{
E_Radio_Group *group;
Evas_Object *o_radio;
int valnum;
};
static void _ilist_fallback_cb_change(void *data, Evas_Object *obj);
static void _enabled_fallback_cb_change(void *data, Evas_Object *obj);
static void _button_fallback_cb_add(void *data, void *obj);
static void _button_fallback_cb_remove(void *data, void *obj);
static void _button_fallback_cb_up(void *data, void *obj);
static void _button_fallback_cb_down(void *data, void *obj);
static void _list_select_num(E_Config_Dialog_Data *cfdata, int indx);
struct _E_Text_Class_Pair
{
@ -84,19 +80,29 @@ struct _E_Config_Dialog_Data
int cur_index;
/* Font Fallbacks */
Evas_List *font_fallbacks;
int fallbacks_state;
char *cur_fallback;
int cur_fallbacks_enabled;
/* Font Hinting */
int hinting;
struct
{
/* Font Classes */
Evas_Object *class_list;
Evas_Object *font;
Evas_Object *size;
Evas_Object *enabled;
/* Font Fallbacks */
Evas_Object *fallback_list; /* Selecting a list entry starts edit*/
Evas_Object *fallback; /* Text Entry */
Evas_Object *fallback_up; /* Move selected list entry up */
Evas_Object *fallback_down; /* Move selected list entry down */
Evas_Object *fallback_add; /* create and select a new list entry */
Evas_Object *fallback_remove; /* remove the selected entry */
}
gui;
};
@ -121,13 +127,13 @@ e_int_config_fonts(E_Container *con)
static void
_fill_data(E_Config_Dialog_Data *cfdata)
{
Evas_List *enabled_list;
Evas_List *font_list;
Evas_List *next;
E_Font_Default *efd;
CFText_Class *tc;
int i;
enabled_list = e_font_default_list();
font_list = e_font_default_list();
/* Fill out the font list */
for (i = 0; text_class_predefined_names[i].class_name; i++ )
@ -140,7 +146,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
tc->size = 0;
tc->enabled = 0;
for (next = enabled_list; next ; next = next->next)
for (next = font_list; next ; next = next->next)
{
efd = next->data;
@ -173,6 +179,8 @@ _fill_data(E_Config_Dialog_Data *cfdata)
/* Fill Hinting */
cfdata->hinting = e_config->font_hinting;
/* Font fallbacks configured in widgets */
return;
}
@ -201,12 +209,14 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
evas_stringshare_del(tc->font);
E_FREE(tc);
}
free(cfdata);
}
static int
_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
{
int i;
Evas_List *next;
CFText_Class *tc;
@ -234,6 +244,19 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
}
}
/* Fallbacks configure */
e_font_fallback_clear();
if (cfdata->cur_fallbacks_enabled)
{
for (i = 0; i < e_widget_ilist_count(cfdata->gui.fallback_list); i++)
{
const char *fallback;
fallback = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, i);
if (fallback != NULL && strlen(fallback) > 0)
e_font_fallback_append(fallback);
}
}
e_font_apply();
/* Apply Hinting */
@ -259,7 +282,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
of = e_widget_frametable_add(evas, _("Font Class Configuration"), 0);
cfdata->gui.class_list = e_widget_ilist_add(evas, 16, 16, NULL);
e_widget_min_size_set(cfdata->gui.class_list, 100, 100);
e_widget_on_change_hook_set(cfdata->gui.class_list, _ilist_cb_change, cfdata);
e_widget_on_change_hook_set(cfdata->gui.class_list, _ilist_font_cb_change, cfdata);
/* Fill In Ilist */
for (i = 0; i < evas_list_count(cfdata->text_classes); i++)
@ -319,7 +342,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
e_widget_frametable_object_append(of, cfdata->gui.enabled,
1, 3, 2, 1,
1, 1, 1, 1);
e_widget_on_change_hook_set(cfdata->gui.enabled, _enabled_cb_change, cfdata);
e_widget_on_change_hook_set(cfdata->gui.enabled, _enabled_font_cb_change, cfdata);
e_widget_list_object_append(o, of, 1, 1, 0.5);
@ -342,13 +365,99 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
ob = e_widget_radio_add(evas, _("None"), 2, rg);
e_widget_disabled_set(ob, !option_enable);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
/* Create Fallbacks Widgets */
option_enable = (e_font_fallback_list() != NULL);
of = e_widget_frametable_add(evas, _("Font Fallbacks"), 1);
ob = e_widget_button_add(evas, _("Move Up"), "widget/up_arrow", _button_fallback_cb_up, cfdata, NULL);
cfdata->gui.fallback_up = ob;
e_widget_disabled_set(ob, 1);
e_widget_frametable_object_append( of,
ob,
1, 0, 1, 1,
1, 1, 1, 1);
ob = e_widget_button_add(evas, _("Move Down"), "widget/down_arrow", _button_fallback_cb_down, cfdata, NULL);
cfdata->gui.fallback_down = ob;
e_widget_disabled_set(ob, 1);
e_widget_frametable_object_append( of,
ob,
1, 3, 1, 1,
1, 1, 1, 1);
cfdata->gui.fallback_list = e_widget_ilist_add(evas, 16, 16, NULL);
e_widget_disabled_set(cfdata->gui.fallback_list, !option_enable);
e_widget_min_size_set(cfdata->gui.fallback_list, 100, 100);
e_widget_on_change_hook_set(cfdata->gui.fallback_list, _ilist_fallback_cb_change, cfdata);
/* Fill In Ilist */
for (i = 0; i < evas_list_count(e_font_fallback_list()); i++)
{
E_Font_Fallback *eff;
eff = evas_list_nth(e_font_fallback_list(), i);
e_widget_ilist_append(cfdata->gui.fallback_list, NULL, eff->name, NULL, NULL, NULL);
}
e_widget_ilist_go(cfdata->gui.fallback_list);
e_widget_frametable_object_append( of,
cfdata->gui.fallback_list,
2, /* Col Start*/
0, /* Row Start */
1, /* Col Span*/
4, /* Row Span*/
1, 1, 1, 1);
ob = e_widget_label_add(evas, _("Fallback Name"));
e_widget_frametable_object_append( of,
ob,
0, 0, 1, 1,
1, 1, 1, 1);
cfdata->gui.fallback = e_widget_entry_add(evas, &(cfdata->cur_fallback));
e_widget_disabled_set(cfdata->gui.fallback, !option_enable);
e_widget_min_size_set(cfdata->gui.fallback, 100, 25);
e_widget_frametable_object_append(of, cfdata->gui.fallback,
0, 1, 1, 1,
1, 1, 1, 1);
cfdata->gui.fallback_add = e_widget_button_add(evas, _("Add"), NULL, _button_fallback_cb_add, cfdata, NULL);
e_widget_disabled_set(cfdata->gui.fallback_add, !option_enable);
e_widget_frametable_object_append( of,
cfdata->gui.fallback_add,
1, 1, 1, 1,
1, 1, 1, 1);
cfdata->gui.fallback_remove = e_widget_button_add(evas, _("Remove"), NULL, _button_fallback_cb_remove, cfdata, NULL);
e_widget_disabled_set(cfdata->gui.fallback_remove, !option_enable);
e_widget_frametable_object_append( of,
cfdata->gui.fallback_remove ,
1, 2, 1, 1,
1, 1, 1, 1);
ob = e_widget_check_add(evas, _("Enable Fallbacks"), &(cfdata->cur_fallbacks_enabled));
e_widget_frametable_object_append(of, ob,
0, 3, 1, 1,
1, 1, 1, 1);
e_widget_check_checked_set(ob, option_enable);
e_widget_on_change_hook_set(ob, _enabled_fallback_cb_change, cfdata);
if (e_widget_ilist_count(cfdata->gui.fallback_list) > 0)
{
e_widget_ilist_selected_set(cfdata->gui.fallback_list, 0);
}
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
}
/* Private Font Class Functions */
static void
_ilist_cb_change(void *data, Evas_Object *obj)
_ilist_font_cb_change(void *data, Evas_Object *obj)
{
int indx;
E_Config_Dialog_Data *cfdata;
@ -383,7 +492,7 @@ _ilist_cb_change(void *data, Evas_Object *obj)
}
static void
_enabled_cb_change(void *data, Evas_Object *obj)
_enabled_font_cb_change(void *data, Evas_Object *obj)
{
E_Config_Dialog_Data *cfdata;
cfdata = data;
@ -400,3 +509,173 @@ _enabled_cb_change(void *data, Evas_Object *obj)
e_widget_disabled_set(cfdata->gui.size, 1);
}
}
/* Private Font Fallback Functions */
static void _ilist_fallback_cb_change(void *data, Evas_Object *obj)
{
int indx;
E_Config_Dialog_Data *cfdata;
cfdata = data;
if (!cfdata) return;
indx = e_widget_ilist_selected_get(cfdata->gui.fallback_list);
_list_select_num(cfdata, indx);
}
static void _enabled_fallback_cb_change(void *data, Evas_Object *obj)
{
E_Config_Dialog_Data *cfdata;
cfdata = data;
if (!cfdata) return;
if (cfdata->cur_fallbacks_enabled)
{
e_widget_disabled_set(cfdata->gui.fallback_list, 0);
e_widget_disabled_set(cfdata->gui.fallback_add, 0);
e_widget_disabled_set(cfdata->gui.fallback, 0);
}
else
{
_list_select_num(cfdata, -1);
e_widget_disabled_set(cfdata->gui.fallback_list, 1);
e_widget_disabled_set(cfdata->gui.fallback, 1);
e_widget_disabled_set(cfdata->gui.fallback_add, 1);
}
}
static void _button_fallback_cb_add(void *data, void *obj)
{
E_Config_Dialog_Data *cfdata;
cfdata = data;
if (!cfdata) return;
if (cfdata->cur_fallback && strlen(cfdata->cur_fallback) > 0)
{
int count;
int i;
/* If it already esists just select the existing one */
for (i = 0; i < e_widget_ilist_count(cfdata->gui.fallback_list); i++)
{
const char *fallback;
fallback = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, i);
if ( fallback != NULL &&
strlen(fallback) > 0 &&
!strcmp(fallback, cfdata->cur_fallback) )
{
e_widget_ilist_selected_set(cfdata->gui.fallback_list, i);
return;
}
}
e_widget_ilist_append(cfdata->gui.fallback_list, NULL, cfdata->cur_fallback, NULL, NULL, NULL);
e_widget_ilist_go(cfdata->gui.fallback_list);
count = e_widget_ilist_count(cfdata->gui.fallback_list);
e_widget_ilist_selected_set(cfdata->gui.fallback_list, count - 1);
e_widget_entry_text_set(cfdata->gui.fallback, "");
}
}
static void _button_fallback_cb_remove(void *data, void *obj)
{
int indx;
int count;
E_Config_Dialog_Data *cfdata;
cfdata = data;
if (!cfdata) return;
indx = e_widget_ilist_selected_get(cfdata->gui.fallback_list);
count = e_widget_ilist_count(cfdata->gui.fallback_list);
e_widget_ilist_remove_num(cfdata->gui.fallback_list, indx);
e_widget_ilist_go(cfdata->gui.fallback_list);
e_widget_ilist_selected_set(cfdata->gui.fallback_list, indx);
if (count == 1)
{
_list_select_num(cfdata, -1);
}
}
static void _button_fallback_cb_up(void *data, void *obj)
{
E_Config_Dialog_Data *cfdata;
int idx_sel;
const char *label_sel;
const char *label_rep;
cfdata = data;
if (!cfdata) return;
idx_sel = e_widget_ilist_selected_get(cfdata->gui.fallback_list);
label_sel = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, idx_sel);
label_rep = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, idx_sel - 1);
e_widget_ilist_nth_label_set(cfdata->gui.fallback_list, idx_sel - 1, label_sel);
e_widget_ilist_nth_label_set(cfdata->gui.fallback_list, idx_sel, label_rep);
e_widget_ilist_selected_set(cfdata->gui.fallback_list, idx_sel - 1);
}
static void _button_fallback_cb_down(void *data, void *obj)
{
E_Config_Dialog_Data *cfdata;
int idx_sel;
const char *label_sel;
const char *label_rep;
cfdata = data;
if (!cfdata) return;
idx_sel = e_widget_ilist_selected_get(cfdata->gui.fallback_list);
label_sel = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, idx_sel);
label_rep = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, idx_sel + 1);
e_widget_ilist_nth_label_set(cfdata->gui.fallback_list, idx_sel + 1, label_sel);
e_widget_ilist_nth_label_set(cfdata->gui.fallback_list, idx_sel, label_rep);
e_widget_ilist_selected_set(cfdata->gui.fallback_list, idx_sel + 1);
}
static void _list_select_num(E_Config_Dialog_Data *cfdata, int indx)
{
int count;
/* Disable selecting the list while we are disabled */
if (indx >= 0 && !cfdata->cur_fallbacks_enabled) return;
count = e_widget_ilist_count(cfdata->gui.fallback_list);
if (count == 0 || indx < 0)
{
e_widget_disabled_set(cfdata->gui.fallback_remove, 1);
}
else
{
e_widget_disabled_set(cfdata->gui.fallback_remove, 0);
}
if (count == 1 || indx < 0)
{
e_widget_disabled_set(cfdata->gui.fallback_up, 1);
e_widget_disabled_set(cfdata->gui.fallback_down, 1);
}
else if (indx == 0)
{
e_widget_disabled_set(cfdata->gui.fallback_up, 1);
e_widget_disabled_set(cfdata->gui.fallback_down, 0);
}
else if (indx + 1 == count)
{
e_widget_disabled_set(cfdata->gui.fallback_up, 0);
e_widget_disabled_set(cfdata->gui.fallback_down, 1);
}
else
{
e_widget_disabled_set(cfdata->gui.fallback_up, 0);
e_widget_disabled_set(cfdata->gui.fallback_down, 0);
}
}

View File

@ -166,6 +166,24 @@ e_widget_ilist_remove_label(Evas_Object *obj, const char *label)
e_ilist_remove_label(wd->o_ilist, label);
}
EAPI const char *
e_widget_ilist_nth_label_get(Evas_Object *obj, int n)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
return e_ilist_nth_label_get(wd->o_ilist, n);
}
EAPI void
e_widget_ilist_nth_label_set(Evas_Object *obj, int n, const char *label)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
e_ilist_nth_label_set(wd->o_ilist, n, label);
}
EAPI int
e_widget_ilist_count(Evas_Object *obj)
{
@ -179,8 +197,9 @@ EAPI void
e_widget_ilist_clear(Evas_Object *obj)
{
E_Widget_Data *wd;
/*
int mw, mh, vw, vh, w, h;
*/
wd = e_widget_data_get(obj);
e_ilist_clear(wd->o_ilist);

View File

@ -16,6 +16,8 @@ EAPI int e_widget_ilist_selected_get(Evas_Object *obj);
EAPI const char *e_widget_ilist_selected_label_get(Evas_Object *obj);
EAPI void e_widget_ilist_remove_num(Evas_Object *obj, int n);
EAPI void e_widget_ilist_remove_label(Evas_Object *obj, const char *label);
EAPI const char *e_widget_ilist_nth_label_get(Evas_Object *obj, int n);
EAPI void e_widget_ilist_nth_label_set(Evas_Object *obj, int n, const char *label);
EAPI int e_widget_ilist_count(Evas_Object *obj);
EAPI void e_widget_ilist_clear(Evas_Object *obj);