Elementary edje external modules

Widgets: Button, Check, Radio, Slider, Toggle

SVN revision: 44207
This commit is contained in:
Tiago Rezende Campos Falcao 2009-12-06 01:22:54 +00:00
parent a053200ed2
commit edf7f2e22e
11 changed files with 595 additions and 1 deletions

View File

@ -275,6 +275,7 @@ src/lib/Elementary.h
src/bin/Makefile
src/modules/Makefile
src/modules/test_entry/Makefile
src/edje_externals/Makefile
data/Makefile
data/themes/Makefile
data/images/Makefile

View File

@ -1,4 +1,4 @@
AUTOMAKE_OPTIONS = 1.4 foreign
MAINTAINERCLEANFILES = Makefile.in
SUBDIRS = lib bin modules
SUBDIRS = lib bin modules edje_externals

View File

@ -0,0 +1,37 @@
MAINTAINERCLEANFILES = Makefile.in
AM_CPPFLAGS = \
-I. \
-I$(top_builddir) \
-I$(top_srcdir) \
-I$(top_srcdir)/src/lib \
-I$(top_builddir)/src/lib \
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
@ELEMENTARY_CFLAGS@ \
@ELEMENTARY_X_CFLAGS@ \
@ELEMENTARY_FB_CFLAGS@ \
@ELEMENTARY_WIN32_CFLAGS@ \
@ELEMENTARY_WINCE_CFLAGS@ \
@ELEMENTARY_EDBUS_CFLAGS@ \
@ELEMENTARY_EFREET_CFLAGS@
if ELEMENTARY_WINDOWS_BUILD
AM_CPPFLAGS += -DELEMENTARY_BUILD
endif
pkgdir = $(libdir)/edje
pkg_LTLIBRARIES = elm.la
elm_la_SOURCES = private.h \
modules.inc \
elm.c \
elm_button.c \
elm_check.c \
elm_radio.c \
elm_slider.c \
elm_toggle.c
elm_la_LIBADD = $(top_builddir)/src/lib/libelementary.la
elm_la_LDFLAGS = $(all_libraries) -no-undefined @lt_enable_auto_import@ -module -avoid-version -shared -fPIC

View File

@ -0,0 +1,87 @@
#include <Elementary.h>
#include "private.h"
void
external_signal(void *data, Evas_Object *obj, const char *signal, const char *source)
{
printf("External Signal received: '%s' '%s'\n", signal, source);
}
void *
external_common_params_parse_internal(size_t params_size, void *data, Evas_Object *obj, const Eina_List *params)
{
Elm_Params *p;
const Eina_List *l;
Edje_External_Param *param;
if (params_size < sizeof(Elm_Params))
return NULL;
p = calloc(1, params_size);
if (!p)
return NULL;
EINA_LIST_FOREACH(params, l, param)
{
if (!strcmp(param->name, "label"))
p->label = param->s;
if(!strcmp(param->name, "state"))
p->state = param->i;
}
return p;
}
void
external_common_icon_param_parse(Evas_Object **icon, Evas_Object *obj, const Eina_List *params)
{
Edje_External_Param *p;
p = edje_external_param_find(params, "icon");
if (p)
{
Evas_Object *parent = evas_object_smart_parent_get(obj);
const char *file;
edje_object_file_get(parent, &file, NULL);
*icon = elm_icon_add(parent);
if (!elm_icon_file_set(*icon, file, p->s))
elm_icon_standard_set(*icon, p->s);
}
}
void
external_common_params_free(void *params)
{
Elm_Params *p = params;
free(p);
};
#define DEFINE_TYPE(type_name) \
extern const Edje_External_Type external_##type_name##_type;
#include "modules.inc"
#undef DEFINE_TYPE
static Edje_External_Type_Info elm_external_types[] =
{
#define DEFINE_TYPE(type_name) \
{"elm/"#type_name, &external_##type_name##_type},
#include "modules.inc"
#undef DEFINE_TYPE
{NULL, NULL}
};
static Eina_Bool
elm_mod_init(void)
{
edje_external_type_array_register(elm_external_types);
return EINA_TRUE;
}
static void
elm_mod_shutdown(void)
{
edje_external_type_array_unregister(elm_external_types);
}
EINA_MODULE_INIT(elm_mod_init);
EINA_MODULE_SHUTDOWN(elm_mod_shutdown);

View File

@ -0,0 +1,59 @@
#include "private.h"
typedef struct _Elm_Params_Button
{
Elm_Params base;
Evas_Object *icon;
} Elm_Params_Button;
static void
external_button_state_set(void *data, Evas_Object *obj, const void *from_params, const void *to_params, float pos)
{
const Elm_Params_Button *p1 = from_params, *p2 = to_params;
p1 = from_params;
p2 = to_params;
if (!p2)
{
elm_button_label_set(obj, p1->base.label);
elm_button_icon_set(obj, p1->icon);
return;
}
elm_button_label_set(obj, p2->base.label);
elm_button_icon_set(obj, p2->icon);
}
static void *
external_button_params_parse(void *data, Evas_Object *obj, const Eina_List *params)
{
Elm_Params_Button *mem;
Edje_External_Param *param;
mem = external_common_params_parse(Elm_Params_Button, data, obj, params);
if (!mem)
return NULL;
external_common_icon_param_parse(&mem->icon, obj, params);
return mem;
}
static void
external_button_params_free(void *params)
{
Elm_Params_Button *mem = params;
if (mem->icon)
evas_object_del(mem->icon);
external_common_params_free(params);
}
static Edje_External_Param_Info external_button_params[] = {
DEFINE_EXTERNAL_COMMON_PARAMS,
EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
EDJE_EXTERNAL_PARAM_INFO_SENTINEL
};
DEFINE_EXTERNAL_TYPE_SIMPLE(button, "Button");

View File

@ -0,0 +1,61 @@
#include "private.h"
typedef struct _Elm_Params_Check
{
Elm_Params base;
Evas_Object *icon;
} Elm_Params_Check;
static void
external_check_state_set(void *data, Evas_Object *obj, const void *from_params, const void *to_params, float pos)
{
const Elm_Params_Check *p1 = from_params, *p2 = to_params;
p1 = from_params;
p2 = to_params;
if (!p2)
{
elm_check_label_set(obj, p1->base.label);
elm_check_icon_set(obj, p1->icon);
elm_check_state_set(obj, p1->base.state);
return;
}
elm_check_label_set(obj, p2->base.label);
elm_check_icon_set(obj, p2->icon);
elm_check_state_set(obj, p2->base.state);
}
static void *
external_check_params_parse(void *data, Evas_Object *obj, const Eina_List *params)
{
Elm_Params_Check *mem;
Edje_External_Param *param;
mem = external_common_params_parse(Elm_Params_Check, data, obj, params);
if (!mem)
return NULL;
external_common_icon_param_parse(&mem->icon, obj, params);
return mem;
}
static void
external_check_params_free(void *params)
{
Elm_Params_Check *mem = params;
if (mem->icon)
evas_object_del(mem->icon);
external_common_params_free(params);
}
static Edje_External_Param_Info external_check_params[] = {
DEFINE_EXTERNAL_COMMON_PARAMS,
EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
EDJE_EXTERNAL_PARAM_INFO_SENTINEL
};
DEFINE_EXTERNAL_TYPE_SIMPLE(check, "Check")

View File

@ -0,0 +1,80 @@
#include "private.h"
typedef struct _Elm_Params_Radio
{
Elm_Params base;
Evas_Object *icon;
const char* group_name;
} Elm_Params_Radio;
static void
external_radio_state_set(void *data, Evas_Object *obj, const void *from_params, const void *to_params, float pos)
{
const Elm_Params_Radio *p1 = from_params, *p2 = to_params;
p1 = from_params;
p2 = to_params;
if (!p2)
{
elm_radio_label_set(obj, p1->base.label);
elm_radio_icon_set(obj, p1->icon);
elm_radio_state_value_set(obj, p1->base.state);
if (p1->group_name)
{
Evas_Object *ed = evas_object_smart_parent_get(obj);
Evas_Object *group = edje_object_part_swallow_get(ed, p1->group_name);
elm_radio_group_add(obj, group);
}
return;
}
elm_radio_label_set(obj, p2->base.label);
elm_radio_icon_set(obj, p2->icon);
elm_radio_state_value_set(obj, p2->base.state);
if (p2->group_name)
{
Evas_Object *ed = evas_object_smart_parent_get(obj);
Evas_Object *group = edje_object_part_swallow_get(ed, p2->group_name);
elm_radio_group_add(obj, group);
}
}
static void *
external_radio_params_parse(void *data, Evas_Object *obj, const Eina_List *params)
{
Elm_Params_Radio *mem;
Edje_External_Param *param;
mem = external_common_params_parse(Elm_Params_Radio, data, obj, params);
if (!mem)
return NULL;
external_common_icon_param_parse(&mem->icon, obj, params);
param = edje_external_param_find(params, "param group");
if (param)
mem->group_name = eina_stringshare_add(param->s);
return mem;
}
static void
external_radio_params_free(void *params)
{
Elm_Params_Radio *mem = params;
if (mem->icon)
evas_object_del(mem->icon);
if (mem->group_name)
eina_stringshare_del(mem->group_name);
external_common_params_free(params);
}
static Edje_External_Param_Info external_radio_params[] = {
DEFINE_EXTERNAL_COMMON_PARAMS,
EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
EDJE_EXTERNAL_PARAM_INFO_SENTINEL
};
DEFINE_EXTERNAL_TYPE_SIMPLE(radio, "Radio")

View File

@ -0,0 +1,111 @@
#include "private.h"
typedef struct _Elm_Params_Slider
{
Elm_Params base;
Evas_Object *icon;
const char *indicator, *unit;
int inverted, max, min, span, value, horizontal;
} Elm_Params_Slider;
static void
external_slider_state_set(void *data, Evas_Object *obj, const void *from_params, const void *to_params, float pos)
{
const Elm_Params_Slider *p1 = from_params, *p2 = to_params;
p1 = from_params;
p2 = to_params;
if (!p2)
{
elm_slider_label_set(obj, p1->base.label);
elm_slider_icon_set(obj, p1->icon);
elm_slider_span_size_set(obj, p1->span);
elm_slider_min_max_set(obj, p1->min, p1->max);
elm_slider_value_set(obj, p1->value);
elm_slider_inverted_set(obj, p1->inverted);;
elm_slider_horizontal_set(obj, p1->horizontal);
elm_slider_indicator_format_set(obj, p1->indicator);
elm_slider_unit_format_set(obj, p1->unit);
return;
}
elm_slider_label_set(obj, p2->base.label);
elm_slider_icon_set(obj, p2->icon);
elm_slider_span_size_set(obj, p2->span);
elm_slider_min_max_set(obj, p2->min, p2->max);
elm_slider_value_set(obj, p2->value);
elm_slider_inverted_set(obj, p2->inverted);
elm_slider_horizontal_set(obj, p2->horizontal);
elm_slider_indicator_format_set(obj, p2->indicator);
elm_slider_unit_format_set(obj, p2->unit);
}
static void *
external_slider_params_parse(void *data, Evas_Object *obj, const Eina_List *params)
{
Elm_Params_Slider *mem;
Edje_External_Param *param;
mem = external_common_params_parse(Elm_Params_Slider, data, obj, params);
if (!mem)
return NULL;
external_common_icon_param_parse(&mem->icon, obj, params);
param = edje_external_param_find(params, "span");
if (param)
mem->span = param->i;
param = edje_external_param_find(params, "min");
if (param)
mem->min = param->i;
param = edje_external_param_find(params, "max");
if (param)
mem->max = param->i;
param = edje_external_param_find(params, "value");
if (param)
mem->value = param->i;
param = edje_external_param_find(params, "inverted");
if (param)
mem->inverted = param->i;
param = edje_external_param_find(params, "horizontal");
if (param)
mem->horizontal = param->i;
param = edje_external_param_find(params, "unit");
if (param)
mem->unit = eina_stringshare_add(param->s);
param = edje_external_param_find(params, "indicator");
if (param)
mem->indicator = eina_stringshare_add(param->s);
return mem;
}
static void
external_slider_params_free(void *params)
{
Elm_Params_Slider *mem = params;
if (mem->icon)
evas_object_del(mem->icon);
if (mem->unit)
eina_stringshare_del(mem->unit);
if (mem->indicator)
eina_stringshare_del(mem->indicator);
external_common_params_free(params);
}
static Edje_External_Param_Info external_slider_params[] = {
DEFINE_EXTERNAL_COMMON_PARAMS,
EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
EDJE_EXTERNAL_PARAM_INFO_SENTINEL
};
DEFINE_EXTERNAL_TYPE_SIMPLE(slider, "Slider")

View File

@ -0,0 +1,77 @@
#include "private.h"
#include <string.h>
typedef struct _Elm_Params_Toggle
{
Elm_Params base;
Evas_Object *icon;
const char *st_label_from, *st_label_to;
} Elm_Params_Toggle;
static void
external_toggle_state_set(void *data, Evas_Object *obj, const void *from_params, const void *to_params, float pos)
{
const Elm_Params_Toggle *p1 = from_params, *p2 = to_params;
p1 = from_params;
p2 = to_params;
if (!p2)
{
elm_toggle_label_set(obj, p1->base.label);
elm_toggle_icon_set(obj, p1->icon);
elm_toggle_states_labels_set(obj, p1->st_label_from, p1->st_label_to);
elm_toggle_state_set(obj, p1->base.state);
return;
}
elm_toggle_label_set(obj, p2->base.label);
elm_toggle_icon_set(obj, p2->icon);
elm_toggle_states_labels_set(obj, p2->st_label_from, p2->st_label_to);
elm_toggle_state_set(obj, p2->base.state);
}
static void *
external_toggle_params_parse(void *data, Evas_Object *obj, const Eina_List *params)
{
Elm_Params_Toggle *mem;
Edje_External_Param *param;
mem = external_common_params_parse(Elm_Params_Toggle, data, obj, params);
if (!mem)
return NULL;
external_common_icon_param_parse(&mem->icon, obj, params);
param = edje_external_param_find(params, "state label from");
if (param)
mem->st_label_from = eina_stringshare_add(param->s);
param = edje_external_param_find(params, "state label to");
if (param)
mem->st_label_to = eina_stringshare_add(param->s);
return mem;
}
static void
external_toggle_params_free(void *params)
{
Elm_Params_Toggle *mem = params;
if (mem->icon)
evas_object_del(mem->icon);
if (mem->st_label_from)
eina_stringshare_del(mem->st_label_from);
if (mem->st_label_to)
eina_stringshare_del(mem->st_label_to);
external_common_params_free(params);
}
static Edje_External_Param_Info external_toggle_params[] = {
DEFINE_EXTERNAL_COMMON_PARAMS,
EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
EDJE_EXTERNAL_PARAM_INFO_SENTINEL
};
DEFINE_EXTERNAL_TYPE_SIMPLE(toggle, "Toggle")

View File

@ -0,0 +1,5 @@
DEFINE_TYPE(button)
DEFINE_TYPE(check)
DEFINE_TYPE(radio)
DEFINE_TYPE(slider)
DEFINE_TYPE(toggle)

View File

@ -0,0 +1,76 @@
#include <Elementary.h>
#ifdef EAPI
# undef EAPI
#endif
#define EAPI __attribute__ ((visibility("default")))
/* #ifdef _WIN32 */
/* # ifdef EFL_EDJE_BUILD */
/* # ifdef DLL_EXPORT */
/* # define EAPI __declspec(dllexport) */
/* # else */
/* # define EAPI */
/* # endif /\* ! DLL_EXPORT *\/ */
/* # else */
/* # define EAPI __declspec(dllimport) */
/* # endif /\* ! EFL_EDJE_BUILD *\/ */
/* #else */
/* # ifdef __GNUC__ */
/* # if __GNUC__ >= 4 */
/* # define EAPI __attribute__ ((visibility("default"))) */
/* # else */
/* # define EAPI */
/* # endif */
/* # else */
/* # define EAPI */
/* # endif */
/* #endif */
typedef struct {
const char *label;
int state;
} Elm_Params;
void external_signal(void *data, Evas_Object *obj, const char *signal, const char *source);
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);
void external_commom_icon_param_parse(Evas_Object *icon, Evas_Object *obj, const Eina_List *params);
#define external_common_params_parse(type, data, obj, params) \
external_common_params_parse_internal(sizeof(type), data, obj, params)
#define DEFINE_EXTERNAL_TYPE(type_name, name) \
static const char * \
external_##type_name##_label_get(void *data) { \
return name; \
} \
\
const Edje_External_Type external_##type_name##_type = {\
.abi_version = EDJE_EXTERNAL_TYPE_ABI_VERSION, \
.module = name, \
.add = external_##type_name##_add, \
.signal_emit = external_signal, \
.state_set = external_##type_name##_state_set, \
.params_parse = external_##type_name##_params_parse,\
.params_free = external_##type_name##_params_free, \
.icon_add = NULL, \
.label_get = external_##type_name##_label_get, \
.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, Evas *evas, Evas_Object *parent, const Eina_List *params) \
{\
return elm_##type_name##_add(parent); \
}\
\
DEFINE_EXTERNAL_TYPE(type_name, name)
#define DEFINE_EXTERNAL_COMMON_PARAMS \
EDJE_EXTERNAL_PARAM_INFO_STRING("label"), \
EDJE_EXTERNAL_PARAM_INFO_INT("state")