1 // Copyright 2013 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.
5 #ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MODE_INDICATOR_CONTROLLER_H_
6 #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MODE_INDICATOR_CONTROLLER_H_
8 #include "base/memory/scoped_ptr.h"
9 #include "ui/base/ime/chromeos/input_method_manager.h"
10 #include "ui/gfx/geometry/rect.h"
11 #include "ui/views/widget/widget_observer.h"
14 namespace input_method
{
16 class ModeIndicatorObserverInterface
: public views::WidgetObserver
{
18 ModeIndicatorObserverInterface() {}
19 ~ModeIndicatorObserverInterface() override
{}
21 virtual void AddModeIndicatorWidget(views::Widget
* widget
) = 0;
25 // ModeIndicatorController is the controller of ModeIndicatiorDelegateView
27 class ModeIndicatorController
28 : public InputMethodManager::Observer
{
30 // This class takes the ownership of |mi_widget|.
31 explicit ModeIndicatorController(InputMethodManager
* imm
);
32 ~ModeIndicatorController() override
;
34 // Set cursor bounds, which is the base point to display this indicator.
35 // Bacisally this indicator is displayed underneath the cursor.
36 void SetCursorBounds(const gfx::Rect
& cursor_location
);
38 // Notify the focus state to the mode indicator.
39 void FocusStateChanged(bool is_focused
);
41 // Accessor of the widget observer for testing. The caller keeps the
42 // ownership of the observer object.
43 static void SetModeIndicatorObserverForTesting(
44 ModeIndicatorObserverInterface
* observer
);
45 static ModeIndicatorObserverInterface
* GetModeIndicatorObserverForTesting();
48 // InputMethodManager::Observer implementation.
49 void InputMethodChanged(InputMethodManager
* manager
,
50 bool show_message
) override
;
52 // Show the mode inidicator with the current ime's short name if all
53 // the conditions are cleared.
54 void ShowModeIndicator();
56 InputMethodManager
* imm_
;
58 // Cursor bounds representing the anchor rect of the mode indicator.
59 gfx::Rect cursor_bounds_
;
61 // True on a text field is focused.
64 // Observer of the widgets created by BubbleDelegateView. This is used to
65 // close the previous widget when a new widget is created.
66 scoped_ptr
<ModeIndicatorObserverInterface
> mi_observer_
;
68 DISALLOW_COPY_AND_ASSIGN(ModeIndicatorController
);
71 } // namespace input_method
72 } // namespace chromeos
74 #endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MODE_INDICATOR_CONTROLLER_H_