casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
PlotMSPlotParameterGroups.h
Go to the documentation of this file.
00001 //# PlotMSPlotParameterGroups.h: Implementations of plot subparameter groups.
00002 //# Copyright (C) 2009
00003 //# Associated Universities, Inc. Washington DC, USA.
00004 //#
00005 //# This library is free software; you can redistribute it and/or modify it
00006 //# under the terms of the GNU Library General Public License as published by
00007 //# the Free Software Foundation; either version 2 of the License, or (at your
00008 //# option) any later version.
00009 //#
00010 //# This library is distributed in the hope that it will be useful, but WITHOUT
00011 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00012 //# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
00013 //# License for more details.
00014 //#
00015 //# You should have received a copy of the GNU Library General Public License
00016 //# along with this library; if not, write to the Free Software Foundation,
00017 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
00018 //#
00019 //# Correspondence concerning AIPS++ should be addressed as follows:
00020 //#        Internet email: aips2-request@nrao.edu.
00021 //#        Postal address: AIPS++ Project Office
00022 //#                        National Radio Astronomy Observatory
00023 //#                        520 Edgemont Road
00024 //#                        Charlottesville, VA 22903-2475 USA
00025 //#
00026 //# $Id: $
00027 #ifndef PLOTMSPLOTPARAMETERGROUPS_H_
00028 #define PLOTMSPLOTPARAMETERGROUPS_H_
00029 
00030 #include <plotms/Plots/PlotMSPlotParameters.h>
00031 
00032 #include <plotms/PlotMS/PlotMSAveraging.h>
00033 #include <plotms/PlotMS/PlotMSIterParam.h>
00034 #include <plotms/PlotMS/PlotMSSelection.h>
00035 #include <plotms/PlotMS/PlotMSTransformations.h>
00036 #include <plotms/PlotMS/PlotMSLabelFormat.h>
00037 
00038 #include <casa/namespace.h>
00039 
00040 namespace casa {
00041 
00042 // Container class to hold constants for groups.
00043 class PMS_PP {
00044 
00045 public:
00046      // Update flag for redrawing.
00047      // <group>
00048      static const String UPDATE_REDRAW_NAME;
00049      static const int UPDATE_REDRAW;
00050      // </group>
00051 
00052      // Update flag for MS data group.
00053      // <group>
00054      static const String UPDATE_MSDATA_NAME;
00055      static const int UPDATE_MSDATA;
00056      // </group>
00057 
00058      // Update flag for cache group.
00059      // <group>
00060      static const String UPDATE_CACHE_NAME;
00061      static const int UPDATE_CACHE;
00062      // </group>
00063 
00064      // Update flag for axes group.
00065      // <group>
00066      static const String UPDATE_AXES_NAME;
00067      static const int UPDATE_AXES;
00068      // </group>
00069 
00070      // Update flag for canvas group.
00071      // <group>
00072      static const String UPDATE_CANVAS_NAME;
00073      static const int UPDATE_CANVAS;
00074      // </group>
00075 
00076      // Update flag for display group.
00077      // <group>
00078      static const String UPDATE_DISPLAY_NAME;
00079      static const int UPDATE_DISPLAY;
00080      // </group>
00081 
00082      // Update flag for display group.
00083      // <group>
00084      static const String UPDATE_ITERATION_NAME;
00085      static const int UPDATE_ITERATION;
00086      // </group>
00087 
00088      // Update flag for log group.
00089      // <group>
00090      static const String UPDATE_LOG_NAME;
00091      static const int UPDATE_LOG;
00092      // </group>
00093      //
00094      // Update flag for plotms_options group.
00095      // <group>
00096      static const String UPDATE_PLOTMS_OPTIONS_NAME;
00097      static const int UPDATE_PLOTMS_OPTIONS;
00098      // </group>
00099 
00100 private:
00101      // Disable constructor.
00102      PMS_PP() {
00103      }
00104 };
00105 
00106 
00107 
00108 
00109 // Subclass of PlotMSPlotParameters::Group to handle subparameters for MS data.
00110 // Currently includes:
00111 // * filename
00112 // * selection
00113 // * averaging
00114 //
00115 class PMS_PP_MSData : public PlotMSPlotParameters::Group {
00116 
00117 public:
00118      /* Constructor which takes a factory */
00119      PMS_PP_MSData (PlotFactoryPtr factory);
00120      
00121      /* Copy constructor.  See operator=(). */
00122      PMS_PP_MSData (const PMS_PP_MSData & copy);
00123      ~PMS_PP_MSData();
00124 
00125 
00126      /* Overrides PlotMSPlotParameters::Group::operator=(). */
00127      Group *clone() const {
00128           return new PMS_PP_MSData (*this);
00129      }
00130 
00131      /* Implements PlotMSPlotParameters::Group::name(). */ 
00132      const String & name() const {
00133           static String groupName = PMS_PP::UPDATE_MSDATA_NAME;
00134           return groupName;
00135      }
00136 
00137      /* Implements PlotMSPlotParameters::Group::toRecord(). */
00138      Record toRecord() const;
00139 
00140      /* Implements PlotMSPlotParameters::Group::fromRecord(). */
00141      void fromRecord (const Record & record);
00142      
00143      /* Implements PlotMSPlotParameters::Group::requiresRedrawOnChanged(). */ 
00144      bool requiresRedrawOnChange() const {
00145           return true;
00146      }
00147 
00148      /* Overrides PlotMSPlotParameters::Group::operator=(). */
00149      Group & operator= (const Group & other);
00150 
00151      /* Overrides PlotMSPlotParameters::Group::operator==(). */
00152      bool operator== (const Group & other) const;
00153 
00154 
00155      bool isSet() const {
00156           return !itsFilename_.empty();
00157      }
00158 
00159      const String & filename() const {
00160           return itsFilename_;
00161      }
00162      void setFilename (const String & value) {
00163           if (itsFilename_ != value) {
00164                itsFilename_ = value;
00165                updated();
00166           }
00167      }
00168 
00169 
00170      const PlotMSSelection & selection() const {
00171           return itsSelection_;
00172      }
00173      void setSelection (const PlotMSSelection & value) {
00174           if (itsSelection_ != value) {
00175                itsSelection_ = value;
00176                updated();
00177           }
00178      }
00179 
00180 
00181      const PlotMSAveraging & averaging() const {
00182           return itsAveraging_;
00183      }
00184      void setAveraging (const PlotMSAveraging & value) {
00185           if (itsAveraging_ != value) {
00186                itsAveraging_ = value;
00187                updated();
00188           }
00189      }
00190 
00191 
00192      const PlotMSTransformations & transformations() const {
00193           return itsTransformations_;
00194      }
00195      void setTransformations (const PlotMSTransformations & value) {
00196           if (itsTransformations_ != value) {
00197                itsTransformations_ = value;
00198                updated();
00199           }
00200      }
00201 
00202 private:
00203          /* Parameters' values */
00204      PlotMSSelection itsSelection_;
00205      String itsFilename_;
00206      PlotMSAveraging itsAveraging_;
00207      PlotMSTransformations itsTransformations_;
00208 
00209      /* Key strings for Record */
00210      static const String REC_SELECTION;
00211      static const String REC_FILENAME;
00212      static const String REC_AVERAGING;
00213      static const String REC_TRANSFORMATIONS;
00214 
00215 
00216      void setDefaults();
00217 };
00218 
00219 
00220 
00221 
00222 
00223 
00224 // Subclass of PlotMSPlotParameters::Group to handle cache parameters.
00225 // Currently includes:
00226 // * x and y axes
00227 // * x and y data columns
00228 // Parameters are vector-based, on a per-plot basis.
00229 //
00230 class PMS_PP_Cache : public PlotMSPlotParameters::Group {
00231 
00232 public:
00233      /* Constructor which takes a factory */
00234      PMS_PP_Cache (PlotFactoryPtr factory);
00235      
00236      /* Copy constructor.  See operator=(). */
00237      PMS_PP_Cache (const PMS_PP_Cache & copy);
00238 
00239      ~PMS_PP_Cache();
00240 
00241      /* Implements PlotMSPlotParameters::Group::clone(). */   
00242      Group *clone() const {
00243           return new PMS_PP_Cache (*this);
00244      }
00245 
00246      /* Implements PlotMSPlotParameters::Group::name(). */ 
00247      const String & name() const {
00248           static String groupName = PMS_PP::UPDATE_CACHE_NAME;
00249           return groupName;
00250      }
00251 
00252      /* Implements PlotMSPlotParameters::Group::toRecord(). */
00253      Record toRecord() const;
00254 
00255      /* Implements PlotMSPlotParameters::Group::fromRecord(). */
00256      void fromRecord (const Record & record);
00257      
00258      /* Implements PlotMSPlotParameters::Group::requiresRedrawOnChanged(). */ 
00259      bool requiresRedrawOnChange() const {
00260           return true;
00261      }
00262 
00263      /* Overrides PlotMSPlotParameters::Group::operator=(). */
00264      Group & operator= (const Group & other);
00265 
00266      /* Overrides PlotMSPlotParameters::Group::operator==(). */
00267      bool operator== (const Group & other) const;
00268 
00269 
00270 
00271      // Gets how many axes and data columns there are.
00272      // <group>
00273      unsigned int numXAxes() const;
00274      unsigned int numYAxes() const;
00275      // </group>
00276 
00277 
00278      void setXAxis (const PMS::Axis & axis, const PMS::DataColumn & data,
00279                     unsigned int index = 0) {
00280           setAxes (axis, yAxis (index), data, yDataColumn (index), index);
00281      }
00282      void setYAxis (const PMS::Axis & axis, const PMS::DataColumn & data,
00283                     unsigned int index = 0) {
00284           setAxes (xAxis (index), axis, xDataColumn (index), data, index);
00285      }
00286      void setAxes (const PMS::Axis & xAxis, const PMS::Axis & yAxis,
00287                    const PMS::DataColumn & xData,
00288                    const PMS::DataColumn & yData, unsigned int index = 0);
00289 
00290 
00291      const vector<PMS::Axis> &xAxes() const {
00292           return itsXAxes_;
00293      }
00294      void setXAxes (const vector<PMS::Axis> &value) {
00295           if (itsXAxes_ != value) {
00296                itsXAxes_ = value;
00297                updated();
00298           }
00299      }
00300      PMS::Axis xAxis (unsigned int index = 0) const {
00301           if (index >= itsXAxes_.size())
00302                const_cast< vector<PMS::Axis>& >(itsXAxes_).resize (index + 1);
00303           return itsXAxes_[index];
00304      }
00305      void setXAxis (const PMS::Axis & value, unsigned int index = 0) {
00306           if (index >= itsXAxes_.size())
00307                itsXAxes_.resize (index + 1);
00308           if (itsXAxes_[index] != value) {
00309                itsXAxes_[index] = value;
00310                updated();
00311           }
00312      }
00313 
00314 
00315      const vector<PMS::Axis>&yAxes() const {
00316           return itsYAxes_;
00317      }
00318      void setYAxes (const vector<PMS::Axis> &value) {
00319           if (itsYAxes_ != value) {
00320                itsYAxes_ = value;
00321                updated();
00322           }
00323      }
00324      PMS::Axis yAxis (unsigned int index = 0) const {
00325           if (index >= itsYAxes_.size())
00326                const_cast< vector<PMS::Axis> &>(itsYAxes_).resize (index + 1);
00327           return itsYAxes_[index];
00328      }
00329      void setYAxis (const PMS::Axis & value, unsigned int index = 0) {
00330           if (index >= itsYAxes_.size())
00331                itsYAxes_.resize (index + 1);
00332           if (itsYAxes_[index] != value)   {
00333                itsYAxes_[index] = value;
00334                updated();
00335           }
00336      }
00337 
00338 
00339      const vector<PMS::DataColumn> &xDataColumns() const {
00340           return itsXData_;
00341      }
00342      void setXDataColumns (const vector < PMS::DataColumn > &value) {
00343           if (itsXData_ != value)   {
00344                itsXData_ = value;
00345                updated();
00346           }
00347      }
00348      PMS::DataColumn xDataColumn (unsigned int index = 0) const {
00349           if (index >= itsXData_.size())
00350                const_cast < vector < PMS::DataColumn >
00351                &>(itsXData_).resize (index + 1);
00352           return itsXData_[index];
00353      }
00354      void setXDataColumn (const PMS::DataColumn & value, unsigned int index =
00355                                0) {
00356           if (index >= itsXData_.size())
00357                itsXData_.resize (index + 1);
00358           if (itsXData_[index] != value)   {
00359                itsXData_[index] = value;
00360                updated();
00361           }
00362      }
00363 
00364 
00365      const vector < PMS::DataColumn > &yDataColumns() const {
00366           return itsYData_;
00367      }
00368      void setYDataColumns (const vector < PMS::DataColumn > &value) {
00369           if (itsYData_ != value) {
00370                itsYData_ = value;
00371                updated();
00372           }
00373      }
00374      PMS::DataColumn yDataColumn (unsigned int index = 0) const {
00375           if (index >= itsYData_.size())
00376                const_cast < vector < PMS::DataColumn >
00377                &>(itsYData_).resize (index + 1);
00378           return itsYData_[index];
00379      }
00380      void setYDataColumn (const PMS::DataColumn & value, unsigned int index =
00381                                0) {
00382           if (index >= itsYData_.size())
00383                itsYData_.resize (index + 1);
00384           if (itsYData_[index] != value)   {
00385                itsYData_[index] = value;
00386                updated();
00387           }
00388      }
00389 
00390 
00391 private:
00392          /* Parameters' values */
00393      vector<PMS::Axis> itsXAxes_;
00394      vector<PMS::Axis> itsYAxes_;
00395      vector<PMS::DataColumn> itsXData_;
00396      vector<PMS::DataColumn> itsYData_;
00397      
00398      /* Key strings for Record */
00399      static const String REC_XAXES;
00400      static const String REC_YAXES;
00401      static const String REC_XDATACOLS;
00402      static const String REC_YDATACOLS;
00403 
00404 
00405      void setDefaults();
00406 };
00407 
00408 
00409 
00410 
00411 
00412 
00413 // Subclass of PlotMSPlotParameters::Group to handle axes parameters.
00414 // Currently includes:
00415 // * canvas attach axes
00416 // * axes ranges, if any
00417 // Parameters are vector-based, on a per-plot basis.
00418 //
00419 class PMS_PP_Axes : public PlotMSPlotParameters::Group {
00420 
00421 public:
00422      /* Constructor which takes a factory */
00423      PMS_PP_Axes (PlotFactoryPtr factory);
00424      
00425      /* Copy constructor.  See operator=(). */
00426      PMS_PP_Axes (const PMS_PP_Axes & copy);
00427 
00428      ~PMS_PP_Axes();
00429 
00430 
00431      /* Implements PlotMSPlotParameters::Group::clone(). */   
00432      Group *clone() const {
00433           return new PMS_PP_Axes (*this);
00434      }
00435 
00436      /* Implements PlotMSPlotParameters::Group::name(). */ 
00437      const String & name() const {
00438           static String groupName = PMS_PP::UPDATE_AXES_NAME;
00439           return groupName;
00440      }
00441 
00442      /* Implements PlotMSPlotParameters::Group::toRecord(). */
00443      Record toRecord() const;
00444 
00445      /* Implements PlotMSPlotParameters::Group::fromRecord(). */
00446      void fromRecord (const Record & record);
00447      
00448      /* Implements PlotMSPlotParameters::Group::requiresRedrawOnChanged(). */ 
00449      bool requiresRedrawOnChange() const {
00450           return true;
00451      }
00452 
00453      /* Overrides PlotMSPlotParameters::Group::operator=(). */
00454      Group & operator= (const Group & other);
00455 
00456      /* Overrides PlotMSPlotParameters::Group::operator==(). */
00457      bool operator== (const Group & other) const;
00458 
00459 
00460      // Gets how many axes there are.
00461      // <group>
00462      unsigned int numXAxes() const;
00463      unsigned int numYAxes() const;
00464     // </group>
00465 
00466 
00467      // Sets single versions of the parameters for the given index.
00468      // <group>
00469      void setAxes (const PlotAxis & xAxis, const PlotAxis & yAxis,
00470                    unsigned int index = 0);
00471      void setXRange (const bool & set, const prange_t & range,
00472                      unsigned int index = 0) {
00473           setRanges (set, yRangeSet (index), range, yRange (index), index);
00474      }
00475      void setYRange (const bool & set, const prange_t & range,
00476                      unsigned int index = 0) {
00477           setRanges (xRangeSet (index), set, xRange (index), range, index);
00478      }
00479      void setRanges (const bool & xSet, const bool & ySet,
00480                      const prange_t & xRange, const prange_t & yRange,
00481                      unsigned int index = 0);
00482     // </group>
00483 
00484 
00485      const vector < PlotAxis > &xAxes() const {
00486           return itsXAxes_;
00487      }
00488      void setXAxes (const vector < PlotAxis > &value) {
00489           if (itsXAxes_ != value) {
00490                itsXAxes_ = value;
00491                updated();
00492           }
00493      }
00494      
00495      
00496      PlotAxis xAxis (unsigned int index = 0) const {
00497           if (index >= itsXAxes_.size())
00498                const_cast < vector < PlotAxis > &>(itsXAxes_).resize (index + 1);
00499           return itsXAxes_[index];
00500      }
00501      void setXAxis(const PlotAxis & value, unsigned int index = 0) {
00502           if (index >= itsXAxes_.size())
00503                itsXAxes_.resize (index + 1);
00504           if (itsXAxes_[index] != value) {
00505                itsXAxes_[index] = value;
00506                updated();
00507           }
00508      }
00509 
00510 
00511      const vector<PlotAxis> &yAxes() const {
00512           return itsYAxes_;
00513      }
00514      void setYAxes (const vector < PlotAxis > &value) {
00515           if (itsYAxes_ != value) {
00516                itsYAxes_ = value;
00517                updated();
00518           }
00519      }
00520      
00521      
00522      PlotAxis yAxis (unsigned int index = 0) const {
00523           if (index >= itsYAxes_.size())
00524                const_cast < vector < PlotAxis > &>(itsYAxes_).resize (index + 1);
00525           return itsYAxes_[index];
00526      }
00527      void setYAxis (const PlotAxis & value, unsigned int index = 0) {
00528           if (index >= itsYAxes_.size())
00529                itsYAxes_.resize (index + 1);
00530           if (itsYAxes_[index] != value) {
00531                itsYAxes_[index] = value;
00532                updated();
00533           }
00534      }
00535 
00536 
00537      const vector<bool> &xRangesSet() const {
00538           return itsXRangesSet_;
00539      }
00540      void setXRanges (const vector < bool > &value) {
00541           if (itsXRangesSet_ != value) {
00542                itsXRangesSet_ = value;
00543                updated();
00544           }
00545      }
00546      
00547      
00548      bool xRangeSet (unsigned int index = 0) const {
00549           if (index >= itsXRangesSet_.size())
00550                const_cast < vector < bool > &>(itsXRangesSet_).resize (index + 1);
00551           return itsXRangesSet_[index];
00552      }
00553      void setXRange (const bool & value, unsigned int index = 0) {
00554           if (index >= itsXRangesSet_.size())
00555                itsXRangesSet_.resize (index + 1);
00556           if (itsXRangesSet_[index] != value) {
00557                itsXRangesSet_[index] = value;
00558                updated();
00559           }
00560      }
00561 
00562 
00563      const vector < bool > &yRangesSet() const {
00564           return itsYRangesSet_;
00565      }
00566      void setYRanges (const vector < bool > &value) {
00567           if (itsYRangesSet_ != value) {
00568                itsYRangesSet_ = value;
00569                updated();
00570           }
00571      }
00572      
00573      
00574      bool yRangeSet (unsigned int index = 0) const {
00575           if (index >= itsYRangesSet_.size())
00576                const_cast < vector < bool > &>(itsYRangesSet_).resize (index + 1);
00577           return itsYRangesSet_[index];
00578      }
00579      void setYRange (const bool & value, unsigned int index = 0) {
00580           if (index >= itsYRangesSet_.size())
00581                itsYRangesSet_.resize (index + 1);
00582           if (itsYRangesSet_[index] != value) {
00583                itsYRangesSet_[index] = value;
00584                updated();
00585           }
00586      }
00587 
00588 
00589 
00590      const vector < prange_t > &xRanges() const {
00591           return itsXRanges_;
00592      }
00593      void setXRanges (const vector < prange_t > &value) {
00594           if (itsXRanges_ != value) {
00595                itsXRanges_ = value;
00596                updated();
00597           }
00598      }
00599      
00600      
00601      const prange_t & xRange (unsigned int index = 0) const {
00602           return itsXRanges_[index];
00603      }
00604      void setXRange (const prange_t & value, unsigned int index = 0) {
00605           if (itsXRanges_[index] != value) {
00606                itsXRanges_[index] = value;
00607                updated();
00608           }
00609      }
00610 
00611 
00612      const vector < prange_t > &yRanges() const {
00613           return itsYRanges_;
00614      }
00615      void setYRanges (const vector < prange_t > &value) {
00616           if (itsYRanges_ != value) {
00617                itsYRanges_ = value;
00618                updated();
00619           }
00620      }
00621      
00622      
00623      const prange_t & yRange (unsigned int index = 0) const {
00624           return itsYRanges_[index];
00625      }
00626      void setYRange (const prange_t & value, unsigned int index = 0) {
00627           if (itsYRanges_[index] != value) {
00628                itsYRanges_[index] = value;
00629                updated();
00630           }
00631      }
00632 
00633 private:
00634          /* Parameters' values */
00635      vector<PlotAxis> itsXAxes_;
00636      vector<PlotAxis> itsYAxes_;
00637      vector<bool> itsXRangesSet_;
00638      vector<bool> itsYRangesSet_;
00639      vector<prange_t> itsXRanges_;
00640      vector<prange_t> itsYRanges_;
00641 
00642      /* Key strings for Record */
00643      static const String REC_XAXES;
00644      static const String REC_YAXES;
00645      static const String REC_XRANGESSET;
00646      static const String REC_YRANGESSET;
00647      static const String REC_XRANGES;
00648      static const String REC_YRANGES;
00649 
00650 
00651      void setDefaults();
00652 };
00653 
00654 
00655 
00656 
00657 
00658 // Subclass of PlotMSPlotParameters::Group to handle canvas parameters.
00659 // Currently includes:
00660 // * axes label formats
00661 // * whether to show the canvas axes or not
00662 // * whether to show the legend or not, and its position
00663 // * canvas title label format
00664 // * whether to show grid lines, and their properties
00665 // Parameters are vector-based, on a per-canvas basis.
00666 //
00667 class PMS_PP_Canvas : public PlotMSPlotParameters::Group {
00668 
00669 public:
00670      /* Constructor which takes a factory */
00671      PMS_PP_Canvas (PlotFactoryPtr factory);
00672 
00673      /* Copy constructor.  See operator=(). */
00674      PMS_PP_Canvas (const PMS_PP_Canvas & copy);
00675 
00676      ~PMS_PP_Canvas();
00677 
00678      /* Implements PlotMSPlotParameters::Group::clone(). */   
00679      Group *clone() const {
00680           return new PMS_PP_Canvas (*this);
00681      }
00682 
00683      /* Implements PlotMSPlotParameters::Group::name(). */ 
00684      const String & name() const {
00685           static String groupName = PMS_PP::UPDATE_CANVAS_NAME;
00686           return groupName;
00687      }
00688 
00689      /* Implements PlotMSPlotParameters::Group::toRecord(). */
00690      Record toRecord() const;
00691 
00692      /* Implements PlotMSPlotParameters::Group::fromRecord(). */
00693      void fromRecord (const Record & record);
00694      
00695      /* Implements PlotMSPlotParameters::Group::requiresRedrawOnChanged(). */ 
00696      bool requiresRedrawOnChange() const {
00697           return true;
00698      }
00699 
00700      /* Overrides PlotMSPlotParameters::Group::operator=(). */
00701      Group & operator= (const Group & other);
00702 
00703      /* Overrides PlotMSPlotParameters::Group::operator==(). */
00704      bool operator== (const Group & other) const;
00705 
00706 
00707      // Gets how many canvases there are.
00708      unsigned int numCanvases() const;
00709 
00710     // Sets single versions of the parameters for the given index.
00711     // <group>
00712      void setLabelFormats (const PlotMSLabelFormat & xFormat,
00713                            const PlotMSLabelFormat & yFormat,
00714                            unsigned int index = 0);
00715      void showAxes (const bool & xShow, const bool & yShow,
00716                     unsigned int index = 0);
00717      void showLegend (const bool & show,
00718                       const PlotCanvas::LegendPosition & pos,
00719                       unsigned int index = 0);
00720 
00721      void showGridMajor (const bool & show, const PlotLinePtr & line,
00722                          unsigned int index = 0) {
00723           showGrid (show, gridMinorShown (index), line, gridMinorLine (index),
00724                     index);
00725      }
00726      void showGridMinor (const bool & show, const PlotLinePtr & line,
00727                          unsigned int index = 0) {
00728           showGrid (gridMajorShown (index), show, gridMajorLine (index), line,
00729                     index);
00730      }
00731      void showGrid (const bool & showMajor, const bool & showMinor,
00732                     const PlotLinePtr & majorLine,
00733                     const PlotLinePtr & minorLine, unsigned int index = 0);
00734     // </group>
00735 
00736 
00737 
00738      const vector < PlotMSLabelFormat > &xLabelFormats() const {
00739           return itsXLabels_;
00740      }
00741      void setXLabelFormats (const vector < PlotMSLabelFormat > &value) {
00742           if (itsXLabels_ != value) {
00743                itsXLabels_ = value;
00744                updated();
00745           }
00746      }
00747      const PlotMSLabelFormat & xLabelFormat (unsigned int index = 0) const {
00748           return itsXLabels_[index];
00749      }
00750      void setXLabelFormat (const PlotMSLabelFormat & value,
00751                            unsigned int index = 0) {
00752           if (itsXLabels_[index] != value) {
00753                itsXLabels_[index] = value;
00754                updated();
00755           }
00756      }
00757 
00758 
00759      const vector < PlotMSLabelFormat > &yLabelFormats() const {
00760           return itsYLabels_;
00761      }
00762      void setYLabelFormats (const vector < PlotMSLabelFormat > &value) {
00763           if (itsYLabels_ != value) {
00764                itsYLabels_ = value;
00765                updated();
00766           }
00767      }
00768      const PlotMSLabelFormat & yLabelFormat (unsigned int index = 0) const {
00769           return itsYLabels_[index];
00770      }
00771      void setYLabelFormat (const PlotMSLabelFormat & value,
00772                            unsigned int index = 0) {
00773           if (itsYLabels_[index] != value) {
00774                itsYLabels_[index] = value;
00775                updated();
00776           }
00777      }
00778 
00779 
00780      const vector < bool > &xAxesShown() const {
00781           return itsXAxesShown_;
00782      }
00783      void showXAxes (const vector < bool > &value) {
00784           if (itsXAxesShown_ != value) {
00785                itsXAxesShown_ = value;
00786                updated();
00787           }
00788      }
00789      bool xAxisShown (unsigned int index = 0) const {
00790           if (index >= itsXAxesShown_.size())
00791                const_cast < vector < bool > &>(itsXAxesShown_).resize (index + 1);
00792           return itsXAxesShown_[index];
00793      }
00794      void showXAxis (const bool & value, unsigned int index = 0) {
00795           if (index >= itsXAxesShown_.size())
00796                itsXAxesShown_.resize (index + 1);
00797           if (itsXAxesShown_[index] != value) {
00798                itsXAxesShown_[index] = value;
00799                updated();
00800           }
00801      }
00802 
00803 
00804      const vector < bool > &yAxesShown() const {
00805           return itsYAxesShown_;
00806      }
00807      void showYAxes (const vector < bool > &value) {
00808           if (itsYAxesShown_ != value) {
00809                itsYAxesShown_ = value;
00810                updated();
00811           }
00812      }
00813      bool yAxisShown (unsigned int index = 0) const {
00814           if (index >= itsYAxesShown_.size())
00815                const_cast < vector < bool > &>(itsYAxesShown_).resize (index + 1);
00816           return itsYAxesShown_[index];
00817      }
00818      void showYAxis (const bool & value, unsigned int index = 0) {
00819           if (index >= itsYAxesShown_.size())
00820                itsYAxesShown_.resize (index + 1);
00821           if (itsYAxesShown_[index] != value) {
00822                itsYAxesShown_[index] = value;
00823                updated();
00824           }
00825      }
00826 
00827 
00828      const vector < bool > &legendsShown() const {
00829           return itsLegendsShown_;
00830      }
00831      void showLegends (const vector < bool > &value) {
00832           if (itsLegendsShown_ != value) {
00833                itsLegendsShown_ = value;
00834                updated();
00835           }
00836      }
00837      bool legendShown (unsigned int index = 0) const {
00838           if (index >= itsLegendsShown_.size())
00839                const_cast < vector < bool > &>(itsLegendsShown_).resize (index + 1);
00840           return itsLegendsShown_[index];
00841      }
00842      void showLegend (const bool & value, unsigned int index = 0) {
00843           if (index >= itsLegendsShown_.size())
00844                itsLegendsShown_.resize (index + 1);
00845           if (itsLegendsShown_[index] != value) {
00846                itsLegendsShown_[index] = value;
00847                updated();
00848           }
00849      }
00850 
00851 
00852      const vector < PlotCanvas::LegendPosition > &legendPositions() const {
00853           return itsLegendsPos_;
00854      }
00855      void showLegends (const vector < PlotCanvas::LegendPosition > &value) {
00856           if (itsLegendsPos_ != value) {
00857                itsLegendsPos_ = value;
00858                updated();
00859           }
00860      }
00861      PlotCanvas::LegendPosition legendPosition (unsigned int index = 0) const {
00862           if (index >= itsLegendsPos_.size())
00863                const_cast < vector < PlotCanvas::LegendPosition >
00864                &>(itsLegendsPos_).resize (index + 1);
00865           return itsLegendsPos_[index];
00866      }
00867      void showLegend (const PlotCanvas::LegendPosition & value,
00868                       unsigned int index = 0) {
00869           if (index >= itsLegendsPos_.size())
00870                itsLegendsPos_.resize (index + 1);
00871           if (itsLegendsPos_[index] != value) {
00872                itsLegendsPos_[index] = value;
00873                updated();
00874           }
00875      }
00876 
00877 
00878      const vector < PlotMSLabelFormat > &titleFormats() const {
00879           return itsTitles_;
00880      }
00881      void setTitleFormats (const vector < PlotMSLabelFormat > &value) {
00882           if (itsTitles_ != value) {
00883                itsTitles_ = value;
00884                updated();
00885           }
00886      }
00887      const PlotMSLabelFormat & titleFormat (unsigned int index = 0) const {
00888           return itsTitles_[index];
00889      }
00890      void setTitleFormat (const PlotMSLabelFormat & value, unsigned int index =
00891                                0) {
00892           if (itsTitles_[index] != value) {
00893                itsTitles_[index] = value;
00894                updated();
00895           }
00896      }
00897 
00898 
00899      const vector < bool > &gridMajorsShown() const {
00900           return itsGridMajsShown_;
00901      }
00902      void showGridMajors (const vector < bool > &value) {
00903           if (itsGridMajsShown_ != value) {
00904                itsGridMajsShown_ = value;
00905                updated();
00906           }
00907      }
00908      bool gridMajorShown (unsigned int index = 0) const {
00909           if (index >= itsGridMajsShown_.size())
00910                const_cast < vector < bool > &>(itsGridMajsShown_).resize (index + 1);
00911           return itsGridMajsShown_[index];
00912      }
00913      void showGridMajor (const bool & value, unsigned int index = 0) {
00914           if (index >= itsGridMajsShown_.size())
00915                itsGridMajsShown_.resize (index + 1);
00916           if (itsGridMajsShown_[index] != value) {
00917                itsGridMajsShown_[index] = value;
00918                updated();
00919           }
00920      }
00921 
00922 
00923      const vector < bool > &gridMinorsShown() const {
00924           return itsGridMinsShown_;
00925      }
00926      void showGridMinors (const vector < bool > &value) {
00927           if (itsGridMinsShown_ != value) {
00928                itsGridMinsShown_ = value;
00929                updated();
00930           }
00931      }
00932      bool gridMinorShown (unsigned int index = 0) const {
00933           if (index >= itsGridMinsShown_.size())
00934                const_cast < vector < bool > &>(itsGridMinsShown_).resize (index + 1);
00935           return itsGridMinsShown_[index];
00936      }
00937      void showGridMinor (const bool & value, unsigned int index = 0) {
00938           if (index >= itsGridMinsShown_.size())
00939                itsGridMinsShown_.resize (index + 1);
00940           if (itsGridMinsShown_[index] != value) {
00941                itsGridMinsShown_[index] = value;
00942                updated();
00943           }
00944      }
00945 
00946 
00947      const vector < PlotLinePtr > &gridMajorLines() const {
00948           return itsGridMajLines_;
00949      }
00950      void setGridMajorLines (const vector < PlotLinePtr > &value) {
00951           if (itsGridMajLines_ != value) {
00952                itsGridMajLines_ = value;
00953                updated();
00954           }
00955      }
00956      PlotLinePtr gridMajorLine (unsigned int index = 0) const {
00957           if (index >= itsGridMajLines_.size())
00958                const_cast < vector < PlotLinePtr >
00959                &>(itsGridMajLines_).resize (index + 1);
00960           return itsGridMajLines_[index];
00961      }
00962      void setGridMajorLine (const PlotLinePtr & value, unsigned int index = 0) {
00963           if (index >= itsGridMajLines_.size())
00964                itsGridMajLines_.resize (index + 1);
00965           if (itsGridMajLines_[index] != value) {
00966                itsGridMajLines_[index] = value;
00967                updated();
00968           }
00969      }
00970 
00971 
00972      const vector < PlotLinePtr > &gridMinorLines() const {
00973           return itsGridMinLines_;
00974      }
00975      void setGridMinorLines (const vector < PlotLinePtr > &value) {
00976           if (itsGridMinLines_ != value) {
00977                itsGridMinLines_ = value;
00978                updated();
00979           }
00980      }
00981      PlotLinePtr gridMinorLine (unsigned int index = 0) const {
00982           if (index >= itsGridMinLines_.size())
00983                const_cast < vector < PlotLinePtr >
00984                &>(itsGridMinLines_).resize (index + 1);
00985           return itsGridMinLines_[index];
00986      }
00987      void setGridMinorLine (const PlotLinePtr & value, unsigned int index = 0) {
00988           if (index >= itsGridMinLines_.size())
00989                itsGridMinLines_.resize (index + 1);
00990           if (itsGridMinLines_[index] != value) {
00991                itsGridMinLines_[index] = value;
00992                updated();
00993           }
00994      }
00995 
00996 
00997 private:
00998          /* Parameters' values */
00999      vector<PlotMSLabelFormat> itsXLabels_;
01000      vector<PlotMSLabelFormat> itsYLabels_;
01001      vector<bool> itsXAxesShown_;
01002      vector<bool> itsYAxesShown_;
01003      vector<bool> itsLegendsShown_;
01004      vector<PlotCanvas::LegendPosition > itsLegendsPos_;
01005      vector<PlotMSLabelFormat> itsTitles_;
01006      vector<bool> itsGridMajsShown_;
01007      vector<bool> itsGridMinsShown_;
01008      vector<PlotLinePtr> itsGridMajLines_;
01009      vector<PlotLinePtr> itsGridMinLines_;
01010 
01011      /* Key strings for Record */
01012      static const String REC_XLABELS;
01013      static const String REC_YLABELS;
01014      static const String REC_SHOWXAXES;
01015      static const String REC_SHOWYAXES;
01016      static const String REC_SHOWLEGENDS;
01017      static const String REC_LEGENDSPOS;
01018      static const String REC_TITLES;
01019      static const String REC_SHOWGRIDMAJS;
01020      static const String REC_SHOWGRIDMINS;
01021      static const String REC_GRIDMAJLINES;
01022      static const String REC_GRIDMINLINES;
01023      
01024      
01025      void setDefaults();
01026 };
01027 
01028 
01029 
01030 
01031 
01032 // Subclass of PlotMSPlotParameters::Group to handle display parameters.
01033 // Currently includes:
01034 // * flagged and unflagged symbols
01035 // * plot title format
01036 // * colorize flag and axis
01037 // Parameters are vector-based, on a per-plot basis.
01038 //
01039 class PMS_PP_Display : public PlotMSPlotParameters::Group {
01040 
01041 public:
01042      /* Constructor which takes a factory */
01043      PMS_PP_Display (PlotFactoryPtr factory);
01044      
01045      /* Copy constructor.  See operator=(). */
01046      PMS_PP_Display (const PMS_PP_Display & copy);
01047 
01048      ~PMS_PP_Display();
01049 
01050 
01051      /* Implements PlotMSPlotParameters::Group::clone(). */   
01052      Group *clone() const {
01053           return new PMS_PP_Display (*this);
01054      }
01055 
01056      /* Implements PlotMSPlotParameters::Group::name(). */ 
01057      const String & name() const {
01058           static String groupName = PMS_PP::UPDATE_DISPLAY_NAME;
01059           return groupName;
01060      }
01061 
01062      /* Implements PlotMSPlotParameters::Group::toRecord(). */
01063      Record toRecord() const;
01064 
01065      /* Implements PlotMSPlotParameters::Group::fromRecord(). */
01066      void fromRecord (const Record & record);
01067      
01068      /* Implements PlotMSPlotParameters::Group::requiresRedrawOnChanged(). */ 
01069      bool requiresRedrawOnChange() const {
01070           return true;
01071      }
01072 
01073      /* Overrides PlotMSPlotParameters::Group::operator=(). */
01074      Group & operator= (const Group & other);
01075 
01076      /* Overrides PlotMSPlotParameters::Group::operator==(). */
01077      bool operator== (const Group & other) const;
01078 
01079 
01080      void setColorize (const bool & colorize, const PMS::Axis & axis,
01081                        unsigned int index = 0);
01082 
01083 
01084      void resizeVectors (unsigned int newSize);
01085 
01086 
01087      const vector < PlotSymbolPtr > &unflaggedSymbols() const {
01088           return itsUnflaggedSymbols_;
01089      }
01090      void setUnflaggedSymbols (const vector < PlotSymbolPtr > &value) {
01091           if (itsUnflaggedSymbols_ != value) {
01092                itsUnflaggedSymbols_ = value;
01093                updated();
01094           }
01095      }
01096      PlotSymbolPtr unflaggedSymbol (unsigned int index = 0) const {
01097           if (index >= itsUnflaggedSymbols_.size())
01098                const_cast < vector < PlotSymbolPtr >
01099                &>(itsUnflaggedSymbols_).resize (index + 1);
01100           return itsUnflaggedSymbols_[index];
01101      }
01102      void setUnflaggedSymbol (const PlotSymbolPtr & value, unsigned int index =
01103                                    0) {
01104           if (index >= itsUnflaggedSymbols_.size())
01105                itsUnflaggedSymbols_.resize (index + 1);
01106           if (itsUnflaggedSymbols_[index] != value) {
01107                itsUnflaggedSymbols_[index] = value;
01108                updated();
01109           }
01110      }
01111 
01112 
01113      const vector < PlotSymbolPtr > &flaggedSymbols() const {
01114           return itsFlaggedSymbols_;
01115      }
01116      void setFlaggedSymbols (const vector < PlotSymbolPtr > &value) {
01117           if (itsFlaggedSymbols_ != value) {
01118                itsFlaggedSymbols_ = value;
01119                updated();
01120           }
01121      }
01122      PlotSymbolPtr flaggedSymbol (unsigned int index = 0) const {
01123           if (index >= itsFlaggedSymbols_.size())
01124                const_cast < vector < PlotSymbolPtr >
01125                &>(itsFlaggedSymbols_).resize (index + 1);
01126           return itsFlaggedSymbols_[index];
01127      }
01128      void setFlaggedSymbol (const PlotSymbolPtr & value, unsigned int index =
01129                                  0) {
01130           if (index >= itsFlaggedSymbols_.size())
01131                itsFlaggedSymbols_.resize (index + 1);
01132           if (itsFlaggedSymbols_[index] != value) {
01133                itsFlaggedSymbols_[index] = value;
01134                updated();
01135           }
01136      }
01137 
01138 
01139      const vector < PlotMSLabelFormat > &titleFormats() const {
01140           return itsTitleFormats_;
01141      }
01142      void setTitleFormats (const vector < PlotMSLabelFormat > &value) {
01143           if (itsTitleFormats_ != value) {
01144                itsTitleFormats_ = value;
01145                updated();
01146           }
01147      }
01148      const PlotMSLabelFormat & titleFormat (unsigned int index = 0) const {
01149           return itsTitleFormats_[index];
01150      }
01151      void setTitleFormat (const PlotMSLabelFormat & value, unsigned int index =
01152                                0) {
01153           if (itsTitleFormats_[index] != value) {
01154                itsTitleFormats_[index] = value;
01155                updated();
01156           }
01157      }
01158 
01159 
01160      const vector < bool > &colorizeFlags() const {
01161           return itsColorizeFlags_;
01162      }
01163      void setColorize (const vector < bool > &value) {
01164           if (itsColorizeFlags_ != value) {
01165                itsColorizeFlags_ = value;
01166                updated();
01167           }
01168      }
01169      bool colorizeFlag (unsigned int index = 0) const {
01170           if (index >= itsColorizeFlags_.size())
01171                const_cast < vector < bool > &>(itsColorizeFlags_).resize (index + 1);
01172           return itsColorizeFlags_[index];
01173      }
01174      void setColorize (const bool & value, unsigned int index = 0) {
01175           if (index >= itsColorizeFlags_.size())
01176                itsColorizeFlags_.resize (index + 1);
01177           if (itsColorizeFlags_[index] != value) {
01178                itsColorizeFlags_[index] = value;
01179                updated();
01180           }
01181      }
01182 
01183 
01184      const vector < PMS::Axis > &colorizeAxes() const {
01185           return itsColorizeAxes_;
01186      }
01187      void setColorize (const vector < PMS::Axis > &value) {
01188           if (itsColorizeAxes_ != value) {
01189                itsColorizeAxes_ = value;
01190                updated();
01191           }
01192      }
01193      PMS::Axis colorizeAxis (unsigned int index = 0) const {
01194           if (index >= itsColorizeAxes_.size())
01195                const_cast < vector < PMS::Axis >
01196                &>(itsColorizeAxes_).resize (index + 1);
01197           return itsColorizeAxes_[index];
01198      }
01199      void setColorize (const PMS::Axis & value, unsigned int index = 0) {
01200           if (index >= itsColorizeAxes_.size())
01201                itsColorizeAxes_.resize (index + 1);
01202           if (itsColorizeAxes_[index] != value) {
01203                itsColorizeAxes_[index] = value;
01204                updated();
01205           }
01206      }
01207 
01208 
01209 private:
01210          /* Parameters' values */
01211      vector<PlotSymbolPtr> itsUnflaggedSymbols_;
01212      vector<PlotSymbolPtr> itsFlaggedSymbols_;
01213      vector<PlotMSLabelFormat> itsTitleFormats_;
01214      vector<bool> itsColorizeFlags_;
01215      vector<PMS::Axis> itsColorizeAxes_;
01216 
01217      /* Key strings for Record */
01218      static const String REC_UNFLAGGEDS;
01219      static const String REC_FLAGGEDS;
01220      static const String REC_TITLES;
01221      static const String REC_COLFLAGS;
01222      static const String REC_COLAXES;
01223 
01224      void setDefaults();
01225 };
01226 
01227 
01228 
01229 
01230 // Subclass of PlotMSPlotParameters::Group to handle iteration parameters.
01231 // Currently includes:
01232 // * which axis to use
01233 // * rows, columns to fit onto each page
01234 // Parameters apply to whole set of plots
01235 //
01236 class PMS_PP_Iteration : public PlotMSPlotParameters::Group {
01237 
01238 
01239         
01240 public:
01241         enum AxisScaleMode   {
01242                 GLOBAL,
01243                 SELF
01244         };
01245 
01246 
01247      /* Constructor which takes a factory */
01248      PMS_PP_Iteration (PlotFactoryPtr factory);
01249      
01250      /* Copy constructor.  See operator=(). */
01251      PMS_PP_Iteration (const PMS_PP_Iteration & copy);
01252 
01253      ~PMS_PP_Iteration();
01254 
01255 
01256      /* Implements PlotMSPlotParameters::Group::clone(). */   
01257      Group *clone() const {
01258           return new PMS_PP_Iteration (*this);
01259      }
01260      
01261      /* Implements PlotMSPlotParameters::Group::name(). */ 
01262      const String & name() const {
01263           static String groupName = PMS_PP::UPDATE_ITERATION_NAME;
01264           return groupName;
01265      }
01266 
01267      /* Implements PlotMSPlotParameters::Group::toRecord(). */
01268      Record toRecord() const;
01269 
01270      /* Implements PlotMSPlotParameters::Group::fromRecord(). */
01271      void fromRecord (const Record & record);
01272      
01273      /* Implements PlotMSPlotParameters::Group::requiresRedrawOnChanged(). */ 
01274      bool requiresRedrawOnChange() const {
01275           return true;
01276      }
01277 
01278      /* Overrides PlotMSPlotParameters::Group::operator=(). */
01279      Group & operator= (const Group & other);
01280 
01281      /* Overrides PlotMSPlotParameters::Group::operator==(). */
01282      bool operator== (const Group & other) const;
01283 
01284 
01285   /* deprecated...
01286      bool enableIteration() const {
01287           return itsEnableIteration_;
01288      }
01289      void setEnableIteration (const bool & value) {
01290           if (itsEnableIteration_ != value) {
01291                itsEnableIteration_ = value;
01292                updated();
01293           }
01294      }
01295   */
01296 
01297      const PlotMSIterParam& iterParam() const {
01298           return itsIterParam_;
01299      }
01300      void setIterParam(PlotMSIterParam iterparam) {
01301        if (itsIterParam_ != iterparam) {
01302          itsIterParam_=iterparam;
01303          updated();
01304        }
01305      }
01306 
01307      PMS::Axis  iterationAxis() const {
01308        //          return itsIterationAxis_;
01309        return itsIterParam_.iterAxis();
01310      }
01311 
01312      void setIterationAxis (const PMS::Axis & value) {
01313        //          if (itsIterationAxis_ != value) {
01314        //               itsIterationAxis_ = value;
01315        if (iterationAxis()!=value) {
01316          itsIterParam_.setIterAxis(value);
01317          updated();
01318        }
01319      }
01320 
01321 
01322      int numRows() const  {
01323        return itsIterParam_.Ny();
01324      }
01325      void setNumRows(const int &value)  {
01326        if (numRows() != value) {
01327          itsIterParam_.setNy(value);
01328          updated();
01329        }
01330      }
01331 
01332      int numColumns() const  {
01333        return itsIterParam_.Nx();
01334      }
01335      void setNumColumns(const int &value)  {
01336        if (numColumns() != value) {
01337          itsIterParam_.setNx(value);
01338          updated();
01339        }
01340      }
01341 
01342      Bool globalXRange() const { 
01343        return !itsIterParam_.xSelfScale(); }
01344 
01345        //       return itsXAxisScaleMode_==PMS_PP_Iteration::GLOBAL; };
01346 
01347      Bool globalYRange() const { 
01348        return !itsIterParam_.ySelfScale(); }
01349   //       return itsYAxisScaleMode_==PMS_PP_Iteration::GLOBAL; };
01350 
01351      AxisScaleMode xAxisScaleMode() const {
01352        //          return itsXAxisScaleMode_;
01353        return (itsIterParam_.xSelfScale() ? 
01354                PMS_PP_Iteration::SELF :
01355                PMS_PP_Iteration::GLOBAL);
01356      }
01357 
01358      void setXAxisScaleMode(AxisScaleMode value) {
01359        //          if (itsXAxisScaleMode_ != value) {
01360        //               itsXAxisScaleMode_ = value;
01361        if (xAxisScaleMode()!=value) {
01362          switch (value) {
01363          case PMS_PP_Iteration::SELF:
01364            itsIterParam_.setXSelfScale(True);
01365            break;
01366          case PMS_PP_Iteration::GLOBAL:
01367            itsIterParam_.setXSelfScale(False);
01368            break;
01369          }
01370          updated();
01371        }
01372      }
01373 
01374 
01375      AxisScaleMode yAxisScaleMode() const {
01376        //          return itsYAxisScaleMode_;
01377        return (itsIterParam_.ySelfScale() ? 
01378                PMS_PP_Iteration::SELF :
01379                PMS_PP_Iteration::GLOBAL);
01380 
01381      }
01382      void setYAxisScaleMode (AxisScaleMode value) {
01383        //          if (itsYAxisScaleMode_ != value) {
01384        //               itsYAxisScaleMode_ = value;
01385        if (yAxisScaleMode()!=value) {
01386          switch (value) {
01387          case PMS_PP_Iteration::SELF:
01388            itsIterParam_.setYSelfScale(True);
01389            break;
01390          case PMS_PP_Iteration::GLOBAL:
01391            itsIterParam_.setYSelfScale(False);
01392            break;
01393          }
01394          updated();
01395        }
01396      }
01397 
01398 private:
01399      /* Parameters' values */
01400      PlotMSIterParam itsIterParam_;
01401 
01402   /*
01403      PMS::Axis itsIterationAxis_;
01404      AxisScaleMode itsXAxisScaleMode_;
01405      AxisScaleMode itsYAxisScaleMode_;
01406   */
01407      int itsNumRows_;
01408      int itsNumColumns_;
01409 
01410      /* Key strings for Record */
01411      static const String REC_ITERPARAM;
01412      static const String REC_ITERATIONAXIS;
01413      static const String REC_NUMROWS;
01414      static const String REC_NUMCOLUMNS;
01415      static const String REC_XAXISSCALEMODE;
01416      static const String REC_YAXISSCALEMODE;
01417 
01418      void setDefaults();
01419 };
01420 
01421 }
01422 
01423 #endif /* PLOTMSPLOTPARAMETERGROUPS_H_ */