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.
18 #include "vcui-application.h"
19 #include "vcui-view-elements.h"
20 #include "vcui-view-multi-call-list.h"
22 static Elm_Genlist_Item_Class *itc_call;
24 static int __vcui_view_multi_call_list_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3);
25 static int __vcui_view_multi_call_list_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2);
26 static int __vcui_view_multi_call_list_onhide(voice_call_view_data_t *view_data);
27 static int __vcui_view_multi_call_list_onshow(voice_call_view_data_t *view_data);
28 static int __vcui_view_multi_call_list_ondestroy(voice_call_view_data_t *view_data);
30 static voice_call_view_data_t s_view = {
31 .type = VIEW_INCALL_MULTICALL_LIST_VIEW,
34 .onCreate = __vcui_view_multi_call_list_oncreate,
35 .onUpdate = __vcui_view_multi_call_list_onupdate,
36 .onHide = __vcui_view_multi_call_list_onhide,
37 .onShow = __vcui_view_multi_call_list_onshow,
38 .onDestroy = __vcui_view_multi_call_list_ondestroy,
42 voice_call_view_data_t *_vcui_view_multi_call_list_new(vcui_app_call_data_t *ad)
45 s_view.priv = calloc(1, sizeof(vcui_view_multi_call_list_priv_t));
48 CALL_UI_DEBUG("ERROR ");
54 static void __vcui_view_multi_call_list_small_end_call_cb(void *data, Evas_Object *obj, void *event_info)
57 call_data_t *call_data = data;
58 _vcui_engine_end_call_by_handle(call_data->call_handle);
59 call_data->bno_end_show = EINA_TRUE;
61 _vcui_view_popup_load_endcall_time(call_data);
64 static void __vcui_view_multi_call_list_split_call_cb(void *data, Evas_Object *obj, void *event_info)
67 call_data_t *call_data = data;
68 _vcui_engine_split_call(call_data->call_handle);
71 static void __vcui_view_multi_call_list_gl_sel_call(void *data, Evas_Object *obj, void *event_info)
75 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
77 elm_object_item_data_get(item);
78 elm_genlist_item_selected_set(item, 0);
81 static void __vcui_view_multi_call_list_gl_del_call(void *data, Evas_Object *obj)
87 static Eina_Bool __vcui_view_multi_call_list_gl_state_get_call(void *data, Evas_Object *obj, const char *part)
93 static Evas_Object *__vcui_view_multi_call_list_gl_content_get_call(void *data, Evas_Object *obj, const char *part)
95 call_data_t *call_data = (call_data_t *)data;
97 Evas_Object *icon = NULL;
98 Evas_Object *btn = NULL;
100 if (strcmp(part, "elm.swallow.end") == 0) {
101 btn = elm_button_add(obj);
102 elm_object_style_set(btn, "style_call_smallbtn_red");
103 icon = elm_icon_add(obj);
104 elm_icon_file_set(icon, CONF_CALL_END_ICON, NULL);
105 evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
106 elm_icon_resizable_set(icon, 1, 1);
107 elm_object_part_content_set(btn, "icon", icon);
109 evas_object_smart_callback_add(btn, "clicked", __vcui_view_multi_call_list_small_end_call_cb, call_data);
110 evas_object_propagate_events_set(btn, EINA_FALSE);
113 } else if (strcmp(part, "elm.swallow.private") == 0) {
114 if (_vcui_doc_get_count_hold() > 0) {
117 btn = elm_button_add(obj);
118 icon = elm_icon_add(obj);
119 elm_icon_file_set(icon, PRIVATE_ICON, NULL);
120 elm_object_style_set(btn, "icon_only/style_call_icon_only_private");
122 elm_icon_resizable_set(icon, 1, 1);
123 elm_object_part_content_set(btn, "icon", icon);
125 evas_object_smart_callback_add(btn, "clicked", __vcui_view_multi_call_list_split_call_cb, call_data);
126 evas_object_propagate_events_set(btn, EINA_FALSE);
134 static char *__vcui_view_multi_call_list_gl_text_get_call(void *data, Evas_Object *obj, const char *part)
136 char buf[DEF_BUF_LEN] = { 0, };
137 call_data_t *call_data = (call_data_t *)data;
139 if (strcmp(part, "elm.text") == 0) {
140 if (strlen((char *)call_data->call_display) == 0)
141 snprintf(buf, sizeof(buf), "%s", call_data->call_num);
143 snprintf(buf, sizeof(buf), "%s", call_data->call_display);
149 static void __vcui_view_multi_call_list_genlist_init(void *data)
151 itc_call->item_style = "multicall_list";
152 itc_call->func.text_get = __vcui_view_multi_call_list_gl_text_get_call;
153 itc_call->func.content_get = __vcui_view_multi_call_list_gl_content_get_call;
154 itc_call->func.state_get = __vcui_view_multi_call_list_gl_state_get_call;
155 itc_call->func.del = __vcui_view_multi_call_list_gl_del_call;
158 static void __vcui_view_multi_call_list_genlist_add(void *data)
160 voice_call_view_data_t *vd = data;
161 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv;
162 Evas_Object *genlist = NULL;
164 genlist = elm_genlist_add(priv->contents);
165 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
166 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
168 elm_object_part_content_set(priv->contents, "swl_calllist", genlist);
169 priv->multibox_gl = genlist;
172 void __vcui_view_multi_call_list_genlist_item_append(void *data)
175 voice_call_view_data_t *vd = data;
176 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv;
177 Eina_List *list = NULL;
179 if (priv->multibox_gl) {
180 elm_genlist_clear(priv->multibox_gl);
183 if (priv->call_status == CALL_UNHOLD) {
184 list = _vcui_doc_get_unhold_caller();
186 list = _vcui_doc_get_hold_caller();
189 CALL_UI_DEBUG("error");
194 call_data_t *call_data;
195 EINA_LIST_FOREACH(list, l, call_data) {
196 elm_genlist_item_append(priv->multibox_gl, itc_call, (void *)call_data, NULL, ELM_GENLIST_ITEM_NONE, __vcui_view_multi_call_list_gl_sel_call, data);
198 eina_list_free(list);
201 static void __vcui_view_multi_call_list_back_cb(void *data, Evas_Object *obj, void *event_info)
204 _vcui_view_auto_change();
207 static void __vcui_view_multi_call_list_draw_screen(void *data)
211 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
212 vcui_app_call_data_t *ad = vd->app_data;
213 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv;
214 call_data_t *call_data;
216 priv->total_members = _vcui_doc_get_count_hold()+_vcui_doc_get_count_unhold();
217 priv->call_status = _vcui_doc_get_show_callstatus();
218 call_data = _vcui_doc_get_last_status(priv->call_status);
219 if (call_data == NULL) {
220 CALL_UI_DEBUG("call data is null");
223 _vcui_view_common_set_each_time(call_data->start_time);
225 _vcui_show_wallpaper_image(priv->contents);
227 __vcui_view_multi_call_list_genlist_item_append(vd);
229 _vcui_create_conf_list_button_hold(vd);
230 _vcui_create_button_bigend(vd);
231 evas_object_show(priv->contents);
234 static Evas_Object *__vcui_view_multi_call_list_create_contents(void *data, char *group)
236 voice_call_view_data_t *vd = (voice_call_view_data_t *)data;
240 CALL_UI_DEBUG("ERROR");
245 eo = _vcui_load_edj(vd->layout, EDJ_NAME, group);
252 static void __vcui_view_multi_call_list_create_navigationframe_layout(voice_call_view_data_t *vd)
254 Evas_Object *navi_ly;
256 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv;
258 navi_ly = _vcui_load_edj(priv->navi_frame, EDJ_NAME, "navigation_view");
261 CALL_UI_DEBUG("navi_layout created...");
263 /* Load default button */
264 btn1 = elm_button_add(priv->navi_frame);
265 elm_object_style_set(btn1, "vcui_naviframe_new_backbutton/default");
266 evas_object_smart_callback_add(btn1, "clicked", __vcui_view_multi_call_list_back_cb, vd);
268 elm_naviframe_item_push(priv->navi_frame, _("IDS_CALL_OPT_CONFERENCE_CALL"), btn1, NULL, navi_ly, "vcui_naviframe_new_item_1line");
271 static Evas_Object *__vcui_view_multi_call_list_create_navigation_layout(Evas_Object *parent)
273 Evas_Object *navi_frame;
275 if (parent == NULL) {
276 CALL_UI_DEBUG("ERROR");
280 navi_frame = elm_naviframe_add(parent);
281 elm_object_style_set(navi_frame, "vcui_naviframe_new/default");
286 static Evas_Object *__vcui_view_multi_call_list_create_layout_main(Evas_Object *parent)
288 if (parent == NULL) {
289 CALL_UI_DEBUG("ERROR");
294 ly = elm_layout_add(parent);
295 retvm_if(ly == NULL, NULL, "Failed elm_layout_add.");
297 elm_layout_theme_set(ly, "standard", "window", "integration");
298 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
299 elm_win_resize_object_add(parent, ly);
301 edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm");
302 edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
303 evas_object_show(ly);
308 static int __vcui_view_multi_call_list_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3)
310 CALL_UI_DEBUG("multicall-list view create");
312 voice_call_view_data_t *vd = view_data;
313 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv;
315 itc_call = elm_genlist_item_class_new();
318 vd->layout = __vcui_view_multi_call_list_create_layout_main(vd->app_data->win_main);
319 if (vd->layout == NULL) {
320 CALL_UI_DEBUG("ERROR");
323 priv->contents = __vcui_view_multi_call_list_create_contents(vd, GRP_MULTICALL);
324 elm_object_part_content_set(vd->layout, "elm.swallow.content", priv->contents);
326 priv->navi_frame = __vcui_view_multi_call_list_create_navigation_layout(vd->layout);
327 elm_object_part_content_set(priv->contents, "navigation_bar", priv->navi_frame);
329 __vcui_view_multi_call_list_create_navigationframe_layout(vd);
331 evas_object_name_set(priv->contents, "MULTIVIEWLIST");
332 CALL_UI_DEBUG("[========== MULTIVIEWLIST: priv->contents Addr : [%p] ==========]", priv->contents);
334 __vcui_view_multi_call_list_genlist_add(vd);
335 __vcui_view_multi_call_list_genlist_init(vd);
337 CALL_UI_DEBUG("[UI]ad->layout_multicall != NULL case ");
338 evas_object_show(vd->layout);
341 __vcui_view_multi_call_list_onshow(view_data);
346 static int __vcui_view_multi_call_list_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2)
348 CALL_UI_DEBUG("multicall-list view update");
350 __vcui_view_multi_call_list_onshow(view_data);
354 static int __vcui_view_multi_call_list_onhide(voice_call_view_data_t *view_data)
356 CALL_UI_DEBUG("multicall-list view hide");
358 evas_object_hide(view_data->layout);
362 static int __vcui_view_multi_call_list_onshow(voice_call_view_data_t *view_data)
364 CALL_UI_DEBUG("multicall-list view show");
366 __vcui_view_multi_call_list_draw_screen(view_data);
368 evas_object_hide(view_data->layout);
369 evas_object_show(view_data->layout);
373 static int __vcui_view_multi_call_list_ondestroy(voice_call_view_data_t *view_data)
375 CALL_UI_DEBUG("multicall-list view destroy");
377 vcui_app_call_data_t *ad = _vcui_get_app_data();
379 voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_LIST_VIEW];
380 vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv;
383 elm_genlist_item_class_free(itc_call);
386 if (priv->multibox_gl != NULL) {
387 elm_genlist_clear(priv->multibox_gl);
388 evas_object_del(priv->multibox_gl);
389 priv->multibox_gl = NULL;
392 if (priv->contents) {
393 evas_object_del(priv->contents);
394 priv->contents = NULL;
401 if (vd->layout != NULL) {
402 evas_object_hide(vd->layout);
403 evas_object_del(vd->layout);
407 ad->view_st[VIEW_INCALL_MULTICALL_LIST_VIEW] = NULL;
410 CALL_UI_DEBUG("complete destroy multi view list");