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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.h"
6
7 #include "base/auto_reset.h"
8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/media_gallery/media_galleries_preferences.h"
10 #include "chrome/browser/ui/gtk/gtk_util.h"
11 #include "grit/generated_resources.h"
12 #include "ui/base/gtk/gtk_hig_constants.h"
13 #include "ui/base/l10n/l10n_util.h"
14
15 namespace chrome {
16
17 typedef MediaGalleriesDialogController::KnownGalleryPermissions
18 GalleryPermissions;
19
20 MediaGalleriesDialogGtk::MediaGalleriesDialogGtk(
21 MediaGalleriesDialogController* controller)
22 : controller_(controller),
23 window_(NULL),
24 confirm_(NULL),
25 checkbox_container_(NULL),
26 ignore_toggles_(false),
27 accepted_(false) {
28 InitWidgets();
29 window_ = new ConstrainedWindowGtk(controller->tab_contents(), this);
30 }
31
32 void MediaGalleriesDialogGtk::InitWidgets() {
33 contents_.Own(gtk_vbox_new(FALSE, ui::kContentAreaSpacing));
34
35 GtkWidget* header =
36 gtk_util::CreateBoldLabel(UTF16ToUTF8(controller_->GetHeader()));
37 gtk_box_pack_start(GTK_BOX(contents_.get()), header, FALSE, FALSE, 0);
38
39 GtkWidget* subtext =
40 gtk_label_new(UTF16ToUTF8(controller_->GetSubtext()).c_str());
41 gtk_label_set_line_wrap(GTK_LABEL(subtext), TRUE);
42 gtk_widget_set_size_request(subtext, 500, -1);
43 gtk_box_pack_start(GTK_BOX(contents_.get()), subtext, FALSE, FALSE, 0);
44
45 checkbox_container_ = gtk_vbox_new(FALSE, 0);
46 gtk_box_pack_start(GTK_BOX(contents_.get()), checkbox_container_,
47 FALSE, FALSE, 0);
48
49 // As a safeguard against the user skipping reading over the dialog and just
50 // confirming, the button will be unavailable for dialogs without any checks
51 // until the user toggles something.
52 bool confirm_available = false;
53 const GalleryPermissions& permissions = controller_->permissions();
54 for (GalleryPermissions::const_iterator iter = permissions.begin();
55 iter != permissions.end(); iter++) {
56 confirm_available = confirm_available || iter->second.allowed;
57 UpdateGallery(&iter->second.pref_info, iter->second.allowed);
58 }
59
60 // Holds the "add gallery" and cancel/confirm buttons.
61 GtkWidget* bottom_area = gtk_hbox_new(FALSE, ui::kControlSpacing);
62 gtk_box_pack_start(GTK_BOX(contents_.get()), bottom_area, FALSE, FALSE, 0);
63
64 // Add gallery button.
65 GtkWidget* add_folder = gtk_button_new_with_label(
66 l10n_util::GetStringUTF8(IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY).c_str());
67 g_signal_connect(add_folder, "clicked", G_CALLBACK(OnAddFolderThunk), this);
68 gtk_box_pack_start(GTK_BOX(bottom_area), add_folder, FALSE, FALSE, 0);
69
70 // Confirm/cancel button.
71 confirm_ = gtk_button_new_with_label(l10n_util::GetStringUTF8(
72 IDS_MEDIA_GALLERIES_DIALOG_CONFIRM).c_str());
73 gtk_button_set_image(
74 GTK_BUTTON(confirm_),
75 gtk_image_new_from_stock(GTK_STOCK_APPLY, GTK_ICON_SIZE_BUTTON));
76 g_signal_connect(confirm_, "clicked", G_CALLBACK(OnConfirmThunk), this);
77 gtk_box_pack_end(GTK_BOX(bottom_area), confirm_, FALSE, FALSE, 0);
78
79 GtkWidget* cancel = gtk_button_new_with_label(l10n_util::GetStringUTF8(
80 IDS_MEDIA_GALLERIES_DIALOG_CANCEL).c_str());
81 gtk_button_set_image(
82 GTK_BUTTON(cancel),
83 gtk_image_new_from_stock(GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
84 g_signal_connect(cancel, "clicked", G_CALLBACK(OnCancelThunk), this);
85 gtk_box_pack_end(GTK_BOX(bottom_area), cancel, FALSE, FALSE, 0);
86
87 gtk_widget_set_sensitive(confirm_, confirm_available);
88 }
89
90 void MediaGalleriesDialogGtk::UpdateGallery(
91 const MediaGalleryPrefInfo* gallery,
92 bool permitted) {
93 CheckboxMap::iterator iter = checkbox_map_.find(gallery);
94
95 GtkWidget* widget = NULL;
96 if (iter != checkbox_map_.end()) {
97 widget = iter->second;
98 } else {
99 widget = gtk_check_button_new_with_label(
100 UTF16ToUTF8(gallery->display_name).c_str());
101 g_signal_connect(widget, "toggled", G_CALLBACK(OnToggledThunk), this);
102 gtk_box_pack_start(GTK_BOX(checkbox_container_), widget, FALSE, FALSE, 0);
103 gtk_widget_show(widget);
104 checkbox_map_[gallery] = widget;
105 }
106
107 AutoReset<bool> reset(&ignore_toggles_, true);
108 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), permitted);
109 }
110
111 GtkWidget* MediaGalleriesDialogGtk::GetWidgetRoot() OVERRIDE {
112 return contents_.get();
113 }
114
115 GtkWidget* MediaGalleriesDialogGtk::GetFocusWidget() OVERRIDE {
116 return confirm_;
117 }
118
119 void MediaGalleriesDialogGtk::DeleteDelegate() OVERRIDE {
120 controller_->DialogFinished(accepted_);
121 }
122
123 void MediaGalleriesDialogGtk::OnToggled(GtkWidget* widget) OVERRIDE {
124 gtk_widget_set_sensitive(confirm_, TRUE);
125
126 if (ignore_toggles_)
127 return;
128
129 for (CheckboxMap::iterator iter = checkbox_map_.begin();
130 iter != checkbox_map_.end(); ++iter) {
131 if (iter->second == widget) {
132 controller_->GalleryToggled(
133 iter->first, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));
134 return;
135 }
136 }
137
138 NOTREACHED();
139 return;
140 }
141
142 void MediaGalleriesDialogGtk::OnAddFolder(GtkWidget* widget) OVERRIDE {
143 controller_->OnAddFolderClicked();
144 }
145
146 void MediaGalleriesDialogGtk::OnConfirm(GtkWidget* widget) OVERRIDE {
147 accepted_ = true;
148 window_->CloseConstrainedWindow();
149 }
150
151 void MediaGalleriesDialogGtk::OnCancel(GtkWidget* widget) OVERRIDE {
152 window_->CloseConstrainedWindow();
153 }
154
155 // MediaGalleriesDialogController ----------------------------------------------
156
157 // static
158 MediaGalleriesDialog* MediaGalleriesDialog::Create(
159 MediaGalleriesDialogController* controller) {
160 return new MediaGalleriesDialogGtk(controller);
161 }
162
163 } // namespace chrome
OLDNEW
« 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