1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ui/base/ime/candidate_window.h" 6 7 #include <string> 8 #include "base/logging.h" 9 #include "base/strings/utf_string_conversions.h" 10 #include "base/values.h" 11 12 namespace ui { 13 14 namespace { 15 // The default entry number of a page in CandidateWindow. 16 const int kDefaultPageSize = 9; 17 } // namespace 18 CandidateWindow()19CandidateWindow::CandidateWindow() 20 : property_(new CandidateWindowProperty) { 21 } 22 ~CandidateWindow()23CandidateWindow::~CandidateWindow() { 24 } 25 IsEqual(const CandidateWindow & cw) const26bool CandidateWindow::IsEqual(const CandidateWindow& cw) const { 27 if (page_size() != cw.page_size() || 28 cursor_position() != cw.cursor_position() || 29 is_cursor_visible() != cw.is_cursor_visible() || 30 orientation() != cw.orientation() || 31 show_window_at_composition() != cw.show_window_at_composition() || 32 is_auxiliary_text_visible() != cw.is_auxiliary_text_visible() || 33 auxiliary_text() != cw.auxiliary_text() || 34 candidates_.size() != cw.candidates_.size()) 35 return false; 36 37 for (size_t i = 0; i < candidates_.size(); ++i) { 38 const Entry& left = candidates_[i]; 39 const Entry& right = cw.candidates_[i]; 40 if (left.value != right.value || 41 left.label != right.label || 42 left.annotation != right.annotation || 43 left.description_title != right.description_title || 44 left.description_body != right.description_body) 45 return false; 46 } 47 return true; 48 } 49 CopyFrom(const CandidateWindow & cw)50void CandidateWindow::CopyFrom(const CandidateWindow& cw) { 51 SetProperty(cw.GetProperty()); 52 candidates_.clear(); 53 candidates_ = cw.candidates_; 54 } 55 56 GetInfolistEntries(std::vector<ui::InfolistEntry> * infolist_entries,bool * has_highlighted) const57void CandidateWindow::GetInfolistEntries( 58 std::vector<ui::InfolistEntry>* infolist_entries, 59 bool* has_highlighted) const { 60 DCHECK(infolist_entries); 61 DCHECK(has_highlighted); 62 infolist_entries->clear(); 63 *has_highlighted = false; 64 65 const size_t cursor_index_in_page = cursor_position() % page_size(); 66 67 for (size_t i = 0; i < candidates().size(); ++i) { 68 const CandidateWindow::Entry& candidate_entry = candidates()[i]; 69 if (candidate_entry.description_title.empty() && 70 candidate_entry.description_body.empty()) 71 continue; 72 73 InfolistEntry entry(candidate_entry.description_title, 74 candidate_entry.description_body); 75 if (i == cursor_index_in_page) { 76 entry.highlighted = true; 77 *has_highlighted = true; 78 } 79 infolist_entries->push_back(entry); 80 } 81 } 82 83 // When the default values are changed, please modify 84 // InputMethodEngineInterface::CandidateWindowProperty too. CandidateWindowProperty()85CandidateWindow::CandidateWindowProperty::CandidateWindowProperty() 86 : page_size(kDefaultPageSize), 87 cursor_position(0), 88 is_cursor_visible(true), 89 is_vertical(false), 90 show_window_at_composition(false), 91 is_auxiliary_text_visible(false) { 92 } 93 ~CandidateWindowProperty()94CandidateWindow::CandidateWindowProperty::~CandidateWindowProperty() { 95 } 96 Entry()97CandidateWindow::Entry::Entry() { 98 } 99 ~Entry()100CandidateWindow::Entry::~Entry() { 101 } 102 103 } // namespace ui 104