[goffice] Add an option for missing data in xyz-contour and surface plots.



commit e7ad53e3e60083f5fd36d5df5dec43e1dbcf976e
Author: Jean Brefort <jean brefort normalesup org>
Date:   Sun Jul 29 17:10:03 2012 +0200

    Add an option for missing data in xyz-contour and surface plots.

 ChangeLog                                     |   12 +
 plugins/plot_surface/gog-xyz-surface-prefs.c  |   27 ++-
 plugins/plot_surface/gog-xyz-surface-prefs.ui |  275 +++++++++++++------------
 plugins/plot_surface/gog-xyz-surface.c        |   50 +++++-
 plugins/plot_surface/gog-xyz-surface.h        |    2 +
 5 files changed, 224 insertions(+), 142 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 22a1810..5c4e876 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2012-07-29  Jean Brefort  <jean brefort normalesup org>
 
+	* plugins/plot_surface/gog-xyz-surface-prefs.c
+	(cb_missing_as_changed), (gog_xyz_surface_plot_pref): add an option for
+	missing data.
+	* plugins/plot_surface/gog-xyz-surface-prefs.ui: ditto.
+	* plugins/plot_surface/gog-xyz-surface.c (missing_as_string),
+	(missing_as_value), (gog_xyz_surface_plot_build_matrix),
+	(gog_xyz_surface_plot_set_property),
+	(gog_xyz_surface_plot_get_property), (common_init_class): ditto.
+	* plugins/plot_surface/gog-xyz-surface.h: ditto.
+
+2012-07-29  Jean Brefort  <jean brefort normalesup org>
+
 	* goffice/graph/gog-plot.c (gog_plot_set_property),
 	(gog_plot_get_property), (gog_plot_class_init): save axis Id for all axes,
 	not only X and Y. [#680739]
diff --git a/plugins/plot_surface/gog-xyz-surface-prefs.c b/plugins/plot_surface/gog-xyz-surface-prefs.c
index 5311074..050a49f 100644
--- a/plugins/plot_surface/gog-xyz-surface-prefs.c
+++ b/plugins/plot_surface/gog-xyz-surface-prefs.c
@@ -77,12 +77,19 @@ cb_rows_toggled (GtkToggleButton *btn, XYZSurfPrefsState *state)
 	}
 }
 
+static void
+cb_missing_as_changed (GtkComboBoxText *box, XYZSurfPrefsState *state)
+{
+	g_object_set (state->plot, "missing-as", gtk_combo_box_text_get_active_text (box));
+		
+}
+
 GtkWidget *
 gog_xyz_surface_plot_pref (GogXYZPlot *plot, GogDataAllocator *dalloc, GOCmdContext *cc)
 {
 	GogDataset *set = GOG_DATASET (plot);
 	XYZSurfPrefsState *state;
-	GtkWidget  *w, *box;
+	GtkWidget  *w, *grid;
 	GtkBuilder *gui =
 		go_gtk_builder_new ("res:go:plot_surface/gog-xyz-surface-prefs.ui",
 				    GETTEXT_PACKAGE, cc);
@@ -100,10 +107,11 @@ gog_xyz_surface_plot_pref (GogXYZPlot *plot, GogDataAllocator *dalloc, GOCmdCont
 		G_CALLBACK (cb_columns_changed), plot);
 	state->x_label = go_gtk_builder_get_widget (gui, "cols-nb-lbl");
 
-	box = go_gtk_builder_get_widget (gui, "cols-box");
+	grid = go_gtk_builder_get_widget (gui, "gog-xyz-surface-prefs");
 	state->x_entry = GTK_WIDGET (gog_data_allocator_editor (dalloc, set, 0, GOG_DATA_VECTOR));
 	gtk_widget_show_all (state->x_entry);
-	gtk_box_pack_start (GTK_BOX (box), state->x_entry, TRUE, TRUE, 0);
+	gtk_widget_set_margin_left (state->x_entry, 12);
+	gtk_grid_attach (GTK_GRID (grid), state->x_entry, 0, 2, 3, 1);
 	w = go_gtk_builder_get_widget (gui, "preset-cols-btn");
 	if (!state->plot->auto_x) {
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE);
@@ -121,10 +129,10 @@ gog_xyz_surface_plot_pref (GogXYZPlot *plot, GogDataAllocator *dalloc, GOCmdCont
 		G_CALLBACK (cb_rows_changed), plot);
 	state->y_label = go_gtk_builder_get_widget (gui, "rows-nb-lbl");
 
-	box = go_gtk_builder_get_widget (gui, "rows-box");
 	state->y_entry = GTK_WIDGET (gog_data_allocator_editor (dalloc, set, 1, GOG_DATA_VECTOR));
 	gtk_widget_show_all (state->y_entry);
-	gtk_box_pack_start (GTK_BOX (box), state->y_entry, TRUE, TRUE, 0);
+	gtk_widget_set_margin_left (state->y_entry, 12);
+	gtk_grid_attach (GTK_GRID (grid), state->y_entry, 0, 5, 3, 1);
 	w = go_gtk_builder_get_widget (gui, "preset-rows-btn");
 	if (!state->plot->auto_y) {
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE);
@@ -135,7 +143,14 @@ gog_xyz_surface_plot_pref (GogXYZPlot *plot, GogDataAllocator *dalloc, GOCmdCont
 	w = go_gtk_builder_get_widget (gui, "calc-rows-btn");
 	g_signal_connect (G_OBJECT (w), "toggled", G_CALLBACK (cb_rows_toggled), state);
 
-	w = GTK_WIDGET (g_object_ref (gtk_builder_get_object (gui, "gog_xyz_surface_prefs")));
+	w = go_gtk_builder_get_widget (gui, "missing-as-btn");
+	gtk_combo_box_set_active (GTK_COMBO_BOX (w),
+	                          GOG_IS_CONTOUR_PLOT (plot)?
+	                              GOG_XYZ_CONTOUR_PLOT (plot)->missing_as:
+		                          GOG_XYZ_SURFACE_PLOT (plot)->missing_as);
+	g_signal_connect (G_OBJECT (w), "changed", G_CALLBACK (cb_missing_as_changed), state);
+
+	w = GTK_WIDGET (g_object_ref (grid));
 	g_object_set_data_full (G_OBJECT (w), "state", state, g_free);
 	g_object_unref (gui);
 
diff --git a/plugins/plot_surface/gog-xyz-surface-prefs.ui b/plugins/plot_surface/gog-xyz-surface-prefs.ui
index 8b651df..15ac74f 100644
--- a/plugins/plot_surface/gog-xyz-surface-prefs.ui
+++ b/plugins/plot_surface/gog-xyz-surface-prefs.ui
@@ -1,47 +1,30 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <!-- interface-requires gtk+ 2.12 -->
-  <!-- interface-naming-policy toplevel-contextual -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkAdjustment" id="adjustment1">
-    <property name="value">10</property>
     <property name="lower">2</property>
     <property name="upper">1000</property>
+    <property name="value">10</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
   <object class="GtkAdjustment" id="adjustment2">
-    <property name="value">10</property>
     <property name="lower">2</property>
     <property name="upper">1000</property>
+    <property name="value">10</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
-  <object class="GtkTable" id="gog_xyz_surface_prefs">
+  <object class="GtkGrid" id="gog-xyz-surface-prefs">
     <property name="visible">True</property>
+    <property name="can_focus">False</property>
     <property name="border_width">12</property>
-    <property name="n_rows">6</property>
-    <property name="n_columns">3</property>
-    <property name="column_spacing">12</property>
     <property name="row_spacing">6</property>
-    <child>
-      <object class="GtkLabel" id="rows_lbl">
-        <property name="visible">True</property>
-        <property name="xalign">0</property>
-        <property name="yalign">0</property>
-        <property name="label" translatable="yes">&lt;b&gt;_Rows:&lt;/b&gt;</property>
-        <property name="use_markup">True</property>
-        <property name="use_underline">True</property>
-      </object>
-      <packing>
-        <property name="top_attach">3</property>
-        <property name="bottom_attach">4</property>
-        <property name="x_options">GTK_FILL</property>
-        <property name="y_options"></property>
-      </packing>
-    </child>
+    <property name="column_spacing">12</property>
     <child>
       <object class="GtkLabel" id="cols_lbl">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="xalign">0</property>
         <property name="yalign">0.46000000834465027</property>
         <property name="label" translatable="yes">&lt;b&gt;_Columns:&lt;/b&gt;</property>
@@ -49,177 +32,188 @@
         <property name="use_underline">True</property>
       </object>
       <packing>
-        <property name="x_options">GTK_FILL</property>
-        <property name="y_options"></property>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+        <property name="width">4</property>
+        <property name="height">1</property>
       </packing>
     </child>
     <child>
-      <object class="GtkRadioButton" id="calc-rows-btn">
+      <object class="GtkRadioButton" id="calc-cols-btn">
         <property name="label" translatable="yes">Calculated</property>
+        <property name="use_action_appearance">False</property>
         <property name="visible">True</property>
         <property name="can_focus">True</property>
         <property name="receives_default">False</property>
+        <property name="margin_left">12</property>
+        <property name="use_action_appearance">False</property>
+        <property name="xalign">0</property>
         <property name="active">True</property>
         <property name="draw_indicator">True</property>
       </object>
       <packing>
-        <property name="top_attach">4</property>
-        <property name="bottom_attach">5</property>
-        <property name="x_options">GTK_FILL</property>
-        <property name="y_options"></property>
-        <property name="x_padding">12</property>
+        <property name="left_attach">0</property>
+        <property name="top_attach">1</property>
+        <property name="width">2</property>
+        <property name="height">1</property>
       </packing>
     </child>
     <child>
-      <object class="GtkRadioButton" id="preset-rows-btn">
+      <object class="GtkRadioButton" id="preset-cols-btn">
         <property name="label" translatable="yes">Preset:</property>
+        <property name="use_action_appearance">False</property>
         <property name="visible">True</property>
         <property name="can_focus">True</property>
         <property name="receives_default">False</property>
+        <property name="use_action_appearance">False</property>
+        <property name="xalign">0</property>
         <property name="active">True</property>
         <property name="draw_indicator">True</property>
-        <property name="group">calc-rows-btn</property>
+        <property name="group">calc-cols-btn</property>
+      </object>
+      <packing>
+        <property name="left_attach">2</property>
+        <property name="top_attach">1</property>
+        <property name="width">2</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="cols-nb-lbl">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_left">12</property>
+        <property name="xalign">0</property>
+        <property name="label" translatable="yes">Count:</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">2</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkSpinButton" id="columns_spinner">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="invisible_char">â</property>
+        <property name="invisible_char_set">True</property>
+        <property name="adjustment">adjustment2</property>
+        <property name="climb_rate">0.10000000000000001</property>
+        <property name="snap_to_ticks">True</property>
+        <property name="numeric">True</property>
       </object>
       <packing>
         <property name="left_attach">1</property>
-        <property name="right_attach">2</property>
-        <property name="top_attach">4</property>
-        <property name="bottom_attach">5</property>
-        <property name="x_options">GTK_FILL</property>
-        <property name="y_options"></property>
-        <property name="x_padding">12</property>
+        <property name="top_attach">2</property>
+        <property name="width">2</property>
+        <property name="height">1</property>
       </packing>
     </child>
     <child>
-      <object class="GtkRadioButton" id="calc-cols-btn">
+      <object class="GtkLabel" id="rows_lbl">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="xalign">0</property>
+        <property name="yalign">0</property>
+        <property name="label" translatable="yes">&lt;b&gt;_Rows:&lt;/b&gt;</property>
+        <property name="use_markup">True</property>
+        <property name="use_underline">True</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">3</property>
+        <property name="width">4</property>
+        <property name="height">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkRadioButton" id="calc-rows-btn">
         <property name="label" translatable="yes">Calculated</property>
+        <property name="use_action_appearance">False</property>
         <property name="visible">True</property>
         <property name="can_focus">True</property>
         <property name="receives_default">False</property>
+        <property name="margin_left">12</property>
+        <property name="use_action_appearance">False</property>
+        <property name="xalign">0</property>
         <property name="active">True</property>
         <property name="draw_indicator">True</property>
       </object>
       <packing>
-        <property name="top_attach">1</property>
-        <property name="bottom_attach">2</property>
-        <property name="x_options">GTK_FILL</property>
-        <property name="y_options"></property>
-        <property name="x_padding">12</property>
+        <property name="left_attach">0</property>
+        <property name="top_attach">4</property>
+        <property name="width">2</property>
+        <property name="height">1</property>
       </packing>
     </child>
     <child>
-      <object class="GtkRadioButton" id="preset-cols-btn">
+      <object class="GtkRadioButton" id="preset-rows-btn">
         <property name="label" translatable="yes">Preset:</property>
+        <property name="use_action_appearance">False</property>
         <property name="visible">True</property>
         <property name="can_focus">True</property>
         <property name="receives_default">False</property>
+        <property name="use_action_appearance">False</property>
+        <property name="xalign">0</property>
         <property name="active">True</property>
         <property name="draw_indicator">True</property>
-        <property name="group">calc-cols-btn</property>
+        <property name="group">calc-rows-btn</property>
       </object>
       <packing>
-        <property name="left_attach">1</property>
-        <property name="right_attach">2</property>
-        <property name="top_attach">1</property>
-        <property name="bottom_attach">2</property>
-        <property name="x_options">GTK_FILL</property>
-        <property name="y_options"></property>
-        <property name="x_padding">12</property>
+        <property name="left_attach">2</property>
+        <property name="top_attach">4</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
       </packing>
     </child>
     <child>
-      <object class="GtkBox" id="rows-box">
+      <object class="GtkLabel" id="rows-nb-lbl">
         <property name="visible">True</property>
-        <child>
-          <object class="GtkLabel" id="rows-nb-lbl">
-            <property name="visible">True</property>
-            <property name="label" translatable="yes">Count:</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkSpinButton" id="rows_spinner">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">&#x25CF;</property>
-            <property name="adjustment">adjustment1</property>
-            <property name="climb_rate">10</property>
-            <property name="snap_to_ticks">True</property>
-            <property name="numeric">True</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="padding">12</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
+        <property name="can_focus">False</property>
+        <property name="margin_left">12</property>
+        <property name="xalign">0</property>
+        <property name="label" translatable="yes">Count:</property>
       </object>
       <packing>
-        <property name="right_attach">3</property>
+        <property name="left_attach">0</property>
         <property name="top_attach">5</property>
-        <property name="bottom_attach">6</property>
-        <property name="y_options"></property>
-        <property name="x_padding">12</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
       </packing>
     </child>
     <child>
-      <object class="GtkBox" id="cols-box">
+      <object class="GtkSpinButton" id="rows_spinner">
         <property name="visible">True</property>
-        <child>
-          <object class="GtkLabel" id="cols-nb-lbl">
-            <property name="visible">True</property>
-            <property name="label" translatable="yes">Count:</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkSpinButton" id="columns_spinner">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">&#x25CF;</property>
-            <property name="adjustment">adjustment2</property>
-            <property name="climb_rate">0.10000000000000001</property>
-            <property name="snap_to_ticks">True</property>
-            <property name="numeric">True</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="padding">12</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
+        <property name="can_focus">True</property>
+        <property name="invisible_char">â</property>
+        <property name="invisible_char_set">True</property>
+        <property name="adjustment">adjustment1</property>
+        <property name="climb_rate">10</property>
+        <property name="snap_to_ticks">True</property>
+        <property name="numeric">True</property>
       </object>
       <packing>
-        <property name="right_attach">3</property>
-        <property name="top_attach">2</property>
-        <property name="bottom_attach">3</property>
-        <property name="x_options">GTK_FILL</property>
-        <property name="y_options"></property>
-        <property name="x_padding">12</property>
+        <property name="left_attach">1</property>
+        <property name="top_attach">5</property>
+        <property name="width">2</property>
+        <property name="height">1</property>
       </packing>
     </child>
     <child>
-      <object class="GtkLabel" id="label1">
+      <object class="GtkLabel" id="missing-lbl">
         <property name="visible">True</property>
-        <property name="xalign">0.46000000834465027</property>
-        <property name="label" translatable="yes">
-</property>
+        <property name="can_focus">False</property>
+        <property name="xalign">0</property>
+        <property name="label" translatable="yes">&lt;b&gt;Missing values as:&lt;/b&gt;</property>
+        <property name="use_markup">True</property>
       </object>
       <packing>
-        <property name="left_attach">2</property>
-        <property name="right_attach">3</property>
-        <property name="top_attach">1</property>
-        <property name="bottom_attach">2</property>
-        <property name="y_options"></property>
+        <property name="left_attach">0</property>
+        <property name="top_attach">6</property>
+        <property name="width">2</property>
+        <property name="height">1</property>
       </packing>
     </child>
     <child>
@@ -235,7 +229,22 @@
       <placeholder/>
     </child>
     <child>
-      <placeholder/>
+      <object class="GtkComboBoxText" id="missing-as-btn">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="entry_text_column">0</property>
+        <property name="id_column">1</property>
+        <items>
+          <item translatable="yes">Invalid</item>
+          <item translatable="yes">0</item>
+        </items>
+      </object>
+      <packing>
+        <property name="left_attach">2</property>
+        <property name="top_attach">6</property>
+        <property name="width">1</property>
+        <property name="height">1</property>
+      </packing>
     </child>
   </object>
 </interface>
diff --git a/plugins/plot_surface/gog-xyz-surface.c b/plugins/plot_surface/gog-xyz-surface.c
index b97944b..f65098d 100644
--- a/plugins/plot_surface/gog-xyz-surface.c
+++ b/plugins/plot_surface/gog-xyz-surface.c
@@ -37,8 +37,9 @@
 
 enum {
 	XYZ_SURFACE_MISSING_AS_NAN,
-	XYZ_SURFACE_MISSING_AS_ZERO
+	XYZ_SURFACE_MISSING_AS_ZERO,
 	/* we might add interpolation methods there */
+	XYZ_SURFACE_MISSING_MAX
 };
 
 static struct {unsigned n; char const *name;} missing_as_strings[] =
@@ -46,6 +47,27 @@ static struct {unsigned n; char const *name;} missing_as_strings[] =
 	{XYZ_SURFACE_MISSING_AS_NAN, "invalid"},
 	{XYZ_SURFACE_MISSING_AS_ZERO, "0"}
 };
+
+static char const *
+missing_as_string (unsigned n)
+{
+	unsigned i;
+	for (i = 0 ; i < G_N_ELEMENTS (missing_as_strings); i++)
+		if (missing_as_strings[i].n == n)
+			return missing_as_strings[i].name;
+	return "invalid";	/* default property value */
+}
+
+static unsigned
+missing_as_value (char const *name)
+{
+	unsigned i;
+	for (i = 0 ; i < G_N_ELEMENTS (missing_as_strings); i++)
+		if (!strcmp (missing_as_strings[i].name, name))
+			return missing_as_strings[i].n;
+	return 0;	/* default property value */
+}
+
 /*****************************************************************************/
 
 enum {
@@ -53,7 +75,8 @@ enum {
 	XYZ_SURFACE_PROP_ROWS,
 	XYZ_SURFACE_PROP_COLUMNS,
 	XYZ_SURFACE_PROP_AUTO_ROWS,
-	XYZ_SURFACE_PROP_AUTO_COLUMNS
+	XYZ_SURFACE_PROP_AUTO_COLUMNS,
+	XYZ_SURFACE_PROP_MISSING_AS
 };
 
 static GogObjectClass *plot_xyz_contour_parent_klass;
@@ -179,7 +202,10 @@ gog_xyz_surface_plot_build_matrix (GogXYZPlot const *plot, gboolean *cardinality
 	for (k = 0; k < n; ++k)
 		if (grid[k] != 0)
 			data[k] /= grid[k];
-		else data[k] = go_nan;
+		else if (GOG_IS_CONTOUR_PLOT (plot)?
+		         	GOG_XYZ_CONTOUR_PLOT (plot)->missing_as == XYZ_SURFACE_MISSING_AS_NAN:
+			        GOG_XYZ_SURFACE_PLOT (plot)->missing_as == XYZ_SURFACE_MISSING_AS_NAN)
+			data[k] = go_nan;
 
 	if (GOG_IS_CONTOUR_PLOT (plot)) {
 		GogAxisMap *map;
@@ -409,6 +435,13 @@ gog_xyz_surface_plot_set_property (GObject *obj, guint param_id,
 			plot->x_vals = NULL;
 		}
 		break;
+	case XYZ_SURFACE_PROP_MISSING_AS:
+		if (GOG_IS_CONTOUR_PLOT (plot))
+			GOG_XYZ_CONTOUR_PLOT (plot)->missing_as = missing_as_value (g_value_get_string (value));
+		else
+			GOG_XYZ_SURFACE_PLOT (plot)->missing_as = missing_as_value (g_value_get_string (value));
+			gog_object_request_update (GOG_OBJECT (plot));
+		break;
 
 	default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec);
 		 return; /* NOTE : RETURN */
@@ -435,6 +468,11 @@ gog_xyz_surface_plot_get_property (GObject *obj, guint param_id,
 	case XYZ_SURFACE_PROP_AUTO_COLUMNS :
 		g_value_set_boolean (value, plot->auto_x);
 		break;
+	case XYZ_SURFACE_PROP_MISSING_AS :
+		g_value_set_string (value, missing_as_string (GOG_IS_CONTOUR_PLOT (plot)?
+		                                              GOG_XYZ_CONTOUR_PLOT (plot)->missing_as:
+			                                          GOG_XYZ_SURFACE_PLOT (plot)->missing_as));
+		break;
 
 	default: G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, param_id, pspec);
 		 break;
@@ -483,6 +521,12 @@ common_init_class (GogXYZPlotClass *klass)
 			_("Whether the columns limts should be evaluated"),
 			TRUE,
 			GSF_PARAM_STATIC | G_PARAM_READWRITE | GO_PARAM_PERSISTENT));
+	g_object_class_install_property (gobject_klass, XYZ_SURFACE_PROP_MISSING_AS,
+		g_param_spec_string ("missing-as",
+			_("Missing as"),
+			_("How to deal with missing data"),
+			"invalid",
+			GSF_PARAM_STATIC | G_PARAM_READWRITE | GO_PARAM_PERSISTENT));
 
 	gog_object_klass->update	= gog_xyz_surface_plot_update;
 
diff --git a/plugins/plot_surface/gog-xyz-surface.h b/plugins/plot_surface/gog-xyz-surface.h
index 948e05f..2d94e99 100644
--- a/plugins/plot_surface/gog-xyz-surface.h
+++ b/plugins/plot_surface/gog-xyz-surface.h
@@ -38,6 +38,7 @@ G_BEGIN_DECLS
 typedef struct {
 	GogContourPlot base;
 	GogDatasetElement grid[2];       /* for preset cols and rows */
+	unsigned missing_as;
 } GogXYZContourPlot;
 typedef GogContourPlotClass GogXYZContourPlotClass;
 
@@ -59,6 +60,7 @@ void  gog_xyz_contour_plot_register_type   (GTypeModule *module);
 typedef struct {
 	GogSurfacePlot base;
 	GogDatasetElement grid[2];       /* for preset cols and rows */
+	unsigned missing_as;
 } GogXYZSurfacePlot;
 typedef GogSurfacePlotClass GogXYZSurfacePlotClass;
 



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