casa
$Rev:20696$
|
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_ */