summaryrefslogtreecommitdiff
path: root/src/edje_external/elementary/private.h
blob: 2f2d3efebf27030591459463e854bfd25f278bf6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#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)