From: Enlightenment S. <no-...@en...> - 2009-03-30 14:00:04
|
Log: * Add a new menu api call : EAPI void e_menu_item_disabled_set(E_Menu_Item *mi, int disable) Setting the menu item 'disabled' will gray it out and will make it unselectable. Author: davemds Date: 2009-03-30 06:59:56 -0700 (Mon, 30 Mar 2009) New Revision: 39802 Modified: trunk/e/data/themes/default.edc trunk/e/src/bin/e_menu.c trunk/e/src/bin/e_menu.h Modified: trunk/e/data/themes/default.edc =================================================================== --- trunk/e/data/themes/default.edc 2009-03-30 13:34:32 UTC (rev 39801) +++ trunk/e/data/themes/default.edc 2009-03-30 13:59:56 UTC (rev 39802) @@ -5944,11 +5944,21 @@ } /* this group holds a menu icon. here we just use it to add padding around - * the icon */ + * the icon. And to gray-out when disabled */ group { name: "e/widgets/menu/default/icon"; parts { + part { name: "clip"; + type: RECT; + description { state: "default" 0.0; + color: 255 255 255 255; + } + description { state: "disabled" 0.0; + color: 255 255 255 128; + } + } part { name: "e.swallow.content"; /* icon is swallowed here */ type: SWALLOW; + clip_to: "clip"; description { state: "default" 0.0; rel1 { @@ -5962,6 +5972,20 @@ } } } + programs { + program { name: "enable"; /* enable */ + signal: "e,state,enable"; + source: "e"; + action: STATE_SET "default" 0.0; + target: "clip"; + } + program { name: "disable"; /* disable */ + signal: "e,state,disable"; + source: "e"; + action: STATE_SET "disabled" 0.0; + target: "clip"; + } + } } /* this is the actual text label for the menu item */ @@ -5972,8 +5996,7 @@ effect: SOFT_SHADOW; mouse_events: 0; scale: 1; - description { - state: "default" 0.0; + description { state: "default" 0.0; rel1 { relative: 0.0 0.0; offset: 1 -1; @@ -5999,6 +6022,11 @@ color3: 0 0 0 64; color_class: "menu_item"; } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 110 110 110 255; + color3: 0 0 0 0; + } } } programs { @@ -6016,6 +6044,20 @@ transition: LINEAR 0.3; target: "e.text.label"; } + program { name: "enable"; /* enable */ + signal: "e,state,enable"; + source: "e"; + action: STATE_SET "default" 0.0; + transition: LINEAR 0.3; + target: "e.text.label"; + } + program { name: "disable"; /* disable */ + signal: "e,state,disable"; + source: "e"; + action: STATE_SET "disabled" 0.0; + //transition: LINEAR 0.3; + target: "e.text.label"; + } } } Modified: trunk/e/src/bin/e_menu.c =================================================================== --- trunk/e/src/bin/e_menu.c 2009-03-30 13:34:32 UTC (rev 39801) +++ trunk/e/src/bin/e_menu.c 2009-03-30 13:59:56 UTC (rev 39802) @@ -818,6 +818,7 @@ { E_Menu_Item *pmi; + if (mi->disable) return; pmi = _e_menu_item_active_get(); if (mi == pmi) return; if (pmi) e_menu_item_active_set(pmi, 0); @@ -860,6 +861,36 @@ } EAPI void +e_menu_item_disabled_set(E_Menu_Item *mi, int disable) +{ + E_OBJECT_CHECK(mi); + E_OBJECT_TYPE_CHECK(mi, E_MENU_ITEM_TYPE); + if (mi->separator) return; + if ((disable)) + { + if (mi->active) e_menu_item_active_set(mi, 0); + mi->disable = 1; + if (mi->icon_bg_object) + edje_object_signal_emit(mi->icon_bg_object, "e,state,disable", "e"); + if (mi->label_object) + edje_object_signal_emit(mi->label_object, "e,state,disable", "e"); + if (mi->toggle_object) + edje_object_signal_emit(mi->toggle_object, "e,state,disable", "e"); + } + else + { + mi->disable = 0; + if (mi->icon_bg_object) + edje_object_signal_emit(mi->icon_bg_object, "e,state,enable", "e"); + if (mi->label_object) + edje_object_signal_emit(mi->label_object, "e,state,enable", "e"); + if (mi->toggle_object) + edje_object_signal_emit(mi->toggle_object, "e,state,enable", "e"); + } +} + + +EAPI void e_menu_idler_before(void) { /* when e goes "idle" this gets called so leave all our hard work till */ @@ -1354,6 +1385,7 @@ } if (mi->active) e_menu_item_active_set(mi, 1); if (mi->toggle) e_menu_item_toggle_set(mi, 1); + if (mi->disable) e_menu_item_disabled_set(mi, 1); } static void @@ -1922,7 +1954,7 @@ else ll = ll->next; mi = ll->data; - while (mi->separator) + while (mi->separator || mi->disable) { if (!(ll->next)) ll = mi->menu->items; @@ -1956,7 +1988,7 @@ else ll = ll->prev; mi = ll->data; - while (mi->separator) + while (mi->separator || mi->disable) { if (!(ll->prev)) ll = eina_list_last(ll); Modified: trunk/e/src/bin/e_menu.h =================================================================== --- trunk/e/src/bin/e_menu.h 2009-03-30 13:34:32 UTC (rev 39801) +++ trunk/e/src/bin/e_menu.h 2009-03-30 13:59:56 UTC (rev 39802) @@ -146,6 +146,7 @@ unsigned char toggle : 1; unsigned char changed : 1; unsigned char active : 1; + unsigned char disable : 1; }; struct _E_Menu_Category_Callback @@ -201,6 +202,7 @@ EAPI void e_menu_item_submenu_post_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data); EAPI void e_menu_item_drag_callback_set(E_Menu_Item *mi, void (*func) (void *data, E_Menu *m, E_Menu_Item *mi), void *data); EAPI void e_menu_item_active_set(E_Menu_Item *mi, int active); +EAPI void e_menu_item_disabled_set(E_Menu_Item *mi, int disable); EAPI void e_menu_idler_before(void); |