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

Side by Side Diff: views/controls/textfield/textfield_views_model.cc

Issue 6004010: Implement clipboard features in views textfield. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: code style fixes Created 9 years, 11 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "views/controls/textfield/textfield_views_model.h" 5 #include "views/controls/textfield/textfield_views_model.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/i18n/break_iterator.h" 9 #include "base/i18n/break_iterator.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/utf_string_conversions.h" 11 #include "base/utf_string_conversions.h"
12 #include "gfx/font.h" 12 #include "gfx/font.h"
13 #include "ui/base/clipboard/clipboard.h"
14 #include "ui/base/clipboard/scoped_clipboard_writer.h"
15 #include "views/views_delegate.h"
13 16
14 namespace views { 17 namespace views {
15 18
16 TextfieldViewsModel::TextfieldViewsModel() 19 TextfieldViewsModel::TextfieldViewsModel()
17 : cursor_pos_(0), 20 : cursor_pos_(0),
18 selection_begin_(0), 21 selection_begin_(0),
19 is_password_(false) { 22 is_password_(false) {
20 } 23 }
21 24
22 TextfieldViewsModel::~TextfieldViewsModel() { 25 TextfieldViewsModel::~TextfieldViewsModel() {
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 221
219 void TextfieldViewsModel::SelectAll() { 222 void TextfieldViewsModel::SelectAll() {
220 cursor_pos_ = 0; 223 cursor_pos_ = 0;
221 selection_begin_ = text_.length(); 224 selection_begin_ = text_.length();
222 } 225 }
223 226
224 void TextfieldViewsModel::ClearSelection() { 227 void TextfieldViewsModel::ClearSelection() {
225 selection_begin_ = cursor_pos_; 228 selection_begin_ = cursor_pos_;
226 } 229 }
227 230
231 bool TextfieldViewsModel::Cut() {
232 if (HasSelection()) {
233 ui::ScopedClipboardWriter(views::ViewsDelegate::views_delegate
234 ->GetClipboard()).WriteText(GetSelectedText());
235 DeleteSelection();
236 return true;
237 }
238 return false;
239 }
240
241 void TextfieldViewsModel::Copy() {
242 if (HasSelection()) {
243 ui::ScopedClipboardWriter(views::ViewsDelegate::views_delegate
244 ->GetClipboard()).WriteText(GetSelectedText());
245 }
246 }
247
248 bool TextfieldViewsModel::Paste() {
249 string16 result;
250 views::ViewsDelegate::views_delegate->GetClipboard()
251 ->ReadText(ui::Clipboard::BUFFER_STANDARD, &result);
252 if (!result.empty()) {
253 if (HasSelection())
254 DeleteSelection();
255 text_.insert(cursor_pos_, result);
256 cursor_pos_ += result.length();
257 ClearSelection();
258 return true;
259 }
260 return false;
261 }
262
228 bool TextfieldViewsModel::HasSelection() const { 263 bool TextfieldViewsModel::HasSelection() const {
229 return selection_begin_ != cursor_pos_; 264 return selection_begin_ != cursor_pos_;
230 } 265 }
231 266
232 void TextfieldViewsModel::DeleteSelection() { 267 void TextfieldViewsModel::DeleteSelection() {
233 DCHECK(HasSelection()); 268 DCHECK(HasSelection());
234 size_t n = std::abs(static_cast<long>(cursor_pos_ - selection_begin_)); 269 size_t n = std::abs(static_cast<long>(cursor_pos_ - selection_begin_));
235 size_t begin = std::min(cursor_pos_, selection_begin_); 270 size_t begin = std::min(cursor_pos_, selection_begin_);
236 text_.erase(begin, n); 271 text_.erase(begin, n);
237 cursor_pos_ = begin; 272 cursor_pos_ = begin;
238 ClearSelection(); 273 ClearSelection();
239 } 274 }
240 275
241 string16 TextfieldViewsModel::GetVisibleText(size_t begin, size_t end) const { 276 string16 TextfieldViewsModel::GetVisibleText(size_t begin, size_t end) const {
242 DCHECK(end >= begin); 277 DCHECK(end >= begin);
243 if (is_password_) { 278 if (is_password_) {
244 return string16(end - begin, '*'); 279 return string16(end - begin, '*');
245 } 280 }
246 return text_.substr(begin, end - begin); 281 return text_.substr(begin, end - begin);
247 } 282 }
248 283
249 } // namespace views 284 } // namespace views
OLDNEW
« no previous file with comments | « views/controls/textfield/textfield_views_model.h ('k') | views/controls/textfield/textfield_views_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698