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