1fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#ifndef UI_VIEWS_CONTROLS_PREFIX_SELECTOR_H_ 6fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#define UI_VIEWS_CONTROLS_PREFIX_SELECTOR_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 85e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string16.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/base/ime/text_input_client.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/views_export.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace views { 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdochclass PrefixDelegate; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch// PrefixSelector is used to change the selection in a view as the user 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// types characters. 19fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdochclass VIEWS_EXPORT PrefixSelector : public ui::TextInputClient { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 21fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch explicit PrefixSelector(PrefixDelegate* delegate); 22fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch virtual ~PrefixSelector(); 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // Invoked from the view when it loses focus. 25fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch void OnViewBlur(); 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ui::TextInputClient: 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetCompositionText( 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ui::CompositionText& composition) OVERRIDE; 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ConfirmCompositionText() OVERRIDE; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ClearCompositionText() OVERRIDE; 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void InsertText(const base::string16& text) OVERRIDE; 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void InsertChar(base::char16 ch, int flags) OVERRIDE; 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual gfx::NativeWindow GetAttachedWindow() const OVERRIDE; 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ui::TextInputType GetTextInputType() const OVERRIDE; 36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual ui::TextInputMode GetTextInputMode() const OVERRIDE; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool CanComposeInline() const OVERRIDE; 388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual gfx::Rect GetCaretBounds() const OVERRIDE; 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool GetCompositionCharacterBounds(uint32 index, 408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::Rect* rect) const OVERRIDE; 418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual bool HasCompositionText() const OVERRIDE; 428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual bool GetTextRange(gfx::Range* range) const OVERRIDE; 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual bool GetCompositionTextRange(gfx::Range* range) const OVERRIDE; 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual bool GetSelectionRange(gfx::Range* range) const OVERRIDE; 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual bool SetSelectionRange(const gfx::Range& range) OVERRIDE; 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual bool DeleteRange(const gfx::Range& range) OVERRIDE; 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual bool GetTextFromRange(const gfx::Range& range, 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16* text) const OVERRIDE; 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnInputMethodChanged() OVERRIDE; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ChangeTextDirectionAndLayoutAlignment( 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::i18n::TextDirection direction) OVERRIDE; 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ExtendSelectionAndDelete(size_t before, size_t after) OVERRIDE; 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void EnsureCaretInRect(const gfx::Rect& rect) OVERRIDE; 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnCandidateWindowShown() OVERRIDE; 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnCandidateWindowUpdated() OVERRIDE; 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnCandidateWindowHidden() OVERRIDE; 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool IsEditingCommandEnabled(int command_id) OVERRIDE; 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ExecuteEditingCommand(int command_id) OVERRIDE; 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Invoked when text is typed. Tries to change the selection appropriately. 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnTextInput(const base::string16& text); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns true if the text of the node at |row| starts with |lower_text|. 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool TextAtRowMatchesText(int row, const base::string16& lower_text); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Clears |current_text_| and resets |time_of_last_key_|. 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ClearText(); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch PrefixDelegate* prefix_delegate_; 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Time OnTextInput() was last invoked. 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::TimeTicks time_of_last_key_; 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 current_text_; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 78fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch DISALLOW_COPY_AND_ASSIGN(PrefixSelector); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace views 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#endif // UI_VIEWS_CONTROLS_PREFIX_SELECTOR_H_ 84