output: Refactor implementation of charts.
This commit addresses a weakness of the charts implementation in PSPP, in
that charts can only be sent to a single output device. This is because
the chart code calls into a single output driver to obtain a libplot
plotting context and then passes that back into the calling code, which
draws on it and passes it back to the output driver. This commit refactors
the code so that, instead, a chart is an ADT that is reponsible for knowing
how to draw itself on a plotting device. Then the function for outputting
a chart applies this function to each output device.
This is more complicated than necessary: we could just loop over the set of
output devices and draw a chart on each one in turn. But this level of
complication is being introduced now so that later we can keep around
charts in memory as long as necessary for the GUI output engine to export
them on user demand.
This commit introduces a couple of regressions:
* libplot is now required, not optional.
* Box-whisker plots are disabled.
This regressions will be fixed by later commits.
21 files changed: