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