15 #include <QButtonGroup> 17 #include <QGraphicsRectItem> 18 #include <QGraphicsScene> 19 #include <QGridLayout> 24 #include <QRadioButton> 40 "DlgSettingsAxesChecker",
43 m_modelAxesCheckerBefore (nullptr),
44 m_modelAxesCheckerAfter (nullptr),
45 m_modelCoords (nullptr)
60 void DlgSettingsAxesChecker::createControls (QGridLayout *layout,
65 QGroupBox *groupBox =
new QGroupBox (tr (
"Axes Checker Lifetime"));
66 layout->addWidget (groupBox, row++, 1, 1, 2);
68 QGridLayout *layoutLifetime =
new QGridLayout;
69 groupBox->setLayout (layoutLifetime);
72 m_btnNever =
new QRadioButton (tr (
"Do not show"), groupBox);
73 m_btnNever->setWhatsThis (tr (
"Never show axes checker."));
74 layoutLifetime->addWidget (m_btnNever, rowLifetime++, 0, 1, 2);
76 m_btnNSeconds =
new QRadioButton (tr (
"Show for a number of seconds"), groupBox);
77 m_btnNSeconds->setWhatsThis (tr (
"Show axes checker for a number of seconds after changing axes points."));
78 layoutLifetime->addWidget (m_btnNSeconds, rowLifetime, 0, 1, 1);
80 m_cmbSeconds =
new QComboBox;
81 for (
int seconds = 1; seconds <= 10; seconds++) {
82 m_cmbSeconds->addItem (QString::number (seconds), QVariant (seconds));
84 layoutLifetime->addWidget (m_cmbSeconds, rowLifetime++, 1);
85 connect (m_cmbSeconds, SIGNAL (activated (
const QString &)),
this, SLOT (slotSeconds (
const QString &)));
87 m_btnForever =
new QRadioButton (tr (
"Show always"), groupBox);
88 m_btnForever->setWhatsThis (tr (
"Always show axes checker."));
89 layoutLifetime->addWidget (m_btnForever, rowLifetime++, 0, 1, 2);
91 m_groupMode =
new QButtonGroup;
92 m_groupMode->addButton (m_btnNever);
93 m_groupMode->addButton (m_btnNSeconds);
94 m_groupMode->addButton (m_btnForever);
95 connect (m_groupMode, SIGNAL (buttonReleased (QAbstractButton*)),
this, SLOT (slotGroupMode (QAbstractButton*)));
97 QLabel *labelLineColor =
new QLabel (QString (
"%1:").arg (tr (
"Line color")));
98 layout->addWidget (labelLineColor, row, 1);
100 m_cmbLineColor =
new QComboBox;
101 m_cmbLineColor->setWhatsThis (tr (
"Select a color for the highlight lines drawn at each axis point"));
103 connect (m_cmbLineColor, SIGNAL (activated (
const QString &)),
this, SLOT (slotLineColor (
const QString &)));
104 layout->addWidget (m_cmbLineColor, row++, 2);
111 void DlgSettingsAxesChecker::createPoints ()
115 QBrush AXES_BRUSH (Qt::gray);
117 m_checker =
new Checker (*m_scenePreview);
121 QGraphicsRectItem *itemRect =
new QGraphicsRectItem (0,
125 itemRect->setPen (Qt::NoPen);
126 m_scenePreview->addItem (itemRect);
129 QGraphicsRectItem *frameBox =
new QGraphicsRectItem (
X_LEFT,
133 frameBox->setPen (QPen (AXES_BRUSH,
AXIS_WIDTH));
134 frameBox->setZValue (-1);
135 m_scenePreview->addItem (frameBox);
139 tick->setZValue (-1);
140 m_scenePreview->addItem (tick);
145 tick->setZValue (-1);
146 m_scenePreview->addItem (tick);
150 void DlgSettingsAxesChecker::createPreview (QGridLayout *layout,
155 QLabel *labelPreview =
new QLabel (tr (
"Preview"));
156 layout->addWidget (labelPreview, row++, 0, 1, 4);
158 m_scenePreview =
new QGraphicsScene (
this);
162 m_viewPreview->setWhatsThis (tr (
"Preview window that shows how current settings affect the displayed axes checker"));
163 m_viewPreview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
164 m_viewPreview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
167 layout->addWidget (m_viewPreview, row++, 0, 1, 4);
174 QWidget *subPanel =
new QWidget ();
175 QGridLayout *layout =
new QGridLayout (subPanel);
176 subPanel->setLayout (layout);
178 layout->setColumnStretch(0, 1);
179 layout->setColumnStretch(1, 0);
180 layout->setColumnStretch(2, 0);
181 layout->setColumnStretch(3, 1);
184 createControls (layout, row);
185 createPreview (layout, row);
198 *m_modelAxesCheckerBefore,
199 *m_modelAxesCheckerAfter);
212 delete m_modelAxesCheckerBefore;
213 delete m_modelAxesCheckerAfter;
214 delete m_modelCoords;
226 int indexSeconds = m_cmbSeconds->findData (QVariant (m_modelAxesCheckerAfter->
checkerSeconds()));
228 m_cmbSeconds->setCurrentIndex(indexSeconds);
230 int indexLineColor = m_cmbLineColor->findData (QVariant (m_modelAxesCheckerAfter->
lineColor()));
232 m_cmbLineColor->setCurrentIndex (indexLineColor);
246 void DlgSettingsAxesChecker::slotGroupMode (QAbstractButton*)
250 if (m_btnNever->isChecked ()) {
252 }
else if (m_btnNSeconds->isChecked ()) {
262 void DlgSettingsAxesChecker::slotLineColor(
const QString &)
266 m_modelAxesCheckerAfter->
setLineColor (static_cast<ColorPalette> (m_cmbLineColor->currentData().toInt()));
271 void DlgSettingsAxesChecker::slotSeconds (
const QString &)
279 void DlgSettingsAxesChecker::updateControls ()
283 m_cmbSeconds->setEnabled (m_btnNSeconds->isChecked ());
286 void DlgSettingsAxesChecker::updatePreview()
288 const int ZERO_RADIUS_SINCE_NO_POINTS = 0;
290 QVector<QPointF> points;
295 QPolygonF polygon (points);
299 ZERO_RADIUS_SINCE_NO_POINTS,
300 *m_modelAxesCheckerAfter,
void setCheckerMode(CheckerMode checkerMode)
Set method for checker mode.
void setCheckerSeconds(int seconds)
Set method for checker lifetime in seconds.
virtual ~DlgSettingsAxesChecker()
int checkerSeconds() const
Get method for checker lifetime in seconds.
void setCmdMediator(CmdMediator &cmdMediator)
Store CmdMediator for easy access by the leaf class.
#define LOG4CPP_INFO_S(logger)
Box shape that is drawn through the three axis points, to temporarily (usually) or permanently (rarel...
void finishPanel(QWidget *subPanel, int minimumWidth=MINIMUM_DIALOG_WIDTH, int minimumHeightOrZero=0)
Add Ok and Cancel buttons to subpanel to get the whole dialog.
void setLineColor(ColorPalette lineColor)
Set method for line color.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
#define ENGAUGE_CHECK_PTR(ptr)
#endif
CheckerMode checkerMode() const
Get method for checker lifetime mode.
void prepareForDisplay(const QPolygonF &polygon, int pointRadius, const DocumentModelAxesChecker &modelAxesChecker, const DocumentModelCoords &modelCoords, DocumentAxesPointsRequired documentAxesPointsRequired)
Create the polygon from current information, including pixel coordinates, just prior to display...
CheckerMode
Options for axes checker mode. Specifically, how long the checker is displayed after a change...
Class that modifies QGraphicsView to automatically expand/shrink the view to fit the window...
Command for DlgSettingsAxesChecker.
void populateColorComboWithoutTransparent(QComboBox &combo)
Add colors in color palette to combobox, without transparent entry at end.
ColorPalette lineColor() const
Get method for line color.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
Model for DlgSettingsCoords and CmdSettingsCoords.
virtual void createOptionalSaveDefault(QHBoxLayout *layout)
Let subclass define an optional Save As Default button.
virtual QWidget * createSubPanel()
Create dialog-specific panel to which base class will add Ok and Cancel buttons.
virtual void handleOk()
Process slotOk.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
log4cpp::Category * mainCat
static int MINIMUM_PREVIEW_HEIGHT
Dialog layout constant that guarantees preview has sufficent room.
const int TICK_MARK_LENGTH
void enableOk(bool enable)
Let leaf subclass control the Ok button.
Abstract base class for all Settings dialogs.
DlgSettingsAxesChecker(MainWindow &mainWindow)
Single constructor.
MainWindow & mainWindow()
Get method for MainWindow.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
CmdMediator & cmdMediator()
Provide access to Document information wrapped inside CmdMediator.
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) define ENGAUGE...