| 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
|
| index ac699d59fb5747d827580162ce65e4ee70a6b10d..7820aaadd236e0439b92454d4d855427f5ef2f24 100644
|
| --- a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
|
| +++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
|
| @@ -15,11 +15,13 @@
|
| #include "grit/locale_settings.h"
|
| #include "third_party/skia/include/core/SkColor.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| +#include "ui/base/models/simple_menu_model.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| #include "ui/native_theme/native_theme.h"
|
| #include "ui/views/controls/button/checkbox.h"
|
| #include "ui/views/controls/button/label_button.h"
|
| #include "ui/views/controls/label.h"
|
| +#include "ui/views/controls/menu/menu_runner.h"
|
| #include "ui/views/controls/scroll_view.h"
|
| #include "ui/views/controls/separator.h"
|
| #include "ui/views/layout/box_layout.h"
|
| @@ -66,6 +68,40 @@ void ScrollableView::Layout() {
|
|
|
| } // namespace
|
|
|
| +class GalleryContextMenuModel : public ui::SimpleMenuModel::Delegate {
|
| + public:
|
| + explicit GalleryContextMenuModel(MediaGalleriesDialogViews* view)
|
| + : view_(view), id_(kInvalidMediaGalleryPrefId) {}
|
| + virtual ~GalleryContextMenuModel() {}
|
| +
|
| + void set_media_gallery_pref_id(MediaGalleryPrefId id) {
|
| + id_ = id;
|
| + }
|
| +
|
| + virtual bool IsCommandIdChecked(int command_id) const OVERRIDE {
|
| + return false;
|
| + }
|
| + virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE {
|
| + return true;
|
| + }
|
| + virtual bool IsCommandIdVisible(int command_id) const OVERRIDE {
|
| + return true;
|
| + }
|
| +
|
| + virtual bool GetAcceleratorForCommandId(
|
| + int command_id, ui::Accelerator* accelerator) OVERRIDE {
|
| + return false;
|
| + }
|
| +
|
| + virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE {
|
| + view_->DidForgetGallery(id_);
|
| + }
|
| +
|
| + private:
|
| + MediaGalleriesDialogViews* view_;
|
| + MediaGalleryPrefId id_;
|
| +};
|
| +
|
| typedef MediaGalleriesDialogController::GalleryPermissionsVector
|
| GalleryPermissionsVector;
|
|
|
| @@ -79,6 +115,12 @@ MediaGalleriesDialogViews::MediaGalleriesDialogViews(
|
| accepted_(false) {
|
| InitChildViews();
|
|
|
| + gallery_menu_model_ = new GalleryContextMenuModel(this);
|
| + ui::SimpleMenuModel* menu_model =
|
| + new ui::SimpleMenuModel(gallery_menu_model_);
|
| + menu_model->AddItem(1, controller->GetForgetMenuCommand());
|
| + context_menu_model_.reset(menu_model);
|
| +
|
| // Ownership of |contents_| is handed off by this call. |window_| will take
|
| // care of deleting itself after calling DeleteDelegate().
|
| WebContentsModalDialogManager* web_contents_modal_dialog_manager =
|
| @@ -237,8 +279,12 @@ bool MediaGalleriesDialogViews::AddOrUpdateGallery(
|
|
|
| views::Checkbox* checkbox = new views::Checkbox(label);
|
| checkbox->set_listener(this);
|
| + if (gallery.pref_id != kInvalidMediaGalleryPrefId)
|
| + checkbox->set_context_menu_controller(this);
|
| checkbox->SetTooltipText(tooltip_text);
|
| views::Label* secondary_text = new views::Label(details);
|
| + if (gallery.pref_id != kInvalidMediaGalleryPrefId)
|
| + secondary_text->set_context_menu_controller(this);
|
| secondary_text->SetTooltipText(tooltip_text);
|
| secondary_text->SetEnabledColor(kDeemphasizedTextColor);
|
| secondary_text->SetTooltipText(tooltip_text);
|
| @@ -249,6 +295,8 @@ bool MediaGalleriesDialogViews::AddOrUpdateGallery(
|
| views::kRelatedControlSmallHorizontalSpacing));
|
|
|
| views::View* checkbox_view = new views::View();
|
| + if (gallery.pref_id != kInvalidMediaGalleryPrefId)
|
| + checkbox_view->set_context_menu_controller(this);
|
| checkbox_view->set_border(views::Border::CreateEmptyBorder(
|
| 0,
|
| views::kPanelHorizMargin,
|
| @@ -367,6 +415,58 @@ void MediaGalleriesDialogViews::ButtonPressed(views::Button* sender,
|
| }
|
| }
|
|
|
| +void MediaGalleriesDialogViews::ShowContextMenuForView(
|
| + views::View* source,
|
| + const gfx::Point& point,
|
| + ui::MenuSourceType source_type) {
|
| + views::Checkbox* checkbox = NULL;
|
| + if (source->GetClassName() == views::Checkbox::kViewClassName) {
|
| + checkbox = static_cast<views::Checkbox*>(source);
|
| + } else {
|
| + views::View* checkbox_container_view = NULL;
|
| + if (source->child_count() == 2) {
|
| + checkbox_container_view = source;
|
| + } else {
|
| + checkbox_container_view = source->parent();
|
| + }
|
| + if (!checkbox_container_view)
|
| + return;
|
| + checkbox = static_cast<views::Checkbox*>(
|
| + checkbox_container_view->child_at(0));
|
| + }
|
| +
|
| + for (CheckboxMap::const_iterator iter = checkbox_map_.begin();
|
| + iter != checkbox_map_.end(); ++iter) {
|
| + if (checkbox == iter->second) {
|
| + ShowContextMenu(point, source_type, iter->first);
|
| + }
|
| + }
|
| +}
|
| +
|
| +void MediaGalleriesDialogViews::ShowContextMenu(const gfx::Point& point,
|
| + ui::MenuSourceType source_type,
|
| + MediaGalleryPrefId id) {
|
| + gallery_menu_model_->set_media_gallery_pref_id(id);
|
| +
|
| + context_menu_runner_.reset(new views::MenuRunner(context_menu_model_.get()));
|
| + if (context_menu_runner_->RunMenuAt(
|
| + GetWidget(), NULL, gfx::Rect(point.x(), point.y(), 0, 0),
|
| + views::MenuItemView::TOPLEFT, source_type,
|
| + views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU) ==
|
| + views::MenuRunner::MENU_DELETED) {
|
| + return;
|
| + }
|
| +}
|
| +
|
| +void MediaGalleriesDialogViews::DidForgetGallery(MediaGalleryPrefId id) {
|
| + if (id == kInvalidMediaGalleryPrefId)
|
| + return;
|
| +
|
| + controller_->DidForgetGallery(id);
|
| +
|
| + gallery_menu_model_->set_media_gallery_pref_id(kInvalidMediaGalleryPrefId);
|
| +}
|
| +
|
| // MediaGalleriesDialogViewsController -----------------------------------------
|
|
|
| // static
|
|
|