| Index: chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
|
| diff --git a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e814df2c126052b7bd20d42075af76e84c47057c
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
|
| @@ -0,0 +1,198 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/ui/views/extensions/media_galleries_dialog_views.h"
|
| +
|
| +#include "chrome/browser/ui/views/constrained_window_views.h"
|
| +#include "grit/generated_resources.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
| +#include "ui/views/controls/button/checkbox.h"
|
| +#include "ui/views/controls/button/text_button.h"
|
| +#include "ui/views/controls/label.h"
|
| +#include "ui/views/layout/box_layout.h"
|
| +#include "ui/views/layout/grid_layout.h"
|
| +#include "ui/views/layout/layout_constants.h"
|
| +#include "ui/views/view.h"
|
| +
|
| +namespace chrome {
|
| +
|
| +typedef MediaGalleriesDialogController::KnownGalleryPermissions
|
| + GalleryPermissions;
|
| +
|
| +namespace {
|
| +
|
| +// Heading font size correction.
|
| +#if defined(CROS_FONTS_USING_BCI)
|
| +const int kHeadingFontSizeDelta = 0;
|
| +#else
|
| +const int kHeadingFontSizeDelta = 1;
|
| +#endif
|
| +
|
| +const int kContentWidth = 450;
|
| +
|
| +} // namespace
|
| +
|
| +using views::BoxLayout;
|
| +using views::GridLayout;
|
| +
|
| +MediaGalleriesDialogViews::MediaGalleriesDialogViews(
|
| + MediaGalleriesDialogController* controller)
|
| + : controller_(controller),
|
| + window_(NULL),
|
| + contents_(new views::View()),
|
| + accepted_(false) {
|
| + InitChildViews();
|
| +
|
| + window_ = new ConstrainedWindowViews(controller->tab_contents(), this);
|
| +}
|
| +
|
| +void MediaGalleriesDialogViews::InitChildViews() {
|
| + // Layout.
|
| + GridLayout* layout = new GridLayout(contents_);
|
| + layout->SetInsets(views::kPanelVertMargin, views::kPanelHorizMargin,
|
| + 0, views::kPanelHorizMargin);
|
| + int column_set_id = 0;
|
| + views::ColumnSet* columns = layout->AddColumnSet(column_set_id);
|
| + columns->AddColumn(GridLayout::LEADING,
|
| + GridLayout::LEADING,
|
| + 1,
|
| + GridLayout::FIXED,
|
| + kContentWidth,
|
| + 0);
|
| + contents_->SetLayoutManager(layout);
|
| +
|
| + // Header text.
|
| + views::Label* header = new views::Label(controller_->GetHeader());
|
| + header->SetFont(header->font().DeriveFont(kHeadingFontSizeDelta,
|
| + gfx::Font::BOLD));
|
| + header->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
|
| + layout->StartRow(0, column_set_id);
|
| + layout->AddView(header);
|
| +
|
| + // Message text.
|
| + views::Label* subtext = new views::Label(controller_->GetSubtext());
|
| + subtext->SetMultiLine(true);
|
| + subtext->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
|
| + layout->StartRowWithPadding(0, column_set_id,
|
| + 0, views::kRelatedControlVerticalSpacing);
|
| + layout->AddView(subtext);
|
| +
|
| + // Checkboxes.
|
| + checkbox_container_ = new views::View();
|
| + checkbox_container_->SetLayoutManager(
|
| + new BoxLayout(BoxLayout::kVertical,
|
| + views::kPanelHorizIndentation,
|
| + 0,
|
| + views::kRelatedControlSmallVerticalSpacing));
|
| + layout->StartRowWithPadding(0, column_set_id,
|
| + 0, views::kRelatedControlVerticalSpacing);
|
| + layout->AddView(checkbox_container_);
|
| +
|
| + const GalleryPermissions& permissions = controller_->permissions();
|
| + for (GalleryPermissions::const_iterator iter = permissions.begin();
|
| + iter != permissions.end(); iter++) {
|
| + AddOrUpdateGallery(&iter->second.pref_info, iter->second.allowed);
|
| + }
|
| +
|
| + // Add Gallery button.
|
| + add_gallery_ = new views::NativeTextButton(
|
| + this, l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY));
|
| + layout->StartRowWithPadding(0, column_set_id,
|
| + 0, views::kRelatedControlVerticalSpacing);
|
| + layout->AddView(add_gallery_);
|
| +}
|
| +
|
| +void MediaGalleriesDialogViews::UpdateGallery(
|
| + const MediaGalleryPrefInfo* gallery, bool permitted) {
|
| + // After adding a new checkbox, we have to update the size of the dialog.
|
| + if (AddOrUpdateGallery(gallery, permitted))
|
| + GetWidget()->SetSize(GetWidget()->non_client_view()->GetPreferredSize());
|
| +}
|
| +
|
| +bool MediaGalleriesDialogViews::AddOrUpdateGallery(
|
| + const MediaGalleryPrefInfo* gallery, bool permitted) {
|
| + CheckboxMap::iterator iter = checkbox_map_.find(gallery);
|
| +
|
| + bool new_checkbox = false;
|
| + views::Checkbox* checkbox = NULL;
|
| + if (iter != checkbox_map_.end()) {
|
| + checkbox = iter->second;
|
| + } else {
|
| + new_checkbox = true;
|
| + checkbox = new views::Checkbox(gallery->display_name);
|
| + checkbox->set_listener(this);
|
| + checkbox->SetTooltipText(gallery->path.LossyDisplayName());
|
| + checkbox_container_->AddChildView(checkbox);
|
| + checkbox_map_[gallery] = checkbox;
|
| + }
|
| +
|
| + checkbox->SetChecked(permitted);
|
| + return new_checkbox;
|
| +}
|
| +
|
| +string16 MediaGalleriesDialogViews::GetDialogButtonLabel(
|
| + ui::DialogButton button) const {
|
| + if (button == ui::DIALOG_BUTTON_OK)
|
| + return l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_DIALOG_CONFIRM);
|
| +
|
| + if (button == ui::DIALOG_BUTTON_CANCEL)
|
| + return l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_DIALOG_CANCEL);
|
| +
|
| + return string16();
|
| +}
|
| +
|
| +bool MediaGalleriesDialogViews::Cancel() {
|
| + return true;
|
| +}
|
| +
|
| +bool MediaGalleriesDialogViews::Accept() {
|
| + accepted_ = true;
|
| + return true;
|
| +}
|
| +
|
| +views::View* MediaGalleriesDialogViews::GetContentsView() {
|
| + return contents_;
|
| +}
|
| +
|
| +views::Widget* MediaGalleriesDialogViews::GetWidget() {
|
| + return contents_->GetWidget();
|
| +}
|
| +
|
| +const views::Widget* MediaGalleriesDialogViews::GetWidget() const {
|
| + return contents_->GetWidget();
|
| +}
|
| +
|
| +void MediaGalleriesDialogViews::DeleteDelegate() {
|
| + controller_->DialogFinished(accepted_);
|
| +}
|
| +
|
| +void MediaGalleriesDialogViews::ButtonPressed(views::Button* sender,
|
| + const views::Event& event) {
|
| + if (sender == add_gallery_) {
|
| + controller_->OnAddFolderClicked();
|
| + return;
|
| + }
|
| +
|
| + for (CheckboxMap::iterator iter = checkbox_map_.begin();
|
| + iter != checkbox_map_.end(); ++iter) {
|
| + if (iter->second == sender) {
|
| + controller_->GalleryToggled(
|
| + iter->first, static_cast<views::Checkbox*>(sender)->checked());
|
| + return;
|
| + }
|
| + }
|
| +
|
| + NOTREACHED();
|
| + return;
|
| +}
|
| +
|
| +// MediaGalleriesDialogViewsController -----------------------------------------
|
| +
|
| +// static
|
| +MediaGalleriesDialog* MediaGalleriesDialog::Create(
|
| + MediaGalleriesDialogController* controller) {
|
| + return new MediaGalleriesDialogViews(controller);
|
| +}
|
| +
|
| +} // namespace chrome
|
|
|