[access] move mouse postion if an object has a highlight by highlight_cycle(); not...
[framework/uifw/elementary.git] / src / examples / anchorblock_example_01.c
1 /*
2  * gcc -o anchorblock_example_01 anchorblock_example_01.c `pkg-config --cflags --libs elementary`
3  */
4 #include <Elementary.h>
5
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);
8
9 EAPI_MAIN int
10 elm_main(int argc, char *argv[])
11 {
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>.";
26
27    elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
28
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);
34
35    o = elm_bg_add(win);
36    evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
37    elm_win_resize_object_add(win, o);
38    evas_object_show(o);
39
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);
45
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);
51
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,
57                                   NULL);
58    evas_object_show(o);
59    elm_object_content_set(frame, o);
60
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);
67
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,
73                                   NULL);
74    evas_object_show(o);
75    elm_object_content_set(frame, o);
76
77    elm_run();
78    elm_shutdown();
79
80    return 0;
81 }
82 ELM_MAIN()
83
84 static void _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_Smart_Cb btn_end_cb);
85
86 static void
87 _btn_anchorblock_end_cb(void *data, Evas_Object *obj, void *event_info)
88 {
89    elm_anchorblock_hover_end((Evas_Object *)data);
90 }
91
92 static void
93 _anchorblock_clicked_cb(void *data, Evas_Object *obj, void *event_info)
94 {
95    Elm_Entry_Anchorblock_Info *info = event_info;
96    _anchor_buttons_create(obj, info, _btn_anchorblock_end_cb);
97 }
98
99 static void
100 _btn_anchorview_end_cb(void *data, Evas_Object *obj, void *event_info)
101 {
102    elm_anchorview_hover_end((Evas_Object *)data);
103 }
104
105 static void
106 _anchorview_clicked_cb(void *data, Evas_Object *obj, void *event_info)
107 {
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);
112 }
113
114 static void
115 _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
116 {
117    const char *lbl = elm_object_text_get(obj);
118    printf("%s: %s\n", lbl, (char *)data);
119    eina_stringshare_del(data);
120 }
121
122 static void
123 _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_Smart_Cb btn_end_cb)
124 {
125    Evas_Object *btn, *secondary = NULL, *box = NULL;
126    char *p;
127    const char *str;
128
129    btn = elm_button_add(ao);
130    evas_object_show(btn);
131
132    p = strchr(info->name, ':');
133    if (!p)
134      {
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);
138         return;
139      }
140
141    str = eina_stringshare_add(p + 1);
142    if (!strncmp(info->name, "tel:", 4))
143      {
144         Evas_Object *o;
145         elm_object_text_set(btn, "Call");
146
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,
152                                        str);
153
154         box = elm_box_add(ao);
155         evas_object_show(box);
156
157         o = elm_button_add(ao);
158         elm_object_text_set(o, "Add to contacts");
159         elm_box_pack_end(box, o);
160         evas_object_show(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);
163
164         o = elm_button_add(ao);
165         elm_object_text_set(o, "Send MMS");
166         elm_box_pack_end(box, o);
167         evas_object_show(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);
170      }
171    else if (!strncmp(info->name, "contact:", 8))
172      {
173         Evas_Object *o;
174         elm_object_text_set(btn, "Call");
175
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,
181                                        str);
182
183         box = elm_box_add(ao);
184         evas_object_show(box);
185
186         o = elm_button_add(ao);
187         elm_object_text_set(o, "Send MMS");
188         elm_box_pack_end(box, o);
189         evas_object_show(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);
192      }
193    else if (!strncmp(info->name, "mailto:", 7))
194      {
195         elm_object_text_set(btn, "Send E-Mail");
196
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,
202                                        str);
203      }
204    else if (!strncmp(info->name, "url:", 4))
205      {
206         Evas_Object *o;
207         elm_object_text_set(btn, "Launch in browser");
208
209         box = elm_box_add(ao);
210         evas_object_show(box);
211
212         o = elm_button_add(ao);
213         elm_object_text_set(o, "Send as mail to...");
214         elm_box_pack_end(box, o);
215         evas_object_show(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);
218
219         o = elm_button_add(ao);
220         elm_object_text_set(o, "Send as SMS to...");
221         elm_box_pack_end(box, o);
222         evas_object_show(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);
225      }
226
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);
230
231    if (secondary)
232      {
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);
237         else
238           evas_object_del(secondary);
239      }
240
241    if (box)
242      {
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);
247         else
248           evas_object_del(box);
249      }
250 }