1 /******************************************************************************************************
2  * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released      *
3  * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4  * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission.     *
5  ******************************************************************************************************/
6 
7 #ifndef DLG_SETTINGS_COORDS_H
8 #define DLG_SETTINGS_COORDS_H
9 
10 #include "CoordUnitsNonPolarTheta.h"
11 #include "CoordUnitsPolarTheta.h"
12 #include "DlgSettingsAbstractBase.h"
13 
14 class DlgValidatorAbstract;
15 class DocumentModelCoords;
16 class QComboBox;
17 class QDoubleValidator;
18 class QGridLayout;
19 class QGroupBox;
20 class QGraphicsScene;
21 class QGraphicsView;
22 class QLineEdit;
23 class QRadioButton;
24 class ViewPreview;
25 
26 /// Dialog for editing coordinates settings.
27 class DlgSettingsCoords : public DlgSettingsAbstractBase
28 {
29   Q_OBJECT;
30 
31 public:
32   /// Single constructor.
33   DlgSettingsCoords(MainWindow &mainWindow);
34   virtual ~DlgSettingsCoords();
35 
36   virtual void createOptionalSaveDefault (QHBoxLayout *layout);
37   virtual QWidget *createSubPanel ();
38   virtual void load (CmdMediator &cmdMediator);
39   virtual void setSmallDialogs (bool smallDialogs);
40 
41 private slots:
42   void slotCartesianPolar (bool);
43   void slotDate (const QString &);
44   void slotPolarOriginRadius(const QString &);
45   void slotTime (const QString &);
46   void slotUnitsXTheta(const QString &);
47   void slotUnitsYRadius(const QString &);
48   void slotXThetaLinear();
49   void slotXThetaLog();
50   void slotYRadiusLinear();
51   void slotYRadiusLog();
52 
53 protected:
54   virtual void handleOk ();
55 
56 private:
57 
58   void annotateAngles(const QFont &defaultFont);
59   void annotateRadiusAtOrigin(const QFont &defaultFont);
60   void boundingRectGraph (CmdMediator &cmdMediator,
61                           bool &isEmpty,
62                           QPointF &boundingRectGraphMin,
63                           QPointF &boundingRectGraphMax) const;
64   void createDateTime(QGridLayout *layout,
65                       int &row);
66   void createGroupCoordsType(QGridLayout *layout,
67                              int &row);
68   void createGroupXTheta(QGridLayout *layout,
69                         int &row);
70   void createGroupYRadius(QGridLayout *layout,
71                           int &row);
72   void createPreview(QGridLayout *layout,
73                      int &row);
74   void drawCartesianLinearX();
75   void drawCartesianLinearY();
76   void drawCartesianLogX();
77   void drawCartesianLogY();
78   void drawPolarLinearRadius();
79   void drawPolarLogRadius();
80   void drawPolarTheta();
81   void loadComboBoxDate();
82   void loadComboBoxTime();
83   void loadComboBoxUnitsNonPolar (QComboBox &cmb,
84                                   CoordUnitsNonPolarTheta coordUnits);
85   void loadComboBoxUnitsPolar (QComboBox &cmb,
86                                CoordUnitsPolarTheta coordUnits);
87   void resetSceneRectangle();
88   void updateControls();
89   void updateCoordUnits();
90   void updatePreview();
91 
92   QGroupBox *m_boxCoordsType;
93   QRadioButton *m_btnCartesian;
94   QRadioButton *m_btnPolar;
95 
96   QGroupBox *m_boxXTheta;
97   QRadioButton *m_xThetaLinear;
98   QRadioButton *m_xThetaLog;
99   QComboBox *m_cmbXThetaUnits;
100 
101   QGroupBox *m_boxYRadius;
102   QRadioButton *m_yRadiusLinear;
103   QRadioButton *m_yRadiusLog;
104   QComboBox *m_cmbYRadiusUnits;
105   QLineEdit *m_editOriginRadius;
106   DlgValidatorAbstract *m_validatorOriginRadius;
107 
108   QComboBox *m_cmbDate;
109   QComboBox *m_cmbTime;
110 
111   QGraphicsScene *m_scenePreview;
112   ViewPreview *m_viewPreview;
113 
114   DocumentModelCoords *m_modelCoordsBefore;
115   DocumentModelCoords *m_modelCoordsAfter;
116 };
117 
118 #endif // DLG_SETTINGS_COORDS_H
119