Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2672)

Unified Diff: views/controls/textfield/textfield_view_model.h

Issue 5857002: no native implementation of Textfield. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: views/controls/textfield/textfield_view_model.h
diff --git a/views/controls/textfield/textfield_view_model.h b/views/controls/textfield/textfield_view_model.h
new file mode 100644
index 0000000000000000000000000000000000000000..4113619ffdfd14303c956896ea9695bb27f87855
--- /dev/null
+++ b/views/controls/textfield/textfield_view_model.h
@@ -0,0 +1,160 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_VIEW_MODEL_H_
+#define VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_VIEW_MODEL_H_
+#pragma once
+
+#include <vector>
+
+#include "base/string16.h"
+#include "gfx/rect.h"
+#include "third_party/skia/include/core/SkColor.h"
+
+namespace gfx {
+class Font;
+} // namespace gfx
+
+namespace views {
+
+class TextfieldViewModel {
sky 2010/12/15 20:31:27 Description?
oshima 2010/12/16 01:15:19 Done.
+ public:
+ TextfieldViewModel();
+ virtual ~TextfieldViewModel();
sky 2010/12/15 20:31:27 Why virtual?
oshima 2010/12/16 01:15:19 it's just my habit to always use virtual destructo
+
+ // Text fragment info. Used to draw selected text.
+ // We may replace this with TextAttribute class
+ // in the future to supportmulti-color text
sky 2010/12/15 20:31:27 support multi
oshima 2010/12/16 01:15:19 Done.
+ // for omnibox.
+ struct TextFragment {
+ TextFragment(size_t b, size_t e, bool s)
+ : begin(b), end(e), selected(s) {
+ }
+ // The begin and end position of text fragment.
+ size_t begin, end;
+ // True if the text is selected.
+ bool selected;
+ };
+ typedef std::vector<TextFragment> TextFragments;
+
+ // Populate the text element info.
+ void PopulateFragments(TextFragments* elements) const;
sky 2010/12/15 20:31:27 How about GetFragments.
oshima 2010/12/16 01:15:19 Done.
+
+ void set_is_password(bool is_password) {
+ is_password_ = is_password;
+ }
+ const string16& text() const { return text_; }
+
+ // Edit related methods.
+
+ // Set the text. Returns true if the text has been modified.
+ bool SetText(const string16& text);
+
+ // Inserts a character at the current cursor position.
+ void Insert(char16 c);
+
+ // Replaces the char at the current position with given character.
+ void Replace(char16 c);
+
+ // Appends the text.
+ void Append(const string16& text);
+
+ // Deletes the first character after the current cursor position (as if, the
+ // the user has pressed delete key in the textfield). Returns true if
+ // the deletion is successful.
+ bool Delete();
+
+ // Deletes the first character before the current cursor position (as if, the
+ // the user has pressed backspace key in the textfield). Returns true if
+ // the removal is successful.
+ bool Backspace();
+
+ // Cursor related methods.
+
+ // Returns the current cursor position.
+ int cursor_pos() const { return cursor_pos_; }
sky 2010/12/15 20:31:27 size_t
oshima 2010/12/16 01:15:19 good catch. Done
+
+ // Moves the cursor left by one position (as if, the user has pressed the left
+ // arrow key). If |select| is true, it updates the selection accordingly.
+ void MoveCursorLeft(bool select);
+
+ // Moves the cursor right by one position (as if, the user has pressed the
+ // right arrow key). If |select| is true, it updates the selection
+ // accordingly.
+ void MoveCursorRight(bool select);
+
+ // Moves the cursor left by one word (word boundry is defined by space).
+ // If |select| is true, it updates the selection accordingly.
+ void MoveCursorToPreviousWord(bool select);
+
+ // Moves the cursor right by one word (word boundry is defined by space).
+ // If |select| is true, it updates the selection accordingly.
+ void MoveCursorToNextWord(bool select);
+
+ // Moves the cursor to start of the textfield contents.
+ // If |select| is true, it updates the selection accordingly.
+ void MoveCursorToStart(bool select);
+
+ // Moves the cursor to end of the textfield contents.
+ // If |select| is true, it updates the selection accordingly.
+ void MoveCursorToEnd(bool select);
+
+ // Moves the cursor to the specified |position|.
+ // If |select| is true, it updates the selection accordingly.
+ bool MoveCursorTo(size_t position, bool select);
+
+ // Returns the bounds of character at the current cursor.
+ gfx::Rect GetCursorBounds(const gfx::Font& font) const;
+
+ // Selection related method
+
+ // Returns the selected text.
+ string16 GetSelectedText() const;
sky 2010/12/15 20:31:27 Does this intentionally not return the password ch
oshima 2010/12/16 01:15:19 I believe this is now gtk version works and expect
+
+ // Selects all text.
+ void SelectAll();
+
+ // Clears selection.
+ void ClearSelection();
+
+ // Returns visible text. If the field is password, it returns the
+ // sequence of "*".
+ string16 GetVisibleText() const {
+ return GetVisibleText(0U, text_.length());
+ }
+
+ private:
+ friend class NativeTextfieldView;
+
+ // Selects the text. |old| is the old cursor position and
+ // end is the new corsor position.
sky 2010/12/15 20:31:27 corsor->cursor
oshima 2010/12/16 01:15:19 Done.
+ void Select(size_t old, size_t end);
+
+ // Tells if any text is selected.
+ bool HasSelection() const;
+
+ // Deletes the selected text.
+ void DeleteSelection();
+
+ // Returns the visible text given |start| and |end|.
+ string16 GetVisibleText(size_t start, size_t end) const;
+
+ // The text in utf16 format.
+ string16 text_;
+
+ // Current cursor position.
+ size_t cursor_pos_;
+
+ // Selection range.
+ size_t begin_, end_;
sky 2010/12/15 20:31:27 Could you combine cursor_pos_ and begin_ end_ ? Is
oshima 2010/12/16 01:15:19 Only if something is selected. There are several o
sky 2010/12/16 17:29:43 I don't understand this con. You have to update so
+
+ // True if the text is the password.
+ bool is_password_;
+
+ DISALLOW_COPY_AND_ASSIGN(TextfieldViewModel);
+};
+
+} // namespace views
+
+#endif // VIEWS_CONTROLS_TEXTFIELD_TEXTFIELD_VIEW_MODEL_H_

Powered by Google App Engine
This is Rietveld 408576698