remove comment
[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 // FIXME: how to remove main_ad? 
19 //        it's mainly used at 'clipdrawer_add_image_item'
20 struct appdata *g_main_ad = NULL;
21
22 // gic should live at gengrid callback functions
23 Elm_Gengrid_Item_Class gic;
24
25 typedef struct tag_gridimgitem
26 {
27         Elm_Gengrid_Item *item;
28         const char *path;
29 } gridimgitem_t;
30
31 static void _list_click( void *data, Evas_Object *obj, void *event_info )
32 {
33         struct appdata *ad = data;
34     Elm_List_Item *it = (Elm_List_Item *) elm_list_selected_item_get(obj);
35         if (it == NULL)
36                 return;
37
38     elm_list_item_selected_set(it, 0);
39
40         char *p = NULL;
41         int cplen;
42
43         char *cpdata = NULL;
44         cpdata = elm_list_item_label_get(it);
45         if (cpdata == NULL)
46                 return;
47         cplen = strlen(cpdata);
48         p = malloc(cplen + 1);
49         snprintf(p, cplen+1, "%s", cpdata);
50         elm_selection_set(1, obj, /*ELM_SEL_FORMAT_TEXT*/1, p);
51 //      elm_selection_set(1, obj, /*ELM_SEL_FORMAT_MARKUP*/2, p);
52
53         clipdrawer_lower_view(ad);
54 }
55
56 int clipdrawer_update_contents(void *data)
57 {
58         struct appdata *ad = data;
59         int i, pos;
60
61         elm_list_clear(ad->txtlist);
62         for (i = 0; i < HISTORY_QUEUE_NUMBER; i++)
63         {
64                 pos = get_current_history_position()+i;
65                 if (pos > HISTORY_QUEUE_NUMBER-1)
66                         pos = pos-HISTORY_QUEUE_NUMBER;
67                 if (get_item_contents_by_pos(pos) != NULL && strlen(get_item_contents_by_pos(pos)) > 0)
68                 {
69                         elm_list_item_append(ad->txtlist, get_item_contents_by_pos(pos), NULL, NULL, NULL, ad);
70                 }
71         }
72         elm_list_go(ad->txtlist);
73
74         /* FIXME : sometimes when list update, screen isn't updated */
75
76         return 0;
77 }
78
79 const char* clipdrawer_get_plain_string_from_escaped(char *escstr)
80 {
81         /* TODO : is it should be here? besides, remove dependency for entry */
82         /* NOTE : return string should be freed */
83         return elm_entry_markup_to_utf8(escstr);
84 }
85
86 Evas_Object* grid_icon_get(const void *data, Evas_Object *obj, const char *part)
87 {
88         gridimgitem_t *ti = (gridimgitem_t *)data;
89         if (!strcmp(part, "elm.swallow.icon"))
90         {
91                 Evas_Object *icon = elm_icon_add(obj);
92                 elm_icon_file_set(icon, ti->path, NULL);
93                 evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
94                 evas_object_show(icon);
95                 return icon;
96         }
97         return NULL;
98 }
99
100 static void grid_selected(void *data, Evas_Object *obj, void *event_info)
101 {
102         struct appdata *ad = data;
103         char *file, *p;
104         int len;
105         Elm_Gengrid_Item *sgobj = NULL;
106         sgobj = elm_gengrid_selected_item_get(ad->imggrid);
107         gridimgitem_t *ti = NULL;
108         ti = elm_gengrid_item_data_get(sgobj);
109
110         if (!sgobj || !ti)
111         {
112                 DTRACE("ERR: cbhm can't get the selected image\n");
113                 return;
114         }
115         len = strlen(ti->path);
116         p = malloc(len + 10);
117         snprintf(p,len+10, "file:///%s", ti->path);
118
119         elm_selection_set(/*secondary*/1,obj,/*ELM_SEL_FORMAT_IMAGE*/4,p);
120
121         clipdrawer_lower_view(ad);
122
123         elm_gengrid_item_selected_set(sgobj, EINA_FALSE);
124 }
125
126 void grid_del(const void *data, Evas_Object *obj)
127 {
128         gridimgitem_t *ti = (gridimgitem_t *)data;
129         eina_stringshare_del(ti->path);
130         free(ti);
131 }
132
133 // FIXME: how to remove main_ad? 
134 //        it's mainly used at 'clipdrawer_add_image_item'
135 int clipdrawer_add_image_item(char *imagepath)
136 {
137 //      struct appdata *ad = data;
138         gridimgitem_t *newgenimg = NULL;
139         char* filepath = NULL;
140         filepath = &imagepath[7]; // skip 'file://'
141
142         newgenimg = malloc(sizeof(gridimgitem_t));
143         newgenimg->path = eina_stringshare_add(filepath);
144         newgenimg->item = elm_gengrid_item_append(g_main_ad->imggrid, &gic, newgenimg, NULL, NULL);
145
146         return TRUE;
147 }
148
149 static void
150 clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
151 {
152         struct appdata *ad = data;
153
154         #define EDJE_CLOSE_PART_PREFIX "closebutton/"
155         if (!strncmp(source, EDJE_CLOSE_PART_PREFIX, strlen(EDJE_CLOSE_PART_PREFIX)))
156         {
157                 clipdrawer_lower_view(ad);
158         }
159 }
160
161 int clipdrawer_init(void *data)
162 {
163         struct appdata *ad = data;
164         g_main_ad = ad;
165
166         evas_object_resize(ad->win_main, CLIPDRAWER_WIDTH, CLIPDRAWER_HEIGHT);
167         evas_object_move(ad->win_main, CLIPDRAWER_POS_X, CLIPDRAWER_POS_Y);
168         evas_object_resize(ad->ly_main, CLIPDRAWER_WIDTH, CLIPDRAWER_HEIGHT);
169         evas_object_move(ad->ly_main, CLIPDRAWER_POS_X, CLIPDRAWER_POS_Y);
170
171         edje_object_signal_callback_add(elm_layout_edje_get(ad->ly_main), "mouse,up,1", "*", clipdrawer_ly_clicked, ad);
172
173         ad->imggrid = NULL;
174         ad->imggrid = elm_gengrid_add(ad->win_main);
175         elm_layout_content_set(ad->ly_main, "imagehistory/list", ad->imggrid);
176         elm_gengrid_item_size_set(ad->imggrid, 100, 100+3);
177         elm_gengrid_align_set(ad->imggrid, 0.5, 0.0);
178         elm_gengrid_horizontal_set(ad->imggrid, EINA_TRUE);
179         elm_gengrid_bounce_set(ad->imggrid, EINA_TRUE, EINA_FALSE);
180         elm_gengrid_multi_select_set(ad->imggrid, EINA_FALSE);
181         evas_object_smart_callback_add(ad->imggrid, "selected", grid_selected, ad);
182         evas_object_size_hint_weight_set(ad->imggrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
183
184
185         elm_gengrid_clear(ad->imggrid);
186
187         gic.item_style = "default_grid";
188         gic.func.label_get = NULL;
189         gic.func.icon_get = grid_icon_get;
190         gic.func.state_get = NULL;
191         gic.func.del = grid_del;
192
193         int i;
194         gridimgitem_t *newgenimg;
195
196         for (i = 0; i < N_IMAGES; i++)
197         {
198                 newgenimg = malloc(sizeof(gridimgitem_t));
199                 newgenimg->path = eina_stringshare_add(g_images_path[i]);
200                 newgenimg->item = elm_gengrid_item_append(ad->imggrid, &gic, newgenimg, NULL, NULL);
201 //              evas_object_data_set(newgenimg->item, "URI", g_images_path[i]);
202         }
203
204         evas_object_show (ad->imggrid);
205
206 // for debugging, calc image history pos
207 /*
208    Evas_Coord x, y, w, h;
209    Evas_Coord vx, vy, vw, vh;
210
211    edje_object_part_geometry_get(elm_layout_edje_get(ad->ly_main),"imagehistory/list",&x,&y,&w,&h);
212    evas_object_geometry_get (ad->imggrid, &vx,&vy,&vw,&vh);
213    fprintf(stderr, "## x = %d, y = %d, w = %d, h = %d\n", x, y, w, h);
214    fprintf(stderr, "## vx = %d, vy = %d, vw = %d, vh = %d\n", vx, vy, vw, vh);
215 */
216
217         ad->txtlist = elm_list_add(ad->win_main);
218         elm_layout_content_set(ad->ly_main, "texthistory/list", ad->txtlist);
219         elm_theme_extension_add(NULL, APP_EDJ_FILE);
220         elm_object_style_set(ad->txtlist, "extended/historylist");
221         evas_object_size_hint_weight_set(ad->txtlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
222         evas_object_smart_callback_add(ad->txtlist, "selected", _list_click, ad);
223         elm_list_item_append(ad->txtlist, "default", NULL, NULL, NULL, ad);
224
225         elm_list_go(ad->txtlist);
226
227         if (get_item_counts() != 0)
228                 clipdrawer_update_contents(ad);
229
230         return 0;
231 }
232
233 int clipdrawer_create_view(void *data)
234 {
235         struct appdata *ad = data;
236
237         clipdrawer_init(ad);
238
239         // for debug
240         // at starting, showing app view
241 //      clipdrawer_activate_view(ad);
242
243         return 0;
244 }
245
246 void clipdrawer_activate_view(void *data)
247 {
248         struct appdata *ad = data;
249         
250         if (ad->win_main)
251         {
252                 evas_object_show(ad->win_main);
253                 elm_win_activate(ad->win_main);
254         }
255 }
256
257 void clipdrawer_lower_view(void *data)
258 {
259         struct appdata *ad = data;
260         
261         if (ad->win_main)
262         {
263                 evas_object_hide(ad->win_main);
264                 elm_win_lower(ad->win_main);
265         }
266 }