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 "candidate-multiline-efl.h"
25 #define LOG_TAG "ISE_DEFAULT"
27 #include <inputmethod_internal.h>
30 #define CANDIDATE_EDJ_FILE_PATH RESDIR"/edje/candidate-multiline.edj"
31 #define MORE_BUTTON_WIDTH 89
32 #define MORE_BUTTON_HEIGHT 64
33 #define CANDIDATE_WINDOW_HEIGHT 84
34 #define CANDIDATE_ITEMS_NUM 8
35 #define CANDIDATE_ITEM_BLANK 30
36 #define CANDIDATE_SEPARATE_WIDTH 2
37 #define CANDIDATE_SEPARATE_HEIGHT 52
38 #define CANDIDATE_HORIZON_LINE_HEIGHT 2
40 #if defined(_TV) || defined(_COMMON)
41 #define IME_UI_RESOLUTION_W 1920
42 #define IME_UI_RESOLUTION_H 1080
44 #define IME_UI_RESOLUTION_W 720
45 #define IME_UI_RESOLUTION_H 1280
48 static int _threshold = 15;
49 static bool _item_click = true;
50 static int _click_down_pos[2] = {0, 0};
51 static int _click_up_pos[2] = {0, 0};
54 _mouse_down(void *data, Evas *e,
55 Evas_Object *button, void *event_info)
58 Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info;
59 _click_down_pos[0] = ev->canvas.x;
60 _click_down_pos[1] = ev->canvas.y;
64 _mouse_up(void *data, Evas *e,
65 Evas_Object *button, void *event_info)
68 EflMultiLineCandidate *candidate = (EflMultiLineCandidate *)data;
69 candidate->item_pressed(button);
75 _mouse_move(void *data, Evas *e,
76 Evas_Object *button, void *event_info)
78 Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info;
79 _click_up_pos[0] = ev->canvas.x;
80 _click_up_pos[1] = ev->canvas.y;
82 if (abs(_click_up_pos[0] - _click_down_pos[0]) >= _threshold ||
83 abs(_click_up_pos[1] - _click_down_pos[1]) >= _threshold) {
89 EflMultiLineCandidate::item_pressed(Evas_Object *item)
91 const char *str = edje_object_part_text_get(item, "candidate");
92 item_pressed(str? str : "");
96 EflMultiLineCandidate::item_pressed(std::string str)
99 m_candidates_item.clear();
100 CSCLUI *ui = get_ui();
101 if (ui) ui->enable_highlight_ui(TRUE);
102 m_highlight_mode = false;
106 vector<string>::const_iterator it =
107 find(cur_candidates.begin(), cur_candidates.end(), str);
108 if (it != cur_candidates.end()) {
109 index = it-cur_candidates.begin();
115 // notify listeners the event happened
117 desc.type = MultiEventDesc::CANDIDATE_ITEM_MOUSE_DOWN;
120 notify_listeners(desc);
124 EflMultiLineCandidate::item_released(Evas_Object *item)
126 // notify listeners the event happend
128 desc.type = MultiEventDesc::CANDIDATE_ITEM_MOUSE_UP;
129 notify_listeners(desc);
133 EflMultiLineCandidate::item_moved(Evas_Object *item)
135 // notify listeners the event happend
137 desc.type = MultiEventDesc::CANDIDATE_ITEM_MOUSE_MOVE;
138 notify_listeners(desc);
142 EflMultiLineCandidate::get_candidate_item(candidate_item_size item_text_size)
147 edje = edje_object_add(evas_object_evas_get(m_window));
148 ret = edje_object_file_set(edje,
149 CANDIDATE_EDJ_FILE_PATH, "candidate_item");
151 LOGW("getting candidate edje failed.\n");
155 evas_object_event_callback_add(edje, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, this);
156 evas_object_event_callback_add(edje, EVAS_CALLBACK_MOUSE_UP, _mouse_up, this);
157 evas_object_event_callback_add(edje, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move, this);
159 evas_object_size_hint_min_set(edje, item_text_size.width, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
160 edje_object_text_class_set(edje, "candidate", m_candidateFontName.c_str(), m_candidateFontSize);
161 evas_object_show(edje);
167 ui_candidate_window_close_button_down_cb(void *data, Evas *e,
168 Evas_Object *button, void *event_info)
170 EflMultiLineCandidate *candidate =
171 (EflMultiLineCandidate *)data;
172 candidate->close_btn_clicked();
177 ui_candidate_window_more_button_up_cb(void *data, Evas *e,
178 Evas_Object *button, void *event_info)
180 EflMultiLineCandidate *candidate =
181 (EflMultiLineCandidate *)data;
182 candidate->more_btn_released();
187 ui_candidate_window_more_button_down_cb(void *data, Evas *e,
188 Evas_Object *button, void *event_info)
190 EflMultiLineCandidate *candidate =
191 (EflMultiLineCandidate *)data;
192 candidate->more_btn_clicked();
196 EflMultiLineCandidate::more_btn_released()
199 desc.type = MultiEventDesc::CANDIDATE_MORE_BTN_RELEASED;
200 notify_listeners(desc);
204 EflMultiLineCandidate::hide_more_view()
206 evas_object_hide(m_candidateMoreScrollerBg);
207 evas_object_hide(m_candidateMoreScroller);
208 evas_object_hide(m_candidateMoreTable);
211 desc.type = MultiEventDesc::CANDIDATE_MORE_VIEW_HIDE;
213 notify_listeners(desc);
217 EflMultiLineCandidate::show_more_view()
219 evas_object_show(m_candidateMoreScrollerBg);
220 evas_object_show(m_candidateMoreScroller);
221 evas_object_show(m_candidateMoreTable);
223 desc.type = MultiEventDesc::CANDIDATE_MORE_VIEW_SHOW;
225 notify_listeners(desc);
229 EflMultiLineCandidate::show_view()
231 evas_object_show(m_candidateScrollerBg);
232 evas_object_show(m_candidateScroller);
233 evas_object_show(m_candidateTable);
237 EflMultiLineCandidate::hide_view()
239 evas_object_hide(m_candidateMoreBtn);
240 evas_object_hide(m_candidateCloseBtn);
241 evas_object_hide(m_candidateScrollerBg);
242 evas_object_hide(m_candidateTable);
243 evas_object_hide(m_candidateScroller);
247 EflMultiLineCandidate::more_btn_clicked()
249 evas_object_hide(m_candidateMoreBtn);
250 evas_object_show(m_candidateCloseBtn);
254 desc.type = MultiEventDesc::CANDIDATE_MORE_BTN_CLICKED;
255 notify_listeners(desc);
259 EflMultiLineCandidate::close_btn_clicked()
261 evas_object_hide(m_candidateCloseBtn);
262 evas_object_show(m_candidateMoreBtn);
267 desc.type = MultiEventDesc::CANDIDATE_CLOSE_BTN_CLICKED;
268 notify_listeners(desc);
272 EflMultiLineCandidate::get_candidate_separate_line_vertical()
276 Evas_Object *edje = NULL;
278 edje = edje_object_add(evas_object_evas_get(m_window));
279 ret = edje_object_file_set(edje, CANDIDATE_EDJ_FILE_PATH, "seperate_line_vertical");
281 LOGW("getting seperate line failed.\n");
284 evas_object_show(edje);
285 evas_object_size_hint_min_set(edje, CANDIDATE_SEPARATE_WIDTH, CANDIDATE_SEPARATE_HEIGHT*m_screenRatio);
291 EflMultiLineCandidate::get_candidate_separate_line_horizon()
294 Evas_Object * edje = NULL;
295 edje = edje_object_add(evas_object_evas_get(m_window));
296 ret = edje_object_file_set(edje, CANDIDATE_EDJ_FILE_PATH, "seperate_line_horizon");
298 LOGW("getting seperate line failed.\n");
301 evas_object_show(edje);
302 evas_object_size_hint_min_set(edje, m_screenWidth, CANDIDATE_HORIZON_LINE_HEIGHT);
307 EflMultiLineCandidate::make_more_view()
309 m_candidateMoreScrollerBg = edje_object_add(evas_object_evas_get((Evas_Object*)m_window));
310 edje_object_file_set(m_candidateMoreScrollerBg, CANDIDATE_EDJ_FILE_PATH, "scroller_bg");
311 evas_object_size_hint_weight_set(m_candidateMoreScrollerBg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
312 evas_object_resize(m_candidateMoreScrollerBg, m_screenWidth, m_screenHeight-CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
313 if (m_floating_mode) {
314 evas_object_move(m_candidateMoreScrollerBg, 0, (CANDIDATE_WINDOW_HEIGHT*m_screenRatio)+FLOATING_TITLE_BAR_HEIGHT);
316 evas_object_move(m_candidateMoreScrollerBg, 0, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
319 m_candidateMoreScroller = elm_scroller_add((Evas_Object*)m_window);
320 elm_scroller_bounce_set(m_candidateMoreScroller, EINA_TRUE, EINA_FALSE);
321 elm_scroller_policy_set(m_candidateMoreScroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
323 evas_object_resize(m_candidateMoreScroller, m_screenWidth -60, m_screenHeight-CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
325 evas_object_move(m_candidateMoreScroller, 0, (CANDIDATE_WINDOW_HEIGHT*m_screenRatio)+FLOATING_TITLE_BAR_HEIGHT);
327 evas_object_move(m_candidateMoreScroller, 30, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
329 evas_object_resize(m_candidateMoreScroller, m_screenWidth, m_screenHeight-CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
331 evas_object_move(m_candidateMoreScroller, 0, (CANDIDATE_WINDOW_HEIGHT*m_screenRatio)+FLOATING_TITLE_BAR_HEIGHT);
333 evas_object_move(m_candidateMoreScroller, 0, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
336 m_candidateMoreTable = elm_table_add((Evas_Object*)m_window);
337 evas_object_size_hint_weight_set(m_candidateMoreTable, 0.0, 0.0);
338 evas_object_size_hint_align_set(m_candidateMoreTable, 0.0, 0.0);
339 elm_table_padding_set(m_candidateMoreTable, 0, 0);
340 elm_object_content_set(m_candidateMoreScroller, m_candidateMoreTable);
342 evas_object_layer_set(m_candidateMoreScrollerBg, 32000);
343 evas_object_layer_set(m_candidateMoreScroller, 32001);
344 evas_object_layer_set(m_candidateMoreTable, 32000);
348 EflMultiLineCandidate::create_candidate_button(const char *style, Evas_Object_Event_Cb mouse_down_cb)
350 Evas_Object *candidateBtn = edje_object_add(evas_object_evas_get(m_window));
351 edje_object_file_set(candidateBtn, CANDIDATE_EDJ_FILE_PATH, style);
352 evas_object_size_hint_min_set(candidateBtn, MORE_BUTTON_WIDTH*m_screenRatio, MORE_BUTTON_HEIGHT*m_screenRatio);
353 evas_object_resize(candidateBtn, MORE_BUTTON_WIDTH*m_screenRatio, MORE_BUTTON_HEIGHT*m_screenRatio);
356 evas_object_move(candidateBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio - 30,
357 ((CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2) + FLOATING_TITLE_BAR_HEIGHT);
359 evas_object_move(candidateBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio - 30,
360 (CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2);
363 evas_object_move(candidateBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
364 ((CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2) + FLOATING_TITLE_BAR_HEIGHT);
366 evas_object_move(candidateBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
367 (CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2);
369 evas_object_event_callback_add(candidateBtn, EVAS_CALLBACK_MOUSE_DOWN,
370 mouse_down_cb, this);
372 LOGD("Created candidate button (%s)", style);
378 EflMultiLineCandidate::make_view()
380 Evas_Coord scr_w, scr_h;
381 elm_win_screen_size_get(m_window, NULL, NULL, &scr_w, &scr_h);
382 m_screenWidth = scr_w;
383 m_screenHeight = scr_h;
384 double screenRatio_w = (double)scr_w/IME_UI_RESOLUTION_W;
385 double screenRatio_h = (double)scr_h/IME_UI_RESOLUTION_H;
387 read_ise_config_values();
389 CONFIG_VALUES *config_values = get_config_values();
391 m_floating_mode = config_values->floating_mode;
394 if (m_floating_mode) {
395 m_screenRatio = FLOATING_SCALE_RATE;
396 m_screenWidth *= m_screenRatio;
398 m_screenRatio = MAX(screenRatio_w, screenRatio_h);
401 m_candidateScrollerBg = edje_object_add(evas_object_evas_get((Evas_Object*)m_window));
402 edje_object_file_set(m_candidateScrollerBg, CANDIDATE_EDJ_FILE_PATH, "candidate_bg");
403 evas_object_size_hint_weight_set(m_candidateScrollerBg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
404 evas_object_resize(m_candidateScrollerBg, m_screenWidth, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
406 evas_object_move(m_candidateScrollerBg, 0, FLOATING_TITLE_BAR_HEIGHT);
408 evas_object_move(m_candidateScrollerBg, 0, 0);
410 m_candidateScroller = elm_scroller_add(m_window);
411 elm_scroller_bounce_set(m_candidateScroller, EINA_TRUE, EINA_FALSE);
412 elm_scroller_policy_set(m_candidateScroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
414 evas_object_resize(m_candidateScroller, m_screenWidth - 60, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
416 evas_object_move(m_candidateScroller, 0, FLOATING_TITLE_BAR_HEIGHT);
418 evas_object_move(m_candidateScroller, 30, 0);
420 evas_object_resize(m_candidateScroller, m_screenWidth, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
422 evas_object_move(m_candidateScroller, 0, FLOATING_TITLE_BAR_HEIGHT);
424 evas_object_move(m_candidateScroller, 0, 0);
427 m_candidateTable = elm_table_add(m_window);
428 evas_object_size_hint_weight_set(m_candidateTable, 0.0, 0.0);
430 evas_object_size_hint_align_set(m_candidateTable, 30.0/360, 330.0/360);
432 evas_object_size_hint_align_set(m_candidateTable, 0.0, 0.0);
434 elm_table_padding_set(m_candidateTable, 0, 0);
435 elm_object_content_set(m_candidateScroller, m_candidateTable);
437 m_candidateMoreBtn = create_candidate_button("more_button", ui_candidate_window_more_button_down_cb);
438 m_candidateCloseBtn = create_candidate_button("close_button", ui_candidate_window_close_button_down_cb);
440 evas_object_layer_set(m_candidateScrollerBg, 32000);
441 evas_object_layer_set(m_candidateScroller, 32000);
442 evas_object_layer_set(m_candidateMoreBtn, 32000);
443 evas_object_layer_set(m_candidateCloseBtn, 32000);
446 EflMultiLineCandidate::EflMultiLineCandidate(Evas_Object *window)
452 m_floating_mode = false;
454 m_candidateScrollerBg = NULL;
455 m_candidateScroller = NULL;
456 m_candidateTable = NULL;
457 m_candidateMoreBtn = NULL;
458 m_candidateCloseBtn = NULL;
459 m_candidateMoreScrollerBg = NULL;
460 m_candidateMoreScroller = NULL;
461 m_candidateMoreTable = NULL;
465 m_candidateFontName = string("Tizen");
466 m_candidateFontSize = 37*m_screenRatio;
467 m_stringWidthCalObj = evas_object_text_add(m_window);
468 evas_object_text_font_set(m_stringWidthCalObj, m_candidateFontName.c_str(), m_candidateFontSize);
470 m_focused_candidate_index = 0;
471 m_highlight_mode = false;
475 EflMultiLineCandidate::~EflMultiLineCandidate()
477 if (m_candidateTable)
478 elm_table_clear(m_candidateTable, EINA_TRUE);
480 if (m_candidateMoreTable)
481 elm_table_clear(m_candidateMoreTable, EINA_TRUE);
483 if (m_stringWidthCalObj)
484 evas_object_del(m_stringWidthCalObj);
486 if (m_candidateScrollerBg)
487 evas_object_del(m_candidateScrollerBg);
489 if (m_candidateScroller)
490 evas_object_del(m_candidateScroller);
492 if (m_candidateTable)
493 evas_object_del(m_candidateTable);
495 if (m_candidateMoreBtn)
496 evas_object_del(m_candidateMoreBtn);
498 if (m_candidateCloseBtn)
499 evas_object_del(m_candidateCloseBtn);
501 if (m_candidateMoreScrollerBg)
502 evas_object_del(m_candidateMoreScrollerBg);
504 if (m_candidateMoreScroller)
505 evas_object_del(m_candidateMoreScroller);
507 if (m_candidateMoreTable)
508 evas_object_del(m_candidateMoreTable);
512 EflMultiLineCandidate::show()
519 EflMultiLineCandidate::hide()
527 EflMultiLineCandidate::get_candidate_item_text_size(string srcStr)
529 evas_object_text_font_set(m_stringWidthCalObj, m_candidateFontName.c_str(), m_candidateFontSize);
530 evas_object_text_text_set(m_stringWidthCalObj, srcStr.c_str());
531 candidate_item_size item_text_size = {0, 0};
532 evas_object_geometry_get(m_stringWidthCalObj, NULL, NULL, &item_text_size.width, &item_text_size.height);
533 // int candidate_item_min = (m_screenWidth - MORE_BUTTON_WIDTH)/CANDIDATE_ITEMS_NUM;
534 item_text_size.width += CANDIDATE_ITEM_BLANK * m_screenRatio * 2;
535 item_text_size.width = MIN(item_text_size.width, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio);
536 return item_text_size;
540 _item_access_action(void *data, Evas_Object *access_object, Elm_Access_Action_Info *action_info)
542 const char * name = elm_atspi_accessible_name_get(access_object);
543 LOGD("access_action callback on item: %s", name);
547 EflMultiLineCandidate *candidate = (EflMultiLineCandidate *)data;
548 candidate->item_pressed(name);
553 EflMultiLineCandidate::register_access_object(Evas_Object* obj, std::string name, const Elm_Access_Action_Cb access_action, const void *data)
555 Evas_Object * access_object = elm_access_object_register(obj, m_window);
558 elm_atspi_accessible_name_set(access_object, name.c_str());
559 elm_atspi_accessible_role_set(access_object, ELM_ATSPI_ROLE_PUSH_BUTTON);
561 elm_access_action_cb_set(access_object, ELM_ACCESS_ACTION_ACTIVATE, access_action, data);
565 EflMultiLineCandidate::update(const vector<string> &vec_str)
567 cur_candidates = vec_str;
569 m_focused_candidate_index = 0;
570 m_candidates_item.clear();
573 evas_object_hide(m_candidateMoreBtn);
574 evas_object_hide(m_candidateCloseBtn);
576 elm_table_clear(m_candidateTable, EINA_TRUE);
577 elm_table_clear(m_candidateMoreTable, EINA_TRUE);
579 int cur_item_sum = 0;
580 //int item_num = vec_str.size();
581 int item_num = (vec_str.size() > 20 ? 20 : vec_str.size());//for fixing lagging issue of glm temporarily
582 bool multiline = false;
584 for (int i = 0; i < item_num; ++i)
586 candidate_item_size item_text_size = get_candidate_item_text_size(vec_str[i]);
588 if ((!multiline) && (cur_item_sum + item_text_size.width < m_screenWidth - 60 - MORE_BUTTON_WIDTH*m_screenRatio))
590 if ((!multiline) && (cur_item_sum + item_text_size.width < m_screenWidth - MORE_BUTTON_WIDTH*m_screenRatio))
594 if (0 != cur_item_sum)
596 Evas_Object *vertical_seperate = get_candidate_separate_line_vertical();
597 y_start = (CANDIDATE_WINDOW_HEIGHT - CANDIDATE_SEPARATE_HEIGHT)*m_screenRatio / 2;
598 elm_table_pack(m_candidateTable, vertical_seperate, cur_item_sum, y_start,
599 CANDIDATE_SEPARATE_WIDTH, CANDIDATE_SEPARATE_HEIGHT*m_screenRatio);
600 cur_item_sum += CANDIDATE_SEPARATE_WIDTH;
602 Evas_Object *item = get_candidate_item(item_text_size);
603 edje_object_part_text_set(item, "candidate", vec_str[i].c_str());
604 register_access_object(item, vec_str[i], _item_access_action, this);
605 y_start = (CANDIDATE_WINDOW_HEIGHT*m_screenRatio - item_text_size.height)/2;
606 elm_table_pack(m_candidateTable, item, cur_item_sum, y_start,
607 item_text_size.width, item_text_size.height);
608 cur_item_sum += item_text_size.width;
610 m_candidates_item.push_back(item);
612 } else if (!multiline) {
618 Evas_Object *item = get_candidate_item(item_text_size);
619 edje_object_part_text_set(item, "candidate", vec_str[i].c_str());
620 register_access_object(item, vec_str[i], _item_access_action, this);
621 y_start = (CANDIDATE_WINDOW_HEIGHT*m_screenRatio - item_text_size.height)/2;
622 elm_table_pack(m_candidateTable, item, cur_item_sum, y_start,
623 item_text_size.width, item_text_size.height);
625 m_candidates_item.push_back(item);
634 if (cur_item_sum + item_text_size.width > m_screenWidth - 60)
636 if (cur_item_sum + item_text_size.width > m_screenWidth)
644 if (0 != cur_item_sum)
646 Evas_Object *vertical_seperate = get_candidate_separate_line_vertical();
647 y_start = (CANDIDATE_WINDOW_HEIGHT - CANDIDATE_SEPARATE_HEIGHT)*m_screenRatio / 2;
648 elm_table_pack(m_candidateMoreTable, vertical_seperate, cur_item_sum,
649 lineCount*CANDIDATE_WINDOW_HEIGHT*m_screenRatio+(lineCount+1)*CANDIDATE_HORIZON_LINE_HEIGHT+y_start,
650 CANDIDATE_SEPARATE_WIDTH, CANDIDATE_SEPARATE_HEIGHT*m_screenRatio);
651 cur_item_sum += CANDIDATE_SEPARATE_WIDTH;
653 Evas_Object *horizon_seperate = get_candidate_separate_line_horizon();
654 y_start = lineCount*(CANDIDATE_WINDOW_HEIGHT*m_screenRatio+CANDIDATE_HORIZON_LINE_HEIGHT);
655 elm_table_pack(m_candidateMoreTable, horizon_seperate, cur_item_sum, y_start,
656 m_screenWidth, CANDIDATE_HORIZON_LINE_HEIGHT);
659 Evas_Object *item = get_candidate_item(item_text_size);
660 edje_object_part_text_set(item, "candidate", vec_str[i].c_str());
661 y_start = (CANDIDATE_WINDOW_HEIGHT*m_screenRatio - item_text_size.height)/2;
662 elm_table_pack(m_candidateMoreTable, item, cur_item_sum, lineCount*CANDIDATE_WINDOW_HEIGHT*m_screenRatio+y_start,
663 item_text_size.width, item_text_size.height);
664 cur_item_sum += item_text_size.width;
666 m_candidates_item.push_back(item);
673 evas_object_show(m_candidateMoreBtn);
678 EflMultiLineCandidate::rotate(int degree)
682 Evas_Coord scr_w, scr_h;
683 elm_win_screen_size_get(m_window, NULL, NULL, &scr_w, &scr_h);
684 m_screenWidth = scr_w;
685 m_screenHeight = scr_h;
686 bool landscape_display_device = false;
689 landscape_display_device = true;
694 if (landscape_display_device) {
695 m_screenWidth = MAX(scr_w, scr_h);
696 m_screenHeight = MIN(scr_w, scr_h);
699 m_screenWidth = MIN(scr_w, scr_h);
700 m_screenHeight = MAX(scr_w, scr_h);
705 if (landscape_display_device) {
706 m_screenWidth = MIN(scr_w, scr_h);
707 m_screenHeight = MAX(scr_w, scr_h);
710 m_screenWidth = MAX(scr_w, scr_h);
711 m_screenHeight = MIN(scr_w, scr_h);
719 m_screenWidth *= m_screenRatio;
722 int temp = m_screenWidth;
723 m_screenWidth = m_screenHeight;
724 m_screenHeight = temp;
727 evas_object_resize(m_candidateScrollerBg, m_screenWidth, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
728 evas_object_resize(m_candidateScroller, m_screenWidth, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
729 evas_object_resize(m_candidateMoreScrollerBg, m_screenWidth, m_screenHeight-CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
730 evas_object_resize(m_candidateMoreScroller, m_screenWidth, m_screenHeight-CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
731 if (m_floating_mode) {
732 evas_object_move(m_candidateMoreBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
733 ((CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2) + FLOATING_TITLE_BAR_HEIGHT);
734 evas_object_move(m_candidateCloseBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
735 ((CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2) + FLOATING_TITLE_BAR_HEIGHT);
737 evas_object_move(m_candidateMoreBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
738 (CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2);
739 evas_object_move(m_candidateCloseBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
740 (CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2);
745 EflMultiLineCandidate::get_height()
747 return CANDIDATE_WINDOW_HEIGHT*m_screenRatio;
751 EflMultiLineCandidate::get_floating_mode()
753 return m_floating_mode;
757 sclu32 EflMultiLineCandidate::soft_candidate_handle_key_event(const char *keyname)
759 int count = (cur_candidates.size() > 20 ? 20 : cur_candidates.size());//for fixing lagging issue of glm temporarily
761 if (strcmp(keyname, "Right") == 0) {
762 if (m_highlight_mode) {
763 index = (m_focused_candidate_index + 1) %count;
764 Evas_Object *item = m_candidates_item[m_focused_candidate_index];
765 edje_object_signal_emit(item, "unhighlight", "bg");
766 item = m_candidates_item[index];
767 edje_object_signal_emit(item, "highlight", "bg");
768 m_focused_candidate_index = index;
773 } else if (strcmp(keyname, "Left") == 0) {
774 if (m_highlight_mode) {
775 index = (m_focused_candidate_index + count - 1) % count;
776 Evas_Object *item = m_candidates_item[m_focused_candidate_index];
777 edje_object_signal_emit(item, "unhighlight", "bg");
778 item = m_candidates_item[index];
779 edje_object_signal_emit(item, "highlight", "bg");
780 m_focused_candidate_index = index;
785 } else if (strcmp(keyname, "Up") == 0) {
786 int item_num = m_candidates_item.size();
789 CSCLUI *ui = get_ui();
790 if (ui) ui->enable_highlight_ui(FALSE);
791 Evas_Object *item = m_candidates_item[m_focused_candidate_index];
792 edje_object_signal_emit(item, "highlight", "bg");
793 m_highlight_mode = true;
796 } else if (strcmp(keyname, "Down") == 0) {
797 if (m_highlight_mode) {
798 int item_num = m_candidates_item.size();
800 Evas_Object *item = m_candidates_item[m_focused_candidate_index];
801 edje_object_signal_emit(item, "unhighlight", "bg");
803 CSCLUI *ui = get_ui();
804 if (ui) ui->enable_highlight_ui(TRUE);
805 m_highlight_mode = false;
813 } else if ((strcmp(keyname, "Return") == 0) || (strcmp(keyname, "Enter") == 0)) {
814 if (m_highlight_mode) {
815 engine_loader_select_candidate(m_focused_candidate_index);
816 m_candidates_item.clear();
817 CSCLUI *ui = get_ui();
818 if (ui) ui->enable_highlight_ui(TRUE);
819 m_highlight_mode = false;