Merge "[Copy&Paste] remove "Paste" button when CBHM has no item"
[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 typedef struct {
8     const char *style;
9 } Elm_Params;
10
11 void external_elm_init(void);
12 void external_signal(void *data, Evas_Object *obj, const char *signal, const char *source);
13 void external_signals_proxy(Evas_Object *obj, Evas_Object *edje, const char *part_name);
14 const char *external_translate(void *data, const char *orig);
15 void external_common_params_free(void *params);
16 void *external_common_params_parse_internal(size_t params_size, void *data, Evas_Object *obj, const Eina_List *params);
17 Evas_Object *external_common_param_icon_get(Evas_Object *obj, const Edje_External_Param *param);
18 Evas_Object *external_common_param_edje_object_get(Evas_Object *obj, const Edje_External_Param *p);
19 void external_common_icon_param_parse(Evas_Object **icon, Evas_Object *obj, const Eina_List *params);
20 Eina_Bool external_common_param_get(void *data, const Evas_Object *obj, Edje_External_Param *param);
21 Eina_Bool external_common_param_set(void *data, Evas_Object *obj, const Edje_External_Param *param);
22 void external_common_state_set(void *data, Evas_Object *obj, const void *from_params, const void *to_params, float pos);
23 void external_common_params_parse(void *mem, void *data, Evas_Object *obj, const Eina_List *params);
24
25 #define DEFINE_EXTERNAL_TYPE(type_name, name)           \
26 static Eina_Bool                                        \
27 _external_##type_name##_param_set(void *data, Evas_Object *obj, const Edje_External_Param *param) \
28 {                                                       \
29    if (external_common_param_set(data, obj, param))     \
30       return EINA_TRUE;                                 \
31    return external_##type_name##_param_set(data, obj, param); \
32 }                                                       \
33 static Eina_Bool                                        \
34 _external_##type_name##_param_get(void *data, const Evas_Object *obj, Edje_External_Param *param) \
35 {                                                       \
36    if (external_common_param_get(data, obj, param))     \
37       return EINA_TRUE;                                 \
38    return external_##type_name##_param_get(data, obj, param); \
39 }                                                       \
40 static const char *                                     \
41 external_##type_name##_label_get(void *data __UNUSED__) \
42 {                                                       \
43     return name;                                        \
44 }                                                       \
45                                                         \
46 static void                                             \
47 _external_##type_name##_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__) \
48 {                                                       \
49    external_common_state_set(data, obj, from_params, to_params, pos); \
50    external_##type_name##_state_set(data, obj, from_params, to_params, pos); \
51 }                                                       \
52                                                         \
53 static void *                                           \
54 _external_##type_name##_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params) \
55 {                                                       \
56    void *mem = external_##type_name##_params_parse(data, obj, params); \
57    external_common_params_parse(mem, data, obj, params); \
58    return mem;                                          \
59 }                                                       \
60 static void                                             \
61 _external_##type_name##_params_free(void *params)       \
62 {                                                       \
63    external_common_params_free(params);                 \
64    external_##type_name##_params_free(params);          \
65 }                                                       \
66                                                         \
67 const Edje_External_Type external_##type_name##_type = {\
68     .abi_version = EDJE_EXTERNAL_TYPE_ABI_VERSION,      \
69     .module = "elm",                                    \
70     .module_name = "Elementary",                        \
71     .add = external_##type_name##_add,                  \
72     .state_set = _external_##type_name##_state_set,     \
73     .signal_emit = external_signal,                     \
74     .param_set = _external_##type_name##_param_set,     \
75     .param_get = _external_##type_name##_param_get,     \
76     .params_parse = _external_##type_name##_params_parse,\
77     .params_free = _external_##type_name##_params_free, \
78     .label_get = external_##type_name##_label_get,      \
79     .content_get = external_##type_name##_content_get,  \
80     .description_get = NULL,                            \
81     .icon_add = external_##type_name##_icon_add,        \
82     .preview_add = NULL,                                \
83     .translate = external_translate,                    \
84     .parameters_info = external_##type_name##_params,   \
85     .data = NULL                                        \
86 };
87
88 #define DEFINE_EXTERNAL_TYPE_SIMPLE(type_name, name)    \
89 static Evas_Object *                                \
90 external_##type_name##_add(void *data __UNUSED__, Evas *evas __UNUSED__, Evas_Object *edje, const Eina_List *params __UNUSED__, const char *part_name) \
91 {                                                                       \
92    Evas_Object *parent, *obj;                                           \
93    external_elm_init();                                                 \
94    parent = elm_widget_parent_widget_get(edje);                 \
95    if (!parent) parent = edje;                                          \
96    obj = elm_##type_name##_add(parent);                         \
97    external_signals_proxy(obj, edje, part_name);                        \
98    return obj;                                                          \
99 }                                                                       \
100                                                                         \
101 DEFINE_EXTERNAL_TYPE(type_name, name)
102
103 #define DEFINE_EXTERNAL_ICON_ADD(type_name, name)                   \
104 Evas_Object *                                                       \
105 external_##type_name##_icon_add(void *data __UNUSED__, Evas *e) {   \
106    Evas_Object *ic;                                                 \
107    int w = 20, h = 10;                                              \
108                                                                     \
109    ic = edje_object_add(e);                                         \
110    edje_object_file_set(ic, PACKAGE_DATA_DIR"/edje_externals/icons.edj", "ico_"name);\
111    evas_object_size_hint_min_set(ic, w, h);                         \
112    evas_object_size_hint_max_set(ic, w, h);                         \
113                                                                     \
114    return ic;                                                       \
115 }
116
117 #define DEFINE_EXTERNAL_COMMON_PARAMS           \
118     EDJE_EXTERNAL_PARAM_INFO_STRING_DEFAULT("style", "default")