textfield.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// found in the LICENSE file.
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef UI_VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_H_
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define UI_VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_H_
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string>
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "base/basictypes.h"
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "base/compiler_specific.h"
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "base/string16.h"
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "build/build_config.h"
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "third_party/skia/include/core/SkColor.h"
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "ui/base/ime/text_input_type.h"
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "ui/base/keycodes/keyboard_codes.h"
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "ui/gfx/font.h"
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "ui/gfx/native_widget_types.h"
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "ui/gfx/text_constants.h"
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "ui/views/controls/textfield/native_textfield_wrapper.h"
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "ui/views/view.h"
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if !defined(OS_LINUX)
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "base/logging.h"
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectnamespace gfx {
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectclass ImageSkia;
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectnamespace ui {
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectclass Range;
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectclass TextInputClient;
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}  // namespace ui
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectnamespace views {
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectclass ImageView;
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectclass TextfieldController;
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// This class implements a View that wraps a native text (edit) field.
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectclass VIEWS_EXPORT Textfield : public View {
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project public:
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // The button's class name.
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  static const char kViewClassName[];
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  enum StyleFlags {
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    STYLE_DEFAULT   = 0,
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    STYLE_OBSCURED  = 1 << 0,
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    STYLE_LOWERCASE = 1 << 1
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  };
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Returns true if the build or commandline dictates NativeTextfieldViews use.
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  static bool IsViewsTextfieldEnabled();
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  Textfield();
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  explicit Textfield(StyleFlags style);
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual ~Textfield();
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // TextfieldController accessors
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetController(TextfieldController* controller);
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  TextfieldController* GetController() const;
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Gets/Sets whether or not the Textfield is read-only.
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool read_only() const { return read_only_; }
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetReadOnly(bool read_only);
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Gets/sets the STYLE_OBSCURED bit, controlling whether characters in this
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Textfield are displayed as asterisks/bullets.
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool IsObscured() const;
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetObscured(bool obscured);
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Gets/Sets the input type of this textfield.
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  ui::TextInputType GetTextInputType() const;
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetTextInputType(ui::TextInputType type);
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Gets/Sets the text currently displayed in the Textfield.
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  const string16& text() const { return text_; }
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Sets the text currently displayed in the Textfield.  This doesn't
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // change the cursor position if the current cursor is within the
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // new text's range, or moves the cursor to the end if the cursor is
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // out of the new text's range.
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetText(const string16& text);
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Appends the given string to the previously-existing text in the field.
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void AppendText(const string16& text);
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Replaces the selected text with |text|.
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void ReplaceSelection(const string16& text);
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Returns the text direction.
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  base::i18n::TextDirection GetTextDirection() const;
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Returns the text that is currently selected.
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  string16 GetSelectedText() const;
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Select the entire text range. If |reversed| is true, the range will end at
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // the logical beginning of the text; this generally shows the leading portion
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // of text that overflows its display area.
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SelectAll(bool reversed);
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Clears the selection within the edit field and sets the caret to the end.
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void ClearSelection() const;
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Checks if there is any selected text.
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool HasSelection() const;
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Accessor for |style_|.
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  StyleFlags style() const { return style_; }
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Gets/Sets the text color to be used when painting the Textfield.
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Call |UseDefaultTextColor| to restore the default system color.
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  SkColor GetTextColor() const;
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetTextColor(SkColor color);
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void UseDefaultTextColor();
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Gets/Sets the background color to be used when painting the Textfield.
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Call |UseDefaultBackgroundColor| to restore the default system color.
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  SkColor GetBackgroundColor() const;
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetBackgroundColor(SkColor color);
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void UseDefaultBackgroundColor();
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Gets/Sets whether or not the cursor is enabled.
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool GetCursorEnabled() const;
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetCursorEnabled(bool enabled);
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Gets/Sets the font used when rendering the text within the Textfield.
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  const gfx::Font& font() const { return font_; }
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetFont(const gfx::Font& font);
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Sets the left and right margin (in pixels) within the text box. On Windows
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // this is accomplished by packing the left and right margin into a single
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // 32 bit number, so the left and right margins are effectively 16 bits.
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetHorizontalMargins(int left, int right);
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Sets the top and bottom margins (in pixels) within the textfield.
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // NOTE: in most cases height could be changed instead.
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetVerticalMargins(int top, int bottom);
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Sets the default width of the text control. See default_width_in_chars_.
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void set_default_width_in_chars(int default_width) {
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    default_width_in_chars_ = default_width;
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  }
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Removes the border from the edit box, giving it a 2D look.
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool draw_border() const { return draw_border_; }
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void RemoveBorder();
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Sets the border color (if one is in use).
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetBorderColor(SkColor color);
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Reverts the textfield to the system default border color.
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void UseDefaultBorderColor();
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  SkColor border_color() const { return border_color_; }
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool use_default_border_color() const { return use_default_border_color_; }
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Sets the text to display when empty.
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void set_placeholder_text(const string16& text) {
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    placeholder_text_ = text;
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if !defined(OS_LINUX)
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    NOTIMPLEMENTED();
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  }
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  const string16& placeholder_text() const {
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return placeholder_text_;
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  }
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  SkColor placeholder_text_color() const { return placeholder_text_color_; }
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void set_placeholder_text_color(SkColor color) {
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    placeholder_text_color_ = color;
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  }
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Adds an icon which displays inside the border on the right side of the view
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // (left in RTL).
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetIcon(const gfx::ImageSkia& icon);
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Getter for the horizontal margins that were set. Returns false if
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // horizontal margins weren't set.
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool GetHorizontalMargins(int* left, int* right);
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Getter for the vertical margins that were set. Returns false if vertical
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // margins weren't set.
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool GetVerticalMargins(int* top, int* bottom);
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Updates all properties on the textfield. This is invoked internally.
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Users of Textfield never need to invoke this directly.
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void UpdateAllProperties();
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Invoked by the edit control when the value changes. This method set
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // the text_ member variable to the value contained in edit control.
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // This is important because the edit control can be replaced if it has
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // been deleted during a window close.
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SyncText();
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Returns whether or not an IME is composing text.
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool IsIMEComposing() const;
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Gets the selected range. This is views-implementation only and
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // has to be called after the wrapper is created.
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // TODO(msw): Return a const reference when NativeTextfieldWin is gone.
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  ui::Range GetSelectedRange() const;
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Selects the text given by |range|. This is views-implementation only and
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // has to be called after the wrapper is created.
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SelectRange(const ui::Range& range);
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Gets the selection model. This is views-implementation only and
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // has to be called after the wrapper is created.
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // TODO(msw): Return a const reference when NativeTextfieldWin is gone.
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  gfx::SelectionModel GetSelectionModel() const;
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Selects the text given by |sel|. This is views-implementation only and
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // has to be called after the wrapper is created.
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SelectSelectionModel(const gfx::SelectionModel& sel);
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Returns the current cursor position. This is views-implementation
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // only and has to be called after the wrapper is created.
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  size_t GetCursorPosition() const;
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Set the text color over the entire text or a logical character range.
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Empty and invalid ranges are ignored. This is views-implementation only and
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // has to be called after the wrapper is created.
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetColor(SkColor value);
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void ApplyColor(SkColor value, const ui::Range& range);
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Set various text styles over the entire text or a logical character range.
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // The respective |style| is applied if |value| is true, or removed if false.
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Empty and invalid ranges are ignored. This is views-implementation only and
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // has to be called after the wrapper is created.
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetStyle(gfx::TextStyle style, bool value);
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void ApplyStyle(gfx::TextStyle style, bool value, const ui::Range& range);
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Clears Edit history.
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void ClearEditHistory();
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Set the accessible name of the text field.
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void SetAccessibleName(const string16& name);
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Performs the action associated with the specified command id.
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  void ExecuteCommand(int command_id);
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Provided only for testing:
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  gfx::NativeView GetTestingHandle() const {
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return native_wrapper_ ? native_wrapper_->GetTestingHandle() : NULL;
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  }
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  NativeTextfieldWrapper* GetNativeWrapperForTesting() const {
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    return native_wrapper_;
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  }
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Overridden from View:
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual void Layout() OVERRIDE;
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual int GetBaseline() const OVERRIDE;
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual gfx::Size GetPreferredSize() OVERRIDE;
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual void AboutToRequestFocusFromTabTraversal(bool reverse) OVERRIDE;
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) OVERRIDE;
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual void OnEnabledChanged() OVERRIDE;
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE;
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE;
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual bool OnMouseDragged(const ui::MouseEvent& e) OVERRIDE;
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual void OnFocus() OVERRIDE;
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual void OnBlur() OVERRIDE;
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual ui::TextInputClient* GetTextInputClient() OVERRIDE;
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project protected:
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual void ViewHierarchyChanged(bool is_add, View* parent,
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                    View* child) OVERRIDE;
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  virtual std::string GetClassName() const OVERRIDE;
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // The object that actually implements the native text field.
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  NativeTextfieldWrapper* native_wrapper_;
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project private:
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // This is the current listener for events from this Textfield.
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  TextfieldController* controller_;
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // The mask of style options for this Textfield.
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  StyleFlags style_;
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // The font used to render the text in the Textfield.
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  gfx::Font font_;
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // The text displayed in the Textfield.
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  string16 text_;
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // True if this Textfield cannot accept input and is read-only.
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool read_only_;
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // The default number of average characters for the width of this text field.
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // This will be reported as the "desired size". Defaults to 0.
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  int default_width_in_chars_;
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Whether the border is drawn.
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool draw_border_;
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Text color.  Only used if |use_default_text_color_| is false.
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  SkColor text_color_;
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Should we use the system text color instead of |text_color_|?
3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool use_default_text_color_;
3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Background color.  Only used if |use_default_background_color_| is false.
3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  SkColor background_color_;
3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  // Should we use the system background color instead of |background_color_|?
3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  bool use_default_background_color_;
309
310  // Border color.  Only used if |use_default_border_color_| is false.
311  SkColor border_color_;
312
313  // Should we use the system border color instead of |border_color_|?
314  bool use_default_border_color_;
315
316  // TODO(beng): remove this once NativeTextfieldWin subclasses
317  //             NativeControlWin.
318  bool initialized_;
319
320  // Holds inner textfield margins.
321  gfx::Insets margins_;
322
323  // Holds whether margins were set.
324  bool horizontal_margins_were_set_;
325  bool vertical_margins_were_set_;
326
327  // Text to display when empty.
328  string16 placeholder_text_;
329
330  // Placeholder text color.
331  SkColor placeholder_text_color_;
332
333  // When non-NULL, an icon to display inside the border of the textfield.
334  views::ImageView* icon_view_;
335
336  // The accessible name of the text field.
337  string16 accessible_name_;
338
339  // The input type of this text field.
340  ui::TextInputType text_input_type_;
341
342  DISALLOW_COPY_AND_ASSIGN(Textfield);
343};
344
345}  // namespace views
346
347#endif  // UI_VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_H_
348