| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/base/ime/candidate_window.h" |
| |
| #include <string> |
| #include "base/logging.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/values.h" |
| |
| namespace ui { |
| |
| namespace { |
| // The default entry number of a page in CandidateWindow. |
| const int kDefaultPageSize = 9; |
| } // namespace |
| |
| CandidateWindow::CandidateWindow() |
| : property_(new CandidateWindowProperty) { |
| } |
| |
| CandidateWindow::~CandidateWindow() { |
| } |
| |
| bool CandidateWindow::IsEqual(const CandidateWindow& cw) const { |
| if (page_size() != cw.page_size() || |
| cursor_position() != cw.cursor_position() || |
| is_cursor_visible() != cw.is_cursor_visible() || |
| orientation() != cw.orientation() || |
| show_window_at_composition() != cw.show_window_at_composition() || |
| is_auxiliary_text_visible() != cw.is_auxiliary_text_visible() || |
| auxiliary_text() != cw.auxiliary_text() || |
| candidates_.size() != cw.candidates_.size()) |
| return false; |
| |
| for (size_t i = 0; i < candidates_.size(); ++i) { |
| const Entry& left = candidates_[i]; |
| const Entry& right = cw.candidates_[i]; |
| if (left.value != right.value || |
| left.label != right.label || |
| left.annotation != right.annotation || |
| left.description_title != right.description_title || |
| left.description_body != right.description_body) |
| return false; |
| } |
| return true; |
| } |
| |
| void CandidateWindow::CopyFrom(const CandidateWindow& cw) { |
| SetProperty(cw.GetProperty()); |
| candidates_.clear(); |
| candidates_ = cw.candidates_; |
| } |
| |
| |
| void CandidateWindow::GetInfolistEntries( |
| std::vector<ui::InfolistEntry>* infolist_entries, |
| bool* has_highlighted) const { |
| DCHECK(infolist_entries); |
| DCHECK(has_highlighted); |
| infolist_entries->clear(); |
| *has_highlighted = false; |
| |
| const size_t cursor_index_in_page = cursor_position() % page_size(); |
| |
| for (size_t i = 0; i < candidates().size(); ++i) { |
| const CandidateWindow::Entry& candidate_entry = candidates()[i]; |
| if (candidate_entry.description_title.empty() && |
| candidate_entry.description_body.empty()) |
| continue; |
| |
| InfolistEntry entry(candidate_entry.description_title, |
| candidate_entry.description_body); |
| if (i == cursor_index_in_page) { |
| entry.highlighted = true; |
| *has_highlighted = true; |
| } |
| infolist_entries->push_back(entry); |
| } |
| } |
| |
| // When the default values are changed, please modify |
| // InputMethodEngineInterface::CandidateWindowProperty too. |
| CandidateWindow::CandidateWindowProperty::CandidateWindowProperty() |
| : page_size(kDefaultPageSize), |
| cursor_position(0), |
| is_cursor_visible(true), |
| is_vertical(false), |
| show_window_at_composition(false), |
| is_auxiliary_text_visible(false) { |
| } |
| |
| CandidateWindow::CandidateWindowProperty::~CandidateWindowProperty() { |
| } |
| |
| CandidateWindow::Entry::Entry() { |
| } |
| |
| CandidateWindow::Entry::~Entry() { |
| } |
| |
| } // namespace ui |