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 <notification.h>
23 #include <tzsh_quickpanel_service.h>
28 #include "quickpanel_def.h"
29 #include "quickpanel-ui.h"
30 #include "setting_utils.h"
31 #ifdef QP_SCREENREADER_ENABLE
32 #include "accessibility.h"
35 #define DEFAULT_EDJ EDJDIR"/"PACKAGE".edj"
36 #define _EDJ(o) elm_layout_edje_get(o)
39 #define QP_SETTING_INITIAL_PAGE_NUM 0
40 #define DIVIDER_MAGIC 0xCAFECAFE
41 #define E_DATA_DIVIDER_MAGIC "divider_magic"
43 static inline void __escaped_text_set(Evas_Object *obj, const char *part, const char *text)
56 strncpy(buf, text, sizeof(buf) - 1);
57 quickpanel_common_util_char_trim(buf);
58 ecaped = evas_textblock_text_utf8_to_markup(NULL, buf);
60 elm_object_part_text_set(obj, part, ecaped);
67 HAPI int quickpanel_setting_icon_text_set(Evas_Object *icon, const char *text, int state)
69 retif(icon == NULL, QP_FAIL, "invalid parameter");
70 retif(text == NULL, QP_FAIL, "invalid parameter");
72 __escaped_text_set(icon, "icon.text", text);
74 #ifdef QP_SCREENREADER_ENABLE
76 Evas_Object *ao = NULL;
78 ao = quickpanel_accessibility_screen_reader_object_get(icon,
79 SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
81 elm_access_info_set(ao, ELM_ACCESS_TYPE, _NOT_LOCALIZED("Button"));
82 strncpy(buf, text, sizeof(buf) - 1);
83 quickpanel_common_util_char_replace(buf, '\n', ' ');
84 elm_access_info_set(ao, ELM_ACCESS_INFO, buf);
87 ao = quickpanel_accessibility_screen_reader_object_get(icon,
88 SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
90 if (state == ICON_VIEW_STATE_ON) {
91 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("On"));
92 } else if (state == ICON_VIEW_STATE_DIM) {
93 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Turned off"));
94 } else if (state == ICON_VIEW_STATE_OFF) {
95 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Off"));
103 HAPI void quickpanel_setting_icon_access_text_set(Evas_Object *icon, const char *text)
105 #ifdef QP_SCREENREADER_ENABLE
106 char buf[256] = {0,};
107 Evas_Object *ao = NULL;
110 retif(icon == NULL, , "invalid parameter");
111 retif(text == NULL, , "invalid parameter");
113 #ifdef QP_SCREENREADER_ENABLE
114 ao = quickpanel_accessibility_screen_reader_object_get(icon,
115 SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
117 elm_access_info_set(ao, ELM_ACCESS_TYPE, _NOT_LOCALIZED("Button"));
118 strncpy(buf, text, sizeof(buf) - 1);
119 quickpanel_common_util_char_replace(buf, '\n', ' ');
120 elm_access_info_set(ao, ELM_ACCESS_INFO, buf);
125 HAPI Evas_Object *quickpanel_setting_icon_content_get(Evas_Object *icon)
127 retif(icon == NULL, NULL, "invalid parameter");
129 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
130 retif(ad == NULL, NULL, "application data is NULL");
132 return elm_object_part_content_get(icon, "icon.swallow.wvga");
135 HAPI int quickpanel_setting_icon_content_set(Evas_Object *icon, Evas_Object *content)
137 retif(icon == NULL, QP_FAIL, "invalid parameter");
138 retif(content == NULL, QP_FAIL, "invalid parameter");
140 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
141 retif(ad == NULL, QP_FAIL, "application data is NULL");
143 elm_object_part_content_set(icon, "icon.swallow.wvga", content);
148 HAPI int quickpanel_setting_icon_state_set(Evas_Object *icon, int state)
150 #ifdef QP_SCREENREADER_ENABLE
151 Evas_Object *ao = NULL;
153 retif(icon == NULL, -1, "invalid parameter");
154 SERR("icon:%p state:%d", icon, state);
156 #ifdef QP_SCREENREADER_ENABLE
157 ao = quickpanel_accessibility_screen_reader_object_get(icon,
158 SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
160 if (state == ICON_VIEW_STATE_ON) {
161 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("On"));
162 } else if (state == ICON_VIEW_STATE_DIM) {
163 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Turned off"));
164 } else if (state == ICON_VIEW_STATE_OFF) {
165 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Off"));
170 if (state == ICON_VIEW_STATE_ON) {
171 elm_object_signal_emit(icon, "icon.on", "quickpanl.prog");
172 } else if (state == ICON_VIEW_STATE_DIM) {
173 elm_object_signal_emit(icon, "icon.dim", "quickpanl.prog");
175 elm_object_signal_emit(icon, "icon.off", "quickpanl.prog");
178 edje_object_message_signal_process(_EDJ(icon));
183 HAPI int quickpanel_setting_icon_state_progress_set(Evas_Object *icon)
185 retif(icon == NULL, -1, "invalid parameter");
187 elm_object_signal_emit(icon, "icon.progress", "quickpanl.prog");
188 edje_object_message_signal_process(_EDJ(icon));
193 HAPI Evas_Object *quickpanel_setting_icon_new(Evas_Object *parent)
195 const char *signal = NULL;
196 Evas_Object *icon = NULL;
197 retif(parent == NULL, NULL, "invalid parameter");
199 struct appdata *ad = quickpanel_get_app_data();
200 retif(ad == NULL, EINA_FALSE, "invalid data.");
202 icon = elm_layout_add(parent);
203 retif(!icon, NULL, "fail to add layout");
205 elm_layout_file_set(icon, DEFAULT_EDJ, "quickpanel/setting_icon_wvga");
207 evas_object_size_hint_weight_set(icon,
208 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
209 elm_object_signal_emit(icon, "icon.off", "quickpanl.prog");
211 Evas_Object *focus = quickpanel_accessibility_ui_get_focus_object(icon);
212 elm_object_part_content_set(icon, "focus", focus);
214 if (ad->angle == 0 || ad->angle == 180) {
215 signal = "icon.portrait";
217 signal = "icon.landscape";
220 elm_object_signal_emit(icon, signal, "quickpanl.prog");
221 edje_object_message_signal_process(_EDJ(icon));
226 HAPI Evas_Object *quickpanel_setting_icon_image_new(Evas_Object *parent, const char *img_path)
228 Evas_Object *content = NULL;
229 retif(parent == NULL, NULL, "invalid parameter");
230 retif(img_path == NULL, NULL, "invalid parameter");
232 content = elm_image_add(parent);
233 retif(content == NULL, NULL, "failed to create image");
235 if (!elm_image_file_set(content, DEFAULT_EDJ, img_path)) {
236 ERR("fail to set file[%s]", img_path);
237 evas_object_del(content);
245 static Evas_Object *quickpanel_setting_container_get(Evas_Object *base)
247 Evas_Object *container = NULL;
248 retif(base == NULL, NULL, "invalid parameter");
250 container = elm_object_part_content_get(base, QP_SETTING_BASE_PART);
255 HAPI Evas_Object *quickpanel_setting_scroller_get(Evas_Object *base)
257 Evas_Object *container = NULL;
258 Evas_Object *scroller = NULL;
259 retif(base == NULL, NULL, "invalid parameter");
261 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
262 retif(ad == NULL, NULL, "application data is NULL");
264 container = quickpanel_setting_container_get(base);
266 scroller = elm_object_part_content_get(container, QP_SETTING_SCROLLER_PART_WVGA);
268 retif(scroller == NULL, NULL, "invalid parameter");
273 HAPI Evas_Object *quickpanel_setting_box_get_from_scroller(Evas_Object *base)
275 Evas_Object *scroller = NULL;
276 Evas_Object *box = NULL;
277 retif(base == NULL, NULL, "invalid parameter");
279 scroller = quickpanel_setting_scroller_get(base);
280 retif(scroller == NULL, NULL, "invalid parameter");
282 box = elm_object_content_get(scroller);
287 HAPI Evas_Object *quickpanel_setting_box_get(Evas_Object *base)
289 Evas_Object *container = NULL;
290 Evas_Object *box = NULL;
291 retif(base == NULL, NULL, "invalid parameter");
293 container = quickpanel_setting_container_get(base);
294 retif(container == NULL, NULL, "invalid parameter");
295 box = elm_object_part_content_get(container, QP_SETTING_SCROLLER_PART_WVGA);
300 HAPI int quickpanel_setting_container_rotation_set(Evas_Object *base, int angle)
302 Evas_Object *container = NULL;
303 const char *signal = NULL;
305 retif(!base, -1, "base is NULL");
306 retif(angle < 0, -1, "angle is %d", angle);
308 container = quickpanel_setting_container_get(base);
309 retif(!container, -1, "box is NULL");
311 if (angle % 180 == 0) {
314 signal = "landscape";
317 elm_object_signal_emit(container, signal, "background");
318 edje_object_message_signal_process(_EDJ(container));
323 HAPI int quickpanel_setting_icons_rotation_set(Evas_Object *base, int angle)
325 Evas_Object *box = NULL;
326 Evas_Object *icon = NULL;
327 Eina_List *icons = NULL;
329 const char *signal = NULL;
331 retif(!base, -1, "base is NULL");
332 retif(angle < 0, -1, "angle is %d", angle);
334 box = quickpanel_setting_box_get(base);
335 retif(!box, -1, "box is NULL");
337 icons = elm_box_children_get(box);
338 retif(!icons, -1, "icons list is NULL");
340 if (angle % 180 == 0) {
341 signal = "icon.portrait";
343 signal = "icon.landscape";
346 EINA_LIST_FOREACH(icons, l, icon) {
347 elm_object_signal_emit(icon, signal, "quickpanl.prog");
348 edje_object_message_signal_process(_EDJ(icon));
351 eina_list_free(icons);
356 HAPI void quickpanel_setting_icons_emit_sig(Evas_Object *icon, const char *signal)
358 retif(!icon, , "icon is NULL");
359 retif(!signal, , "icon is NULL");
361 elm_object_signal_emit(icon, signal, "quickpanl.prog");
362 edje_object_message_signal_process(_EDJ(icon));
365 HAPI int quickpanel_setting_icons_dragging_set(Evas_Object *icon, int is_on)
367 const char *signal = NULL;
368 retif(!icon, QP_FAIL, "icon is NULL");
371 signal = "dragging.on";
373 signal = "dragging.off";
376 elm_object_signal_emit(icon, signal, "quickpanl.prog");
377 edje_object_message_signal_process(_EDJ(icon));
382 HAPI int quickpanel_setting_icons_screen_mode_set(Evas_Object *icon, int screen_mode)
384 const char *signal = NULL;
385 retif(!icon, QP_FAIL, "icon is NULL");
387 if (screen_mode == 0) {
388 signal = "icon.portrait";
390 signal = "icon.landscape";
393 elm_object_signal_emit(icon, signal, "quickpanl.prog");
394 edje_object_message_signal_process(_EDJ(icon));
399 HAPI int quickpanel_setting_icon_pack(Evas_Object *box, Evas_Object *icon, int is_attach_divider)
401 retif(box == NULL, QP_FAIL, "box is NULL");
403 elm_box_pack_end(box, icon);
408 HAPI void quickpanel_setting_icon_unpack_all(Evas_Object *box)
412 Evas_Object *node = NULL;
413 Eina_List *list = NULL;
414 retif(box == NULL, , "invalid parameter");
416 list = elm_box_children_get(box);
417 retif(list == NULL, , "empty list");
419 elm_box_unpack_all(box);
421 EINA_LIST_FOREACH_SAFE(list, l, l_next, node) {
423 if (evas_object_data_get(node, E_DATA_DIVIDER_MAGIC) == (void *)DIVIDER_MAGIC) {
424 evas_object_del(node);
430 eina_list_free(list);
433 HAPI int quickpanel_setting_scroll_page_get(void *data)
436 struct appdata *ad = NULL;
437 retif(data == NULL, QP_FAIL, "Invalid parameter!");
440 retif(!ad->ly, QP_FAIL, "layout is NULL!");
442 Evas_Object *scroller = quickpanel_setting_scroller_get(ad->ly);
443 elm_scroller_current_page_get(scroller, &page_h, NULL);
448 HAPI int quickpanel_setting_set_scroll_page_width(void *data)
450 struct appdata *ad = NULL;
451 retif(data == NULL, QP_FAIL, "Invalid parameter!");
454 retif(!ad->ly, QP_FAIL, "layout is NULL!");
456 Evas_Object *scroller = quickpanel_setting_scroller_get(ad->ly);
459 elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
460 elm_scroller_page_size_set(scroller, w / QP_SETTING_NUM_PORTRAIT_ICONS, 0);
465 HAPI int quickpanel_setting_start(Evas_Object *base)
467 Evas_Object *scroller = NULL;
468 retif(base == NULL, QP_FAIL, "Invalid parameter!");
470 scroller = quickpanel_setting_scroller_get(base);
471 retif(scroller == NULL, QP_FAIL, "Invalid parameter!");
473 elm_scroller_page_bring_in(scroller, 0, 0);
478 HAPI int quickpanel_setting_stop(Evas_Object *base, int is_bring_in)
480 int page = QP_SETTING_INITIAL_PAGE_NUM;
481 Evas_Object *scroller = NULL;
482 retif(base == NULL, QP_FAIL, "Invalid parameter!");
484 scroller = quickpanel_setting_scroller_get(base);
485 retif(scroller == NULL, QP_FAIL, "Invalid parameter!");
487 if (is_bring_in == 1) {
488 elm_scroller_page_bring_in(scroller, page, 0);
490 elm_scroller_page_show(scroller, page, 0);
496 HAPI int quickpanel_setting_layout_set(Evas_Object *base, Evas_Object *setting)
498 retif(base == NULL, QP_FAIL, "Invalid parameter!");
499 retif(setting == NULL, QP_FAIL, "Invalid parameter!");
501 elm_object_part_content_set(base, QP_SETTING_BASE_PART, setting);
506 HAPI Evas_Object *quickpanel_setting_layout_get(Evas_Object *base, const char *setting_part)
508 retif(base == NULL, NULL, "Invalid parameter!");
509 retif(setting_part == NULL, NULL, "Invalid parameter!");
511 return elm_object_part_content_get(base, setting_part);
514 HAPI int quickpanel_setting_layout_remove(Evas_Object *base)
516 Evas_Object *container = NULL;
517 Evas_Object *scroller = NULL;
518 Evas_Object *box = NULL;
519 retif(base == NULL, QP_FAIL, "Invalid parameter!");
521 container = quickpanel_setting_container_get(base);
522 scroller = quickpanel_setting_scroller_get(base);
523 box = quickpanel_setting_box_get(base);
527 evas_object_del(box);
531 evas_object_del(scroller);
535 evas_object_del(container);
542 HAPI void quickpanel_setting_create_confirm_popup(
548 Evas_Object *popup = elm_popup_add(parent);
549 Evas_Object *btn = NULL;
555 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
559 elm_object_part_text_set(popup, "title,text", title);
563 elm_object_text_set(popup, text);
566 btn = elm_button_add(popup);
567 elm_object_style_set(btn, "popup");
568 elm_object_text_set(btn, _("IDS_ST_SK_OK"));
569 elm_object_part_content_set(popup, "button1", btn);
570 evas_object_smart_callback_add(btn, "clicked", func, popup);
572 evas_object_show(popup);
573 quickpanel_common_ui_set_current_popup(popup, func);
576 HAPI void quickpanel_setting_create_2button_confirm_popup(
581 Evas_Smart_Cb btn1_func,
583 Evas_Smart_Cb btn2_func)
585 Evas_Object *popup = elm_popup_add(parent);
586 Evas_Object *btn = NULL;
592 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
596 elm_object_part_text_set(popup, "title,text", title);
600 elm_object_text_set(popup, text);
603 if (btn1_func != NULL && btn1_text != NULL) {
604 btn = elm_button_add(popup);
605 elm_object_style_set(btn, "popup");
606 elm_object_text_set(btn, btn1_text);
607 elm_object_part_content_set(popup, "button1", btn);
608 evas_object_smart_callback_add(btn, "clicked", btn1_func, popup);
610 if (btn2_func != NULL && btn2_text != NULL) {
611 btn = elm_button_add(popup);
612 elm_object_style_set(btn, "popup");
613 elm_object_text_set(btn, btn2_text);
614 elm_object_part_content_set(popup, "button2", btn);
615 evas_object_smart_callback_add(btn, "clicked", btn2_func, popup);
618 evas_object_show(popup);
619 quickpanel_common_ui_set_current_popup(popup, btn1_func);
622 HAPI void quickpanel_setting_create_timeout_popup(Evas_Object *parent, char *msg)
624 retif(msg == NULL, , "invalid parameter");
626 notification_status_message_post(msg);