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

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

Issue 6314012: Make uneditable when readonly (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " 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
« no previous file with comments | « no previous file | views/controls/textfield/native_textfield_views_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "views/controls/textfield/native_textfield_views.h" 5 #include "views/controls/textfield/native_textfield_views.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 } 322 }
323 323
324 ///////////////////////////////////////////////////////////////// 324 /////////////////////////////////////////////////////////////////
325 // NativeTextfieldViews, ui::SimpleMenuModel::Delegate overrides: 325 // NativeTextfieldViews, ui::SimpleMenuModel::Delegate overrides:
326 326
327 bool NativeTextfieldViews::IsCommandIdChecked(int command_id) const { 327 bool NativeTextfieldViews::IsCommandIdChecked(int command_id) const {
328 return true; 328 return true;
329 } 329 }
330 330
331 bool NativeTextfieldViews::IsCommandIdEnabled(int command_id) const { 331 bool NativeTextfieldViews::IsCommandIdEnabled(int command_id) const {
332 bool editable = !textfield_->read_only();
332 string16 result; 333 string16 result;
333 switch (command_id) { 334 switch (command_id) {
334 case IDS_APP_CUT: 335 case IDS_APP_CUT:
335 return model_->HasSelection(); 336 return editable && model_->HasSelection();
336 case IDS_APP_COPY: 337 case IDS_APP_COPY:
337 return model_->HasSelection(); 338 return model_->HasSelection();
338 case IDS_APP_PASTE: 339 case IDS_APP_PASTE:
339 views::ViewsDelegate::views_delegate->GetClipboard() 340 views::ViewsDelegate::views_delegate->GetClipboard()
340 ->ReadText(ui::Clipboard::BUFFER_STANDARD, &result); 341 ->ReadText(ui::Clipboard::BUFFER_STANDARD, &result);
341 return !result.empty(); 342 return editable && !result.empty();
342 case IDS_APP_DELETE: 343 case IDS_APP_DELETE:
343 return model_->HasSelection(); 344 return editable && model_->HasSelection();
344 case IDS_APP_SELECT_ALL: 345 case IDS_APP_SELECT_ALL:
345 return true; 346 return true;
346 default: 347 default:
347 NOTREACHED(); 348 NOTREACHED();
348 return false; 349 return false;
349 } 350 }
350 } 351 }
351 352
352 bool NativeTextfieldViews::GetAcceleratorForCommandId(int command_id, 353 bool NativeTextfieldViews::GetAcceleratorForCommandId(int command_id,
353 ui::Accelerator* accelerator) { 354 ui::Accelerator* accelerator) {
354 return false; 355 return false;
355 } 356 }
356 357
357 void NativeTextfieldViews::ExecuteCommand(int command_id) { 358 void NativeTextfieldViews::ExecuteCommand(int command_id) {
358 bool text_changed = false; 359 bool text_changed = false;
360 bool editable = !textfield_->read_only();
359 switch (command_id) { 361 switch (command_id) {
360 case IDS_APP_CUT: 362 case IDS_APP_CUT:
361 text_changed = model_->Cut(); 363 if (editable)
364 text_changed = model_->Cut();
362 break; 365 break;
363 case IDS_APP_COPY: 366 case IDS_APP_COPY:
364 model_->Copy(); 367 model_->Copy();
365 break; 368 break;
366 case IDS_APP_PASTE: 369 case IDS_APP_PASTE:
367 text_changed = model_->Paste(); 370 if (editable)
371 text_changed = model_->Paste();
368 break; 372 break;
369 case IDS_APP_DELETE: 373 case IDS_APP_DELETE:
370 text_changed = model_->Delete(); 374 if (editable)
375 text_changed = model_->Delete();
371 break; 376 break;
372 case IDS_APP_SELECT_ALL: 377 case IDS_APP_SELECT_ALL:
373 SelectAll(); 378 SelectAll();
374 break; 379 break;
375 default: 380 default:
376 NOTREACHED() << "unknown command: " << command_id; 381 NOTREACHED() << "unknown command: " << command_id;
377 break; 382 break;
378 } 383 }
379 if (text_changed) 384 if (text_changed)
380 PropagateTextChange(); 385 PropagateTextChange();
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 } 517 }
513 } 518 }
514 519
515 bool NativeTextfieldViews::HandleKeyEvent(const KeyEvent& key_event) { 520 bool NativeTextfieldViews::HandleKeyEvent(const KeyEvent& key_event) {
516 // TODO(oshima): handle IME. 521 // TODO(oshima): handle IME.
517 if (key_event.GetType() == views::Event::ET_KEY_PRESSED) { 522 if (key_event.GetType() == views::Event::ET_KEY_PRESSED) {
518 ui::KeyboardCode key_code = key_event.GetKeyCode(); 523 ui::KeyboardCode key_code = key_event.GetKeyCode();
519 // TODO(oshima): shift-tab does not work. Figure out why and fix. 524 // TODO(oshima): shift-tab does not work. Figure out why and fix.
520 if (key_code == ui::VKEY_TAB) 525 if (key_code == ui::VKEY_TAB)
521 return false; 526 return false;
527 bool editable = !textfield_->read_only();
522 bool selection = key_event.IsShiftDown(); 528 bool selection = key_event.IsShiftDown();
523 bool control = key_event.IsControlDown(); 529 bool control = key_event.IsControlDown();
524 bool text_changed = false; 530 bool text_changed = false;
525 bool cursor_changed = false; 531 bool cursor_changed = false;
526 switch (key_code) { 532 switch (key_code) {
527 case ui::VKEY_A: 533 case ui::VKEY_A:
528 if (control) { 534 if (control) {
529 model_->SelectAll(); 535 model_->SelectAll();
530 cursor_changed = true; 536 cursor_changed = true;
531 } 537 }
532 break; 538 break;
533 case ui::VKEY_X: 539 case ui::VKEY_X:
534 if (control) 540 if (control && editable)
535 text_changed = model_->Cut(); 541 text_changed = model_->Cut();
536 break; 542 break;
537 case ui::VKEY_C: 543 case ui::VKEY_C:
538 if (control) 544 if (control)
539 model_->Copy(); 545 model_->Copy();
540 break; 546 break;
541 case ui::VKEY_V: 547 case ui::VKEY_V:
542 if (control) 548 if (control && editable)
543 text_changed = model_->Paste(); 549 text_changed = model_->Paste();
544 break; 550 break;
545 case ui::VKEY_RIGHT: 551 case ui::VKEY_RIGHT:
546 control ? model_->MoveCursorToNextWord(selection) 552 control ? model_->MoveCursorToNextWord(selection)
547 : model_->MoveCursorRight(selection); 553 : model_->MoveCursorRight(selection);
548 cursor_changed = true; 554 cursor_changed = true;
549 break; 555 break;
550 case ui::VKEY_LEFT: 556 case ui::VKEY_LEFT:
551 control ? model_->MoveCursorToPreviousWord(selection) 557 control ? model_->MoveCursorToPreviousWord(selection)
552 : model_->MoveCursorLeft(selection); 558 : model_->MoveCursorLeft(selection);
553 cursor_changed = true; 559 cursor_changed = true;
554 break; 560 break;
555 case ui::VKEY_END: 561 case ui::VKEY_END:
556 model_->MoveCursorToEnd(selection); 562 model_->MoveCursorToEnd(selection);
557 cursor_changed = true; 563 cursor_changed = true;
558 break; 564 break;
559 case ui::VKEY_HOME: 565 case ui::VKEY_HOME:
560 model_->MoveCursorToStart(selection); 566 model_->MoveCursorToStart(selection);
561 cursor_changed = true; 567 cursor_changed = true;
562 break; 568 break;
563 case ui::VKEY_BACK: 569 case ui::VKEY_BACK:
570 if (!editable)
571 break;
564 if (!model_->HasSelection()) { 572 if (!model_->HasSelection()) {
565 if (selection && control) { 573 if (selection && control) {
566 // If both shift and control are pressed, then erase upto the 574 // If both shift and control are pressed, then erase upto the
567 // beginning of the buffer in ChromeOS. In windows, do nothing. 575 // beginning of the buffer in ChromeOS. In windows, do nothing.
568 #if defined(OS_WIN) 576 #if defined(OS_WIN)
569 break; 577 break;
570 #else 578 #else
571 model_->MoveCursorToStart(true); 579 model_->MoveCursorToStart(true);
572 #endif 580 #endif
573 } else if (control) { 581 } else if (control) {
574 // If only control is pressed, then erase the previous word. 582 // If only control is pressed, then erase the previous word.
575 model_->MoveCursorToPreviousWord(true); 583 model_->MoveCursorToPreviousWord(true);
576 } 584 }
577 } 585 }
578 text_changed = model_->Backspace(); 586 text_changed = model_->Backspace();
579 cursor_changed = true; 587 cursor_changed = true;
580 break; 588 break;
581 case ui::VKEY_DELETE: 589 case ui::VKEY_DELETE:
590 if (!editable)
591 break;
582 if (!model_->HasSelection()) { 592 if (!model_->HasSelection()) {
583 if (selection && control) { 593 if (selection && control) {
584 // If both shift and control are pressed, then erase upto the 594 // If both shift and control are pressed, then erase upto the
585 // end of the buffer in ChromeOS. In windows, do nothing. 595 // end of the buffer in ChromeOS. In windows, do nothing.
586 #if defined(OS_WIN) 596 #if defined(OS_WIN)
587 break; 597 break;
588 #else 598 #else
589 model_->MoveCursorToEnd(true); 599 model_->MoveCursorToEnd(true);
590 #endif 600 #endif
591 } else if (control) { 601 } else if (control) {
592 // If only control is pressed, then erase the next word. 602 // If only control is pressed, then erase the next word.
593 model_->MoveCursorToNextWord(true); 603 model_->MoveCursorToNextWord(true);
594 } 604 }
595 } 605 }
596 text_changed = model_->Delete(); 606 text_changed = model_->Delete();
597 break; 607 break;
598 case ui::VKEY_INSERT: 608 case ui::VKEY_INSERT:
599 insert_ = !insert_; 609 insert_ = !insert_;
600 cursor_changed = true; 610 cursor_changed = true;
601 break; 611 break;
602 default: 612 default:
603 break; 613 break;
604 } 614 }
605 char16 print_char = GetPrintableChar(key_event); 615 char16 print_char = GetPrintableChar(key_event);
606 if (!control && print_char) { 616 if (!control && print_char && editable) {
607 if (insert_) 617 if (insert_)
608 model_->Insert(print_char); 618 model_->Insert(print_char);
609 else 619 else
610 model_->Replace(print_char); 620 model_->Replace(print_char);
611 text_changed = true; 621 text_changed = true;
612 } 622 }
613 if (text_changed) 623 if (text_changed)
614 PropagateTextChange(); 624 PropagateTextChange();
615 if (cursor_changed) { 625 if (cursor_changed) {
616 is_cursor_visible_ = true; 626 is_cursor_visible_ = true;
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 } 853 }
844 854
845 void NativeTextfieldViews::TextfieldBorder::SetInsets(int top, 855 void NativeTextfieldViews::TextfieldBorder::SetInsets(int top,
846 int left, 856 int left,
847 int bottom, 857 int bottom,
848 int right) { 858 int right) {
849 insets_.Set(top, left, bottom, right); 859 insets_.Set(top, left, bottom, right);
850 } 860 }
851 861
852 } // namespace views 862 } // namespace views
OLDNEW
« no previous file with comments | « no previous file | views/controls/textfield/native_textfield_views_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698