edje: Move external_param_set to a efl_part API
This adds a new class: Efl.Canvas.Layout.External. I hate this long name... This class represents an external part, and for now only supports param_set/get as well as param_type_get. For now param_type_get() still returns an Edje_External_Param_Type and not another more generic type. TODO: enumerate choices, return object, return content
This commit is contained in:
parent
f9a95528b6
commit
554dd9facf
|
@ -12,7 +12,9 @@ edje_eolian_priv_files = \
|
||||||
lib/edje/efl_canvas_layout_internal.eo \
|
lib/edje/efl_canvas_layout_internal.eo \
|
||||||
lib/edje/efl_canvas_layout_internal_box.eo \
|
lib/edje/efl_canvas_layout_internal_box.eo \
|
||||||
lib/edje/efl_canvas_layout_internal_table.eo \
|
lib/edje/efl_canvas_layout_internal_table.eo \
|
||||||
lib/edje/efl_canvas_layout_internal_swallow.eo
|
lib/edje/efl_canvas_layout_internal_swallow.eo \
|
||||||
|
lib/edje/efl_canvas_layout_external.eo \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
edje_eolian_c = $(edje_eolian_files:%.eo=%.eo.c)
|
edje_eolian_c = $(edje_eolian_files:%.eo=%.eo.c)
|
||||||
edje_eolian_h = $(edje_eolian_files:%.eo=%.eo.h) \
|
edje_eolian_h = $(edje_eolian_files:%.eo=%.eo.h) \
|
||||||
|
@ -95,6 +97,7 @@ lib/edje/edje_var.c \
|
||||||
lib/edje/edje_signal.c \
|
lib/edje/edje_signal.c \
|
||||||
lib/edje/edje_part.c \
|
lib/edje/edje_part.c \
|
||||||
lib/edje/edje_part_helper.h \
|
lib/edje/edje_part_helper.h \
|
||||||
|
lib/edje/edje_part_external.c \
|
||||||
lib/edje/edje_part_swallow.c \
|
lib/edje/edje_part_swallow.c \
|
||||||
lib/edje/edje_part_table.c \
|
lib/edje/edje_part_table.c \
|
||||||
lib/edje/edje_part_box.c
|
lib/edje/edje_part_box.c
|
||||||
|
|
|
@ -69,30 +69,43 @@ static Eina_Bool
|
||||||
_timer_cb(void *data)
|
_timer_cb(void *data)
|
||||||
{
|
{
|
||||||
Evas_Object *edje = data;
|
Evas_Object *edje = data;
|
||||||
Evas_Object *bt1, *bt2, *bt3, *pb1, *pb2, *pb3, *pb4, *pb5, *pb6, *pb7;
|
Evas_Object *bt1, *bt2, *bt3, *pb1, *pb2, *pb3, *pb5;
|
||||||
|
Edje_External_Param param;
|
||||||
double progress;
|
double progress;
|
||||||
|
Eina_Value v;
|
||||||
|
|
||||||
pb1 = edje_object_part_external_object_get(edje, "ext_pbar1");
|
pb1 = edje_object_part_external_object_get(edje, "ext_pbar1");
|
||||||
pb2 = edje_object_part_external_object_get(edje, "ext_pbar2");
|
pb2 = edje_object_part_external_object_get(edje, "ext_pbar2");
|
||||||
pb3 = edje_object_part_external_object_get(edje, "ext_pbar3");
|
pb3 = edje_object_part_external_object_get(edje, "ext_pbar3");
|
||||||
pb4 = edje_object_part_external_object_get(edje, "ext_pbar4");
|
|
||||||
pb6 = edje_object_part_external_object_get(edje, "ext_pbar6");
|
|
||||||
progress = elm_progressbar_value_get(pb1) + 0.0123;
|
progress = elm_progressbar_value_get(pb1) + 0.0123;
|
||||||
|
|
||||||
elm_progressbar_value_set(pb1, progress);
|
elm_progressbar_value_set(pb1, progress);
|
||||||
elm_progressbar_value_set(pb2, progress);
|
elm_progressbar_value_set(pb2, progress);
|
||||||
elm_progressbar_value_set(pb3, progress);
|
elm_progressbar_value_set(pb3, progress);
|
||||||
elm_progressbar_value_set(pb4, progress);
|
|
||||||
elm_progressbar_value_set(pb6, progress);
|
/* Test external parameter API */
|
||||||
|
param.name = "value";
|
||||||
|
param.type = EDJE_EXTERNAL_PARAM_TYPE_DOUBLE;
|
||||||
|
param.d = progress;
|
||||||
|
edje_object_part_external_param_set(edje, "ext_pbar6", ¶m);
|
||||||
|
|
||||||
|
param.name = "pulsing";
|
||||||
|
param.type = EDJE_EXTERNAL_PARAM_TYPE_BOOL;
|
||||||
|
param.i = EINA_TRUE;
|
||||||
|
edje_object_part_external_param_set(edje, "ext_pbar7", ¶m);
|
||||||
|
|
||||||
|
/* Test EO API for external parameters */
|
||||||
|
eina_value_setup(&v, EINA_VALUE_TYPE_DOUBLE);
|
||||||
|
eina_value_set(&v, progress);
|
||||||
|
efl_canvas_layout_external_param_set(efl_part(edje, "ext_pbar4"), "value", &v);
|
||||||
|
eina_value_flush(&v);
|
||||||
|
|
||||||
if (progress < 1.0)
|
if (progress < 1.0)
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
|
|
||||||
pb5 = edje_object_part_external_object_get(edje, "ext_pbar5");
|
pb5 = edje_object_part_external_object_get(edje, "ext_pbar5");
|
||||||
pb7 = edje_object_part_external_object_get(edje, "ext_pbar7");
|
|
||||||
elm_progressbar_pulse(pb2, EINA_FALSE);
|
elm_progressbar_pulse(pb2, EINA_FALSE);
|
||||||
elm_progressbar_pulse(pb5, EINA_FALSE);
|
elm_progressbar_pulse(pb5, EINA_FALSE);
|
||||||
elm_progressbar_pulse(pb7, EINA_FALSE);
|
|
||||||
|
|
||||||
bt1 = edje_object_part_external_object_get(edje, "ext_button1");
|
bt1 = edje_object_part_external_object_get(edje, "ext_button1");
|
||||||
bt2 = edje_object_part_external_object_get(edje, "ext_button2");
|
bt2 = edje_object_part_external_object_get(edje, "ext_button2");
|
||||||
|
@ -101,6 +114,17 @@ _timer_cb(void *data)
|
||||||
elm_object_disabled_set(bt2, EINA_FALSE);
|
elm_object_disabled_set(bt2, EINA_FALSE);
|
||||||
elm_object_disabled_set(bt3, EINA_FALSE);
|
elm_object_disabled_set(bt3, EINA_FALSE);
|
||||||
|
|
||||||
|
/* Test external parameter API */
|
||||||
|
param.name = "value";
|
||||||
|
param.type = EDJE_EXTERNAL_PARAM_TYPE_DOUBLE;
|
||||||
|
param.d = 0.0;
|
||||||
|
edje_object_part_external_param_set(edje, "ext_pbar6", ¶m);
|
||||||
|
|
||||||
|
param.name = "pulsing";
|
||||||
|
param.type = EDJE_EXTERNAL_PARAM_TYPE_BOOL;
|
||||||
|
param.i = EINA_FALSE;
|
||||||
|
edje_object_part_external_param_set(edje, "ext_pbar7", ¶m);
|
||||||
|
|
||||||
return ECORE_CALLBACK_CANCEL;
|
return ECORE_CALLBACK_CANCEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,8 +132,11 @@ static void
|
||||||
_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Evas_Object *edje = data;
|
Evas_Object *edje = data;
|
||||||
Evas_Object *bt1, *bt2, *bt3, *pb1, *pb2, *pb3, *pb4, *pb5, *pb6, *pb7;
|
Evas_Object *bt1, *bt2, *bt3, *pb1, *pb2, *pb3, *pb5;
|
||||||
|
Edje_External_Param param;
|
||||||
|
Eina_Value v;
|
||||||
|
|
||||||
|
/* Test direct API calls on embedded objects */
|
||||||
bt1 = edje_object_part_external_object_get(edje, "ext_button1");
|
bt1 = edje_object_part_external_object_get(edje, "ext_button1");
|
||||||
bt2 = edje_object_part_external_object_get(edje, "ext_button2");
|
bt2 = edje_object_part_external_object_get(edje, "ext_button2");
|
||||||
bt3 = edje_object_part_external_object_get(edje, "ext_button3");
|
bt3 = edje_object_part_external_object_get(edje, "ext_button3");
|
||||||
|
@ -120,19 +147,30 @@ _bt_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUS
|
||||||
pb1 = edje_object_part_external_object_get(edje, "ext_pbar1");
|
pb1 = edje_object_part_external_object_get(edje, "ext_pbar1");
|
||||||
pb2 = edje_object_part_external_object_get(edje, "ext_pbar2");
|
pb2 = edje_object_part_external_object_get(edje, "ext_pbar2");
|
||||||
pb3 = edje_object_part_external_object_get(edje, "ext_pbar3");
|
pb3 = edje_object_part_external_object_get(edje, "ext_pbar3");
|
||||||
pb4 = edje_object_part_external_object_get(edje, "ext_pbar4");
|
|
||||||
pb5 = edje_object_part_external_object_get(edje, "ext_pbar5");
|
pb5 = edje_object_part_external_object_get(edje, "ext_pbar5");
|
||||||
pb6 = edje_object_part_external_object_get(edje, "ext_pbar6");
|
|
||||||
pb7 = edje_object_part_external_object_get(edje, "ext_pbar7");
|
|
||||||
|
|
||||||
elm_progressbar_value_set(pb1, 0.0);
|
elm_progressbar_value_set(pb1, 0.0);
|
||||||
elm_progressbar_value_set(pb3, 0.0);
|
elm_progressbar_value_set(pb3, 0.0);
|
||||||
elm_progressbar_value_set(pb4, 0.0);
|
|
||||||
elm_progressbar_value_set(pb6, 0.0);
|
|
||||||
|
|
||||||
elm_progressbar_pulse(pb2, EINA_TRUE);
|
elm_progressbar_pulse(pb2, EINA_TRUE);
|
||||||
elm_progressbar_pulse(pb5, EINA_TRUE);
|
elm_progressbar_pulse(pb5, EINA_TRUE);
|
||||||
elm_progressbar_pulse(pb7, EINA_TRUE);
|
|
||||||
|
/* Test external parameter API */
|
||||||
|
param.name = "value";
|
||||||
|
param.type = EDJE_EXTERNAL_PARAM_TYPE_DOUBLE;
|
||||||
|
param.d = 0.0;
|
||||||
|
edje_object_part_external_param_set(edje, "ext_pbar6", ¶m);
|
||||||
|
|
||||||
|
param.name = "pulsing";
|
||||||
|
param.type = EDJE_EXTERNAL_PARAM_TYPE_BOOL;
|
||||||
|
param.i = EINA_TRUE;
|
||||||
|
edje_object_part_external_param_set(edje, "ext_pbar7", ¶m);
|
||||||
|
|
||||||
|
/* Test EO API for external parameters */
|
||||||
|
eina_value_setup(&v, EINA_VALUE_TYPE_DOUBLE);
|
||||||
|
eina_value_set(&v, 0.0);
|
||||||
|
efl_canvas_layout_external_param_set(efl_part(edje, "ext_pbar4"), "value", &v);
|
||||||
|
eina_value_flush(&v);
|
||||||
|
|
||||||
ecore_timer_add(0.1, _timer_cb, edje);
|
ecore_timer_add(0.1, _timer_cb, edje);
|
||||||
}
|
}
|
||||||
|
|
|
@ -368,6 +368,19 @@ typedef enum _Edje_External_Param_Flags
|
||||||
EDJE_EXTERNAL_PARAM_FLAGS_STATE) /**< Convenience flag that sets property as GET, SET and STATE. */
|
EDJE_EXTERNAL_PARAM_FLAGS_STATE) /**< Convenience flag that sets property as GET, SET and STATE. */
|
||||||
} Edje_External_Param_Flags;
|
} Edje_External_Param_Flags;
|
||||||
|
|
||||||
|
/** Struct that holds parameters for parts of type EXTERNAL.
|
||||||
|
*/
|
||||||
|
typedef struct _Edje_External_Param
|
||||||
|
{
|
||||||
|
const char *name; /**< The name of the parameter. */
|
||||||
|
Edje_External_Param_Type type; /**< The type of the parameter. This defines
|
||||||
|
* which of the next three variables holds the
|
||||||
|
* value for it. */
|
||||||
|
int i; /**< Used by both integer and boolean */
|
||||||
|
double d; /**< Used by double */
|
||||||
|
const char *s; /**< Used by both string and choice */
|
||||||
|
} Edje_External_Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Converts type identifier to string nicer representation.
|
* @brief Converts type identifier to string nicer representation.
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,3 +2,9 @@
|
||||||
|
|
||||||
#include "edje_object.eo.h"
|
#include "edje_object.eo.h"
|
||||||
#include "edje_edit.eo.h"
|
#include "edje_edit.eo.h"
|
||||||
|
|
||||||
|
#include "efl_canvas_layout_internal.eo.h"
|
||||||
|
#include "efl_canvas_layout_internal_box.eo.h"
|
||||||
|
#include "efl_canvas_layout_internal_table.eo.h"
|
||||||
|
#include "efl_canvas_layout_internal_swallow.eo.h"
|
||||||
|
#include "efl_canvas_layout_external.eo.h"
|
||||||
|
|
|
@ -402,6 +402,84 @@ EAPI void edje_object_message_signal_process(Edje_Object *obj);
|
||||||
*/
|
*/
|
||||||
EAPI void edje_object_message_signal_recursive_process(Edje_Object *obj);
|
EAPI void edje_object_message_signal_recursive_process(Edje_Object *obj);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup Edje_Object
|
||||||
|
*
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Facility to query the type of the given parameter of the given part.
|
||||||
|
*
|
||||||
|
* @param[in] part The part name
|
||||||
|
* @param[in] param The parameter name to use
|
||||||
|
*
|
||||||
|
* @return @ref EDJE_EXTERNAL_PARAM_TYPE_MAX on errors, or another value from
|
||||||
|
* @ref Edje_External_Param_Type on success.
|
||||||
|
*
|
||||||
|
* @ingroup Edje_Object
|
||||||
|
*/
|
||||||
|
EAPI Edje_External_Param_Type edje_object_part_external_param_type_get(const Edje_Object *obj, const char *part, const char * param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sets the parameter for the external part.
|
||||||
|
*
|
||||||
|
* Parts of type external may carry extra properties that have meanings defined
|
||||||
|
* by the external plugin. For instance, it may be a string that defines a
|
||||||
|
* button label and setting this property will change that label on the fly.
|
||||||
|
*
|
||||||
|
* @note external parts have parameters set when they change states. Those
|
||||||
|
* parameters will never be changed by this function. The interpretation of how
|
||||||
|
* state_set parameters and param_set will interact is up to the external
|
||||||
|
* plugin.
|
||||||
|
*
|
||||||
|
* @note this function will not check if parameter value is valid using
|
||||||
|
* #Edje_External_Param_Info minimum, maximum, valid choices and others.
|
||||||
|
* However these should be checked by the underlying implementation provided by
|
||||||
|
* the external plugin. This is done for performance reasons.
|
||||||
|
*
|
||||||
|
* @param[in] part The part name
|
||||||
|
* @param[in] param The parameter details, including its name, type and actual
|
||||||
|
* value. This pointer should be valid, and the parameter must exist in
|
||||||
|
* #Edje_External_Type.parameters_info, with the exact type, otherwise the
|
||||||
|
* operation will fail and @c false will be returned.
|
||||||
|
*
|
||||||
|
* @return @c true if everything went fine, @c false on errors.
|
||||||
|
*
|
||||||
|
* @ingroup Edje_Object
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool edje_object_part_external_param_set(Edje_Object *obj, const char *part, const Edje_External_Param *param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the parameter for the external part.
|
||||||
|
*
|
||||||
|
* Parts of type external may carry extra properties that have meanings defined
|
||||||
|
* by the external plugin. For instance, it may be a string that defines a
|
||||||
|
* button label. This property can be modified by state parameters, by explicit
|
||||||
|
* calls to edje_object_part_external_param_set() or getting the actual object
|
||||||
|
* with edje_object_part_external_object_get() and calling native functions.
|
||||||
|
*
|
||||||
|
* This function asks the external plugin what is the current value,
|
||||||
|
* independent on how it was set.
|
||||||
|
*
|
||||||
|
* @param[in] part The part name
|
||||||
|
* @param[out] param The parameter details. It is used as both input and output
|
||||||
|
* variable. This pointer should be valid, and the parameter must exist in
|
||||||
|
* #Edje_External_Type.parameters_info, with the exact type, otherwise the
|
||||||
|
* operation will fail and @c false will be returned.
|
||||||
|
*
|
||||||
|
* @return @c true if everything went fine and param members are filled with
|
||||||
|
* information, @c false on errors and param member values are not set or
|
||||||
|
* valid.
|
||||||
|
*
|
||||||
|
* @ingroup Edje_Object
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool edje_object_part_external_param_get(const Edje_Object *obj, const char *part, Edje_External_Param *param);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -56,14 +56,12 @@ _edje_object_part_external_object_get(Eo *obj EINA_UNUSED, Edje *ed, const char
|
||||||
return rp->typedata.swallow->swallowed_object;
|
return rp->typedata.swallow->swallowed_object;
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN Eina_Bool
|
Eina_Bool
|
||||||
_edje_object_part_external_param_set(Eo *obj, Edje *ed, const char *part, const Edje_External_Param *param)
|
_edje_object_part_external_param_set(Edje *ed, const char *part, const Edje_External_Param *param)
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
|
|
||||||
if ((!param) || (!param->name)) return EINA_FALSE;
|
if (!ed || !part || !param || !param->name) return EINA_FALSE;
|
||||||
|
|
||||||
if ((!ed) || (!part)) return EINA_FALSE;
|
|
||||||
|
|
||||||
rp = _edje_real_part_recursive_get(&ed, (char *)part);
|
rp = _edje_real_part_recursive_get(&ed, (char *)part);
|
||||||
if (!rp)
|
if (!rp)
|
||||||
|
@ -72,19 +70,17 @@ _edje_object_part_external_param_set(Eo *obj, Edje *ed, const char *part, const
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_edje_external_param_set(obj, rp, param))
|
if (_edje_external_param_set(ed->obj, rp, param))
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN Eina_Bool
|
Eina_Bool
|
||||||
_edje_object_part_external_param_get(Eo *obj, Edje *ed, const char *part, Edje_External_Param *param)
|
_edje_object_part_external_param_get(Edje *ed, const char *part, Edje_External_Param *param)
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
|
|
||||||
if ((!param) || (!param->name)) return EINA_FALSE;
|
if (!ed || !part || !param || !param->name) return EINA_FALSE;
|
||||||
|
|
||||||
if ((!ed) || (!part)) return EINA_FALSE;
|
|
||||||
|
|
||||||
rp = _edje_real_part_recursive_get(&ed, (char *)part);
|
rp = _edje_real_part_recursive_get(&ed, (char *)part);
|
||||||
if (!rp)
|
if (!rp)
|
||||||
|
@ -93,7 +89,7 @@ _edje_object_part_external_param_get(Eo *obj, Edje *ed, const char *part, Edje_E
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _edje_external_param_get(obj, rp, param);
|
return _edje_external_param_get(ed->obj, rp, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN Evas_Object *
|
EOLIAN Evas_Object *
|
||||||
|
@ -117,8 +113,8 @@ _edje_object_part_external_content_get(Eo *obj EINA_UNUSED, Edje *ed, const char
|
||||||
return _edje_external_content_get(rp->typedata.swallow->swallowed_object, content);
|
return _edje_external_content_get(rp->typedata.swallow->swallowed_object, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN Edje_External_Param_Type
|
Edje_External_Param_Type
|
||||||
_edje_object_part_external_param_type_get(Eo *obj, Edje *ed, const char *part, const char *param)
|
_edje_object_part_external_param_type_get(Edje *ed, const char *part, const char *param)
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
Edje_External_Type *type;
|
Edje_External_Type *type;
|
||||||
|
@ -137,7 +133,7 @@ _edje_object_part_external_param_type_get(Eo *obj, Edje *ed, const char *part, c
|
||||||
type = evas_object_data_get(rp->typedata.swallow->swallowed_object, "Edje_External_Type");
|
type = evas_object_data_get(rp->typedata.swallow->swallowed_object, "Edje_External_Type");
|
||||||
if (!type)
|
if (!type)
|
||||||
{
|
{
|
||||||
ERR("no external type for object %p", obj);
|
ERR("no external type for object %p", ed->obj);
|
||||||
return EDJE_EXTERNAL_PARAM_TYPE_MAX;
|
return EDJE_EXTERNAL_PARAM_TYPE_MAX;
|
||||||
}
|
}
|
||||||
if (!type->parameters_info)
|
if (!type->parameters_info)
|
||||||
|
|
|
@ -60,3 +60,61 @@ edje_object_message_signal_recursive_process(Edje_Object *obj)
|
||||||
{
|
{
|
||||||
edje_obj_message_signal_process(obj, EINA_TRUE);
|
edje_obj_message_signal_process(obj, EINA_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
edje_object_part_external_param_set(Eo *obj, const char *part, const Edje_External_Param *param)
|
||||||
|
{
|
||||||
|
Edje *ed = _edje_fetch(obj);
|
||||||
|
|
||||||
|
if (!ed || !param || !part) return EINA_FALSE;
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
/* validate EO API - disable for performance */
|
||||||
|
Eina_Value *v;
|
||||||
|
Eina_Bool ok;
|
||||||
|
|
||||||
|
switch (param->type)
|
||||||
|
{
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_INT:
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_BOOL:
|
||||||
|
v = eina_value_new(EINA_VALUE_TYPE_INT);
|
||||||
|
eina_value_set(v, param->i);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_DOUBLE:
|
||||||
|
v = eina_value_new(EINA_VALUE_TYPE_DOUBLE);
|
||||||
|
eina_value_set(v, param->d);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_STRING:
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_CHOICE:
|
||||||
|
v = eina_value_new(EINA_VALUE_TYPE_STRING);
|
||||||
|
eina_value_set(v, param->s);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ok = efl_canvas_layout_external_param_set(efl_part(obj, part), param->name, v);
|
||||||
|
eina_value_free(v);
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
|
||||||
|
#else
|
||||||
|
return _edje_object_part_external_param_set(ed, part, param);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
edje_object_part_external_param_get(const Eo *obj, const char *part, Edje_External_Param *param)
|
||||||
|
{
|
||||||
|
Edje *ed = _edje_fetch(obj);
|
||||||
|
return _edje_object_part_external_param_get(ed, part, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Edje_External_Param_Type
|
||||||
|
edje_object_part_external_param_type_get(const Eo *obj, const char *part, const char *param)
|
||||||
|
{
|
||||||
|
Edje *ed = _edje_fetch(obj);
|
||||||
|
return _edje_object_part_external_param_type_get(ed, part, param);
|
||||||
|
}
|
||||||
|
|
|
@ -1006,19 +1006,6 @@ class Edje.Object (Efl.Canvas.Group.Clipped, Efl.File, Efl.Container, Efl.Part,
|
||||||
@in dy: double; [[The y step]]
|
@in dy: double; [[The y step]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@property part_external_param_type {
|
|
||||||
get {
|
|
||||||
[[Facility to query the type of the given parameter of the given part.]]
|
|
||||||
return: Edje.External.Param_Type(Edje.External.Param_Type.max); [[
|
|
||||||
@Edje.External.Param_Type.max on errors, or another value
|
|
||||||
from @Edje.External.Param_Type on success.
|
|
||||||
]]
|
|
||||||
}
|
|
||||||
keys {
|
|
||||||
part: string; [[The part name]]
|
|
||||||
param: string; [[The parameter name to use]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@property part_external_object {
|
@property part_external_object {
|
||||||
get {
|
get {
|
||||||
[[Gets the object created by this external part.
|
[[Gets the object created by this external part.
|
||||||
|
@ -1053,66 +1040,6 @@ class Edje.Object (Efl.Canvas.Group.Clipped, Efl.File, Efl.Container, Efl.Part,
|
||||||
content: string; [[A string identifying which content from the EXTERNAL to get]]
|
content: string; [[A string identifying which content from the EXTERNAL to get]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@property part_external_param {
|
|
||||||
set {
|
|
||||||
[[Sets the parameter for the external part.
|
|
||||||
|
|
||||||
Parts of type external may carry extra properties that have
|
|
||||||
meanings defined by the external plugin. For instance, it may be a
|
|
||||||
string that defines a button label and setting this property will
|
|
||||||
change that label on the fly.
|
|
||||||
|
|
||||||
Note: external parts have parameters set when they change
|
|
||||||
states. Those parameters will never be changed by this
|
|
||||||
function. The interpretation of how state_set parameters and
|
|
||||||
param_set will interact is up to the external plugin.
|
|
||||||
|
|
||||||
Note: this function will not check if parameter value is valid
|
|
||||||
using #Edje_External_Param_Info minimum, maximum, valid
|
|
||||||
choices and others. However these should be checked by the
|
|
||||||
underlying implementation provided by the external
|
|
||||||
plugin. This is done for performance reasons.]]
|
|
||||||
|
|
||||||
return: bool; [[$true if everything went fine, $false on errors.]]
|
|
||||||
values {
|
|
||||||
param: ptr(const(Edje.External.Param)); [[The parameter details, including its name, type and
|
|
||||||
actual value. This pointer should be valid, and the
|
|
||||||
parameter must exist in
|
|
||||||
#Edje_External_Type.parameters_info, with the exact type,
|
|
||||||
otherwise the operation will fail and $false will be
|
|
||||||
returned.]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
get {
|
|
||||||
[[Gets the parameter for the external part.
|
|
||||||
|
|
||||||
Parts of type external may carry extra properties that have
|
|
||||||
meanings defined by the external plugin. For instance, it may be a
|
|
||||||
string that defines a button label. This property can be modified by
|
|
||||||
state parameters, by explicit calls to
|
|
||||||
edje_object_part_external_param_set() or getting the actual object
|
|
||||||
with edje_object_part_external_object_get() and calling native
|
|
||||||
functions.
|
|
||||||
|
|
||||||
This function asks the external plugin what is the current value,
|
|
||||||
independent on how it was set.]]
|
|
||||||
|
|
||||||
return: bool; [[$true if everything went fine and param members
|
|
||||||
are filled with information, $false on errors and
|
|
||||||
param member values are not set or valid.]]
|
|
||||||
values {
|
|
||||||
param: Edje.External.Param; [[The parameter details. It is used as both input and
|
|
||||||
output variable. This pointer should be valid, and the
|
|
||||||
parameter must exist in
|
|
||||||
#Edje_External_Type.parameters_info, with the exact type,
|
|
||||||
otherwise the operation will fail and $false will be
|
|
||||||
returned.]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
keys {
|
|
||||||
part: string; [[The part name]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@property text_change_cb {
|
@property text_change_cb {
|
||||||
set {
|
set {
|
||||||
[[Sets the object text callback.
|
[[Sets the object text callback.
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
PROXY_INIT(box)
|
PROXY_INIT(box)
|
||||||
PROXY_INIT(table)
|
PROXY_INIT(table)
|
||||||
PROXY_INIT(swallow)
|
PROXY_INIT(swallow)
|
||||||
|
PROXY_INIT(external)
|
||||||
|
|
||||||
void
|
void
|
||||||
_edje_internal_proxy_shutdown(void)
|
_edje_internal_proxy_shutdown(void)
|
||||||
|
@ -12,6 +13,7 @@ _edje_internal_proxy_shutdown(void)
|
||||||
_box_shutdown();
|
_box_shutdown();
|
||||||
_table_shutdown();
|
_table_shutdown();
|
||||||
_swallow_shutdown();
|
_swallow_shutdown();
|
||||||
|
_external_shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -0,0 +1,126 @@
|
||||||
|
#include "edje_private.h"
|
||||||
|
#include "edje_part_helper.h"
|
||||||
|
|
||||||
|
#define MY_CLASS EFL_CANVAS_LAYOUT_EXTERNAL_CLASS
|
||||||
|
|
||||||
|
PROXY_IMPLEMENTATION(external, EXTERNAL)
|
||||||
|
#undef PROXY_IMPLEMENTATION
|
||||||
|
|
||||||
|
EOLIAN static Eina_Bool
|
||||||
|
_efl_canvas_layout_external_external_param_set(Eo *obj, void *_pd EINA_UNUSED,
|
||||||
|
const char *name, const Eina_Value *value)
|
||||||
|
{
|
||||||
|
Edje_External_Param_Type type;
|
||||||
|
Edje_External_Param param = {};
|
||||||
|
const Eina_Value_Type *vtype;
|
||||||
|
|
||||||
|
PROXY_DATA_GET(obj, pd);
|
||||||
|
type = _edje_object_part_external_param_type_get(pd->ed, pd->part, name);
|
||||||
|
|
||||||
|
param.name = name;
|
||||||
|
param.type = type;
|
||||||
|
vtype = eina_value_type_get(value);
|
||||||
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_INT:
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_BOOL:
|
||||||
|
if (vtype == EINA_VALUE_TYPE_INT)
|
||||||
|
eina_value_get(value, ¶m.i);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Eina_Value v2;
|
||||||
|
|
||||||
|
eina_value_setup(&v2, EINA_VALUE_TYPE_INT);
|
||||||
|
eina_value_convert(value, &v2);
|
||||||
|
eina_value_get(&v2, ¶m.i);
|
||||||
|
eina_value_flush(&v2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_DOUBLE:
|
||||||
|
if (vtype == EINA_VALUE_TYPE_DOUBLE)
|
||||||
|
eina_value_get(value, ¶m.d);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Eina_Value v2;
|
||||||
|
|
||||||
|
eina_value_setup(&v2, EINA_VALUE_TYPE_DOUBLE);
|
||||||
|
eina_value_convert(value, &v2);
|
||||||
|
eina_value_get(&v2, ¶m.d);
|
||||||
|
eina_value_flush(&v2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_STRING:
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_CHOICE:
|
||||||
|
// Should we use eina_value_to_string() here and not complain?
|
||||||
|
if ((vtype != EINA_VALUE_TYPE_STRING) && (vtype != EINA_VALUE_TYPE_STRINGSHARE))
|
||||||
|
{
|
||||||
|
ERR("External parameter '%s' of object '%p' expects a string, "
|
||||||
|
"got a '%s'.", name, pd->ed->obj, eina_value_type_name_get(vtype));
|
||||||
|
RETURN_VAL(EINA_FALSE);
|
||||||
|
}
|
||||||
|
eina_value_get(value, ¶m.s);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
ERR("Unsupported type for parameter '%s' of object '%p'", name, pd->ed->obj);
|
||||||
|
RETURN_VAL(EINA_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_VAL(_edje_object_part_external_param_set(pd->ed, pd->part, ¶m));
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static Eina_Value *
|
||||||
|
_efl_canvas_layout_external_external_param_get(Eo *obj, void *_pd EINA_UNUSED,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
Edje_External_Param param = {};
|
||||||
|
Eina_Value *v;
|
||||||
|
|
||||||
|
PROXY_DATA_GET(obj, pd);
|
||||||
|
|
||||||
|
param.name = name;
|
||||||
|
param.type = _edje_object_part_external_param_type_get(pd->ed, pd->part, name);
|
||||||
|
if (param.type == EDJE_EXTERNAL_PARAM_TYPE_MAX)
|
||||||
|
RETURN_VAL(NULL);
|
||||||
|
if (!_edje_object_part_external_param_get(pd->ed, pd->part, ¶m))
|
||||||
|
RETURN_VAL(NULL);
|
||||||
|
|
||||||
|
switch (param.type)
|
||||||
|
{
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_INT:
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_BOOL:
|
||||||
|
v = eina_value_new(EINA_VALUE_TYPE_INT);
|
||||||
|
eina_value_set(v, param.i);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_DOUBLE:
|
||||||
|
v = eina_value_new(EINA_VALUE_TYPE_DOUBLE);
|
||||||
|
eina_value_set(v, param.d);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_STRING:
|
||||||
|
case EDJE_EXTERNAL_PARAM_TYPE_CHOICE:
|
||||||
|
v = eina_value_new(EINA_VALUE_TYPE_STRING);
|
||||||
|
eina_value_set(v, param.s);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
ERR("Unsupported type for parameter '%s' of object '%p'", name, pd->ed->obj);
|
||||||
|
RETURN_VAL(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_VAL(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static Edje_External_Param_Type
|
||||||
|
_efl_canvas_layout_external_external_param_type_get(Eo *obj, void *_pd EINA_UNUSED,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
PROXY_DATA_GET(obj, pd);
|
||||||
|
RETURN_VAL(_edje_object_part_external_param_type_get(pd->ed, pd->part, name));
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "efl_canvas_layout_external.eo.c"
|
|
@ -3120,6 +3120,12 @@ Eo *_edje_swallow_internal_proxy_get(Edje_Object *obj, Edje *ed, Edje_Real_Part
|
||||||
Efl_Gfx *_edje_efl_container_content_get(Edje *ed, const char *part);
|
Efl_Gfx *_edje_efl_container_content_get(Edje *ed, const char *part);
|
||||||
Eina_Bool _edje_efl_container_content_set(Edje *ed, const char *part, Efl_Gfx *obj_swallow);
|
Eina_Bool _edje_efl_container_content_set(Edje *ed, const char *part, Efl_Gfx *obj_swallow);
|
||||||
|
|
||||||
|
/* part containers: external */
|
||||||
|
Eo *_edje_external_internal_proxy_get(Edje_Object *obj, Edje *ed, Edje_Real_Part *rp);
|
||||||
|
Eina_Bool _edje_object_part_external_param_set(Edje *ed, const char *part, const Edje_External_Param *param);
|
||||||
|
Eina_Bool _edje_object_part_external_param_get(Edje *ed, const char *part, Edje_External_Param *param);
|
||||||
|
Edje_External_Param_Type _edje_object_part_external_param_type_get(Edje *ed, const char *part, const char *param);
|
||||||
|
|
||||||
void _edje_internal_proxy_shutdown(void);
|
void _edje_internal_proxy_shutdown(void);
|
||||||
|
|
||||||
// Svg loader
|
// Svg loader
|
||||||
|
|
|
@ -113,31 +113,17 @@ enum Edje.Input_Panel.Layout {
|
||||||
@since 1.19]]
|
@since 1.19]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME: This probably needs to be a more generic enum with a shorter name */
|
||||||
enum Edje.External.Param_Type {
|
enum Edje.External.Param_Type {
|
||||||
[[The possible types the parameters of an EXTERNAL part can be.]]
|
[[The possible types the parameters of an EXTERNAL part can be.]]
|
||||||
|
|
||||||
int, [[Parameter value is an integer.]]
|
int, [[Parameter value is an integer.]]
|
||||||
double, [[Parameter value is a double.]]
|
double, [[Parameter value is a double.]]
|
||||||
string, [[Parameter value is a string.]]
|
string, [[Parameter value is a string.]]
|
||||||
bool, [[Parameter value is boolean.]]
|
bool, [[Parameter value is boolean.]]
|
||||||
choice, [[Parameter value is one of a set of
|
choice, [[Parameter value is one of a set of predefined string choices.]]
|
||||||
predefined string choices.]]
|
|
||||||
max [[Sentinel value to indicate last enum field during iteration]]
|
max [[Sentinel value to indicate last enum field during iteration]]
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Edje.External.Param {
|
|
||||||
[[Struct that holds parameters for parts of type EXTERNAL.]]
|
|
||||||
name: string; [[The name of the parameter.]]
|
|
||||||
type: Edje.External.Param_Type; [[The type of the parameter. This defines
|
|
||||||
which of the next three variables holds
|
|
||||||
the value for it.]]
|
|
||||||
// XXX these could be in a union, but eet doesn't support them (or does it?)
|
|
||||||
i: int; [[Used by both integer and boolean]]
|
|
||||||
d: double; [[Used by double]]
|
|
||||||
s: string; [[Used by both string and choice]]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
struct Edje.Perspective; [[Perspective info for maps inside edje objects]]
|
struct Edje.Perspective; [[Perspective info for maps inside edje objects]]
|
||||||
|
|
||||||
enum Edje.Color_Class.Mode {
|
enum Edje.Color_Class.Mode {
|
||||||
|
|
|
@ -3689,6 +3689,8 @@ _edje_object_efl_part_part(Eo *obj, Edje *ed, const char *part)
|
||||||
return _edje_table_internal_proxy_get(obj, ed, rp);
|
return _edje_table_internal_proxy_get(obj, ed, rp);
|
||||||
else if (rp->part->type == EDJE_PART_TYPE_SWALLOW)
|
else if (rp->part->type == EDJE_PART_TYPE_SWALLOW)
|
||||||
return _edje_swallow_internal_proxy_get(obj, ed, rp);
|
return _edje_swallow_internal_proxy_get(obj, ed, rp);
|
||||||
|
else if (rp->part->type == EDJE_PART_TYPE_EXTERNAL)
|
||||||
|
return _edje_external_internal_proxy_get(obj, ed, rp);
|
||||||
else return NULL; /* FIXME/TODO: text & others (color, ...) */
|
else return NULL; /* FIXME/TODO: text & others (color, ...) */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
import edje_types;
|
||||||
|
|
||||||
|
class Efl.Canvas.Layout.External (Efl.Canvas.Layout_Internal)
|
||||||
|
{
|
||||||
|
[[Class representing an external part in Edje layouts.
|
||||||
|
|
||||||
|
@since 1.20
|
||||||
|
]]
|
||||||
|
data: null;
|
||||||
|
methods {
|
||||||
|
@property external_param {
|
||||||
|
[[This represents a parameter for an external object.
|
||||||
|
|
||||||
|
Parts of type external may carry extra properties that have
|
||||||
|
meanings defined by the external plugin. For instance, it may be a
|
||||||
|
string that defines a button label and setting this property will
|
||||||
|
change that label on the fly.
|
||||||
|
|
||||||
|
Parameters have a $name and a value which can be a boolean, an
|
||||||
|
integer, a floating-point number or a string. Some string parameters
|
||||||
|
only accept a certain set of values, like an enum.
|
||||||
|
]]
|
||||||
|
set {
|
||||||
|
[[Sets the parameter for the external part.
|
||||||
|
|
||||||
|
Note: external parts have parameters set when they change
|
||||||
|
states. Those parameters will never be changed by this
|
||||||
|
function. The interpretation of how state_set parameters and
|
||||||
|
param_set will interact is up to the external plugin.
|
||||||
|
|
||||||
|
Note: this function will not check if parameter value is valid
|
||||||
|
using minimum, maximum, valid choices and others. However these
|
||||||
|
should be checked by the underlying implementation provided by
|
||||||
|
the external plugin. This is done for performance reasons.
|
||||||
|
]]
|
||||||
|
return: bool; [[May return $false in case of failure.]]
|
||||||
|
}
|
||||||
|
get {
|
||||||
|
[[Gets the parameter for the external part.
|
||||||
|
|
||||||
|
This function asks the external plugin what is the current value,
|
||||||
|
independent on how it was set. This may return $null in case of
|
||||||
|
failure (eg. no such parameter exists).
|
||||||
|
]]
|
||||||
|
values {
|
||||||
|
value: own(ptr(generic_value)); [[A pointer to a generic value
|
||||||
|
holding a bool, int, float or string.]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
keys {
|
||||||
|
name: string; [[The name of the parameter.]]
|
||||||
|
}
|
||||||
|
values {
|
||||||
|
value: const(ptr(generic_value)); [[A pointer to a generic value
|
||||||
|
holding a bool, int, float or string.]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@property external_param_type {
|
||||||
|
[[The type of a given parameter for this part (read only).]]
|
||||||
|
get {}
|
||||||
|
keys {
|
||||||
|
name: string; [[The name of the parameter.]]
|
||||||
|
}
|
||||||
|
values {
|
||||||
|
/* FIXME: Type name with "Edje" is no good! */
|
||||||
|
type: Edje.External.Param_Type; [[The type of parameter.]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
external_param_choices {
|
||||||
|
[[Enumerates the possible values a choice-type parameter supports.]]
|
||||||
|
return: own(free(iterator<string>, eina_iterator_free));
|
||||||
|
[[An iterator over the accepted string values. Returns $null if
|
||||||
|
the parameter is not a choice parameter.]]
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* FIXME: Rename to Efl.Canvas.Layout.Part */
|
||||||
class Efl.Canvas.Layout_Internal (Efl.Object, Efl.Gfx)
|
class Efl.Canvas.Layout_Internal (Efl.Object, Efl.Gfx)
|
||||||
{
|
{
|
||||||
[[Common class for part proxy objects for $Efl.Canvas.Layout.
|
[[Common class for part proxy objects for $Efl.Canvas.Layout.
|
||||||
|
|
Loading…
Reference in New Issue