2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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.
20 #include <Elementary.h>
22 #include "homescreen-efl.h"
24 #include "livebox_all_pages.h"
27 #define EDJE_LAYOUT_PATH "/usr/apps/com.samsung.home-lite/res/edje/popup.edj"
28 #define UNABLE_PART "unable_to_add_items"
29 #define UNABLE_POPUP_TITLE "<align=center>Unable to add</align>"
30 #define SORTED_POPUP "<align=center><font_size=24> Unable to rearrange icons <br> sorted by name (A-Z).</font> </align>"
32 #define POPUP_DATA_KEY "cb_data"
36 Evas_Object *opened_popup;
41 typedef struct _cb_data_t {
42 popup_confirm_cb cb_ok;
43 popup_cancel_cb cb_cancel;
47 /*==========================PRIVATE FUNCTIONS DEFINITIONS======================================*/
48 static void __popup_init_two_buttons(Evas_Object *popup, popup_confirm_cb confirm_cb,
49 popup_cancel_cb cancel_cb, popup_data_t *p_data, void *cb_data);
50 static void __popup_init_info(Evas_Object *popup, popup_data_t *p_data);
51 /*==========================POPUP CALLBACKS DEFINITIONS========================================*/
52 static void __popup_btn_ok_clicked_cb(void *data, Evas_Object *obj, void *ei);
53 static void __popup_btn_cancel_clicked_cb(void *data, Evas_Object *obj, void *ei);
55 /*==========================PUBLIC FUNCTIONS IMPLEMENTATION===================================*/
56 HAPI popup_data_t *popup_create_data(void)
58 popup_data_t *data = (popup_data_t *) calloc(1, sizeof(popup_data_t));
62 HAPI void popup_data_free(popup_data_t *p_data)
65 LOGE("[INVALID_PARAM]");
69 if (p_data->popup_title_text)
70 free(p_data->popup_title_text);
71 if (p_data->popup_content_text)
72 free(p_data->popup_content_text);
73 if (p_data->popup_confirm_text)
74 free(p_data->popup_confirm_text);
75 if (p_data->popup_cancel_text)
76 free(p_data->popup_cancel_text);
81 HAPI void popup_show(popup_data_t *p_data, popup_confirm_cb confirm_cb, popup_cancel_cb cancel_cb,
84 Evas_Object *popup = NULL;
87 LOGE("[INVALID_DATA]");
91 popup = elm_popup_add(home_screen_get_win());
93 LOGE("[FAILED][elm_popup_add]");
94 evas_object_del(popup);
95 popup_data_free(p_data);
99 elm_popup_orient_set(popup, p_data->orientation);
101 switch (p_data->type) {
102 case POPUP_TWO_BUTTONS:
103 __popup_init_two_buttons(popup, confirm_cb, cancel_cb, p_data, cb_data);
106 __popup_init_info(popup, p_data);
109 s_info.opened_popup = popup;
110 evas_object_layer_set(popup, EVAS_LAYER_MAX);
111 evas_object_show(popup);
114 HAPI Eina_Bool popup_destroy(void)
116 if (s_info.opened_popup) {
117 evas_object_del(s_info.opened_popup);
118 s_info.opened_popup = NULL;
124 /*==========================PRIVATE FUNCTIONS IMPLEMENTATION==================================*/
125 static void __popup_init_two_buttons(Evas_Object *popup, popup_confirm_cb confirm_cb,
126 popup_cancel_cb cancel_cb, popup_data_t *p_data, void *cb_data)
128 Evas_Object *btn_ok = NULL;
129 Evas_Object *btn_cancel = NULL;
130 cb_data_t *data = NULL;
133 LOGE("[INVALID_PARAM][p_data=NULL]");
138 LOGE("[INVALID_PARAM]");
139 popup_data_free(p_data);
143 data = (cb_data_t *) malloc(sizeof(cb_data_t));
145 LOGE("[FAILED][malloc]");
146 popup_data_free(p_data);
150 btn_ok = elm_button_add(popup);
152 LOGE("[FAILED][elm_button_add]");
153 evas_object_del(popup);
154 popup_data_free(p_data);
159 btn_cancel = elm_button_add(popup);
161 LOGE("[FAILED][elm_button_add]");
162 evas_object_del(popup);
163 popup_data_free(p_data);
168 /*setting popup properties.*/
169 elm_object_part_text_set(popup, "title,text", p_data->popup_title_text);
170 elm_object_part_text_set(popup, "default", p_data->popup_content_text);
172 elm_object_part_text_set(btn_ok, "default", p_data->popup_confirm_text);
173 elm_object_part_text_set(btn_cancel, "default", p_data->popup_cancel_text);
175 elm_object_part_content_set(popup, "button1", btn_cancel);
176 elm_object_part_content_set(popup, "button2", btn_ok);
178 data->cb_cancel = cancel_cb;
179 data->cb_ok = confirm_cb;
180 data->data = cb_data;
182 evas_object_smart_callback_add(btn_ok, "clicked", __popup_btn_ok_clicked_cb, data);
183 evas_object_smart_callback_add(btn_cancel, "clicked", __popup_btn_cancel_clicked_cb, data);
185 popup_data_free(p_data);
188 static void __popup_init_info(Evas_Object *popup, popup_data_t *p_data)
191 LOGE("[INVALID_PARAM][p_data=NULL]");
196 LOGE("[INVALID_PARAM]");
197 popup_data_free(p_data);
201 elm_object_style_set(popup, "toast");
202 elm_object_part_text_set(popup, "default", p_data->popup_content_text);
203 elm_popup_timeout_set(popup, p_data->visible_time);
205 popup_data_free(p_data);
208 /*==================================POPUP CALLBACKS IMPLEMENTATION============================*/
209 static void __popup_btn_ok_clicked_cb(void *data, Evas_Object *obj, void *ei)
211 LOGI("__popup_btn_ok_clicked_cb");
212 cb_data_t *cb_data = (cb_data_t *) data;
215 LOGE("[INVALID_CB_DATA]");
219 if (cb_data->cb_ok) cb_data->cb_ok(cb_data->data);
224 static void __popup_btn_cancel_clicked_cb(void *data, Evas_Object *obj, void *ei)
226 LOGI("__popup_btn_cancel_clicked_cb");
227 cb_data_t *cb_data = (cb_data_t *) data;
230 LOGE("[INVALID_CB_DATA]");
234 if (cb_data->cb_cancel) cb_data->cb_cancel(cb_data->data);