15#include <QButtonGroup>
17#include <QGraphicsRectItem>
18#include <QGraphicsScene>
24#include <QRadioButton>
40 "DlgSettingsAxesChecker",
43 m_modelAxesCheckerBefore (nullptr),
44 m_modelAxesCheckerAfter (nullptr),
45 m_modelCoords (nullptr)
60void 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);
111void 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);
150void 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);
246void DlgSettingsAxesChecker::slotGroupMode (QAbstractButton*)
250 if (m_btnNever->isChecked ()) {
252 }
else if (m_btnNSeconds->isChecked ()) {
262void DlgSettingsAxesChecker::slotLineColor(
const QString &)
271void DlgSettingsAxesChecker::slotSeconds (
const QString &)
279void DlgSettingsAxesChecker::updateControls ()
283 m_cmbSeconds->setEnabled (m_btnNSeconds->isChecked ());
286void 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,
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 if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) define ENGAUGE...
#define ENGAUGE_CHECK_PTR(ptr)
#endif
log4cpp::Category * mainCat
Box shape that is drawn through the three axis points, to temporarily (usually) or permanently (rarel...
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.
Command for DlgSettingsAxesChecker.
Abstract base class for all Settings dialogs.
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 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 setLineColor(ColorPalette lineColor)
Set method for line color.
ColorPalette lineColor() const
Get method for line color.
int checkerSeconds() const
Get method for checker lifetime in seconds.
void setCheckerSeconds(int seconds)
Set method for checker lifetime in seconds.
CheckerMode checkerMode() const
Get method for checker lifetime mode.
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...
Class that modifies QGraphicsView to automatically expand/shrink the view to fit the window,...
@ VIEW_ASPECT_RATIO_VARIABLE
#define LOG4CPP_INFO_S(logger)