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 #ifndef ASH_IME_CANDIDATE_WINDOW_VIEW_H_ 6 #define ASH_IME_CANDIDATE_WINDOW_VIEW_H_ 7 8 #include "ash/ash_export.h" 9 #include "ui/base/ime/candidate_window.h" 10 #include "ui/views/bubble/bubble_delegate.h" 11 #include "ui/views/controls/button/button.h" 12 13 namespace ash { 14 namespace ime { 15 16 class CandidateView; 17 class InformationTextArea; 18 19 // CandidateWindowView is the main container of the candidate window UI. 20 class ASH_EXPORT CandidateWindowView : public views::BubbleDelegateView, 21 public views::ButtonListener { 22 public: 23 // The object can be monitored by the observer. 24 class Observer { 25 public: ~Observer()26 virtual ~Observer() {} 27 // The function is called when a candidate is committed. 28 virtual void OnCandidateCommitted(int index) = 0; 29 }; 30 31 explicit CandidateWindowView(gfx::NativeView parent); 32 virtual ~CandidateWindowView(); 33 views::Widget* InitWidget(); 34 35 // Adds the given observer. The ownership is not transferred. AddObserver(Observer * observer)36 void AddObserver(Observer* observer) { 37 observers_.AddObserver(observer); 38 } 39 40 // Removes the given observer. RemoveObserver(Observer * observer)41 void RemoveObserver(Observer* observer) { 42 observers_.RemoveObserver(observer); 43 } 44 45 // Hides the lookup table. 46 void HideLookupTable(); 47 48 // Hides the auxiliary text. 49 void HideAuxiliaryText(); 50 51 // Hides the preedit text. 52 void HidePreeditText(); 53 54 // Shows the lookup table. 55 void ShowLookupTable(); 56 57 // Shows the auxiliary text. 58 void ShowAuxiliaryText(); 59 60 // Shows the preedit text. 61 void ShowPreeditText(); 62 63 // Updates the preedit text. 64 void UpdatePreeditText(const base::string16& text); 65 66 // Updates candidates of the candidate window from |candidate_window|. 67 // Candidates are arranged per |orientation|. 68 void UpdateCandidates(const ui::CandidateWindow& candidate_window); 69 70 void SetCursorBounds(const gfx::Rect& cursor_bounds, 71 const gfx::Rect& composition_head); 72 73 private: 74 friend class CandidateWindowViewTest; 75 76 // Overridden from views::ButtonListener: 77 virtual void ButtonPressed(views::Button* sender, 78 const ui::Event& event) OVERRIDE; 79 80 void SelectCandidateAt(int index_in_page); 81 void UpdateVisibility(); 82 83 // Initializes the candidate views if needed. 84 void MaybeInitializeCandidateViews( 85 const ui::CandidateWindow& candidate_window); 86 87 // The candidate window data model. 88 ui::CandidateWindow candidate_window_; 89 90 // The index in the current page of the candidate currently being selected. 91 int selected_candidate_index_in_page_; 92 93 // The observers of the object. 94 ObserverList<Observer> observers_; 95 96 // Views created in the class will be part of tree of |this|, so these 97 // child views will be deleted when |this| is deleted. 98 InformationTextArea* auxiliary_text_; 99 InformationTextArea* preedit_; 100 views::View* candidate_area_; 101 102 // The candidate views are used for rendering candidates. 103 std::vector<CandidateView*> candidate_views_; 104 105 // Current columns size in |candidate_area_|. 106 gfx::Size previous_shortcut_column_size_; 107 gfx::Size previous_candidate_column_size_; 108 gfx::Size previous_annotation_column_size_; 109 110 // The last cursor bounds. 111 gfx::Rect cursor_bounds_; 112 113 // The last compostion head bounds. 114 gfx::Rect composition_head_bounds_; 115 116 // True if the candidate window should be shown with aligning with composition 117 // text as opposed to the cursor. 118 bool should_show_at_composition_head_; 119 120 // True if the candidate window should be shonw on the upper side of 121 // composition text. 122 bool should_show_upper_side_; 123 124 // True if the candidate window was open. This is used to determine when to 125 // send OnCandidateWindowOpened and OnCandidateWindowClosed events. 126 bool was_candidate_window_open_; 127 128 DISALLOW_COPY_AND_ASSIGN(CandidateWindowView); 129 }; 130 131 } // namespace ime 132 } // namespace ash 133 134 #endif // ASH_IME_CANDIDATE_WINDOW_VIEW_H_ 135