efl
169 строк · 6.1 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4#include <Efl_Ui.h>5#include <Elementary.h>6
7static void8_bt_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)9{
10Evas_Object *dia, *lb;11Evas_Object *parent = data;12
13dia = elm_win_util_dialog_add(parent, "window-dia", "A Dialog Window");14elm_win_autodel_set(dia, EINA_TRUE);15
16lb = elm_label_add(dia);17elm_object_text_set(lb, "This is a Dialog Window");18evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);19elm_win_resize_object_add(dia, lb);20evas_object_show(lb);21
22evas_object_resize(dia, 200, 150);23evas_object_show(dia);24}
25
26static void27_bt2_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)28{
29Efl_Canvas_Object *dia, *lb, *parent = data;30Eina_Size2D size = { 300, 150 };31
32dia = efl_add(EFL_UI_WIN_CLASS, parent,33efl_ui_win_type_set(efl_added, EFL_UI_WIN_TYPE_DIALOG_BASIC),34efl_ui_win_name_set(efl_added, "window-dia-2"),35efl_ui_win_autodel_set(efl_added, EINA_TRUE),36efl_text_set(efl_added, "A Fixed Size Dialog"));37
38// Notes:39// - All objects have 0 weight, this makes the window not resizable.40// - With EO APIs, efl_gfx_hint_size_min_set() is safe to call as EFL will41// only set the restricted min size (and combine them for calculation).42
43lb = efl_add(EFL_UI_TEXTBOX_CLASS, dia,44efl_text_set(efl_added, "This is a non-resizable dialog."),45efl_gfx_hint_size_min_set(efl_added, size),46efl_gfx_hint_size_max_set(efl_added, size),47efl_gfx_hint_weight_set(efl_added, 0, 0));48
49// Swallow in the label as the default content, this will make it visible.50efl_content_set(dia, lb);51}
52
53static void54_size_update(void *data, const Efl_Event *ev)55{
56Eina_Size2D sz, max, min, cmin;57char buf[2048];58Eo *dia = ev->object;59Eo *lbl = data;60
61cmin = efl_gfx_hint_size_combined_min_get(dia);62min = efl_gfx_hint_size_min_get(dia);63max = efl_gfx_hint_size_max_get(dia);64sz = efl_gfx_entity_size_get(dia);65
66sprintf(buf, "This is a dialog with min/max size<br>"67"Min size: %dx%d (requested) %dx%d (effective)<br>"68"Max size: %dx%d<br>"69"Current size: %dx%d", min.w, min.h, cmin.w, cmin.h, max.w, max.h, sz.w, sz.h);70//efl_text_set(lbl, buf);71elm_object_text_set(lbl, buf);72}
73
74static void75_bt3_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)76{
77Efl_Canvas_Object *dia, *lb, *parent = data;78
79dia = efl_add(EFL_UI_WIN_CLASS, parent,80efl_ui_win_type_set(efl_added, EFL_UI_WIN_TYPE_DIALOG_BASIC),81efl_ui_win_name_set(efl_added, "window-dia-3"),82efl_ui_win_autodel_set(efl_added, EINA_TRUE),83efl_text_set(efl_added, "Min/Max Size Dialog"));84
85//lb = efl_add(EFL_UI_TEXTBOX_CLASS, dia);,86lb = elm_label_add(dia);87efl_event_callback_add(dia, EFL_GFX_ENTITY_EVENT_HINTS_CHANGED, _size_update, lb);88efl_event_callback_add(dia, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _size_update, lb);89elm_object_text_set(lb, "This is a Dialog Window");90efl_gfx_hint_weight_set(lb, 1.0, 1.0);91
92// Swallow in the label as the default content, this will make it visible.93efl_content_set(dia, lb);94
95// Set min & max size (app-side)96efl_gfx_hint_size_min_set(dia, EINA_SIZE2D(ELM_SCALE_SIZE(0), ELM_SCALE_SIZE(100)));97efl_gfx_hint_size_max_set(dia, EINA_SIZE2D(ELM_SCALE_SIZE(800), ELM_SCALE_SIZE(600)));98}
99
100static void101_bt4_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)102{
103Efl_Canvas_Object *dia, *lb;104
105dia = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),106efl_ui_win_type_set(efl_added, EFL_UI_WIN_TYPE_DIALOG_BASIC),107efl_ui_win_name_set(efl_added, "window-dia-4"),108efl_ui_win_autodel_set(efl_added, EINA_TRUE),109efl_text_set(efl_added, "Min/Max Size Dialog")110);111
112//lb = efl_add(EFL_UI_TEXTBOX_CLASS, dia);,113lb = elm_label_add(dia);114efl_event_callback_add(dia, EFL_GFX_ENTITY_EVENT_HINTS_CHANGED, _size_update, lb);115efl_event_callback_add(dia, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _size_update, lb);116elm_object_text_set(lb, "This is a Centered Dialog Window");117efl_gfx_hint_weight_set(lb, 1.0, 1.0);118
119// Swallow in the label as the default content, this will make it visible.120efl_content_set(dia, lb);121
122// Set min & max size (app-side)123efl_gfx_hint_size_min_set(dia, EINA_SIZE2D(ELM_SCALE_SIZE(0), ELM_SCALE_SIZE(100)));124efl_gfx_hint_size_max_set(dia, EINA_SIZE2D(ELM_SCALE_SIZE(800), ELM_SCALE_SIZE(600)));125
126efl_ui_win_center(dia, EINA_TRUE, EINA_TRUE);127}
128
129void
130test_win_dialog(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)131{
132Evas_Object *win, *box, *bt;133
134win = elm_win_util_standard_add("window-dia", "A Standard Window");135elm_win_autodel_set(win, EINA_TRUE);136
137box = elm_box_add(win);138evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);139elm_win_resize_object_add(win, box);140evas_object_show(box);141
142bt = elm_button_add(win);143elm_object_text_set(bt, "Create a new dialog");144evas_object_smart_callback_add(bt, "clicked", _bt_clicked_cb, win);145elm_box_pack_end(box, bt);146evas_object_show(bt);147
148bt = elm_button_add(win);149elm_object_text_set(bt, "Create a new unresizable dialog");150evas_object_smart_callback_add(bt, "clicked", _bt2_clicked_cb, win);151elm_box_pack_end(box, bt);152evas_object_show(bt);153
154bt = elm_button_add(win);155elm_object_text_set(bt, "Create a new dialog with min/max sizes");156evas_object_smart_callback_add(bt, "clicked", _bt3_clicked_cb, win);157elm_box_pack_end(box, bt);158evas_object_show(bt);159
160bt = elm_button_add(win);161elm_object_text_set(bt, "Create a new centered dialog");162evas_object_smart_callback_add(bt, "clicked", _bt4_clicked_cb, win);163elm_box_pack_end(box, bt);164evas_object_show(bt);165
166evas_object_resize(win, 400 * elm_config_scale_get(),167400 * elm_config_scale_get());168evas_object_show(win);169}
170