summaryrefslogtreecommitdiffstats
path: root/chrome/views/text_field.h
diff options
context:
space:
mode:
authorinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
committerinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
commit09911bf300f1a419907a9412154760efd0b7abc3 (patch)
treef131325fb4e2ad12c6d3504ab75b16dd92facfed /chrome/views/text_field.h
parent586acc5fe142f498261f52c66862fa417c3d52d2 (diff)
downloadchromium_src-09911bf300f1a419907a9412154760efd0b7abc3.zip
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.gz
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.bz2
Add chrome to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/views/text_field.h')
-rw-r--r--chrome/views/text_field.h222
1 files changed, 222 insertions, 0 deletions
diff --git a/chrome/views/text_field.h b/chrome/views/text_field.h
new file mode 100644
index 0000000..86aedca
--- /dev/null
+++ b/chrome/views/text_field.h
@@ -0,0 +1,222 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// These classes define a text field widget that can be used in the ChromeViews
+// UI toolkit.
+
+#ifndef CHROME_VIEWS_TEXT_FIELD_H__
+#define CHROME_VIEWS_TEXT_FIELD_H__
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "chrome/common/gfx/chrome_font.h"
+#include "chrome/views/view.h"
+#include "skia/include/SkColor.h"
+
+namespace ChromeViews {
+
+class HWNDView;
+
+// This class implements a ChromeView that wraps a native text (edit) field.
+class TextField : public View {
+ public:
+ // This defines the callback interface for other code to be notified of
+ // changes in the state of a text field.
+ class Controller {
+ public:
+ // This method is called whenever the text in the field changes.
+ virtual void ContentsChanged(TextField* sender,
+ const std::wstring& new_contents) = 0;
+
+ // This method is called to get notified about keystrokes in the edit.
+ virtual void HandleKeystroke(TextField* sender,
+ UINT message, TCHAR key, UINT repeat_count,
+ UINT flags) = 0;
+ };
+
+ enum StyleFlags {
+ STYLE_DEFAULT = 0,
+ STYLE_PASSWORD = 1<<0,
+ STYLE_MULTILINE = 1<<1
+ };
+
+ TextField::TextField()
+ : native_view_(NULL),
+ edit_(NULL),
+ controller_(NULL),
+ style_(STYLE_DEFAULT),
+ read_only_(false),
+ default_width_in_chars_(0),
+ draw_border_(true),
+ use_default_background_color_(true),
+ num_lines_(1) {
+ SetFocusable(true);
+ }
+ explicit TextField::TextField(StyleFlags style)
+ : native_view_(NULL),
+ edit_(NULL),
+ controller_(NULL),
+ style_(style),
+ read_only_(false),
+ default_width_in_chars_(0),
+ draw_border_(true),
+ use_default_background_color_(true),
+ num_lines_(1) {
+ SetFocusable(true);
+ }
+ virtual ~TextField();
+
+ void ViewHierarchyChanged(bool is_add, View* parent, View* child);
+
+ // Overridden for layout purposes
+ virtual void Layout();
+ virtual void GetPreferredSize(CSize* sz);
+ virtual void DidChangeBounds(const CRect& previous, const CRect& current);
+
+ // Controller accessors
+ void SetController(Controller* controller);
+ Controller* GetController() const;
+
+ void SetReadOnly(bool read_only);
+ bool IsReadOnly() const;
+
+ // Whether the text field is multi-line or not, must be set when the text
+ // field is created, using StyleFlags.
+ bool IsMultiLine() const;
+
+ virtual bool IsFocusable() const;
+ virtual void AboutToRequestFocusFromTabTraversal(bool reverse);
+
+ // Overridden from Chrome::View.
+ virtual bool ShouldLookupAccelerators(const KeyEvent& e);
+
+ virtual HWND GetNativeComponent();
+
+ // Returns the text currently displayed in the text field.
+ std::wstring GetText() const;
+
+ // Set the text currently displayed in the text field.
+ void SetText(const std::wstring& text);
+
+ virtual void Focus();
+
+ // Causes the edit field to be fully selected.
+ void SelectAll();
+
+ // Clears the selection within the edit field and sets the caret to the end.
+ void ClearSelection() const;
+
+ StyleFlags GetStyle() const { return style_; }
+
+ void SetBackgroundColor(SkColor color);
+ void SetDefaultBackgroundColor();
+
+ // Set the font.
+ void SetFont(const ChromeFont& font);
+
+ // Return the font used by this TextField.
+ ChromeFont GetFont() const;
+
+ // Sets the left and right margin (in pixels) within the text box. On Windows
+ // this is accomplished by packing the left and right margin into a single
+ // 32 bit number, so the left and right margins are effectively 16 bits.
+ bool SetHorizontalMargins(int left, int right);
+
+ // Should only be called on a multi-line text field. Sets how many lines of
+ // text can be displayed at once by this text field.
+ void SetHeightInLines(int num_lines);
+
+ // Sets the default width of the text control. See default_width_in_chars_.
+ void set_default_width_in_chars(int default_width) {
+ default_width_in_chars_ = default_width;
+ }
+
+ // Removes the border from the edit box, giving it a 2D look.
+ void RemoveBorder();
+
+ // Disable the edit control.
+ void SetEnabled(bool enabled);
+
+ private:
+ class Edit;
+
+ // Invoked by the edit control when the value changes. This method set
+ // the text_ member variable to the value contained in edit control.
+ // This is important because the edit control can be replaced if it has
+ // been deleted during a window close.
+ void SyncText();
+
+ // Reset the text field native control.
+ void ResetNativeControl();
+
+ // This encapsulates the HWND of the native text field.
+ HWNDView* native_view_;
+
+ // This inherits from the native text field.
+ Edit* edit_;
+
+ // This is the current listener for events from this control.
+ Controller* controller_;
+
+ StyleFlags style_;
+
+ ChromeFont font_;
+
+ // NOTE: this is temporary until we rewrite TextField to always work whether
+ // there is an HWND or not.
+ // Used if the HWND hasn't been created yet.
+ std::wstring text_;
+
+ bool read_only_;
+
+ // The default number of average characters for the width of this text field.
+ // This will be reported as the "desired size". Defaults to 0.
+ int default_width_in_chars_;
+
+ // Whether the border is drawn.
+ bool draw_border_;
+
+ SkColor background_color_;
+
+ bool use_default_background_color_;
+
+ // The number of lines of text this textfield displays at once.
+ int num_lines_;
+
+ protected:
+ // Calculates the insets for the text field.
+ void CalculateInsets(gfx::Insets* insets);
+
+ DISALLOW_EVIL_CONSTRUCTORS(TextField);
+};
+
+} // namespace ChromeViews
+
+#endif // CHROME_VIEWS_TEXT_FIELD_H__