// 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. #ifndef ASH_IME_CANDIDATE_WINDOW_VIEW_H_ #define ASH_IME_CANDIDATE_WINDOW_VIEW_H_ #include "ash/ash_export.h" #include "ui/base/ime/candidate_window.h" #include "ui/views/bubble/bubble_delegate.h" #include "ui/views/controls/button/button.h" namespace ash { namespace ime { class CandidateView; class InformationTextArea; // CandidateWindowView is the main container of the candidate window UI. class ASH_EXPORT CandidateWindowView : public views::BubbleDelegateView, public views::ButtonListener { public: // The object can be monitored by the observer. class Observer { public: virtual ~Observer() {} // The function is called when a candidate is committed. virtual void OnCandidateCommitted(int index) = 0; }; explicit CandidateWindowView(gfx::NativeView parent); virtual ~CandidateWindowView(); views::Widget* InitWidget(); // Adds the given observer. The ownership is not transferred. void AddObserver(Observer* observer) { observers_.AddObserver(observer); } // Removes the given observer. void RemoveObserver(Observer* observer) { observers_.RemoveObserver(observer); } // Hides the lookup table. void HideLookupTable(); // Hides the auxiliary text. void HideAuxiliaryText(); // Hides the preedit text. void HidePreeditText(); // Shows the lookup table. void ShowLookupTable(); // Shows the auxiliary text. void ShowAuxiliaryText(); // Shows the preedit text. void ShowPreeditText(); // Updates the preedit text. void UpdatePreeditText(const base::string16& text); // Updates candidates of the candidate window from |candidate_window|. // Candidates are arranged per |orientation|. void UpdateCandidates(const ui::CandidateWindow& candidate_window); void SetCursorBounds(const gfx::Rect& cursor_bounds, const gfx::Rect& composition_head); private: friend class CandidateWindowViewTest; // Overridden from views::ButtonListener: virtual void ButtonPressed(views::Button* sender, const ui::Event& event) OVERRIDE; void SelectCandidateAt(int index_in_page); void UpdateVisibility(); // Initializes the candidate views if needed. void MaybeInitializeCandidateViews( const ui::CandidateWindow& candidate_window); // The candidate window data model. ui::CandidateWindow candidate_window_; // The index in the current page of the candidate currently being selected. int selected_candidate_index_in_page_; // The observers of the object. ObserverList<Observer> observers_; // Views created in the class will be part of tree of |this|, so these // child views will be deleted when |this| is deleted. InformationTextArea* auxiliary_text_; InformationTextArea* preedit_; views::View* candidate_area_; // The candidate views are used for rendering candidates. std::vector<CandidateView*> candidate_views_; // Current columns size in |candidate_area_|. gfx::Size previous_shortcut_column_size_; gfx::Size previous_candidate_column_size_; gfx::Size previous_annotation_column_size_; // The last cursor bounds. gfx::Rect cursor_bounds_; // The last compostion head bounds. gfx::Rect composition_head_bounds_; // True if the candidate window should be shown with aligning with composition // text as opposed to the cursor. bool should_show_at_composition_head_; // True if the candidate window should be shonw on the upper side of // composition text. bool should_show_upper_side_; // True if the candidate window was open. This is used to determine when to // send OnCandidateWindowOpened and OnCandidateWindowClosed events. bool was_candidate_window_open_; DISALLOW_COPY_AND_ASSIGN(CandidateWindowView); }; } // namespace ime } // namespace ash #endif // ASH_IME_CANDIDATE_WINDOW_VIEW_H_