15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_VIEWS_IME_INPUT_METHOD_BASE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_IME_INPUT_METHOD_BASE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/focus/focus_manager.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/ime/input_method.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/ime/input_method_delegate.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Rect; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class KeyEvent; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// A helper that provides functionality shared by InputMethod implementations. 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class VIEWS_EXPORT InputMethodBase : public InputMethod, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public FocusChangeListener { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InputMethodBase(); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~InputMethodBase(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from InputMethod. 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetDelegate(internal::InputMethodDelegate* delegate) OVERRIDE; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Init(Widget* widget) OVERRIDE; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnTextInputTypeChanged(View* view) OVERRIDE; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ui::TextInputClient* GetTextInputClient() const OVERRIDE; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ui::TextInputType GetTextInputType() const OVERRIDE; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsMock() const OVERRIDE; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from FocusChangeListener. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnWillChangeFocus(View* focused_before, View* focused) OVERRIDE; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDidChangeFocus(View* focused_before, View* focused) OVERRIDE; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) internal::InputMethodDelegate* delegate() const { return delegate_; } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Widget* widget() const { return widget_; } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* GetFocusedView() const; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns true only if the View is focused and its Widget is active. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsViewFocused(View* view) const; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns true if there is no focused text input client or its type is none. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsTextInputTypeNone() const; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Calls the focused text input client's OnInputMethodChanged() method. 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This has no effect if the text input type is ui::TEXT_INPUT_TYPE_NONE. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnInputMethodChanged() const; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convenience method to call delegate_->DispatchKeyEventPostIME(). 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DispatchKeyEventPostIME(const ui::KeyEvent& key) const; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the current text input client's caret bounds in Widget's coordinates. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if the current text input client doesn't support text input. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetCaretBoundsInWidget(gfx::Rect* rect) const; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Removes any state installed on |widget_| and NULLs it out. Use if the 66558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // widget is in a state such that it should no longer be used (such as when 67558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // this is in its destructor). 68558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void DetachFromWidget(); 69558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) internal::InputMethodDelegate* delegate_; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Widget* widget_; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(InputMethodBase); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_VIEWS_IME_INPUT_METHOD_BASE_H_ 80