Introducing item_disabled_set() for elm_lists, too.
authorGustavo Lima Chaves <glima@profusion.mobi>
Tue, 19 Oct 2010 20:19:57 +0000 (20:19 +0000)
committerGustavo Lima Chaves <glima@profusion.mobi>
Tue, 19 Oct 2010 20:19:57 +0000 (20:19 +0000)
I'm not implementing the default list themes WRT to it right now,
though, I get back to it soon (just implementing it for a new widget).

SVN revision: 53641

src/lib/Elementary.h.in
src/lib/elm_list.c

index 4dcce59035e6b3f17f1d32afec502c5a818e18ae..6e72ee462e1aed97e49dd5ea8a8214f7cf6e07b8 100644 (file)
@@ -1307,6 +1307,8 @@ extern "C" {
    EAPI const char      *elm_list_item_cursor_style_get(const Elm_List_Item *item);
    EAPI void             elm_list_item_cursor_engine_only_set(Elm_List_Item *item, Eina_Bool engine_only);
    EAPI Eina_Bool        elm_list_item_cursor_engine_only_get(const Elm_List_Item *item);
+   EAPI void             elm_list_item_disabled_set(Elm_List_Item *it, Eina_Bool disabled);
+   EAPI Eina_Bool        elm_list_item_disabled_get(const Elm_List_Item *it);
 
    EAPI void             elm_list_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce);
    EAPI void             elm_list_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v);
index bbb23437ee18aaa1dbb2f3024347ac4cb183e30f..7e27e26b458c64d056e9da599d08b63ab17de108 100644 (file)
@@ -48,6 +48,7 @@ struct _Elm_List_Item
    Ecore_Timer *long_timer;
    Ecore_Timer *swipe_timer;
    Eina_Bool deleted : 1;
+   Eina_Bool disabled : 1;
    Eina_Bool even : 1;
    Eina_Bool is_even : 1;
    Eina_Bool is_separator : 1;
@@ -665,11 +666,20 @@ _long_press(void *data)
    Elm_List_Item *it = data;
    Widget_Data *wd = elm_widget_data_get(it->base.widget);
 
-   if (!wd) return ECORE_CALLBACK_CANCEL;
+   if (!wd)
+     goto end;
+
+   ELM_LIST_ITEM_CHECK_DELETED_RETURN(it, ECORE_CALLBACK_CANCEL);
+
    it->long_timer = NULL;
-   ELM_LIST_ITEM_CHECK_DELETED_RETURN(it, 0);
+
+   if (it->disabled)
+     goto end;
+
    wd->longpressed = EINA_TRUE;
    evas_object_smart_callback_call(it->base.widget, "longpressed", it);
+
+ end:
    return ECORE_CALLBACK_CANCEL;
 }
 
@@ -755,6 +765,9 @@ _mouse_up(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *
         return;
      }
 
+   if (it->disabled)
+     return;
+
    _elm_list_walk(wd); // watch out "return" before unwalk!
 
    if (wd->multi)
@@ -1009,6 +1022,10 @@ _fix_items(Evas_Object *obj)
                  if ((selectraise) && (!strcmp(selectraise, "on")))
                    evas_object_raise(it->base.view);
               }
+             if (it->disabled)
+               edje_object_signal_emit(it->base.view, "elm,state,disabled",
+                                       "elm");
+
             it->fixed = EINA_TRUE;
             it->is_even = it->even;
          }
@@ -2257,3 +2274,50 @@ elm_list_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy
    *policy_h = (Elm_Scroller_Policy) s_policy_h;
    *policy_v = (Elm_Scroller_Policy) s_policy_v;
 }
+
+/**
+ * Sets the disabled/enabled state of a list item.
+ *
+ * A disabled item cannot be selected or unselected. It will also
+ * change its appearance (generally greyed out). This sets the
+ * disabled state (@c EINA_TRUE for disabled, @c EINA_FALSE for
+ * enabled).
+ *
+ * @param it The item
+ * @param disabled The disabled state
+ *
+ * @ingroup List
+ */
+EAPI void
+elm_list_item_disabled_set(Elm_List_Item *it, Eina_Bool disabled)
+{
+   ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
+
+   if (it->disabled == disabled)
+     return;
+
+   it->disabled = !!disabled;
+
+   if (it->disabled)
+     edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm");
+   else
+     edje_object_signal_emit(it->base.view, "elm,state,enabled", "elm");
+}
+
+/**
+ * Get the disabled/enabled state of a list item
+ *
+ * @param it The item
+ * @return The disabled state
+ *
+ * See elm_list_item_disabled_set().
+ *
+ * @ingroup List
+ */
+EAPI Eina_Bool
+elm_list_item_disabled_get(const Elm_List_Item *it)
+{
+   ELM_LIST_ITEM_CHECK_DELETED_RETURN(it, EINA_FALSE);
+
+   return it->disabled;
+}