Merge "[Copy&Paste] remove "Paste" button when CBHM has no item"
[framework/uifw/elementary.git] / src / bin / test_multibuttonentry.c
1 #include <Elementary.h>
2 #ifdef HAVE_CONFIG_H
3 # include "elementary_config.h"
4 #endif
5 #ifndef ELM_LIB_QUICKLAUNCH
6
7 static void _item_selected_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
8 {
9    Elm_Multibuttonentry_Item *item = (Elm_Multibuttonentry_Item *)event_info;
10    printf("\n selected item = %s\n", elm_multibuttonentry_item_label_get(item));
11
12 }
13
14 // "item,added" smart callback of multibuttonentry.
15 static void _item_added_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
16 {
17    Elm_Multibuttonentry_Item *item = (Elm_Multibuttonentry_Item *)event_info;
18    printf("\n added item = %s\n", elm_multibuttonentry_item_label_get(item));
19 }
20
21 // "item,deleted" smart callback
22 static void _item_deleted_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
23 {
24    printf("\n deleted item \n");
25 }
26
27 // "item,clicked" smart callback
28 static void _item_clicked_cb( void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info )
29 {
30    Elm_Multibuttonentry_Item *item = (Elm_Multibuttonentry_Item *)event_info;
31    printf("\n clicked item = %s \n", elm_multibuttonentry_item_label_get(item));
32 }
33
34 static void _mbe_clicked_cb( void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__ )
35 {
36    //Unset the multibuttonentry to contracted mode of single line
37    elm_multibuttonentry_shrink_mode_set(obj, 0);
38    printf("\n A multibuttonentry is clicked! \n");
39    Evas_Object *entry;
40    entry = elm_multibuttonentry_entry_get(obj);
41    if (!entry)
42      {
43        printf("%s entry is NULL\n", __func__);
44      }
45      
46    Evas_Coord x, y, w, h;
47    Evas_Coord mbe_x, mbe_y, mbe_w, mbe_h;   
48    evas_object_geometry_get(obj, &mbe_x, &mbe_y, &mbe_w, &mbe_h);
49    evas_object_geometry_get(entry, &x, &y, &w, &h);
50    printf("%s mbe x :%d y:%d w :%d h:%d\n", __func__, mbe_x, mbe_y, mbe_w, mbe_h);
51    printf("%s wd->entry x :%d y:%d w :%d h:%d\n", __func__, x, y, w, h);
52 }
53
54 static void _mbe_unfocused_cb( void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__ )
55 {
56   //Set the multibuttonentry to contracted mode of single line
57    elm_multibuttonentry_shrink_mode_set(obj, 1);
58    printf("\n A multibuttonentry is unfocused! \n");
59 }
60
61 static void _mbe_focused_cb( void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__ )
62 {
63    printf("\n A multibuttonentry is focused! \n");
64 }
65
66 // "expanded" smart callback
67 static void _expanded_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
68 {
69    printf("\n expanded! \n");
70 }
71
72 // "contracted" smart callback
73 static void _shrank_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
74 {
75    printf("\n contracted! \n");
76 }
77
78 // "contracted,state,changed" smart callback
79 static void _shrink_state_changed_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
80 {
81    printf("\n contracted state changed! \n");
82 }
83
84 // "item verified" confirm callback
85 static Eina_Bool _item_filter_cb(Evas_Object *obj __UNUSED__, const char* item_label, void *item_data __UNUSED__, void *data __UNUSED__)
86 {
87    printf("%s, label: %s\n", __func__, item_label);
88
89    return EINA_TRUE;
90 }
91
92 static void _button_clicked_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
93 {
94    printf("%s button is clicked\n", __func__);
95 }
96
97 static Evas_Object* _add_multibuttonentry(Evas_Object *parent)
98 {
99    Evas_Object *scr = NULL;
100    Evas_Object *mbe = NULL;
101    void *data = NULL;
102    
103    scr = elm_scroller_add(parent);
104    elm_scroller_bounce_set(scr, EINA_FALSE, EINA_TRUE);
105    elm_scroller_policy_set(scr, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
106    evas_object_show(scr);
107    
108    mbe = elm_multibuttonentry_add(parent);
109    elm_multibuttonentry_label_set(mbe, "To: ");
110    elm_multibuttonentry_guide_text_set(mbe, "Tap to add recipient");
111    evas_object_size_hint_weight_set(mbe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
112    evas_object_size_hint_align_set(mbe, EVAS_HINT_FILL, EVAS_HINT_FILL);
113    elm_object_content_set(scr, mbe);
114
115    // Add item verify callback to Multibuttonentry
116    elm_multibuttonentry_item_filter_append(mbe, _item_filter_cb, data);
117
118    //Add "item,selected","item,added", "item,deleted", "clicked", "unfocused", "expanded", "contracted" and "contracted,state,changed" smart callback
119    evas_object_smart_callback_add(mbe, "item,selected", _item_selected_cb, NULL);
120    evas_object_smart_callback_add(mbe, "item,added", _item_added_cb, NULL);
121    evas_object_smart_callback_add(mbe, "item,deleted", _item_deleted_cb, NULL);
122    evas_object_smart_callback_add(mbe, "item,clicked", _item_clicked_cb, NULL);
123
124    evas_object_smart_callback_add(mbe, "clicked", _mbe_clicked_cb, NULL);
125    evas_object_smart_callback_add(mbe, "focused", _mbe_focused_cb, NULL);
126    evas_object_smart_callback_add(mbe, "unfocused", _mbe_unfocused_cb, NULL);
127
128    evas_object_smart_callback_add(mbe, "expanded", _expanded_cb, NULL);
129    evas_object_smart_callback_add(mbe, "shrank", _shrank_cb, NULL);
130    evas_object_smart_callback_add(mbe, "shrink,state,changed", _shrink_state_changed_cb, NULL);
131       
132    evas_object_resize(mbe, 220, 300);
133    elm_object_focus_set(mbe, EINA_TRUE);
134
135    return scr;
136 }
137
138 static Evas_Object* _add_buttons(Evas_Object *parent)
139 {
140    Evas_Object *bx = NULL;
141    Evas_Object *btn;
142    
143    bx = elm_box_add(parent);
144    elm_box_horizontal_set(bx, EINA_TRUE);
145    elm_box_homogeneous_set(bx, EINA_TRUE);
146    
147    btn = elm_button_add(parent);
148    evas_object_smart_callback_add(btn, "clicked", _button_clicked_cb, NULL);
149    elm_object_text_set(btn, "click");
150    evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
151    evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
152    elm_box_pack_end(bx, btn);
153    evas_object_show(btn);
154
155    return bx;
156 }
157
158 void
159 test_multibuttonentry(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
160 {
161    Evas_Object *win, *bg, *sc, *bx;
162    Evas_Object *ly;
163    char buf[PATH_MAX];
164
165    win = elm_win_add(NULL, "Multibuttonentry", ELM_WIN_BASIC);
166    elm_win_title_set(win, "Multibuttonentry");
167    elm_win_autodel_set(win, EINA_TRUE);
168
169    bg = elm_bg_add(win);
170    elm_win_resize_object_add(win, bg);
171    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
172    evas_object_show(bg);
173    
174    ly = elm_layout_add(win);
175    snprintf(buf, sizeof(buf), "%s/objects/multibuttonentry.edj", elm_app_data_dir_get());
176    elm_layout_file_set(ly, buf, "multibuttonentry_test");
177    evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
178    elm_win_resize_object_add(win, ly);
179    evas_object_show(ly);
180    
181    sc = _add_multibuttonentry(ly);
182         elm_object_part_content_set(ly, "multibuttonentry", sc);
183                 
184         bx = _add_buttons(ly);
185         elm_object_part_content_set(ly, "box", bx);
186
187    evas_object_resize(win, 320, 480);
188    evas_object_show(win);
189    elm_object_focus_set(sc, EINA_TRUE);
190
191 }
192 #endif