media_gallery_checkbox_view.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
11e60a9165dc4d6ce5650dacc026f2942696af920Chris Lattner// Copyright 2014 The Chromium Authors. All rights reserved. 20e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman// Use of this source code is governed by a BSD-style license that can be 3856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell// found in the LICENSE file. 4856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner#include "chrome/browser/ui/views/extensions/media_gallery_checkbox_view.h" 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner 70e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman#include "chrome/browser/media_galleries/media_galleries_preferences.h" 8856ba76200ec2302f2fe500bc507f426c7d566c8John Criswell#include "grit/generated_resources.h" 9726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#include "grit/theme_resources.h" 103501feab811c86c9659248a4875fc31a3165f84dChris Lattner#include "third_party/skia/include/core/SkColor.h" 11726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#include "ui/base/l10n/l10n_util.h" 12726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#include "ui/base/resource/resource_bundle.h" 13726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#include "ui/gfx/rect.h" 14726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#include "ui/views/border.h" 15726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#include "ui/views/context_menu_controller.h" 16726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#include "ui/views/controls/button/button.h" 173501feab811c86c9659248a4875fc31a3165f84dChris Lattner#include "ui/views/controls/button/checkbox.h" 1852e724ad7e679ee590f4bd763d55280586a8f1bcNicolas Geoffray#include "ui/views/controls/button/image_button.h" 19726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner#include "ui/views/controls/label.h" 206259d51c91d7da9bf16114849236b5bdfa85f35eBill Wendling#include "ui/views/layout/box_layout.h" 216f0d024a534af18d9e60b3ea757376cd8a3a980eDan Gohman#include "ui/views/layout/layout_constants.h" 22726140821f96e3472a8eccef0c67c0b5ad65a1d9Chris Lattner 23d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekenamespace { 2425ab690a43cbbb591b76d49e3595b019c32f4b3fEvan Cheng 25aa3c1410b427909da350f2b5e8d4ec3db62a3618Evan Cheng// Equal to the #9F9F9F color used in spec (note WebUI color is #999). 26d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekeconst SkColor kDeemphasizedTextColor = SkColorSetRGB(159, 159, 159); 277fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner 287fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner} // namespace 297fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner 307fbe9723e32ff35c4ad765c88209ef9321475a1bChris LattnerMediaGalleryCheckboxView::MediaGalleryCheckboxView( 317fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner const MediaGalleryPrefInfo& pref_info, 327fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner bool show_folder_button, 337fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner int trailing_vertical_space, 347fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner views::ButtonListener* button_listener, 357fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner views::ContextMenuController* menu_controller) { 367fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner DCHECK(button_listener != NULL); 377fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner SetLayoutManager( 387fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); 397fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner SetBorder(views::Border::CreateEmptyBorder( 407fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner 0, views::kPanelHorizMargin, trailing_vertical_space, 417fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner views::kPanelHorizMargin)); 427fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner if (menu_controller) 437fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner set_context_menu_controller(menu_controller); 447fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner 457fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner checkbox_ = new views::Checkbox(pref_info.GetGalleryDisplayName()); 467fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner checkbox_->set_listener(button_listener); 477fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner if (menu_controller) 487fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner checkbox_->set_context_menu_controller(menu_controller); 496634e26aa11b0e2eabde8b3b463bb943364f8d9dChristopher Lamb checkbox_->SetElideBehavior(gfx::ELIDE_MIDDLE); 507fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner base::string16 tooltip_text = pref_info.GetGalleryTooltip(); 517fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner checkbox_->SetTooltipText(tooltip_text); 529cd68759178f9fe25c72253d338e78e414f1d770Chris Lattner 539cd68759178f9fe25c72253d338e78e414f1d770Chris Lattner ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 549cd68759178f9fe25c72253d338e78e414f1d770Chris Lattner folder_viewer_button_ = new views::ImageButton(button_listener); 559cd68759178f9fe25c72253d338e78e414f1d770Chris Lattner if (menu_controller) 569cd68759178f9fe25c72253d338e78e414f1d770Chris Lattner folder_viewer_button_->set_context_menu_controller(menu_controller); 577fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner folder_viewer_button_->SetImage(views::ImageButton::STATE_NORMAL, 587fbe9723e32ff35c4ad765c88209ef9321475a1bChris Lattner rb.GetImageSkiaNamed(IDR_FILE_FOLDER)); 599d17740295838f94120646ef619b2e187f2d71bdChris Lattner folder_viewer_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER, 609d17740295838f94120646ef619b2e187f2d71bdChris Lattner views::ImageButton::ALIGN_MIDDLE); 619d17740295838f94120646ef619b2e187f2d71bdChris Lattner folder_viewer_button_->SetAccessibleName(l10n_util::GetStringUTF16( 629d17740295838f94120646ef619b2e187f2d71bdChris Lattner IDS_MEDIA_GALLERIES_SCAN_RESULT_OPEN_FOLDER_VIEW_ACCESSIBILITY_NAME)); 639d17740295838f94120646ef619b2e187f2d71bdChris Lattner folder_viewer_button_->SetFocusable(true); 646aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner folder_viewer_button_->SetVisible(show_folder_button); 656aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner folder_viewer_button_->SetBorder(views::Border::CreateEmptyBorder( 666aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner 0, views::kRelatedControlSmallHorizontalSpacing, 0, 0)); 676aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner 686aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner base::string16 details = pref_info.GetGalleryAdditionalDetails(); 694c299f5da1013cd36563a82f188c731b2758074dChris Lattner secondary_text_ = new views::Label(details); 704c299f5da1013cd36563a82f188c731b2758074dChris Lattner if (menu_controller) 714c299f5da1013cd36563a82f188c731b2758074dChris Lattner secondary_text_->set_context_menu_controller(menu_controller); 724c299f5da1013cd36563a82f188c731b2758074dChris Lattner secondary_text_->SetVisible(details.length() > 0); 734c299f5da1013cd36563a82f188c731b2758074dChris Lattner secondary_text_->SetEnabledColor(kDeemphasizedTextColor); 746aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner secondary_text_->SetElideBehavior(gfx::ELIDE_HEAD); 756aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner secondary_text_->SetTooltipText(tooltip_text); 764c299f5da1013cd36563a82f188c731b2758074dChris Lattner secondary_text_->SetBorder(views::Border::CreateEmptyBorder( 770e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman 0, views::kRelatedControlSmallHorizontalSpacing, 0, 0)); 786aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner 796aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner AddChildView(checkbox_); 804c299f5da1013cd36563a82f188c731b2758074dChris Lattner AddChildView(folder_viewer_button_); 816aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner AddChildView(secondary_text_); 826aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner} 836aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner 846aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris LattnerMediaGalleryCheckboxView::~MediaGalleryCheckboxView() {} 854c299f5da1013cd36563a82f188c731b2758074dChris Lattner 866aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattnervoid MediaGalleryCheckboxView::Layout() { 876aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner views::View::Layout(); 886aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner if (GetPreferredSize().width() <= GetLocalBounds().width()) 896aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner return; 904c299f5da1013cd36563a82f188c731b2758074dChris Lattner 916aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner // If box layout doesn't fit, do custom layout. The folder_viewer_button and 926aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner // the secondary text should take up at most half of the space and the 936aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner // checkbox can take up what ever is left. 946aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner int checkbox_width = checkbox_->GetPreferredSize().width(); 954c299f5da1013cd36563a82f188c731b2758074dChris Lattner int folder_viewer_width = folder_viewer_button_->GetPreferredSize().width(); 966aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner int secondary_text_width = secondary_text_->GetPreferredSize().width(); 976aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner if (!folder_viewer_button_->visible()) 986aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner folder_viewer_width = 0; 996aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner if (!secondary_text_->visible()) 1004c299f5da1013cd36563a82f188c731b2758074dChris Lattner secondary_text_width = 0; 1010e0a7a45d3d0a8c865a078459d2e1c6d8967a100Misha Brukman 102169584ed45f62f91599bed3d019640e168d815eaAlkis Evlogimenos gfx::Rect area(GetLocalBounds()); 10385b39f229f3146e57d059f1c774400e4bde23987Chris Lattner area.Inset(GetInsets()); 10485b39f229f3146e57d059f1c774400e4bde23987Chris Lattner 10585b39f229f3146e57d059f1c774400e4bde23987Chris Lattner if (folder_viewer_width + secondary_text_width > area.width() / 2) { 10685b39f229f3146e57d059f1c774400e4bde23987Chris Lattner secondary_text_width = 10785b39f229f3146e57d059f1c774400e4bde23987Chris Lattner std::max(area.width() / 2 - folder_viewer_width, 108169584ed45f62f91599bed3d019640e168d815eaAlkis Evlogimenos area.width() - folder_viewer_width - checkbox_width); 109169584ed45f62f91599bed3d019640e168d815eaAlkis Evlogimenos } 11085b39f229f3146e57d059f1c774400e4bde23987Chris Lattner checkbox_width = area.width() - folder_viewer_width - secondary_text_width; 11185b39f229f3146e57d059f1c774400e4bde23987Chris Lattner 112169584ed45f62f91599bed3d019640e168d815eaAlkis Evlogimenos checkbox_->SetBounds(area.x(), area.y(), checkbox_width, area.height()); 113169584ed45f62f91599bed3d019640e168d815eaAlkis Evlogimenos if (folder_viewer_button_->visible()) { 1146aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner folder_viewer_button_->SetBounds(checkbox_->x() + checkbox_width, area.y(), 1153c55c54a877b3e5a79053df8f6080f505c9d1ff4Evan Cheng folder_viewer_width, area.height()); 1163c55c54a877b3e5a79053df8f6080f505c9d1ff4Evan Cheng } 1173c55c54a877b3e5a79053df8f6080f505c9d1ff4Evan Cheng if (secondary_text_->visible()) { 1183c55c54a877b3e5a79053df8f6080f505c9d1ff4Evan Cheng secondary_text_->SetBounds( 1193c55c54a877b3e5a79053df8f6080f505c9d1ff4Evan Cheng checkbox_->x() + checkbox_width + folder_viewer_width, 1206aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner area.y(), secondary_text_width, area.height()); 1216aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner } 1226aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner} 1236aab9cf65cd1e96f9d0fa99f8453da454648bba1Chris Lattner