2 //gcc -g box_example_02.c -o box_example_02 `pkg-config --cflags --libs elementary`
4 #include <Elementary.hh>
10 struct Transitions_Data
12 efl::eo::wref<elm::box> box;
13 std::deque<Evas_Object_Box_Layout> transitions;
14 Evas_Object_Box_Layout last_layout;
18 _test_box_transition_change(void *data)
20 Transitions_Data *tdata = static_cast<Transitions_Data*>(data);
21 Elm_Box_Transition *layout_data;
22 Evas_Object_Box_Layout next_layout;
25 assert (!tdata->transitions.empty());
27 if(efl::eina::optional<elm::box> box = tdata->box.lock())
29 next_layout = tdata->transitions.front();
30 layout_data = elm_box_transition_new(2.0, tdata->transitions.back(),
31 nullptr, nullptr, next_layout, nullptr, nullptr,
32 _test_box_transition_change, tdata);
33 box->layout_set(elm_box_layout_transition, layout_data,
34 elm_box_transition_free);
35 tdata->last_layout = next_layout;
37 tdata->transitions.push_back(tdata->transitions[0]);
38 tdata->transitions.pop_front();
43 elm_main(int argc, char *argv[])
45 elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_HIDDEN);
47 Transitions_Data tdata;
49 ::elm::win_standard win;
50 win.title_set("Box Transition");
51 win.autohide_set(true);
53 elm::box bigbox ( efl::eo::parent = win );
54 bigbox.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
55 win.resize_object_add(bigbox);
56 bigbox.visible_set(true);
58 elm::box buttons ( efl::eo::parent = win );
59 buttons.horizontal_set(EINA_TRUE);
60 bigbox.pack_end(buttons);
61 buttons.visible_set(true);
63 elm::button add ( efl::eo::parent = win );
64 add.text_set("elm.text", "Add");
65 buttons.pack_end(add);
66 add.visible_set(true);
67 add.callback_clicked_add
70 if(efl::eina::optional<elm::box> box = tdata.box.lock())
72 elm::button btn ( efl::eo::parent = *box );
73 btn.text_set(nullptr, "I do nothing");
75 btn.visible_set(true);
79 elm::button clear ( efl::eo::parent = win );
80 clear.text_set("elm.text", "Clear");
81 buttons.pack_end(clear);
82 clear.visible_set(true);
83 clear.callback_clicked_add(std::bind([&tdata] { tdata.box.lock()->clear(); }));
85 elm::box dynamic ( efl::eo::parent = win );
86 dynamic.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
87 dynamic.size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL);
88 bigbox.pack_end(dynamic);
89 dynamic.visible_set(true);
91 auto unpack = std::bind([&tdata] (evas::clickable_interface obj)
93 elm::button btn = efl::eo::downcast<elm::button>(obj);
94 tdata.box.lock()->unpack(btn);
95 btn.position_set(0, 50);
96 btn.object_smart::color_set(128, 64, 0, 128);
97 }, std::placeholders::_1)
100 elm::button bt1 ( efl::eo::parent = win );
101 bt1.text_set("elm.text", "Button 1");
102 bt1.callback_clicked_add(unpack);
103 bt1.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
104 bt1.size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL);
105 dynamic.pack_end(bt1);
106 bt1.visible_set(true);
108 elm::button bt2 ( efl::eo::parent = win );
109 bt2.text_set("elm.text", "Button 2");
110 bt2.size_hint_weight_set(EVAS_HINT_EXPAND, 0.0);
111 bt2.size_hint_align_set(1.0, 0.5);
112 bt2.callback_clicked_add(unpack);
113 dynamic.pack_end(bt2);
114 bt2.visible_set(true);
116 elm::button bt3 ( efl::eo::parent = win );
117 bt3.text_set("elm.text", "Button 3");
118 bt3.callback_clicked_add(unpack);
119 dynamic.pack_end(bt3);
120 bt3.visible_set(true);
123 tdata.last_layout = evas_object_box_layout_horizontal;
124 tdata.transitions.push_back(evas_object_box_layout_vertical);
125 tdata.transitions.push_back(evas_object_box_layout_horizontal);
126 tdata.transitions.push_back(evas_object_box_layout_stack);
127 tdata.transitions.push_back(evas_object_box_layout_homogeneous_vertical);
128 tdata.transitions.push_back(evas_object_box_layout_homogeneous_horizontal);
129 tdata.transitions.push_back(evas_object_box_layout_flow_vertical);
130 tdata.transitions.push_back(evas_object_box_layout_flow_horizontal);
131 tdata.transitions.push_back(evas_object_box_layout_stack);
133 dynamic.layout_set(evas_object_box_layout_horizontal, nullptr, nullptr);
134 _test_box_transition_change(&tdata);
136 win.size_set(300, 320);
137 win.visible_set(true);