OLD | NEW |
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 Loading... |
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 |
OLD | NEW |