media_galleries_dialog_views.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/extensions/media_galleries_dialog_views.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/constrained_window_views.h" 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_host.h" 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_manager.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents_view.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/locale_settings.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/native_theme/native_theme.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/checkbox.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/button/label_button.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/scroll_view.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/separator.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/box_layout.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/layout_constants.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/window/dialog_client_view.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using web_modal::WebContentsModalDialogManager; 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)using web_modal::WebContentsModalDialogManagerDelegate; 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Equal to the #969696 color used in spec (note WebUI color is #999). 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const SkColor kDeemphasizedTextColor = SkColorSetRGB(159, 159, 159); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kScrollAreaHeight = 192; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This container has the right Layout() impl to use within a ScrollView. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScrollableView : public views::View { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScrollableView() {} 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ScrollableView() {} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Layout() OVERRIDE; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScrollableView); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ScrollableView::Layout() { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size pref = GetPreferredSize(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int width = pref.width(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int height = pref.height(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (parent()) { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) width = std::max(parent()->width(), width); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) height = std::max(parent()->height(), height); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetBounds(x(), y(), width, height); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View::Layout(); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef MediaGalleriesDialogController::GalleryPermissionsVector 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GalleryPermissionsVector; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MediaGalleriesDialogViews::MediaGalleriesDialogViews( 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesDialogController* controller) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : controller_(controller), 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_(NULL), 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents_(new views::View()), 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) add_gallery_button_(NULL), 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) confirm_available_(false), 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) accepted_(false) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitChildViews(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ownership of |contents_| is handed off by this call. |window_| will take 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // care of deleting itself after calling DeleteDelegate(). 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContentsModalDialogManager* web_contents_modal_dialog_manager = 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContentsModalDialogManager::FromWebContents( 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->web_contents()); 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(web_contents_modal_dialog_manager); 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) WebContentsModalDialogManagerDelegate* modal_delegate = 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) web_contents_modal_dialog_manager->delegate(); 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK(modal_delegate); 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) window_ = views::Widget::CreateWindowAsFramelessChild( 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this, 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) controller->web_contents()->GetView()->GetNativeView(), 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) modal_delegate->GetWebContentsModalDialogHost()->GetHostView()); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_modal_dialog_manager->ShowDialog(window_->GetNativeView()); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MediaGalleriesDialogViews::~MediaGalleriesDialogViews() {} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MediaGalleriesDialogViews::InitChildViews() { 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Outer dialog layout. 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents_->RemoveAllChildViews(true); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int dialog_content_width = views::Widget::GetLocalizedContentsWidth( 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_MEDIA_GALLERIES_DIALOG_CONTENT_WIDTH_CHARS); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) views::GridLayout* layout = views::GridLayout::CreatePanel(contents_); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) contents_->SetLayoutManager(layout); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int column_set_id = 0; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ColumnSet* columns = layout->AddColumnSet(column_set_id); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) columns->AddColumn(views::GridLayout::LEADING, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::GridLayout::LEADING, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::GridLayout::FIXED, 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dialog_content_width, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!DialogDelegate::UseNewStyle()) { 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Header text. 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) views::Label* header = new views::Label(controller_->GetHeader()); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) header->SetFont(rb.GetFont(ui::ResourceBundle::MediumFont)); 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) header->SetHorizontalAlignment(gfx::ALIGN_LEFT); 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layout->StartRow(0, column_set_id); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layout->AddView(header); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message text. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* subtext = new views::Label(controller_->GetSubtext()); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subtext->SetMultiLine(true); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subtext->SetHorizontalAlignment(gfx::ALIGN_LEFT); 1315e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) layout->StartRow(0, column_set_id); 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) layout->AddView( 1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) subtext, 1, 1, 1343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) views::GridLayout::FILL, views::GridLayout::LEADING, 1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) dialog_content_width, subtext->GetHeightForWidth(dialog_content_width)); 1365e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Scrollable area for checkboxes. 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScrollableView* scroll_container = new ScrollableView(); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_container->SetLayoutManager(new views::BoxLayout( 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::BoxLayout::kVertical, 0, 0, 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::kRelatedControlSmallVerticalSpacing)); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_container->set_border(views::Border::CreateEmptyBorder( 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::kRelatedControlVerticalSpacing, 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::kRelatedControlVerticalSpacing, 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0)); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add attached galleries checkboxes. 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkbox_map_.clear(); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GalleryPermissionsVector permissions = controller_->AttachedPermissions(); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (GalleryPermissionsVector::const_iterator iter = permissions.begin(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != permissions.end(); ++iter) { 1545e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) int spacing = 0; 1555e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) if (iter + 1 == permissions.end()) 1565e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) spacing = views::kRelatedControlSmallVerticalSpacing; 1575e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) AddOrUpdateGallery(iter->pref_info, iter->allowed, scroll_container, 1585e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) spacing); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GalleryPermissionsVector unattached_permissions = 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) controller_->UnattachedPermissions(); 16368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 16468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!unattached_permissions.empty()) { 16568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Separator line. 16668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) views::Separator* separator = new views::Separator( 16768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) views::Separator::HORIZONTAL); 16868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scroll_container->AddChildView(separator); 16968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 17068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Unattached locations section. 17168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) views::Label* unattached_text = new views::Label( 17268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) controller_->GetUnattachedLocationsHeader()); 17368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) unattached_text->SetMultiLine(true); 17468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) unattached_text->SetHorizontalAlignment(gfx::ALIGN_LEFT); 17568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) unattached_text->set_border(views::Border::CreateEmptyBorder( 17668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) views::kRelatedControlVerticalSpacing, 17768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) views::kPanelHorizMargin, 17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) views::kRelatedControlVerticalSpacing, 17968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 0)); 18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scroll_container->AddChildView(unattached_text); 18168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 18268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Add unattached galleries checkboxes. 18368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) for (GalleryPermissionsVector::const_iterator iter = 18468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) unattached_permissions.begin(); 18568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) iter != unattached_permissions.end(); ++iter) { 18668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AddOrUpdateGallery(iter->pref_info, iter->allowed, scroll_container, 0); 18768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) confirm_available_ = controller_->HasPermittedGalleries(); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add the scrollable area to the outer dialog view. It will squeeze against 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the title/subtitle and buttons to occupy all available space in the dialog. 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::ScrollView* scroll_view = 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::ScrollView::CreateScrollViewWithBorder(); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_view->SetContents(scroll_container); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout->StartRowWithPadding(1, column_set_id, 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, views::kRelatedControlVerticalSpacing); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout->AddView(scroll_view, 1, 1, 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::GridLayout::FILL, views::GridLayout::FILL, 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dialog_content_width, kScrollAreaHeight); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MediaGalleriesDialogViews::UpdateGallery( 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const MediaGalleryPrefInfo& gallery, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool permitted) { 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InitChildViews(); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents_->Layout(); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MediaGalleriesDialogViews::ForgetGallery(MediaGalleryPrefId gallery) { 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InitChildViews(); 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents_->Layout(); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MediaGalleriesDialogViews::AddOrUpdateGallery( 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const MediaGalleryPrefInfo& gallery, 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool permitted, 2195e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) views::View* container, 2205e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) int trailing_vertical_space) { 221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch string16 label = gallery.GetGalleryDisplayName(); 222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch string16 tooltip_text = gallery.GetGalleryTooltip(); 223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch string16 details = gallery.GetGalleryAdditionalDetails(); 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckboxMap::iterator iter = checkbox_map_.find(gallery.pref_id); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter != checkbox_map_.end()) { 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Checkbox* checkbox = iter->second; 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkbox->SetChecked(permitted); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkbox->SetText(label); 23068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) checkbox->SetElideBehavior(views::Label::ELIDE_IN_MIDDLE); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkbox->SetTooltipText(tooltip_text); 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Replace the details string. 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* checkbox_view = checkbox->parent(); 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(2, checkbox_view->child_count()); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Label* secondary_text = 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<views::Label*>(checkbox_view->child_at(1)); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) secondary_text->SetText(details); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Why is this returning false? Looks like that will mean it doesn't paint. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Checkbox* checkbox = new views::Checkbox(label); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkbox->set_listener(this); 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkbox->SetTooltipText(tooltip_text); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Label* secondary_text = new views::Label(details); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) secondary_text->SetTooltipText(tooltip_text); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) secondary_text->SetEnabledColor(kDeemphasizedTextColor); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) secondary_text->SetTooltipText(tooltip_text); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) secondary_text->set_border(views::Border::CreateEmptyBorder( 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::kRelatedControlSmallHorizontalSpacing, 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::kRelatedControlSmallHorizontalSpacing)); 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* checkbox_view = new views::View(); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkbox_view->set_border(views::Border::CreateEmptyBorder( 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::kPanelHorizMargin, 2605e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) trailing_vertical_space, 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0)); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkbox_view->SetLayoutManager( 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkbox_view->AddChildView(checkbox); 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkbox_view->AddChildView(secondary_text); 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container->AddChildView(checkbox_view); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkbox->SetChecked(permitted); 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) checkbox_map_[gallery.pref_id] = checkbox; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 MediaGalleriesDialogViews::GetWindowTitle() const { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return controller_->GetHeader(); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MediaGalleriesDialogViews::ShouldShowWindowTitle() const { 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return DialogDelegate::UseNewStyle(); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MediaGalleriesDialogViews::DeleteDelegate() { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller_->DialogFinished(accepted_); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::Widget* MediaGalleriesDialogViews::GetWidget() { 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_->GetWidget(); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const views::Widget* MediaGalleriesDialogViews::GetWidget() const { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_->GetWidget(); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* MediaGalleriesDialogViews::GetContentsView() { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 MediaGalleriesDialogViews::GetDialogButtonLabel( 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::DialogButton button) const { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(button == ui::DIALOG_BUTTON_OK ? 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_MEDIA_GALLERIES_DIALOG_CONFIRM : 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_MEDIA_GALLERIES_DIALOG_CANCEL); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MediaGalleriesDialogViews::IsDialogButtonEnabled( 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::DialogButton button) const { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return button != ui::DIALOG_BUTTON_OK || confirm_available_; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::ModalType MediaGalleriesDialogViews::GetModalType() const { 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_ASH) 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ui::MODAL_TYPE_CHILD; 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return views::WidgetDelegate::GetModalType(); 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 319eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochviews::View* MediaGalleriesDialogViews::CreateExtraView() { 320eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(!add_gallery_button_); 321eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch add_gallery_button_ = new views::LabelButton(this, 322eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY)); 323eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch add_gallery_button_->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); 324eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return add_gallery_button_; 325eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 326eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MediaGalleriesDialogViews::Cancel() { 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MediaGalleriesDialogViews::Accept() { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accepted_ = true; 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(wittman): Remove this override once we move to the new style frame view 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// on all dialogs. 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::NonClientFrameView* MediaGalleriesDialogViews::CreateNonClientFrameView( 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* widget) { 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateConstrainedStyleNonClientFrameView( 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget, 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller_->web_contents()->GetBrowserContext()); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MediaGalleriesDialogViews::ButtonPressed(views::Button* sender, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Event& event) { 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) confirm_available_ = true; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->client_view()->AsDialogClientView()->UpdateDialogButtons(); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (sender == add_gallery_button_) { 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller_->OnAddFolderClicked(); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (CheckboxMap::const_iterator iter = checkbox_map_.begin(); 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter != checkbox_map_.end(); ++iter) { 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (sender == iter->second) { 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) controller_->DidToggleGalleryId(iter->first, 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter->second->checked()); 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MediaGalleriesDialogViewsController ----------------------------------------- 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MediaGalleriesDialog* MediaGalleriesDialog::Create( 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesDialogController* controller) { 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new MediaGalleriesDialogViews(controller); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 373