3 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
5 * Licensed under the Apache License, Version 2.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 #include <Elementary.h>
19 #include <app_debug.h>
24 #include "view_user.h"
25 #include "view_user_edit.h"
26 #include "data_user.h"
30 #define MESSAGE_POPUP_CONTENT "Can not add users more than 8.<br>If you want to add another user, delete one of users"
40 struct _bar_item *foc;
46 struct datamgr_item *di;
50 static void _btn_key_down(int id, void *data, Evas *e, Evas_Object *obj,
51 Evas_Event_Key_Down *ev)
53 if (!strcmp(ev->keyname, KEY_ENTER) ||
54 !strcmp(ev->keyname, KEY_ENTER_REMOTE) ||
55 !strcmp(ev->keyname, KEY_BACK) ||
56 !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
57 evas_object_del(data);
61 static input_handler btn_handler = {
62 .key_down = _btn_key_down
65 static void _add_popup(struct _priv *priv)
67 Evas_Object *popup, *btn;
69 popup = utils_add_popup(priv->base, MESSAGE_ADD_USER,
70 MESSAGE_POPUP_CONTENT);
72 _ERR("failed to add popup");
76 btn = utils_add_button(popup, MESSAGE_OK, PART_POPUP_BUTTON_1);
78 _ERR("failed to add button");
79 evas_object_del(popup);
82 inputmgr_add_callback(btn, 0, &btn_handler, popup);
83 elm_object_focus_set(btn, EINA_TRUE);
86 static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
87 Evas_Event_Key_Down *ev)
92 _ERR("Invalid argument");
98 if (!strcmp(ev->keyname, KEY_ENTER) ||
99 !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
100 if ((priv->foc->di->action == ITEM_SELECT_ACTION_PUSH) &&
101 (eina_list_count(priv->list) >= MAX_USER_COUNT)) {
106 viewmgr_update_view(VIEW_USER_EDIT, 0, NULL);
107 datamgr_select_item(priv->dm, priv->foc->di);
108 } else if (!strcmp(ev->keyname, KEY_BACK) ||
109 !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
111 } else if (!strcmp(ev->keyname, KEY_DOWN)) {
112 if (priv->foc->di->action == ITEM_SELECT_ACTION_PUSH)
115 viewmgr_update_view(VIEW_USER_EDIT, 0, priv->foc->di);
116 viewmgr_push_view(VIEW_USER_EDIT);
120 static input_handler base_handler = {
121 .key_down = _key_down
124 static Evas_Object *_create(Evas_Object *win, void *data)
131 _ERR("Invalid argument");
135 priv = calloc(1, sizeof(*priv));
137 _ERR("failed to calloc priv");
141 dm = datamgr_init(datamgr_user_get_dclass(), VIEW_USER);
143 _ERR("failed to initialize datamgr");
148 base = utils_add_layout(win, GRP_USER, false, NULL);
150 _ERR("failed to create base");
155 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
157 elm_win_resize_object_add(win, base);
163 viewmgr_set_view_data(VIEW_USER, priv);
164 viewmgr_add_view(view_user_edit_get_vclass(), dm);
165 inputmgr_add_callback(base, 0, &base_handler, priv);
170 static void _focused(int id, void *data, Evas_Object *obj,
171 Elm_Object_Item *item)
174 struct _bar_item *bi;
177 _ERR("Invalid argument");
185 elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG);
188 static void _unfocused(int id, void *data, Evas_Object *obj,
189 Elm_Object_Item *item)
191 elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG);
194 static input_handler eo_handler = {
196 .unfocused = _unfocused
199 static struct _bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box,
200 struct datamgr_item *di)
202 struct _bar_item *bi;
203 Evas_Object *eo, *ic, *focus_ic, *lbl, *focus_lbl, *bg;
205 bi = calloc(1, sizeof(*bi));
207 _ERR("failed to calloc bar item");
212 eo = utils_add_layout(box, GRP_USER_ITEM, true, NULL);
214 _ERR("failed to add layout");
218 lbl = utils_add_label(eo, di->title, STYLE_LABEL_TITLE,
219 PART_BAR_ITEM_TITLE);
223 focus_lbl = utils_add_label(eo, di->title,
224 STYLE_LABEL_TITLE_FOCUS,
225 PART_BAR_ITEM_TITLE_FOCUS);
229 eo = utils_add_layout(box, GRP_BAR_ITEM, true, NULL);
231 _ERR("failed to add layout");
237 ic = utils_add_icon(eo, di->icon, PART_BAR_ITEM_ICON);
241 focus_ic = utils_add_icon(eo,
242 utils_get_focus_icon_from_icon(di->focus_icon),
243 PART_BAR_ITEM_ICON_FOCUS);
247 bg = utils_add_bg(eo, COLOR_DEFAULT_R, COLOR_DEFAULT_G, COLOR_DEFAULT_B,
248 COLOR_DEFAULT_A, PART_BAR_ITEM_BG);
252 inputmgr_add_callback(eo, 0, &eo_handler, bi);
253 elm_box_pack_end(box, eo);
254 evas_object_show(eo);
262 _ERR("failed to add home item");
269 static void _add_user(struct _priv *priv)
272 Evas_Object *scr, *box;
273 struct _bar_item *bi;
274 struct datamgr_item *di;
276 scr = utils_add_scroller(priv->base);
278 _ERR("failed to add scroller");
282 box = utils_add_box(scr, true);
284 _ERR("failed to add box");
285 evas_object_del(scr);
288 elm_object_content_set(scr, box);
289 elm_object_part_content_set(priv->base, PART_USER_BAR, scr);
290 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND,
293 list = datamgr_get_items(priv->dm);
295 _ERR("failed to load list");
296 evas_object_del(scr);
300 EINA_LIST_FOREACH(list, l, di) {
301 bi = _pack_bar_item(priv, box, di);
305 priv->list = eina_list_append(priv->list, bi);
312 static void _show(void *data)
317 _ERR("Invalid argument");
323 evas_object_show(priv->base);
328 priv->foc = eina_list_data_get(priv->list);
330 elm_object_focus_set(priv->foc->eo, EINA_TRUE);
333 static void _unload_user(struct _priv *priv)
335 struct _bar_item *bi;
337 EINA_LIST_FREE(priv->list, bi) {
338 inputmgr_remove_callback(bi->eo, &eo_handler);
339 evas_object_del(bi->eo);
343 elm_box_clear(priv->box);
344 evas_object_del(priv->scr);
351 static void _hide(void *data)
356 _ERR("Invalid argument");
364 evas_object_hide(priv->base);
367 static void _destroy(void *data)
372 _ERR("Invalid argument");
380 viewmgr_remove_view(VIEW_USER_EDIT);
381 datamgr_fini(priv->dm);
382 inputmgr_remove_callback(priv->base, &base_handler);
383 evas_object_del(priv->base);
387 static view_class vclass = {
388 .view_id = VIEW_USER,
395 view_class *view_user_get_vclass(void)