Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1964)

Unified Diff: chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.cc

Issue 10826129: Media galleries: configuration dialog controller and GTK impl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix non-gtk builds Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.cc
diff --git a/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.cc b/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a367ce4be5e41fd1aea8de8670c34af296ac0b27
--- /dev/null
+++ b/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.cc
@@ -0,0 +1,163 @@
+// 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/gtk/extensions/media_galleries_dialog_gtk.h"
+
+#include "base/auto_reset.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/browser/media_gallery/media_galleries_preferences.h"
+#include "chrome/browser/ui/gtk/gtk_util.h"
+#include "grit/generated_resources.h"
+#include "ui/base/gtk/gtk_hig_constants.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace chrome {
+
+typedef MediaGalleriesDialogController::KnownGalleryPermissions
+ GalleryPermissions;
+
+MediaGalleriesDialogGtk::MediaGalleriesDialogGtk(
+ MediaGalleriesDialogController* controller)
+ : controller_(controller),
+ window_(NULL),
+ confirm_(NULL),
+ checkbox_container_(NULL),
+ ignore_toggles_(false),
+ accepted_(false) {
+ InitWidgets();
+ window_ = new ConstrainedWindowGtk(controller->tab_contents(), this);
+}
+
+void MediaGalleriesDialogGtk::InitWidgets() {
+ contents_.Own(gtk_vbox_new(FALSE, ui::kContentAreaSpacing));
+
+ GtkWidget* header =
+ gtk_util::CreateBoldLabel(UTF16ToUTF8(controller_->GetHeader()));
+ gtk_box_pack_start(GTK_BOX(contents_.get()), header, FALSE, FALSE, 0);
+
+ GtkWidget* subtext =
+ gtk_label_new(UTF16ToUTF8(controller_->GetSubtext()).c_str());
+ gtk_label_set_line_wrap(GTK_LABEL(subtext), TRUE);
+ gtk_widget_set_size_request(subtext, 500, -1);
+ gtk_box_pack_start(GTK_BOX(contents_.get()), subtext, FALSE, FALSE, 0);
+
+ checkbox_container_ = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(contents_.get()), checkbox_container_,
+ FALSE, FALSE, 0);
+
+ // As a safeguard against the user skipping reading over the dialog and just
+ // confirming, the button will be unavailable for dialogs without any checks
+ // until the user toggles something.
+ bool confirm_available = false;
+ const GalleryPermissions& permissions = controller_->permissions();
+ for (GalleryPermissions::const_iterator iter = permissions.begin();
+ iter != permissions.end(); iter++) {
+ confirm_available = confirm_available || iter->second.allowed;
+ UpdateGallery(&iter->second.pref_info, iter->second.allowed);
+ }
+
+ // Holds the "add gallery" and cancel/confirm buttons.
+ GtkWidget* bottom_area = gtk_hbox_new(FALSE, ui::kControlSpacing);
+ gtk_box_pack_start(GTK_BOX(contents_.get()), bottom_area, FALSE, FALSE, 0);
+
+ // Add gallery button.
+ GtkWidget* add_folder = gtk_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY).c_str());
+ g_signal_connect(add_folder, "clicked", G_CALLBACK(OnAddFolderThunk), this);
+ gtk_box_pack_start(GTK_BOX(bottom_area), add_folder, FALSE, FALSE, 0);
+
+ // Confirm/cancel button.
+ confirm_ = gtk_button_new_with_label(l10n_util::GetStringUTF8(
+ IDS_MEDIA_GALLERIES_DIALOG_CONFIRM).c_str());
+ gtk_button_set_image(
+ GTK_BUTTON(confirm_),
+ gtk_image_new_from_stock(GTK_STOCK_APPLY, GTK_ICON_SIZE_BUTTON));
+ g_signal_connect(confirm_, "clicked", G_CALLBACK(OnConfirmThunk), this);
+ gtk_box_pack_end(GTK_BOX(bottom_area), confirm_, FALSE, FALSE, 0);
+
+ GtkWidget* cancel = gtk_button_new_with_label(l10n_util::GetStringUTF8(
+ IDS_MEDIA_GALLERIES_DIALOG_CANCEL).c_str());
+ gtk_button_set_image(
+ GTK_BUTTON(cancel),
+ gtk_image_new_from_stock(GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
+ g_signal_connect(cancel, "clicked", G_CALLBACK(OnCancelThunk), this);
+ gtk_box_pack_end(GTK_BOX(bottom_area), cancel, FALSE, FALSE, 0);
+
+ gtk_widget_set_sensitive(confirm_, confirm_available);
+}
+
+void MediaGalleriesDialogGtk::UpdateGallery(
+ const MediaGalleryPrefInfo* gallery,
+ bool permitted) {
+ CheckboxMap::iterator iter = checkbox_map_.find(gallery);
+
+ GtkWidget* widget = NULL;
+ if (iter != checkbox_map_.end()) {
+ widget = iter->second;
+ } else {
+ widget = gtk_check_button_new_with_label(
+ UTF16ToUTF8(gallery->display_name).c_str());
+ g_signal_connect(widget, "toggled", G_CALLBACK(OnToggledThunk), this);
+ gtk_box_pack_start(GTK_BOX(checkbox_container_), widget, FALSE, FALSE, 0);
+ gtk_widget_show(widget);
+ checkbox_map_[gallery] = widget;
+ }
+
+ AutoReset<bool> reset(&ignore_toggles_, true);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), permitted);
+}
+
+GtkWidget* MediaGalleriesDialogGtk::GetWidgetRoot() OVERRIDE {
+ return contents_.get();
+}
+
+GtkWidget* MediaGalleriesDialogGtk::GetFocusWidget() OVERRIDE {
+ return confirm_;
+}
+
+void MediaGalleriesDialogGtk::DeleteDelegate() OVERRIDE {
+ controller_->DialogFinished(accepted_);
+}
+
+void MediaGalleriesDialogGtk::OnToggled(GtkWidget* widget) OVERRIDE {
+ gtk_widget_set_sensitive(confirm_, TRUE);
+
+ if (ignore_toggles_)
+ return;
+
+ for (CheckboxMap::iterator iter = checkbox_map_.begin();
+ iter != checkbox_map_.end(); ++iter) {
+ if (iter->second == widget) {
+ controller_->GalleryToggled(
+ iter->first, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));
+ return;
+ }
+ }
+
+ NOTREACHED();
+ return;
+}
+
+void MediaGalleriesDialogGtk::OnAddFolder(GtkWidget* widget) OVERRIDE {
+ controller_->OnAddFolderClicked();
+}
+
+void MediaGalleriesDialogGtk::OnConfirm(GtkWidget* widget) OVERRIDE {
+ accepted_ = true;
+ window_->CloseConstrainedWindow();
+}
+
+void MediaGalleriesDialogGtk::OnCancel(GtkWidget* widget) OVERRIDE {
+ window_->CloseConstrainedWindow();
+}
+
+// MediaGalleriesDialogController ----------------------------------------------
+
+// static
+MediaGalleriesDialog* MediaGalleriesDialog::Create(
+ MediaGalleriesDialogController* controller) {
+ return new MediaGalleriesDialogGtk(controller);
+}
+
+} // namespace chrome
« no previous file with comments | « chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.h ('k') | chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698