[goffice] Add an option for missing data in xyz-contour and surface plots.
- From: Jean BrÃfort <jbrefort src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [goffice] Add an option for missing data in xyz-contour and surface plots.
- Date: Sun, 29 Jul 2012 15:10:45 +0000 (UTC)
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"><b>_Rows:</b></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"><b>_Columns:</b></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"><b>_Rows:</b></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">●</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">●</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"><b>Missing values as:</b></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]