ctxpopup: implement Efl.Orientation interface functions
authorAmitesh Singh <amitesh.sh@samsung.com>
Tue, 12 Apr 2016 12:09:50 +0000 (17:39 +0530)
committerAmitesh Singh <amitesh.sh@samsung.com>
Tue, 12 Apr 2016 12:21:45 +0000 (17:51 +0530)
Also move horizontal_set/get as legacy APIs.

src/lib/elementary/elc_ctxpopup.c
src/lib/elementary/elc_ctxpopup_legacy.h
src/lib/elementary/elm_ctxpopup.eo
src/lib/elementary/elm_widget_ctxpopup.h

index 0faeec6..803f7d7 100644 (file)
@@ -307,7 +307,7 @@ _base_geometry_calc(Evas_Object *obj,
      {
         Evas_Coord length[2];
 
-        if (!sd->horizontal)
+        if (sd->orient == EFL_ORIENT_VERTICAL)
           {
              length[0] = pos.y - hover_area.y;
              length[1] = (hover_area.y + hover_area.h) - pos.y;
@@ -1129,6 +1129,8 @@ _elm_ctxpopup_evas_object_smart_add(Eo *obj, Elm_Ctxpopup_Data *priv)
    priv->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
    priv->auto_hide = EINA_TRUE;
 
+   priv->orient = EFL_ORIENT_VERTICAL;
+
    priv->box = elm_box_add(obj);
    evas_object_size_hint_weight_set
      (priv->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -1238,24 +1240,18 @@ _elm_ctxpopup_clear(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd)
    sd->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
 }
 
-EOLIAN static void
-_elm_ctxpopup_horizontal_set(Eo *obj, Elm_Ctxpopup_Data *sd, Eina_Bool horizontal)
+EAPI void
+elm_ctxpopup_horizontal_set(Evas_Object *obj, Eina_Bool horizontal)
 {
-   sd->horizontal = !!horizontal;
-
-   if (!sd->list) return;
-
-   elm_list_horizontal_set(sd->list, sd->horizontal);
-
-   sd->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
-
-   if (sd->visible) elm_layout_sizing_eval(obj);
+   efl_orientation_set(obj, horizontal ? EFL_ORIENT_HORIZONTAL : EFL_ORIENT_VERTICAL);
 }
 
-EOLIAN static Eina_Bool
-_elm_ctxpopup_horizontal_get(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd)
+EAPI Eina_Bool
+elm_ctxpopup_horizontal_get(Evas_Object *obj)
 {
-   return sd->horizontal;
+   ELM_CTXPOPUP_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
+
+   return sd->orient == EFL_ORIENT_HORIZONTAL ? EINA_TRUE : EINA_FALSE;
 }
 
 static void
@@ -1434,7 +1430,8 @@ _elm_ctxpopup_item_init(Eo *eo_item,
           elm_object_style_set(sd->list, "ctxpopup");
         else elm_object_style_set(sd->list, elm_object_style_get(obj));
         elm_list_mode_set(sd->list, ELM_LIST_EXPAND);
-        elm_list_horizontal_set(sd->list, sd->horizontal);
+        //TODO: use orient interface API on list when implemented
+        elm_list_horizontal_set(sd->list, sd->orient == EFL_ORIENT_VERTICAL ? EINA_FALSE : EINA_TRUE);
         evas_object_event_callback_add
           (sd->list, EVAS_CALLBACK_RESIZE, _list_resize_cb, obj);
         elm_layout_content_set(obj, "default", sd->list);
@@ -1447,6 +1444,25 @@ _elm_ctxpopup_item_init(Eo *eo_item,
    sd->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
 }
 
+EOLIAN static Efl_Orient
+_elm_ctxpopup_efl_orientation_orientation_get(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *pd)
+{
+   return pd->orient;
+}
+
+EOLIAN static void
+_elm_ctxpopup_efl_orientation_orientation_set(Eo *obj, Elm_Ctxpopup_Data *pd, Efl_Orient orient)
+{
+   if (pd->orient == orient) return;
+   if (pd->orient != EFL_ORIENT_HORIZONTAL && pd->orient != EFL_ORIENT_VERTICAL) return;
+
+   pd->orient = orient;
+   //TODO: use orient API on list when its implemented
+   elm_list_horizontal_set(pd->list, pd->orient == EFL_ORIENT_HORIZONTAL ? EINA_TRUE : EINA_FALSE);
+   pd->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
+   if (pd->visible) elm_layout_sizing_eval(obj);
+}
+
 EOLIAN static const Elm_Atspi_Action*
 _elm_ctxpopup_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd EINA_UNUSED)
 {
index cf3ad28..a983799 100644 (file)
@@ -8,5 +8,26 @@
  */
 EAPI Evas_Object                 *elm_ctxpopup_add(Evas_Object *parent);
 
+/**
+ * @brief Change the ctxpopup's orientation to horizontal or vertical.
+ *
+ * @param obj Elm Ctxpopup object
+ * @param horizontal @c EINA_TRUE for horizontal mode, @c EINA_FALSE for vertical.
+ *
+ * @ingroup Elm_Ctxpopup
+ */
+EAPI void                         elm_ctxpopup_horizontal_set(Evas_Object *obj, Eina_Bool horizontal);
+
+/**
+ * @brief Get the value of current ctxpopup object's orientation.
+ *
+ * @param obj Elm Ctxpopup object
+ * return @c EINA_TRUE for horizontal mode, @c EINA_FALSE for vertical.
+ * See also @ref elm_ctxpopup_horizontal_set
+ *
+ * @ingroup Elm_Ctxpopup
+ */
+EAPI Eina_Bool                    elm_ctxpopup_horizontal_get(Evas_Object *obj);
+
 #include "elm_ctxpopup_item.eo.legacy.h"
 #include "elm_ctxpopup.eo.legacy.h"
index 7bc2f3a..33447a2 100644 (file)
@@ -8,24 +8,10 @@ enum Elm.Ctxpopup.Direction
    unknown [[Ctxpopup does not determine it's direction yet.]]
 }
 
-class Elm.Ctxpopup (Elm.Layout, Elm.Interface_Atspi_Widget_Action)
+class Elm.Ctxpopup (Elm.Layout, Elm.Interface_Atspi_Widget_Action, Efl.Orientation)
 {
    eo_prefix: elm_obj_ctxpopup;
    methods {
-      @property horizontal {
-         set {
-            [[Change the ctxpopup's orientation to horizontal or vertical.]]
-         }
-         get {
-            [[Get the value of current ctxpopup object's orientation.
-
-              See also @.horizontal.set.
-            ]]
-         }
-         values {
-            horizontal: bool; [[$true for horizontal mode, $false for vertical.]]
-         }
-      }
       @property auto_hide_disabled {
          set {
             [[Set ctxpopup auto hide mode triggered by ctxpopup policy.
@@ -234,6 +220,7 @@ class Elm.Ctxpopup (Elm.Layout, Elm.Interface_Atspi_Widget_Action)
       Elm.Layout.sizing_eval;
       Elm.Interface_Atspi_Widget_Action.elm_actions.get;
       Elm.Interface_Atspi_Accessible.state_set.get;
+      Efl.Orientation.orientation;
    }
    events {
       dismissed;
index 12bd9ae..25af380 100644 (file)
@@ -53,9 +53,9 @@ struct _Elm_Ctxpopup_Data
 
    Elm_Ctxpopup_Direction dir;
    Elm_Ctxpopup_Direction dir_priority[4];
+   Efl_Orient             orient;
 
    Eina_Bool              list_visible : 1;
-   Eina_Bool              horizontal : 1;
    Eina_Bool              finished : 1;
    Eina_Bool              emitted : 1;
    Eina_Bool              visible : 1;