[gnumeric] for Sameer Morar, modify quit dialog [#527133]



commit 2a34ba2927fa8565714d3be4163e2df17f01c8f0
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date:   Sat Nov 6 21:30:30 2010 -0600

    for Sameer Morar, modify quit dialog [#527133]
    
    2010-11-07  Sameer Morar <smorar gmail com>
    
    	* dialog-quit.c (foreach_is_file_set): new
    	(files_set): new
    	(cb_list_row_changed_save_sensitivity): new
    	(cb_list_row_changed_discard_sensitivity): new
    	(show_quit_dialog): Move Select all and Clear selection buttons to a
    	row above the Don't Quit and Save Selected buttons. Add a Discard
    	button. The Save Selected button becomes insensitive and the Discard
    	button becomes sensitive when no files are set to be saved. [#527133]

 NEWS                      |    2 +
 src/dialogs/ChangeLog     |   11 +++
 src/dialogs/dialog-quit.c |  159 +++++++++++++++++++++++++++++++++------------
 3 files changed, 130 insertions(+), 42 deletions(-)
---
diff --git a/NEWS b/NEWS
index 21f46cb..696fe43 100644
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,8 @@ Morten:
 
 Sameer Morar:
 	* Add key combinations to move sheets. [#634139]
+	* Modify quit dialog to be able to discard multiple files without 
+	saving.  [#527133]	
 
 --------------------------------------------------------------------------
 Gnumeric 1.10.11
diff --git a/src/dialogs/ChangeLog b/src/dialogs/ChangeLog
index 8260346..9d2a4e1 100644
--- a/src/dialogs/ChangeLog
+++ b/src/dialogs/ChangeLog
@@ -1,3 +1,14 @@
+2010-11-07  Sameer Morar <smorar gmail com>
+
+	* dialog-quit.c (foreach_is_file_set): new
+	(files_set): new
+	(cb_list_row_changed_save_sensitivity): new
+	(cb_list_row_changed_discard_sensitivity): new
+	(show_quit_dialog): Move Select all and Clear selection buttons to a
+	row above the Don't Quit and Save Selected buttons. Add a Discard
+	button. The Save Selected button becomes insensitive and the Discard
+	button becomes sensitive when no files are set to be saved. [#527133]
+
 2010-11-06  Andreas J. Guelzow <aguelzow pyrshep ca>
 
 	* cell-sort.ui: add tooltip text for the checkboxes
diff --git a/src/dialogs/dialog-quit.c b/src/dialogs/dialog-quit.c
index 85b70ce..b850883 100644
--- a/src/dialogs/dialog-quit.c
+++ b/src/dialogs/dialog-quit.c
@@ -1,3 +1,5 @@
+/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
 /*
  * dialog-quit.c:
  *   Dialog for quit (selecting what to save)
@@ -84,6 +86,32 @@ url_renderer_func (GtkTreeViewColumn *tree_column,
 	g_free (filename);
 }
 
+static gboolean
+foreach_is_file_set (GtkTreeModel *model, GtkTreePath *path,
+		     GtkTreeIter *iter, gboolean *data)
+{
+	gboolean value;
+
+	gtk_tree_model_get (GTK_TREE_MODEL (model), iter,
+			    QUIT_COL_CHECK, &value, -1);
+
+	*data = value;
+
+	return value;
+}
+
+static gboolean
+files_set (GtkTreeModel *model)
+{
+	gboolean files_set_state = FALSE;
+
+	gtk_tree_model_foreach (GTK_TREE_MODEL (model),
+				(GtkTreeModelForeachFunc) foreach_is_file_set,
+				&files_set_state);
+
+	return files_set_state;
+}
+
 static void
 cb_toggled_save (GtkCellRendererToggle *cell,
 		 gchar                 *path_string,
@@ -102,7 +130,7 @@ cb_toggled_save (GtkCellRendererToggle *cell,
 	} else {
 		g_warning ("Did not get a valid iterator");
 	}
-
+	
 	gtk_tree_path_free (path);
 }
 
@@ -111,7 +139,7 @@ set_all (GtkTreeModel *model, gboolean value)
 {
 	GtkTreeIter iter;
 	gboolean ok = gtk_tree_model_get_iter_first (model, &iter);
-
+	
 	while (ok) {
 		gtk_list_store_set (GTK_LIST_STORE (model), &iter,
 				    QUIT_COL_CHECK, value, -1);
@@ -133,6 +161,32 @@ cb_clear_all (G_GNUC_UNUSED GtkWidget *button,
 	set_all (model, FALSE);
 }
 
+static void
+cb_list_row_changed_save_sensitivity (GtkListStore *list, GtkTreePath *path_string,
+				      GtkTreeIter *iter, GtkWidget *widget)
+{
+	GtkTreeModel *model = GTK_TREE_MODEL (list);
+	
+	if (files_set (model) == TRUE)
+		gtk_widget_set_sensitive (GTK_WIDGET (widget), TRUE);
+	else
+		gtk_widget_set_sensitive (GTK_WIDGET (widget), FALSE);
+}
+
+static void
+cb_list_row_changed_discard_sensitivity (GtkListStore *list, 
+					 GtkTreePath *path_string,
+					 GtkTreeIter *iter, 
+					 GtkWidget *widget)
+{
+	GtkTreeModel *model = GTK_TREE_MODEL (list);
+
+	if (files_set (model) == TRUE)
+		gtk_widget_set_sensitive (GTK_WIDGET (widget), FALSE);
+	else
+		gtk_widget_set_sensitive (GTK_WIDGET (widget), TRUE);
+}
+
 static gboolean
 show_quit_dialog (GList *dirty, WBCGtk *wbcg)
 {
@@ -159,56 +213,44 @@ show_quit_dialog (GList *dirty, WBCGtk *wbcg)
 		 wbcg_toplevel (wbcg), 0,
 		 NULL);
 
+	button = go_gtk_dialog_add_button (GTK_DIALOG (dialog),
+					   _("_Discard All"),
+					   GTK_STOCK_DELETE,
+					   GTK_RESPONSE_NO);
+	go_widget_set_tooltip_text (GTK_WIDGET (button), _("Discard changes in all files"));
+	
+	if (multiple)
+		g_signal_connect (G_OBJECT (list),
+				  "row-changed",
+				  G_CALLBACK (cb_list_row_changed_discard_sensitivity),
+				  GTK_WIDGET (button));
+	
+	button = go_gtk_dialog_add_button (GTK_DIALOG (dialog),
+					   _("Don't Quit"),
+					   GTK_STOCK_CANCEL,
+					   GTK_RESPONSE_CANCEL);
+	go_widget_set_tooltip_text (button, _("Resume editing"));
+	
 	if (multiple) {
-		button = go_gtk_dialog_add_button (dialog,
-						   _("Select _all"),
-						   GTK_STOCK_SELECT_ALL,
-						   RESPONSE_ALL);
-		go_widget_set_tooltip_text
-			(button,
-			 _("Select all documents for saving"));
-		g_signal_connect (G_OBJECT (button), "clicked",
-				  G_CALLBACK (cb_select_all),
-				  list);
-
-		button = go_gtk_dialog_add_button (dialog,
-						   _("_Clear Selection"),
-						   GTK_STOCK_CLEAR,
-						   RESPONSE_NONE);
-		go_widget_set_tooltip_text
-			(button,
-			 _("Unselect all documents for saving"));
-		g_signal_connect (G_OBJECT (button), "clicked",
-				  G_CALLBACK (cb_clear_all),
-				  list);
-
-		button = go_gtk_dialog_add_button (dialog,
+		button = go_gtk_dialog_add_button (GTK_DIALOG (dialog),
 						   _("_Save Selected"),
 						   GTK_STOCK_SAVE,
 						   GTK_RESPONSE_OK);
-		go_widget_set_tooltip_text
-			(button,
-			 _("Save selected documents and then quit"));
+		go_widget_set_tooltip_text (GTK_WIDGET (button),
+					    _("Save selected documents and then quit"));
+		
+		g_signal_connect (G_OBJECT (list),
+				  "row-changed",
+				  G_CALLBACK (cb_list_row_changed_save_sensitivity),
+				  GTK_WIDGET (button));
 	} else {
-		button = go_gtk_dialog_add_button (dialog,
-						   _("_Discard"),
-						   GTK_STOCK_DELETE,
-						   GTK_RESPONSE_NO);
-		go_widget_set_tooltip_text (button, _("Discard changes"));
-
-		button = go_gtk_dialog_add_button (dialog,
+		button = go_gtk_dialog_add_button (GTK_DIALOG (dialog),
 						   _("Save"),
 						   GTK_STOCK_SAVE,
 						   GTK_RESPONSE_OK);
 		go_widget_set_tooltip_text (button, _("Save document"));
 	}
-
-	button = go_gtk_dialog_add_button (dialog,
-					   _("Don't Quit"),
-					   GTK_STOCK_CANCEL,
-					   GTK_RESPONSE_CANCEL);
-	go_widget_set_tooltip_text (button, _("Resume editing"));
-
+	
 	scrollw = gtk_scrolled_window_new (NULL, NULL);
 	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollw),
 					     GTK_SHADOW_IN);
@@ -217,6 +259,39 @@ show_quit_dialog (GList *dirty, WBCGtk *wbcg)
 	gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (dialog)),
 			    scrollw, TRUE, TRUE, 0);
 
+	if (multiple) {
+		GtkWidget *hbox = gtk_hbutton_box_new ();
+		gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END);
+		gtk_box_set_spacing (GTK_BOX (hbox), 5);
+
+		button = go_gtk_button_new_with_stock (_("Select _All"),
+						       GTK_STOCK_SELECT_ALL);
+		go_widget_set_tooltip_text (GTK_WIDGET (button),
+					    _("Select all documents for saving"));
+		
+		g_signal_connect (G_OBJECT (button), "clicked",
+				  G_CALLBACK (cb_select_all),
+				  list);
+		
+		gtk_box_pack_end (GTK_BOX (hbox),
+				    GTK_WIDGET (button), FALSE, TRUE, 0);
+		
+		button = go_gtk_button_new_with_stock (_("_Clear Selection"),
+						       GTK_STOCK_CLEAR);
+		go_widget_set_tooltip_text (GTK_WIDGET(button),
+					    _("Unselect all documents for saving"));
+		
+		g_signal_connect (G_OBJECT (button), "clicked",
+				  G_CALLBACK (cb_clear_all),
+				  list);
+
+		gtk_box_pack_end (GTK_BOX (hbox),
+				  GTK_WIDGET (button), FALSE, TRUE, 0);
+
+		gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (dialog)),
+				    GTK_WIDGET (hbox), FALSE, FALSE, 0);
+	}
+
 	gtk_dialog_set_default_response (dialog, GTK_RESPONSE_OK);
 
 	tree = (GtkTreeView *)gtk_tree_view_new ();



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]