2 * gcc -o anchorblock_example_01 anchorblock_example_01.c `pkg-config --cflags --libs elementary`
4 #include <Elementary.h>
6 # include "elementary_config.h"
11 static void _anchorblock_clicked_cb(void *data, Evas_Object *obj, void *ev);
12 static void _anchorview_clicked_cb(void *data, Evas_Object *obj, void *ev);
15 elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
17 Evas_Object *win, *box, *o, *frame;
18 const char *anchortext =
19 "Example of some markup text, a long one at that, using anchors in"
20 "different ways, like <a href=random>some random text</a>.<br>"
21 "Something more useful is to have actions over urls, either in direct"
22 "form: <a href=url:http://www.enlightenment.org>"
23 "http://www.enlightenment.org</a> or with "
24 "<a href=url:http://www.enlightenment.org>more random text</a>.<br>"
25 "In any case, the href part of the anchor is what you will receive on"
26 "the callback, so it's a good idea to keep anything needed to identify"
27 "whatever is linked at in there.<br>"
28 "Playing to be a phone, we can also identify contacts from our address"
29 "list, like this dude here <a href=contact:42>Thomas Anderson</a>, or"
30 "phone numbers <a href=tel:+61432123>+61 432 1234</a>.";
32 elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
34 win = elm_win_add(NULL, "Anchortwins example", ELM_WIN_BASIC);
35 elm_win_title_set(win, "Anchortwins example");
36 elm_win_autodel_set(win, EINA_TRUE);
37 evas_object_resize(win, 320, 300);
38 evas_object_show(win);
41 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
42 elm_win_resize_object_add(win, o);
45 box = elm_box_add(win);
46 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
47 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
48 elm_win_resize_object_add(win, box);
49 evas_object_show(box);
51 frame = elm_frame_add(win);
52 elm_object_text_set(frame, "Anchorblock");
53 evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
54 evas_object_show(frame);
55 elm_box_pack_end(box, frame);
57 o = elm_anchorblock_add(win);
58 elm_anchorblock_hover_style_set(o, "popout");
59 elm_anchorblock_hover_parent_set(o, win);
60 elm_object_text_set(o, anchortext);
61 evas_object_smart_callback_add(o, "anchor,clicked", _anchorblock_clicked_cb,
64 elm_object_content_set(frame, o);
66 frame = elm_frame_add(win);
67 elm_object_text_set(frame, "Anchorview");
68 evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
69 evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
70 evas_object_show(frame);
71 elm_box_pack_end(box, frame);
73 o = elm_anchorview_add(win);
74 elm_anchorview_hover_parent_set(o, frame);
75 elm_anchorview_bounce_set(o, EINA_FALSE, EINA_TRUE);
76 elm_object_text_set(o, anchortext);
77 evas_object_smart_callback_add(o, "anchor,clicked", _anchorview_clicked_cb,
80 elm_object_content_set(frame, o);
88 static void _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_Smart_Cb btn_end_cb);
91 _btn_anchorblock_end_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
93 elm_anchorblock_hover_end((Evas_Object *)data);
97 _anchorblock_clicked_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info)
99 Elm_Entry_Anchorblock_Info *info = event_info;
100 _anchor_buttons_create(obj, info, _btn_anchorblock_end_cb);
104 _btn_anchorview_end_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
106 elm_anchorview_hover_end((Evas_Object *)data);
110 _anchorview_clicked_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info)
112 /* should be an Elm_Entry_Anchorview_Info, but since both of them are
113 * the same, it simplifies code in this example to use one only */
114 Elm_Entry_Anchorblock_Info *info = event_info;
115 _anchor_buttons_create(obj, info, _btn_anchorview_end_cb);
119 _btn_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
121 const char *lbl = elm_object_text_get(obj);
122 printf("%s: %s\n", lbl, (char *)data);
123 eina_stringshare_del(data);
127 _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_Smart_Cb btn_end_cb)
129 Evas_Object *btn, *secondary = NULL, *box = NULL;
133 btn = elm_button_add(ao);
134 evas_object_show(btn);
136 p = strchr(info->name, ':');
139 elm_object_text_set(btn, "Nothing to see here");
140 evas_object_smart_callback_add(btn, "clicked", btn_end_cb, ao);
141 elm_object_part_content_set(info->hover, "middle", btn);
145 str = eina_stringshare_add(p + 1);
146 if (!strncmp(info->name, "tel:", 4))
149 elm_object_text_set(btn, "Call");
151 secondary = elm_button_add(ao);
152 elm_object_text_set(secondary, "Send SMS");
153 evas_object_show(secondary);
154 evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
155 evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
158 box = elm_box_add(ao);
159 evas_object_show(box);
161 o = elm_button_add(ao);
162 elm_object_text_set(o, "Add to contacts");
163 elm_box_pack_end(box, o);
165 evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
166 evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
168 o = elm_button_add(ao);
169 elm_object_text_set(o, "Send MMS");
170 elm_box_pack_end(box, o);
172 evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
173 evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
175 else if (!strncmp(info->name, "contact:", 8))
178 elm_object_text_set(btn, "Call");
180 secondary = elm_button_add(ao);
181 elm_object_text_set(secondary, "Send SMS");
182 evas_object_show(secondary);
183 evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
184 evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
187 box = elm_box_add(ao);
188 evas_object_show(box);
190 o = elm_button_add(ao);
191 elm_object_text_set(o, "Send MMS");
192 elm_box_pack_end(box, o);
194 evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
195 evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
197 else if (!strncmp(info->name, "mailto:", 7))
199 elm_object_text_set(btn, "Send E-Mail");
201 secondary = elm_button_add(ao);
202 elm_object_text_set(secondary, "Add to contacts");
203 evas_object_show(secondary);
204 evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
205 evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
208 else if (!strncmp(info->name, "url:", 4))
211 elm_object_text_set(btn, "Launch in browser");
213 box = elm_box_add(ao);
214 evas_object_show(box);
216 o = elm_button_add(ao);
217 elm_object_text_set(o, "Send as mail to...");
218 elm_box_pack_end(box, o);
220 evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
221 evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
223 o = elm_button_add(ao);
224 elm_object_text_set(o, "Send as SMS to...");
225 elm_box_pack_end(box, o);
227 evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
228 evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
231 evas_object_smart_callback_add(btn, "clicked", btn_end_cb, ao);
232 evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, str);
233 elm_object_part_content_set(info->hover, "middle", btn);
237 if (info->hover_right)
238 elm_object_part_content_set(info->hover, "right", secondary);
239 else if (info->hover_left)
240 elm_object_part_content_set(info->hover, "left", secondary);
242 evas_object_del(secondary);
247 if (info->hover_bottom)
248 elm_object_part_content_set(info->hover, "bottom", box);
249 else if (info->hover_top)
250 elm_object_part_content_set(info->hover, "top", box);
252 evas_object_del(box);