forked from enlightenment/efl
136 lines
7.2 KiB
C
136 lines
7.2 KiB
C
#ifdef HAVE_CONFIG_H
|
|
# include "elementary_config.h"
|
|
#endif
|
|
#include "Elementary.h"
|
|
#include "elm_priv.h"
|
|
|
|
#undef CRI
|
|
#undef ERR
|
|
#undef WRN
|
|
#undef INF
|
|
#undef DBG
|
|
|
|
#define CRI(...) EINA_LOG_DOM_CRIT(_elm_ext_log_dom, __VA_ARGS__)
|
|
#define ERR(...) EINA_LOG_DOM_ERR (_elm_ext_log_dom, __VA_ARGS__)
|
|
#define WRN(...) EINA_LOG_DOM_WARN(_elm_ext_log_dom, __VA_ARGS__)
|
|
#define INF(...) EINA_LOG_DOM_INFO(_elm_ext_log_dom, __VA_ARGS__)
|
|
#define DBG(...) EINA_LOG_DOM_DBG (_elm_ext_log_dom, __VA_ARGS__)
|
|
|
|
typedef struct {
|
|
const char *style;
|
|
Eina_Bool disabled:1;
|
|
Eina_Bool disabled_exists:1;
|
|
} Elm_Params;
|
|
|
|
extern int _elm_ext_log_dom;
|
|
|
|
void external_elm_init(void);
|
|
void external_signal(void *data, Evas_Object *obj, const char *signal, const char *source);
|
|
void external_signals_proxy(Evas_Object *obj, Evas_Object *edje, const char *part_name);
|
|
const char *external_translate(void *data, const char *orig);
|
|
void external_common_params_free(void *params);
|
|
void *external_common_params_parse_internal(size_t params_size, void *data, Evas_Object *obj, const Eina_List *params);
|
|
Evas_Object *external_common_param_icon_get(Evas_Object *obj, const Edje_External_Param *param);
|
|
Evas_Object *external_common_param_elm_layout_get(Evas_Object *obj, const Edje_External_Param *p);
|
|
void external_common_icon_param_parse(Evas_Object **icon, Evas_Object *obj, const Eina_List *params);
|
|
Eina_Bool external_common_param_get(void *data, const Evas_Object *obj, Edje_External_Param *param);
|
|
Eina_Bool external_common_param_set(void *data, Evas_Object *obj, const Edje_External_Param *param);
|
|
void external_common_state_set(void *data, Evas_Object *obj, const void *from_params, const void *to_params, float pos);
|
|
void external_common_params_parse(void *mem, void *data, Evas_Object *obj, const Eina_List *params);
|
|
|
|
#define DEFINE_EXTERNAL_TYPE(type_name, name) \
|
|
static Eina_Bool \
|
|
_external_##type_name##_param_set(void *data, Evas_Object *obj, const Edje_External_Param *param) \
|
|
{ \
|
|
if (external_common_param_set(data, obj, param)) \
|
|
return EINA_TRUE; \
|
|
return external_##type_name##_param_set(data, obj, param); \
|
|
} \
|
|
static Eina_Bool \
|
|
_external_##type_name##_param_get(void *data, const Evas_Object *obj, Edje_External_Param *param) \
|
|
{ \
|
|
if (external_common_param_get(data, obj, param)) \
|
|
return EINA_TRUE; \
|
|
return external_##type_name##_param_get(data, obj, param); \
|
|
} \
|
|
static const char * \
|
|
external_##type_name##_label_get(void *data EINA_UNUSED) \
|
|
{ \
|
|
return name; \
|
|
} \
|
|
\
|
|
static void \
|
|
_external_##type_name##_state_set(void *data EINA_UNUSED, Evas_Object *obj, const void *from_params, const void *to_params, float pos EINA_UNUSED) \
|
|
{ \
|
|
external_common_state_set(data, obj, from_params, to_params, pos); \
|
|
external_##type_name##_state_set(data, obj, from_params, to_params, pos); \
|
|
} \
|
|
\
|
|
static void * \
|
|
_external_##type_name##_params_parse(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const Eina_List *params) \
|
|
{ \
|
|
void *mem = external_##type_name##_params_parse(data, obj, params); \
|
|
external_common_params_parse(mem, data, obj, params); \
|
|
return mem; \
|
|
} \
|
|
static void \
|
|
_external_##type_name##_params_free(void *params) \
|
|
{ \
|
|
external_common_params_free(params); \
|
|
external_##type_name##_params_free(params); \
|
|
} \
|
|
\
|
|
const Edje_External_Type external_##type_name##_type = {\
|
|
.abi_version = EDJE_EXTERNAL_TYPE_ABI_VERSION, \
|
|
.module = "elm", \
|
|
.module_name = "Elementary", \
|
|
.add = external_##type_name##_add, \
|
|
.state_set = _external_##type_name##_state_set, \
|
|
.signal_emit = external_signal, \
|
|
.param_set = _external_##type_name##_param_set, \
|
|
.param_get = _external_##type_name##_param_get, \
|
|
.params_parse = _external_##type_name##_params_parse,\
|
|
.params_free = _external_##type_name##_params_free, \
|
|
.label_get = external_##type_name##_label_get, \
|
|
.content_get = external_##type_name##_content_get, \
|
|
.description_get = NULL, \
|
|
.icon_add = external_##type_name##_icon_add, \
|
|
.preview_add = NULL, \
|
|
.translate = external_translate, \
|
|
.parameters_info = external_##type_name##_params, \
|
|
.data = NULL \
|
|
};
|
|
|
|
#define DEFINE_EXTERNAL_TYPE_SIMPLE(type_name, name) \
|
|
static Evas_Object * \
|
|
external_##type_name##_add(void *data EINA_UNUSED, Evas *evas EINA_UNUSED, Evas_Object *edje, const Eina_List *params EINA_UNUSED, const char *part_name) \
|
|
{ \
|
|
Evas_Object *parent, *obj; \
|
|
external_elm_init(); \
|
|
parent = elm_widget_parent_widget_get(edje); \
|
|
if (!parent) parent = edje; \
|
|
obj = elm_##type_name##_add(parent); \
|
|
external_signals_proxy(obj, edje, part_name); \
|
|
return obj; \
|
|
} \
|
|
\
|
|
DEFINE_EXTERNAL_TYPE(type_name, name)
|
|
|
|
#define DEFINE_EXTERNAL_ICON_ADD(type_name, name) \
|
|
Evas_Object * \
|
|
external_##type_name##_icon_add(void *data EINA_UNUSED, Evas *e) { \
|
|
Evas_Object *ic; \
|
|
int w = 20, h = 10; \
|
|
\
|
|
ic = edje_object_add(e); \
|
|
edje_object_file_set(ic, PACKAGE_DATA_DIR"/edje_externals/icons.edj", "ico_"name);\
|
|
evas_object_size_hint_min_set(ic, w, h); \
|
|
evas_object_size_hint_max_set(ic, w, h); \
|
|
\
|
|
return ic; \
|
|
}
|
|
|
|
#define DEFINE_EXTERNAL_COMMON_PARAMS \
|
|
EDJE_EXTERNAL_PARAM_INFO_STRING_DEFAULT("style", "default"), \
|
|
EDJE_EXTERNAL_PARAM_INFO_BOOL_DEFAULT("disabled", EINA_FALSE)
|