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

Unified Diff: chrome/browser/gtk/options/content_exceptions_window_gtk.cc

Issue 6251001: Move chrome/browser/gtk/ to chrome/browser/ui/gtk/... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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/gtk/options/content_exceptions_window_gtk.cc
===================================================================
--- chrome/browser/gtk/options/content_exceptions_window_gtk.cc (revision 71352)
+++ chrome/browser/gtk/options/content_exceptions_window_gtk.cc (working copy)
@@ -1,336 +0,0 @@
-// Copyright (c) 2010 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/gtk/options/content_exceptions_window_gtk.h"
-
-#include <set>
-
-#include "app/l10n_util.h"
-#include "base/message_loop.h"
-#include "base/utf_string_conversions.h"
-#include "chrome/browser/gtk/gtk_util.h"
-#include "chrome/browser/gtk/options/content_exception_editor.h"
-#include "gfx/gtk_util.h"
-#include "grit/generated_resources.h"
-#include "grit/locale_settings.h"
-
-namespace {
-
-// Singletons for each possible exception window.
-ContentExceptionsWindowGtk* instances[CONTENT_SETTINGS_NUM_TYPES] = { NULL };
-
-} // namespace
-
-// static
-void ContentExceptionsWindowGtk::ShowExceptionsWindow(
- GtkWindow* parent,
- HostContentSettingsMap* map,
- HostContentSettingsMap* off_the_record_map,
- ContentSettingsType type) {
- DCHECK(map);
- DCHECK(type < CONTENT_SETTINGS_NUM_TYPES);
- // Geolocation exceptions are handled by SimpleContentExceptionsWindow.
- DCHECK_NE(type, CONTENT_SETTINGS_TYPE_GEOLOCATION);
- // Notification exceptions are handled by SimpleContentExceptionsWindow.
- DCHECK_NE(type, CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
-
- if (!instances[type]) {
- // Create the options window.
- instances[type] =
- new ContentExceptionsWindowGtk(parent, map, off_the_record_map, type);
- } else {
- gtk_util::PresentWindow(instances[type]->dialog_, 0);
- }
-}
-
-ContentExceptionsWindowGtk::~ContentExceptionsWindowGtk() {
-}
-
-ContentExceptionsWindowGtk::ContentExceptionsWindowGtk(
- GtkWindow* parent,
- HostContentSettingsMap* map,
- HostContentSettingsMap* off_the_record_map,
- ContentSettingsType type)
- : allow_off_the_record_(off_the_record_map) {
- // Build the list backing that GTK uses, along with an adapter which will
- // sort stuff without changing the underlying backing store.
- list_store_ = gtk_list_store_new(COL_COUNT, G_TYPE_STRING, G_TYPE_STRING,
- PANGO_TYPE_STYLE);
- sort_list_store_ = gtk_tree_model_sort_new_with_model(
- GTK_TREE_MODEL(list_store_));
- treeview_ = gtk_tree_view_new_with_model(GTK_TREE_MODEL(sort_list_store_));
- g_object_unref(list_store_);
- g_object_unref(sort_list_store_);
-
- // Set up the properties of the treeview
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview_), TRUE);
- g_signal_connect(treeview_, "row-activated",
- G_CALLBACK(OnTreeViewRowActivateThunk), this);
-
- GtkTreeViewColumn* pattern_column = gtk_tree_view_column_new_with_attributes(
- l10n_util::GetStringUTF8(IDS_EXCEPTIONS_PATTERN_HEADER).c_str(),
- gtk_cell_renderer_text_new(),
- "text", COL_PATTERN,
- "style", COL_OTR,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_), pattern_column);
- gtk_tree_view_column_set_sort_column_id(pattern_column, COL_PATTERN);
-
- GtkTreeViewColumn* action_column = gtk_tree_view_column_new_with_attributes(
- l10n_util::GetStringUTF8(IDS_EXCEPTIONS_ACTION_HEADER).c_str(),
- gtk_cell_renderer_text_new(),
- "text", COL_ACTION,
- "style", COL_OTR,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_), action_column);
- gtk_tree_view_column_set_sort_column_id(action_column, COL_ACTION);
-
- treeview_selection_ = gtk_tree_view_get_selection(
- GTK_TREE_VIEW(treeview_));
- gtk_tree_selection_set_mode(treeview_selection_, GTK_SELECTION_MULTIPLE);
- g_signal_connect(treeview_selection_, "changed",
- G_CALLBACK(OnTreeSelectionChangedThunk), this);
-
- // Bind |list_store_| to our C++ model.
- model_.reset(new ContentExceptionsTableModel(map, off_the_record_map, type));
- model_adapter_.reset(new gtk_tree::TableAdapter(this, list_store_,
- model_.get()));
- // Force a reload of everything to copy data into |list_store_|.
- model_adapter_->OnModelChanged();
-
- dialog_ = gtk_dialog_new_with_buttons(
- GetWindowTitle().c_str(),
- parent,
- static_cast<GtkDialogFlags>(GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR),
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_CLOSE,
- NULL);
- gtk_window_set_default_size(GTK_WINDOW(dialog_), 500, -1);
- // Allow browser windows to go in front of the options dialog in metacity.
- gtk_window_set_type_hint(GTK_WINDOW(dialog_), GDK_WINDOW_TYPE_HINT_NORMAL);
- gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog_)->vbox),
- gtk_util::kContentAreaSpacing);
-
- GtkWidget* hbox = gtk_hbox_new(FALSE, gtk_util::kControlSpacing);
- gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog_)->vbox), hbox);
-
- GtkWidget* treeview_box = gtk_vbox_new(FALSE, gtk_util::kControlSpacing);
-
- // Create a scrolled window to wrap the treeview widget.
- GtkWidget* scrolled = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled),
- GTK_SHADOW_ETCHED_IN);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_container_add(GTK_CONTAINER(scrolled), treeview_);
- gtk_box_pack_start(GTK_BOX(treeview_box), scrolled, TRUE, TRUE, 0);
-
- // If we also have an OTR profile, inform the user that OTR exceptions are
- // displayed in italics.
- if (allow_off_the_record_) {
- GtkWidget* incognito_label = gtk_label_new(
- l10n_util::GetStringUTF8(IDS_EXCEPTIONS_OTR_IN_ITALICS).c_str());
- PangoAttrList* attributes = pango_attr_list_new();
- pango_attr_list_insert(attributes,
- pango_attr_style_new(PANGO_STYLE_ITALIC));
- gtk_label_set_attributes(GTK_LABEL(incognito_label), attributes);
- pango_attr_list_unref(attributes);
- gtk_misc_set_alignment(GTK_MISC(incognito_label), 0, 0);
- gtk_box_pack_start(GTK_BOX(treeview_box), incognito_label, FALSE, FALSE, 0);
- }
-
- gtk_box_pack_start(GTK_BOX(hbox), treeview_box, TRUE, TRUE, 0);
-
- GtkWidget* button_box = gtk_vbox_new(FALSE, gtk_util::kControlSpacing);
-
- GtkWidget* add_button = gtk_util::BuildDialogButton(dialog_,
- IDS_EXCEPTIONS_ADD_BUTTON,
- GTK_STOCK_ADD);
- g_signal_connect(add_button, "clicked", G_CALLBACK(AddThunk), this);
- gtk_box_pack_start(GTK_BOX(button_box), add_button, FALSE, FALSE, 0);
-
- edit_button_ = gtk_util::BuildDialogButton(dialog_,
- IDS_EXCEPTIONS_EDIT_BUTTON,
- GTK_STOCK_EDIT);
- g_signal_connect(edit_button_, "clicked", G_CALLBACK(EditThunk), this);
- gtk_box_pack_start(GTK_BOX(button_box), edit_button_, FALSE, FALSE, 0);
-
- remove_button_ = gtk_util::BuildDialogButton(dialog_,
- IDS_EXCEPTIONS_REMOVE_BUTTON,
- GTK_STOCK_REMOVE);
- g_signal_connect(remove_button_, "clicked", G_CALLBACK(RemoveThunk), this);
- gtk_box_pack_start(GTK_BOX(button_box), remove_button_, FALSE, FALSE, 0);
-
- remove_all_button_ = gtk_util::BuildDialogButton(
- dialog_,
- IDS_EXCEPTIONS_REMOVEALL_BUTTON,
- GTK_STOCK_CLEAR);
- g_signal_connect(remove_all_button_, "clicked", G_CALLBACK(RemoveAllThunk),
- this);
- gtk_box_pack_start(GTK_BOX(button_box), remove_all_button_, FALSE, FALSE, 0);
-
- gtk_box_pack_start(GTK_BOX(hbox), button_box, FALSE, FALSE, 0);
-
- UpdateButtonState();
-
- gtk_util::ShowDialogWithLocalizedSize(dialog_,
- IDS_CONTENT_EXCEPTION_DIALOG_WIDTH_CHARS,
- -1,
- true);
-
- g_signal_connect(dialog_, "response", G_CALLBACK(gtk_widget_destroy), NULL);
- g_signal_connect(dialog_, "destroy", G_CALLBACK(OnWindowDestroyThunk), this);
-}
-
-void ContentExceptionsWindowGtk::SetColumnValues(int row, GtkTreeIter* iter) {
- string16 pattern = model_->GetText(row, IDS_EXCEPTIONS_PATTERN_HEADER);
- gtk_list_store_set(list_store_, iter, COL_PATTERN,
- UTF16ToUTF8(pattern).c_str(), -1);
-
- string16 action = model_->GetText(row, IDS_EXCEPTIONS_ACTION_HEADER);
- gtk_list_store_set(list_store_, iter, COL_ACTION,
- UTF16ToUTF8(action).c_str(), -1);
-
- bool is_off_the_record = model_->entry_is_off_the_record(row);
- PangoStyle style =
- is_off_the_record ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL;
- gtk_list_store_set(list_store_, iter, COL_OTR, style, -1);
-}
-
-void ContentExceptionsWindowGtk::AcceptExceptionEdit(
- const ContentSettingsPattern& pattern,
- ContentSetting setting,
- bool is_off_the_record,
- int index,
- bool is_new) {
- DCHECK(!is_off_the_record || allow_off_the_record_);
-
- if (!is_new)
- model_->RemoveException(index);
-
- model_->AddException(pattern, setting, is_off_the_record);
-
- int new_index = model_->IndexOfExceptionByPattern(pattern, is_off_the_record);
- DCHECK_NE(-1, new_index);
-
- gtk_tree::SelectAndFocusRowNum(new_index, GTK_TREE_VIEW(treeview_));
-
- UpdateButtonState();
-}
-
-void ContentExceptionsWindowGtk::UpdateButtonState() {
- int num_selected = gtk_tree_selection_count_selected_rows(
- treeview_selection_);
- int row_count = gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(sort_list_store_), NULL);
-
- // TODO(erg): http://crbug.com/34177 , support editing of more than one entry
- // at a time.
- gtk_widget_set_sensitive(edit_button_, num_selected == 1);
- gtk_widget_set_sensitive(remove_button_, num_selected >= 1);
- gtk_widget_set_sensitive(remove_all_button_, row_count > 0);
-}
-
-void ContentExceptionsWindowGtk::Add(GtkWidget* widget) {
- new ContentExceptionEditor(GTK_WINDOW(dialog_),
- this, model_.get(), allow_off_the_record_, -1,
- ContentSettingsPattern(),
- CONTENT_SETTING_BLOCK, false);
-}
-
-void ContentExceptionsWindowGtk::Edit(GtkWidget* widget) {
- std::set<std::pair<int, int> > indices;
- GetSelectedModelIndices(&indices);
- DCHECK_GT(indices.size(), 0u);
- int index = indices.begin()->first;
- const HostContentSettingsMap::PatternSettingPair& entry =
- model_->entry_at(index);
- new ContentExceptionEditor(GTK_WINDOW(dialog_), this, model_.get(),
- allow_off_the_record_, index,
- entry.first, entry.second,
- model_->entry_is_off_the_record(index));
-}
-
-void ContentExceptionsWindowGtk::Remove(GtkWidget* widget) {
- std::set<std::pair<int, int> > model_selected_indices;
- GetSelectedModelIndices(&model_selected_indices);
-
- int selected_row = gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(sort_list_store_), NULL);
- for (std::set<std::pair<int, int> >::reverse_iterator i =
- model_selected_indices.rbegin();
- i != model_selected_indices.rend(); ++i) {
- model_->RemoveException(i->first);
- selected_row = std::min(selected_row, i->second);
- }
-
- int row_count = model_->RowCount();
- if (row_count <= 0)
- return;
- if (selected_row >= row_count)
- selected_row = row_count - 1;
- gtk_tree::SelectAndFocusRowNum(selected_row,
- GTK_TREE_VIEW(treeview_));
-
- UpdateButtonState();
-}
-
-void ContentExceptionsWindowGtk::RemoveAll(GtkWidget* widget) {
- model_->RemoveAll();
- UpdateButtonState();
-}
-
-std::string ContentExceptionsWindowGtk::GetWindowTitle() const {
- switch (model_->content_type()) {
- case CONTENT_SETTINGS_TYPE_COOKIES:
- return l10n_util::GetStringUTF8(IDS_COOKIE_EXCEPTION_TITLE);
- case CONTENT_SETTINGS_TYPE_IMAGES:
- return l10n_util::GetStringUTF8(IDS_IMAGES_EXCEPTION_TITLE);
- case CONTENT_SETTINGS_TYPE_JAVASCRIPT:
- return l10n_util::GetStringUTF8(IDS_JS_EXCEPTION_TITLE);
- case CONTENT_SETTINGS_TYPE_PLUGINS:
- return l10n_util::GetStringUTF8(IDS_PLUGINS_EXCEPTION_TITLE);
- case CONTENT_SETTINGS_TYPE_POPUPS:
- return l10n_util::GetStringUTF8(IDS_POPUP_EXCEPTION_TITLE);
- default:
- NOTREACHED();
- }
- return std::string();
-}
-
-void ContentExceptionsWindowGtk::GetSelectedModelIndices(
- std::set<std::pair<int, int> >* indices) {
- GtkTreeModel* model;
- GList* paths = gtk_tree_selection_get_selected_rows(treeview_selection_,
- &model);
- for (GList* item = paths; item; item = item->next) {
- GtkTreePath* sorted_path = reinterpret_cast<GtkTreePath*>(item->data);
- int sorted_row = gtk_tree::GetRowNumForPath(sorted_path);
- GtkTreePath* path = gtk_tree_model_sort_convert_path_to_child_path(
- GTK_TREE_MODEL_SORT(sort_list_store_), sorted_path);
- int row = gtk_tree::GetRowNumForPath(path);
- gtk_tree_path_free(path);
- indices->insert(std::make_pair(row, sorted_row));
- }
-
- g_list_foreach(paths, (GFunc)gtk_tree_path_free, NULL);
- g_list_free(paths);
-}
-
-void ContentExceptionsWindowGtk::OnTreeViewRowActivate(
- GtkWidget* sender,
- GtkTreePath* path,
- GtkTreeViewColumn* column) {
- Edit(sender);
-}
-
-void ContentExceptionsWindowGtk::OnWindowDestroy(GtkWidget* widget) {
- instances[model_->content_type()] = NULL;
- MessageLoop::current()->DeleteSoon(FROM_HERE, this);
-}
-
-void ContentExceptionsWindowGtk::OnTreeSelectionChanged(
- GtkWidget* selection) {
- UpdateButtonState();
-}

Powered by Google App Engine
This is Rietveld 408576698