initial upload for tizen 2.0 beta
[apps/home/gallery.git] / src / widget / gl-thumb.c
1 /*
2   * Copyright 2012  Samsung Electronics Co., Ltd
3   *
4   * Licensed under the Flora License, Version 1.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *     http://www.tizenopensource.org/license
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16
17 #include "gl-debug.h"
18 #include "gl-util.h"
19 #include "gl-drm.h"
20 #include "gl-strings.h"
21 #ifdef _USE_ROTATE_BG
22 #include "gl-rotate-bg.h"
23 #include "gl-exif.h"
24 #endif
25
26 #define GL_GRID_ICON_SIZE 156
27 #define GL_PHOTOFRAME_STYLE_VIDEO_FAVOR_BOOKMARK "default_layout_video_favor_bookmark"
28 #define GL_PHOTOFRAME_STYLE_VIDEO_BOOKMARK "default_layout_video_bookmark"
29 #define GL_PHOTOFRAME_STYLE_VIDEO_FAVOR "default_layout_video_favor"
30 #define GL_PHOTOFRAME_STYLE_VIDEO "default_layout_video"
31 #define GL_PHOTOFRAME_STYLE_FAVOR "default_layout_favor"
32 #define GL_PHOTOFRAME_STYLE_DEFAULT "default_layout"
33
34 Evas_Object *_gl_thumb_show_part_icon_image(Evas_Object *obj, char *path,
35                                             unsigned int orient,
36                                             bool is_expired_drm, int item_size)
37 {
38         GL_CHECK_NULL(obj);
39
40         Evas_Object *layout = elm_layout_add(obj);
41         GL_CHECK_NULL(layout);
42
43 #ifdef _USE_ROTATE_BG
44         Evas_Object *bg = _gl_rotate_bg_add(layout);
45 #else
46         Evas_Object *bg = elm_bg_add(layout);
47 #endif
48         if (bg == NULL) {
49                 evas_object_del(layout);
50                 return NULL;
51         }
52
53 #ifdef _USE_ROTATE_BG
54         _gl_rotate_bg_set_file(bg, path, item_size, item_size);
55         _gl_rotate_bg_rotate_image(bg, orient);
56 #else
57         elm_bg_file_set(bg, path, NULL);
58         elm_bg_load_size_set(bg, item_size, item_size);
59         evas_object_size_hint_max_set(bg, item_size, item_size);
60         evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
61         evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
62         evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
63 #endif
64
65         // TODO: Need to check the expired drm icon file...
66         /* Expired drm icon */
67         if (is_expired_drm) {
68                 elm_layout_theme_set(layout, GL_CLASS_GENGRID, GL_GRP_PHOTOFRAME,
69                                      GL_PHOTOFRAME_STYLE_FAVOR);
70                 elm_object_part_content_set(layout, "elm.swallow.icon", bg);
71
72                 Evas_Object *icon = elm_icon_add(layout);
73                 elm_icon_file_set(icon, GL_LOCK_ICON, NULL);
74                 evas_object_show(icon);
75                 elm_object_part_content_set(layout, "elm.swallow.favoricon",
76                                             icon);
77         } else {
78                 elm_layout_theme_set(layout, GL_CLASS_GENGRID, GL_GRP_PHOTOFRAME,
79                                      GL_PHOTOFRAME_STYLE_DEFAULT);
80                 elm_object_part_content_set(layout, "elm.swallow.icon", bg);
81         }
82
83         evas_object_show(layout);
84         return layout;
85 }
86
87 Evas_Object *_gl_thumb_show_part_icon_video(Evas_Object *obj, char *path,
88                                             unsigned int v_dur, int bk_len,
89                                             bool is_expired_drm,
90                                             int item_size)
91 {
92         GL_CHECK_NULL(obj);
93
94         Evas_Object *layout = elm_layout_add(obj);
95         GL_CHECK_NULL(layout);
96
97 #ifdef _USE_ROTATE_BG
98         Evas_Object *bg = _gl_rotate_bg_add(layout);
99 #else
100         Evas_Object *bg = elm_bg_add(layout);
101 #endif
102         if (bg == NULL) {
103                 evas_object_del(layout);
104                 return NULL;
105         }
106
107 #ifdef _USE_ROTATE_BG
108         _gl_rotate_bg_set_file(bg, path, item_size, item_size);
109         _gl_rotate_bg_rotate_image(bg, GL_ORIENTATION_ROT_0);
110 #else
111         elm_bg_file_set(bg, path, NULL);
112         elm_bg_load_size_set(bg, item_size, item_size);
113         evas_object_size_hint_max_set(bg, item_size, item_size);
114         evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
115         evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
116         evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
117 #endif
118
119         if (bk_len)
120                 elm_layout_theme_set(layout, GL_CLASS_GENGRID, GL_GRP_PHOTOFRAME,
121                                      GL_PHOTOFRAME_STYLE_VIDEO_BOOKMARK);
122         else if (is_expired_drm)
123                 elm_layout_theme_set(layout, GL_CLASS_GENGRID, GL_GRP_PHOTOFRAME,
124                                      GL_PHOTOFRAME_STYLE_VIDEO_FAVOR);
125         else
126                 elm_layout_theme_set(layout, GL_CLASS_GENGRID, GL_GRP_PHOTOFRAME,
127                                      GL_PHOTOFRAME_STYLE_VIDEO);
128         elm_object_part_content_set(layout, "elm.swallow.icon", bg);
129
130         // TODO: Need to check the expired drm icon file...
131         /* Expired drm icon */
132         if (is_expired_drm) {
133                 Evas_Object *icon = elm_icon_add(layout);
134                 elm_icon_file_set(icon, GL_LOCK_ICON, NULL);
135                 evas_object_show(icon);
136                 elm_object_part_content_set(layout, "elm.swallow.favoricon",
137                                             icon);
138         /* Set favourites icon */
139         }
140
141         if (bk_len) {
142                 Evas_Object *icon = elm_icon_add(layout);
143                 elm_icon_file_set(icon, GL_THUMB_BOOKMARK, NULL);
144                 evas_object_show(icon);
145                 elm_object_part_content_set(layout, "elm.swallow.bookmarkicon",
146                                             icon);
147         }
148
149         char *dur_str = _gl_get_duration_string(v_dur);
150         GL_CHECK_NULL(dur_str);
151         elm_object_part_text_set(layout, GL_GRID_TEXT, dur_str);
152         free(dur_str);
153
154         evas_object_show(layout);
155         return layout;
156 }
157
158 Evas_Object *_gl_thumb_show_part_checkbox(Evas_Object *obj, bool checked,
159                                           Evas_Smart_Cb func, const void *data)
160 {
161         GL_CHECK_NULL(func);
162         GL_CHECK_NULL(obj);
163         Evas_Object *ck = NULL;
164
165         ck = elm_check_add(obj);
166         GL_CHECK_NULL(ck);
167         elm_object_style_set(ck, GL_CHECKBOX_STYLE_GRID);
168         evas_object_propagate_events_set(ck, EINA_FALSE);
169
170         elm_check_state_set(ck, checked);
171
172         evas_object_smart_callback_add(ck, "changed", func, data);
173
174         evas_object_show(ck);
175         return ck;
176 }
177
178 Evas_Object *_gl_thumb_add_gengrid(Evas_Object *parent)
179 {
180         GL_CHECK_NULL(parent);
181         Evas_Object *grid = elm_gengrid_add(parent);
182         GL_CHECK_NULL(grid);
183         elm_gengrid_align_set(grid, 0.5, 0.0);
184         elm_gengrid_horizontal_set(grid, EINA_FALSE);
185         elm_gengrid_bounce_set(grid, EINA_FALSE, EINA_TRUE);
186         elm_gengrid_multi_select_set(grid, EINA_TRUE);
187
188         evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND,
189                                          EVAS_HINT_EXPAND);
190
191         return grid;
192 }
193
194 /* Update all gengrid item, class callback would be called again */
195 int _gl_thumb_update_gengrid(Evas_Object *view)
196 {
197         GL_CHECK_VAL(view, -1);
198
199         Elm_Object_Item *_first_it = NULL;
200         _first_it = elm_gengrid_first_item_get(view);
201         while(_first_it) {
202                 elm_gengrid_item_update(_first_it);
203                 _first_it = elm_gengrid_item_next_get(_first_it);
204         }
205
206         return 0;
207 }
208
209 int _gl_thumb_set_size(void *data, Evas_Object *view, int count, int *size)
210 {
211         GL_CHECK_VAL(view, -1);
212         GL_CHECK_VAL(data, -1);
213         gl_appdata *ad = (gl_appdata *)data;
214         int _size = (int)(GL_GRID_ICON_SIZE * ad->maininfo.win_scale);
215         int _w = (int)(GL_GRID_ITEM_SIZE_W * ad->maininfo.win_scale);
216         int _h = (int)(GL_GRID_ITEM_SIZE_H * ad->maininfo.win_scale);
217
218         if (count == GL_GRID_ITEM_ZOOM_LEVEL_01_CNT) {
219                 _size *= GL_GRID_ITEM_ZOOM_LEVEL_01;
220                 _w *= GL_GRID_ITEM_ZOOM_LEVEL_01;
221                 _h *= GL_GRID_ITEM_ZOOM_LEVEL_01;
222         } else if (count <= GL_GRID_ITEM_ZOOM_LEVEL_02_CNT) {
223                 _size *= GL_GRID_ITEM_ZOOM_LEVEL_02;
224                 _w *= GL_GRID_ITEM_ZOOM_LEVEL_02;
225                 _h *= GL_GRID_ITEM_ZOOM_LEVEL_02;
226         }
227
228         elm_gengrid_item_size_set(view, _w, _h);
229         gl_dbg("Thumb width: %d, height: %d, size: %d", _w, _h, _size);
230         if (size)
231                 *size = _size;
232         return 0;
233 }
234