2 * gcc -o anchorblock_example_01 anchorblock_example_01.c `pkg-config --cflags --libs elementary`
4 #include <Elementary.h>
6 static void _anchorblock_clicked_cb(void *data, Evas_Object *obj, void *ev);
7 static void _anchorview_clicked_cb(void *data, Evas_Object *obj, void *ev);
10 elm_main(int argc, char *argv[])
12 Evas_Object *win, *box, *o, *frame;
13 const char *anchortext =
14 "Example of some markup text, a long one at that, using anchors in"
15 "different ways, like <a href=random>some random text</a>.<br>"
16 "Something more useful is to have actions over urls, either in direct"
17 "form: <a href=url:http://www.enlightenment.org>"
18 "http://www.enlightenment.org</a> or with "
19 "<a href=url:http://www.enlightenment.org>more random text</a>.<br>"
20 "In any case, the href part of the anchor is what you will receive on"
21 "the callback, so it's a good idea to keep anything needed to identify"
22 "whatever is linked at in there.<br>"
23 "Playing to be a phone, we can also identify contacts from our address"
24 "list, like this dude here <a href=contact:42>Thomas Anderson</a>, or"
25 "phone numbers <a href=tel:+61432123>+61 432 1234</a>.";
27 elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
29 win = elm_win_add(NULL, "Anchortwins example", ELM_WIN_BASIC);
30 elm_win_title_set(win, "Anchortwins example");
31 elm_win_autodel_set(win, EINA_TRUE);
32 evas_object_resize(win, 320, 300);
33 evas_object_show(win);
36 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
37 elm_win_resize_object_add(win, o);
40 box = elm_box_add(win);
41 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
42 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
43 elm_win_resize_object_add(win, box);
44 evas_object_show(box);
46 frame = elm_frame_add(win);
47 elm_object_text_set(frame, "Anchorblock");
48 evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
49 evas_object_show(frame);
50 elm_box_pack_end(box, frame);
52 o = elm_anchorblock_add(win);
53 elm_anchorblock_hover_style_set(o, "popout");
54 elm_anchorblock_hover_parent_set(o, win);
55 elm_object_text_set(o, anchortext);
56 evas_object_smart_callback_add(o, "anchor,clicked", _anchorblock_clicked_cb,
59 elm_object_content_set(frame, o);
61 frame = elm_frame_add(win);
62 elm_object_text_set(frame, "Anchorview");
63 evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
64 evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
65 evas_object_show(frame);
66 elm_box_pack_end(box, frame);
68 o = elm_anchorview_add(win);
69 elm_anchorview_hover_parent_set(o, frame);
70 elm_anchorview_bounce_set(o, EINA_FALSE, EINA_TRUE);
71 elm_object_text_set(o, anchortext);
72 evas_object_smart_callback_add(o, "anchor,clicked", _anchorview_clicked_cb,
75 elm_object_content_set(frame, o);
84 static void _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_Smart_Cb btn_end_cb);
87 _btn_anchorblock_end_cb(void *data, Evas_Object *obj, void *event_info)
89 elm_anchorblock_hover_end((Evas_Object *)data);
93 _anchorblock_clicked_cb(void *data, Evas_Object *obj, void *event_info)
95 Elm_Entry_Anchorblock_Info *info = event_info;
96 _anchor_buttons_create(obj, info, _btn_anchorblock_end_cb);
100 _btn_anchorview_end_cb(void *data, Evas_Object *obj, void *event_info)
102 elm_anchorview_hover_end((Evas_Object *)data);
106 _anchorview_clicked_cb(void *data, Evas_Object *obj, void *event_info)
108 /* should be an Elm_Entry_Anchorview_Info, but since both of them are
109 * the same, it simplifies code in this example to use one only */
110 Elm_Entry_Anchorblock_Info *info = event_info;
111 _anchor_buttons_create(obj, info, _btn_anchorview_end_cb);
115 _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
117 const char *lbl = elm_object_text_get(obj);
118 printf("%s: %s\n", lbl, (char *)data);
119 eina_stringshare_del(data);
123 _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_Smart_Cb btn_end_cb)
125 Evas_Object *btn, *secondary = NULL, *box = NULL;
129 btn = elm_button_add(ao);
130 evas_object_show(btn);
132 p = strchr(info->name, ':');
135 elm_object_text_set(btn, "Nothing to see here");
136 evas_object_smart_callback_add(btn, "clicked", btn_end_cb, ao);
137 elm_object_part_content_set(info->hover, "middle", btn);
141 str = eina_stringshare_add(p + 1);
142 if (!strncmp(info->name, "tel:", 4))
145 elm_object_text_set(btn, "Call");
147 secondary = elm_button_add(ao);
148 elm_object_text_set(secondary, "Send SMS");
149 evas_object_show(secondary);
150 evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
151 evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
154 box = elm_box_add(ao);
155 evas_object_show(box);
157 o = elm_button_add(ao);
158 elm_object_text_set(o, "Add to contacts");
159 elm_box_pack_end(box, o);
161 evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
162 evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
164 o = elm_button_add(ao);
165 elm_object_text_set(o, "Send MMS");
166 elm_box_pack_end(box, o);
168 evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
169 evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
171 else if (!strncmp(info->name, "contact:", 8))
174 elm_object_text_set(btn, "Call");
176 secondary = elm_button_add(ao);
177 elm_object_text_set(secondary, "Send SMS");
178 evas_object_show(secondary);
179 evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
180 evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
183 box = elm_box_add(ao);
184 evas_object_show(box);
186 o = elm_button_add(ao);
187 elm_object_text_set(o, "Send MMS");
188 elm_box_pack_end(box, o);
190 evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
191 evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
193 else if (!strncmp(info->name, "mailto:", 7))
195 elm_object_text_set(btn, "Send E-Mail");
197 secondary = elm_button_add(ao);
198 elm_object_text_set(secondary, "Add to contacts");
199 evas_object_show(secondary);
200 evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
201 evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
204 else if (!strncmp(info->name, "url:", 4))
207 elm_object_text_set(btn, "Launch in browser");
209 box = elm_box_add(ao);
210 evas_object_show(box);
212 o = elm_button_add(ao);
213 elm_object_text_set(o, "Send as mail to...");
214 elm_box_pack_end(box, o);
216 evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
217 evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
219 o = elm_button_add(ao);
220 elm_object_text_set(o, "Send as SMS to...");
221 elm_box_pack_end(box, o);
223 evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
224 evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
227 evas_object_smart_callback_add(btn, "clicked", btn_end_cb, ao);
228 evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, str);
229 elm_object_part_content_set(info->hover, "middle", btn);
233 if (info->hover_right)
234 elm_object_part_content_set(info->hover, "right", secondary);
235 else if (info->hover_left)
236 elm_object_part_content_set(info->hover, "left", secondary);
238 evas_object_del(secondary);
243 if (info->hover_bottom)
244 elm_object_part_content_set(info->hover, "bottom", box);
245 else if (info->hover_top)
246 elm_object_part_content_set(info->hover, "top", box);
248 evas_object_del(box);