forked from enlightenment/efl
Add a method to disable a toolbar item.
Add a couple of blank lines in elm_toolbar.c to separate variables from code in certain functions. Set first button in Toolbar Test to be disabled (just so Elm develops can see how it looks & acts) NB: The theme/colors for disabled text may need/warrant work. Not sure how Elementary people want the disabled text to look, so I used the disabled text colors from elm_button for now. (Hopefully the code here is acceptable ;) If not, please let me know what needs fixing) SVN revision: 41990
This commit is contained in:
parent
34ac5a43c6
commit
d4528aa391
|
@ -5068,6 +5068,18 @@ collections {
|
|||
inherit: "default" 0.0;
|
||||
visible: 0;
|
||||
}
|
||||
description { state: "disabled" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color: 0 0 0 128;
|
||||
color3: 0 0 0 0;
|
||||
}
|
||||
description { state: "disabled_visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color: 0 0 0 128;
|
||||
color3: 0 0 0 0;
|
||||
visible: 1;
|
||||
text.min: 1 1;
|
||||
}
|
||||
}
|
||||
part { name: "bg";
|
||||
mouse_events: 0;
|
||||
|
@ -5086,6 +5098,11 @@ collections {
|
|||
visible: 1;
|
||||
color: 255 255 255 255;
|
||||
}
|
||||
description { state: "disabled" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 0;
|
||||
color: 255 255 255 0;
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.icon";
|
||||
type: SWALLOW;
|
||||
|
@ -5135,6 +5152,23 @@ collections {
|
|||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
text.min: 1 1;
|
||||
}
|
||||
description { state: "disabled" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color: 0 0 0 128;
|
||||
color3: 0 0 0 0;
|
||||
}
|
||||
description { state: "disabled_visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color: 0 0 0 128;
|
||||
color3: 0 0 0 0;
|
||||
visible: 1;
|
||||
text.min: 1 1;
|
||||
}
|
||||
}
|
||||
part { name: "event";
|
||||
type: RECT;
|
||||
|
@ -5169,6 +5203,44 @@ collections {
|
|||
source: "event";
|
||||
action: SIGNAL_EMIT "elm,action,click" "elm";
|
||||
}
|
||||
program { name: "disable";
|
||||
signal: "elm,state,disabled";
|
||||
source: "elm";
|
||||
action: STATE_SET "disabled" 0.0;
|
||||
target: "label2";
|
||||
target: "bg";
|
||||
after: "disable_text";
|
||||
}
|
||||
program { name: "disable_text";
|
||||
script {
|
||||
new st[31];
|
||||
new Float:vl;
|
||||
get_state(PART:"elm.text", st, 30, vl);
|
||||
if (!strcmp(st, "visible"))
|
||||
set_state(PART:"elm.text", "disabled_visible", 0.0);
|
||||
else
|
||||
set_state(PART:"elm.text", "disabled", 0.0);
|
||||
}
|
||||
}
|
||||
program { name: "enable";
|
||||
signal: "elm,state,enabled";
|
||||
source: "elm";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "label2";
|
||||
target: "bg";
|
||||
after: "enable_text";
|
||||
}
|
||||
program { name: "enable_text";
|
||||
script {
|
||||
new st[31];
|
||||
new Float:vl;
|
||||
get_state(PART:"elm.text", st, 30, vl);
|
||||
if (!strcmp(st, "disabled_visible"))
|
||||
set_state(PART:"elm.text", "visible", 0.0);
|
||||
else
|
||||
set_state(PART:"elm.text", "default", 0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@ test_toolbar(void *data, Evas_Object *obj, void *event_info)
|
|||
{
|
||||
Evas_Object *win, *bg, *bx, *tb, *ic, *ph;
|
||||
Evas_Object *ph1, *ph2, *ph3, *ph4;
|
||||
Elm_Toolbar_Item *item;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
win = elm_win_add(NULL, "toolbar", ELM_WIN_BASIC);
|
||||
|
@ -71,7 +72,8 @@ test_toolbar(void *data, Evas_Object *obj, void *event_info)
|
|||
ic = elm_icon_add(win);
|
||||
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
|
||||
elm_icon_file_set(ic, buf, NULL);
|
||||
elm_toolbar_item_add(tb, ic, "Hello", tb_1, ph1);
|
||||
item = elm_toolbar_item_add(tb, ic, "Hello", tb_1, ph1);
|
||||
elm_toolbar_item_disabled_set(item, EINA_TRUE);
|
||||
|
||||
ic = elm_icon_add(win);
|
||||
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
|
||||
|
|
|
@ -550,6 +550,8 @@ extern "C" {
|
|||
EAPI const char *elm_toolbar_item_label_get(Elm_Toolbar_Item *item);
|
||||
EAPI void elm_toolbar_item_del(Elm_Toolbar_Item *item);
|
||||
EAPI void elm_toolbar_item_select(Elm_Toolbar_Item *item);
|
||||
EAPI Eina_Bool elm_toolbar_item_disabled_get(Elm_Toolbar_Item *item);
|
||||
EAPI void elm_toolbar_item_disabled_set(Elm_Toolbar_Item *item, Eina_Bool disabled);
|
||||
EAPI void elm_toolbar_scrollable_set(Evas_Object *obj, Eina_Bool scrollable);
|
||||
/* smart callbacks called:
|
||||
* "clicked" - when the user clicks on a toolbar item and becomes selected
|
||||
|
|
|
@ -20,8 +20,12 @@ struct _Elm_Toolbar_Item
|
|||
void (*func) (void *data, Evas_Object *obj, void *event_info);
|
||||
const void *data;
|
||||
Eina_Bool selected : 1;
|
||||
Eina_Bool disabled : 1;
|
||||
};
|
||||
|
||||
static void _item_show(Elm_Toolbar_Item *it);
|
||||
static void _item_select(Elm_Toolbar_Item *it);
|
||||
static void _item_disable(Elm_Toolbar_Item *it, Eina_Bool disabled);
|
||||
static void _del_hook(Evas_Object *obj);
|
||||
static void _theme_hook(Evas_Object *obj);
|
||||
static void _sizing_eval(Evas_Object *obj);
|
||||
|
@ -44,7 +48,8 @@ _item_select(Elm_Toolbar_Item *it)
|
|||
Widget_Data *wd = elm_widget_data_get(it->obj);
|
||||
Evas_Object *obj2;
|
||||
const Eina_List *l;
|
||||
if (it->selected) return;
|
||||
|
||||
if ((it->selected) || (it->disabled)) return;
|
||||
EINA_LIST_FOREACH(wd->items, l, it2)
|
||||
{
|
||||
if (it2->selected)
|
||||
|
@ -62,11 +67,26 @@ _item_select(Elm_Toolbar_Item *it)
|
|||
evas_object_smart_callback_call(obj2, "clicked", it);
|
||||
}
|
||||
|
||||
static void
|
||||
_item_disable(Elm_Toolbar_Item *it, Eina_Bool disabled)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(it->obj);
|
||||
|
||||
if (it->disabled == disabled) return;
|
||||
it->disabled = disabled;
|
||||
if (it->disabled)
|
||||
edje_object_signal_emit(it->base, "elm,state,disabled", "elm");
|
||||
else
|
||||
edje_object_signal_emit(it->base, "elm,state,enabled", "elm");
|
||||
// _item_show(it);
|
||||
}
|
||||
|
||||
static void
|
||||
_del_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
Elm_Toolbar_Item *it;
|
||||
|
||||
EINA_LIST_FREE(wd->items, it)
|
||||
{
|
||||
eina_stringshare_del(it->label);
|
||||
|
@ -90,8 +110,10 @@ _theme_hook(Evas_Object *obj)
|
|||
EINA_LIST_FOREACH(wd->items, l, it)
|
||||
{
|
||||
edje_object_scale_set(it->base, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
if (it->selected)
|
||||
if (it->selected)
|
||||
edje_object_signal_emit(it->base, "elm,state,selected", "elm");
|
||||
if (it->disabled)
|
||||
edje_object_signal_emit(it->base, "elm,state,disabled", "elm");
|
||||
_elm_theme_set(it->base, "toolbar", "item", style);
|
||||
if (it->icon)
|
||||
{
|
||||
|
@ -217,6 +239,7 @@ elm_toolbar_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, voi
|
|||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
Evas_Coord mw, mh;
|
||||
Elm_Toolbar_Item *it = calloc(1, sizeof(Elm_Toolbar_Item));
|
||||
|
||||
if (!it) return NULL;
|
||||
wd->items = eina_list_append(wd->items, it);
|
||||
it->obj = obj;
|
||||
|
@ -272,6 +295,7 @@ elm_toolbar_item_del(Elm_Toolbar_Item *it)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(it->obj);
|
||||
Evas_Object *obj2 = it->obj;
|
||||
|
||||
wd->items = eina_list_remove(wd->items, it);
|
||||
eina_stringshare_del(it->label);
|
||||
if (it->icon) evas_object_del(it->icon);
|
||||
|
@ -286,10 +310,24 @@ elm_toolbar_item_select(Elm_Toolbar_Item *item)
|
|||
_item_select(item);
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
elm_toolbar_item_disabled_get(Elm_Toolbar_Item *item)
|
||||
{
|
||||
if (!item) return EINA_FALSE;
|
||||
return item->disabled;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_toolbar_item_disabled_set(Elm_Toolbar_Item *item, Eina_Bool disabled)
|
||||
{
|
||||
_item_disable(item, disabled);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_toolbar_scrollable_set(Evas_Object *obj, Eina_Bool scrollable)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
|
||||
wd->scrollable = scrollable;
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue