Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(761)

Unified Diff: chrome/browser/chromeos/input_method/candidate_window_view.cc

Issue 11857008: Remove InputMethodLookupTable and use IBusLookupTable instead. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/input_method/candidate_window_view.cc
diff --git a/chrome/browser/chromeos/input_method/candidate_window_view.cc b/chrome/browser/chromeos/input_method/candidate_window_view.cc
index 00b3e3f116182b11cea4559d2e65adbb8d0f7ad8..26e03acf8d99afd08b4809cf962427fd12f9da29 100644
--- a/chrome/browser/chromeos/input_method/candidate_window_view.cc
+++ b/chrome/browser/chromeos/input_method/candidate_window_view.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/chromeos/input_method/candidate_window_constants.h"
#include "chrome/browser/chromeos/input_method/hidable_area.h"
#include "chrome/browser/chromeos/input_method/ibus_ui_controller.h"
+#include "chromeos/dbus/ibus/ibus_lookup_table.h"
#include "ui/views/controls/label.h"
#include "ui/views/layout/grid_layout.h"
#include "ui/views/widget/widget.h"
@@ -68,14 +69,12 @@ views::View* WrapWithPadding(views::View* view, const gfx::Insets& insets) {
}
// Creates shortcut text from the given index and the orientation.
-string16 CreateShortcutText(int index,
- const InputMethodLookupTable& table) {
- if (table.labels.empty() ||
- index >= static_cast<int>(table.labels.size()))
+string16 CreateShortcutText(size_t index, const ibus::IBusLookupTable& table) {
+ if (index >= table.candidates().size())
return UTF8ToUTF16("");
-
- std::string shortcut_text = table.labels[index];
- if (table.orientation != InputMethodLookupTable::kVertical)
+ std::string shortcut_text = table.candidates()[index].label;
+ if (!shortcut_text.empty() &&
+ table.orientation() != ibus::IBusLookupTable::VERTICAL)
shortcut_text += '.';
return UTF8ToUTF16(shortcut_text);
}
@@ -83,13 +82,13 @@ string16 CreateShortcutText(int index,
// Creates the shortcut label, and returns it (never returns NULL).
// The label text is not set in this function.
views::Label* CreateShortcutLabel(
- InputMethodLookupTable::Orientation orientation) {
+ ibus::IBusLookupTable::Orientation orientation) {
// Create the shortcut label. The label will be owned by
// |wrapped_shortcut_label|, hence it's deleted when
// |wrapped_shortcut_label| is deleted.
views::Label* shortcut_label = new views::Label;
- if (orientation == InputMethodLookupTable::kVertical) {
+ if (orientation == ibus::IBusLookupTable::VERTICAL) {
shortcut_label->SetFont(
shortcut_label->font().DeriveFont(kFontSizeDelta, gfx::Font::BOLD));
} else {
@@ -109,19 +108,19 @@ views::Label* CreateShortcutLabel(
// The label text is not set in this function.
views::View* CreateWrappedShortcutLabel(
views::Label* shortcut_label,
- InputMethodLookupTable::Orientation orientation) {
+ ibus::IBusLookupTable::Orientation orientation) {
// Wrap it with padding.
const gfx::Insets kVerticalShortcutLabelInsets(1, 6, 1, 6);
const gfx::Insets kHorizontalShortcutLabelInsets(1, 3, 1, 0);
const gfx::Insets insets =
- (orientation == InputMethodLookupTable::kVertical ?
+ (orientation == ibus::IBusLookupTable::VERTICAL ?
kVerticalShortcutLabelInsets :
kHorizontalShortcutLabelInsets);
views::View* wrapped_shortcut_label =
WrapWithPadding(shortcut_label, insets);
// Add decoration based on the orientation.
- if (orientation == InputMethodLookupTable::kVertical) {
+ if (orientation == ibus::IBusLookupTable::VERTICAL) {
// Set the background color.
wrapped_shortcut_label->set_background(
views::Background::CreateSolidBackground(
@@ -136,12 +135,12 @@ views::View* CreateWrappedShortcutLabel(
// Creates the candidate label, and returns it (never returns NULL).
// The label text is not set in this function.
views::Label* CreateCandidateLabel(
- InputMethodLookupTable::Orientation orientation) {
+ ibus::IBusLookupTable::Orientation orientation) {
views::Label* candidate_label = NULL;
// Create the candidate label. The label will be added to |this| as a
// child view, hence it's deleted when |this| is deleted.
- if (orientation == InputMethodLookupTable::kVertical) {
+ if (orientation == ibus::IBusLookupTable::VERTICAL) {
candidate_label = new VerticalCandidateLabel;
} else {
candidate_label = new views::Label;
@@ -158,7 +157,7 @@ views::Label* CreateCandidateLabel(
// Creates the annotation label, and return it (never returns NULL).
// The label text is not set in this function.
views::Label* CreateAnnotationLabel(
- InputMethodLookupTable::Orientation orientation) {
+ ibus::IBusLookupTable::Orientation orientation) {
// Create the annotation label.
views::Label* annotation_label = new views::Label;
@@ -173,20 +172,21 @@ views::Label* CreateAnnotationLabel(
// Computes shortcut column size.
gfx::Size ComputeShortcutColumnSize(
- const InputMethodLookupTable& lookup_table) {
+ const ibus::IBusLookupTable& lookup_table) {
int shortcut_column_width = 0;
int shortcut_column_height = 0;
// Create the shortcut label. The label will be owned by
// |wrapped_shortcut_label|, hence it's deleted when
// |wrapped_shortcut_label| is deleted.
- views::Label* shortcut_label = CreateShortcutLabel(lookup_table.orientation);
+ views::Label* shortcut_label = CreateShortcutLabel(
+ lookup_table.orientation());
scoped_ptr<views::View> wrapped_shortcut_label(
- CreateWrappedShortcutLabel(shortcut_label, lookup_table.orientation));
+ CreateWrappedShortcutLabel(shortcut_label, lookup_table.orientation()));
// Compute the max width and height in shortcut labels.
// We'll create temporary shortcut labels, and choose the largest width and
// height.
- for (int i = 0; i < lookup_table.page_size; ++i) {
+ for (size_t i = 0; i < lookup_table.page_size(); ++i) {
shortcut_label->SetText(CreateShortcutText(i, lookup_table));
gfx::Size text_size = wrapped_shortcut_label->GetPreferredSize();
shortcut_column_width = std::max(shortcut_column_width, text_size.width());
@@ -200,34 +200,34 @@ gfx::Size ComputeShortcutColumnSize(
// Computes the page index. For instance, if the page size is 9, and the
// cursor is pointing to 13th candidate, the page index will be 1 (2nd
// page, as the index is zero-origin). Returns -1 on error.
-int ComputePageIndex(const InputMethodLookupTable& lookup_table) {
- if (lookup_table.page_size > 0)
- return lookup_table.cursor_absolute_index / lookup_table.page_size;
+int ComputePageIndex(const ibus::IBusLookupTable& lookup_table) {
+ if (lookup_table.page_size() > 0)
+ return lookup_table.cursor_position() / lookup_table.page_size();
return -1;
}
// Computes candidate column size.
gfx::Size ComputeCandidateColumnSize(
- const InputMethodLookupTable& lookup_table) {
+ const ibus::IBusLookupTable& lookup_table) {
int candidate_column_width = 0;
int candidate_column_height = 0;
scoped_ptr<views::Label> candidate_label(
- CreateCandidateLabel(lookup_table.orientation));
+ CreateCandidateLabel(lookup_table.orientation()));
// Compute the start index of |lookup_table_|.
const int current_page_index = ComputePageIndex(lookup_table);
if (current_page_index < 0)
return gfx::Size(0, 0);
- const size_t start_from = current_page_index * lookup_table.page_size;
+ const size_t start_from = current_page_index * lookup_table.page_size();
// Compute the max width and height in candidate labels.
// We'll create temporary candidate labels, and choose the largest width and
// height.
- for (size_t i = 0; i + start_from < lookup_table.candidates.size(); ++i) {
+ for (size_t i = 0; i + start_from < lookup_table.candidates().size(); ++i) {
const size_t index = start_from + i;
candidate_label->SetText(
- UTF8ToUTF16(lookup_table.candidates[index]));
+ UTF8ToUTF16(lookup_table.candidates()[index].value));
gfx::Size text_size = candidate_label->GetPreferredSize();
candidate_column_width = std::max(candidate_column_width,
text_size.width());
@@ -240,26 +240,26 @@ gfx::Size ComputeCandidateColumnSize(
// Computes annotation column size.
gfx::Size ComputeAnnotationColumnSize(
- const InputMethodLookupTable& lookup_table) {
+ const ibus::IBusLookupTable& lookup_table) {
int annotation_column_width = 0;
int annotation_column_height = 0;
scoped_ptr<views::Label> annotation_label(
- CreateAnnotationLabel(lookup_table.orientation));
+ CreateAnnotationLabel(lookup_table.orientation()));
// Compute the start index of |lookup_table_|.
const int current_page_index = ComputePageIndex(lookup_table);
if (current_page_index < 0)
return gfx::Size(0, 0);
- const size_t start_from = current_page_index * lookup_table.page_size;
+ const size_t start_from = current_page_index * lookup_table.page_size();
// Compute max width and height in annotation labels.
// We'll create temporary annotation labels, and choose the largest width and
// height.
- for (size_t i = 0; i + start_from < lookup_table.annotations.size(); ++i) {
+ for (size_t i = 0; i + start_from < lookup_table.candidates().size(); ++i) {
const size_t index = start_from + i;
annotation_label->SetText(
- UTF8ToUTF16(lookup_table.annotations[index]));
+ UTF8ToUTF16(lookup_table.candidates()[index].annotation));
gfx::Size text_size = annotation_label->GetPreferredSize();
annotation_column_width = std::max(annotation_column_width,
text_size.width());
@@ -319,7 +319,7 @@ class InformationTextArea : public HidableArea {
CandidateView::CandidateView(
CandidateWindowView* parent_candidate_window,
int index_in_page,
- InputMethodLookupTable::Orientation orientation)
+ ibus::IBusLookupTable::Orientation orientation)
: index_in_page_(index_in_page),
orientation_(orientation),
parent_candidate_window_(parent_candidate_window),
@@ -350,11 +350,11 @@ void CandidateView::Init(int shortcut_column_width,
// If orientation is vertical, each column width is fixed.
// Otherwise the width is resizable.
const views::GridLayout::SizeType column_type =
- orientation_ == InputMethodLookupTable::kVertical ?
+ orientation_ == ibus::IBusLookupTable::VERTICAL ?
views::GridLayout::FIXED : views::GridLayout::USE_PREF;
const int padding_column_width =
- orientation_ == InputMethodLookupTable::kVertical ? 4 : 6;
+ orientation_ == ibus::IBusLookupTable::VERTICAL ? 4 : 6;
// Set shortcut column type and width.
column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
@@ -370,7 +370,7 @@ void CandidateView::Init(int shortcut_column_width,
column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
0, column_type, annotation_column_width, 0);
- if (orientation_ == InputMethodLookupTable::kVertical) {
+ if (orientation_ == ibus::IBusLookupTable::VERTICAL) {
column_set->AddPaddingColumn(0, 1);
column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
views::GridLayout::FIXED, kInfolistIndicatorIconWidth,
@@ -405,7 +405,7 @@ void CandidateView::Init(int shortcut_column_width,
views::GridLayout::FILL, // Vertical alignemnt.
-1, // Preferred width, not specified.
column_height); // Preferred height.
- if (orientation_ == InputMethodLookupTable::kVertical) {
+ if (orientation_ == ibus::IBusLookupTable::VERTICAL) {
infolist_icon_ = new views::View;
views::View* infolist_icon_wrapper = new views::View;
views::GridLayout* infolist_icon_layout =
@@ -518,7 +518,7 @@ bool CandidateView::OnMousePressed(const ui::MouseEvent& event) {
void CandidateView::UpdateLabelBackgroundColors() {
SkColor color = background() ?
background()->get_color() : kDefaultBackgroundColor;
- if (orientation_ != InputMethodLookupTable::kVertical)
+ if (orientation_ != ibus::IBusLookupTable::VERTICAL)
shortcut_label_->SetBackgroundColor(color);
candidate_label_->SetBackgroundColor(color);
annotation_label_->SetBackgroundColor(color);
@@ -617,7 +617,7 @@ void CandidateWindowView::ShowAuxiliaryText() {
footer_area_->Hide();
} else {
// If candidate_area is shown, shows auxiliary text with orientation.
- if (lookup_table_.orientation == InputMethodLookupTable::kHorizontal) {
+ if (lookup_table_.orientation() == ibus::IBusLookupTable::HORIZONTAL) {
header_area_->Show();
footer_area_->Hide();
} else {
@@ -666,32 +666,13 @@ void CandidateWindowView::NotifyIfCandidateWindowOpenedOrClosed() {
}
bool CandidateWindowView::ShouldUpdateCandidateViews(
- const InputMethodLookupTable& old_table,
- const InputMethodLookupTable& new_table) {
-
- // Check if most table contents are identical.
- if (old_table.page_size == new_table.page_size &&
- old_table.orientation == new_table.orientation &&
- old_table.candidates == new_table.candidates &&
- old_table.labels == new_table.labels &&
- old_table.annotations == new_table.annotations &&
- old_table.descriptions.size() == new_table.descriptions.size() &&
- // Check if the page indexes are identical.
- ComputePageIndex(old_table) == ComputePageIndex(new_table)) {
- for (size_t i = 0; i < new_table.descriptions.size(); ++i) {
- if (old_table.descriptions[i].title != new_table.descriptions[i].title ||
- old_table.descriptions[i].body != new_table.descriptions[i].body)
- return true;
- }
- // If all of the conditions are met, we don't have to update candidate
- // views.
- return false;
- }
- return true;
+ const ibus::IBusLookupTable& old_table,
+ const ibus::IBusLookupTable& new_table) {
+ return !old_table.IsEqual(new_table);
}
void CandidateWindowView::UpdateCandidates(
- const InputMethodLookupTable& new_lookup_table) {
+ const ibus::IBusLookupTable& new_lookup_table) {
const bool should_update = ShouldUpdateCandidateViews(lookup_table_,
new_lookup_table);
// Updating the candidate views is expensive. We'll skip this if possible.
@@ -700,23 +681,27 @@ void CandidateWindowView::UpdateCandidates(
MaybeInitializeCandidateViews(new_lookup_table);
should_show_at_composition_head_
- = new_lookup_table.show_at_composition_head;
+ = new_lookup_table.show_window_at_composition();
// Compute the index of the current page.
const int current_page_index = ComputePageIndex(new_lookup_table);
if (current_page_index < 0) {
- DVLOG(1) << "Invalid lookup_table: " << new_lookup_table.ToString();
return;
}
// Update the candidates in the current page.
- const size_t start_from = current_page_index * new_lookup_table.page_size;
+ const size_t start_from = current_page_index * new_lookup_table.page_size();
// In some cases, engines send empty shortcut labels. For instance,
// ibus-mozc sends empty labels when they show suggestions. In this
// case, we should not show shortcut labels.
- const bool no_shortcut_mode =
- (start_from < new_lookup_table.labels.size() &&
- new_lookup_table.labels[start_from].empty());
+ bool no_shortcut_mode = true;
+ for (size_t i = 0; i < new_lookup_table.candidates().size(); ++i) {
+ if (!new_lookup_table.candidates()[i].label.empty()) {
+ no_shortcut_mode = false;
+ break;
+ }
+ }
+
for (size_t i = 0; i < candidate_views_.size(); ++i) {
const size_t index_in_page = i;
const size_t candidate_index = start_from + index_in_page;
@@ -734,16 +719,13 @@ void CandidateWindowView::UpdateCandidates(
CreateShortcutText(i, new_lookup_table));
}
// Set the candidate text.
- if (candidate_index < new_lookup_table.candidates.size() &&
- candidate_index < new_lookup_table.annotations.size()) {
- candidate_view->SetCandidateText(
- UTF8ToUTF16(new_lookup_table.candidates[candidate_index]));
- candidate_view->SetAnnotationText(
- UTF8ToUTF16(new_lookup_table.annotations[candidate_index]));
- candidate_view->SetRowEnabled(true);
-
- candidate_view->SetInfolistIcon(
- !new_lookup_table.descriptions[candidate_index].title.empty());
+ if (candidate_index < new_lookup_table.candidates().size()) {
+ const ibus::IBusLookupTable::Entry& entry =
+ new_lookup_table.candidates()[candidate_index];
+ candidate_view->SetCandidateText(UTF8ToUTF16(entry.value));
+ candidate_view->SetAnnotationText(UTF8ToUTF16(entry.annotation));
+ candidate_view->SetRowEnabled(true);
+ candidate_view->SetInfolistIcon(!entry.description_title.empty());
} else {
// Disable the empty row.
candidate_view->SetCandidateText(string16());
@@ -755,19 +737,19 @@ void CandidateWindowView::UpdateCandidates(
}
// Update the current lookup table. We'll use lookup_table_ from here.
// Note that SelectCandidateAt() uses lookup_table_.
- lookup_table_ = new_lookup_table;
+ lookup_table_.CopyFrom(new_lookup_table);
// Select the current candidate in the page.
const int current_candidate_in_page =
- lookup_table_.cursor_absolute_index % lookup_table_.page_size;
+ lookup_table_.cursor_position() % lookup_table_.page_size();
SelectCandidateAt(current_candidate_in_page);
}
void CandidateWindowView::MaybeInitializeCandidateViews(
- const InputMethodLookupTable& lookup_table) {
- const InputMethodLookupTable::Orientation orientation =
- lookup_table.orientation;
- const int page_size = lookup_table.page_size;
+ const ibus::IBusLookupTable& lookup_table) {
+ const ibus::IBusLookupTable::Orientation orientation =
+ lookup_table.orientation();
+ const int page_size = lookup_table.page_size();
views::View* candidate_area_contents = candidate_area_->contents();
// Current column width.
@@ -777,7 +759,7 @@ void CandidateWindowView::MaybeInitializeCandidateViews(
// If orientation is horizontal, don't need to compute width,
// because each label is left aligned.
- if (orientation == InputMethodLookupTable::kVertical) {
+ if (orientation == ibus::IBusLookupTable::VERTICAL) {
shortcut_column_size = ComputeShortcutColumnSize(lookup_table);
candidate_column_size = ComputeCandidateColumnSize(lookup_table);
annotation_column_size = ComputeAnnotationColumnSize(lookup_table);
@@ -793,7 +775,7 @@ void CandidateWindowView::MaybeInitializeCandidateViews(
// there is no size change. You can test this by removing "return" here
// and type "ni" with Pinyin input method.
if (static_cast<int>(candidate_views_.size()) == page_size &&
- lookup_table_.orientation == orientation &&
+ lookup_table_.orientation() == orientation &&
previous_shortcut_column_size_ == shortcut_column_size &&
previous_candidate_column_size_ == candidate_column_size &&
previous_annotation_column_size_ == annotation_column_size) {
@@ -818,7 +800,7 @@ void CandidateWindowView::MaybeInitializeCandidateViews(
candidate_area_contents->SetLayoutManager(layout);
// Initialize the column set.
views::ColumnSet* column_set = layout->AddColumnSet(0);
- if (orientation == InputMethodLookupTable::kVertical) {
+ if (orientation == ibus::IBusLookupTable::VERTICAL) {
column_set->AddColumn(views::GridLayout::FILL,
views::GridLayout::FILL,
0, views::GridLayout::USE_PREF, 0, 0);
@@ -846,7 +828,7 @@ void CandidateWindowView::MaybeInitializeCandidateViews(
annotation_column_size.height()));
// Add views to the candidate area.
- if (orientation == InputMethodLookupTable::kHorizontal) {
+ if (orientation == ibus::IBusLookupTable::HORIZONTAL) {
layout->StartRow(0, 0);
}
@@ -857,7 +839,7 @@ void CandidateWindowView::MaybeInitializeCandidateViews(
annotation_column_size.width(),
kColumnHeight);
candidate_views_.push_back(candidate_row);
- if (orientation == InputMethodLookupTable::kVertical) {
+ if (orientation == ibus::IBusLookupTable::VERTICAL) {
layout->StartRow(0, 0);
}
// |candidate_row| will be owned by |candidate_area_contents|.
@@ -887,16 +869,15 @@ bool CandidateWindowView::IsCandidateWindowOpen() const {
void CandidateWindowView::SelectCandidateAt(int index_in_page) {
const int current_page_index = ComputePageIndex(lookup_table_);
if (current_page_index < 0) {
- DVLOG(1) << "Invalid lookup_table: " << lookup_table_.ToString();
return;
}
const int cursor_absolute_index =
- lookup_table_.page_size * current_page_index + index_in_page;
+ lookup_table_.page_size() * current_page_index + index_in_page;
// Ignore click on out of range views.
if (cursor_absolute_index < 0 ||
cursor_absolute_index >=
- static_cast<int>(lookup_table_.candidates.size())) {
+ static_cast<int>(lookup_table_.candidates().size())) {
return;
}
@@ -909,7 +890,7 @@ void CandidateWindowView::SelectCandidateAt(int index_in_page) {
candidate_views_[index_in_page]->Select();
// Update the cursor indexes in the model.
- lookup_table_.cursor_absolute_index = cursor_absolute_index;
+ lookup_table_.set_cursor_position(cursor_absolute_index);
}
void CandidateWindowView::OnCandidatePressed(
@@ -991,7 +972,7 @@ void CandidateWindowView::ResizeAndMoveParentFrame() {
int CandidateWindowView::GetHorizontalOffset() {
// Compute the horizontal offset if the lookup table is vertical.
if (!candidate_views_.empty() &&
- lookup_table_.orientation == InputMethodLookupTable::kVertical) {
+ lookup_table_.orientation() == ibus::IBusLookupTable::VERTICAL) {
return - candidate_views_[0]->GetCandidateLabelPosition().x();
}
return 0;

Powered by Google App Engine
This is Rietveld 408576698