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