2 * Copyright (c) 2012 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
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/licenses/LICENSE-2.0
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 "ise-language-change.h"
21 #include <inputmethod.h>
23 #define LOG_TAG "ISE_DEFAULT"
27 static short int space_popup_width = NOT_USED;
28 static short int space_popup_height = NOT_USED;
30 static short int scroller_area_width = NOT_USED;
31 static short int scroller_area_height = NOT_USED;
32 static short int scroller_x = NOT_USED;
33 static short int scroller_y = NOT_USED;
34 static short int space_popup_width_padding = NOT_USED;
36 static short int arrow_image_width = NOT_USED;
37 static short int arrow_image_height = NOT_USED;
38 static short int arrow_image_x_padding = NOT_USED;
39 static short int arrow_image_y_padding = NOT_USED;
42 static short int space_image_width = NOT_USED;
43 static short int space_image_height = NOT_USED;
47 #define IMG_ARROW_LEFT LAYOUTDIR"/wearable/image/button/B09_btn_arrow_left.png"
48 #define IMG_ARROW_RIGHT LAYOUTDIR"/wearable/image/button/B09_btn_arrow_right.png"
49 #define IMG_POPUP_FC_BG LAYOUTDIR"/wearable/image/button/language_change_popup_bg.png"
50 #define IMG_SPACE_POPUP_FC_PRESS LAYOUTDIR"/wearable/image/button/B09_icon_space_popup_fc_press.png"
51 #define EDJ_FILE RESDIR"/edje/wearable/popup_custom.edj"
52 #define SPACE_SIZE_HEIGHT 111
53 #define SPACE_SIZE_WIDTH 194
54 #define SPACE_PADDING_X 10
55 #define SPACE_PADDING_Y 10
56 #define SPACE_KEY_HEIGHT 60
58 #define IMG_ARROW_LEFT LAYOUTDIR "/" PROFILE_NAME"/image/button/btn_arrow_s_left.png"
59 #define IMG_ARROW_RIGHT LAYOUTDIR "/" PROFILE_NAME"/image/button/btn_arrow_s_right.png"
60 #define IMG_POPUP_FC_BG LAYOUTDIR "/" PROFILE_NAME"/image/button/language_change_popup_bg.png"
61 #define EDJ_FILE RESDIR "/edje/" PROFILE_NAME"/popup_custom.edj"
64 static short int lang_popup_x = NOT_USED;
65 static short int lang_popup_y = NOT_USED;
67 static short int old_ev_x = NOT_USED;
68 static short int old_ev_y = NOT_USED;
70 static int scroller_region_x = NOT_USED;
71 static int cw = NOT_USED;
73 static bool lang_popup_on = false;
75 static Ecore_Event_Handler *_lang_popup_mouse_move_handler = NULL;
76 static Evas_Object *win = NULL;
77 static Evas_Object *image_ob = NULL;
79 static Evas_Object *img_space = NULL;
81 static Evas_Object *scroller = NULL;
82 static Evas_Object *img_arrow_left = NULL;
83 static Evas_Object *img_arrow_right = NULL;
85 static ISELanguageManager _language_manager;
87 static Eina_Bool __ise_space_flick_lang_popup_move_cb(void *data, int type, void *event_info);
88 static void __ise_init_space_flick_lang_change_popup_variables(short int space_button_x, short int space_button_y, short int space_button_width, short int space_button_height);
90 void ise_show_space_flick_language_change_popup(short int space_button_x, short int space_button_y, short int space_button_width, short int space_button_height)
93 int space_button_width_tmp, space_button_height_tmp;
94 CSCLUI *ui = get_ui();
95 space_button_width_tmp = ui->get_scaled_x(SPACE_SIZE_WIDTH);
96 space_button_height_tmp = ui->get_scaled_y(SPACE_SIZE_HEIGHT);
97 space_button_x = ui->get_scaled_x(space_button_x + space_button_width) - space_button_width_tmp + ui->get_scaled_x(SPACE_PADDING_X);
98 space_button_y = ui->get_scaled_y(space_button_y + space_button_height) - space_button_height_tmp + ui->get_scaled_y(SPACE_PADDING_Y + SPACE_KEY_HEIGHT);
99 space_button_width = space_button_width_tmp;
100 space_button_height = space_button_height_tmp;
102 std::string left_text = "left";
103 std::string center_text = "center";
104 std::string right_text = "right";
109 scluint num = _language_manager.get_enabled_languages_num();
115 left_text = _language_manager.get_current_language();
116 center_text = _language_manager.get_next_language();
121 } else if (num == 2) {
122 left_text = _language_manager.get_next_language();
123 if (!left_text.empty()) {
124 right_text = left_text;
126 right_text = _language_manager.get_previous_language();
127 if (!right_text.empty()) {
128 left_text = right_text;
131 center_text = _language_manager.get_current_language();
134 left_text = _language_manager.get_next_language();
135 center_text = _language_manager.get_current_language();
136 right_text = _language_manager.get_previous_language();
140 __ise_init_space_flick_lang_change_popup_variables(space_button_x, space_button_y, space_button_width, space_button_height);
142 int xPos = lang_popup_x;
143 int yPos = lang_popup_y;
145 win = elm_bg_add(NATIVE_WINDOW_CAST(ime_get_main_window()));
146 image_ob = evas_object_image_add(evas_object_evas_get(win));
147 evas_object_image_file_set(image_ob, IMG_POPUP_FC_BG, NULL);
148 evas_object_image_border_set(image_ob, 1, 1, 1, 1);
149 Evas_Load_Error err = evas_object_image_load_error_get(image_ob);
150 if (err != EVAS_LOAD_ERROR_NONE) {
151 LOGD("Could not load image, error string is \"%s\"", evas_load_error_str(err));
153 evas_object_image_fill_set(image_ob, 0, 0, space_popup_width, space_popup_height);
154 evas_object_resize(image_ob, space_popup_width, space_popup_height);
155 evas_object_move(image_ob, xPos, yPos);
157 evas_object_layer_set(image_ob, EVAS_LAYER_MAX);
159 evas_object_show(image_ob);
163 evas_object_color_set(win, 255, 255, 255, 255);
165 evas_object_resize(win, space_popup_width, space_popup_height);
166 evas_object_move(win, xPos, yPos);
169 evas_object_layer_set(win, EVAS_LAYER_MAX);
171 evas_object_show(win);
174 img_space = evas_object_image_add(evas_object_evas_get(win));
175 evas_object_image_file_set(img_space, IMG_SPACE_POPUP_FC_PRESS, NULL);
176 evas_object_image_fill_set(img_space, 0, 0, space_image_width, space_image_height);
177 evas_object_resize(img_space, space_image_width, space_image_height);
178 evas_object_move(img_space, xPos + (space_button_width - space_image_width) / 2, yPos + (space_button_height / 2 - space_image_height) / 2 + space_button_height / 2);
179 evas_object_layer_set(img_space, EVAS_LAYER_MAX);
180 evas_object_show(img_space);
183 img_arrow_left = evas_object_image_add(evas_object_evas_get(win));
184 evas_object_image_file_set(img_arrow_left, IMG_ARROW_LEFT, NULL);
185 evas_object_image_fill_set(img_arrow_left, 0, 0, arrow_image_width, arrow_image_height);
186 evas_object_resize(img_arrow_left, arrow_image_width, arrow_image_height);
187 evas_object_move(img_arrow_left, xPos + arrow_image_x_padding, yPos + scroller_y);
188 evas_object_layer_set(img_arrow_left, EVAS_LAYER_MAX);
190 img_arrow_right = evas_object_image_add(evas_object_evas_get(win));
191 evas_object_image_file_set(img_arrow_right, IMG_ARROW_RIGHT, NULL);
192 evas_object_image_fill_set(img_arrow_right, 0, 0, arrow_image_width, arrow_image_height);
193 evas_object_resize(img_arrow_right, arrow_image_width, arrow_image_height);
194 evas_object_move(img_arrow_right, xPos + space_popup_width - (arrow_image_width + arrow_image_x_padding), yPos + scroller_y);
195 evas_object_layer_set(img_arrow_right, EVAS_LAYER_MAX);
198 Evas_Object* _table = elm_table_add(win);
199 evas_object_size_hint_weight_set(_table, 0.0, 0.0);
200 evas_object_size_hint_align_set(_table, 0.0, 0.0);
201 elm_table_padding_set(_table, 0, 0);
202 evas_object_layer_set(_table, EVAS_LAYER_MAX);
204 scroller = elm_scroller_add(win);
205 elm_object_content_set(scroller, _table);
206 evas_object_resize(scroller, scroller_area_width, scroller_area_height);
207 evas_object_move(scroller, xPos + scroller_x, yPos);
208 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
209 elm_scroller_propagate_events_set(scroller, EINA_TRUE);
210 elm_scroller_page_relative_set(scroller, 0, 0);
211 evas_object_layer_set(scroller, EVAS_LAYER_MAX);
213 Evas_Object *label1 = edje_object_add(evas_object_evas_get(win));
214 evas_object_show(label1);
215 evas_object_layer_set(label1, EVAS_LAYER_MAX);
216 edje_object_file_set(label1, EDJ_FILE, "language_label");
217 edje_object_part_text_set(label1, "language_name", left_text.c_str());
218 evas_object_size_hint_min_set(label1, scroller_area_width, scroller_area_height);
219 elm_table_pack(_table, label1, 0, 0, scroller_area_width, scroller_area_height);
221 Evas_Object *label2 = edje_object_add(evas_object_evas_get(win));
222 evas_object_show(label2);
223 evas_object_layer_set(label2, EVAS_LAYER_MAX);
224 edje_object_file_set(label2, EDJ_FILE, "language_label");
225 edje_object_part_text_set(label2, "language_name", center_text.c_str());
226 evas_object_size_hint_min_set(label2, scroller_area_width, scroller_area_height);
227 elm_table_pack(_table, label2, scroller_area_width, 0, scroller_area_width, scroller_area_height);
231 Evas_Object *label3 = edje_object_add(evas_object_evas_get(win));
232 evas_object_show(label3);
233 evas_object_layer_set(label3, EVAS_LAYER_MAX);
234 edje_object_file_set(label3, EDJ_FILE, "language_label");
235 edje_object_part_text_set(label3, "language_name", right_text.c_str());
236 evas_object_size_hint_min_set(label3, scroller_area_width, scroller_area_height);
237 elm_table_pack(_table, label3, scroller_area_width * 2, 0, scroller_area_width, scroller_area_height);
240 evas_object_show(img_arrow_left);
241 evas_object_show(img_arrow_right);
242 evas_object_show(_table);
243 evas_object_show(scroller);
245 elm_scroller_child_size_get(scroller, &cw, NULL);
246 elm_scroller_region_show(scroller, cw, 0, scroller_area_width, 0);
248 _lang_popup_mouse_move_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, __ise_space_flick_lang_popup_move_cb, NULL);
250 lang_popup_on = true;
253 void ise_destroy_space_flick_language_change_popup(void)
258 elm_scroller_page_size_set(scroller, cw, 0);
261 evas_object_del(win);
267 evas_object_del(image_ob);
272 evas_object_del(img_space);
277 if (img_arrow_left) {
278 evas_object_del(img_arrow_left);
279 img_arrow_left = NULL;
282 if (img_arrow_right) {
283 evas_object_del(img_arrow_right);
284 img_arrow_right = NULL;
287 if (_lang_popup_mouse_move_handler) {
288 ecore_event_handler_del(_lang_popup_mouse_move_handler);
289 _lang_popup_mouse_move_handler = NULL;
293 lang_popup_on = false;
294 scroller_region_x = -1;
299 static void __ise_init_space_flick_lang_change_popup_variables(short int space_button_x, short int space_button_y, short int space_button_width, short int space_button_height)
301 space_popup_width = space_button_width;
302 space_popup_height = space_button_height;
304 arrow_image_width = space_popup_width / 15;
305 arrow_image_height = space_popup_width / 15;
306 arrow_image_x_padding = space_popup_width / 20;
307 arrow_image_y_padding = space_popup_height / 10;
310 space_image_width = arrow_image_width * 12;
311 space_image_height = space_popup_height / 4;
314 scroller_x = (arrow_image_width + arrow_image_x_padding);
315 scroller_y = (space_popup_height - arrow_image_height) / 2;
316 space_popup_width_padding = scroller_x * 2;
318 scroller_area_width = space_popup_width - space_popup_width_padding;
319 scroller_area_height = space_popup_height;
321 lang_popup_x = space_button_x - (space_popup_width - space_button_width) / 2;
322 lang_popup_y = (space_button_y - space_popup_height - arrow_image_y_padding);
325 static Eina_Bool __ise_space_flick_lang_popup_move_cb(void *data, int type, void *event_info)
327 Ecore_Event_Mouse_Move *ev = (Ecore_Event_Mouse_Move *)event_info;
329 if (old_ev_x == NOT_USED && old_ev_y == NOT_USED) {
334 elm_scroller_region_get(scroller, &scroller_region_x, NULL, NULL, NULL);
335 elm_scroller_region_show(scroller, scroller_region_x + (old_ev_x - ev->x)*3, 0, scroller_area_width, 0);
340 return ECORE_CALLBACK_PASS_ON;