Home | History | Annotate | Download | only in input_method
      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:
     18   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