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-prefix-dial.h"
28 static Elm_Genlist_Item_Class *itc_1text = NULL;
32 Evas_Object *main_layout;
33 Evas_Object *inter_layout;
35 Evas_Object *select_all_layout;
36 Evas_Object *select_all_checkbox;
37 Eina_Bool select_all_checked;
43 } Delete_List_View_Data;
45 static void __cst_select_all_check_changed_cb(void *data, Evas_Object *obj, void *event_info);
46 static void __cst_check_changed_cb(void *data, Evas_Object *obj, void *event_info);
47 static void __cst_update_check_state(Delete_List_View_Data *vd);
49 static int kind_of_delete_list;
50 static Elm_Object_Item *ec_item[3];
52 static void __cst_on_click_cancel_button(void *data, Evas_Object *obj, void *event_info)
54 ENTER(__cst_on_click_cancel_button);
55 Delete_List_View_Data *vd = (Delete_List_View_Data *)data;
58 CstUgData_t *ugd = (CstUgData_t *)vd->ugd;
61 _cst_del_selectinfo(ugd);
62 elm_naviframe_item_pop(ugd->nf);
64 evas_object_data_set(vd->genlist, "delete_view_data", NULL);
69 static void __cst_on_click_delete_button(void *data, Evas_Object *obj, void *event_info)
71 ENTER(__cst_on_click_delete_button);
73 Delete_List_View_Data *vd = (Delete_List_View_Data *)data;
74 CstUgData_t *ugd = vd->ugd;
75 Elm_Object_Item *prev_it = NULL;
76 Elm_Object_Item *del_list_it = NULL;
77 CstGlItemData_t *del_item_data, *prev_item_data;
80 prev_it = elm_genlist_first_item_get(ugd->backup_genlist);
81 del_list_it = elm_genlist_first_item_get(vd->genlist);
83 switch (ugd->kind_of_delete_list) {
84 case CST_DL_PREFIX_DIALING:
85 while (prev_it != NULL && del_list_it != NULL) {
86 prev_item_data = (CstGlItemData_t *)elm_object_item_data_get(prev_it);
87 if (prev_item_data->index != -1) {
88 del_item_data = (CstGlItemData_t *)elm_object_item_data_get(del_list_it);
89 if (del_item_data->check == EINA_FALSE) {
90 _cst_set_prefix_dialling_list(i, prev_item_data->label);
93 del_list_it = elm_genlist_item_next_get(del_list_it);
95 prev_it = elm_genlist_item_next_get(prev_it);
97 _cst_set_active_prefix_vconf(i - 1);
98 if(ugd->prefix_gl_list_item != NULL)
99 elm_genlist_item_update(ugd->prefix_gl_list_item);
100 _cst_set_num_of_prefix_dialling_list(i);
101 elm_genlist_clear(ugd->backup_genlist);
102 _cst_genlist_append_dialling_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[1], EINA_TRUE);
132 elm_object_item_disabled_set(ec_item[1], 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 ret_if(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")) {
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);
287 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
288 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
289 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
292 itc_1text = elm_genlist_item_class_new();
294 itc_1text->item_style = "1text";
295 itc_1text->func.text_get = __cst_gl_label_get_delete_list;
296 itc_1text->func.content_get = __cst_gl_icon_get_delete_list;
297 itc_1text->func.state_get = NULL;
298 itc_1text->func.del = __cst_gl_del_delete_list;
299 itc_1text->decorate_all_item_style = "edit_default";
301 for (index = 0; index < vd->total_count; index++) {
302 item_data = calloc(1, sizeof(CstGlItemData_t));
303 retv_if(item_data == NULL, NULL);
304 switch (ugd->kind_of_delete_list) {
305 case CST_DL_PREFIX_DIALING:
306 item_data->label = _cst_get_prefix_dialling_list(index);
309 DBG("wrong request");
316 item_data->index = index;
317 item_data->gl_item = elm_genlist_item_append(genlist,
320 NULL, ELM_GENLIST_ITEM_NONE,
321 __cst_gl_sel_delete_list, item_data);
323 elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
324 elm_genlist_decorate_mode_set(genlist, EINA_TRUE);
328 static Evas_Object *__cst_create_delete_list_layout(Delete_List_View_Data *view_data)
330 ENTER(__cst_create_delete_list_layout);
331 retv_if(NULL == view_data, NULL);
332 CstUgData_t *ugd = (CstUgData_t *)view_data->ugd;
333 Evas_Object *genlist = view_data->genlist;
335 elm_win_conformant_set(ugd->win_main, EINA_TRUE);
337 Evas_Object *conform = elm_conformant_add(ugd->nf);
338 elm_object_style_set(conform, "internal_layout");
339 evas_object_size_hint_weight_set(conform,
340 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
341 evas_object_show(conform);
343 view_data->box = elm_box_add(ugd->nf);
344 evas_object_size_hint_weight_set(view_data->box,
345 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
346 evas_object_show(view_data->box);
348 // Append 'Select All' layout
349 view_data->select_all_layout = elm_layout_add(view_data->box);
350 elm_layout_theme_set(view_data->select_all_layout,
351 "genlist", "item", "select_all/default");
352 evas_object_size_hint_weight_set(view_data->select_all_layout,
353 EVAS_HINT_EXPAND, EVAS_HINT_FILL);
354 evas_object_size_hint_align_set(view_data->select_all_layout,
355 EVAS_HINT_FILL, EVAS_HINT_FILL);
356 evas_object_event_callback_add(view_data->select_all_layout,
357 EVAS_CALLBACK_MOUSE_DOWN, __cst_select_all_layout_mouse_down_cb, view_data);
359 view_data->select_all_checkbox = elm_check_add(view_data->select_all_layout);
360 elm_object_part_content_set(view_data->select_all_layout,
361 "elm.icon", view_data->select_all_checkbox);
362 elm_check_state_pointer_set(view_data->select_all_checkbox,
363 &view_data->select_all_checked);
364 evas_object_smart_callback_add(view_data->select_all_checkbox,
365 "changed", __cst_select_all_check_changed_cb, view_data);
366 evas_object_propagate_events_set(view_data->select_all_checkbox, EINA_FALSE);
368 elm_object_part_text_set(view_data->select_all_layout,
369 "elm.text", (char *)(T_(CST_STR_SELECT_ALL)));
370 elm_box_pack_start(view_data->box, view_data->select_all_layout);
371 evas_object_show(view_data->select_all_layout);
373 elm_box_pack_end(view_data->box, genlist);
374 evas_object_show(genlist);
375 elm_object_content_set(conform, view_data->box);
380 void _cst_create_delete_list(void *data, Evas_Object *obj, void *event_info)
382 ENTER(_cst_create_delete_list);
383 ret_if(NULL == data);
384 CstUgData_t *ugd = (CstUgData_t *)data;
385 Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info;
386 Delete_List_View_Data *delete_list_view = NULL;
388 Elm_Object_Item *navi_it;
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_PREFIX_DIALING:
399 delete_list_view->total_count = _cst_get_num_of_prefix_dialling_list();
402 DBG("wrong request");
403 free(delete_list_view);
404 delete_list_view = NULL;
409 delete_list_view->genlist = __cst_create_delete_list_genlist(delete_list_view);
411 evas_object_data_set(delete_list_view->genlist, "delete_view_data", delete_list_view);
412 delete_list_view->inter_layout = __cst_create_delete_list_layout(delete_list_view);
415 delete_list_view->main_layout = elm_layout_add(ugd->nf);
416 elm_layout_file_set(delete_list_view->main_layout, EDJ_NAME, "toolbar");
417 evas_object_size_hint_weight_set(delete_list_view->main_layout,
418 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
419 evas_object_size_hint_align_set(delete_list_view->main_layout,
420 EVAS_HINT_FILL, EVAS_HINT_FILL);
422 elm_object_part_content_set(delete_list_view->main_layout,
423 "elm.swallow.contents", delete_list_view->inter_layout);
425 navi_it = elm_naviframe_item_push(ugd->nf,
426 T_(CST_STR_SELECT_NUMBER), NULL, NULL,
427 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_CANCEL), CST_CTRL_ICON_CLOSE,
435 __cst_on_click_cancel_button,
436 (char *)T_(CST_STR_DELETE), CST_CTRL_ICON_DELETE,
437 __cst_on_click_delete_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[1], EINA_TRUE);