• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MODE_INDICATOR_CONTROLLER_H_
6 #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MODE_INDICATOR_CONTROLLER_H_
7 
8 #include "base/memory/scoped_ptr.h"
9 #include "chromeos/ime/input_method_manager.h"
10 #include "ui/gfx/rect.h"
11 #include "ui/views/widget/widget_observer.h"
12 
13 namespace chromeos {
14 namespace input_method {
15 
16 class ModeIndicatorObserverInterface : public views::WidgetObserver {
17  public:
ModeIndicatorObserverInterface()18   ModeIndicatorObserverInterface() {}
~ModeIndicatorObserverInterface()19   virtual ~ModeIndicatorObserverInterface() {}
20 
21   virtual void AddModeIndicatorWidget(views::Widget* widget) = 0;
22 };
23 
24 
25 // ModeIndicatorController is the controller of ModeIndicatiorDelegateView
26 // on the MVC model.
27 class ModeIndicatorController
28     : public InputMethodManager::Observer {
29  public:
30   // This class takes the ownership of |mi_widget|.
31   explicit ModeIndicatorController(InputMethodManager* imm);
32   virtual ~ModeIndicatorController();
33 
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);
37 
38   // Notify the focus state to the mode indicator.
39   void FocusStateChanged(bool is_focused);
40 
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();
46 
47  private:
48   // InputMethodManager::Observer implementation.
49   virtual void InputMethodChanged(InputMethodManager* manager,
50                                   bool show_message) OVERRIDE;
51 
52   // Show the mode inidicator with the current ime's short name if all
53   // the conditions are cleared.
54   void ShowModeIndicator();
55 
56   InputMethodManager* imm_;
57 
58   // Cursor bounds representing the anchor rect of the mode indicator.
59   gfx::Rect cursor_bounds_;
60 
61   // True on a text field is focused.
62   bool is_focused_;
63 
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_;
67 
68   DISALLOW_COPY_AND_ASSIGN(ModeIndicatorController);
69 };
70 
71 }  // namespace input_method
72 }  // namespace chromeos
73 
74 #endif  // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_MODE_INDICATOR_CONTROLLER_H_
75