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

Side by Side Diff: ui/views/controls/combobox/combobox.cc

Issue 141523005: Combobox: Rename styles to STYLE_NORMAL and STYLE_ACTION and modify behaviors (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: sky's review Created 6 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/combobox/combobox.h" 5 #include "ui/views/controls/combobox/combobox.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "grit/ui_resources.h" 9 #include "grit/ui_resources.h"
10 #include "ui/base/accessibility/accessible_view_state.h" 10 #include "ui/base/accessibility/accessible_view_state.h"
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 return rb.GetFontList(ui::ResourceBundle::BaseFont); 271 return rb.GetFontList(ui::ResourceBundle::BaseFont);
272 } 272 }
273 273
274 void Combobox::SetStyle(Style style) { 274 void Combobox::SetStyle(Style style) {
275 if (style_ == style) 275 if (style_ == style)
276 return; 276 return;
277 277
278 style_ = style; 278 style_ = style;
279 279
280 UpdateBorder(); 280 UpdateBorder();
281 UpdateFromModel();
281 PreferredSizeChanged(); 282 PreferredSizeChanged();
282 } 283 }
283 284
284 void Combobox::ModelChanged() { 285 void Combobox::ModelChanged() {
285 selected_index_ = std::min(0, model_->GetItemCount()); 286 selected_index_ = std::min(0, model_->GetItemCount());
286 UpdateFromModel(); 287 UpdateFromModel();
287 PreferredSizeChanged(); 288 PreferredSizeChanged();
288 } 289 }
289 290
290 void Combobox::SetSelectedIndex(int index) { 291 void Combobox::SetSelectedIndex(int index) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 return false; 352 return false;
352 } 353 }
353 354
354 bool Combobox::IsCommandEnabled(int id) const { 355 bool Combobox::IsCommandEnabled(int id) const {
355 return model()->IsItemEnabledAt(MenuCommandToIndex(id)); 356 return model()->IsItemEnabledAt(MenuCommandToIndex(id));
356 } 357 }
357 358
358 void Combobox::ExecuteCommand(int id) { 359 void Combobox::ExecuteCommand(int id) {
359 selected_index_ = MenuCommandToIndex(id); 360 selected_index_ = MenuCommandToIndex(id);
360 OnSelectionChanged(); 361 OnSelectionChanged();
362 if (style_ == STYLE_NOTIFY_ON_CLICK)
363 HandleClickEvent();
361 } 364 }
362 365
363 bool Combobox::GetAccelerator(int id, ui::Accelerator* accel) { 366 bool Combobox::GetAccelerator(int id, ui::Accelerator* accel) {
364 return false; 367 return false;
365 } 368 }
366 369
367 int Combobox::GetRowCount() { 370 int Combobox::GetRowCount() {
368 return model()->GetItemCount(); 371 return model()->GetItemCount();
369 } 372 }
370 373
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 break; 476 break;
474 477
475 default: 478 default:
476 return false; 479 return false;
477 } 480 }
478 481
479 if (show_menu) { 482 if (show_menu) {
480 UpdateFromModel(); 483 UpdateFromModel();
481 ShowDropDownMenu(ui::MENU_SOURCE_KEYBOARD); 484 ShowDropDownMenu(ui::MENU_SOURCE_KEYBOARD);
482 } else if (new_index != selected_index_ && new_index != kNoSelection) { 485 } else if (new_index != selected_index_ && new_index != kNoSelection) {
483 DCHECK(!model()->IsItemSeparatorAt(new_index)); 486 if (style_ != STYLE_NOTIFY_ON_CLICK) {
484 selected_index_ = new_index; 487 DCHECK(!model()->IsItemSeparatorAt(new_index));
485 OnSelectionChanged(); 488 selected_index_ = new_index;
489 OnSelectionChanged();
490 }
486 } 491 }
487 492
488 return true; 493 return true;
489 } 494 }
490 495
491 bool Combobox::OnKeyReleased(const ui::KeyEvent& e) { 496 bool Combobox::OnKeyReleased(const ui::KeyEvent& e) {
492 if (style_ != STYLE_NOTIFY_ON_CLICK) 497 if (style_ != STYLE_NOTIFY_ON_CLICK)
493 return false; // crbug.com/127520 498 return false; // crbug.com/127520
494 499
495 if (e.key_code() == ui::VKEY_SPACE) 500 if (e.key_code() == ui::VKEY_SPACE && style_ == STYLE_NOTIFY_ON_CLICK)
496 HandleClickEvent(); 501 HandleClickEvent();
497 502
498 return false; 503 return false;
499 } 504 }
500 505
501 void Combobox::OnPaint(gfx::Canvas* canvas) { 506 void Combobox::OnPaint(gfx::Canvas* canvas) {
502 switch (style_) { 507 switch (style_) {
503 case STYLE_SHOW_DROP_DOWN_ON_CLICK: { 508 case STYLE_SHOW_DROP_DOWN_ON_CLICK: {
504 OnPaintBackground(canvas); 509 OnPaintBackground(canvas);
505 PaintText(canvas); 510 PaintText(canvas);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 ui::MenuSourceType source_type = ui::MENU_SOURCE_MOUSE; 563 ui::MenuSourceType source_type = ui::MENU_SOURCE_MOUSE;
559 if (event.IsKeyEvent()) 564 if (event.IsKeyEvent())
560 source_type = ui::MENU_SOURCE_KEYBOARD; 565 source_type = ui::MENU_SOURCE_KEYBOARD;
561 else if (event.IsGestureEvent() || event.IsTouchEvent()) 566 else if (event.IsGestureEvent() || event.IsTouchEvent())
562 source_type = ui::MENU_SOURCE_TOUCH; 567 source_type = ui::MENU_SOURCE_TOUCH;
563 ShowDropDownMenu(source_type); 568 ShowDropDownMenu(source_type);
564 } 569 }
565 } 570 }
566 571
567 void Combobox::UpdateFromModel() { 572 void Combobox::UpdateFromModel() {
568 int max_width = 0;
569 const gfx::FontList& font_list = Combobox::GetFontList(); 573 const gfx::FontList& font_list = Combobox::GetFontList();
570 574
571 MenuItemView* menu = new MenuItemView(this); 575 MenuItemView* menu = new MenuItemView(this);
572 // MenuRunner owns |menu|. 576 // MenuRunner owns |menu|.
573 dropdown_list_menu_runner_.reset(new MenuRunner(menu)); 577 dropdown_list_menu_runner_.reset(new MenuRunner(menu));
574 578
575 int num_items = model()->GetItemCount(); 579 int num_items = model()->GetItemCount();
580 int width = 0;
576 for (int i = 0; i < num_items; ++i) { 581 for (int i = 0; i < num_items; ++i) {
577 if (model()->IsItemSeparatorAt(i)) { 582 if (model()->IsItemSeparatorAt(i)) {
578 menu->AppendSeparator(); 583 menu->AppendSeparator();
579 continue; 584 continue;
580 } 585 }
581 586
582 base::string16 text = model()->GetItemAt(i); 587 base::string16 text = model()->GetItemAt(i);
583 588
584 // Inserting the Unicode formatting characters if necessary so that the 589 // Inserting the Unicode formatting characters if necessary so that the
585 // text is displayed correctly in right-to-left UIs. 590 // text is displayed correctly in right-to-left UIs.
586 base::i18n::AdjustStringForLocaleDirection(&text); 591 base::i18n::AdjustStringForLocaleDirection(&text);
587 592
588 menu->AppendMenuItem(i + kFirstMenuItemId, text, MenuItemView::NORMAL); 593 menu->AppendMenuItem(i + kFirstMenuItemId, text, MenuItemView::NORMAL);
589 max_width = std::max(max_width, gfx::GetStringWidth(text, font_list)); 594
595 if (style_ != STYLE_NOTIFY_ON_CLICK || i == selected_index_)
596 width = std::max(width, gfx::GetStringWidth(text, font_list));
590 } 597 }
591 598
592 content_size_.SetSize(max_width, font_list.GetHeight()); 599 content_size_.SetSize(width, font_list.GetHeight());
593 } 600 }
594 601
595 void Combobox::UpdateBorder() { 602 void Combobox::UpdateBorder() {
596 FocusableBorder* border = new FocusableBorder(); 603 FocusableBorder* border = new FocusableBorder();
597 if (style_ == STYLE_NOTIFY_ON_CLICK) 604 if (style_ == STYLE_NOTIFY_ON_CLICK)
598 border->SetInsets(8, 13, 8, 13); 605 border->SetInsets(8, 13, 8, 13);
599 if (invalid_) 606 if (invalid_)
600 border->SetColor(kWarningColor); 607 border->SetColor(kWarningColor);
601 set_border(border); 608 set_border(border);
602 } 609 }
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 797
791 void Combobox::HandleClickEvent() { 798 void Combobox::HandleClickEvent() {
792 if (style_ != STYLE_NOTIFY_ON_CLICK) 799 if (style_ != STYLE_NOTIFY_ON_CLICK)
793 return; 800 return;
794 801
795 if (listener_) 802 if (listener_)
796 listener_->OnComboboxTextButtonClicked(this); 803 listener_->OnComboboxTextButtonClicked(this);
797 } 804 }
798 805
799 } // namespace views 806 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698