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 #if defined(WINSYS_X11)
25 #include <notification.h>
27 #include <tzsh_quickpanel_service.h>
31 #include "quickpanel_def.h"
32 #include "quickpanel-ui.h"
33 #include "setting_utils.h"
34 #ifdef QP_SCREENREADER_ENABLE
35 #include "accessibility.h"
38 #define DEFAULT_EDJ EDJDIR"/"PACKAGE".edj"
39 #define _EDJ(o) elm_layout_edje_get(o)
42 #define QP_SETTING_INITIAL_PAGE_NUM 0
43 #define DIVIDER_MAGIC 0xCAFECAFE
44 #define E_DATA_DIVIDER_MAGIC "divider_magic"
46 static inline void __escaped_text_set(Evas_Object *obj, const char *part, const char *text)
59 strncpy(buf, text, sizeof(buf) - 1);
60 quickpanel_common_util_char_trim(buf);
61 ecaped = evas_textblock_text_utf8_to_markup(NULL, buf);
63 elm_object_part_text_set(obj, part, ecaped);
70 HAPI int quickpanel_setting_icon_text_set(Evas_Object *icon, const char *text, int state)
72 retif(icon == NULL, QP_FAIL, "invalid parameter");
73 retif(text == NULL, QP_FAIL, "invalid parameter");
75 __escaped_text_set(icon, "icon.text", text);
77 #ifdef QP_SCREENREADER_ENABLE
79 Evas_Object *ao = NULL;
81 ao = quickpanel_accessibility_screen_reader_object_get(icon,
82 SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
84 elm_access_info_set(ao, ELM_ACCESS_TYPE, _NOT_LOCALIZED("Button"));
85 strncpy(buf, text, sizeof(buf) - 1);
86 quickpanel_common_util_char_replace(buf, '\n', ' ');
87 elm_access_info_set(ao, ELM_ACCESS_INFO, buf);
90 ao = quickpanel_accessibility_screen_reader_object_get(icon,
91 SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
93 if (state == ICON_VIEW_STATE_ON) {
94 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("On"));
95 } else if (state == ICON_VIEW_STATE_DIM) {
96 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Turned off"));
97 } else if (state == ICON_VIEW_STATE_OFF) {
98 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Off"));
106 HAPI void quickpanel_setting_icon_access_text_set(Evas_Object *icon, const char *text)
108 #ifdef QP_SCREENREADER_ENABLE
109 char buf[256] = {0,};
110 Evas_Object *ao = NULL;
113 retif(icon == NULL, , "invalid parameter");
114 retif(text == NULL, , "invalid parameter");
116 #ifdef QP_SCREENREADER_ENABLE
117 ao = quickpanel_accessibility_screen_reader_object_get(icon,
118 SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
120 elm_access_info_set(ao, ELM_ACCESS_TYPE, _NOT_LOCALIZED("Button"));
121 strncpy(buf, text, sizeof(buf) - 1);
122 quickpanel_common_util_char_replace(buf, '\n', ' ');
123 elm_access_info_set(ao, ELM_ACCESS_INFO, buf);
128 HAPI Evas_Object *quickpanel_setting_icon_content_get(Evas_Object *icon)
130 retif(icon == NULL, NULL, "invalid parameter");
132 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
133 retif(ad == NULL, NULL, "application data is NULL");
135 return elm_object_part_content_get(icon, "icon.swallow.wvga");
138 HAPI int quickpanel_setting_icon_content_set(Evas_Object *icon, Evas_Object *content)
140 retif(icon == NULL, QP_FAIL, "invalid parameter");
141 retif(content == NULL, QP_FAIL, "invalid parameter");
143 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
144 retif(ad == NULL, QP_FAIL, "application data is NULL");
146 elm_object_part_content_set(icon, "icon.swallow.wvga", content);
151 HAPI int quickpanel_setting_icon_state_set(Evas_Object *icon, int state)
153 #ifdef QP_SCREENREADER_ENABLE
154 Evas_Object *ao = NULL;
156 retif(icon == NULL, -1, "invalid parameter");
157 SERR("icon:%p state:%d", icon, state);
159 #ifdef QP_SCREENREADER_ENABLE
160 ao = quickpanel_accessibility_screen_reader_object_get(icon,
161 SCREEN_READER_OBJ_TYPE_ELM_OBJECT, "focus", icon);
163 if (state == ICON_VIEW_STATE_ON) {
164 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("On"));
165 } else if (state == ICON_VIEW_STATE_DIM) {
166 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Turned off"));
167 } else if (state == ICON_VIEW_STATE_OFF) {
168 elm_access_info_set(ao, ELM_ACCESS_STATE, _NOT_LOCALIZED("Off"));
173 if (state == ICON_VIEW_STATE_ON) {
174 elm_object_signal_emit(icon, "icon.on", "quickpanl.prog");
175 } else if (state == ICON_VIEW_STATE_DIM) {
176 elm_object_signal_emit(icon, "icon.dim", "quickpanl.prog");
178 elm_object_signal_emit(icon, "icon.off", "quickpanl.prog");
181 edje_object_message_signal_process(_EDJ(icon));
186 HAPI int quickpanel_setting_icon_state_progress_set(Evas_Object *icon)
188 retif(icon == NULL, -1, "invalid parameter");
190 elm_object_signal_emit(icon, "icon.progress", "quickpanl.prog");
191 edje_object_message_signal_process(_EDJ(icon));
196 HAPI Evas_Object *quickpanel_setting_icon_new(Evas_Object *parent)
198 const char *signal = NULL;
199 Evas_Object *icon = NULL;
200 retif(parent == NULL, NULL, "invalid parameter");
202 struct appdata *ad = quickpanel_get_app_data();
203 retif(ad == NULL, EINA_FALSE, "invalid data.");
205 icon = elm_layout_add(parent);
206 retif(!icon, NULL, "fail to add layout");
208 elm_layout_file_set(icon, DEFAULT_EDJ, "quickpanel/setting_icon_wvga");
210 evas_object_size_hint_weight_set(icon,
211 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
212 elm_object_signal_emit(icon, "icon.off", "quickpanl.prog");
214 Evas_Object *focus = quickpanel_accessibility_ui_get_focus_object(icon);
215 elm_object_part_content_set(icon, "focus", focus);
217 if (ad->angle == 0 || ad->angle == 180) {
218 signal = "icon.portrait";
220 signal = "icon.landscape";
223 elm_object_signal_emit(icon, signal, "quickpanl.prog");
224 edje_object_message_signal_process(_EDJ(icon));
229 HAPI Evas_Object *quickpanel_setting_icon_image_new(Evas_Object *parent, const char *img_path)
231 Evas_Object *content = NULL;
232 retif(parent == NULL, NULL, "invalid parameter");
233 retif(img_path == NULL, NULL, "invalid parameter");
235 content = elm_image_add(parent);
236 retif(content == NULL, NULL, "failed to create image");
238 if (!elm_image_file_set(content, DEFAULT_EDJ, img_path)) {
239 ERR("fail to set file[%s]", img_path);
240 evas_object_del(content);
248 static Evas_Object *quickpanel_setting_container_get(Evas_Object *base)
250 Evas_Object *container = NULL;
251 retif(base == NULL, NULL, "invalid parameter");
253 container = elm_object_part_content_get(base, QP_SETTING_BASE_PART);
258 HAPI Evas_Object *quickpanel_setting_scroller_get(Evas_Object *base)
260 Evas_Object *container = NULL;
261 Evas_Object *scroller = NULL;
262 retif(base == NULL, NULL, "invalid parameter");
264 struct appdata *ad = (struct appdata*)quickpanel_get_app_data();
265 retif(ad == NULL, NULL, "application data is NULL");
267 container = quickpanel_setting_container_get(base);
269 scroller = elm_object_part_content_get(container, QP_SETTING_SCROLLER_PART_WVGA);
271 retif(scroller == NULL, NULL, "invalid parameter");
276 HAPI Evas_Object *quickpanel_setting_box_get_from_scroller(Evas_Object *base)
278 Evas_Object *scroller = NULL;
279 Evas_Object *box = NULL;
280 retif(base == NULL, NULL, "invalid parameter");
282 scroller = quickpanel_setting_scroller_get(base);
283 retif(scroller == NULL, NULL, "invalid parameter");
285 box = elm_object_content_get(scroller);
290 HAPI Evas_Object *quickpanel_setting_box_get(Evas_Object *base)
292 Evas_Object *container = NULL;
293 Evas_Object *box = NULL;
294 retif(base == NULL, NULL, "invalid parameter");
296 container = quickpanel_setting_container_get(base);
297 retif(container == NULL, NULL, "invalid parameter");
298 box = elm_object_part_content_get(container, QP_SETTING_SCROLLER_PART_WVGA);
303 HAPI int quickpanel_setting_container_rotation_set(Evas_Object *base, int angle)
305 Evas_Object *container = NULL;
306 const char *signal = NULL;
308 retif(!base, -1, "base is NULL");
309 retif(angle < 0, -1, "angle is %d", angle);
311 container = quickpanel_setting_container_get(base);
312 retif(!container, -1, "box is NULL");
314 if (angle % 180 == 0) {
317 signal = "landscape";
320 elm_object_signal_emit(container, signal, "background");
321 edje_object_message_signal_process(_EDJ(container));
326 HAPI int quickpanel_setting_icons_rotation_set(Evas_Object *base, int angle)
328 Evas_Object *box = NULL;
329 Evas_Object *icon = NULL;
330 Eina_List *icons = NULL;
332 const char *signal = NULL;
334 retif(!base, -1, "base is NULL");
335 retif(angle < 0, -1, "angle is %d", angle);
337 box = quickpanel_setting_box_get(base);
338 retif(!box, -1, "box is NULL");
340 icons = elm_box_children_get(box);
341 retif(!icons, -1, "icons list is NULL");
343 if (angle % 180 == 0) {
344 signal = "icon.portrait";
346 signal = "icon.landscape";
349 EINA_LIST_FOREACH(icons, l, icon) {
350 elm_object_signal_emit(icon, signal, "quickpanl.prog");
351 edje_object_message_signal_process(_EDJ(icon));
354 eina_list_free(icons);
359 HAPI void quickpanel_setting_icons_emit_sig(Evas_Object *icon, const char *signal)
361 retif(!icon, , "icon is NULL");
362 retif(!signal, , "icon is NULL");
364 elm_object_signal_emit(icon, signal, "quickpanl.prog");
365 edje_object_message_signal_process(_EDJ(icon));
368 HAPI int quickpanel_setting_icons_dragging_set(Evas_Object *icon, int is_on)
370 const char *signal = NULL;
371 retif(!icon, QP_FAIL, "icon is NULL");
374 signal = "dragging.on";
376 signal = "dragging.off";
379 elm_object_signal_emit(icon, signal, "quickpanl.prog");
380 edje_object_message_signal_process(_EDJ(icon));
385 HAPI int quickpanel_setting_icons_screen_mode_set(Evas_Object *icon, int screen_mode)
387 const char *signal = NULL;
388 retif(!icon, QP_FAIL, "icon is NULL");
390 if (screen_mode == 0) {
391 signal = "icon.portrait";
393 signal = "icon.landscape";
396 elm_object_signal_emit(icon, signal, "quickpanl.prog");
397 edje_object_message_signal_process(_EDJ(icon));
402 HAPI int quickpanel_setting_icon_pack(Evas_Object *box, Evas_Object *icon, int is_attach_divider)
404 retif(box == NULL, QP_FAIL, "box is NULL");
406 elm_box_pack_end(box, icon);
411 HAPI void quickpanel_setting_icon_unpack_all(Evas_Object *box)
415 Evas_Object *node = NULL;
416 Eina_List *list = NULL;
417 retif(box == NULL, , "invalid parameter");
419 list = elm_box_children_get(box);
420 retif(list == NULL, , "empty list");
422 elm_box_unpack_all(box);
424 EINA_LIST_FOREACH_SAFE(list, l, l_next, node) {
426 if (evas_object_data_get(node, E_DATA_DIVIDER_MAGIC) == (void *)DIVIDER_MAGIC) {
427 evas_object_del(node);
433 eina_list_free(list);
436 HAPI int quickpanel_setting_scroll_page_get(void *data)
439 struct appdata *ad = NULL;
440 retif(data == NULL, QP_FAIL, "Invalid parameter!");
443 retif(!ad->ly, QP_FAIL, "layout is NULL!");
445 Evas_Object *scroller = quickpanel_setting_scroller_get(ad->ly);
446 elm_scroller_current_page_get(scroller, &page_h, NULL);
451 HAPI int quickpanel_setting_set_scroll_page_width(void *data)
453 struct appdata *ad = NULL;
454 retif(data == NULL, QP_FAIL, "Invalid parameter!");
457 retif(!ad->ly, QP_FAIL, "layout is NULL!");
459 Evas_Object *scroller = quickpanel_setting_scroller_get(ad->ly);
462 #if defined(WINSYS_X11)
463 Ecore_X_Screen *screen = ecore_x_default_screen_get();
464 ecore_x_screen_size_get(screen, &w, &h);
466 elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
469 elm_scroller_page_size_set(scroller, w / QP_SETTING_NUM_PORTRAIT_ICONS, 0);
474 HAPI int quickpanel_setting_start(Evas_Object *base)
476 Evas_Object *scroller = NULL;
477 retif(base == NULL, QP_FAIL, "Invalid parameter!");
479 scroller = quickpanel_setting_scroller_get(base);
480 retif(scroller == NULL, QP_FAIL, "Invalid parameter!");
482 elm_scroller_page_bring_in(scroller, 0, 0);
487 HAPI int quickpanel_setting_stop(Evas_Object *base, int is_bring_in)
489 int page = QP_SETTING_INITIAL_PAGE_NUM;
490 Evas_Object *scroller = NULL;
491 retif(base == NULL, QP_FAIL, "Invalid parameter!");
493 scroller = quickpanel_setting_scroller_get(base);
494 retif(scroller == NULL, QP_FAIL, "Invalid parameter!");
496 if (is_bring_in == 1) {
497 elm_scroller_page_bring_in(scroller, page, 0);
499 elm_scroller_page_show(scroller, page, 0);
505 HAPI int quickpanel_setting_layout_set(Evas_Object *base, Evas_Object *setting)
507 retif(base == NULL, QP_FAIL, "Invalid parameter!");
508 retif(setting == NULL, QP_FAIL, "Invalid parameter!");
510 elm_object_part_content_set(base, QP_SETTING_BASE_PART, setting);
515 HAPI Evas_Object *quickpanel_setting_layout_get(Evas_Object *base, const char *setting_part)
517 retif(base == NULL, NULL, "Invalid parameter!");
518 retif(setting_part == NULL, NULL, "Invalid parameter!");
520 return elm_object_part_content_get(base, setting_part);
523 HAPI int quickpanel_setting_layout_remove(Evas_Object *base)
525 Evas_Object *container = NULL;
526 Evas_Object *scroller = NULL;
527 Evas_Object *box = NULL;
528 retif(base == NULL, QP_FAIL, "Invalid parameter!");
530 container = quickpanel_setting_container_get(base);
531 scroller = quickpanel_setting_scroller_get(base);
532 box = quickpanel_setting_box_get(base);
536 evas_object_del(box);
540 evas_object_del(scroller);
544 evas_object_del(container);
551 HAPI void quickpanel_setting_create_confirm_popup(
557 Evas_Object *popup = elm_popup_add(parent);
558 Evas_Object *btn = NULL;
564 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
568 elm_object_part_text_set(popup, "title,text", title);
572 elm_object_text_set(popup, text);
575 btn = elm_button_add(popup);
576 elm_object_style_set(btn, "popup");
577 elm_object_text_set(btn, _("IDS_ST_SK_OK"));
578 elm_object_part_content_set(popup, "button1", btn);
579 evas_object_smart_callback_add(btn, "clicked", func, popup);
581 evas_object_show(popup);
582 quickpanel_common_ui_set_current_popup(popup, func);
585 HAPI void quickpanel_setting_create_2button_confirm_popup(
590 Evas_Smart_Cb btn1_func,
592 Evas_Smart_Cb btn2_func)
594 Evas_Object *popup = elm_popup_add(parent);
595 Evas_Object *btn = NULL;
601 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
605 elm_object_part_text_set(popup, "title,text", title);
609 elm_object_text_set(popup, text);
612 if (btn1_func != NULL && btn1_text != NULL) {
613 btn = elm_button_add(popup);
614 elm_object_style_set(btn, "popup");
615 elm_object_text_set(btn, btn1_text);
616 elm_object_part_content_set(popup, "button1", btn);
617 evas_object_smart_callback_add(btn, "clicked", btn1_func, popup);
619 if (btn2_func != NULL && btn2_text != NULL) {
620 btn = elm_button_add(popup);
621 elm_object_style_set(btn, "popup");
622 elm_object_text_set(btn, btn2_text);
623 elm_object_part_content_set(popup, "button2", btn);
624 evas_object_smart_callback_add(btn, "clicked", btn2_func, popup);
627 evas_object_show(popup);
628 quickpanel_common_ui_set_current_popup(popup, btn1_func);
631 HAPI void quickpanel_setting_create_timeout_popup(Evas_Object *parent, char *msg)
633 retif(msg == NULL, , "invalid parameter");
635 notification_status_message_post(msg);