case: Introduce new functions for numbers and substrings in cases.
[pspp] / src / output / charts / np-plot-cairo.c
index a9186527b81d442954d03e9c735181806b05ade2..f74572d0c8a57f0f6804e6bab42ca479df67bd53 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2009 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 #include <config.h>
 
-#include <output/charts/np-plot.h>
+#include "output/charts/np-plot.h"
 
-#include <data/case.h>
-#include <data/casereader.h>
-#include <math/np.h>
-#include <output/cairo-chart.h>
+#include "data/case.h"
+#include "data/casereader.h"
+#include "math/np.h"
+#include "output/cairo-chart.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 static void
-np_plot_chart_draw (const struct chart_item *chart_item, cairo_t *cr,
+np_plot_chart_draw (const struct chart *chart, cairo_t *cr,
                     struct xrchart_geometry *geom)
 {
-  const struct np_plot_chart *npp = to_np_plot_chart (chart_item);
+  const struct np_plot_chart *npp = to_np_plot_chart (chart);
   struct casereader *data;
   struct ccase *c;
 
-  xrchart_write_title (cr, geom, _("Normal Q-Q Plot of %s"), npp->label);
+  xrchart_write_title (cr, geom, _("Normal Q-Q Plot of %s"), chart->title);
   xrchart_write_xlabel (cr, geom, _("Observed Value"));
   xrchart_write_ylabel (cr, geom, _("Expected Normal"));
-  xrchart_write_xscale (cr, geom,
+  if (! xrchart_write_xscale (cr, geom,
                       npp->x_lower - npp->slack,
-                      npp->x_upper + npp->slack, 5);
-  xrchart_write_yscale (cr, geom, npp->y_first, npp->y_last, 5);
+                              npp->x_upper + npp->slack))
+    return;
+
+  if (! xrchart_write_yscale (cr, geom, npp->y_first, npp->y_last))
+    return;
 
   data = casereader_clone (npp->data);
   for (; (c = casereader_read (data)) != NULL; case_unref (c))
     xrchart_datum (cr, geom, 0,
-                 case_data_idx (c, NP_IDX_Y)->f,
-                 case_data_idx (c, NP_IDX_NS)->f);
+                   case_num_idx (c, NP_IDX_Y),
+                   case_num_idx (c, NP_IDX_NS));
   casereader_destroy (data);
 
   xrchart_line (cr, geom, npp->slope, npp->intercept,
@@ -54,37 +57,38 @@ np_plot_chart_draw (const struct chart_item *chart_item, cairo_t *cr,
 }
 
 static void
-dnp_plot_chart_draw (const struct chart_item *chart_item, cairo_t *cr,
+dnp_plot_chart_draw (const struct chart *chart, cairo_t *cr,
                      struct xrchart_geometry *geom)
 {
-  const struct np_plot_chart *dnpp = to_np_plot_chart (chart_item);
+  const struct np_plot_chart *dnpp = to_np_plot_chart (chart);
   struct casereader *data;
   struct ccase *c;
 
-  xrchart_write_title (cr, geom, _("Detrended Normal Q-Q Plot of %s"),
-                       dnpp->label);
+  xrchart_write_title (cr, geom, _("Detrended Normal Q-Q Plot of %s"), chart->title);
   xrchart_write_xlabel (cr, geom, _("Observed Value"));
   xrchart_write_ylabel (cr, geom, _("Dev from Normal"));
-  xrchart_write_xscale (cr, geom, dnpp->y_min, dnpp->y_max, 5);
-  xrchart_write_yscale (cr, geom, dnpp->dns_min, dnpp->dns_max, 5);
+  if (! xrchart_write_xscale (cr, geom, dnpp->y_min, dnpp->y_max))
+    return;
+  if (! xrchart_write_yscale (cr, geom, dnpp->dns_min, dnpp->dns_max))
+    return;
 
   data = casereader_clone (dnpp->data);
   for (; (c = casereader_read (data)) != NULL; case_unref (c))
-    xrchart_datum (cr, geom, 0, case_data_idx (c, NP_IDX_Y)->f,
-                   case_data_idx (c, NP_IDX_DNS)->f);
+    xrchart_datum (cr, geom, 0, case_num_idx (c, NP_IDX_Y),
+                   case_num_idx (c, NP_IDX_DNS));
   casereader_destroy (data);
 
   xrchart_line (cr, geom, 0, 0, dnpp->y_min, dnpp->y_max, XRCHART_DIM_X);
 }
 
 void
-xrchart_draw_np_plot (const struct chart_item *chart_item, cairo_t *cr,
+xrchart_draw_np_plot (const struct chart *chart, cairo_t *cr,
                       struct xrchart_geometry *geom)
 {
-  const struct np_plot_chart *npp = to_np_plot_chart (chart_item);
+  const struct np_plot_chart *npp = to_np_plot_chart (chart);
 
   if (npp->detrended)
-    dnp_plot_chart_draw (chart_item, cr, geom);
+    dnp_plot_chart_draw (chart, cr, geom);
   else
-    np_plot_chart_draw (chart_item, cr, geom);
+    np_plot_chart_draw (chart, cr, geom);
 }