ctxpopup: implement Efl.Orientation interface functions

Also move horizontal_set/get as legacy APIs.
This commit is contained in:
Amitesh Singh 2016-04-12 17:39:50 +05:30
parent febfa6de9d
commit 736fb9d498
4 changed files with 56 additions and 32 deletions

View 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)
{

View 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"

View 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;

View 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;