Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "chrome/browser/ui/views/content_setting_bubble_contents.h" | 5 #include "chrome/browser/ui/views/content_setting_bubble_contents.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 46 namespace { | 46 namespace { |
| 47 | 47 |
| 48 // If we don't clamp the maximum width, then very long URLs and titles can make | 48 // If we don't clamp the maximum width, then very long URLs and titles can make |
| 49 // the bubble arbitrarily wide. | 49 // the bubble arbitrarily wide. |
| 50 const int kMaxContentsWidth = 500; | 50 const int kMaxContentsWidth = 500; |
| 51 | 51 |
| 52 // When we have multiline labels, we should set a minimum width lest we get very | 52 // When we have multiline labels, we should set a minimum width lest we get very |
| 53 // narrow bubbles with lots of line-wrapping. | 53 // narrow bubbles with lots of line-wrapping. |
| 54 const int kMinMultiLineContentsWidth = 250; | 54 const int kMinMultiLineContentsWidth = 250; |
| 55 | 55 |
| 56 // The minimum and maximum width of the media menu buttons. | 56 // The minimum width of the media menu buttons. |
| 57 const int kMinMediaMenuButtonWidth = 100; | 57 const int kMinMediaMenuButtonWidth = 100; |
| 58 const int kMaxMediaMenuButtonWidth = 600; | |
| 59 | 58 |
| 60 } | 59 } |
| 61 | 60 |
| 62 using content::PluginService; | 61 using content::PluginService; |
| 63 using content::WebContents; | 62 using content::WebContents; |
| 64 | 63 |
| 65 | 64 |
| 66 // ContentSettingBubbleContents::Favicon -------------------------------------- | 65 // ContentSettingBubbleContents::Favicon -------------------------------------- |
| 67 | 66 |
| 68 class ContentSettingBubbleContents::Favicon : public views::ImageView { | 67 class ContentSettingBubbleContents::Favicon : public views::ImageView { |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 300 bubble_content.media_menus.begin()); | 299 bubble_content.media_menus.begin()); |
| 301 i != bubble_content.media_menus.end(); ++i) { | 300 i != bubble_content.media_menus.end(); ++i) { |
| 302 if (!bubble_content_empty) | 301 if (!bubble_content_empty) |
| 303 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); | 302 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
| 304 layout->StartRow(0, kMediaMenuColumnSetId); | 303 layout->StartRow(0, kMediaMenuColumnSetId); |
| 305 | 304 |
| 306 views::Label* label = new views::Label(UTF8ToUTF16(i->second.label)); | 305 views::Label* label = new views::Label(UTF8ToUTF16(i->second.label)); |
| 307 label->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 306 label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| 308 | 307 |
| 309 views::MenuButton* menu_button = new views::MenuButton( | 308 views::MenuButton* menu_button = new views::MenuButton( |
| 310 NULL, UTF8ToUTF16((i->second.selected_device.name)), this, false); | 309 NULL, UTF8ToUTF16((i->second.selected_device.name)), this, true); |
| 311 menu_button->set_alignment(views::TextButton::ALIGN_LEFT); | 310 menu_button->set_alignment(views::TextButton::ALIGN_LEFT); |
| 312 menu_button->set_border( | 311 menu_button->set_border( |
| 313 new views::TextButtonNativeThemeBorder(menu_button)); | 312 new views::TextButtonNativeThemeBorder(menu_button)); |
| 314 menu_button->set_animate_on_state_change(false); | 313 menu_button->set_animate_on_state_change(false); |
| 315 | 314 |
| 316 MediaMenuParts* menu_view = new MediaMenuParts(i->first); | 315 MediaMenuParts* menu_view = new MediaMenuParts(i->first); |
| 317 menu_view->menu_model.reset(new ContentSettingMediaMenuModel( | 316 menu_view->menu_model.reset(new ContentSettingMediaMenuModel( |
| 318 i->first, | 317 i->first, |
| 319 content_setting_bubble_model_.get(), | 318 content_setting_bubble_model_.get(), |
| 320 base::Bind(&ContentSettingBubbleContents::UpdateMenuLabel, | 319 base::Bind(&ContentSettingBubbleContents::UpdateMenuLabel, |
| 321 base::Unretained(this)))); | 320 base::Unretained(this)))); |
| 322 media_menus_[menu_button] = menu_view; | 321 media_menus_[menu_button] = menu_view; |
| 323 | 322 |
| 323 if (!menu_view->menu_model->GetItemCount()) { | |
| 324 // Show a "None available" title and grey out the menu when there is no | |
| 325 // available device. | |
| 326 menu_button->SetText( | |
| 327 l10n_util::GetStringUTF16(IDS_MEDIA_MENU_NO_DEVICE_TITLE)); | |
| 328 menu_button->SetEnabled(false); | |
| 329 } | |
| 330 | |
| 324 // Use the longest width of the menus as the width of the menu buttons. | 331 // Use the longest width of the menus as the width of the menu buttons. |
| 325 menu_width = std::max(menu_width, | 332 menu_width = std::max(menu_width, |
| 326 GetPreferredMediaMenuWidth( | 333 GetPreferredMediaMenuWidth( |
| 327 menu_button, menu_view->menu_model.get())); | 334 menu_button, menu_view->menu_model.get())); |
| 328 | 335 |
| 329 layout->AddView(label); | 336 layout->AddView(label); |
| 330 layout->AddView(menu_button); | 337 layout->AddView(menu_button); |
| 331 | 338 |
| 332 bubble_content_empty = false; | 339 bubble_content_empty = false; |
| 333 } | 340 } |
| 334 | 341 |
| 335 // Make sure the width is within [kMinMediaMenuButtonWidth, | 342 // Make sure the width is more than kMinMediaMenuButtonWidth, and the |
|
Peter Kasting
2013/03/22 19:43:13
Nit: "more than" -> "at least", ", and the" -> ".
no longer working on chromium
2013/03/23 16:03:08
Done.
| |
| 336 // kMaxMediaMenuButtonWidth]. | 343 // maximum width will be clamped by kMaxContentsWidth of the view. |
| 337 menu_width = std::max(kMinMediaMenuButtonWidth, menu_width); | 344 menu_width = std::max(kMinMediaMenuButtonWidth, menu_width); |
| 338 menu_width = std::min(kMaxMediaMenuButtonWidth, menu_width); | |
| 339 | 345 |
| 340 // Set all the menu buttons to the width we calculated above. | 346 // Set all the menu buttons to the width we calculated above. |
| 341 for (MediaMenuPartsMap::const_iterator i = media_menus_.begin(); | 347 for (MediaMenuPartsMap::const_iterator i = media_menus_.begin(); |
| 342 i != media_menus_.end(); ++i) { | 348 i != media_menus_.end(); ++i) { |
| 343 i->first->set_min_width(menu_width); | 349 i->first->set_min_width(menu_width); |
| 344 i->first->set_max_width(menu_width); | 350 i->first->set_max_width(menu_width); |
| 345 } | 351 } |
| 346 } | 352 } |
| 347 | 353 |
| 348 gfx::Font domain_font = | 354 gfx::Font domain_font = |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 477 int width = button->GetPreferredSize().width(); | 483 int width = button->GetPreferredSize().width(); |
| 478 for (int i = 0; i < menu_model->GetItemCount(); ++i) { | 484 for (int i = 0; i < menu_model->GetItemCount(); ++i) { |
| 479 button->SetText(menu_model->GetLabelAt(i)); | 485 button->SetText(menu_model->GetLabelAt(i)); |
| 480 width = std::max(width, button->GetPreferredSize().width()); | 486 width = std::max(width, button->GetPreferredSize().width()); |
| 481 } | 487 } |
| 482 | 488 |
| 483 // Recover the title for the menu button. | 489 // Recover the title for the menu button. |
| 484 button->SetText(title); | 490 button->SetText(title); |
| 485 return width; | 491 return width; |
| 486 } | 492 } |
| OLD | NEW |