[JungWooHyun] doing merge job ~
[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 #ifdef HAVE_CONFIG_H
6 # include "elementary_config.h"
7 #else
8 # define __UNUSED__
9 #endif
10
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);
13
14 int
15 elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
16 {
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>.";
31
32    elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
33
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);
39
40    o = elm_bg_add(win);
41    evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
42    elm_win_resize_object_add(win, o);
43    evas_object_show(o);
44
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);
50
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);
56
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,
62                                   NULL);
63    evas_object_show(o);
64    elm_object_content_set(frame, o);
65
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);
72
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,
78                                   NULL);
79    evas_object_show(o);
80    elm_object_content_set(frame, o);
81
82    elm_run();
83
84    return 0;
85 }
86 ELM_MAIN();
87
88 static void _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_Smart_Cb btn_end_cb);
89
90 static void
91 _btn_anchorblock_end_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
92 {
93    elm_anchorblock_hover_end((Evas_Object *)data);
94 }
95
96 static void
97 _anchorblock_clicked_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info)
98 {
99    Elm_Entry_Anchorblock_Info *info = event_info;
100    _anchor_buttons_create(obj, info, _btn_anchorblock_end_cb);
101 }
102
103 static void
104 _btn_anchorview_end_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
105 {
106    elm_anchorview_hover_end((Evas_Object *)data);
107 }
108
109 static void
110 _anchorview_clicked_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info)
111 {
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);
116 }
117
118 static void
119 _btn_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
120 {
121    const char *lbl = elm_object_text_get(obj);
122    printf("%s: %s\n", lbl, (char *)data);
123    eina_stringshare_del(data);
124 }
125
126 static void
127 _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_Smart_Cb btn_end_cb)
128 {
129    Evas_Object *btn, *secondary = NULL, *box = NULL;
130    char *p;
131    const char *str;
132
133    btn = elm_button_add(ao);
134    evas_object_show(btn);
135
136    p = strchr(info->name, ':');
137    if (!p)
138      {
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);
142         return;
143      }
144
145    str = eina_stringshare_add(p + 1);
146    if (!strncmp(info->name, "tel:", 4))
147      {
148         Evas_Object *o;
149         elm_object_text_set(btn, "Call");
150
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,
156                                        str);
157
158         box = elm_box_add(ao);
159         evas_object_show(box);
160
161         o = elm_button_add(ao);
162         elm_object_text_set(o, "Add to contacts");
163         elm_box_pack_end(box, o);
164         evas_object_show(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);
167
168         o = elm_button_add(ao);
169         elm_object_text_set(o, "Send MMS");
170         elm_box_pack_end(box, o);
171         evas_object_show(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);
174      }
175    else if (!strncmp(info->name, "contact:", 8))
176      {
177         Evas_Object *o;
178         elm_object_text_set(btn, "Call");
179
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,
185                                        str);
186
187         box = elm_box_add(ao);
188         evas_object_show(box);
189
190         o = elm_button_add(ao);
191         elm_object_text_set(o, "Send MMS");
192         elm_box_pack_end(box, o);
193         evas_object_show(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);
196      }
197    else if (!strncmp(info->name, "mailto:", 7))
198      {
199         elm_object_text_set(btn, "Send E-Mail");
200
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,
206                                        str);
207      }
208    else if (!strncmp(info->name, "url:", 4))
209      {
210         Evas_Object *o;
211         elm_object_text_set(btn, "Launch in browser");
212
213         box = elm_box_add(ao);
214         evas_object_show(box);
215
216         o = elm_button_add(ao);
217         elm_object_text_set(o, "Send as mail to...");
218         elm_box_pack_end(box, o);
219         evas_object_show(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);
222
223         o = elm_button_add(ao);
224         elm_object_text_set(o, "Send as SMS to...");
225         elm_box_pack_end(box, o);
226         evas_object_show(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);
229      }
230
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);
234
235    if (secondary)
236      {
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);
241         else
242           evas_object_del(secondary);
243      }
244
245    if (box)
246      {
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);
251         else
252           evas_object_del(box);
253      }
254 }