// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_CONTROLLER_IMPL_H_ #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_CONTROLLER_IMPL_H_ #include "chrome/browser/chromeos/input_method/candidate_window_controller.h" #include "ash/ime/candidate_window_view.h" #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" #include "ui/base/ime/chromeos/ime_bridge.h" #include "ui/base/ime/infolist_entry.h" #include "ui/views/widget/widget_observer.h" namespace ash { namespace ime { class InfolistWindow; } // namespace ime } // namespace ash namespace ui { class CandidateWindow; } // namespace ui namespace views { class Widget; } // namespace views namespace chromeos { namespace input_method { class DelayableWidget; class ModeIndicatorController; // The implementation of CandidateWindowController. // CandidateWindowController controls the CandidateWindow. class CandidateWindowControllerImpl : public CandidateWindowController, public ash::ime::CandidateWindowView::Observer, public views::WidgetObserver, public IMECandidateWindowHandlerInterface { public: CandidateWindowControllerImpl(); virtual ~CandidateWindowControllerImpl(); // CandidateWindowController overrides: virtual void AddObserver( CandidateWindowController::Observer* observer) OVERRIDE; virtual void RemoveObserver( CandidateWindowController::Observer* observer) OVERRIDE; virtual void Hide() OVERRIDE; protected: static void ConvertLookupTableToInfolistEntry( const ui::CandidateWindow& candidate_window, std::vector* infolist_entries, bool* has_highlighted); private: // ash::ime::CandidateWindowView::Observer implementation. virtual void OnCandidateCommitted(int index) OVERRIDE; // views::WidgetObserver implementation. virtual void OnWidgetClosing(views::Widget* widget) OVERRIDE; // IMECandidateWindowHandlerInterface implementation. virtual void SetCursorBounds(const gfx::Rect& cursor_bounds, const gfx::Rect& composition_head) OVERRIDE; virtual void UpdateLookupTable( const ui::CandidateWindow& candidate_window, bool visible) OVERRIDE; virtual void UpdatePreeditText(const base::string16& text, unsigned int cursor, bool visible) OVERRIDE; virtual void FocusStateChanged(bool is_focused) OVERRIDE; void InitCandidateWindowView(); // The candidate window view. ash::ime::CandidateWindowView* candidate_window_view_; // This is the outer frame of the infolist window view. Owned by the widget. ash::ime::InfolistWindow* infolist_window_; gfx::Rect cursor_bounds_; gfx::Rect composition_head_; // This is the controller of the IME mode indicator. scoped_ptr mode_indicator_controller_; // The infolist entries and its focused index which currently shown in // Infolist window. std::vector latest_infolist_entries_; ObserverList observers_; DISALLOW_COPY_AND_ASSIGN(CandidateWindowControllerImpl); }; #endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_CONTROLLER_IMPL_H_ } // namespace input_method } // namespace chromeos