7#include "CmdMediator.h"
8#include "CmdSettingsCurveProperties.h"
9#include "ColorPalette.h"
10#include "DlgSettingsCurveProperties.h"
11#include "EngaugeAssert.h"
13#include "GraphicsPoint.h"
14#include "GraphicsPointFactory.h"
15#include "GraphicsView.h"
17#include "MainWindow.h"
21#include <QGraphicsRectItem>
22#include <QGraphicsScene>
35#include "SettingsForGraph.h"
37#include "SplinePair.h"
39#include "ViewPreview.h"
43const QString CONNECT_AS_FUNCTION_SMOOTH_STR (
"Function - Smooth");
44const QString CONNECT_AS_FUNCTION_STRAIGHT_STR (
"Function - Straight");
45const QString CONNECT_AS_RELATION_SMOOTH_STR (
"Relation - Smooth");
46const QString CONNECT_AS_RELATION_STRAIGHT_STR (
"Relation - Straight");
48const double PREVIEW_WIDTH = 100.0;
49const double PREVIEW_HEIGHT = 100.0;
51const QPointF POS_LEFT (PREVIEW_WIDTH / 3.0,
52 PREVIEW_HEIGHT * 2.0 / 3.0);
53const QPointF POS_CENTER (PREVIEW_WIDTH / 2.0,
54 PREVIEW_HEIGHT / 3.0);
55const QPointF POS_RIGHT (2.0 * PREVIEW_WIDTH / 3.0,
56 PREVIEW_HEIGHT * 2.0 / 3.0);
60 "DlgSettingsCurveProperties",
64 m_modelCurveStylesBefore (0),
65 m_modelCurveStylesAfter (0)
67 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::DlgSettingsCurveProperties";
72 setMinimumWidth (740);
75DlgSettingsCurveProperties::~DlgSettingsCurveProperties()
77 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::~DlgSettingsCurveProperties";
80void DlgSettingsCurveProperties::createCurveName (QGridLayout *layout,
83 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::createCurveName";
85 QLabel *labelCurveName =
new QLabel (tr (
"Curve Name:"));
86 layout->addWidget (labelCurveName, row, 1);
88 m_cmbCurveName =
new QComboBox ();
89 m_cmbCurveName->setWhatsThis (tr (
"Name of the curve that is currently selected for editing"));
90 connect (m_cmbCurveName, SIGNAL (activated (
const QString &)),
this, SLOT (slotCurveName (
const QString &)));
91 layout->addWidget (m_cmbCurveName, row++, 2);
94void DlgSettingsCurveProperties::createLine (QGridLayout *layout,
97 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::createLine";
99 m_groupLine =
new QGroupBox (tr (
"Line"));
100 layout->addWidget (m_groupLine, row++, 2);
102 QGridLayout *layoutGroup =
new QGridLayout;
103 m_groupLine->setLayout (layoutGroup);
105 QLabel *labelLineWidth =
new QLabel (tr (
"Width:"));
106 layoutGroup->addWidget (labelLineWidth, 0, 0);
108 m_spinLineWidth =
new QSpinBox (m_groupLine);
109 m_spinLineWidth->setWhatsThis (tr (
"Select a width for the lines drawn between points.\n\n"
110 "This applies only to graph curves. No lines are ever drawn between axis points."));
111 m_spinLineWidth->setMinimum(1);
112 connect (m_spinLineWidth, SIGNAL (valueChanged (
int)),
this, SLOT (slotLineWidth (
int)));
113 layoutGroup->addWidget (m_spinLineWidth, 0, 1);
115 QLabel *labelLineColor =
new QLabel (tr (
"Color:"));
116 layoutGroup->addWidget (labelLineColor, 1, 0);
118 m_cmbLineColor =
new QComboBox (m_groupLine);
119 m_cmbLineColor->setWhatsThis (tr (
"Select a color for the lines drawn between points.\n\n"
120 "This applies only to graph curves. No lines are ever drawn between axis points."));
122 connect (m_cmbLineColor, SIGNAL (activated (
const QString &)),
this, SLOT (slotLineColor (
const QString &)));
123 layoutGroup->addWidget (m_cmbLineColor, 1, 1);
125 QLabel *labelLineType =
new QLabel (tr (
"Connect as:"));
126 layoutGroup->addWidget (labelLineType, 2, 0);
128 m_cmbLineType =
new QComboBox (m_groupLine);
129 m_cmbLineType->addItem (CONNECT_AS_FUNCTION_STRAIGHT_STR, QVariant (CONNECT_AS_FUNCTION_STRAIGHT));
130 m_cmbLineType->addItem (CONNECT_AS_FUNCTION_SMOOTH_STR, QVariant (CONNECT_AS_FUNCTION_SMOOTH));
131 m_cmbLineType->addItem (CONNECT_AS_RELATION_STRAIGHT_STR, QVariant (CONNECT_AS_RELATION_STRAIGHT));
132 m_cmbLineType->addItem (CONNECT_AS_RELATION_SMOOTH_STR, QVariant (CONNECT_AS_RELATION_SMOOTH));
133 m_cmbLineType->setWhatsThis (tr (
"Select rule for connecting points with lines.\n\n"
134 "If the curve is connected as a single-valued function then the points are ordered by "
135 "increasing value of the independent variable.\n\n"
136 "If the curve is connected as a closed contour, then the points are ordered by age, except for "
137 "points placed along an existing line. Any point placed on top of any existing line is inserted "
138 "between the two endpoints of that line - as if its age was between the ages of the two "
140 "Lines are drawn between successively ordered points.\n\n"
141 "Straight curves are drawn with straight lines between successive points. Smooth curves are drawn "
142 "with smooth lines between successive points.\n\n"
143 "This applies only to graph curves. No lines are ever drawn between axis points."));
144 connect (m_cmbLineType, SIGNAL (activated (
const QString &)),
this, SLOT (slotLineType (
const QString &)));
145 layoutGroup->addWidget (m_cmbLineType, 2, 1);
148void DlgSettingsCurveProperties::createPoint (QGridLayout *layout,
151 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::createPoint";
153 m_groupPoint =
new QGroupBox (tr (
"Point"));
154 layout->addWidget (m_groupPoint, row++, 1);
156 QGridLayout *layoutGroup =
new QGridLayout;
157 m_groupPoint->setLayout (layoutGroup);
159 QLabel *labelPointShape =
new QLabel(tr (
"Shape:"));
160 layoutGroup->addWidget (labelPointShape, 0, 0);
162 m_cmbPointShape =
new QComboBox (m_groupPoint);
163 m_cmbPointShape->setWhatsThis (tr (
"Select a shape for the points"));
164 m_cmbPointShape->addItem (pointShapeToString (POINT_SHAPE_CIRCLE),
166 m_cmbPointShape->addItem (pointShapeToString (POINT_SHAPE_CROSS),
168 m_cmbPointShape->addItem (pointShapeToString (POINT_SHAPE_DIAMOND),
169 POINT_SHAPE_DIAMOND);
170 m_cmbPointShape->addItem (pointShapeToString (POINT_SHAPE_SQUARE),
172 m_cmbPointShape->addItem (pointShapeToString (POINT_SHAPE_TRIANGLE),
173 POINT_SHAPE_TRIANGLE);
174 m_cmbPointShape->addItem (pointShapeToString (POINT_SHAPE_X),
176 connect (m_cmbPointShape, SIGNAL (activated (
const QString &)),
this, SLOT (slotPointShape (
const QString &)));
177 layoutGroup->addWidget (m_cmbPointShape, 0, 1);
179 QLabel *labelPointRadius =
new QLabel (tr (
"Radius:"));
180 layoutGroup->addWidget (labelPointRadius, 1, 0);
182 m_spinPointRadius =
new QSpinBox (m_groupPoint);
183 m_spinPointRadius->setWhatsThis (tr (
"Select a radius, in pixels, for the points"));
184 m_spinPointRadius->setMinimum (1);
185 connect (m_spinPointRadius, SIGNAL (valueChanged (
int)),
this, SLOT (slotPointRadius (
int)));
186 layoutGroup->addWidget (m_spinPointRadius, 1, 1);
188 QLabel *labelPointLineWidth =
new QLabel (tr (
"Line width:"));
189 layoutGroup->addWidget (labelPointLineWidth, 2, 0);
191 m_spinPointLineWidth =
new QSpinBox (m_groupPoint);
192 m_spinPointLineWidth->setWhatsThis (tr (
"Select a line width, in pixels, for the points.\n\n"
193 "A larger width results in a thicker line, with the exception of a value of zero "
194 "which always results in a line that is one pixel wide (which is easy to see even "
195 "when zoomed far out)"));
196 m_spinPointLineWidth->setMinimum (0);
197 connect (m_spinPointLineWidth, SIGNAL (valueChanged (
int)),
this, SLOT (slotPointLineWidth (
int)));
198 layoutGroup->addWidget (m_spinPointLineWidth, 2, 1);
200 QLabel *labelPointColor =
new QLabel (tr (
"Color:"));
201 layoutGroup->addWidget (labelPointColor, 3, 0);
203 m_cmbPointColor =
new QComboBox (m_groupPoint);
204 m_cmbPointColor->setWhatsThis (tr (
"Select a color for the line used to draw the point shapes"));
206 connect (m_cmbPointColor, SIGNAL (activated (
const QString &)),
this, SLOT (slotPointColor (
const QString &)));
207 layoutGroup->addWidget (m_cmbPointColor, 3, 1);
212 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::createOptionalSaveDefault";
214 m_btnSaveDefault =
new QPushButton (
"Save As Default");
215 m_btnSaveDefault->setWhatsThis (tr (
"Save the visible curve settings for use as future defaults, according to the curve name selection.\n\n"
216 "If the visible settings are for the axes curve, then they will be used for future "
217 "axes curves, until new settings are saved as the defaults.\n\n"
218 "If the visible settings are for the Nth graph curve in the curve list, then they will be used for future "
219 "graph curves that are also the Nth graph curve in their curve list, until new settings are saved as the defaults."));
220 connect (m_btnSaveDefault, SIGNAL (released ()),
this, SLOT (slotSaveDefault ()));
221 layout->addWidget (m_btnSaveDefault, 0, Qt::AlignLeft);
224void DlgSettingsCurveProperties::createPreview (QGridLayout *layout,
227 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::createPreview";
229 QLabel *labelPreview =
new QLabel (tr (
"Preview"));
230 layout->addWidget (labelPreview, row++, 0, 1, 4);
232 m_scenePreview =
new QGraphicsScene (
this);
234 ViewPreview::VIEW_ASPECT_RATIO_ONE_TO_ONE,
236 m_viewPreview->setWhatsThis (tr (
"Preview window that shows how current settings affect the points and line of the selected curve.\n\n"
237 "The X coordinate is in the horizontal direction, and the Y coordinate is in the vertical direction. A "
238 "function can have only one Y value, at most, for any X value, but a relation can have multiple Y values "
239 "for one X value."));
240 m_viewPreview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
241 m_viewPreview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
243 m_viewPreview->setRenderHint (QPainter::Antialiasing);
245 layout->addWidget (m_viewPreview, row++, 0, 1, 4);
250 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::createSubPanel";
252 QWidget *subPanel =
new QWidget ();
253 QGridLayout *layout =
new QGridLayout (subPanel);
254 subPanel->setLayout (layout);
257 createCurveName (layout, row);
259 int rowLeft = row, rowRight = row++;
260 createPoint (layout, rowLeft);
261 createLine (layout, rowRight);
262 createPreview (layout, row);
264 layout->setColumnStretch(0, 1);
265 layout->setColumnStretch(1, 0);
266 layout->setColumnStretch(2, 0);
267 layout->setColumnStretch(3, 1);
269 layout->setRowStretch (0, 1);
274void DlgSettingsCurveProperties::drawLine (
bool isRelation,
277 const double Z_LINE = -1.0;
281 QPointF p0 (POS_LEFT), p1 (POS_CENTER), p2 (POS_RIGHT);
294 vector<SplinePair> xy;
303 path.cubicTo (QPointF (spline.p1(0).x(),
305 QPointF (spline.p2(0).x(),
308 path.cubicTo (QPointF (spline.p1(1).x(),
310 QPointF (spline.p2(1).x(),
319 QGraphicsPathItem *line =
new QGraphicsPathItem (path);
320 line->setPen (QPen (QBrush (ColorPaletteToQColor (lineStyle.
paletteColor())),
322 line->setZValue (Z_LINE);
323 m_scenePreview->addItem (line);
326void DlgSettingsCurveProperties::drawPoints (
const PointStyle &pointStyle)
328 const QString NULL_IDENTIFIER;
356 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::handleOk";
358 ENGAUGE_CHECK_PTR (m_modelCurveStylesBefore);
359 ENGAUGE_CHECK_PTR (m_modelCurveStylesAfter);
363 *m_modelCurveStylesBefore,
364 *m_modelCurveStylesAfter);
372 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::load";
377 if (m_modelCurveStylesBefore != 0) {
378 delete m_modelCurveStylesBefore;
380 if (m_modelCurveStylesAfter != 0) {
381 delete m_modelCurveStylesAfter;
389 m_cmbCurveName->clear ();
390 m_cmbCurveName->addItem (AXIS_CURVE_NAME);
392 QStringList::const_iterator itr;
393 for (itr = curveNames.begin (); itr != curveNames.end (); itr++) {
395 QString curveName = *itr;
396 m_cmbCurveName->addItem (curveName);
399 loadForCurveName (
mainWindow().selectedGraphCurve());
405void DlgSettingsCurveProperties::loadForCurveName (
const QString &curveName)
407 int indexCurveName = m_cmbCurveName->findText(curveName);
408 ENGAUGE_ASSERT (indexCurveName >= 0);
409 m_cmbCurveName->setCurrentIndex(indexCurveName);
411 int indexPointShape = m_cmbPointShape->findData (QVariant (m_modelCurveStylesAfter->
pointShape (curveName)));
412 ENGAUGE_ASSERT (indexPointShape >= 0);
413 m_cmbPointShape->setCurrentIndex (indexPointShape);
415 m_spinPointRadius->setValue (m_modelCurveStylesAfter->
pointRadius(curveName));
416 m_spinPointLineWidth->setValue (m_modelCurveStylesAfter->
pointLineWidth(curveName));
418 int indexPointColor = m_cmbPointColor->findData (QVariant (m_modelCurveStylesAfter->
pointColor(curveName)));
419 ENGAUGE_ASSERT (indexPointColor >= 0);
420 m_cmbPointColor->setCurrentIndex (indexPointColor);
422 int indexLineColor = m_cmbLineColor->findData (QVariant (m_modelCurveStylesAfter->
lineColor(curveName)));
423 ENGAUGE_ASSERT (indexLineColor >= 0);
424 m_cmbLineColor->setCurrentIndex (indexLineColor);
426 m_spinLineWidth->setValue (m_modelCurveStylesAfter->
lineWidth(curveName));
428 int indexCurveConnectAs = m_cmbLineType->findData (QVariant (m_modelCurveStylesAfter->
lineConnectAs (curveName)));
429 if (indexCurveConnectAs >= 0) {
431 m_cmbLineType->setCurrentIndex (indexCurveConnectAs);
435 m_cmbLineColor->setEnabled (curveName != AXIS_CURVE_NAME);
436 m_spinLineWidth->setEnabled (curveName != AXIS_CURVE_NAME);
437 m_cmbLineType->setEnabled (curveName != AXIS_CURVE_NAME);
443void DlgSettingsCurveProperties::resetSceneRectangle ()
451 QGraphicsRectItem *itemPerimeter =
new QGraphicsRectItem(rect);
452 itemPerimeter->setVisible(
false);
453 m_scenePreview->addItem (itemPerimeter);
454 m_viewPreview->centerOn (QPointF (0.0, 0.0));
459 m_cmbCurveName->setCurrentText (curveName);
460 loadForCurveName (curveName);
463void DlgSettingsCurveProperties::slotCurveName(
const QString &curveName)
465 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::slotCurveName";
470 if (!curveName.isEmpty () && (m_modelCurveStylesAfter != 0)) {
472 loadForCurveName (curveName);
476void DlgSettingsCurveProperties::slotLineColor(
const QString &lineColor)
478 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::slotLineColor color=" << lineColor.toLatin1().data();
482 m_modelCurveStylesAfter->
setLineColor(m_cmbCurveName->currentText(),
483 (ColorPalette) m_cmbLineColor->currentData().toInt());
488void DlgSettingsCurveProperties::slotLineWidth(
int width)
490 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::slotLineWidth width=" << width;
494 m_modelCurveStylesAfter->
setLineWidth(m_cmbCurveName->currentText(),
500void DlgSettingsCurveProperties::slotLineType(
const QString &lineType)
502 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::slotLineType lineType=" << lineType.toLatin1().data();
507 (CurveConnectAs) m_cmbLineType->currentData().toInt ());
512void DlgSettingsCurveProperties::slotPointColor(
const QString &pointColor)
514 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::slotPointColor pointColor=" << pointColor.toLatin1().data();
518 m_modelCurveStylesAfter->
setPointColor(m_cmbCurveName->currentText(),
519 (ColorPalette) m_cmbPointColor->currentData().toInt ());
524void DlgSettingsCurveProperties::slotPointLineWidth(
int lineWidth)
526 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::slotPointLineWidth lineWidth=" << lineWidth;
536void DlgSettingsCurveProperties::slotPointRadius(
int radius)
538 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::slotPointRadius radius=" << radius;
542 m_modelCurveStylesAfter->
setPointRadius(m_cmbCurveName->currentText(),
548void DlgSettingsCurveProperties::slotPointShape(
const QString &)
550 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::slotPointShape";
554 m_modelCurveStylesAfter->
setPointShape(m_cmbCurveName->currentText(),
555 (PointShape) m_cmbPointShape->currentData().toInt ());
560void DlgSettingsCurveProperties::slotSaveDefault()
562 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsCurveProperties::slotSaveDefault";
564 QString curve = m_cmbCurveName->currentText ();
566 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
567 if (curve == AXIS_CURVE_NAME) {
569 settings.beginGroup (SETTINGS_GROUP_CURVE_AXES);
575 settings.beginGroup (groupName);
579 settings.setValue (SETTINGS_CURVE_POINT_SHAPE,
581 settings.setValue (SETTINGS_CURVE_LINE_COLOR,
582 m_modelCurveStylesAfter->
lineColor(curve));
583 settings.setValue (SETTINGS_CURVE_LINE_CONNECT_AS,
585 settings.setValue (SETTINGS_CURVE_LINE_WIDTH,
586 m_modelCurveStylesAfter->
lineWidth(curve));
587 settings.setValue (SETTINGS_CURVE_POINT_COLOR,
589 settings.setValue (SETTINGS_CURVE_POINT_LINE_WIDTH,
591 settings.setValue (SETTINGS_CURVE_POINT_RADIUS,
593 settings.endGroup ();
596void DlgSettingsCurveProperties::updateControls()
598 bool isGoodState = !m_spinPointRadius->text().isEmpty () &&
599 !m_spinPointLineWidth->text().isEmpty () &&
600 !m_spinLineWidth->text().isEmpty ();
601 m_cmbCurveName->setEnabled (isGoodState);
602 enableOk (isGoodState && m_isDirty);
605void DlgSettingsCurveProperties::updatePreview()
607 m_scenePreview->clear();
609 QString currentCurve = m_cmbCurveName->currentText();
615 bool isRelation = (lineStyle.
curveConnectAs() == CONNECT_AS_RELATION_SMOOTH ||
618 drawPoints (pointStyle);
619 drawLine (isRelation,
622 resetSceneRectangle();
Command for DlgSettingsCurveProperties.
LineStyle lineStyle() const
Get method for LineStyle.
PointStyle pointStyle() const
Get method for PointStyle.
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
ColorPalette pointColor(const QString &curveName) const
Get method for curve point color in specified curve.
void setPointRadius(const QString &curveName, int radius)
Set method for curve point radius.
void setPointLineWidth(const QString &curveName, int width)
Set method for curve point perimeter line width.
void setPointColor(const QString &curveName, ColorPalette curveColor)
Set method curve point color in specified curve.
ColorPalette lineColor(const QString &curveName) const
Get method for line color in specified curve.
int pointRadius(const QString &curveName) const
Get method for curve point radius.
int pointLineWidth(const QString &curveName) const
Get method for curve point line width.
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
CurveConnectAs lineConnectAs(const QString &curveName) const
Get method for connect as method for lines in specified curve.
void setLineColor(const QString &curveName, ColorPalette lineColor)
Set method for line color in specified curve.
int lineWidth(const QString &curveName) const
Get method for line width in specified curve.
void setPointShape(const QString &curveName, PointShape shape)
Set method for curve point shape in specified curve.
void setLineWidth(const QString &curveName, int width)
Set method for line width in specified curve.
PointShape pointShape(const QString &curveName) const
Get method for curve point shape.
void setLineConnectAs(const QString &curveName, CurveConnectAs curveConnectAs)
Set method for connect as method for lines in specified curve.
Abstract base class for all Settings dialogs.
void setCmdMediator(CmdMediator &cmdMediator)
Store CmdMediator for easy access by the leaf class.
void populateColorComboWithTransparent(QComboBox &combo)
Add colors in color palette to combobox, with transparent entry at end.
CmdMediator & cmdMediator()
Provide access to Document information wrapped inside CmdMediator.
void populateColorComboWithoutTransparent(QComboBox &combo)
Add colors in color palette to combobox, without transparent entry at end.
void enableOk(bool enable)
Let leaf subclass control the Ok button.
void finishPanel(QWidget *subPanel)
Add Ok and Cancel buttons to subpanel to get the whole dialog.
static int MINIMUM_PREVIEW_HEIGHT
Dialog layout constant that guarantees preview has sufficent room.
MainWindow & mainWindow()
Get method for MainWindow.
DlgSettingsCurveProperties(MainWindow &mainWindow)
Single constructor.
virtual void handleOk()
Process slotOk.
void setCurveName(const QString &curveName)
Load information for the specified curve name. When called externally, the load method must have been...
virtual void createOptionalSaveDefault(QHBoxLayout *layout)
Let subclass define an optional Save As Default button.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
virtual QWidget * createSubPanel()
Create dialog-specific panel to which base class will add Ok and Cancel buttons.
Factor for generating GraphicsPointAbstractBase class objects.
GraphicsPoint * createPoint(QGraphicsScene &scene, const QString &identifier, const QPointF &posScreen, const PointStyle &pointStyle)
Create circle or polygon point according to the PointStyle.
Graphics item for drawing a circular or polygonal Point.
void setPointStyle(const PointStyle &pointStyle)
Update the point style.
Details for a specific Line.
CurveConnectAs curveConnectAs() const
Get method for connect type.
unsigned int width() const
Width of line.
ColorPalette paletteColor() const
Line color.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Details for a specific Point.
Manage storage and retrieval of the settings for the curves.
QString groupNameForNthCurve(int indexOneBased) const
Return the group name, that appears in the settings file/registry, for the specified curve index.
Single X/Y pair for cubic spline interpolation initialization and calculations.
Cubic interpolation given independent and dependent value vectors.
Class that modifies QGraphicsView to automatically expand/shrink the view to fit the window,...