1 #ifdef HAVE_CONFIG_H 2 # include "elementary_config.h" 3 #endif 4 #include "Elementary.h" 5 #include "elm_priv.h" 6 7 #undef CRI 8 #undef ERR 9 #undef WRN 10 #undef INF 11 #undef DBG 12 13 #define CRI(...) 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_elm_layout_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 EINA_UNUSED) \ 58 { \ 59 return name; \ 60 } \ 61 \ 62 static void \ 63 _external_##type_name##_state_set(void *data EINA_UNUSED, Evas_Object *obj, const void *from_params, const void *to_params, float pos EINA_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 EINA_UNUSED, Evas_Object *obj EINA_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 EINA_UNUSED, Evas *evas EINA_UNUSED, Evas_Object *edje, const Eina_List *params EINA_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 EINA_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) 136