blob: 8a40b03f882c2f7ccbe9532446061fa1b6b5a41e [file] [log] [blame]
// 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<ui::InfolistEntry>* 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<ModeIndicatorController> mode_indicator_controller_;
// The infolist entries and its focused index which currently shown in
// Infolist window.
std::vector<ui::InfolistEntry> latest_infolist_entries_;
ObserverList<CandidateWindowController::Observer> observers_;
DISALLOW_COPY_AND_ASSIGN(CandidateWindowControllerImpl);
};
#endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_CONTROLLER_IMPL_H_
} // namespace input_method
} // namespace chromeos