2 * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include <Elementary.h>
21 #include <tzsh_quickpanel_service.h>
23 #include "quickpanel-ui.h"
24 #include "common_uic.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"
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);
43 int is_scroll_freezed;
46 Evas_Object *scroller;
48 Evas_Object *view_section_1;
49 Evas_Object *view_active_buttons;
51 .is_scroll_freezed = 0,
56 .view_section_1 = NULL,
57 .view_active_buttons = NULL,
60 static QP_Page_Handler page_handler = {
64 .mapbuf_enable_set = _mapbuf_enable_set,
65 .content_resize = _content_resize,
68 .scroll_start_cb = _scroll_start_cb,
69 .scroll_done_cb = _scroll_done_cb,
70 .page_changed_cb = _page_changed_cb,
73 static inline void _scroll_hold(Evas_Object *viewer)
76 retif(viewer == NULL, , "Invalid parameter!");
78 hold_count = elm_object_scroll_hold_get(viewer);
80 if (hold_count <= 0) {
81 elm_object_scroll_hold_push(viewer);
85 static inline void _scroll_unhold(Evas_Object *viewer)
87 int i = 0, hold_count = 0;
88 retif(viewer == NULL, , "Invalid parameter!");
90 hold_count = elm_object_scroll_hold_get(viewer);
92 for (i = 0 ; i < hold_count; i++) {
93 elm_object_scroll_hold_pop(viewer);
97 static void _mapbuf_enable_set(Eina_Bool is_enable)
101 if (s_info.mapbuf != NULL) {
102 elm_mapbuf_enabled_set(s_info.mapbuf, is_enable);
106 evas_object_geometry_get(s_info.mapbuf, NULL, &y, NULL, NULL);
107 evas_object_move(s_info.view, 0, y);
111 static void _content_resize(int width, int height, const char *signal)
113 struct appdata *ad = quickpanel_get_app_data();
114 retif(ad == NULL, , "invalid parameter");
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));
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));
125 evas_object_size_hint_min_set(s_info.layout, ELM_SCALE_SIZE(width), ELM_SCALE_SIZE(height));
130 static int _up_cb(void *event_info, void *data)
132 if (s_info.is_scroll_freezed == 0) {
133 quickpanel_page_scroll_hold_set(EINA_TRUE);
139 static int _down_cb(void *event_info, void *data)
141 if (s_info.is_scroll_freezed == 0) {
142 quickpanel_page_scroll_hold_set(EINA_FALSE);
148 static int _scroll_start_cb(void *event_info, void *data)
153 static int _scroll_done_cb(void *event_info, void *data)
155 quickpanel_vim_set_state_suspend();
160 static int _page_changed_cb(void *event_info, void *data)
165 static void _deleted_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
168 if (s_info.view_active_buttons != NULL) {
169 quickpanel_settings_gridbox_remove(s_info.view_active_buttons);
171 if (s_info.view_section_1 != NULL) {
172 evas_object_del(s_info.view_section_1);
174 if (s_info.layout != NULL) {
175 evas_object_del(s_info.layout);
177 if (s_info.scroller != NULL) {
178 evas_object_del(s_info.scroller);
180 if (s_info.view != NULL) {
181 evas_object_del(s_info.view);
184 s_info.mapbuf = 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;
192 HAPI Evas_Object *quickpanel_page_setting_all_create(Evas_Object *parent, void *data)
194 Evas_Object *mapbuf = NULL;
195 Evas_Object *view = NULL;
196 Evas_Object *scroller = NULL;
197 Evas_Object *layout = NULL;
199 retif(parent == NULL, NULL, "invalid parameter");
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);
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");
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);
218 layout = quickpanel_uic_load_edj(scroller, DEFAULT_EDJ, "quickpanel/page_setting_all", 0);
219 retif(layout == NULL, NULL, "failed to load editing layout");
221 quickpanel_page_handler_set(mapbuf, &page_handler);
222 evas_object_event_callback_add(mapbuf, EVAS_CALLBACK_DEL, _deleted_cb, NULL);
224 elm_object_content_set(scroller, layout);
225 elm_object_part_content_set(view, "object.layout", scroller);
227 elm_object_content_set(mapbuf, view);
228 evas_object_show(mapbuf);
230 s_info.mapbuf = mapbuf;
232 s_info.scroller = scroller;
233 s_info.layout = layout;
236 return s_info.mapbuf;
239 HAPI Evas_Object *quickpanel_page_setting_all_view_get(const char *view_name)
241 retif(view_name == NULL, NULL, "invalid parameter");
243 if (strcmp(view_name, "VIEW") == 0) {
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;
256 HAPI void quickpanel_page_setting_all_view_set(const char *view_name, Evas_Object *view)
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");
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;
272 HAPI void quickpanel_page_setting_all_freeze_set(Eina_Bool is_freeze)
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);
279 s_info.is_scroll_freezed = 0;
280 quickpanel_page_scroll_freeze_set(EINA_FALSE);
281 _scroll_unhold(s_info.scroller);
285 HAPI Eina_Bool quickpanel_page_setting_all_is_page_showed(void)
287 if (quickpanel_pager_current_page_get() == PAGE_IDX_EDITING) {
294 HAPI void quickpanel_page_setting_all_focus_allow_set(Eina_Bool is_enable)
296 elm_object_tree_focus_allow_set(s_info.mapbuf, is_enable);