2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.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.apache.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 "view/view_base.h"
18 #include "view/view_name_input.h"
19 #include "view_manager/view_manager.h"
20 #include "controller/controller_name_input.h"
25 #define ENTRY_STYLE "DEFAULT='align=center'"
27 typedef struct _ss_view_name_input {
28 s_view_base view_base;
29 const char *player_name;
32 static s_view_name_input s_info = { {0,}, };
34 static void _layout_back_cb(void *data, Evas_Object *obj, void *event_info)
36 elm_win_lower(view_manager_get_win());
37 controller_name_input_back();
40 static Eina_Bool _validate_player_name(const char * player_name)
42 if(player_name == NULL || *player_name == '\0')
44 //TODO: extended validation
48 static void _text_entered(Evas_Object * entry)
50 elm_object_focus_set(entry, EINA_FALSE);
51 if (elm_entry_is_empty(entry)) {
52 elm_object_signal_emit(s_info.view_base.view, "player,name,invalidated", "");
55 const char *player_name = elm_entry_entry_get(entry);
56 if (!_validate_player_name(player_name)) {
57 //TODO: serve incorrect player_name
58 elm_object_signal_emit(s_info.view_base.view, "player,name,invalidated", "");
61 s_info.player_name = player_name;
62 elm_object_signal_emit(s_info.view_base.view, "player,name,validated", "");
65 static void _text_set_cb(void *data, Evas_Object *obj, void *event_info)
70 static void _keyboard_showed_cb(void *data, Evas_Object *obj, void *event_info)
72 elm_layout_signal_emit(s_info.view_base.view, "player,name,invalidated", "");
73 elm_layout_signal_emit(s_info.view_base.view, "entry,active", "entry");
76 static void _keyboard_hidden_cb(void *data, Evas_Object *obj, void *event_info)
78 if (elm_entry_is_empty((Evas_Object*)data)) {
79 elm_layout_signal_emit(s_info.view_base.view, "entry,inactive", "entry");
81 _text_entered((Evas_Object*)data);
84 static void _destroy_and_save()
86 controller_player_name_set(s_info.player_name);
87 evas_object_smart_callback_del(view_manager_get_conform(), "virtualkeypad,state,on", _keyboard_showed_cb);
88 evas_object_smart_callback_del(view_manager_get_conform(), "virtualkeypad,state,off", _keyboard_hidden_cb);
91 static void _ok_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
94 controller_name_input_next();
97 static void _view_name_input_create_gui(Evas_Object *parent)
99 s_info.view_base.view = view_base_create_layout(parent, "edje/view_name_input.edj", GRP_MAIN);
100 eext_object_event_callback_add(s_info.view_base.view, EEXT_CALLBACK_BACK, _layout_back_cb, NULL);
102 //Creating middle button
103 view_base_create_button(s_info.view_base.view, "button_middle", "Tap to enter text", NULL, "racing_middle", NULL, NULL);
105 //Creating entry for player's name
106 Evas_Object *entry = elm_entry_add(parent);
108 assert(!"Failed to create entry");
110 static Elm_Entry_Filter_Limit_Size limit_size = { .max_char_count = PLAYER_NAME_MAX_LEN, .max_byte_count = 0};
111 elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_size);
112 elm_entry_single_line_set(entry, EINA_TRUE);
113 elm_entry_text_style_user_push(entry, ENTRY_STYLE);
114 evas_object_smart_callback_add(view_manager_get_conform(), "virtualkeypad,state,on", _keyboard_showed_cb, entry);
115 evas_object_smart_callback_add(view_manager_get_conform(), "virtualkeypad,state,off", _keyboard_hidden_cb, entry);
116 evas_object_smart_callback_add(entry, "activated", _text_set_cb, NULL);
117 elm_layout_content_set(s_info.view_base.view, "entry_placeholder", entry);
119 //Creating confirm button
120 view_base_create_button(s_info.view_base.view, "button_ok", "OK", NULL, "racing_bottom",_ok_button_clicked_cb, NULL);
123 static void _show_cb(void)
125 controller_name_input_init(NULL);
128 static void _hide_cb(void)
130 controller_name_input_destroy();
133 s_view_base *view_name_input_init(Evas_Object *parent)
135 s_info.view_base.show_cb = _show_cb;
136 s_info.view_base.hide_cb = _hide_cb;
138 _view_name_input_create_gui(parent);
140 return &s_info.view_base;