[gnumeric] enable/disable Repeat Export menu item as appropriate



commit a3e33b35b212f02f06d187c1e5169dacd6932629
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date:   Tue Aug 7 22:36:18 2012 -0600

    enable/disable Repeat Export menu item as appropriate
    
    2012-08-07  Andreas J. Guelzow <aguelzow pyrshep ca>
    
    	* src/gui-file.c (gui_file_save_as): use workbook_get_last_export_uri
    	and workbook_get_file_exporter
    	(gui_file_export_repeat): ditto
    	* src/wbc-gtk.c (wbcg_menu_state_update): handle MS_FILE_EXPORT_IMPORT
    	* src/workbook-control.h (MS_FILE_EXPORT_IMPORT): new
    	* src/workbook-view.c (wb_view_save_as): use workbook_set_last_export_uri
    	* src/workbook.c (workbook_set_file_exporter): new
    	(workbook_set_last_export_uri): new
    	(cb_exporter_finalize): use workbook_set_file_exporter
    	(workbook_dispose): use workbook_set_last_export_uri
    	* src/workbook.h (workbook_set_file_exporter): new
    	(workbook_set_last_export_uri): new

 ChangeLog              |   15 +++++++++++++++
 src/gui-file.c         |   15 ++++++++-------
 src/wbc-gtk.c          |   17 +++++++++++++++++
 src/workbook-control.h |    5 +++--
 src/workbook-view.c    |   13 +++++--------
 src/workbook.c         |   27 +++++++++++++++++++++------
 src/workbook.h         |    4 +++-
 7 files changed, 72 insertions(+), 24 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 604358a..9ab80fe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
 2012-08-07  Andreas J. Guelzow <aguelzow pyrshep ca>
 
+	* src/gui-file.c (gui_file_save_as): use workbook_get_last_export_uri
+	and workbook_get_file_exporter
+	(gui_file_export_repeat): ditto
+	* src/wbc-gtk.c (wbcg_menu_state_update): handle MS_FILE_EXPORT_IMPORT
+	* src/workbook-control.h (MS_FILE_EXPORT_IMPORT): new
+	* src/workbook-view.c (wb_view_save_as): use workbook_set_last_export_uri
+	* src/workbook.c (workbook_set_file_exporter): new
+	(workbook_set_last_export_uri): new
+	(cb_exporter_finalize): use workbook_set_file_exporter
+	(workbook_dispose): use workbook_set_last_export_uri
+	* src/workbook.h (workbook_set_file_exporter): new
+	(workbook_set_last_export_uri): new
+
+2012-08-07  Andreas J. Guelzow <aguelzow pyrshep ca>
+
 	* src/stf.c (stf_read_workbook_auto_csvtab): use the csv exporter in the
 	saveinfo if appropriate
 
diff --git a/src/gui-file.c b/src/gui-file.c
index 11c7086..3c527fd 100644
--- a/src/gui-file.c
+++ b/src/gui-file.c
@@ -592,10 +592,10 @@ gui_file_save_as (WBCGtk *wbcg, WorkbookView *wb_view, file_save_as_t type,
 	gtk_combo_box_set_active (format_combo, g_list_index (savers, fs));
 
 	/* Set default file name */
-	if (wb->last_export_uri && (type == FILE_SAVE_AS_EXPORT) && fs == wb->file_exporter)
-		wb_uri = wb->last_export_uri;
-	else
+	if (!(wb_uri = workbook_get_last_export_uri (wb)) || (type != FILE_SAVE_AS_EXPORT) 
+	    || (fs !=  workbook_get_file_exporter (wb)))
 		wb_uri = go_doc_get_uri (GO_DOC (wb));
+
 	if (wb_uri != NULL) {
 		char *basename = go_basename_from_uri (wb_uri);
 		char *dot = basename ? strrchr (basename, '.') : NULL;
@@ -709,9 +709,10 @@ gui_file_export_repeat (WBCGtk *wbcg)
 {
 	WorkbookView *wb_view = wb_control_view (WORKBOOK_CONTROL (wbcg));
 	Workbook *wb = wb_view_get_workbook (wb_view);
-	GOFileSaver *fs = wb->file_exporter;
+	GOFileSaver *fs = workbook_get_file_exporter (wb);
+	gchar const *last_uri = workbook_get_last_export_uri (wb);
 
-	if (fs != NULL &&  wb->last_export_uri != NULL) {
+	if (fs != NULL && last_uri != NULL) {
 		char const *msg;
 		GtkWidget *dialog;
 
@@ -729,14 +730,14 @@ gui_file_export_repeat (WBCGtk *wbcg)
 							     GTK_DIALOG_DESTROY_WITH_PARENT,
 							     GTK_MESSAGE_QUESTION,
 							     GTK_BUTTONS_YES_NO,
-							     msg, wb->last_export_uri, 
+							     msg, last_uri, 
 							     go_file_saver_get_description (fs));
 		gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
 
 		if (GTK_RESPONSE_YES ==
 		    go_gtk_dialog_run (GTK_DIALOG (dialog), wbcg_toplevel (wbcg))) {
 			/* We need to copy wb->last_export_uri since it will be reset during saving */
-			gchar *uri = g_strdup (wb->last_export_uri);
+			gchar *uri = g_strdup (last_uri);
 			if(wb_view_save_as (wb_view, fs, uri, GO_CMD_CONTEXT (wbcg))) {
 				workbook_update_history (wb, FILE_SAVE_AS_EXPORT);
 				g_free (uri);
diff --git a/src/wbc-gtk.c b/src/wbc-gtk.c
index 277c3d5..73dbd1d 100644
--- a/src/wbc-gtk.c
+++ b/src/wbc-gtk.c
@@ -1627,6 +1627,23 @@ wbcg_menu_state_update (WorkbookControl *wbc, int flags)
 		wbc_gtk_set_action_sensitivity
 			(wbcg, "InsertSortIncreasing", sel_is_vector);
 	}
+	if (MS_FILE_EXPORT_IMPORT & flags) {
+		Workbook *wb = wb_control_get_workbook (wbc);
+		gboolean has_export_info = workbook_get_file_exporter (wb) && 
+			workbook_get_last_export_uri (wb);
+		wbc_gtk_set_action_sensitivity (wbcg, "DataExportRepeat", has_export_info);
+		if (has_export_info) {
+			gchar *base = go_basename_from_uri (workbook_get_last_export_uri (wb));
+			gchar *new_label = g_strdup_printf (_("Repeat Export to %s"), 
+							    base);
+			g_free (base);
+			wbc_gtk_set_action_label (wbcg, "DataExportRepeat", NULL, 
+						  new_label, N_("Repeat the last data export"));
+			g_free (new_label);
+		} else
+			wbc_gtk_set_action_label (wbcg, "DataExportRepeat", NULL, 
+						  N_("Repeat Export"), N_("Repeat the last data export"));
+	}	
 	{
 		gboolean const has_slicer = (NULL != sv_editpos_in_slicer (sv));
 		char const* label = has_slicer
diff --git a/src/workbook-control.h b/src/workbook-control.h
index b904b1d..013480d 100644
--- a/src/workbook-control.h
+++ b/src/workbook-control.h
@@ -59,7 +59,8 @@ enum {
 	MS_SELECT_OBJECT    = 1 << 13,
 	MS_FILTER_STATE_CHANGED = 1 << 14,
 	MS_COMMENT_LINKS_RANGE  = 1 << 15,
-	MS_COMMENT_LINKS    = 1 << 16
+	MS_COMMENT_LINKS    = 1 << 16,
+	MS_FILE_EXPORT_IMPORT = 1 << 17
 };
 
 #define MS_ALL \
@@ -67,7 +68,7 @@ enum {
      MS_SHOWHIDE_DETAIL | MS_PASTE_SPECIAL |				    \
      MS_PRINT_SETUP | MS_SEARCH_REPLACE | MS_DEFINE_NAME | MS_CONSOLIDATE | \
      MS_FREEZE_VS_THAW | MS_ADD_VS_REMOVE_FILTER | MS_SHOW_PRINTAREA |      \
-     MS_PAGE_BREAKS | MS_SELECT_OBJECT | MS_FILTER_STATE_CHANGED)
+     MS_PAGE_BREAKS | MS_SELECT_OBJECT | MS_FILTER_STATE_CHANGED | MS_FILE_EXPORT_IMPORT)
 #define MS_GURU_MENU_ITEMS \
     (MS_PRINT_SETUP | MS_SEARCH_REPLACE | MS_DEFINE_NAME | MS_CONSOLIDATE)
 
diff --git a/src/workbook-view.c b/src/workbook-view.c
index d1c843f..c81c2be 100644
--- a/src/workbook-view.c
+++ b/src/workbook-view.c
@@ -1120,10 +1120,8 @@ wb_view_save_as (WorkbookView *wbv, GOFileSaver *fs, char const *uri,
 				/* See 634792.  */
 				go_doc_set_pristine (GO_DOC (wb), FALSE);
 			}
-		} else {
-			g_free (wb->last_export_uri);
-			wb->last_export_uri = g_strdup (uri);
-		}
+		} else 
+			workbook_set_last_export_uri (wb, g_strdup (uri));
 	}
 	if (has_error || has_warning)
 		go_io_error_display (io_context);
@@ -1262,10 +1260,9 @@ wb_view_new_from_input (GsfInput *input,
 			workbook_optimize_style (new_wb);
 			workbook_recalc (new_wb);
 			go_doc_set_dirty (GO_DOC (new_wb), FALSE);
-			if (new_wb->file_exporter && optional_uri) {
-				g_free (new_wb->last_export_uri);
-				new_wb->last_export_uri = g_strdup (optional_uri);
-			}
+			if (optional_uri && workbook_get_file_exporter (new_wb))
+				workbook_set_last_export_uri 
+					(new_wb, g_strdup (optional_uri));
 		}
 	} else
 		go_cmd_context_error_import (GO_CMD_CONTEXT (io_context),
diff --git a/src/workbook.c b/src/workbook.c
index 9d7b7d1..54e4296 100644
--- a/src/workbook.c
+++ b/src/workbook.c
@@ -75,7 +75,7 @@ cb_exporter_finalize (Workbook *wb, GOFileSaver *saver)
 	g_return_if_fail (GO_IS_FILE_SAVER (saver));
 	g_return_if_fail (IS_WORKBOOK (wb));
 	g_return_if_fail (wb->file_exporter == saver);
-	wb->file_exporter = NULL;
+	workbook_set_file_exporter (wb, NULL);
 }
 
 void
@@ -117,9 +117,7 @@ workbook_dispose (GObject *wb_object)
 		workbook_set_saveinfo (wb, GO_FILE_FL_AUTO, NULL);
 	if (wb->file_exporter)
 		workbook_set_saveinfo (wb, GO_FILE_FL_WRITE_ONLY, NULL);
-
-	g_free (wb->last_export_uri);
-	wb->last_export_uri = NULL;
+	workbook_set_last_export_uri (wb, NULL);
 
 	/* Remove all the sheet controls to avoid displaying while we exit */
 	WORKBOOK_FOREACH_CONTROL (wb, view, control,
@@ -425,8 +423,7 @@ workbook_set_saveinfo (Workbook *wb, GOFileFormatLevel level, GOFileSaver *fs)
 		if (wb->file_exporter != NULL)
 			g_object_weak_unref (G_OBJECT (wb->file_exporter),
 					     (GWeakNotify) cb_exporter_finalize, wb);
-
-		wb->file_exporter = fs;
+		workbook_set_file_exporter (wb, fs);
 		if (fs != NULL)
 			g_object_weak_ref (G_OBJECT (fs),
 					   (GWeakNotify) cb_exporter_finalize, wb);
@@ -473,6 +470,24 @@ workbook_get_last_export_uri (Workbook *wb)
 	return wb->last_export_uri;
 }
 
+void         
+workbook_set_file_exporter (Workbook *wb, GOFileSaver *fs)
+{
+	wb->file_exporter = fs;
+	WORKBOOK_FOREACH_CONTROL (wb, wbv, wbc, 
+				  wb_control_menu_state_update (wbc, MS_FILE_EXPORT_IMPORT););
+}
+
+void         
+workbook_set_last_export_uri (Workbook *wb, gchar *uri)
+{
+	g_free (wb->last_export_uri);
+	wb->last_export_uri = uri;
+	WORKBOOK_FOREACH_CONTROL (wb, wbv, wbc, 
+				  wb_control_menu_state_update (wbc, MS_FILE_EXPORT_IMPORT););
+}
+
+
 /**
  * workbook_foreach_cell_in_range:
  *
diff --git a/src/workbook.h b/src/workbook.h
index 9a3d8b3..b781a7f 100644
--- a/src/workbook.h
+++ b/src/workbook.h
@@ -51,7 +51,9 @@ gboolean       workbook_set_saveinfo	(Workbook *wb, GOFileFormatLevel lev,
 void           workbook_update_history  (Workbook *wb, file_save_as_t type);
 GOFileSaver *workbook_get_file_saver	(Workbook *wb);
 GOFileSaver *workbook_get_file_exporter	(Workbook *wb);
-gchar const *workbook_get_last_export_uri	(Workbook *wb);
+gchar const *workbook_get_last_export_uri (Workbook *wb);
+void         workbook_set_file_exporter	  (Workbook *wb, GOFileSaver *fs);
+void         workbook_set_last_export_uri (Workbook *wb, gchar *uri);
 
 /* See also sheet_cell_foreach_range */
 GnmValue   *workbook_foreach_cell_in_range (GnmEvalPos const  *pos,



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