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

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

Issue 8747001: Reintroduce password support to NativeTextfieldViews (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: delete more dead code, address recent comments Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "ui/views/controls/textfield/textfield_views_model.h" 5 #include "ui/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"
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 274
275 ///////////////////////////////////////////////////////////////// 275 /////////////////////////////////////////////////////////////////
276 // TextfieldViewsModel: public 276 // TextfieldViewsModel: public
277 277
278 TextfieldViewsModel::Delegate::~Delegate() { 278 TextfieldViewsModel::Delegate::~Delegate() {
279 } 279 }
280 280
281 TextfieldViewsModel::TextfieldViewsModel(Delegate* delegate) 281 TextfieldViewsModel::TextfieldViewsModel(Delegate* delegate)
282 : delegate_(delegate), 282 : delegate_(delegate),
283 render_text_(gfx::RenderText::CreateRenderText()), 283 render_text_(gfx::RenderText::CreateRenderText()),
284 is_password_(false),
285 current_edit_(edit_history_.end()) { 284 current_edit_(edit_history_.end()) {
286 } 285 }
287 286
288 TextfieldViewsModel::~TextfieldViewsModel() { 287 TextfieldViewsModel::~TextfieldViewsModel() {
289 ClearEditHistory(); 288 ClearEditHistory();
290 ClearComposition(); 289 ClearComposition();
291 } 290 }
292 291
293 const string16& TextfieldViewsModel::GetText() const { 292 const string16& TextfieldViewsModel::GetText() const {
294 return render_text_->text(); 293 return render_text_->text();
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 if (current_edit_ == edit_history_.end()) 497 if (current_edit_ == edit_history_.end())
499 current_edit_ = edit_history_.begin(); 498 current_edit_ = edit_history_.begin();
500 else 499 else
501 current_edit_ ++; 500 current_edit_ ++;
502 string16 old = GetText(); 501 string16 old = GetText();
503 size_t old_cursor = GetCursorPosition(); 502 size_t old_cursor = GetCursorPosition();
504 (*current_edit_)->Redo(this); 503 (*current_edit_)->Redo(this);
505 return old != GetText() || old_cursor != GetCursorPosition(); 504 return old != GetText() || old_cursor != GetCursorPosition();
506 } 505 }
507 506
508 string16 TextfieldViewsModel::GetVisibleText() const {
509 return GetVisibleText(0U, GetText().length());
510 }
511
512 bool TextfieldViewsModel::Cut() { 507 bool TextfieldViewsModel::Cut() {
513 if (!HasCompositionText() && HasSelection()) { 508 if (!HasCompositionText() && HasSelection() && !render_text_->is_obscured()) {
514 ui::ScopedClipboardWriter(views::ViewsDelegate::views_delegate 509 ui::ScopedClipboardWriter(views::ViewsDelegate::views_delegate
515 ->GetClipboard()).WriteText(GetSelectedText()); 510 ->GetClipboard()).WriteText(GetSelectedText());
516 // A trick to let undo/redo handle cursor correctly. 511 // A trick to let undo/redo handle cursor correctly.
517 // Undoing CUT moves the cursor to the end of the change rather 512 // Undoing CUT moves the cursor to the end of the change rather
518 // than beginning, unlike Delete/Backspace. 513 // than beginning, unlike Delete/Backspace.
519 // TODO(oshima): Change Delete/Backspace to use DeleteSelection, 514 // TODO(oshima): Change Delete/Backspace to use DeleteSelection,
520 // update DeleteEdit and remove this trick. 515 // update DeleteEdit and remove this trick.
521 render_text_->SelectRange(ui::Range(render_text_->GetCursorPosition(), 516 render_text_->SelectRange(ui::Range(render_text_->GetCursorPosition(),
522 render_text_->GetSelectionStart())); 517 render_text_->GetSelectionStart()));
523 DeleteSelection(); 518 DeleteSelection();
524 return true; 519 return true;
525 } 520 }
526 return false; 521 return false;
527 } 522 }
528 523
529 void TextfieldViewsModel::Copy() { 524 void TextfieldViewsModel::Copy() {
530 if (!HasCompositionText() && HasSelection()) { 525 if (!HasCompositionText() && HasSelection() && !render_text_->is_obscured()) {
531 ui::ScopedClipboardWriter(views::ViewsDelegate::views_delegate 526 ui::ScopedClipboardWriter(views::ViewsDelegate::views_delegate
532 ->GetClipboard()).WriteText(GetSelectedText()); 527 ->GetClipboard()).WriteText(GetSelectedText());
533 } 528 }
534 } 529 }
535 530
536 bool TextfieldViewsModel::Paste() { 531 bool TextfieldViewsModel::Paste() {
537 string16 result; 532 string16 result;
538 views::ViewsDelegate::views_delegate->GetClipboard() 533 views::ViewsDelegate::views_delegate->GetClipboard()
539 ->ReadText(ui::Clipboard::BUFFER_STANDARD, &result); 534 ->ReadText(ui::Clipboard::BUFFER_STANDARD, &result);
540 if (!result.empty()) { 535 if (!result.empty()) {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 *range = ui::Range(render_text_->GetCompositionRange()); 631 *range = ui::Range(render_text_->GetCompositionRange());
637 } 632 }
638 633
639 bool TextfieldViewsModel::HasCompositionText() const { 634 bool TextfieldViewsModel::HasCompositionText() const {
640 return !render_text_->GetCompositionRange().is_empty(); 635 return !render_text_->GetCompositionRange().is_empty();
641 } 636 }
642 637
643 ///////////////////////////////////////////////////////////////// 638 /////////////////////////////////////////////////////////////////
644 // TextfieldViewsModel: private 639 // TextfieldViewsModel: private
645 640
646 string16 TextfieldViewsModel::GetVisibleText(size_t begin, size_t end) const {
647 DCHECK(end >= begin);
648 if (is_password_)
649 return string16(end - begin, '*');
650 return GetText().substr(begin, end - begin);
651 }
652
653 void TextfieldViewsModel::InsertTextInternal(const string16& text, 641 void TextfieldViewsModel::InsertTextInternal(const string16& text,
654 bool mergeable) { 642 bool mergeable) {
655 if (HasCompositionText()) { 643 if (HasCompositionText()) {
656 CancelCompositionText(); 644 CancelCompositionText();
657 ExecuteAndRecordInsert(text, mergeable); 645 ExecuteAndRecordInsert(text, mergeable);
658 } else if (HasSelection()) { 646 } else if (HasSelection()) {
659 ExecuteAndRecordReplaceSelection(mergeable ? MERGEABLE : DO_NOT_MERGE, 647 ExecuteAndRecordReplaceSelection(mergeable ? MERGEABLE : DO_NOT_MERGE,
660 text); 648 text);
661 } else { 649 } else {
662 ExecuteAndRecordInsert(text, mergeable); 650 ExecuteAndRecordInsert(text, mergeable);
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 if (delete_from != delete_to) 778 if (delete_from != delete_to)
791 render_text_->SetText(text.erase(delete_from, delete_to - delete_from)); 779 render_text_->SetText(text.erase(delete_from, delete_to - delete_from));
792 if (!new_text.empty()) 780 if (!new_text.empty())
793 render_text_->SetText(text.insert(new_text_insert_at, new_text)); 781 render_text_->SetText(text.insert(new_text_insert_at, new_text));
794 render_text_->SetCursorPosition(new_cursor_pos); 782 render_text_->SetCursorPosition(new_cursor_pos);
795 // TODO(oshima): mac selects the text that is just undone (but gtk doesn't). 783 // TODO(oshima): mac selects the text that is just undone (but gtk doesn't).
796 // This looks fine feature and we may want to do the same. 784 // This looks fine feature and we may want to do the same.
797 } 785 }
798 786
799 } // namespace views 787 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698