[gnumeric] Permit choice whether to print sheet objejcts.



commit 17d1046f28d819f36ee8977d3a2556f0414cd79c
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date:   Fri Oct 1 11:06:13 2010 -0600

    Permit choice whether to print sheet objejcts.
    
    2010-10-01  Andreas J. Guelzow <aguelzow pyrshep ca>
    
    	* sheet-object-widget.c (sheet_widget_button_init_full: disable
    	  printing by default
    	(sheet_widget_adjustment_init_full): ditto
    	(sheet_widget_list_base_init): ditto
    	* sheet-object.c (sheet_object_set_print_flag): new
    	* sheet-object.h (sheet_object_set_print_flag): new
    	* xml-sax-read.c (xml_sax_read_obj): read print flag
    	* xml-sax-write.c (xml_write_objects): write print flag
    
    2010-10-01  Andreas J. Guelzow <aguelzow pyrshep ca>
    
    	* sheetobject-size.glade: add "Do not print" checkbox
    	* dialog-sheetobject-size.c (dialog_so_size_button_sensitivity):
    	  handle do-not-print
    	(cb_dialog_so_size_apply_clicked): ditto
    	(cb_dialog_so_size_ok_clicked): ditto
    	(cb_dialog_so_size_print_check_toggled): new
    	(set_print_flag): new
    	(dialog_so_size): connect do-not-print checkbox

 ChangeLog                             |   11 +++++
 NEWS                                  |    1 +
 src/dialogs/ChangeLog                 |   11 +++++
 src/dialogs/dialog-sheetobject-size.c |   76 ++++++++++++++++++++++++++++-----
 src/dialogs/sheetobject-size.glade    |   31 ++++++++++---
 src/sheet-object-widget.c             |   10 ++++
 src/sheet-object.c                    |   10 ++++
 src/sheet-object.h                    |    1 +
 src/xml-sax-read.c                    |    9 +++-
 src/xml-sax-write.c                   |    4 ++
 10 files changed, 142 insertions(+), 22 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index a18c2d8..dfd1eb2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2010-10-01  Andreas J. Guelzow <aguelzow pyrshep ca>
+
+	* sheet-object-widget.c (sheet_widget_button_init_full: disable 
+	  printing by default
+	(sheet_widget_adjustment_init_full): ditto
+	(sheet_widget_list_base_init): ditto
+	* sheet-object.c (sheet_object_set_print_flag): new
+	* sheet-object.h (sheet_object_set_print_flag): new
+	* xml-sax-read.c (xml_sax_read_obj): read print flag
+	* xml-sax-write.c (xml_write_objects): write print flag
+
 2010-09-30  Andreas J. Guelzow <aguelzow pyrshep ca>
 
 	* src/sheet-object-widget.c (sheet_widget_draw_cairo): warn always
diff --git a/NEWS b/NEWS
index 3ab9015..1a29621 100644
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,7 @@ Andreas:
 	* Set ODF files to save by default as ODF files. [#629962]
 	* Fix ssconvert crash on form controls. [#630335]
 	* Improve printing of the form controls.
+	* Permit choice whether to print sheet objejcts.
 
 Jean:
 	* Export/import tick label rotation angle. [#629675]
diff --git a/src/dialogs/ChangeLog b/src/dialogs/ChangeLog
index 25d0470..301c64b 100644
--- a/src/dialogs/ChangeLog
+++ b/src/dialogs/ChangeLog
@@ -1,3 +1,14 @@
+2010-10-01  Andreas J. Guelzow <aguelzow pyrshep ca>
+
+	* sheetobject-size.glade: add "Do not print" checkbox
+	* dialog-sheetobject-size.c (dialog_so_size_button_sensitivity):
+	  handle do-not-print
+	(cb_dialog_so_size_apply_clicked): ditto
+	(cb_dialog_so_size_ok_clicked): ditto
+	(cb_dialog_so_size_print_check_toggled): new
+	(set_print_flag): new
+	(dialog_so_size): connect do-not-print checkbox
+
 2010-09-15  Andreas J. Guelzow <aguelzow pyrshep ca>
 
 	* dialog-sheet-order.c (cb_color_changed_fore): handle multiple 
diff --git a/src/dialogs/dialog-sheetobject-size.c b/src/dialogs/dialog-sheetobject-size.c
index a8df6cb..99caae5 100644
--- a/src/dialogs/dialog-sheetobject-size.c
+++ b/src/dialogs/dialog-sheetobject-size.c
@@ -39,6 +39,7 @@
 #include <application.h>
 #include <workbook-cmd-format.h>
 #include <sheet-object-widget.h>
+#include <sheet-object-impl.h>
 #include <sheet-control-gui.h>
 
 #include <glade/glade.h>
@@ -65,6 +66,7 @@ typedef struct {
 	GtkWidget          *ypoints;
 	GtkSpinButton      *yspin;
 	GtkEntry           *nameentry;
+	GtkWidget          *print_check;
 
 	SheetObject        *so;
 	SheetObjectAnchor  *old_anchor;
@@ -74,6 +76,7 @@ typedef struct {
 	gboolean            so_size_needs_restore;
 	gboolean            so_pos_needs_restore;
 	gboolean            so_name_changed;
+	gboolean            so_print_check_changed;
 } SOSizeState;
 
 static void
@@ -92,7 +95,8 @@ dialog_so_size_button_sensitivity (SOSizeState *state)
 {
 	gboolean sensitive = state->so_size_needs_restore || 
 		state->so_pos_needs_restore || 
-		state->so_name_changed;
+		state->so_name_changed ||
+		state->so_print_check_changed;
 	gtk_widget_set_sensitive 
 		(state->ok_button, sensitive);
 	gtk_widget_set_sensitive 
@@ -192,11 +196,26 @@ set_params (SheetObject *so, char *name)
 		 g_object_unref, g_free);
 }
 
+static GOUndo *
+set_print_flag (SheetObject *so, gboolean print)
+{
+	gboolean *p_print = g_new (gboolean, 1);
+
+	*p_print = print;
+	return go_undo_binary_new
+		(g_object_ref (G_OBJECT (so)), p_print,
+		 (GOUndoBinaryFunc)sheet_object_set_print_flag,
+		 g_object_unref, g_free);
+}
+
 static void
 cb_dialog_so_size_apply_clicked (G_GNUC_UNUSED GtkWidget *button,
 				   SOSizeState *state)
 {
 	char const *name;
+	GOUndo *undo = NULL, *redo = NULL;
+	char const *undo_name = NULL;
+	int cnt = 0;
 
 	if (state->so_size_needs_restore || state->so_pos_needs_restore) {
 		char const *label = state->so_pos_needs_restore ?
@@ -215,21 +234,34 @@ cb_dialog_so_size_apply_clicked (G_GNUC_UNUSED GtkWidget *button,
 	if (name == NULL)
 		name = "";
 	if (strcmp (name, state->old_name) != 0) {
-		GOUndo *undo, *redo;
 		char *old_name, *new_name;
 
 		g_object_get (G_OBJECT (state->so), "name", &old_name, NULL);
-		undo = set_params (state->so, old_name);
+		undo = go_undo_combine (undo, set_params (state->so, old_name));
 
 		new_name = (*name == '\0') ? NULL : g_strdup (name);
-		redo = set_params (state->so, new_name);
+		redo = go_undo_combine (redo, set_params (state->so, new_name));
 
-		state->so_name_changed 
-			= cmd_generic (WORKBOOK_CONTROL (state->wbcg),
-				       _("Set Object Name"),
-				       undo, redo);
+		undo_name = _("Set Object Name");
+		cnt++;
+	}
+	if (state->so_print_check_changed) {
+		gboolean val = ((state->so->flags & SHEET_OBJECT_PRINT) != 0);
+		undo = go_undo_combine (undo, set_print_flag 
+					(state->so,  val));
+		redo = go_undo_combine (redo, set_print_flag 
+					(state->so, !val));
+		undo_name =  _("Set Object Print Property");
+		cnt++;
 	}
 
+	if (cnt > 0) {
+		if (cnt > 1)
+			undo_name =  _("Set Object Properties");
+		state->so_name_changed = state->so_print_check_changed =
+			cmd_generic (WORKBOOK_CONTROL (state->wbcg),
+				     undo_name, undo, redo);
+	}
 	dialog_so_size_button_sensitivity (state);
 
 	return;
@@ -240,7 +272,7 @@ cb_dialog_so_size_ok_clicked (GtkWidget *button, SOSizeState *state)
 {
 	cb_dialog_so_size_apply_clicked (button, state);
 	if (!state->so_size_needs_restore && !state->so_pos_needs_restore &&
-	    !state->so_name_changed)
+	    !state->so_name_changed && !state->so_print_check_changed)
 		gtk_widget_destroy (state->dialog);
 	return;
 }
@@ -259,6 +291,18 @@ cb_dialog_so_size_name_changed (GtkEntry *entry,
 	return FALSE;
 }
 
+static void
+cb_dialog_so_size_print_check_toggled (GtkToggleButton *togglebutton,
+				       SOSizeState *state)
+{
+	gboolean new_print = !gtk_toggle_button_get_active (togglebutton);
+	gboolean old_print = ((state->so->flags & SHEET_OBJECT_PRINT) != 0);
+
+	state->so_print_check_changed 
+		= (new_print != old_print); 
+	dialog_so_size_button_sensitivity (state);
+	return;	
+}
 
 void
 dialog_so_size (WBCGtk *wbcg, GObject *so)
@@ -299,6 +343,7 @@ dialog_so_size (WBCGtk *wbcg, GObject *so)
 			  "focus-out-event",
 			  G_CALLBACK (cb_dialog_so_size_name_changed),
 			  state);
+	state->so_print_check_changed = FALSE;
 
 	state->wpoints = GTK_WIDGET (glade_xml_get_widget (state->gui, "w-pts-label"));
 	state->wspin  = GTK_SPIN_BUTTON (glade_xml_get_widget (state->gui, "w-spin"));
@@ -308,9 +353,11 @@ dialog_so_size (WBCGtk *wbcg, GObject *so)
 	state->xspin  = GTK_SPIN_BUTTON (glade_xml_get_widget (state->gui, "x-spin"));
 	state->ypoints = GTK_WIDGET (glade_xml_get_widget (state->gui, "y-pts-label"));
 	state->yspin  = GTK_SPIN_BUTTON (glade_xml_get_widget (state->gui, "y-spin"));
-
+	state->print_check = GTK_WIDGET (glade_xml_get_widget (state->gui, 
+							       "print-check"));
 	dialog_so_size_load (state);
-	state->active_anchor = sheet_object_anchor_dup (sheet_object_get_anchor (state->so));
+	state->active_anchor = sheet_object_anchor_dup (sheet_object_get_anchor 
+							(state->so));
 	width = state->coords[2] - state->coords[0];
 	height = state->coords[3] - state->coords[1];
 
@@ -318,6 +365,8 @@ dialog_so_size (WBCGtk *wbcg, GObject *so)
 	gtk_spin_button_set_value (state->hspin, (height < 0) ? - height : height);
 	gtk_spin_button_set_value (state->xspin, 0.);
 	gtk_spin_button_set_value (state->yspin, 0.);
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state->print_check),
+				      !(state->so->flags & SHEET_OBJECT_PRINT));
 	g_signal_connect (G_OBJECT (state->wspin),
 			  "value-changed",
 			  G_CALLBACK (cb_dialog_so_size_value_changed_update_points),
@@ -334,6 +383,11 @@ dialog_so_size (WBCGtk *wbcg, GObject *so)
 			  "value-changed",
 			  G_CALLBACK (cb_dialog_so_size_value_changed_update_points),
 			  state->ypoints);
+	g_signal_connect (G_OBJECT (state->print_check),
+			  "toggled",
+			  G_CALLBACK (cb_dialog_so_size_print_check_toggled),
+			  state);
+	
 	cb_dialog_so_size_value_changed_update_points (state->wspin, GTK_LABEL (state->wpoints));
 	cb_dialog_so_size_value_changed_update_points (state->hspin, GTK_LABEL (state->hpoints));
 	cb_dialog_so_size_value_changed_update_points (state->xspin, GTK_LABEL (state->xpoints));
diff --git a/src/dialogs/sheetobject-size.glade b/src/dialogs/sheetobject-size.glade
index 4fb925c..ae690df 100644
--- a/src/dialogs/sheetobject-size.glade
+++ b/src/dialogs/sheetobject-size.glade
@@ -10,13 +10,12 @@
     <child internal-child="vbox">
       <widget class="GtkVBox" id="dialog-vbox1">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
         <property name="spacing">6</property>
         <child>
           <widget class="GtkTable" id="main_table">
             <property name="visible">True</property>
             <property name="border_width">8</property>
-            <property name="n_rows">9</property>
+            <property name="n_rows">10</property>
             <property name="n_columns">4</property>
             <property name="column_spacing">12</property>
             <property name="row_spacing">5</property>
@@ -162,8 +161,8 @@
                 <property name="mnemonic_widget">name-entry</property>
               </widget>
               <packing>
-                <property name="top_attach">7</property>
-                <property name="bottom_attach">8</property>
+                <property name="top_attach">8</property>
+                <property name="bottom_attach">9</property>
                 <property name="x_options">GTK_FILL</property>
                 <property name="y_options"></property>
               </packing>
@@ -178,8 +177,8 @@
               <packing>
                 <property name="left_attach">1</property>
                 <property name="right_attach">4</property>
-                <property name="top_attach">7</property>
-                <property name="bottom_attach">8</property>
+                <property name="top_attach">8</property>
+                <property name="bottom_attach">9</property>
                 <property name="x_options">GTK_FILL</property>
                 <property name="y_options"></property>
               </packing>
@@ -346,12 +345,28 @@
               </widget>
               <packing>
                 <property name="right_attach">4</property>
-                <property name="top_attach">8</property>
-                <property name="bottom_attach">9</property>
+                <property name="top_attach">9</property>
+                <property name="bottom_attach">10</property>
                 <property name="x_options">GTK_FILL</property>
                 <property name="y_options"></property>
               </packing>
             </child>
+            <child>
+              <widget class="GtkCheckButton" id="print-check">
+                <property name="label" translatable="yes">Do not print</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip" translatable="yes">Sheet objects with this property do not print with the remainder of the sheet.</property>
+                <property name="draw_indicator">True</property>
+              </widget>
+              <packing>
+                <property name="right_attach">4</property>
+                <property name="top_attach">7</property>
+                <property name="bottom_attach">8</property>
+                <property name="y_options">GTK_SHRINK | GTK_FILL</property>
+              </packing>
+            </child>
           </widget>
           <packing>
             <property name="expand">False</property>
diff --git a/src/sheet-object-widget.c b/src/sheet-object-widget.c
index 78b0a64..a78486c 100644
--- a/src/sheet-object-widget.c
+++ b/src/sheet-object-widget.c
@@ -742,6 +742,9 @@ sheet_widget_button_init_full (SheetWidgetButton *swb,
 			       char const *text,
 			       PangoAttrList *markup)
 {
+	SheetObject *so = SHEET_OBJECT (swb);
+
+	so->flags &= ~SHEET_OBJECT_PRINT;
 	swb->label = g_strdup (text);
 	swb->markup = markup;
 	swb->value = FALSE;
@@ -1366,7 +1369,11 @@ sheet_widget_adjustment_init_full (SheetWidgetAdjustment *swa,
 				   GnmCellRef const *ref,
 				   gboolean horizontal)
 {
+	SheetObject *so;
 	g_return_if_fail (swa != NULL);
+	
+	so = SHEET_OBJECT (swa);
+	so->flags &= ~SHEET_OBJECT_PRINT;
 
 	swa->adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0., 0., 100., 1., 10., 0.));
 	g_object_ref_sink (swa->adjustment);
@@ -3370,6 +3377,9 @@ static void
 sheet_widget_list_base_init (SheetObjectWidget *sow)
 {
 	SheetWidgetListBase *swl = SHEET_WIDGET_LIST_BASE (sow);
+	SheetObject *so = SHEET_OBJECT (sow);
+
+	so->flags &= ~SHEET_OBJECT_PRINT;
 
 	swl->content_dep.sheet = NULL;
 	swl->content_dep.flags = list_content_get_dep_type ();
diff --git a/src/sheet-object.c b/src/sheet-object.c
index f1ac0c4..1d1d9b3 100644
--- a/src/sheet-object.c
+++ b/src/sheet-object.c
@@ -63,6 +63,16 @@ static GObjectClass *parent_klass;
 static GQuark	sov_so_quark;
 static GQuark	sov_container_quark;
 
+void          
+sheet_object_set_print_flag (SheetObject *so, gboolean *print)
+{
+	if (*print)
+		so->flags = (so->flags | SHEET_OBJECT_PRINT);
+	else
+		so->flags = (so->flags & ~SHEET_OBJECT_PRINT);
+}
+
+
 static void
 cb_so_size_position (SheetObject *so, SheetControl *sc)
 {
diff --git a/src/sheet-object.h b/src/sheet-object.h
index 8e3efb6..52fbe4b 100644
--- a/src/sheet-object.h
+++ b/src/sheet-object.h
@@ -66,6 +66,7 @@ Sheet	     *sheet_object_get_sheet	 (SheetObject const *so);
 void	      sheet_object_clear_sheet	 (SheetObject *so);
 
 void          sheet_object_set_name      (SheetObject *so, const char *name);
+void          sheet_object_set_print_flag (SheetObject *so, gboolean *print);
 
 SheetObject  *sheet_object_dup		 (SheetObject const *so);
 gboolean      sheet_object_can_print	 (SheetObject const *so);
diff --git a/src/xml-sax-read.c b/src/xml-sax-read.c
index 03a8c97..ba56fd5 100644
--- a/src/xml-sax-read.c
+++ b/src/xml-sax-read.c
@@ -2325,12 +2325,15 @@ xml_sax_read_obj (GsfXMLIn *xin, gboolean needs_cleanup,
 			anchor_offset = f_tmp;
 		else if (gnm_xml_attr_int (attrs+i, "Direction", &tmp_int))
 			anchor_dir = tmp_int;
+		else if (gnm_xml_attr_int (attrs+i, "Print", &tmp_int)) {
+			gboolean b = (tmp_int != 0);
+			sheet_object_set_print_flag (so, &b);
+		}
 #if 0
 		/* Deprecated in 1.7.7 */
-		else if (attr_eq (attrs[i], "ObjectAnchorType"))
+		else if (attr_eq (attrs[i], "ObjectAnchorType")) {
+		}
 		/* There may be extra attributes that are handled by the objects */
-		else
-			unknown_attr (xin, attrs+i);
 #endif
 	}
 
diff --git a/src/xml-sax-write.c b/src/xml-sax-write.c
index 8fd77ff..de913b8 100644
--- a/src/xml-sax-write.c
+++ b/src/xml-sax-write.c
@@ -1159,6 +1159,10 @@ xml_write_objects (GnmOutputXML *state, GSList *objects)
 
 		gsf_xml_out_add_int (state->output, "Direction",
 			so->anchor.base.direction);
+		gsf_xml_out_add_int 
+		  (state->output, "Print", 
+		   ((so->flags & SHEET_OBJECT_PRINT) != 0 ) 
+		   ? 1 : 0);
 
 		(*klass->write_xml_sax) (so, state->output, state->convs);
 



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