16#include <QButtonGroup>
18#include <QGraphicsRectItem>
19#include <QGraphicsScene>
26#include <QRadioButton>
43 "DlgSettingsAxesChecker",
46 m_modelAxesCheckerBefore (nullptr),
47 m_modelAxesCheckerAfter (nullptr),
48 m_modelCoords (nullptr)
63void DlgSettingsAxesChecker::createControls (QGridLayout *layout,
68 QGroupBox *groupBox =
new QGroupBox (tr (
"Axes Checker Lifetime"));
69 layout->addWidget (groupBox, row, 1, 1, 2);
76 QGridLayout *layoutLifetime =
new QGridLayout;
77 groupBox->setLayout (layoutLifetime);
80 m_btnNever =
new QRadioButton (tr (
"Do not show"), groupBox);
81 m_btnNever->setWhatsThis (tr (
"Never show axes checker."));
82 layoutLifetime->addWidget (m_btnNever, rowLifetime++, 0, 1, 2);
84 m_btnNSeconds =
new QRadioButton (tr (
"Show for a number of seconds"), groupBox);
85 m_btnNSeconds->setWhatsThis (tr (
"Show axes checker for a number of seconds after changing axes points."));
86 layoutLifetime->addWidget (m_btnNSeconds, rowLifetime, 0, 1, 1);
88 m_cmbSeconds =
new QComboBox;
89 for (
int seconds = 1; seconds <= 10; seconds++) {
90 m_cmbSeconds->addItem (QString::number (seconds), QVariant (seconds));
92 m_cmbSeconds->setWhatsThis (tr (
"Number of seconds axes checker is displayed after axes points are changed"));
93 layoutLifetime->addWidget (m_cmbSeconds, rowLifetime++, 1);
94 connect (m_cmbSeconds, SIGNAL (activated (
const QString &)),
this, SLOT (slotSeconds (
const QString &)));
96 m_btnForever =
new QRadioButton (tr (
"Show always"), groupBox);
97 m_btnForever->setWhatsThis (tr (
"Always show axes checker."));
98 layoutLifetime->addWidget (m_btnForever, rowLifetime++, 0, 1, 2);
100 m_groupMode =
new QButtonGroup;
101 m_groupMode->addButton (m_btnNever);
102 m_groupMode->addButton (m_btnNSeconds);
103 m_groupMode->addButton (m_btnForever);
104 connect (m_groupMode, SIGNAL (buttonReleased (QAbstractButton*)),
this, SLOT (slotGroupMode (QAbstractButton*)));
106 QLabel *labelLineColor =
new QLabel (QString (
"%1:").arg (tr (
"Line color")));
107 layout->addWidget (labelLineColor, row, 1);
109 m_cmbLineColor =
new QComboBox;
110 m_cmbLineColor->setWhatsThis (tr (
"Select a color for the highlight lines drawn at each axis point"));
112 connect (m_cmbLineColor, SIGNAL (activated (
const QString &)),
this, SLOT (slotLineColor (
const QString &)));
113 layout->addWidget (m_cmbLineColor, row++, 2);
120void DlgSettingsAxesChecker::createPoints ()
124 QBrush AXES_BRUSH (Qt::gray);
126 m_checker =
new Checker (*m_scenePreview);
130 QGraphicsRectItem *itemRect =
new QGraphicsRectItem (0,
134 itemRect->setPen (Qt::NoPen);
135 m_scenePreview->addItem (itemRect);
138 QGraphicsRectItem *frameBox =
new QGraphicsRectItem (
X_LEFT,
142 frameBox->setPen (QPen (AXES_BRUSH,
AXIS_WIDTH));
143 frameBox->setZValue (-1);
144 m_scenePreview->addItem (frameBox);
148 tick->setZValue (-1);
149 m_scenePreview->addItem (tick);
154 tick->setZValue (-1);
155 m_scenePreview->addItem (tick);
159void DlgSettingsAxesChecker::createPreview (QGridLayout *layout,
164 QLabel *labelPreview =
new QLabel (tr (
"Preview"));
165 layout->addWidget (labelPreview, row++, 0, 1, 4);
167 m_scenePreview =
new QGraphicsScene (
this);
168 m_viewPreview =
new ViewPreview (m_scenePreview,
171 m_viewPreview->setWhatsThis (tr (
"Preview window that shows how current settings affect the displayed axes checker"));
172 m_viewPreview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
173 m_viewPreview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
176 layout->addWidget (m_viewPreview, row++, 0, 1, 4);
183 QWidget *subPanel =
new QWidget ();
184 QGridLayout *layout =
new QGridLayout (subPanel);
185 subPanel->setLayout (layout);
187 layout->setColumnStretch(0, 1);
188 layout->setColumnStretch(1, 0);
189 layout->setColumnStretch(2, 0);
190 layout->setColumnStretch(3, 1);
193 createControls (layout, row);
194 createPreview (layout, row);
207 *m_modelAxesCheckerBefore,
208 *m_modelAxesCheckerAfter);
221 delete m_modelAxesCheckerBefore;
222 delete m_modelAxesCheckerAfter;
223 delete m_modelCoords;
231 CheckerMode checkerMode = m_modelAxesCheckerAfter->checkerMode();
235 int indexSeconds = m_cmbSeconds->findData (QVariant (m_modelAxesCheckerAfter->checkerSeconds()));
237 m_cmbSeconds->setCurrentIndex(indexSeconds);
239 int indexLineColor = m_cmbLineColor->findData (QVariant (m_modelAxesCheckerAfter->lineColor()));
241 m_cmbLineColor->setCurrentIndex (indexLineColor);
255void DlgSettingsAxesChecker::slotGroupMode (QAbstractButton*)
259 if (m_btnNever->isChecked ()) {
261 }
else if (m_btnNSeconds->isChecked ()) {
271void DlgSettingsAxesChecker::slotLineColor(
const QString &)
275 m_modelAxesCheckerAfter->setLineColor (
static_cast<ColorPalette> (m_cmbLineColor->currentData().toInt()));
280void DlgSettingsAxesChecker::slotSeconds (
const QString &)
284 m_modelAxesCheckerAfter->setCheckerSeconds(m_cmbSeconds->currentData().toInt());
288void DlgSettingsAxesChecker::slotWhatsThis ()
290 QWhatsThis::enterWhatsThisMode();
293void DlgSettingsAxesChecker::updateControls ()
297 m_cmbSeconds->setEnabled (m_btnNSeconds->isChecked ());
300void DlgSettingsAxesChecker::updatePreview()
302 const int ZERO_RADIUS_SINCE_NO_POINTS = 0;
304 QVector<QPointF> points;
309 QPolygonF polygon (points);
312 m_checker->prepareForDisplay (polygon,
313 ZERO_RADIUS_SINCE_NO_POINTS,
314 *m_modelAxesCheckerAfter,
CheckerMode
Options for axes checker mode. Specifically, how long the checker is displayed after a change.
const int TICK_MARK_LENGTH
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT.
#define ENGAUGE_CHECK_PTR(ptr)
Drop in replacement for Q_CHECK_PTR.
log4cpp::Category * mainCat
Box shape that is drawn through the three axis points, to temporarily (usually) or permanently (rarel...
Command for DlgSettingsAxesChecker.
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 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.
static int MINIMUM_PREVIEW_HEIGHT
Dialog layout constant that guarantees preview has sufficent room.
MainWindow & mainWindow()
Get method for MainWindow.
virtual void handleOk()
Process slotOk.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
virtual void createOptionalSaveDefault(QHBoxLayout *layout)
Let subclass define an optional Save As Default button.
virtual ~DlgSettingsAxesChecker()
DlgSettingsAxesChecker(MainWindow &mainWindow)
Single constructor.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.
virtual QWidget * createSubPanel()
Create dialog-specific panel to which base class will add Ok and Cancel buttons.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
void setCheckerMode(CheckerMode checkerMode)
Set method for checker mode.
Model for DlgSettingsCoords and CmdSettingsCoords.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
@ VIEW_ASPECT_RATIO_VARIABLE
#define LOG4CPP_INFO_S(logger)