media_galleries_dialog_views.cc revision 0529e5d033099cbfc42635f6f6183833b09dff6e
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Use of this source code is governed by a BSD-style license that can be 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// found in the LICENSE file. 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#include "chrome/browser/ui/views/extensions/media_galleries_dialog_views.h" 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "base/strings/utf_string_conversions.h" 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/browser/ui/views/extensions/media_gallery_checkbox_view.h" 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "components/web_modal/web_contents_modal_dialog_host.h" 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "components/web_modal/web_contents_modal_dialog_manager.h" 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "content/public/browser/web_contents.h" 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "grit/generated_resources.h" 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "grit/locale_settings.h" 155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ui/base/l10n/l10n_util.h" 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ui/native_theme/native_theme.h" 1794deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson#include "ui/views/border.h" 185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ui/views/controls/button/checkbox.h" 195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ui/views/controls/button/label_button.h" 205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ui/views/controls/label.h" 21525a05093a4816af961fe2bc6b8a81c17e2e26c2Chris Lattner#include "ui/views/controls/menu/menu_runner.h" 223b8d116703db8018f855cbb4733ace426422623bNate Begeman#include "ui/views/controls/scroll_view.h" 23b648023da23e8b227cdda57a241db4c6f368726bDaniel Dunbar#include "ui/views/controls/separator.h" 24c5ae899b4bbf65488445316c63168079177db0edSteve Naroff#include "ui/views/layout/box_layout.h" 255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ui/views/layout/grid_layout.h" 265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ui/views/layout/layout_constants.h" 27590b6646ef747d2f7b42e5f40487ff07642d7b6fChris Lattner#include "ui/views/view.h" 28c44eec6dd29ee9415cbd38a35deff4c8b67abb6aAnders Carlsson#include "ui/views/widget/widget.h" 29c4a1dea2dc56bd1357ec91b829a0b9e68229a13eDaniel Dunbar#include "ui/views/window/dialog_client_view.h" 30c4a1dea2dc56bd1357ec91b829a0b9e68229a13eDaniel Dunbar 31c4a1dea2dc56bd1357ec91b829a0b9e68229a13eDaniel Dunbarusing web_modal::WebContentsModalDialogManager; 328e9bebdea69c590dedfbf27374114cb76fe12fbdDouglas Gregorusing web_modal::WebContentsModalDialogManagerDelegate; 33c4a1dea2dc56bd1357ec91b829a0b9e68229a13eDaniel Dunbar 3456ee6896f2efebffb4a2cce5a7610cdf1eddbbbeSteve Naroffnamespace { 3588a3514f36de96b19cdf50141c640df1a5f13f6cDouglas Gregor 3688a3514f36de96b19cdf50141c640df1a5f13f6cDouglas Gregorconst int kScrollAreaHeight = 192; 3788a3514f36de96b19cdf50141c640df1a5f13f6cDouglas Gregor 385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// This container has the right Layout() impl to use within a ScrollView. 395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass ScrollableView : public views::View { 405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer public: 415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ScrollableView() {} 425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual ~ScrollableView() {} 435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 44898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor virtual void Layout() OVERRIDE; 459ea62768fca25d829d80199cf4f8cf0f4dd39251Douglas Gregor 461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump private: 47898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor DISALLOW_COPY_AND_ASSIGN(ScrollableView); 48898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor}; 49898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpvoid ScrollableView::Layout() { 51898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor gfx::Size pref = GetPreferredSize(); 52898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor int width = pref.width(); 53898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor int height = pref.height(); 54898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor if (parent()) { 55898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor width = parent()->width(); 56898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor height = std::max(parent()->height(), height); 571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 58b3eef68111ffc220e449be96da1747998c057790Douglas Gregor SetBounds(x(), y(), width, height); 591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 6083233a4b7c2bc7b531ffa3b33fdd1cd8138373b6Douglas Gregor views::View::Layout(); 61898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor} 62898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 63b3eef68111ffc220e449be96da1747998c057790Douglas Gregor} // namespace 64898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 65898574e7496ba8fd76290079d3a9d06954992734Douglas Gregortypedef MediaGalleriesDialogController::GalleryPermissionsVector 66898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor GalleryPermissionsVector; 670b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor 680b7489194f9f89fac39d57211c1e7953ae50251fDouglas GregorMediaGalleriesDialogViews::MediaGalleriesDialogViews( 690b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor MediaGalleriesDialogController* controller) 701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump : controller_(controller), 7143d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor window_(NULL), 7243d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor contents_(new views::View()), 7343d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor add_gallery_button_(NULL), 7443d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor confirm_available_(false), 7543d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor accepted_(false) { 7643d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor InitChildViews(); 7743d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor 7843d9d9243329b1b75d1a6efdad9f16d6fb386b8eDouglas Gregor if (ControllerHasWebContents()) { 791eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Ownership of |contents_| is handed off by this call. |window_| will take 80f7c2aa0b049272d8f318988c1965760dcb852578Douglas Gregor // care of deleting itself after calling DeleteDelegate(). 811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump WebContentsModalDialogManager* web_contents_modal_dialog_manager = 829d293dfc0ad7c44ae0b5eb9517f1ed8c8d8b7ff7Douglas Gregor WebContentsModalDialogManager::FromWebContents( 839d293dfc0ad7c44ae0b5eb9517f1ed8c8d8b7ff7Douglas Gregor controller->web_contents()); 849d293dfc0ad7c44ae0b5eb9517f1ed8c8d8b7ff7Douglas Gregor DCHECK(web_contents_modal_dialog_manager); 859d293dfc0ad7c44ae0b5eb9517f1ed8c8d8b7ff7Douglas Gregor WebContentsModalDialogManagerDelegate* modal_delegate = 869d293dfc0ad7c44ae0b5eb9517f1ed8c8d8b7ff7Douglas Gregor web_contents_modal_dialog_manager->delegate(); 879d293dfc0ad7c44ae0b5eb9517f1ed8c8d8b7ff7Douglas Gregor DCHECK(modal_delegate); 889d293dfc0ad7c44ae0b5eb9517f1ed8c8d8b7ff7Douglas Gregor window_ = views::Widget::CreateWindowAsFramelessChild( 891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump this, modal_delegate->GetWebContentsModalDialogHost()->GetHostView()); 908320aaaa01d931aa234fc3bce05b399ef41898d5Daniel Dunbar web_contents_modal_dialog_manager->ShowModalDialog( 91f7c2aa0b049272d8f318988c1965760dcb852578Douglas Gregor window_->GetNativeView()); 921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 939d293dfc0ad7c44ae0b5eb9517f1ed8c8d8b7ff7Douglas Gregor} 9477ed8e4edf6ed78c53fb20ec3210aff2a59c9d87Ted Kremenek 95898574e7496ba8fd76290079d3a9d06954992734Douglas GregorMediaGalleriesDialogViews::~MediaGalleriesDialogViews() { 96898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor if (!ControllerHasWebContents()) 97898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor delete contents_; 981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump} 99898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 100898574e7496ba8fd76290079d3a9d06954992734Douglas Gregorvoid MediaGalleriesDialogViews::InitChildViews() { 101898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor // Outer dialog layout. 102898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor contents_->RemoveAllChildViews(true); 103898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor int dialog_content_width = views::Widget::GetLocalizedContentsWidth( 1040b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor IDS_MEDIA_GALLERIES_DIALOG_CONTENT_WIDTH_CHARS); 1050b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor views::GridLayout* layout = views::GridLayout::CreatePanel(contents_); 1060b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor contents_->SetLayoutManager(layout); 107898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 108898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor int column_set_id = 0; 109898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor views::ColumnSet* columns = layout->AddColumnSet(column_set_id); 110898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor columns->AddColumn(views::GridLayout::LEADING, 111898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor views::GridLayout::LEADING, 112898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 1, 1131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump views::GridLayout::FIXED, 114898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor dialog_content_width, 115898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 0); 116898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor 117898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor // Message text. 118898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor views::Label* subtext = new views::Label(controller_->GetSubtext()); 119898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor subtext->SetMultiLine(true); 1200b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor subtext->SetHorizontalAlignment(gfx::ALIGN_LEFT); 1210b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor layout->StartRow(0, column_set_id); 1220b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor layout->AddView( 1235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer subtext, 1, 1, 1245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer views::GridLayout::FILL, views::GridLayout::LEADING, 1255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer dialog_content_width, subtext->GetHeightForWidth(dialog_content_width)); 1265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 1275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Scrollable area for checkboxes. 1295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ScrollableView* scroll_container = new ScrollableView(); 1305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer scroll_container->SetLayoutManager(new views::BoxLayout( 1311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump views::BoxLayout::kVertical, 0, 0, 132026dc96ac6ece60da5e1b98e2a71bd0ff0939fd8Chris Lattner views::kRelatedControlSmallVerticalSpacing)); 133026dc96ac6ece60da5e1b98e2a71bd0ff0939fd8Chris Lattner scroll_container->SetBorder( 134026dc96ac6ece60da5e1b98e2a71bd0ff0939fd8Chris Lattner views::Border::CreateEmptyBorder(views::kRelatedControlVerticalSpacing, 135026dc96ac6ece60da5e1b98e2a71bd0ff0939fd8Chris Lattner 0, 136026dc96ac6ece60da5e1b98e2a71bd0ff0939fd8Chris Lattner views::kRelatedControlVerticalSpacing, 13740b598eea1310ec9ed554d56ce3e25b34c585458Argyrios Kyrtzidis 0)); 1381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Add attached galleries checkboxes. 1405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer checkbox_map_.clear(); 1415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GalleryPermissionsVector permissions = controller_->AttachedPermissions(); 1425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer for (GalleryPermissionsVector::const_iterator iter = permissions.begin(); 1435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer iter != permissions.end(); ++iter) { 1445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer int spacing = 0; 1455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (iter + 1 == permissions.end()) 1465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer spacing = views::kRelatedControlSmallVerticalSpacing; 1475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer AddOrUpdateGallery(*iter, scroll_container, spacing); 14808ad47cbd1f81fcb31dbc731c13b885a07e12704Bill Wendling } 14976458501a8963fa11b91c9337a487de6871169b4Sebastian Redl 1505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GalleryPermissionsVector unattached_permissions = 1515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer controller_->UnattachedPermissions(); 1525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (!unattached_permissions.empty()) { 1545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Separator line. 155fec0b49c3fa621fbf63e420f3d54a5bb3a0265d2Steve Naroff views::Separator* separator = new views::Separator( 15686f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor views::Separator::HORIZONTAL); 15786f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor scroll_container->AddChildView(separator); 1585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 15928be73f74c9e241a23ea24fe5756623de6bf1084Chris Lattner // Unattached locations section. 16053202857c60214d80950a975e6e52aebf30bd16aEli Friedman views::Label* unattached_text = new views::Label( 16153202857c60214d80950a975e6e52aebf30bd16aEli Friedman controller_->GetUnattachedLocationsHeader()); 16253202857c60214d80950a975e6e52aebf30bd16aEli Friedman unattached_text->SetMultiLine(true); 1631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump unattached_text->SetHorizontalAlignment(gfx::ALIGN_LEFT); 1645f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unattached_text->SetBorder( 1655f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer views::Border::CreateEmptyBorder(views::kRelatedControlVerticalSpacing, 1661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump views::kPanelHorizMargin, 1675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer views::kRelatedControlVerticalSpacing, 1685f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 0)); 16944e35f7b2b5da1eb338639e46bf0b5522e75c5f3Daniel Dunbar scroll_container->AddChildView(unattached_text); 17044e35f7b2b5da1eb338639e46bf0b5522e75c5f3Daniel Dunbar 17144e35f7b2b5da1eb338639e46bf0b5522e75c5f3Daniel Dunbar // Add unattached galleries checkboxes. 17244e35f7b2b5da1eb338639e46bf0b5522e75c5f3Daniel Dunbar for (GalleryPermissionsVector::const_iterator iter = 1735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unattached_permissions.begin(); 1745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer iter != unattached_permissions.end(); ++iter) { 1755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer AddOrUpdateGallery(*iter, scroll_container, 0); 1765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 177fec0b49c3fa621fbf63e420f3d54a5bb3a0265d2Steve Naroff } 1785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 179ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattner confirm_available_ = controller_->IsAcceptAllowed(); 1805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Add the scrollable area to the outer dialog view. It will squeeze against 1824f6a7d7ead09b439216c32f2de806a998aeb222aSteve Naroff // the title/subtitle and buttons to occupy all available space in the dialog. 1835daf570d0ce027e18ed5f9d66e6b2a14a40b720dFariborz Jahanian views::ScrollView* scroll_view = 184ba8d2d684e74a20bef03828c21c991d222c7e9e5Fariborz Jahanian views::ScrollView::CreateScrollViewWithBorder(); 18586f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor scroll_view->SetContents(scroll_container); 18686f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor layout->StartRowWithPadding(1, column_set_id, 1875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 0, views::kRelatedControlVerticalSpacing); 18844e35f7b2b5da1eb338639e46bf0b5522e75c5f3Daniel Dunbar layout->AddView(scroll_view, 1, 1, 18944e35f7b2b5da1eb338639e46bf0b5522e75c5f3Daniel Dunbar views::GridLayout::FILL, views::GridLayout::FILL, 1901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump dialog_content_width, kScrollAreaHeight); 19133bbbc5ec8269bc2cde5b84f970fa49319a30267Douglas Gregor} 19233bbbc5ec8269bc2cde5b84f970fa49319a30267Douglas Gregor 19333bbbc5ec8269bc2cde5b84f970fa49319a30267Douglas Gregorvoid MediaGalleriesDialogViews::UpdateGalleries() { 1945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer InitChildViews(); 19538d068e8f13a119b89a3b8b0f79f35cab1ffd09aAnders Carlsson contents_->Layout(); 19638d068e8f13a119b89a3b8b0f79f35cab1ffd09aAnders Carlsson} 19738d068e8f13a119b89a3b8b0f79f35cab1ffd09aAnders Carlsson 1981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpbool MediaGalleriesDialogViews::AddOrUpdateGallery( 1995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const MediaGalleriesDialogController::GalleryPermission& gallery, 2005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer views::View* container, 2015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer int trailing_vertical_space) { 2025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer base::string16 label = gallery.pref_info.GetGalleryDisplayName(); 203590b6646ef747d2f7b42e5f40487ff07642d7b6fChris Lattner base::string16 tooltip_text = gallery.pref_info.GetGalleryTooltip(); 204590b6646ef747d2f7b42e5f40487ff07642d7b6fChris Lattner base::string16 details = gallery.pref_info.GetGalleryAdditionalDetails(); 2055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 206590b6646ef747d2f7b42e5f40487ff07642d7b6fChris Lattner CheckboxMap::iterator iter = checkbox_map_.find(gallery.gallery_id); 2078070a8497c0fb3e6f70a557f788405d8945b1208Daniel Dunbar if (iter != checkbox_map_.end()) { 208590b6646ef747d2f7b42e5f40487ff07642d7b6fChris Lattner views::Checkbox* checkbox = iter->second->checkbox(); 2095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer checkbox->SetChecked(gallery.allowed); 210c9e8f606787b0bc0c3b08e566b87cc1751694168Eli Friedman checkbox->SetText(label); 211c9e8f606787b0bc0c3b08e566b87cc1751694168Eli Friedman checkbox->SetTooltipText(tooltip_text); 212c9e8f606787b0bc0c3b08e566b87cc1751694168Eli Friedman iter->second->secondary_text()->SetText(details); 2131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump iter->second->secondary_text()->SetVisible(details.length() > 0); 21494deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson return false; 21594deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson } 2162d6744ff04c1690a1485178d550d2fab84a0270bDaniel Dunbar 21794deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson MediaGalleryCheckboxView* gallery_view = 2181eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump new MediaGalleryCheckboxView(label, tooltip_text, details, false, 21994deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson trailing_vertical_space, this, this); 22094deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson gallery_view->checkbox()->SetChecked(gallery.allowed); 22194deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson container->AddChildView(gallery_view); 2221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump checkbox_map_[gallery.gallery_id] = gallery_view; 22394deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson 22494deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson return true; 22594deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson} 22694deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson 22794deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlssonbase::string16 MediaGalleriesDialogViews::GetWindowTitle() const { 22894deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson return controller_->GetHeader(); 22994deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson} 23094deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson 23194deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlssonvoid MediaGalleriesDialogViews::DeleteDelegate() { 23294deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson controller_->DialogFinished(accepted_); 23394deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson} 2341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 23594deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlssonviews::Widget* MediaGalleriesDialogViews::GetWidget() { 23694deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson return contents_->GetWidget(); 23794deaf675ae60e11c2d9475c6dbfd0c7123160f5Anders Carlsson} 2386ee7aa154e8bbb21a21254293410b944f78b0bfeChris Lattner 239019f4e858e78587f2241ff1a76c747d7bcd7578cChris Lattnerconst views::Widget* MediaGalleriesDialogViews::GetWidget() const { 240019f4e858e78587f2241ff1a76c747d7bcd7578cChris Lattner return contents_->GetWidget(); 241019f4e858e78587f2241ff1a76c747d7bcd7578cChris Lattner} 2425b45d4ef1ea3f04ec863daf8aa29be6c6e021750Anders Carlsson 2435b45d4ef1ea3f04ec863daf8aa29be6c6e021750Anders Carlssonviews::View* MediaGalleriesDialogViews::GetContentsView() { 2446ee7aa154e8bbb21a21254293410b944f78b0bfeChris Lattner return contents_; 24545b6b9d080ac56917337d73d8f1cd6374b27b05dChris Lattner} 24645b6b9d080ac56917337d73d8f1cd6374b27b05dChris Lattner 247c44eec6dd29ee9415cbd38a35deff4c8b67abb6aAnders Carlssonbase::string16 MediaGalleriesDialogViews::GetDialogButtonLabel( 24851fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson ui::DialogButton button) const { 24951fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson return l10n_util::GetStringUTF16(button == ui::DIALOG_BUTTON_OK ? 25051fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson IDS_MEDIA_GALLERIES_DIALOG_CONFIRM : 25151fe996231b1d7199f76e4005ff4c943d5deeecdAnders Carlsson IDS_MEDIA_GALLERIES_DIALOG_CANCEL); 252b2f295c8050fb8c141bf2cf38eed0a56e99d0092Eli Friedman} 253b2f295c8050fb8c141bf2cf38eed0a56e99d0092Eli Friedman 2541b78276a75a5a0f496a82429c1ff9604d622a76dAnders Carlssonbool MediaGalleriesDialogViews::IsDialogButtonEnabled( 2551b78276a75a5a0f496a82429c1ff9604d622a76dAnders Carlsson ui::DialogButton button) const { 256b2f295c8050fb8c141bf2cf38eed0a56e99d0092Eli Friedman return button != ui::DIALOG_BUTTON_OK || confirm_available_; 257b2f295c8050fb8c141bf2cf38eed0a56e99d0092Eli Friedman} 258b2f295c8050fb8c141bf2cf38eed0a56e99d0092Eli Friedman 259b2f295c8050fb8c141bf2cf38eed0a56e99d0092Eli Friedmanui::ModalType MediaGalleriesDialogViews::GetModalType() const { 260ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor#if defined(USE_ASH) 261ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor return ui::MODAL_TYPE_CHILD; 262ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor#else 263ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor return views::WidgetDelegate::GetModalType(); 264ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor#endif 265ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor} 266ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor 267ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregorviews::View* MediaGalleriesDialogViews::CreateExtraView() { 268ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor DCHECK(!add_gallery_button_); 269ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor add_gallery_button_ = new views::LabelButton(this, 270ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY)); 271ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor add_gallery_button_->SetStyle(views::Button::STYLE_BUTTON); 272ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor return add_gallery_button_; 273ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor} 274ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor 275efa9b3877ef298bcb792600ac33521827e1f7fafAnders Carlssonbool MediaGalleriesDialogViews::Cancel() { 276efa9b3877ef298bcb792600ac33521827e1f7fafAnders Carlsson return true; 277efa9b3877ef298bcb792600ac33521827e1f7fafAnders Carlsson} 278ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregor 279ce94049b69f75b44c18584fe79cd238978b6b0d5Douglas Gregorbool MediaGalleriesDialogViews::Accept() { 280efa9b3877ef298bcb792600ac33521827e1f7fafAnders Carlsson accepted_ = true; 28144baa8abba2a1552b6b50bf750a8750ab9da9f76Fariborz Jahanian 2821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return true; 283102e390bcb5a1fb1a8fdbc8505e6dfd905374bbdFariborz Jahanian} 2841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 2854e99a5fc3b203397a91136c6e695e405fb8fc606Ted Kremenekvoid MediaGalleriesDialogViews::ButtonPressed(views::Button* sender, 2861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ui::Event& /* event */) { 2874e99a5fc3b203397a91136c6e695e405fb8fc606Ted Kremenek confirm_available_ = true; 2884e99a5fc3b203397a91136c6e695e405fb8fc606Ted Kremenek 2894e99a5fc3b203397a91136c6e695e405fb8fc606Ted Kremenek if (ControllerHasWebContents()) 29056f349400c5932a196509c0480ff6f99a9a0b48fChris Lattner GetWidget()->client_view()->AsDialogClientView()->UpdateDialogButtons(); 29156f349400c5932a196509c0480ff6f99a9a0b48fChris Lattner 29227c8dc06f65d7abcf6a7e7f64a7960c9a150ca01Douglas Gregor if (sender == add_gallery_button_) { 29356f349400c5932a196509c0480ff6f99a9a0b48fChris Lattner controller_->OnAddFolderClicked(); 2941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return; 295ecdd84147c0765caa999ddc22dde25b42712bb4dChris Lattner } 296ecdd84147c0765caa999ddc22dde25b42712bb4dChris Lattner 297ecdd84147c0765caa999ddc22dde25b42712bb4dChris Lattner for (CheckboxMap::const_iterator iter = checkbox_map_.begin(); 298ecdd84147c0765caa999ddc22dde25b42712bb4dChris Lattner iter != checkbox_map_.end(); ++iter) { 2991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump if (sender == iter->second->checkbox()) { 3004e99a5fc3b203397a91136c6e695e405fb8fc606Ted Kremenek controller_->DidToggleGallery(iter->first, 3014e99a5fc3b203397a91136c6e695e405fb8fc606Ted Kremenek iter->second->checkbox()->checked()); 3024e99a5fc3b203397a91136c6e695e405fb8fc606Ted Kremenek return; 30356f349400c5932a196509c0480ff6f99a9a0b48fChris Lattner } 30456f349400c5932a196509c0480ff6f99a9a0b48fChris Lattner } 30556f349400c5932a196509c0480ff6f99a9a0b48fChris Lattner} 306ecdd84147c0765caa999ddc22dde25b42712bb4dChris Lattner 307ecdd84147c0765caa999ddc22dde25b42712bb4dChris Lattnervoid MediaGalleriesDialogViews::ShowContextMenuForView( 308ecdd84147c0765caa999ddc22dde25b42712bb4dChris Lattner views::View* source, 3091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const gfx::Point& point, 310898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor ui::MenuSourceType source_type) { 311898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor for (CheckboxMap::const_iterator iter = checkbox_map_.begin(); 312898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor iter != checkbox_map_.end(); ++iter) { 3131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump if (iter->second->Contains(source)) { 3145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ShowContextMenu(point, source_type, iter->first); 3151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return; 3165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 3175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 3185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} 3195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpvoid MediaGalleriesDialogViews::ShowContextMenu(const gfx::Point& point, 3215549976193e34417d4474a5f4a514268ef6666c7Ted Kremenek ui::MenuSourceType source_type, 3225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GalleryDialogId id) { 3235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer context_menu_runner_.reset(new views::MenuRunner( 3245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer controller_->GetContextMenu(id))); 3255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (context_menu_runner_->RunMenuAt( 3275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GetWidget(), NULL, gfx::Rect(point.x(), point.y(), 0, 0), 3281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump views::MenuItemView::TOPLEFT, source_type, 3295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU) == 3309e922b1663ecb95dc7eee03002fd66ed18fb3192Argyrios Kyrtzidis views::MenuRunner::MENU_DELETED) { 3319e922b1663ecb95dc7eee03002fd66ed18fb3192Argyrios Kyrtzidis return; 3321a49af9681c350fef58e677f85ccb9a77e8e9d0aDouglas Gregor } 3331a49af9681c350fef58e677f85ccb9a77e8e9d0aDouglas Gregor} 3348e9bebdea69c590dedfbf27374114cb76fe12fbdDouglas Gregor 3359e922b1663ecb95dc7eee03002fd66ed18fb3192Argyrios Kyrtzidisbool MediaGalleriesDialogViews::ControllerHasWebContents() const { 3369e922b1663ecb95dc7eee03002fd66ed18fb3192Argyrios Kyrtzidis return controller_->web_contents() != NULL; 3371a49af9681c350fef58e677f85ccb9a77e8e9d0aDouglas Gregor} 3381a49af9681c350fef58e677f85ccb9a77e8e9d0aDouglas Gregor 3391a49af9681c350fef58e677f85ccb9a77e8e9d0aDouglas Gregor// MediaGalleriesDialogViewsController ----------------------------------------- 3401a49af9681c350fef58e677f85ccb9a77e8e9d0aDouglas Gregor 3415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// static 342898574e7496ba8fd76290079d3a9d06954992734Douglas GregorMediaGalleriesDialog* MediaGalleriesDialog::Create( 343898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor MediaGalleriesDialogController* controller) { 3441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return new MediaGalleriesDialogViews(controller); 3455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} 346898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor