change imglist from elm_photo to elm_gengrid
[framework/uifw/cbhm.git] / src / clipdrawer.c
1 #include "common.h"
2 #include "cbhm_main.h"
3 #include "storage.h"
4 #include "xcnphandler.h"
5 #include "clipdrawer.h"
6
7 #define IM      "/mnt/ums/Images/Photo/"
8 static const char *g_images_path[] = {
9         IM"1_photo.jpg",
10         IM"2_photo.jpg",
11         IM"3_photo.jpg",
12         IM"4_photo.jpg",
13         IM"5_photo.jpg",
14         IM"6_photo.jpg",
15 };
16 #define N_IMAGES (6)
17
18 typedef struct tag_imgitem
19 {
20         Elm_Gengrid_Item *item;
21         const char *path;
22         const char *filename;
23         Evas_Object* ck;
24 } imgitem_t;
25
26 Elm_Gengrid_Item_Class gic;
27 imgitem_t oneimg[N_IMAGES];
28
29 static void
30 _image_click(void *data, Evas_Object *obj, void *event_info)
31 {
32         struct appdata *ad = data;
33         char *p,*file;
34         int len;
35         file = evas_object_data_get(obj, "URI");
36         len = strlen(file);
37         p = malloc(len + 10);
38         snprintf(p,len+10,"file:///%s",file);
39
40         elm_selection_set(/*secondary*/1,obj,/*ELM_SEL_FORMAT_IMAGE*/4,p);
41
42         clipdrawer_lower_view(ad);
43 }
44
45 static void _list_click( void *data, Evas_Object *obj, void *event_info )
46 {
47         struct appdata *ad = data;
48     Elm_List_Item *it = (Elm_List_Item *) elm_list_selected_item_get(obj);
49         if (it == NULL)
50                 return;
51
52     elm_list_item_selected_set(it, 0);
53
54         char *p = NULL;
55         int cplen;
56
57         char *cpdata = NULL;
58         cpdata = elm_list_item_label_get(it);
59         if (cpdata == NULL)
60                 return;
61         cplen = strlen(cpdata);
62         p = malloc(cplen + 1);
63         snprintf(p, cplen+1, "%s", cpdata);
64         elm_selection_set(1, obj, /*ELM_SEL_FORMAT_TEXT*/1, p);
65 //      elm_selection_set(1, obj, /*ELM_SEL_FORMAT_MARKUP*/2, p);
66
67         clipdrawer_lower_view(ad);
68 }
69
70 int clipdrawer_update_contents(void *data)
71 {
72         struct appdata *ad = data;
73         int i, pos;
74
75         elm_list_clear(ad->txtlist);
76         for (i = 0; i < HISTORY_QUEUE_NUMBER; i++)
77         {
78                 pos = get_current_history_position()+i;
79                 if (pos > HISTORY_QUEUE_NUMBER-1)
80                         pos = pos-HISTORY_QUEUE_NUMBER;
81                 if (get_item_contents_by_pos(pos) != NULL && strlen(get_item_contents_by_pos(pos)) > 0)
82                 {
83                         elm_list_item_append(ad->txtlist, get_item_contents_by_pos(pos), NULL, NULL, NULL, ad);
84                 }
85         }
86         elm_list_go(ad->txtlist);
87
88         /* FIXME : sometimes when list update, screen isn't updated */
89
90         return 0;
91 }
92
93 const char* clipdrawer_get_plain_string_from_escaped(char *escstr)
94 {
95         /* TODO : is it should be here? besides, remove dependency for entry */
96         /* NOTE : return string should be freed */
97         return elm_entry_markup_to_utf8(escstr);
98 }
99
100 Evas_Object* grid_icon_get(const void *data, Evas_Object *obj, const char *part)
101 {
102         imgitem_t *ti = (imgitem_t *)data;
103         if (!strcmp(part, "elm.swallow.icon"))
104         {
105                 Evas_Object *icon = elm_icon_add(obj);
106                 elm_icon_file_set(icon, ti->path, NULL);
107                 evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
108                 evas_object_show(icon);
109                 return icon;
110         }
111         return NULL;
112 }
113
114 int clipdrawer_init(void *data)
115 {
116         struct appdata *ad = data;
117
118         evas_object_resize(ad->win_main, 480, 360);
119         evas_object_move(ad->win_main, 0, 440);
120         evas_object_resize(ad->ly_main, 480, 360);
121         evas_object_move(ad->ly_main, 0, 440);
122
123         ad->imglist = NULL;
124         ad->imglist = elm_gengrid_add(ad->win_main);
125         elm_layout_content_set(ad->ly_main, "cbhmdrawer/imglist", ad->imglist);
126         elm_gengrid_item_size_set(ad->imglist, 125, 135);
127         elm_gengrid_align_set(ad->imglist, 0.5, 0.0);
128         elm_gengrid_horizontal_set(ad->imglist, EINA_TRUE);
129         elm_gengrid_bounce_set(ad->imglist, EINA_TRUE, EINA_FALSE);
130         elm_gengrid_multi_select_set(ad->imglist, EINA_FALSE);
131         evas_object_size_hint_weight_set(ad->imglist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
132
133         elm_gengrid_clear(ad->imglist);
134
135         gic.item_style = "default_grid";
136         gic.func.label_get = NULL;
137         gic.func.icon_get = grid_icon_get;
138         gic.func.state_get = NULL;
139         gic.func.del = NULL;
140
141         int i;
142         for (i = 0; i < N_IMAGES; i++)
143         {
144                 oneimg[i].path = eina_stringshare_add(g_images_path[i]);
145                 oneimg[i].item = elm_gengrid_item_append(ad->imglist, &gic, &(oneimg[i]), NULL, NULL);
146         }
147
148         evas_object_show (ad->imglist);
149
150         ad->txtlist = elm_list_add(ad->win_main);
151         elm_layout_content_set(ad->ly_main, "cbhmdrawer/txtlist", ad->txtlist);
152         elm_list_horizontal_mode_set(ad->txtlist, ELM_LIST_COMPRESS);
153         evas_object_smart_callback_add(ad->txtlist, "selected", _list_click, ad);
154         elm_list_item_append(ad->txtlist, "default", NULL, NULL, NULL, ad);
155
156         elm_list_go(ad->txtlist);
157
158         if (get_item_counts() != 0)
159                 clipdrawer_update_contents(ad);
160
161         return 0;
162 }
163
164 int clipdrawer_create_view(void *data)
165 {
166         struct appdata *ad = data;
167
168         clipdrawer_init(ad);
169
170         // for debug
171         // at starting, showing app view
172         //clipdrawer_activate_view(ad);
173
174         return 0;
175 }
176
177 void clipdrawer_activate_view(void *data)
178 {
179         struct appdata *ad = data;
180         
181         if (ad->win_main)
182         {
183                 evas_object_show(ad->win_main);
184                 elm_win_activate(ad->win_main);
185         }
186 }
187
188 void clipdrawer_lower_view(void *data)
189 {
190         struct appdata *ad = data;
191         
192         if (ad->win_main)
193         {
194                 evas_object_hide(ad->win_main);
195                 elm_win_lower(ad->win_main);
196         }
197 }