2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.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.tizenopensource.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.
17 #include <Elementary.h>
19 #include "cst-call-setting.h"
21 #include "cst-delete-list.h"
22 #include "cst-widget.h"
23 #include "cst-common.h"
24 #include "cst-common-string.h"
26 #include "cst-reject-msg.h"
27 #include "cst-tapi-request.h"
29 static Elm_Genlist_Item_Class *itc_1text_2text1icon = NULL;
34 Evas_Object *main_layout;
35 Evas_Object *inter_layout;
37 Evas_Object *select_all_layout;
38 Evas_Object *select_all_checkbox;
39 Eina_Bool select_all_checked;
45 } Delete_List_View_Data;
47 static void __cst_select_all_check_changed_cb(void *data, Evas_Object *obj, void *event_info);
48 static void __cst_check_changed_cb(void *data, Evas_Object *obj, void *event_info);
49 static void __cst_update_check_state(Delete_List_View_Data *vd);
51 static int kind_of_delete_list;
52 static Elm_Object_Item *ec_item[3];
54 static void __cst_on_click_cancel_button(void *data, Evas_Object *obj, void *event_info)
56 ENTER(__cst_on_click_cancel_button);
57 Delete_List_View_Data *vd = (Delete_List_View_Data *)data;
60 CstUgData_t *ugd = (CstUgData_t *)vd->ugd;
63 _cst_del_selectinfo(ugd);
64 elm_naviframe_item_pop(ugd->nf);
66 evas_object_data_set(vd->genlist, "delete_view_data", NULL);
71 static void __cst_on_click_delete_button(void *data, Evas_Object *obj, void *event_info)
73 ENTER(__cst_on_click_delete_button);
75 Delete_List_View_Data *vd = (Delete_List_View_Data *)data;
76 CstUgData_t *ugd = vd->ugd;
77 Elm_Object_Item *prev_it = NULL;
78 Elm_Object_Item *del_list_it = NULL;
79 CstGlItemData_t *del_item_data, *prev_item_data;
82 prev_it = elm_genlist_first_item_get(ugd->backup_genlist);
83 del_list_it = elm_genlist_first_item_get(vd->genlist);
85 switch (ugd->kind_of_delete_list) {
86 case CST_DL_REJECT_CALL_WITH_MSG:
87 while (prev_it != NULL && del_list_it != NULL) {
88 prev_item_data = (CstGlItemData_t *)elm_object_item_data_get(prev_it);
89 if (prev_item_data->index != -1) {
90 del_item_data = (CstGlItemData_t *)elm_object_item_data_get(del_list_it);
91 if (del_item_data->check == EINA_FALSE) {
92 _cst_set_reject_message(i, prev_item_data->label);
95 del_list_it = elm_genlist_item_next_get(del_list_it);
97 prev_it = elm_genlist_item_next_get(prev_it);
99 _cst_set_num_of_reject_message(i);
100 _cst_set_reject_msg_button_status(i);
101 elm_genlist_clear(ugd->backup_genlist);
102 _cst_genlist_append_reject_list_item(ugd, ugd->backup_genlist);
105 DBG("wrong request");
110 __cst_on_click_cancel_button(vd, NULL, NULL);
111 _cst_create_selectinfo(ugd, ugd->backup_layout, T_(CST_STR_DELETED));
114 static void __cst_update_check_state(Delete_List_View_Data *vd)
117 ENTER(__cst_update_check_state);
118 CstUgData_t *ugd = (CstUgData_t *)vd->ugd;
121 if (vd->checked_count != 0) {
122 label = calloc(CST_MAX_ITEM_TEXT_BUFFER_LEN, sizeof(char));
123 ret_if(label == NULL);
124 snprintf(label, CST_MAX_ITEM_TEXT_BUFFER_LEN,
125 (char *)T_(CST_STR_PD_SELECTED), vd->checked_count);
127 _cst_create_selectinfo(ugd, vd->main_layout, label);
129 if (vd->checked_count == 0) {
130 elm_object_item_disabled_set(ec_item[0], EINA_TRUE);
132 elm_object_item_disabled_set(ec_item[0], EINA_FALSE);
137 static void __cst_check_select_all(Delete_List_View_Data *vd)
139 CstGlItemData_t *it_data;
142 if (vd->select_all_checked)
143 vd->checked_count = vd->total_count;
145 vd->checked_count = 0;
147 it = elm_genlist_first_item_get(vd->genlist);
149 it_data = elm_object_item_data_get(it);
151 it_data->check = vd->select_all_checked;
152 it = elm_genlist_item_next_get(it);
154 /* Update all realized items */
155 elm_genlist_realized_items_update(vd->genlist);
156 __cst_update_check_state(vd);
159 static void __cst_select_all_layout_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
161 ret_if(NULL == data);
162 Delete_List_View_Data *vd = (Delete_List_View_Data *)data;
164 vd->select_all_checked = !vd->select_all_checked;
165 elm_check_state_pointer_set(vd->select_all_checkbox, &vd->select_all_checked);
167 __cst_check_select_all(vd);
170 static void __cst_select_all_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
172 __cst_check_select_all(data);
175 static void __cst_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
177 ret_if(data == NULL);
178 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
180 Delete_List_View_Data *vd =
181 (Delete_List_View_Data *)evas_object_data_get(
182 elm_object_item_widget_get(item_data->gl_item), "delete_view_data");
184 if (item_data->check)
189 /* update select all check button */
190 if (vd->select_all_layout) {
191 if (vd->total_count == vd->checked_count)
192 vd->select_all_checked = EINA_TRUE;
194 vd->select_all_checked = EINA_FALSE;
196 elm_check_state_pointer_set(vd->select_all_checkbox,
197 &vd->select_all_checked);
199 __cst_update_check_state(vd);
202 static char *__cst_gl_label_get_delete_list(void *data, Evas_Object *obj, const char *part)
204 retv_if(NULL == data, NULL);
205 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
207 if (!strcmp(part, "elm.text")) {
208 char *entry_label = elm_entry_markup_to_utf8(item_data->label);
209 retv_if(NULL == entry_label, NULL);
210 DBG("Label : %s", entry_label);
211 char *buf = strdup(entry_label);
219 static Evas_Object *__cst_gl_icon_get_delete_list(void *data, Evas_Object *obj, const char *part)
222 retv_if(NULL == data, NULL);
223 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
224 if (!strcmp(part, "elm.edit.icon.1") || !strcmp(part, "elm.icon")) {
225 check = elm_check_add(obj);
226 elm_check_state_pointer_set(check, &item_data->check);
227 evas_object_smart_callback_add(check, "changed",
228 __cst_check_changed_cb, item_data);
235 static void __cst_gl_del_delete_list(void *data, Evas_Object *obj)
237 ret_if(NULL == data);
238 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
240 if (item_data->label)
241 free(item_data->label);
248 static void __cst_gl_sel_delete_list(void *data, Evas_Object *obj, void *event_info)
250 ret_if(NULL == data);
251 CstGlItemData_t *item_data = (CstGlItemData_t *)data;
252 Delete_List_View_Data *vd =
253 (Delete_List_View_Data *)evas_object_data_get(obj, "delete_view_data");
254 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
256 item_data->check = !item_data->check;
257 if (item_data->check)
262 if (vd->select_all_layout) {
263 if (vd->total_count == vd->checked_count)
264 vd->select_all_checked = EINA_TRUE;
266 vd->select_all_checked = EINA_FALSE;
268 elm_check_state_pointer_set(vd->select_all_checkbox,
269 &vd->select_all_checked);
272 elm_genlist_item_update(item_data->gl_item);
273 __cst_update_check_state(vd);
276 static Evas_Object *__cst_create_delete_list_genlist(Delete_List_View_Data *vd)
278 ENTER(__cst_create_delete_list_genlist);
279 retv_if(NULL == vd, NULL);
281 CstGlItemData_t *item_data;
282 CstUgData_t *ugd = vd->ugd;
283 retv_if(ugd == NULL, NULL);
284 Evas_Object *genlist;
286 genlist = elm_genlist_add(ugd->nf);
288 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
289 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
290 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
292 if (!itc_1text_2text1icon)
293 itc_1text_2text1icon = elm_genlist_item_class_new();
295 itc_1text_2text1icon->item_style = "1text";
296 itc_1text_2text1icon->func.text_get = __cst_gl_label_get_delete_list;
297 itc_1text_2text1icon->decorate_all_item_style = "edit_default";
298 elm_genlist_decorate_mode_set(genlist, EINA_TRUE);
300 itc_1text_2text1icon->func.content_get = __cst_gl_icon_get_delete_list;
301 itc_1text_2text1icon->func.del = __cst_gl_del_delete_list;
303 for (index = 0; index < vd->total_count; index++) {
304 item_data = calloc(1, sizeof(CstGlItemData_t));
305 retv_if(item_data == NULL, NULL);
306 switch (ugd->kind_of_delete_list) {
307 case CST_DL_REJECT_CALL_WITH_MSG:
308 item_data->label = _cst_get_reject_message(index);
311 DBG("wrong request");
317 item_data->index = index;
318 item_data->ugd = ugd;
319 item_data->gl_item = elm_genlist_item_append(genlist,
320 itc_1text_2text1icon,
322 NULL, ELM_GENLIST_ITEM_NONE,
323 __cst_gl_sel_delete_list, item_data);
325 elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
329 static Evas_Object *__cst_create_delete_list_layout(Delete_List_View_Data *view_data)
331 ENTER(__cst_create_delete_list_layout);
332 retv_if(NULL == view_data, NULL);
333 CstUgData_t *ugd = (CstUgData_t *)view_data->ugd;
334 Evas_Object *genlist = view_data->genlist;
336 elm_win_conformant_set(ugd->base, EINA_TRUE);
338 Evas_Object *conform = elm_conformant_add(ugd->nf);
339 elm_object_style_set(conform, "internal_layout");
340 evas_object_size_hint_weight_set(conform,
341 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
342 evas_object_show(conform);
344 view_data->box = elm_box_add(ugd->nf);
345 evas_object_size_hint_weight_set(view_data->box,
346 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
347 evas_object_show(view_data->box);
349 /* Append 'Select All' layout */
350 view_data->select_all_layout = elm_layout_add(view_data->box);
351 elm_layout_theme_set(view_data->select_all_layout,
352 "genlist", "item", "select_all/default");
353 evas_object_size_hint_weight_set(view_data->select_all_layout,
354 EVAS_HINT_EXPAND, EVAS_HINT_FILL);
355 evas_object_size_hint_align_set(view_data->select_all_layout,
356 EVAS_HINT_FILL, EVAS_HINT_FILL);
357 evas_object_event_callback_add(view_data->select_all_layout,
358 EVAS_CALLBACK_MOUSE_DOWN, __cst_select_all_layout_mouse_down_cb, view_data);
360 view_data->select_all_checkbox = elm_check_add(view_data->select_all_layout);
361 elm_object_part_content_set(view_data->select_all_layout,
362 "elm.icon", view_data->select_all_checkbox);
363 elm_check_state_pointer_set(view_data->select_all_checkbox,
364 &view_data->select_all_checked);
365 evas_object_smart_callback_add(view_data->select_all_checkbox,
366 "changed", __cst_select_all_check_changed_cb, view_data);
367 evas_object_propagate_events_set(view_data->select_all_checkbox, EINA_FALSE);
369 elm_object_part_text_set(view_data->select_all_layout,
370 "elm.text", (char *)(T_(CST_STR_SELECT_ALL)));
371 elm_box_pack_start(view_data->box, view_data->select_all_layout);
372 evas_object_show(view_data->select_all_layout);
374 elm_box_pack_end(view_data->box, genlist);
375 evas_object_show(genlist);
376 elm_object_content_set(conform, view_data->box);
381 void _cst_create_delete_list(void *data, Evas_Object *obj, void *event_info)
383 ENTER(_cst_create_delete_list);
384 ret_if(NULL == data);
385 CstUgData_t *ugd = (CstUgData_t *)data;
386 Delete_List_View_Data *delete_list_view = NULL;
388 Elm_Object_Item *navi_it = NULL;
390 kind_of_delete_list = ugd->kind_of_delete_list;
391 delete_list_view = (Delete_List_View_Data *)calloc(1, sizeof(Delete_List_View_Data));
392 ret_if(delete_list_view == NULL);
393 delete_list_view->ugd = ugd;
394 ugd->selectinfo = NULL;
396 DBG("Request list : %d", kind_of_delete_list);
397 switch (kind_of_delete_list) {
398 case CST_DL_REJECT_CALL_WITH_MSG:
399 delete_list_view->total_count = _cst_get_num_of_reject_message();
402 DBG("wrong request");
403 free(delete_list_view);
404 delete_list_view = NULL;
408 delete_list_view->genlist = __cst_create_delete_list_genlist(delete_list_view);
409 evas_object_data_set(delete_list_view->genlist, "delete_view_data", delete_list_view);
410 delete_list_view->inter_layout = __cst_create_delete_list_layout(delete_list_view);
413 delete_list_view->main_layout = elm_layout_add(ugd->nf);
414 elm_layout_file_set(delete_list_view->main_layout, EDJ_NAME, "toolbar");
415 evas_object_size_hint_weight_set(delete_list_view->main_layout,
416 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
417 evas_object_size_hint_align_set(delete_list_view->main_layout,
418 EVAS_HINT_FILL, EVAS_HINT_FILL);
420 elm_object_part_content_set(delete_list_view->main_layout,
421 "elm.swallow.contents", delete_list_view->inter_layout);
423 if (kind_of_delete_list == CST_DL_REJECT_CALL_WITH_MSG) {
424 navi_it = elm_naviframe_item_push(ugd->nf,
426 delete_list_view->main_layout, "1line");
429 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it,
431 evas_object_del(back_btn);
433 cbar = _cst_create_navi_control_bar(ugd->nf,
434 (char *)T_(CST_STR_DELETE), CST_CTRL_ICON_DELETE,
435 __cst_on_click_delete_button,
436 (char *)T_(CST_STR_CANCEL), CST_CTRL_ICON_CLOSE,
437 __cst_on_click_cancel_button,
438 (void *)delete_list_view, navi_it,
440 ret_if((NULL == cbar) || (NULL == ec_item[1]));
441 elm_object_item_disabled_set(ec_item[0], EINA_TRUE);