tizen 2.3 release
[framework/uifw/elementary.git] / src / edje_externals / private.h
1 #ifdef HAVE_CONFIG_H
2 # include "elementary_config.h"
3 #endif
4 #include "Elementary.h"
5 #include "elm_priv.h"
6
7 #undef CRITICAL
8 #undef ERR
9 #undef WRN
10 #undef INF
11 #undef DBG
12
13 #define CRITICAL(...) EINA_LOG_DOM_CRIT(_elm_ext_log_dom, __VA_ARGS__)
14 #define ERR(...)      EINA_LOG_DOM_ERR (_elm_ext_log_dom, __VA_ARGS__)
15 #define WRN(...)      EINA_LOG_DOM_WARN(_elm_ext_log_dom, __VA_ARGS__)
16 #define INF(...)      EINA_LOG_DOM_INFO(_elm_ext_log_dom, __VA_ARGS__)
17 #define DBG(...)      EINA_LOG_DOM_DBG (_elm_ext_log_dom, __VA_ARGS__)
18
19 typedef struct {
20     const char *style;
21     Eina_Bool disabled:1;
22     Eina_Bool disabled_exists:1;
23 } Elm_Params;
24
25 extern int _elm_ext_log_dom;
26
27 void external_elm_init(void);
28 void external_signal(void *data, Evas_Object *obj, const char *signal, const char *source);
29 void external_signals_proxy(Evas_Object *obj, Evas_Object *edje, const char *part_name);
30 const char *external_translate(void *data, const char *orig);
31 void external_common_params_free(void *params);
32 void *external_common_params_parse_internal(size_t params_size, void *data, Evas_Object *obj, const Eina_List *params);
33 Evas_Object *external_common_param_icon_get(Evas_Object *obj, const Edje_External_Param *param);
34 Evas_Object *external_common_param_edje_object_get(Evas_Object *obj, const Edje_External_Param *p);
35 void external_common_icon_param_parse(Evas_Object **icon, Evas_Object *obj, const Eina_List *params);
36 Eina_Bool external_common_param_get(void *data, const Evas_Object *obj, Edje_External_Param *param);
37 Eina_Bool external_common_param_set(void *data, Evas_Object *obj, const Edje_External_Param *param);
38 void external_common_state_set(void *data, Evas_Object *obj, const void *from_params, const void *to_params, float pos);
39 void external_common_params_parse(void *mem, void *data, Evas_Object *obj, const Eina_List *params);
40
41 #define DEFINE_EXTERNAL_TYPE(type_name, name)           \
42 static Eina_Bool                                        \
43 _external_##type_name##_param_set(void *data, Evas_Object *obj, const Edje_External_Param *param) \
44 {                                                       \
45    if (external_common_param_set(data, obj, param))     \
46       return EINA_TRUE;                                 \
47    return external_##type_name##_param_set(data, obj, param); \
48 }                                                       \
49 static Eina_Bool                                        \
50 _external_##type_name##_param_get(void *data, const Evas_Object *obj, Edje_External_Param *param) \
51 {                                                       \
52    if (external_common_param_get(data, obj, param))     \
53       return EINA_TRUE;                                 \
54    return external_##type_name##_param_get(data, obj, param); \
55 }                                                       \
56 static const char *                                     \
57 external_##type_name##_label_get(void *data __UNUSED__) \
58 {                                                       \
59     return name;                                        \
60 }                                                       \
61                                                         \
62 static void                                             \
63 _external_##type_name##_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__) \
64 {                                                       \
65    external_common_state_set(data, obj, from_params, to_params, pos); \
66    external_##type_name##_state_set(data, obj, from_params, to_params, pos); \
67 }                                                       \
68                                                         \
69 static void *                                           \
70 _external_##type_name##_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params) \
71 {                                                       \
72    void *mem = external_##type_name##_params_parse(data, obj, params); \
73    external_common_params_parse(mem, data, obj, params); \
74    return mem;                                          \
75 }                                                       \
76 static void                                             \
77 _external_##type_name##_params_free(void *params)       \
78 {                                                       \
79    external_common_params_free(params);                 \
80    external_##type_name##_params_free(params);          \
81 }                                                       \
82                                                         \
83 const Edje_External_Type external_##type_name##_type = {\
84     .abi_version = EDJE_EXTERNAL_TYPE_ABI_VERSION,      \
85     .module = "elm",                                    \
86     .module_name = "Elementary",                        \
87     .add = external_##type_name##_add,                  \
88     .state_set = _external_##type_name##_state_set,     \
89     .signal_emit = external_signal,                     \
90     .param_set = _external_##type_name##_param_set,     \
91     .param_get = _external_##type_name##_param_get,     \
92     .params_parse = _external_##type_name##_params_parse,\
93     .params_free = _external_##type_name##_params_free, \
94     .label_get = external_##type_name##_label_get,      \
95     .content_get = external_##type_name##_content_get,  \
96     .description_get = NULL,                            \
97     .icon_add = external_##type_name##_icon_add,        \
98     .preview_add = NULL,                                \
99     .translate = external_translate,                    \
100     .parameters_info = external_##type_name##_params,   \
101     .data = NULL                                        \
102 };
103
104 #define DEFINE_EXTERNAL_TYPE_SIMPLE(type_name, name)    \
105 static Evas_Object *                                \
106 external_##type_name##_add(void *data __UNUSED__, Evas *evas __UNUSED__, Evas_Object *edje, const Eina_List *params __UNUSED__, const char *part_name) \
107 {                                                                       \
108    Evas_Object *parent, *obj;                                           \
109    external_elm_init();                                                 \
110    parent = elm_widget_parent_widget_get(edje);                 \
111    if (!parent) parent = edje;                                          \
112    obj = elm_##type_name##_add(parent);                         \
113    external_signals_proxy(obj, edje, part_name);                        \
114    return obj;                                                          \
115 }                                                                       \
116                                                                         \
117 DEFINE_EXTERNAL_TYPE(type_name, name)
118
119 #define DEFINE_EXTERNAL_ICON_ADD(type_name, name)                   \
120 Evas_Object *                                                       \
121 external_##type_name##_icon_add(void *data __UNUSED__, Evas *e) {   \
122    Evas_Object *ic;                                                 \
123    int w = 20, h = 10;                                              \
124                                                                     \
125    ic = edje_object_add(e);                                         \
126    edje_object_file_set(ic, PACKAGE_DATA_DIR"/edje_externals/icons.edj", "ico_"name);\
127    evas_object_size_hint_min_set(ic, w, h);                         \
128    evas_object_size_hint_max_set(ic, w, h);                         \
129                                                                     \
130    return ic;                                                       \
131 }
132
133 #define DEFINE_EXTERNAL_COMMON_PARAMS           \
134     EDJE_EXTERNAL_PARAM_INFO_STRING_DEFAULT("style", "default"), \
135     EDJE_EXTERNAL_PARAM_INFO_BOOL_DEFAULT("disabled", EINA_FALSE)