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::make_view()
350 Evas_Coord scr_w, scr_h;
351 elm_win_screen_size_get(m_window, NULL, NULL, &scr_w, &scr_h);
352 m_screenWidth = scr_w;
353 m_screenHeight = scr_h;
354 double screenRatio_w = (double)scr_w/IME_UI_RESOLUTION_W;
355 double screenRatio_h = (double)scr_h/IME_UI_RESOLUTION_H;
357 read_ise_config_values();
359 CONFIG_VALUES *config_values = get_config_values();
361 m_floating_mode = config_values->floating_mode;
364 if (m_floating_mode) {
365 m_screenRatio = FLOATING_SCALE_RATE;
366 m_screenWidth *= m_screenRatio;
368 m_screenRatio = MAX(screenRatio_w, screenRatio_h);
371 m_candidateScrollerBg = edje_object_add(evas_object_evas_get((Evas_Object*)m_window));
372 edje_object_file_set(m_candidateScrollerBg, CANDIDATE_EDJ_FILE_PATH, "candidate_bg");
373 evas_object_size_hint_weight_set(m_candidateScrollerBg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
374 evas_object_resize(m_candidateScrollerBg, m_screenWidth, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
376 evas_object_move(m_candidateScrollerBg, 0, FLOATING_TITLE_BAR_HEIGHT);
378 evas_object_move(m_candidateScrollerBg, 0, 0);
380 m_candidateScroller = elm_scroller_add(m_window);
381 elm_scroller_bounce_set(m_candidateScroller, EINA_TRUE, EINA_FALSE);
382 elm_scroller_policy_set(m_candidateScroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
384 evas_object_resize(m_candidateScroller, m_screenWidth - 60, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
386 evas_object_move(m_candidateScroller, 0, FLOATING_TITLE_BAR_HEIGHT);
388 evas_object_move(m_candidateScroller, 30, 0);
390 evas_object_resize(m_candidateScroller, m_screenWidth, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
392 evas_object_move(m_candidateScroller, 0, FLOATING_TITLE_BAR_HEIGHT);
394 evas_object_move(m_candidateScroller, 0, 0);
397 m_candidateTable = elm_table_add(m_window);
398 evas_object_size_hint_weight_set(m_candidateTable, 0.0, 0.0);
400 evas_object_size_hint_align_set(m_candidateTable, 30.0/360, 330.0/360);
402 evas_object_size_hint_align_set(m_candidateTable, 0.0, 0.0);
404 elm_table_padding_set(m_candidateTable, 0, 0);
405 elm_object_content_set(m_candidateScroller, m_candidateTable);
407 m_candidateMoreBtn = edje_object_add(evas_object_evas_get(m_window));
408 edje_object_file_set(m_candidateMoreBtn, CANDIDATE_EDJ_FILE_PATH, "more_button");
409 evas_object_size_hint_min_set(m_candidateMoreBtn, MORE_BUTTON_WIDTH*m_screenRatio, MORE_BUTTON_HEIGHT*m_screenRatio);
410 evas_object_resize(m_candidateMoreBtn, MORE_BUTTON_WIDTH*m_screenRatio, MORE_BUTTON_HEIGHT*m_screenRatio);
413 evas_object_move(m_candidateMoreBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio - 30,
414 ((CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2) + FLOATING_TITLE_BAR_HEIGHT);
416 evas_object_move(m_candidateMoreBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio - 30,
417 (CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2);
420 evas_object_move(m_candidateMoreBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
421 ((CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2) + FLOATING_TITLE_BAR_HEIGHT);
423 evas_object_move(m_candidateMoreBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
424 (CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2);
426 evas_object_event_callback_add(m_candidateMoreBtn, EVAS_CALLBACK_MOUSE_DOWN,
427 ui_candidate_window_more_button_down_cb, this);
429 m_candidateCloseBtn = edje_object_add(evas_object_evas_get(m_window));
430 edje_object_file_set(m_candidateCloseBtn, CANDIDATE_EDJ_FILE_PATH, "close_button");
431 evas_object_size_hint_min_set(m_candidateCloseBtn, MORE_BUTTON_WIDTH*m_screenRatio, MORE_BUTTON_HEIGHT*m_screenRatio);
432 evas_object_resize(m_candidateCloseBtn, MORE_BUTTON_WIDTH*m_screenRatio, MORE_BUTTON_HEIGHT*m_screenRatio);
435 evas_object_move(m_candidateCloseBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio - 30,
436 ((CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2) + FLOATING_TITLE_BAR_HEIGHT);
438 evas_object_move(m_candidateCloseBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio - 30,
439 (CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2);
442 evas_object_move(m_candidateCloseBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
443 ((CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2) + FLOATING_TITLE_BAR_HEIGHT);
445 evas_object_move(m_candidateCloseBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
446 (CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2);
448 evas_object_event_callback_add(m_candidateCloseBtn, EVAS_CALLBACK_MOUSE_DOWN,
449 ui_candidate_window_close_button_down_cb, this);
451 evas_object_layer_set(m_candidateScrollerBg, 32000);
452 evas_object_layer_set(m_candidateScroller, 32000);
453 evas_object_layer_set(m_candidateMoreBtn, 32000);
454 evas_object_layer_set(m_candidateCloseBtn, 32000);
457 EflMultiLineCandidate::EflMultiLineCandidate(Evas_Object *window)
463 m_floating_mode = false;
465 m_candidateScrollerBg = NULL;
466 m_candidateScroller = NULL;
467 m_candidateTable = NULL;
468 m_candidateMoreBtn = NULL;
469 m_candidateCloseBtn = NULL;
470 m_candidateMoreScrollerBg = NULL;
471 m_candidateMoreScroller = NULL;
472 m_candidateMoreTable = NULL;
476 m_candidateFontName = string("Tizen");
477 m_candidateFontSize = 37*m_screenRatio;
478 m_stringWidthCalObj = evas_object_text_add(m_window);
479 evas_object_text_font_set(m_stringWidthCalObj, m_candidateFontName.c_str(), m_candidateFontSize);
481 m_focused_candidate_index = 0;
482 m_highlight_mode = false;
486 EflMultiLineCandidate::~EflMultiLineCandidate()
488 if (m_candidateTable)
489 elm_table_clear(m_candidateTable, EINA_TRUE);
491 if (m_candidateMoreTable)
492 elm_table_clear(m_candidateMoreTable, EINA_TRUE);
494 if (m_stringWidthCalObj)
495 evas_object_del(m_stringWidthCalObj);
497 if (m_candidateScrollerBg)
498 evas_object_del(m_candidateScrollerBg);
500 if (m_candidateScroller)
501 evas_object_del(m_candidateScroller);
503 if (m_candidateTable)
504 evas_object_del(m_candidateTable);
506 if (m_candidateMoreBtn)
507 evas_object_del(m_candidateMoreBtn);
509 if (m_candidateCloseBtn)
510 evas_object_del(m_candidateCloseBtn);
512 if (m_candidateMoreScrollerBg)
513 evas_object_del(m_candidateMoreScrollerBg);
515 if (m_candidateMoreScroller)
516 evas_object_del(m_candidateMoreScroller);
518 if (m_candidateMoreTable)
519 evas_object_del(m_candidateMoreTable);
523 EflMultiLineCandidate::show()
530 EflMultiLineCandidate::hide()
538 EflMultiLineCandidate::get_candidate_item_text_size(string srcStr)
540 evas_object_text_font_set(m_stringWidthCalObj, m_candidateFontName.c_str(), m_candidateFontSize);
541 evas_object_text_text_set(m_stringWidthCalObj, srcStr.c_str());
542 candidate_item_size item_text_size = {0, 0};
543 evas_object_geometry_get(m_stringWidthCalObj, NULL, NULL, &item_text_size.width, &item_text_size.height);
544 // int candidate_item_min = (m_screenWidth - MORE_BUTTON_WIDTH)/CANDIDATE_ITEMS_NUM;
545 item_text_size.width += CANDIDATE_ITEM_BLANK * m_screenRatio * 2;
546 item_text_size.width = MIN(item_text_size.width, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio);
547 return item_text_size;
551 _item_access_action(void *data, Evas_Object *access_object, Elm_Access_Action_Info *action_info)
553 const char * name = elm_atspi_accessible_name_get(access_object);
554 LOGD("access_action callback on item: %s", name);
558 EflMultiLineCandidate *candidate = (EflMultiLineCandidate *)data;
559 candidate->item_pressed(name);
564 EflMultiLineCandidate::register_access_object(Evas_Object* obj, std::string name, const Elm_Access_Action_Cb access_action, const void *data)
566 Evas_Object * access_object = elm_access_object_register(obj, m_window);
569 elm_atspi_accessible_name_set(access_object, name.c_str());
570 elm_atspi_accessible_role_set(access_object, ELM_ATSPI_ROLE_PUSH_BUTTON);
572 elm_access_action_cb_set(access_object, ELM_ACCESS_ACTION_ACTIVATE, access_action, data);
577 EflMultiLineCandidate::update(const vector<string> &vec_str)
579 cur_candidates = vec_str;
581 m_focused_candidate_index = 0;
582 m_candidates_item.clear();
585 evas_object_hide(m_candidateMoreBtn);
586 evas_object_hide(m_candidateCloseBtn);
588 elm_table_clear(m_candidateTable, EINA_TRUE);
589 elm_table_clear(m_candidateMoreTable, EINA_TRUE);
591 int cur_item_sum = 0;
592 //int item_num = vec_str.size();
593 int item_num = (vec_str.size() > 20 ? 20 : vec_str.size());//for fixing lagging issue of glm temporarily
594 bool multiline = false;
596 for (int i = 0; i < item_num; ++i)
598 candidate_item_size item_text_size = get_candidate_item_text_size(vec_str[i]);
600 if ((!multiline) && (cur_item_sum + item_text_size.width < m_screenWidth - 60 - MORE_BUTTON_WIDTH*m_screenRatio))
602 if ((!multiline) && (cur_item_sum + item_text_size.width < m_screenWidth - MORE_BUTTON_WIDTH*m_screenRatio))
606 if (0 != cur_item_sum)
608 Evas_Object *vertical_seperate = get_candidate_separate_line_vertical();
609 y_start = (CANDIDATE_WINDOW_HEIGHT - CANDIDATE_SEPARATE_HEIGHT)*m_screenRatio / 2;
610 elm_table_pack(m_candidateTable, vertical_seperate, cur_item_sum, y_start,
611 CANDIDATE_SEPARATE_WIDTH, CANDIDATE_SEPARATE_HEIGHT*m_screenRatio);
612 cur_item_sum += CANDIDATE_SEPARATE_WIDTH;
614 Evas_Object *item = get_candidate_item(item_text_size);
615 edje_object_part_text_set(item, "candidate", vec_str[i].c_str());
616 register_access_object(item, vec_str[i], _item_access_action, this);
617 y_start = (CANDIDATE_WINDOW_HEIGHT*m_screenRatio - item_text_size.height)/2;
618 elm_table_pack(m_candidateTable, item, cur_item_sum, y_start,
619 item_text_size.width, item_text_size.height);
620 cur_item_sum += item_text_size.width;
622 m_candidates_item.push_back(item);
624 } else if (!multiline) {
630 Evas_Object *item = get_candidate_item(item_text_size);
631 edje_object_part_text_set(item, "candidate", vec_str[i].c_str());
632 register_access_object(item, vec_str[i], _item_access_action, this);
633 y_start = (CANDIDATE_WINDOW_HEIGHT*m_screenRatio - item_text_size.height)/2;
634 elm_table_pack(m_candidateTable, item, cur_item_sum, y_start,
635 item_text_size.width, item_text_size.height);
637 m_candidates_item.push_back(item);
646 if (cur_item_sum + item_text_size.width > m_screenWidth - 60)
648 if (cur_item_sum + item_text_size.width > m_screenWidth)
656 if (0 != cur_item_sum)
658 Evas_Object *vertical_seperate = get_candidate_separate_line_vertical();
659 y_start = (CANDIDATE_WINDOW_HEIGHT - CANDIDATE_SEPARATE_HEIGHT)*m_screenRatio / 2;
660 elm_table_pack(m_candidateMoreTable, vertical_seperate, cur_item_sum,
661 lineCount*CANDIDATE_WINDOW_HEIGHT*m_screenRatio+(lineCount+1)*CANDIDATE_HORIZON_LINE_HEIGHT+y_start,
662 CANDIDATE_SEPARATE_WIDTH, CANDIDATE_SEPARATE_HEIGHT*m_screenRatio);
663 cur_item_sum += CANDIDATE_SEPARATE_WIDTH;
665 Evas_Object *horizon_seperate = get_candidate_separate_line_horizon();
666 y_start = lineCount*(CANDIDATE_WINDOW_HEIGHT*m_screenRatio+CANDIDATE_HORIZON_LINE_HEIGHT);
667 elm_table_pack(m_candidateMoreTable, horizon_seperate, cur_item_sum, y_start,
668 m_screenWidth, CANDIDATE_HORIZON_LINE_HEIGHT);
671 Evas_Object *item = get_candidate_item(item_text_size);
672 edje_object_part_text_set(item, "candidate", vec_str[i].c_str());
673 y_start = (CANDIDATE_WINDOW_HEIGHT*m_screenRatio - item_text_size.height)/2;
674 elm_table_pack(m_candidateMoreTable, item, cur_item_sum, lineCount*CANDIDATE_WINDOW_HEIGHT*m_screenRatio+y_start,
675 item_text_size.width, item_text_size.height);
676 cur_item_sum += item_text_size.width;
678 m_candidates_item.push_back(item);
685 evas_object_show(m_candidateMoreBtn);
690 EflMultiLineCandidate::rotate(int degree)
694 Evas_Coord scr_w, scr_h;
695 elm_win_screen_size_get(m_window, NULL, NULL, &scr_w, &scr_h);
696 m_screenWidth = scr_w;
697 m_screenHeight = scr_h;
698 bool landscape_display_device = false;
701 landscape_display_device = true;
706 if (landscape_display_device) {
707 m_screenWidth = MAX(scr_w, scr_h);
708 m_screenHeight = MIN(scr_w, scr_h);
711 m_screenWidth = MIN(scr_w, scr_h);
712 m_screenHeight = MAX(scr_w, scr_h);
717 if (landscape_display_device) {
718 m_screenWidth = MIN(scr_w, scr_h);
719 m_screenHeight = MAX(scr_w, scr_h);
722 m_screenWidth = MAX(scr_w, scr_h);
723 m_screenHeight = MIN(scr_w, scr_h);
731 m_screenWidth *= m_screenRatio;
734 int temp = m_screenWidth;
735 m_screenWidth = m_screenHeight;
736 m_screenHeight = temp;
739 evas_object_resize(m_candidateScrollerBg, m_screenWidth, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
740 evas_object_resize(m_candidateScroller, m_screenWidth, CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
741 evas_object_resize(m_candidateMoreScrollerBg, m_screenWidth, m_screenHeight-CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
742 evas_object_resize(m_candidateMoreScroller, m_screenWidth, m_screenHeight-CANDIDATE_WINDOW_HEIGHT*m_screenRatio);
743 if (m_floating_mode) {
744 evas_object_move(m_candidateMoreBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
745 ((CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2) + FLOATING_TITLE_BAR_HEIGHT);
746 evas_object_move(m_candidateCloseBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
747 ((CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2) + FLOATING_TITLE_BAR_HEIGHT);
749 evas_object_move(m_candidateMoreBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
750 (CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2);
751 evas_object_move(m_candidateCloseBtn, m_screenWidth-MORE_BUTTON_WIDTH*m_screenRatio,
752 (CANDIDATE_WINDOW_HEIGHT-MORE_BUTTON_HEIGHT)*m_screenRatio/2);
757 EflMultiLineCandidate::get_height()
759 return CANDIDATE_WINDOW_HEIGHT*m_screenRatio;
763 EflMultiLineCandidate::get_floating_mode()
765 return m_floating_mode;
769 sclu32 EflMultiLineCandidate::soft_candidate_handle_key_event(const char *keyname)
771 int count = (cur_candidates.size() > 20 ? 20 : cur_candidates.size());//for fixing lagging issue of glm temporarily
773 if (strcmp(keyname, "Right") == 0) {
774 if (m_highlight_mode) {
775 index = (m_focused_candidate_index + 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, "Left") == 0) {
786 if (m_highlight_mode) {
787 index = (m_focused_candidate_index + count - 1) % count;
788 Evas_Object *item = m_candidates_item[m_focused_candidate_index];
789 edje_object_signal_emit(item, "unhighlight", "bg");
790 item = m_candidates_item[index];
791 edje_object_signal_emit(item, "highlight", "bg");
792 m_focused_candidate_index = index;
797 } else if (strcmp(keyname, "Up") == 0) {
798 int item_num = m_candidates_item.size();
801 CSCLUI *ui = get_ui();
802 if (ui) ui->enable_highlight_ui(FALSE);
803 Evas_Object *item = m_candidates_item[m_focused_candidate_index];
804 edje_object_signal_emit(item, "highlight", "bg");
805 m_highlight_mode = true;
808 } else if (strcmp(keyname, "Down") == 0) {
809 if (m_highlight_mode) {
810 int item_num = m_candidates_item.size();
812 Evas_Object *item = m_candidates_item[m_focused_candidate_index];
813 edje_object_signal_emit(item, "unhighlight", "bg");
815 CSCLUI *ui = get_ui();
816 if (ui) ui->enable_highlight_ui(TRUE);
817 m_highlight_mode = false;
825 } else if ((strcmp(keyname, "Return") == 0) || (strcmp(keyname, "Enter") == 0)) {
826 if (m_highlight_mode) {
827 engine_loader_select_candidate(m_focused_candidate_index);
828 m_candidates_item.clear();
829 CSCLUI *ui = get_ui();
830 if (ui) ui->enable_highlight_ui(TRUE);
831 m_highlight_mode = false;