23#include <QDoubleValidator>
24#include <QGraphicsRectItem>
27#include <QGraphicsScene>
32#include <QRadioButton>
33#include <QStackedWidget>
78 m_btnCartesian (nullptr),
80 m_validatorOriginRadius (nullptr),
83 m_scenePreview (nullptr),
84 m_viewPreview (nullptr),
85 m_modelCoordsBefore (nullptr),
86 m_modelCoordsAfter (nullptr)
100void DlgSettingsCoords::annotateAngles (
const QFont &defaultFont) {
103 for (
int direction = 0; direction < 4; direction++) {
108 switch (thetaUnits) {
112 angle = QString::number (90.0 * direction);
116 angle = QString::number (90.0 * direction);
117 if (direction == 1) {
119 }
else if (direction == 3) {
125 angle = QString::number (100.0 * direction);
130 static QString radiansUnits [] = {
"0",
"PI / 2",
"PI",
"3 * PI / 2"};
132 angle = radiansUnits [direction];
138 static QString turnsUnits [] = {
"0",
"1 / 4",
"1 / 2",
"3 / 4"};
140 angle = turnsUnits [direction];
148 QGraphicsTextItem *textAngle = m_scenePreview->addText (angle);
149 textAngle->setFont (QFont (defaultFont.defaultFamily(),
FONT_SIZE));
157 x =
XCENTER - textAngle->boundingRect().width () / 2.0;
176 textAngle->setPos (x, y);
180void DlgSettingsCoords::annotateRadiusAtOrigin(
const QFont &defaultFont) {
182 QGraphicsTextItem *textRadius = m_scenePreview->addText (m_editOriginRadius->text());
183 textRadius->setFont (QFont (defaultFont.defaultFamily(),
FONT_SIZE));
184 textRadius->setPos (
XCENTER - textRadius->boundingRect().width () / 2.0,
188void DlgSettingsCoords::boundingRectGraph (
CmdMediator &cmdMediator,
190 QPointF &boundingRectGraphMin,
191 QPointF &boundingRectGraphMax)
const
193 CallbackBoundingRects ftor (
cmdMediator.document().documentAxesPointsRequired(),
196 Functor2wRet<const QString &, const Point&, CallbackSearchReturn> ftorWithCallback = functor_ret (ftor,
201 cmdMediator.iterateThroughCurvePointsAxes (ftorWithCallback);
206 cmdMediator.iterateThroughCurvesPointsGraphs (ftorWithCallback);
209 boundingRectGraphMin = ftor.boundingRectGraphMin (isEmpty);
210 boundingRectGraphMax = ftor.boundingRectGraphMax (isEmpty);
213void DlgSettingsCoords::createDateTime (QGridLayout *layout,
218 QLabel *label =
new QLabel(QString (
"%1:").arg (tr (
"Date/Time")));
219 layout->addWidget (label, row, 1);
221 QWidget *widgetCombos =
new QWidget;
222 layout->addWidget (widgetCombos, row++, 2);
223 QHBoxLayout *layoutCombos =
new QHBoxLayout;
224 widgetCombos->setLayout (layoutCombos);
227 m_cmbDate =
new QComboBox;
228 m_cmbDate->setWhatsThis (tr (
"Date format to be used for date values, and date portion of mixed date/time values, "
229 "during input and output.\n\n"
230 "Setting the format to an empty value results in just the time portion appearing in output."));
231 connect (m_cmbDate, SIGNAL (activated (
const QString &)),
this, SLOT (slotDate (
const QString &)));
232 layoutCombos->addWidget (m_cmbDate);
234 m_cmbTime =
new QComboBox;
235 m_cmbTime->setWhatsThis (tr (
"Time format to be used for time values, and time portion of mixed date/time values, "
236 "during input and output.\n\n"
237 "Setting the format to an empty value results in just the date portion appearing in output."));
238 connect (m_cmbTime, SIGNAL (activated (
const QString &)),
this, SLOT (slotTime (
const QString &)));
239 layoutCombos->addWidget (m_cmbTime);
242void DlgSettingsCoords::createGroupCoordsType (QGridLayout *layout,
247 m_boxCoordsType =
new QGroupBox(tr (
"Coordinates Types"));
248 layout->addWidget (m_boxCoordsType, row, 1, 1, 2);
255 QVBoxLayout *layoutGroup =
new QVBoxLayout (m_boxCoordsType);
257 QString polarButtonText = QString(tr (
"Polar") +
" (") +
THETA + QString(
", " + tr (
"R") +
")");
259 m_btnCartesian =
new QRadioButton (tr (
"Cartesian (X, Y)"), m_boxCoordsType);
260 m_btnCartesian->setWhatsThis (QString(tr(
"Select cartesian coordinates.\n\n"
261 "The X and Y coordinates will be used")));
262 connect (m_btnCartesian, SIGNAL (toggled(
bool)),
this, SLOT (slotCartesianPolar (
bool)));
263 layoutGroup->addWidget (m_btnCartesian);
265 m_btnPolar =
new QRadioButton (polarButtonText, m_boxCoordsType);
266 m_btnPolar->setWhatsThis (QString(tr(
"Select polar coordinates.\n\n"
267 "The Theta and R coordinates will be used.\n\n"
268 "Polar coordinates are not allowed with log scale for Theta")));
269 connect (m_btnPolar, SIGNAL (toggled(
bool)),
this, SLOT (slotCartesianPolar (
bool)));
270 layoutGroup->addWidget (m_btnPolar);
273void DlgSettingsCoords::createGroupXTheta (QGridLayout *layout,
279 layout->addWidget (m_boxXTheta, row, 1, 1, 1);
281 QGridLayout *layoutXTheta =
new QGridLayout (m_boxXTheta);
282 m_boxXTheta->setLayout (layoutXTheta);
285 QLabel *labelScale =
new QLabel (QString (
"%1:").arg (tr (
"Scale")));
286 layoutXTheta->addWidget (labelScale, rowGroup++,
COLUMN_0);
288 m_xThetaLinear =
new QRadioButton (tr (
"Linear"), m_boxXTheta);
289 m_xThetaLinear->setWhatsThis (QString(tr(
"Specifies linear scale for the X or Theta coordinate")));
290 connect (m_xThetaLinear, SIGNAL (released ()),
this, SLOT (slotXThetaLinear()));
291 layoutXTheta->addWidget (m_xThetaLinear, rowGroup++,
COLUMN_0);
293 m_xThetaLog =
new QRadioButton (tr (
"Log"), m_boxXTheta);
294 m_xThetaLog->setWhatsThis (QString(tr(
"Specifies logarithmic scale for the X or Theta coordinate.\n\n"
295 "Log scale is not allowed if there are negative coordinates.\n\n"
296 "Log scale is not allowed for the Theta coordinate.")));
297 connect (m_xThetaLog, SIGNAL (released ()),
this, SLOT (slotXThetaLog()));
298 layoutXTheta->addWidget (m_xThetaLog, rowGroup++,
COLUMN_0);
300 QLabel *labelThetaUnits =
new QLabel(QString (
"%1:").arg (tr (
"Units")));
301 layoutXTheta->addWidget (labelThetaUnits, rowGroup++,
COLUMN_0);
303 m_cmbXThetaUnits =
new QComboBox;
304 connect (m_cmbXThetaUnits, SIGNAL (activated (
const QString &)),
this, SLOT (slotUnitsXTheta(
const QString &)));
305 layoutXTheta->addWidget (m_cmbXThetaUnits, rowGroup++,
COLUMN_0, 1, 2);
308void DlgSettingsCoords::createGroupYRadius (QGridLayout *layout,
314 layout->addWidget (m_boxYRadius, row++, 2, 1, 1);
316 QGridLayout *layoutYRadius =
new QGridLayout (m_boxYRadius);
317 m_boxYRadius->setLayout (layoutYRadius);
320 QLabel *labelScale =
new QLabel (QString (
"%1:").arg (tr (
"Scale")));
321 layoutYRadius->addWidget (labelScale, rowGroup++,
COLUMN_0);
323 m_yRadiusLinear =
new QRadioButton (tr (
"Linear"), m_boxYRadius);
324 m_yRadiusLinear->setWhatsThis (QString(tr(
"Specifies linear scale for the Y or R coordinate")));
325 connect (m_yRadiusLinear, SIGNAL(released()),
this, SLOT (slotYRadiusLinear()));
326 layoutYRadius->addWidget (m_yRadiusLinear, rowGroup,
COLUMN_0);
328 QLabel *labelOriginRadius =
new QLabel(QString (
"%1:").arg (tr (
"Origin radius value")));
329 layoutYRadius->addWidget (labelOriginRadius, rowGroup++,
COLUMN_1);
331 m_yRadiusLog =
new QRadioButton (tr (
"Log"), m_boxYRadius);
332 m_yRadiusLog->setWhatsThis (QString(tr(
"Specifies logarithmic scale for the Y or R coordinate\n\n"
333 "Log scale is not allowed if there are negative coordinates.")));
334 connect (m_yRadiusLog, SIGNAL(released ()),
this, SLOT (slotYRadiusLog ()));
335 layoutYRadius->addWidget (m_yRadiusLog, rowGroup,
COLUMN_0);
337 m_editOriginRadius =
new QLineEdit (m_boxYRadius);
339 m_editOriginRadius->setWhatsThis (QString(tr(
"Specify radius value at origin.\n\n"
340 "Normally the radius at the origin is 0, but a nonzero value may be applied in other cases "
341 "(like when the radial units are decibels).")));
342 connect (m_editOriginRadius, SIGNAL (textChanged (
const QString &)),
this, SLOT (slotPolarOriginRadius(
const QString &)));
343 layoutYRadius->addWidget (m_editOriginRadius, rowGroup++,
COLUMN_1);
345 QLabel *labelUnits =
new QLabel(QString (
"%1:").arg (tr (
"Units")));
346 layoutYRadius->addWidget (labelUnits, rowGroup++,
COLUMN_0);
348 m_cmbYRadiusUnits =
new QComboBox;
349 connect (m_cmbYRadiusUnits, SIGNAL (activated (
const QString &)),
this, SLOT (slotUnitsYRadius(
const QString &)));
350 layoutYRadius->addWidget (m_cmbYRadiusUnits, rowGroup++,
COLUMN_0, 1, 2);
357void DlgSettingsCoords::createPreview (QGridLayout *layout,
362 QLabel *labelPreview =
new QLabel (tr (
"Preview"));
363 layout->addWidget (labelPreview, row++, 0, 1, 4);
365 m_scenePreview =
new QGraphicsScene (
this);
369 m_viewPreview->setWhatsThis (tr (
"Preview window that shows how current settings affect the coordinate system."));
370 m_viewPreview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
371 m_viewPreview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
374 layout->addWidget (m_viewPreview, row++, 0, 1, 4);
381 QWidget *subPanel =
new QWidget ();
383 QGridLayout *layout =
new QGridLayout (subPanel);
384 subPanel->setLayout (layout);
386 layout->setColumnStretch(0, 1);
387 layout->setColumnStretch(1, 0);
388 layout->setColumnStretch(2, 0);
389 layout->setColumnStretch(3, 1);
392 createGroupCoordsType(layout, row);
393 createGroupXTheta (layout, row);
394 createGroupYRadius (layout, row);
395 createDateTime (layout, row);
396 createPreview (layout, row);
401void DlgSettingsCoords::drawCartesianLinearX ()
410 line->setPen(QPen (QBrush ((isHighlighted ? Qt::gray : Qt::lightGray)),
412 (isHighlighted ? Qt::SolidLine : Qt::DashLine)));
415 line->setPen(QPen (QBrush (Qt::black),
422void DlgSettingsCoords::drawCartesianLinearY ()
431 line->setPen(QPen (QBrush (isHighlighted ? Qt::gray : Qt::lightGray),
433 (isHighlighted ? Qt::SolidLine : Qt::DashLine)));
436 line->setPen(QPen (QBrush (Qt::black),
443void DlgSettingsCoords::drawCartesianLogX ()
454 line->setPen(QPen (QBrush (isHighlighted ? Qt::gray : Qt::lightGray),
456 (isHighlighted ? Qt::SolidLine : Qt::DashLine)));
459 line->setPen(QPen (QBrush (Qt::black),
466void DlgSettingsCoords::drawCartesianLogY ()
477 line->setPen(QPen (QBrush (isHighlighted ? Qt::gray : Qt::lightGray),
479 (isHighlighted ? Qt::SolidLine : Qt::DashLine)));
482 line->setPen(QPen (QBrush (Qt::black),
489void DlgSettingsCoords::drawPolarLinearRadius ()
495 QGraphicsEllipseItem *line = m_scenePreview->addEllipse (
XCENTER - radius,
500 line->setPen(QPen (QBrush (isHighlighted ? Qt::gray : Qt::lightGray),
502 (isHighlighted ? Qt::SolidLine : Qt::DashLine)));
506void DlgSettingsCoords::drawPolarLogRadius ()
514 QGraphicsEllipseItem *line = m_scenePreview->addEllipse (
XCENTER - radius,
519 line->setPen(QPen (QBrush (isHighlighted ? Qt::gray : Qt::lightGray),
521 (isHighlighted ? Qt::SolidLine : Qt::DashLine)));
525void DlgSettingsCoords::drawPolarTheta ()
532 double x =
POLAR_RADIUS * cos (qDegreesToRadians (theta));
533 double y =
POLAR_RADIUS * sin (qDegreesToRadians (theta));
536 line->setPen(QPen (QBrush (isHighlighted ? Qt::gray : Qt::lightGray),
538 (isHighlighted ? Qt::SolidLine : Qt::DashLine)));
541 line->setPen(QPen (QBrush (Qt::black),
554 *m_modelCoordsBefore,
555 *m_modelCoordsAfter);
569 QPointF boundingRectGraphMin, boundingRectGraphMax;
572 boundingRectGraphMin,
573 boundingRectGraphMax);
574 bool xThetaGoesNegative = !isEmpty && (boundingRectGraphMin.x() <= 0);
575 bool yRGoesNegative = !isEmpty && (boundingRectGraphMin.y() <= 0);
576 m_xThetaLinear->setEnabled (!xThetaGoesNegative);
577 m_xThetaLog->setEnabled (!xThetaGoesNegative);
578 m_yRadiusLinear->setEnabled (!yRGoesNegative);
579 m_yRadiusLog->setEnabled (!yRGoesNegative);
582 delete m_modelCoordsBefore;
583 delete m_modelCoordsAfter;
591 m_validatorOriginRadius = dlgValidatorFactory.
createWithNonPolar (m_modelCoordsAfter->coordScaleYRadius(),
592 m_modelCoordsAfter->coordUnitsRadius(),
593 m_modelCoordsAfter->coordUnitsDate(),
594 m_modelCoordsAfter->coordUnitsTime(),
596 m_editOriginRadius->setValidator (m_validatorOriginRadius);
597 m_editOriginRadius->setText (QString::number (m_modelCoordsAfter->originRadius ()));
600 m_btnCartesian->setChecked (
true);
602 m_btnPolar->setChecked (
true);
609 m_xThetaLinear->setChecked (m_modelCoordsAfter->coordScaleXTheta() ==
COORD_SCALE_LINEAR);
610 m_xThetaLog->setChecked (m_modelCoordsAfter->coordScaleXTheta() ==
COORD_SCALE_LOG);
611 m_yRadiusLinear->setChecked (m_modelCoordsAfter->coordScaleYRadius() ==
COORD_SCALE_LINEAR);
612 m_yRadiusLog->setChecked (m_modelCoordsAfter->coordScaleYRadius() ==
COORD_SCALE_LOG);
619void DlgSettingsCoords::loadComboBoxDate()
636 int index = m_cmbDate->findData (QVariant (m_modelCoordsAfter->
coordUnitsDate()));
637 m_cmbDate->setCurrentIndex (index);
640void DlgSettingsCoords::loadComboBoxTime()
655 int index = m_cmbTime->findData (QVariant (m_modelCoordsAfter->coordUnitsTime()));
656 m_cmbTime->setCurrentIndex (index);
659void DlgSettingsCoords::loadComboBoxUnitsNonPolar (QComboBox &cmb,
677 cmb.setWhatsThis (QString (tr (
"Numbers have the simplest and most general format.\n\n"
678 "Date and time values have date and/or time components, with dates between 1901 and 2105 on "
679 "64 bit operating systems.\n\n"
680 "Degrees Minutes Seconds (DDD MM SS.S) format uses two integer number for degrees and minutes, and a real number for "
681 "seconds. There are 60 seconds per minute. During input, spaces must be inserted between the three numbers.")));
683 int index = cmb.findData (coordUnits);
684 cmb.setCurrentIndex (index);
687void DlgSettingsCoords::loadComboBoxUnitsPolar (QComboBox &cmb,
711 cmb.setWhatsThis (QString (tr (
"Degrees (DDD.DDDDD) format uses a single real number. One complete revolution is 360 degrees.\n\n"
712 "Degrees Minutes (DDD MM.MMM) format uses one integer number for degrees, and a real number for minutes. There are "
713 "60 minutes per degree. During input, a space must be inserted between the two numbers.\n\n"
714 "Degrees Minutes Seconds (DDD MM SS.S) format uses two integer number for degrees and minutes, and a real number for "
715 "seconds. There are 60 seconds per minute. During input, spaces must be inserted between the three numbers.\n\n"
716 "Gradians format uses a single real number. One complete revolution is 400 gradians.\n\n"
717 "Radians format uses a single real number. One complete revolution is 2*pi radians.\n\n"
718 "Turns format uses a single real number. One complete revolution is one turn.")));
720 int index = cmb.findData (coordUnits);
721 cmb.setCurrentIndex (index);
724void DlgSettingsCoords::resetSceneRectangle ()
731 QGraphicsRectItem *itemPerimeter =
new QGraphicsRectItem(rect);
732 itemPerimeter->setVisible(
false);
733 m_scenePreview->addItem (itemPerimeter);
734 m_viewPreview->centerOn (QPointF (0.0, 0.0));
744void DlgSettingsCoords::slotCartesianPolar (
bool)
748 if (m_btnCartesian->isChecked ()) {
758void DlgSettingsCoords::slotDate(
const QString &)
763 m_modelCoordsAfter->setCoordUnitsDate(coordUnits);
768void DlgSettingsCoords::slotPolarOriginRadius(
const QString &)
772 QString numberText = m_editOriginRadius->text();
774 m_modelCoordsAfter->setOriginRadius(numberText.toDouble ());
779void DlgSettingsCoords::slotTime(
const QString &)
784 m_modelCoordsAfter->setCoordUnitsTime(coordUnits);
789void DlgSettingsCoords::slotUnitsXTheta(
const QString &)
795 m_modelCoordsAfter->setCoordUnitsX(coordUnits);
798 m_modelCoordsAfter->setCoordUnitsTheta(coordUnits);
804void DlgSettingsCoords::slotUnitsYRadius(
const QString &)
810 m_modelCoordsAfter->setCoordUnitsY(coordUnits);
812 m_modelCoordsAfter->setCoordUnitsRadius(coordUnits);
818void DlgSettingsCoords::slotWhatsThis ()
820 QWhatsThis::enterWhatsThisMode();
823void DlgSettingsCoords::slotXThetaLinear()
832void DlgSettingsCoords::slotXThetaLog()
841void DlgSettingsCoords::slotYRadiusLinear()
845 delete m_validatorOriginRadius;
847 DlgValidatorFactory dlgValidatorFactory;
849 m_modelCoordsAfter->coordUnitsRadius(),
850 m_modelCoordsAfter->coordUnitsDate(),
851 m_modelCoordsAfter->coordUnitsTime(),
853 m_editOriginRadius->setValidator (m_validatorOriginRadius);
860void DlgSettingsCoords::slotYRadiusLog()
864 delete m_validatorOriginRadius;
866 DlgValidatorFactory dlgValidatorFactory;
868 m_modelCoordsAfter->coordUnitsRadius(),
869 m_modelCoordsAfter->coordUnitsDate(),
870 m_modelCoordsAfter->coordUnitsTime(),
872 m_editOriginRadius->setValidator (m_validatorOriginRadius);
879void DlgSettingsCoords::updateControls ()
883 QString textOriginRadius = m_editOriginRadius->text();
884 int posOriginRadius = 0;
886 bool goodOriginRadius =
true;
887 if (m_editOriginRadius->isEnabled ()) {
890 goodOriginRadius = (m_validatorOriginRadius->validate (textOriginRadius,
891 posOriginRadius) == QValidator::Acceptable);
896 m_boxCoordsType->setEnabled (!m_xThetaLog->isChecked ());
898 m_xThetaLinear->setEnabled (!m_btnPolar->isChecked ());
899 m_xThetaLog->setEnabled (!m_btnPolar->isChecked ());
900 if (m_btnCartesian->isChecked()) {
901 m_yRadiusLinear->setEnabled (
true);
902 m_yRadiusLog->setEnabled (
true);
906 DlgValidatorFactory dlgValidatorFactory;
908 m_modelCoordsAfter->coordUnitsRadius(),
909 m_modelCoordsAfter->coordUnitsDate(),
910 m_modelCoordsAfter->coordUnitsTime(),
912 int posOriginRadiusOther;
913 bool goodOriginRadiusOther = (dlg->
validate (textOriginRadius, posOriginRadiusOther) == QValidator::Acceptable);
917 m_yRadiusLinear->setEnabled (goodOriginRadius && goodOriginRadiusOther);
918 m_yRadiusLog->setEnabled (goodOriginRadius && goodOriginRadiusOther);
920 m_editOriginRadius->setEnabled (m_btnPolar->isChecked ());
922 QString captionXTheta = (m_btnCartesian->isChecked () ?
924 THETA) + QString (
" %1")
925 .arg (tr (
"Coordinates"));
926 QString captionYRadius = (m_btnCartesian->isChecked () ?
928 QString (tr (
"R"))) + QString (
" %1")
929 .arg (tr (
"Coordinates"));
931 if (m_boxXTheta->title() != captionXTheta) {
932 m_boxXTheta->setTitle (captionXTheta);
935 if (m_boxYRadius->title () != captionYRadius) {
936 m_boxYRadius->setTitle (captionYRadius);
940 if (m_btnCartesian->isChecked()) {
946 m_cmbDate->setEnabled (enableDateTime);
947 m_cmbTime->setEnabled (enableDateTime);
950 <<
" textOriginRadius=" << textOriginRadius.toLatin1().data()
951 <<
" goodOriginRadius=" << (goodOriginRadius ?
"true" :
"false")
952 <<
" originRadius=" << posOriginRadius
953 <<
" btnPolarChecked=" << (m_btnPolar->isChecked() ?
"true" :
"false")
954 <<
" enableDateTime=" << (enableDateTime ?
"true" :
"false");
957void DlgSettingsCoords::updateCoordUnits()
960 if (m_btnCartesian->isChecked()) {
961 loadComboBoxUnitsNonPolar (*m_cmbXThetaUnits,
962 m_modelCoordsAfter->coordUnitsX());
963 loadComboBoxUnitsNonPolar (*m_cmbYRadiusUnits,
964 m_modelCoordsAfter->coordUnitsY());
966 loadComboBoxUnitsPolar (*m_cmbXThetaUnits,
967 m_modelCoordsAfter->coordUnitsTheta());
968 loadComboBoxUnitsNonPolar (*m_cmbYRadiusUnits,
969 m_modelCoordsAfter->coordUnitsRadius());
973void DlgSettingsCoords::updatePreview()
975 m_scenePreview->clear();
983 if (m_btnCartesian->isChecked()) {
986 if (m_xThetaLinear->isChecked()) {
987 drawCartesianLinearX ();
989 drawCartesianLogX ();
992 if (m_yRadiusLinear->isChecked()) {
993 drawCartesianLinearY ();
995 drawCartesianLogY ();
1002 if (m_yRadiusLinear->isChecked()) {
1003 drawPolarLinearRadius ();
1005 drawPolarLogRadius ();
1009 annotateRadiusAtOrigin (defaultFont);
1010 annotateAngles (defaultFont);
1013 resetSceneRectangle();
QString coordUnitsDateToString(CoordUnitsDate coordUnits)
@ COORD_UNITS_DATE_DAY_MONTH_YEAR
@ COORD_UNITS_DATE_YEAR_MONTH_DAY
@ COORD_UNITS_DATE_MONTH_DAY_YEAR
QString coordUnitsNonPolarThetaToString(CoordUnitsNonPolarTheta coordUnits)
@ COORD_UNITS_NON_POLAR_THETA_DEGREES_MINUTES_SECONDS
@ COORD_UNITS_NON_POLAR_THETA_DEGREES_MINUTES_SECONDS_NSEW
@ COORD_UNITS_NON_POLAR_THETA_NUMBER
@ NUM_COORD_UNITS_NON_POLAR_THETA
@ COORD_UNITS_NON_POLAR_THETA_DATE_TIME
QString coordUnitsPolarThetaToString(CoordUnitsPolarTheta coordUnits)
@ COORD_UNITS_POLAR_THETA_DEGREES_MINUTES_SECONDS_NSEW
@ COORD_UNITS_POLAR_THETA_TURNS
@ COORD_UNITS_POLAR_THETA_RADIANS
@ COORD_UNITS_POLAR_THETA_DEGREES_MINUTES
@ COORD_UNITS_POLAR_THETA_DEGREES
@ COORD_UNITS_POLAR_THETA_DEGREES_MINUTES_SECONDS
@ COORD_UNITS_POLAR_THETA_GRADIANS
@ NUM_COORD_UNITS_POLAR_THETA
QString coordUnitsTimeToString(CoordUnitsTime coordUnits)
@ COORD_UNITS_TIME_HOUR_MINUTE_SECOND
@ COORD_UNITS_TIME_HOUR_MINUTE
const int MINIMUM_DIALOG_WIDTH_COORDS
const double LINE_WIDTH_THICK
const QString OVERRIDDEN_VALUE("")
const int STEPS_PER_CYCLE
const double LINE_WIDTH_THIN
const double POWER_FOR_LOG
const double CARTESIAN_COORD_STEP
const int CARTESIAN_COORD_MIN
const double POLAR_THETA_STEP
const int MAX_WIDTH_EDIT_ORIGIN_RADIUS
const int CARTESIAN_COORD_MAX
const int POLAR_THETA_MAX
const int NUM_COORD_STEPS
const int POLAR_THETA_MIN
const int STEPS_CYCLE_COUNT
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT.
log4cpp::Category * mainCat
CallbackSearchReturn callback(const QString &curveName, const Point &point)
Callback method.
Command for DlgSettingsCoords.
DlgSettingsAbstractBase(const QString &title, const QString &dialogName, MainWindow &mainWindow)
Single constructor.
void setCmdMediator(CmdMediator &cmdMediator)
Store CmdMediator for easy access by the leaf class.
void finishPanel(QWidget *subPanel, int minimumWidth=MINIMUM_DIALOG_WIDTH, int minimumHeightOrZero=0)
Add Ok and Cancel buttons to subpanel to get the whole dialog.
CmdMediator & cmdMediator()
Provide access to Document information wrapped inside CmdMediator.
void createWhatsThis(QGridLayout *layout, ButtonWhatsThis *button, int row, int column)
Create a WhatsThis button in a grid layout.
void enableOk(bool enable)
Let leaf subclass control the Ok button.
static int MINIMUM_PREVIEW_HEIGHT
Dialog layout constant that guarantees preview has sufficent room.
MainWindow & mainWindow()
Get method for MainWindow.
virtual ~DlgSettingsCoords()
virtual QWidget * createSubPanel()
Create dialog-specific panel to which base class will add Ok and Cancel buttons.
DlgSettingsCoords(MainWindow &mainWindow)
Single constructor.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
virtual void createOptionalSaveDefault(QHBoxLayout *layout)
Let subclass define an optional Save As Default button.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
virtual void handleOk()
Process slotOk.
virtual QValidator::State validate(QString &input, int &pos) const =0
Validate according to the numeric format specific to the leaf class.
DlgValidatorAbstract * createWithNonPolar(CoordScale coordScale, CoordUnitsNonPolarTheta coordUnits, CoordUnitsDate coordUnitsDate, CoordUnitsTime coordUnitsTime, const QLocale &locale) const
Factory method for generating validators when cartesian/polar case handling is handled externally,...
Model for DlgSettingsCoords and CmdSettingsCoords.
void setCoordsType(CoordsType coordsType)
Set method for coordinates type.
CoordUnitsDate coordUnitsDate() const
Get method for date format when used.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Class that modifies QGraphicsView to automatically expand/shrink the view to fit the window,...
@ VIEW_ASPECT_RATIO_VARIABLE
#define LOG4CPP_INFO_S(logger)