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

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: 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_box_pack_start(GTK_BOX(contents_.get()), subtext, FALSE, FALSE, 0);
42
43 checkbox_container_ = gtk_vbox_new(FALSE, 0);
44 gtk_box_pack_start(GTK_BOX(contents_.get()), checkbox_container_,
45 FALSE, FALSE, 0);
46
47 // As a safeguard against the user skipping reading over the dialog and just
48 // confirming, the button will be unavailable for dialogs without any checks
49 // until the user toggles something.
50 bool confirm_available = false;
51 const GalleryPermissions& permissions = controller_->permissions();
52 for (GalleryPermissions::const_iterator iter = permissions.begin();
53 iter != permissions.end(); iter++) {
54 confirm_available = confirm_available || iter->second.second;
55 UpdateGallery(&iter->second.first, iter->second.second);
56 }
57
58 // Holds the "add gallery" and cancel/confirm buttons.
59 GtkWidget* bottom_area = gtk_hbox_new(FALSE, ui::kControlSpacing);
60 gtk_box_pack_start(GTK_BOX(contents_.get()), bottom_area, FALSE, FALSE, 0);
61
62 // Add gallery button.
63 GtkWidget* add_folder = gtk_button_new_with_label(
64 l10n_util::GetStringUTF8(IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY).c_str());
65 g_signal_connect(add_folder, "clicked", G_CALLBACK(OnAddFolderThunk), this);
66 gtk_box_pack_start(GTK_BOX(bottom_area), add_folder, FALSE, FALSE, 0);
67
68 // Confirm/cancel button box.
69 GtkWidget* button_box = gtk_hbutton_box_new();
70 gtk_button_box_set_layout(GTK_BUTTON_BOX(button_box), GTK_BUTTONBOX_END);
71 gtk_box_set_spacing(GTK_BOX(button_box), ui::kControlSpacing);
72 gtk_box_pack_end(GTK_BOX(bottom_area), button_box, TRUE, TRUE, 0);
73
74 GtkWidget* cancel = gtk_button_new_with_label(l10n_util::GetStringUTF8(
75 IDS_MEDIA_GALLERIES_DIALOG_CANCEL).c_str());
76 gtk_button_set_image(
77 GTK_BUTTON(cancel),
78 gtk_image_new_from_stock(GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
79 g_signal_connect(cancel, "clicked", G_CALLBACK(OnCancelThunk), this);
80 gtk_container_add(GTK_CONTAINER(button_box), cancel);
81
82 confirm_ = gtk_button_new_with_label(l10n_util::GetStringUTF8(
83 IDS_MEDIA_GALLERIES_DIALOG_CONFIRM).c_str());
84 gtk_button_set_image(
85 GTK_BUTTON(confirm_),
86 gtk_image_new_from_stock(GTK_STOCK_APPLY, GTK_ICON_SIZE_BUTTON));
87 g_signal_connect(confirm_, "clicked", G_CALLBACK(OnConfirmThunk), this);
88 gtk_container_add(GTK_CONTAINER(button_box), confirm_);
89
90 gtk_widget_set_sensitive(confirm_, confirm_available);
91 }
92
93 void MediaGalleriesDialogGtk::UpdateGallery(
94 const MediaGalleryPrefInfo* gallery,
95 bool permitted) {
96 CheckboxMap::iterator iter = checkbox_map_.find(gallery);
97
98 GtkWidget* widget = NULL;
99 if (iter != checkbox_map_.end()) {
100 widget = iter->second;
101 } else {
102 widget = gtk_check_button_new_with_label(
103 UTF16ToUTF8(gallery->display_name).c_str());
104 g_signal_connect(widget, "toggled", G_CALLBACK(OnToggledThunk), this);
105 gtk_box_pack_start(GTK_BOX(checkbox_container_), widget, FALSE, FALSE, 0);
106 gtk_widget_show(widget);
107 checkbox_map_[gallery] = widget;
108 }
109
110 AutoReset<bool> reset(&ignore_toggles_, true);
111 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), permitted);
112 }
113
114 GtkWidget* MediaGalleriesDialogGtk::GetWidgetRoot() OVERRIDE {
115 return contents_.get();
116 }
117
118 GtkWidget* MediaGalleriesDialogGtk::GetFocusWidget() OVERRIDE {
119 return confirm_;
120 }
121
122 void MediaGalleriesDialogGtk::DeleteDelegate() OVERRIDE {
123 controller_->DialogFinished(accepted_);
124 }
125
126 void MediaGalleriesDialogGtk::OnToggled(GtkWidget* widget) OVERRIDE {
127 if (ignore_toggles_)
128 return;
129
130 gtk_widget_set_sensitive(confirm_, TRUE);
131
132 for (CheckboxMap::iterator iter = checkbox_map_.begin();
133 iter != checkbox_map_.end(); ++iter) {
134 if (iter->second == widget) {
135 controller_->GalleryToggled(
136 iter->first, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));
137 return;
138 }
139 }
140
141 NOTREACHED();
142 return;
143 }
144
145 void MediaGalleriesDialogGtk::OnAddFolder(GtkWidget* widget) OVERRIDE {
146 controller_->OnAddFolderClicked();
147 }
148
149 void MediaGalleriesDialogGtk::OnConfirm(GtkWidget* widget) OVERRIDE {
150 accepted_ = true;
151 window_->CloseConstrainedWindow();
152 }
153
154 void MediaGalleriesDialogGtk::OnCancel(GtkWidget* widget) OVERRIDE {
155 window_->CloseConstrainedWindow();
156 }
157
158 // MediaGalleriesDialogController ----------------------------------------------
159
160 // static
161 MediaGalleriesDialog* MediaGalleriesDialog::Create(
162 MediaGalleriesDialogController* controller) {
163 return new MediaGalleriesDialogGtk(controller);
164 }
165
166 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698