forked from enlightenment/efl
elementary_codegen: Adding a basic example
Just adding an example showing how to using the codegen. SVN revision: 76615
This commit is contained in:
parent
1a39b4de1d
commit
b65e5ed1ec
|
@ -684,6 +684,7 @@ AC_SUBST(requirement_elm)
|
|||
|
||||
EFL_WITH_BIN([eet], [eet-eet], [eet])
|
||||
EFL_WITH_BIN([edje], [edje-cc], [edje_cc])
|
||||
EFL_WITH_BIN([elementary], [elementary-codegen], [elementary_codegen])
|
||||
|
||||
EFL_CHECK_DOXYGEN([build_doc="yes"], [build_doc="no"])
|
||||
|
||||
|
|
|
@ -35,6 +35,9 @@ EDJE_FLAGS_VERBOSE_0 =
|
|||
EDJE_FLAGS_VERBOSE_1 = -v
|
||||
EDJE_FLAGS = $(EDJE_FLAGS_$(V))
|
||||
|
||||
ELEMENTARY_CODEGEN = $(top_builddir)/src/bin/@ELEMENTARY_CODEGEN_PRG@
|
||||
ELEMENTARY_CODEGEN_FLAGS = --prefix=codegen_example
|
||||
|
||||
SRCS = \
|
||||
actionslider_example_01.c \
|
||||
bg_example_01.c \
|
||||
|
@ -52,6 +55,7 @@ calendar_example_05.c \
|
|||
calendar_example_06.c \
|
||||
check_example_01.c \
|
||||
clock_example.c \
|
||||
codegen_example.edc \
|
||||
colorselector_example_01.c \
|
||||
conformant_example_01.c \
|
||||
conformant_example_02.c \
|
||||
|
@ -148,11 +152,24 @@ endif
|
|||
if EFL_BUILD_EXAMPLES
|
||||
files_DATA += \
|
||||
theme_example.edj \
|
||||
layout_example.edj
|
||||
layout_example.edj\
|
||||
codegen_example.edj
|
||||
|
||||
clean-local:
|
||||
rm -f *.edj
|
||||
|
||||
codegen_example_generated.c codegen_example_generated.h: codegen_example.edj
|
||||
$(ELEMENTARY_CODEGEN) $(ELEMENTARY_CODEGEN_FLAGS) codegen_example.edj \
|
||||
elm/example/mylayout/default codegen_example_generated.c codegen_example_generated.h
|
||||
|
||||
BUILT_SOURCES = codegen_example_generated.c codegen_example_generated.h
|
||||
|
||||
codegen_example_SOURCES = \
|
||||
codegen_example.c
|
||||
nodist_codegen_example_SOURCES = \
|
||||
codegen_example_generated.c \
|
||||
codegen_example_generated.h
|
||||
|
||||
examples_PROGRAMS = \
|
||||
actionslider_example_01 \
|
||||
bg_example_01 \
|
||||
|
@ -170,6 +187,7 @@ calendar_example_05 \
|
|||
calendar_example_06 \
|
||||
check_example_01 \
|
||||
clock_example \
|
||||
codegen_example \
|
||||
colorselector_example_01 \
|
||||
conformant_example_01 \
|
||||
conformant_example_02 \
|
||||
|
@ -367,4 +385,4 @@ screenshots:
|
|||
|
||||
endif
|
||||
|
||||
EXTRA_DIST = dict.txt layout_example.edc theme_example.edc
|
||||
EXTRA_DIST = dict.txt layout_example.edc theme_example.edc codegen.edc
|
||||
|
|
|
@ -0,0 +1,116 @@
|
|||
/**
|
||||
* Simple Elementary example illustrating how to use elementary_codegen.
|
||||
*
|
||||
* elementary_codegen is a tool that generates code to acessing the
|
||||
* parts and programs with the keyword "api" of a specified
|
||||
* group. This tool make easier working with edje avoiding common
|
||||
* misspelling errors when acessing the parts and/or programs.
|
||||
*
|
||||
* To use the elementary_codegen:
|
||||
* elementary_codegen --prefix <myapp_myobj> <input.edj> <a_group> <source.c> <header.h>
|
||||
*
|
||||
* In the case of this example:
|
||||
* elemtary_codegen --prefix=codegen_example codegen_example.edj \
|
||||
* elm/example/mylayout/default codegen_example_generated.c codegen_example_generated.h
|
||||
*
|
||||
* @verbatim
|
||||
* edje_cc codegen_example.edc && elementary_codegen --prefix=codegen_example \
|
||||
* codegen_example.edj example_group codegen_example_generated.c \
|
||||
* codegen_example_generated.h
|
||||
* gcc -c codegen_example_generated.c `pkg-config --libs --cflags ecore-evas edje elementary`
|
||||
* gcc -o codegen_example codegen_example_generated.o \
|
||||
* codegen_example.c `pkg-config --libs --cflags ecore-evas edje elementary`
|
||||
* @endverbatim
|
||||
*/
|
||||
|
||||
|
||||
#include "codegen_example_generated.h"
|
||||
|
||||
|
||||
static Eina_Bool _btn_large = EINA_FALSE;
|
||||
|
||||
static void
|
||||
_swallow_btn_cb(void *data, Evas_Object *btn, void *event_info)
|
||||
{
|
||||
Evas_Object *layout = data;
|
||||
|
||||
if (_btn_large == EINA_FALSE)
|
||||
{
|
||||
_btn_large = EINA_TRUE;
|
||||
codegen_example_swallow_grow_emit(layout);
|
||||
elm_object_text_set(btn, "Reduce me!");
|
||||
}
|
||||
else
|
||||
{
|
||||
_btn_large = EINA_FALSE;
|
||||
codegen_example_swallow_shrink_emit(layout);
|
||||
elm_object_text_set(btn, "Enlarge me!");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_size_changed_cb(void *data, Evas_Object *layout, const char *emission, const char *source)
|
||||
{
|
||||
Evas_Object *edje;
|
||||
Evas_Coord w, h;
|
||||
|
||||
elm_layout_sizing_eval(layout);
|
||||
edje = elm_layout_edje_get(layout);
|
||||
edje_object_size_min_calc(edje, &w, &h);
|
||||
printf("Minimum size for this theme: %dx%d\n", w, h);
|
||||
}
|
||||
|
||||
EAPI_MAIN int
|
||||
elm_main(int argc, char **argv)
|
||||
{
|
||||
Evas_Object *win, *bg, *btn, *layout;
|
||||
|
||||
elm_app_info_set(elm_main, "elementary", "examples/codegen_example.edj");
|
||||
win = elm_win_add(NULL, "layout", ELM_WIN_BASIC);
|
||||
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
|
||||
elm_win_autodel_set(win, EINA_TRUE);
|
||||
|
||||
bg = elm_bg_add(win);
|
||||
elm_bg_color_set(bg, 255,255 ,255);
|
||||
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_win_resize_object_add(win, bg);
|
||||
evas_object_show(bg);
|
||||
|
||||
// Adding layout
|
||||
layout = codegen_example_layout_add(win, NULL, NULL);
|
||||
if (!layout)
|
||||
{
|
||||
printf("Could not create the layout\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_win_resize_object_add(win, layout);
|
||||
evas_object_show(layout);
|
||||
|
||||
codegen_example_size_changed_callback_add(layout, _size_changed_cb, layout);
|
||||
|
||||
// Setting title
|
||||
const char *title = codegen_example_title_get(layout);
|
||||
if (title)
|
||||
{
|
||||
elm_win_title_set(win, title);
|
||||
codegen_example_title_set(layout, title);
|
||||
}
|
||||
|
||||
btn = elm_button_add(win);
|
||||
elm_object_text_set(btn, "Enlarge me!");
|
||||
evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
codegen_example_custom_set(layout, btn);
|
||||
evas_object_smart_callback_add(btn, "clicked", _swallow_btn_cb, layout);
|
||||
|
||||
evas_object_resize(win, 160, 160);
|
||||
evas_object_show(win);
|
||||
|
||||
elm_run();
|
||||
elm_shutdown();
|
||||
|
||||
return 0;
|
||||
}
|
||||
ELM_MAIN()
|
|
@ -0,0 +1,81 @@
|
|||
collections {
|
||||
group {
|
||||
name: "elm/example/mylayout/default";
|
||||
|
||||
data {
|
||||
item: "title" "elm_codegen Example";
|
||||
}
|
||||
|
||||
parts {
|
||||
part {
|
||||
name: "example/title";
|
||||
api: "title" "The example title";
|
||||
type: TEXT;
|
||||
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
color: 0 0 0 255;
|
||||
rel1 {
|
||||
relative: 0.0 0.0;
|
||||
offset: 0 0;
|
||||
}
|
||||
rel2 {
|
||||
relative: 1.0 0.2;
|
||||
offset: -1 -1;
|
||||
}
|
||||
text {
|
||||
text: "Using elementary_codegen";
|
||||
size: 16;
|
||||
font: "sans";
|
||||
min: 1 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
part {
|
||||
name: "example/custom";
|
||||
api: "custom" "The swallow part";
|
||||
type: SWALLOW;
|
||||
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
min: 160 50;
|
||||
max: 160 50;
|
||||
align: 0.5 1.0;
|
||||
}
|
||||
description {
|
||||
state: "big" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
min: 320 100;
|
||||
max: 320 100;
|
||||
}
|
||||
} // example/custom
|
||||
|
||||
programs {
|
||||
program {
|
||||
name: "swallow,grow";
|
||||
api: "swallow_grow" "Executed when the button enlarges";
|
||||
signal: "button,enlarge";
|
||||
action: STATE_SET "big" 0.0;
|
||||
transition: LINEAR 0.5;
|
||||
target: "example/custom";
|
||||
after: "emit,changed";
|
||||
}
|
||||
program {
|
||||
name: "swallow,shrink";
|
||||
api: "swallow_shrink" "Executed when the button reduces";
|
||||
signal: "button,reduce";
|
||||
action: STATE_SET "default" 0.0;
|
||||
transition: LINEAR 0.5;
|
||||
target: "example/custom";
|
||||
after: "emit,changed";
|
||||
}
|
||||
program {
|
||||
name: "emit,changed";
|
||||
action: SIGNAL_EMIT "size,changed" "";
|
||||
api: "size_changed" "Emit the signal size,changed";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue