blob: f458dfaf482d4351c7f016be9e56c2c56da2445d [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 "base/memory/scoped_ptr.h"
#include "base/observer_list.h"
#include "ui/base/ime/chromeos/ime_candidate_window_handler_interface.h"
#include "ui/base/ime/infolist_entry.h"
#include "ui/chromeos/ime/candidate_window_view.h"
#include "ui/views/widget/widget_observer.h"
namespace ui {
class CandidateWindow;
namespace ime {
class InfolistWindow;
} // namespace ime
} // 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 ui::ime::CandidateWindowView::Observer,
public views::WidgetObserver,
public IMECandidateWindowHandlerInterface {
public:
CandidateWindowControllerImpl();
~CandidateWindowControllerImpl() override;
// CandidateWindowController overrides:
void AddObserver(CandidateWindowController::Observer* observer) override;
void RemoveObserver(CandidateWindowController::Observer* observer) override;
void Hide() override;
protected:
static void ConvertLookupTableToInfolistEntry(
const ui::CandidateWindow& candidate_window,
std::vector<ui::InfolistEntry>* infolist_entries,
bool* has_highlighted);
private:
// ui::ime::CandidateWindowView::Observer implementation.
void OnCandidateCommitted(int index) override;
// views::WidgetObserver implementation.
void OnWidgetClosing(views::Widget* widget) override;
// IMECandidateWindowHandlerInterface implementation.
void SetCursorBounds(const gfx::Rect& cursor_bounds,
const gfx::Rect& composition_head) override;
void UpdateLookupTable(const ui::CandidateWindow& candidate_window,
bool visible) override;
void UpdatePreeditText(const base::string16& text,
unsigned int cursor,
bool visible) override;
void FocusStateChanged(bool is_focused) override;
void InitCandidateWindowView();
// The candidate window view.
ui::ime::CandidateWindowView* candidate_window_view_;
// This is the outer frame of the infolist window view. Owned by the widget.
ui::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_;
base::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