textfield.h revision 868fa2fe829687343ffae624259930155e16dbd8
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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_CONTROLS_TEXTFIELD_TEXTFIELD_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string16.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/time.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ime/text_input_type.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/keycodes/keyboard_codes.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/font.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/text_constants.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/textfield/native_textfield_wrapper.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_LINUX) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ImageSkia; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Range; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TextInputClient; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ui 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ImageView; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TextfieldController; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class implements a View that wraps a native text (edit) field. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VIEWS_EXPORT Textfield : public View { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // The textfield's class name. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kViewClassName[]; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum StyleFlags { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STYLE_DEFAULT = 0, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STYLE_OBSCURED = 1 << 0, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STYLE_LOWERCASE = 1 << 1 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the build or commandline dictates NativeTextfieldViews use. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool IsViewsTextfieldEnabled(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Textfield(); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit Textfield(StyleFlags style); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Textfield(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TextfieldController accessors 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetController(TextfieldController* controller); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TextfieldController* GetController() const; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/Sets whether or not the Textfield is read-only. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool read_only() const { return read_only_; } 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetReadOnly(bool read_only); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/sets the STYLE_OBSCURED bit, controlling whether characters in this 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Textfield are displayed as asterisks/bullets. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsObscured() const; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetObscured(bool obscured); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Gets/sets the duration to reveal the last typed char when the obscured bit 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // is set. A duration of zero effectively disables the feature. Other values 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // cause the last typed char to be shown for the defined duration. Note this 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // only works with NativeTextfieldViews. 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::TimeDelta& obscured_reveal_duration() const { 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return obscured_reveal_duration_; 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void set_obscured_reveal_duration(const base::TimeDelta& duration) { 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) obscured_reveal_duration_ = duration; 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/Sets the input type of this textfield. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TextInputType GetTextInputType() const; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetTextInputType(ui::TextInputType type); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/Sets the text currently displayed in the Textfield. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& text() const { return text_; } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the text currently displayed in the Textfield. This doesn't 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // change the cursor position if the current cursor is within the 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new text's range, or moves the cursor to the end if the cursor is 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // out of the new text's range. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetText(const string16& text); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Appends the given string to the previously-existing text in the field. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AppendText(const string16& text); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Replaces the selected text with |text|. 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ReplaceSelection(const string16& text); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the text direction. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::i18n::TextDirection GetTextDirection() const; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the text that is currently selected. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 GetSelectedText() const; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select the entire text range. If |reversed| is true, the range will end at 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the logical beginning of the text; this generally shows the leading portion 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of text that overflows its display area. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SelectAll(bool reversed); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears the selection within the edit field and sets the caret to the end. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearSelection() const; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks if there is any selected text. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasSelection() const; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Accessor for |style_|. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StyleFlags style() const { return style_; } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/Sets the text color to be used when painting the Textfield. 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Call |UseDefaultTextColor| to restore the default system color. 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor GetTextColor() const; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetTextColor(SkColor color); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UseDefaultTextColor(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/Sets the background color to be used when painting the Textfield. 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Call |UseDefaultBackgroundColor| to restore the default system color. 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor GetBackgroundColor() const; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetBackgroundColor(SkColor color); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UseDefaultBackgroundColor(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets/Sets whether or not the cursor is enabled. 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool GetCursorEnabled() const; 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetCursorEnabled(bool enabled); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets/Sets the font used when rendering the text within the Textfield. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Font& font() const { return font_; } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetFont(const gfx::Font& font); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the left and right margin (in pixels) within the text box. On Windows 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this is accomplished by packing the left and right margin into a single 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 32 bit number, so the left and right margins are effectively 16 bits. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetHorizontalMargins(int left, int right); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the top and bottom margins (in pixels) within the textfield. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: in most cases height could be changed instead. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetVerticalMargins(int top, int bottom); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Set the text vertical alignment. Text is vertically centered by default. 15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) gfx::VerticalAlignment vertical_alignment() const { 15690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return vertical_alignment_; 15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void SetVerticalAlignment(gfx::VerticalAlignment alignment); 15990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the default width of the text control. See default_width_in_chars_. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_default_width_in_chars(int default_width) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_width_in_chars_ = default_width; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes the border from the edit box, giving it a 2D look. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool draw_border() const { return draw_border_; } 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveBorder(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the border color (if one is in use). 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetBorderColor(SkColor color); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Reverts the textfield to the system default border color. 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UseDefaultBorderColor(); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor border_color() const { return border_color_; } 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool use_default_border_color() const { return use_default_border_color_; } 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the text to display when empty. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_placeholder_text(const string16& text) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) placeholder_text_ = text; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_LINUX) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& placeholder_text() const { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return placeholder_text_; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor placeholder_text_color() const { return placeholder_text_color_; } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_placeholder_text_color(SkColor color) { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) placeholder_text_color_ = color; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds an icon which displays inside the border on the right side of the view 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (left in RTL). 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetIcon(const gfx::ImageSkia& icon); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Getter for the horizontal margins that were set. Returns false if 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // horizontal margins weren't set. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetHorizontalMargins(int* left, int* right); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Getter for the vertical margins that were set. Returns false if vertical 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // margins weren't set. 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetVerticalMargins(int* top, int* bottom); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates all properties on the textfield. This is invoked internally. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Users of Textfield never need to invoke this directly. 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateAllProperties(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked by the edit control when the value changes. This method set 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the text_ member variable to the value contained in edit control. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is important because the edit control can be replaced if it has 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // been deleted during a window close. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SyncText(); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether or not an IME is composing text. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsIMEComposing() const; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the selected range. This is views-implementation only and 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has to be called after the wrapper is created. 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(msw): Return a const reference when NativeTextfieldWin is gone. 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Range GetSelectedRange() const; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Selects the text given by |range|. This is views-implementation only and 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has to be called after the wrapper is created. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SelectRange(const ui::Range& range); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the selection model. This is views-implementation only and 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has to be called after the wrapper is created. 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(msw): Return a const reference when NativeTextfieldWin is gone. 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::SelectionModel GetSelectionModel() const; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Selects the text given by |sel|. This is views-implementation only and 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has to be called after the wrapper is created. 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SelectSelectionModel(const gfx::SelectionModel& sel); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the current cursor position. This is views-implementation 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // only and has to be called after the wrapper is created. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t GetCursorPosition() const; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the text color over the entire text or a logical character range. 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Empty and invalid ranges are ignored. This is views-implementation only and 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has to be called after the wrapper is created. 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetColor(SkColor value); 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ApplyColor(SkColor value, const ui::Range& range); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set various text styles over the entire text or a logical character range. 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The respective |style| is applied if |value| is true, or removed if false. 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Empty and invalid ranges are ignored. This is views-implementation only and 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // has to be called after the wrapper is created. 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetStyle(gfx::TextStyle style, bool value); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ApplyStyle(gfx::TextStyle style, bool value, const ui::Range& range); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears Edit history. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearEditHistory(); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the accessible name of the text field. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAccessibleName(const string16& name); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Performs the action associated with the specified command id. 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ExecuteCommand(int command_id); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Provided only for testing: 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeView GetTestingHandle() const { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_wrapper_ ? native_wrapper_->GetTestingHandle() : NULL; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeTextfieldWrapper* GetNativeWrapperForTesting() const { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_wrapper_; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns whether there is a drag operation originating from the textfield. 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool HasTextBeingDragged(); 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from View: 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Layout() OVERRIDE; 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int GetBaseline() const OVERRIDE; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Size GetPreferredSize() OVERRIDE; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AboutToRequestFocusFromTabTraversal(bool reverse) OVERRIDE; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) OVERRIDE; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnEnabledChanged() OVERRIDE; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMouseDragged(const ui::MouseEvent& e) OVERRIDE; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnFocus() OVERRIDE; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnBlur() OVERRIDE; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ui::TextInputClient* GetTextInputClient() OVERRIDE; 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 289a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) virtual void ViewHierarchyChanged( 290a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const ViewHierarchyChangedDetails& details) OVERRIDE; 291b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual const char* GetClassName() const OVERRIDE; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The object that actually implements the native text field. 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeTextfieldWrapper* native_wrapper_; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is the current listener for events from this Textfield. 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TextfieldController* controller_; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The mask of style options for this Textfield. 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StyleFlags style_; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The font used to render the text in the Textfield. 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Font font_; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The text displayed in the Textfield. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 text_; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if this Textfield cannot accept input and is read-only. 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool read_only_; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default number of average characters for the width of this text field. 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will be reported as the "desired size". Defaults to 0. 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int default_width_in_chars_; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the border is drawn. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool draw_border_; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Text color. Only used if |use_default_text_color_| is false. 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor text_color_; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should we use the system text color instead of |text_color_|? 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_default_text_color_; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Background color. Only used if |use_default_background_color_| is false. 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor background_color_; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should we use the system background color instead of |background_color_|? 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_default_background_color_; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Border color. Only used if |use_default_border_color_| is false. 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor border_color_; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Should we use the system border color instead of |border_color_|? 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool use_default_border_color_; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(beng): remove this once NativeTextfieldWin subclasses 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NativeControlWin. 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool initialized_; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Holds inner textfield margins. 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Insets margins_; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Holds whether margins were set. 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool horizontal_margins_were_set_; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool vertical_margins_were_set_; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The vertical alignment of text in the Textfield. 34990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) gfx::VerticalAlignment vertical_alignment_; 35090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Text to display when empty. 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 placeholder_text_; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Placeholder text color. 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor placeholder_text_color_; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When non-NULL, an icon to display inside the border of the textfield. 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::ImageView* icon_view_; 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The accessible name of the text field. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 accessible_name_; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The input type of this text field. 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TextInputType text_input_type_; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 366868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // The duration to reveal the last typed char for obscured textfields. 367868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::TimeDelta obscured_reveal_duration_; 368868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Textfield); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_H_ 375