tizen 2.4 release
[apps/home/quickpanel.git] / daemon / page / page_setting_all.c
1 /*
2  * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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
18 #include <Elementary.h>
19
20 #include <tzsh.h>
21 #include <tzsh_quickpanel_service.h>
22
23 #include "quickpanel-ui.h"
24 #include "common_uic.h"
25 #include "common.h"
26 #include "pager.h"
27 #include "pager_common.h"
28 #include "list_util.h"
29 #include "vi_manager.h"
30 #include "settings_gridbox.h"
31 #include "settings_view_all.h"
32 #include "quickpanel_def.h"
33
34 static void _mapbuf_enable_set(Eina_Bool is_enable);
35 static void _content_resize(int width, int height, const char *signal);
36 static int _up_cb(void *event_info, void *data);
37 static int _down_cb(void *event_info, void *data);
38 static int _scroll_start_cb(void *event_info, void *data);
39 static int _scroll_done_cb(void *event_info, void *data);
40 static int _page_changed_cb(void *event_info, void *data);
41
42 static struct info {
43         int is_scroll_freezed;
44         Evas_Object *mapbuf;
45         Evas_Object *view;
46         Evas_Object *scroller;
47         Evas_Object *layout;
48         Evas_Object *view_section_1;
49         Evas_Object *view_active_buttons;
50 } s_info = {
51         .is_scroll_freezed = 0,
52         .mapbuf = NULL,
53         .view = NULL,
54         .scroller = NULL,
55         .layout = NULL,
56         .view_section_1 = NULL,
57         .view_active_buttons = NULL,
58 };
59
60 static QP_Page_Handler page_handler  = {
61         .status = 0,
62         .name = NULL,
63
64         .mapbuf_enable_set = _mapbuf_enable_set,
65         .content_resize = _content_resize,
66         .down_cb = _down_cb,
67         .up_cb = _up_cb,
68         .scroll_start_cb = _scroll_start_cb,
69         .scroll_done_cb = _scroll_done_cb,
70         .page_changed_cb = _page_changed_cb,
71 };
72
73 static inline void _scroll_hold(Evas_Object *viewer)
74 {
75         int hold_count = 0;
76         retif(viewer == NULL, , "Invalid parameter!");
77
78         hold_count = elm_object_scroll_hold_get(viewer);
79
80         if (hold_count <= 0) {
81                 elm_object_scroll_hold_push(viewer);
82         }
83 }
84
85 static inline void _scroll_unhold(Evas_Object *viewer)
86 {
87         int i = 0, hold_count = 0;
88         retif(viewer == NULL, , "Invalid parameter!");
89
90         hold_count = elm_object_scroll_hold_get(viewer);
91
92         for (i = 0 ; i < hold_count; i++) {
93                 elm_object_scroll_hold_pop(viewer);
94         }
95 }
96
97 static void _mapbuf_enable_set(Eina_Bool is_enable)
98 {
99         Evas_Coord y;
100
101         if (s_info.mapbuf != NULL) {
102                 elm_mapbuf_enabled_set(s_info.mapbuf, is_enable);
103         }
104
105         if (is_enable) {
106                 evas_object_geometry_get(s_info.mapbuf, NULL, &y, NULL, NULL);
107                 evas_object_move(s_info.view, 0, y);
108         }
109 }
110
111 static void _content_resize(int width, int height, const char *signal)
112 {
113         struct appdata *ad = quickpanel_get_app_data();
114         retif(ad == NULL, , "invalid parameter");
115
116         if (s_info.view != NULL) {
117                 elm_object_signal_emit(s_info.view, signal, "prog");
118                 evas_object_size_hint_min_set(s_info.view, ELM_SCALE_SIZE(width), ELM_SCALE_SIZE(height));
119         }
120         if (s_info.layout != NULL) {
121                 elm_object_signal_emit(s_info.layout, signal, "prog");
122                 if (strcmp(signal, "portrait") == 0) {
123                         evas_object_size_hint_min_set(s_info.layout, ELM_SCALE_SIZE(width), ELM_SCALE_SIZE(height));
124                 } else {
125                         evas_object_size_hint_min_set(s_info.layout, ELM_SCALE_SIZE(width), ELM_SCALE_SIZE(height));
126                 }
127         }
128 }
129
130 static int _up_cb(void *event_info, void *data)
131 {
132         if (s_info.is_scroll_freezed == 0) {
133                 quickpanel_page_scroll_hold_set(EINA_TRUE);
134         }
135
136         return QP_OK;
137 }
138
139 static int _down_cb(void *event_info, void *data)
140 {
141         if (s_info.is_scroll_freezed == 0) {
142                 quickpanel_page_scroll_hold_set(EINA_FALSE);
143         }
144
145         return QP_OK;
146 }
147
148 static int _scroll_start_cb(void *event_info, void *data)
149 {
150         return QP_OK;
151 }
152
153 static int _scroll_done_cb(void *event_info, void *data)
154 {
155         quickpanel_vim_set_state_suspend();
156
157         return QP_OK;
158 }
159
160 static int _page_changed_cb(void *event_info, void *data)
161 {
162         return QP_OK;
163 }
164
165 static void _deleted_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
166 {
167         DBG("deleted view");
168         if (s_info.view_active_buttons != NULL) {
169                 quickpanel_settings_gridbox_remove(s_info.view_active_buttons);
170         }
171         if (s_info.view_section_1 != NULL) {
172                 evas_object_del(s_info.view_section_1);
173         }
174         if (s_info.layout != NULL) {
175                 evas_object_del(s_info.layout);
176         }
177         if (s_info.scroller != NULL) {
178                 evas_object_del(s_info.scroller);
179         }
180         if (s_info.view != NULL) {
181                 evas_object_del(s_info.view);
182         }
183
184         s_info.mapbuf = NULL;
185         s_info.view = NULL;
186         s_info.scroller = NULL;
187         s_info.layout = NULL;
188         s_info.view_section_1 = NULL;
189         s_info.view_active_buttons = NULL;
190 }
191
192 HAPI Evas_Object *quickpanel_page_setting_all_create(Evas_Object *parent, void *data)
193 {
194         Evas_Object *mapbuf = NULL;
195         Evas_Object *view = NULL;
196         Evas_Object *scroller = NULL;
197         Evas_Object *layout = NULL;
198
199         retif(parent == NULL, NULL, "invalid parameter");
200
201         if (s_info.view == NULL) {
202                 mapbuf = elm_mapbuf_add(parent);
203                 elm_mapbuf_enabled_set(mapbuf, EINA_FALSE);
204                 elm_mapbuf_smooth_set(mapbuf, EINA_FALSE);
205
206                 view = quickpanel_uic_load_edj(mapbuf, DEFAULT_EDJ, "quickpanel/page_setting_all_base", 0);
207                 retif(view == NULL, NULL, "failed to load editing layout");
208
209                 scroller = elm_scroller_add(view);
210                 retif(!scroller, NULL, "fail to add scroller");
211                 elm_object_style_set(scroller, "list_effect");
212                 elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
213                 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
214                 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
215                 evas_object_size_hint_fill_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
216                 evas_object_show(scroller);
217
218                 layout = quickpanel_uic_load_edj(scroller, DEFAULT_EDJ, "quickpanel/page_setting_all", 0);
219                 retif(layout == NULL, NULL, "failed to load editing layout");
220
221                 quickpanel_page_handler_set(mapbuf, &page_handler);
222                 evas_object_event_callback_add(mapbuf, EVAS_CALLBACK_DEL, _deleted_cb, NULL);
223
224                 elm_object_content_set(scroller, layout);
225                 elm_object_part_content_set(view, "object.layout", scroller);
226
227                 elm_object_content_set(mapbuf, view);
228                 evas_object_show(mapbuf);
229
230                 s_info.mapbuf = mapbuf;
231                 s_info.view = view;
232                 s_info.scroller = scroller;
233                 s_info.layout = layout;
234         }
235
236         return s_info.mapbuf;
237 }
238
239 HAPI Evas_Object *quickpanel_page_setting_all_view_get(const char *view_name)
240 {
241         retif(view_name == NULL, NULL, "invalid parameter");
242
243         if (strcmp(view_name, "VIEW") == 0) {
244                 return s_info.view;
245         } else if (strcmp(view_name, "LAYOUT") == 0) {
246                 return s_info.layout;
247         } else if (strcmp(view_name, "SECTION.1") == 0) {
248                 return s_info.view_section_1;
249         } else if (strcmp(view_name, "ACTIVE.BUTTONS") == 0) {
250                 return s_info.view_active_buttons;
251         }
252
253         return NULL;
254 }
255
256 HAPI void quickpanel_page_setting_all_view_set(const char *view_name, Evas_Object *view)
257 {
258         retif(s_info.view == NULL, , "invalid parameter");
259         retif(s_info.layout == NULL, , "invalid parameter");
260         retif(view_name == NULL, , "invalid parameter");
261         retif(view == NULL, , "invalid parameter");
262
263         if (strcmp(view_name, "SECTION.1") == 0) {
264                 elm_object_part_content_set(s_info.layout, "object.section.1", view);
265                 s_info.view_section_1 = view;
266         } else if (strcmp(view_name, "ACTIVE.BUTTONS") == 0) {
267                 elm_object_part_content_set(s_info.layout, "object.active.buttons", view);
268                 s_info.view_active_buttons = view;
269         }
270 }
271
272 HAPI void quickpanel_page_setting_all_freeze_set(Eina_Bool is_freeze)
273 {
274         if (is_freeze == EINA_TRUE) {
275                 s_info.is_scroll_freezed = 1;
276                 quickpanel_page_scroll_freeze_set(EINA_TRUE);
277                 _scroll_hold(s_info.scroller);
278         } else {
279                 s_info.is_scroll_freezed = 0;
280                 quickpanel_page_scroll_freeze_set(EINA_FALSE);
281                 _scroll_unhold(s_info.scroller);
282         }
283 }
284
285 HAPI Eina_Bool quickpanel_page_setting_all_is_page_showed(void)
286 {
287         if (quickpanel_pager_current_page_get() == PAGE_IDX_EDITING) {
288                 return EINA_TRUE;
289         }
290
291         return EINA_FALSE;
292 }
293
294 HAPI void quickpanel_page_setting_all_focus_allow_set(Eina_Bool is_enable)
295 {
296         elm_object_tree_focus_allow_set(s_info.mapbuf, is_enable);
297 }