Index: chrome/browser/gtk/options/simple_content_exceptions_window.cc |
=================================================================== |
--- chrome/browser/gtk/options/simple_content_exceptions_window.cc (revision 71352) |
+++ chrome/browser/gtk/options/simple_content_exceptions_window.cc (working copy) |
@@ -1,212 +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/simple_content_exceptions_window.h" |
- |
-#include "app/l10n_util.h" |
-#include "base/message_loop.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/gtk/gtk_util.h" |
-#include "gfx/gtk_util.h" |
-#include "grit/generated_resources.h" |
-#include "grit/locale_settings.h" |
- |
-namespace { |
- |
-// Singleton for exception window. |
-SimpleContentExceptionsWindow* instance = NULL; |
- |
-enum { |
- COL_ACTION = gtk_tree::TableAdapter::COL_LAST_ID, |
- COL_COUNT |
-}; |
- |
-} // namespace |
- |
-// static |
-void SimpleContentExceptionsWindow::ShowExceptionsWindow( |
- GtkWindow* parent, RemoveRowsTableModel* model, int title_message_id) { |
- DCHECK(model); |
- scoped_ptr<RemoveRowsTableModel> owned_model(model); |
- |
- if (!instance) { |
- instance = new SimpleContentExceptionsWindow( |
- parent, owned_model.release(), title_message_id); |
- } else { |
- gtk_util::PresentWindow(instance->dialog_, 0); |
- } |
-} |
- |
-SimpleContentExceptionsWindow::SimpleContentExceptionsWindow( |
- GtkWindow* parent, |
- RemoveRowsTableModel* model, |
- int title_message_id) |
- : ignore_selection_changes_(false) { |
- // Build the model adapters that translate views and TableModels into |
- // something GTK can use. |
- list_store_ = gtk_list_store_new(COL_COUNT, |
- G_TYPE_STRING, |
- G_TYPE_BOOLEAN, |
- G_TYPE_BOOLEAN, |
- G_TYPE_INT, |
- G_TYPE_INT, |
- G_TYPE_BOOLEAN, |
- G_TYPE_STRING); |
- treeview_ = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store_)); |
- g_object_unref(list_store_); |
- |
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview_), TRUE); |
- gtk_tree_view_set_row_separator_func( |
- GTK_TREE_VIEW(treeview_), |
- gtk_tree::TableAdapter::OnCheckRowIsSeparator, |
- NULL, |
- NULL); |
- |
- // Set up the properties of the treeview |
- GtkTreeViewColumn* hostname_column = gtk_tree_view_column_new_with_attributes( |
- l10n_util::GetStringUTF8(IDS_EXCEPTIONS_HOSTNAME_HEADER).c_str(), |
- gtk_cell_renderer_text_new(), |
- "text", gtk_tree::TableAdapter::COL_TITLE, |
- "weight", gtk_tree::TableAdapter::COL_WEIGHT, |
- "weight-set", gtk_tree::TableAdapter::COL_WEIGHT_SET, |
- NULL); |
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_), hostname_column); |
- |
- 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, |
- NULL); |
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_), action_column); |
- |
- treeview_selection_ = gtk_tree_view_get_selection( |
- GTK_TREE_VIEW(treeview_)); |
- gtk_tree_selection_set_mode(treeview_selection_, GTK_SELECTION_MULTIPLE); |
- gtk_tree_selection_set_select_function( |
- treeview_selection_, |
- gtk_tree::TableAdapter::OnSelectionFilter, |
- NULL, |
- NULL); |
- g_signal_connect(treeview_selection_, "changed", |
- G_CALLBACK(OnTreeSelectionChangedThunk), this); |
- |
- // Bind |list_store_| to our C++ model. |
- model_.reset(model); |
- 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( |
- l10n_util::GetStringUTF8(title_message_id).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, 400); |
- // 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); |
- |
- // 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(hbox), scrolled, TRUE, TRUE, 0); |
- |
- GtkWidget* button_box = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
- |
- 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_SIMPLE_CONTENT_EXCEPTION_DIALOG_WIDTH_CHARS, |
- IDS_SIMPLE_CONTENT_EXCEPTION_DIALOG_HEIGHT_LINES, |
- true); |
- |
- g_signal_connect(dialog_, "response", G_CALLBACK(gtk_widget_destroy), NULL); |
- g_signal_connect(dialog_, "destroy", G_CALLBACK(OnWindowDestroyThunk), this); |
-} |
- |
-SimpleContentExceptionsWindow::~SimpleContentExceptionsWindow() {} |
- |
-void SimpleContentExceptionsWindow::SetColumnValues(int row, |
- GtkTreeIter* iter) { |
- string16 hostname = model_->GetText(row, IDS_EXCEPTIONS_HOSTNAME_HEADER); |
- gtk_list_store_set(list_store_, iter, gtk_tree::TableAdapter::COL_TITLE, |
- UTF16ToUTF8(hostname).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); |
-} |
- |
-void SimpleContentExceptionsWindow::OnAnyModelUpdateStart() { |
- ignore_selection_changes_ = true; |
-} |
- |
-void SimpleContentExceptionsWindow::OnAnyModelUpdate() { |
- ignore_selection_changes_ = false; |
-} |
- |
-void SimpleContentExceptionsWindow::UpdateButtonState() { |
- int row_count = gtk_tree_model_iter_n_children( |
- GTK_TREE_MODEL(list_store_), NULL); |
- |
- RemoveRowsTableModel::Rows rows; |
- std::set<int> indices; |
- gtk_tree::GetSelectedIndices(treeview_selection_, &indices); |
- model_adapter_->MapListStoreIndicesToModelRows(indices, &rows); |
- gtk_widget_set_sensitive(remove_button_, model_->CanRemoveRows(rows)); |
- gtk_widget_set_sensitive(remove_all_button_, row_count > 0); |
-} |
- |
-void SimpleContentExceptionsWindow::Remove(GtkWidget* widget) { |
- RemoveRowsTableModel::Rows rows; |
- std::set<int> indices; |
- gtk_tree::GetSelectedIndices(treeview_selection_, &indices); |
- model_adapter_->MapListStoreIndicesToModelRows(indices, &rows); |
- model_->RemoveRows(rows); |
- UpdateButtonState(); |
-} |
- |
-void SimpleContentExceptionsWindow::RemoveAll(GtkWidget* widget) { |
- model_->RemoveAll(); |
- UpdateButtonState(); |
-} |
- |
-void SimpleContentExceptionsWindow::OnWindowDestroy(GtkWidget* widget) { |
- instance = NULL; |
- MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
-} |
- |
-void SimpleContentExceptionsWindow::OnTreeSelectionChanged( |
- GtkWidget* selection) { |
- if (!ignore_selection_changes_) |
- UpdateButtonState(); |
-} |