This example shows how one can send and receive signals to/from the layout, and what to do when the layout theme has its size changed.
The full source code for this example can be found at layout_example_03.c.
In this example we will use another group from the same layout theme file used in Layout - Content, Table and Box. Its instantiation and loading happens in the following lines:
#define EVAS_HINT_EXPAND
Use with evas_object_size_hint_weight_set(), evas_object_size_hint_weight_get(), evas_object_size_hin...
Definition Evas_Common.h:297
const char * elm_app_data_dir_get(void)
Get the application's run time data prefix directory, as set by elm_app_info_set() and the way (envir...
Definition elm_main.c:586
Evas_Object * elm_layout_add(Evas_Object *parent)
Add a new layout to the parent.
Definition efl_ui_layout.c:3067
Eina_Bool elm_layout_file_set(Eo *obj, const char *file, const char *group)
Set the file that will be used as layout.
Definition efl_ui_layout.c:3074
void elm_win_resize_object_add(Eo *obj, Evas_Object *subobj)
Add subobj as a resize object of window obj.
Definition efl_ui_win.c:9002
EVAS_API void evas_object_show(Evas_Object *eo_obj)
Makes the given Evas object visible.
Definition evas_object_main.c:1814
EVAS_API void evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y)
Sets the hints for an object's weight.
Definition evas_object_main.c:2638
This time we register a callback to be called whenever we receive a signal after the end of the animation that happens in this layout:
void elm_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data)
Add a callback for a signal emitted by widget edje object.
Definition elm_main.c:1863
We also add a button that will send signals to the layout:
if (title)
{
}
elm_object_text_set(btn, "Enlarge me!");
#define EVAS_HINT_FILL
Use with evas_object_size_hint_align_set(), evas_object_size_hint_align_get(), evas_object_size_hint_...
Definition Evas_Common.h:298
void elm_object_part_content_set(Evas_Object *obj, const char *part, Evas_Object *content)
Set the content on part of a given container widget.
Definition elm_main.c:1562
void elm_object_part_text_set(Evas_Object *obj, const char *part, const char *label)
Set a text of an object.
Definition elm_main.c:1485
const char * elm_layout_data_get(const Evas_Object *obj, const char *key)
Get the edje data from the given layout.
Definition efl_ui_layout.c:3394
void elm_win_title_set(Evas_Object *obj, const char *title)
Set the title of the window.
Definition efl_ui_win.c:8646
EVAS_API void evas_object_size_hint_align_set(Evas_Object *obj, double x, double y)
Sets the hints for an object's alignment.
Definition evas_object_main.c:2650
EVAS_API void evas_object_smart_callback_add(Evas_Object *eo_obj, const char *event, Evas_Smart_Cb func, const void *data)
Add (register) a callback function to the smart event specified by event on the smart object obj.
Definition evas_object_smart.c:1040
The callback for this button will check what type of signal it should send, and then emit it. The code for this callback follows:
static void
_swallow_btn_cb(
void *data, Evas_Object *btn,
void *event_info
EINA_UNUSED)
{
Evas_Object *layout = data;
{
elm_object_text_set(btn, "Reduce me!");
}
else
{
elm_object_text_set(btn, "Enlarge me!");
#define EINA_TRUE
boolean value TRUE (numerical value 1)
Definition eina_types.h:539
#define EINA_FALSE
boolean value FALSE (numerical value 0)
Definition eina_types.h:533
unsigned char Eina_Bool
Type to mimic a boolean.
Definition eina_types.h:527
#define EINA_UNUSED
Used to indicate that a function parameter is purposely unused.
Definition eina_types.h:339
void elm_object_signal_emit(Evas_Object *obj, const char *emission, const char *source)
Send a signal to the widget edje object.
Definition elm_main.c:1854
}
}
As we said before, we are receiving a signal whenever the animation started by the button click ends. This is the callback for that signal:
static void
{
Evas_Object *edje;
printf("Minimum size for this theme: %dx%d\n", w, h);
}
int Evas_Coord
Type used for coordinates (in pixels, int).
Definition Evas_Common.h:116
void edje_object_size_min_calc(Edje_Object *obj, int *minw, int *minh)
Calculates the minimum required size for a given Edje object.
Definition edje_legacy.c:1059
Evas_Object * elm_layout_edje_get(const Eo *obj)
Get the edje layout.
Definition efl_ui_layout.c:1883
void elm_layout_sizing_eval(Evas_Object *obj)
Eval sizing.
Notice from this callback that the elm_layout_sizing_eval() function must be called if we want our widget to update its size after the layout theme having changed its minimum size. This happens because the animation specified in the theme increases the size of the content area to a value higher than the widget size, thus requiring more space. But the elementary layout widget has no way to know this, thus needing the elm_layout_sizing_eval() to be called on the layout, informing that this size has changed.
A screenshot of this example can be seen on: