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" 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/ui/views/constrained_window_views.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/ui/views/extensions/media_gallery_checkbox_view.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/grit/generated_resources.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/grit/locale_settings.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/web_modal/popup_manager.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/native_theme/native_theme.h" 16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/views/border.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/checkbox.h" 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/views/controls/button/image_button.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/button/label_button.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h" 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/views/controls/menu/menu_runner.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/scroll_view.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/separator.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/box_layout.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/layout_constants.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/window/dialog_client_view.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kScrollAreaHeight = 192; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This container has the right Layout() impl to use within a ScrollView. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScrollableView : public views::View { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScrollableView() {} 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ScrollableView() {} 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Layout() OVERRIDE; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScrollableView); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ScrollableView::Layout() { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size pref = GetPreferredSize(); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int width = pref.width(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int height = pref.height(); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (parent()) { 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) width = parent()->width(); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) height = std::max(parent()->height(), height); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetBounds(x(), y(), width, height); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View::Layout(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MediaGalleriesDialogViews::MediaGalleriesDialogViews( 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesDialogController* controller) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : controller_(controller), 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents_(new views::View()), 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) auxiliary_button_(NULL), 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) confirm_available_(false), 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) accepted_(false) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitChildViews(); 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (ControllerHasWebContents()) 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ShowWebModalDialogViews(this, controller->WebContents()); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MediaGalleriesDialogViews::~MediaGalleriesDialogViews() { 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!ControllerHasWebContents()) 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) delete contents_; 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void MediaGalleriesDialogViews::AcceptDialogForTesting() { 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) accepted_ = true; 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_modal::PopupManager* popup_manager = 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_modal::PopupManager::FromWebContents(controller_->WebContents()); 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(popup_manager); 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch popup_manager->CloseAllDialogsForTesting(controller_->WebContents()); 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MediaGalleriesDialogViews::InitChildViews() { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Outer dialog layout. 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents_->RemoveAllChildViews(true); 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) checkbox_map_.clear(); 9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int dialog_content_width = views::Widget::GetLocalizedContentsWidth( 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_MEDIA_GALLERIES_DIALOG_CONTENT_WIDTH_CHARS); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) views::GridLayout* layout = views::GridLayout::CreatePanel(contents_); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) contents_->SetLayoutManager(layout); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int column_set_id = 0; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ColumnSet* columns = layout->AddColumnSet(column_set_id); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) columns->AddColumn(views::GridLayout::LEADING, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::GridLayout::LEADING, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::GridLayout::FIXED, 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dialog_content_width, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message text. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* subtext = new views::Label(controller_->GetSubtext()); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subtext->SetMultiLine(true); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subtext->SetHorizontalAlignment(gfx::ALIGN_LEFT); 1115e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) layout->StartRow(0, column_set_id); 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) layout->AddView( 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) subtext, 1, 1, 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) views::GridLayout::FILL, views::GridLayout::LEADING, 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) dialog_content_width, subtext->GetHeightForWidth(dialog_content_width)); 1165e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Scrollable area for checkboxes. 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScrollableView* scroll_container = new ScrollableView(); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_container->SetLayoutManager(new views::BoxLayout( 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::BoxLayout::kVertical, 0, 0, 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::kRelatedControlSmallVerticalSpacing)); 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scroll_container->SetBorder( 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) views::Border::CreateEmptyBorder(views::kRelatedControlVerticalSpacing, 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0, 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) views::kRelatedControlVerticalSpacing, 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0)); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::vector<base::string16> section_headers = 13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller_->GetSectionHeaders(); 13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (size_t i = 0; i < section_headers.size(); i++) { 13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesDialogController::Entries entries = 13346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller_->GetSectionEntries(i); 13446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Header and separator line. 13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!section_headers[i].empty() && !entries.empty()) { 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) views::Separator* separator = new views::Separator( 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) views::Separator::HORIZONTAL); 13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scroll_container->AddChildView(separator); 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) views::Label* header = new views::Label(section_headers[i]); 14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) header->SetMultiLine(true); 14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) header->SetHorizontalAlignment(gfx::ALIGN_LEFT); 14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) header->SetBorder(views::Border::CreateEmptyBorder( 14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) views::kRelatedControlVerticalSpacing, 14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) views::kPanelHorizMargin, 14746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) views::kRelatedControlVerticalSpacing, 14846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 0)); 14946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scroll_container->AddChildView(header); 15046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Checkboxes. 15346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleriesDialogController::Entries::const_iterator iter; 15446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (iter = entries.begin(); iter != entries.end(); ++iter) { 15546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int spacing = 0; 15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (iter + 1 == entries.end()) 15746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) spacing = views::kRelatedControlSmallVerticalSpacing; 15846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AddOrUpdateGallery(*iter, scroll_container, spacing); 15968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch confirm_available_ = controller_->IsAcceptAllowed(); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add the scrollable area to the outer dialog view. It will squeeze against 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the title/subtitle and buttons to occupy all available space in the dialog. 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::ScrollView* scroll_view = 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::ScrollView::CreateScrollViewWithBorder(); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_view->SetContents(scroll_container); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout->StartRowWithPadding(1, column_set_id, 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, views::kRelatedControlVerticalSpacing); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layout->AddView(scroll_view, 1, 1, 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::GridLayout::FILL, views::GridLayout::FILL, 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dialog_content_width, kScrollAreaHeight); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void MediaGalleriesDialogViews::UpdateGalleries() { 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InitChildViews(); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents_->Layout(); 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (ControllerHasWebContents()) 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetWidget()->client_view()->AsDialogClientView()->UpdateDialogButtons(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MediaGalleriesDialogViews::AddOrUpdateGallery( 18546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const MediaGalleriesDialogController::Entry& gallery, 1865e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) views::View* container, 1875e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) int trailing_vertical_space) { 18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool show_folder_viewer = controller_->ShouldShowFolderViewer(gallery); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CheckboxMap::iterator iter = checkbox_map_.find(gallery.pref_info.pref_id); 1910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (iter != checkbox_map_.end()) { 192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::Checkbox* checkbox = iter->second->checkbox(); 19346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) checkbox->SetChecked(gallery.selected); 194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) checkbox->SetText(gallery.pref_info.GetGalleryDisplayName()); 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) checkbox->SetTooltipText(gallery.pref_info.GetGalleryTooltip()); 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::string16 details = gallery.pref_info.GetGalleryAdditionalDetails(); 197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) iter->second->secondary_text()->SetText(details); 198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) iter->second->secondary_text()->SetVisible(details.length() > 0); 19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) iter->second->folder_viewer_button()->SetVisible(show_folder_viewer); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 203a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MediaGalleryCheckboxView* gallery_view = 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) new MediaGalleryCheckboxView(gallery.pref_info, show_folder_viewer, 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) trailing_vertical_space, this, this); 20646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gallery_view->checkbox()->SetChecked(gallery.selected); 207a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) container->AddChildView(gallery_view); 20846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) checkbox_map_[gallery.pref_info.pref_id] = gallery_view; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 MediaGalleriesDialogViews::GetWindowTitle() const { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return controller_->GetHeader(); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MediaGalleriesDialogViews::DeleteDelegate() { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller_->DialogFinished(accepted_); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::Widget* MediaGalleriesDialogViews::GetWidget() { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_->GetWidget(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const views::Widget* MediaGalleriesDialogViews::GetWidget() const { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_->GetWidget(); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* MediaGalleriesDialogViews::GetContentsView() { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 MediaGalleriesDialogViews::GetDialogButtonLabel( 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::DialogButton button) const { 23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (button == ui::DIALOG_BUTTON_OK) 23646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return controller_->GetAcceptButtonText(); 23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_DIALOG_CANCEL); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MediaGalleriesDialogViews::IsDialogButtonEnabled( 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::DialogButton button) const { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return button != ui::DIALOG_BUTTON_OK || confirm_available_; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::ModalType MediaGalleriesDialogViews::GetModalType() const { 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ui::MODAL_TYPE_CHILD; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochviews::View* MediaGalleriesDialogViews::CreateExtraView() { 25046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(!auxiliary_button_); 25146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::string16 button_label = controller_->GetAuxiliaryButtonText(); 25246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!button_label.empty()) { 25346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) auxiliary_button_ = new views::LabelButton(this, button_label); 25446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) auxiliary_button_->SetStyle(views::Button::STYLE_BUTTON); 25546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 25646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return auxiliary_button_; 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MediaGalleriesDialogViews::Cancel() { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MediaGalleriesDialogViews::Accept() { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accepted_ = true; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MediaGalleriesDialogViews::ButtonPressed(views::Button* sender, 269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ui::Event& /* event */) { 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) confirm_available_ = true; 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 272a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (ControllerHasWebContents()) 273a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetWidget()->client_view()->AsDialogClientView()->UpdateDialogButtons(); 274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 27546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (sender == auxiliary_button_) { 27646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller_->DidClickAuxiliaryButton(); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (CheckboxMap::const_iterator iter = checkbox_map_.begin(); 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter != checkbox_map_.end(); ++iter) { 282a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (sender == iter->second->checkbox()) { 28346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller_->DidToggleEntry(iter->first, 28446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) iter->second->checkbox()->checked()); 28546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return; 28646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 28746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (sender == iter->second->folder_viewer_button()) { 28846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) controller_->DidClickOpenFolderViewer(iter->first); 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void MediaGalleriesDialogViews::ShowContextMenuForView( 2951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) views::View* source, 2961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const gfx::Point& point, 2971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ui::MenuSourceType source_type) { 2981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (CheckboxMap::const_iterator iter = checkbox_map_.begin(); 2991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) iter != checkbox_map_.end(); ++iter) { 300a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (iter->second->Contains(source)) { 3011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ShowContextMenu(point, source_type, iter->first); 3021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 3031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 3041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 3051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 3061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void MediaGalleriesDialogViews::ShowContextMenu(const gfx::Point& point, 3081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ui::MenuSourceType source_type, 30946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaGalleryPrefId id) { 3101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) context_menu_runner_.reset(new views::MenuRunner( 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch controller_->GetContextMenu(id), 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU)); 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (context_menu_runner_->RunMenuAt(GetWidget(), 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NULL, 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::Rect(point.x(), point.y(), 0, 0), 317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch views::MENU_ANCHOR_TOPLEFT, 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch source_type) == 3191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) views::MenuRunner::MENU_DELETED) { 3201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 3211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 324a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool MediaGalleriesDialogViews::ControllerHasWebContents() const { 32546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return controller_->WebContents() != NULL; 326a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 327a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MediaGalleriesDialogViewsController ----------------------------------------- 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MediaGalleriesDialog* MediaGalleriesDialog::Create( 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MediaGalleriesDialogController* controller) { 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new MediaGalleriesDialogViews(controller); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335