1 #include "CmdMediator.h"
2 #include "CmdSettingsDigitizeCurve.h"
3 #include "CursorFactory.h"
4 #include "CursorSize.h"
5 #include "DlgSettingsDigitizeCurve.h"
6 #include "DocumentModelDigitizeCurve.h"
7 #include "EngaugeAssert.h"
9 #include "MainWindow.h"
10 #include "PointStyle.h"
13 #include <QGraphicsPixmapItem>
14 #include <QGridLayout>
15 #include <QGraphicsScene>
19 #include <QRadioButton>
22 #include "SegmentFactory.h"
23 #include "ViewPreview.h"
25 const int IMAGE_WIDTH = 100;
26 const int IMAGE_HEIGHT = 100;
28 const int INNER_RADIUS_MAX = 64;
29 const int INNER_RADIUS_MIN = 0;
30 const int LINE_LENGTH_MIN = 2;
31 const int LINE_WIDTH_MAX = 32;
32 const int LINE_WIDTH_MIN = 1;
36 "DlgSettingsDigitizeCurve",
40 m_modelDigitizeCurveBefore (0),
41 m_modelDigitizeCurveAfter (0)
43 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::DlgSettingsDigitizeCurve";
49 DlgSettingsDigitizeCurve::~DlgSettingsDigitizeCurve()
51 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::~DlgSettingsDigitizeCurve";
54 void DlgSettingsDigitizeCurve::createControls (QGridLayout *layout,
57 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::createControls";
59 m_boxCursor =
new QGroupBox (
"Cursor");
60 layout->addWidget (m_boxCursor, row++, 1, 1, 2);
63 QGridLayout *layoutCursor =
new QGridLayout;
64 m_boxCursor->setLayout (layoutCursor);
67 QLabel *labelCursorType =
new QLabel(
"Type:");
68 layoutCursor->addWidget (labelCursorType, rowCursor, 0);
70 m_btnStandard =
new QRadioButton (
"Standard cross");
71 m_btnStandard->setWhatsThis (tr (
"Selects the standard cross cursor"));
72 layoutCursor->addWidget (m_btnStandard, rowCursor++, 1);
73 connect (m_btnStandard, SIGNAL (toggled (
bool)),
this, SLOT (slotCursorStandard(
bool)));
75 m_btnCustom =
new QRadioButton (
"Custom cross");
76 m_btnCustom->setWhatsThis (tr (
"Selects a custom cursor based on the settings selected below"));
77 layoutCursor->addWidget (m_btnCustom, rowCursor++, 1);
78 connect (m_btnCustom, SIGNAL (toggled (
bool)),
this, SLOT (slotCursorCustom(
bool)));
80 QLabel *labelSize =
new QLabel(
"Size (pixels):");
81 layoutCursor->addWidget (labelSize, rowCursor, 0);
83 m_cmbSize =
new QComboBox;
84 m_cmbSize->addItem (QString::number (CursorSizeToPixels (CURSOR_SIZE_16)), QVariant (CURSOR_SIZE_16));
85 m_cmbSize->addItem (QString::number (CursorSizeToPixels (CURSOR_SIZE_32)), QVariant (CURSOR_SIZE_32));
86 m_cmbSize->addItem (QString::number (CursorSizeToPixels (CURSOR_SIZE_48)), QVariant (CURSOR_SIZE_48));
87 m_cmbSize->addItem (QString::number (CursorSizeToPixels (CURSOR_SIZE_64)), QVariant (CURSOR_SIZE_64));
88 ENGAUGE_ASSERT (m_cmbSize->count() == NUM_CURSOR_SIZES);
89 m_cmbSize->setWhatsThis (tr (
"Horizontal and vertical size of the cursor in pixels"));
90 layoutCursor->addWidget (m_cmbSize, rowCursor++, 1);
91 connect (m_cmbSize, SIGNAL (currentIndexChanged (
const QString &)),
this, SLOT (slotCursorSize (
const QString &)));
93 QLabel *labelInnerRadius =
new QLabel(
"Inner radius (pixels):");
94 layoutCursor->addWidget (labelInnerRadius, rowCursor, 0);
96 m_spinInnerRadius =
new QSpinBox;
97 m_spinInnerRadius->setRange (INNER_RADIUS_MIN, INNER_RADIUS_MAX);
98 m_spinInnerRadius->setWhatsThis (tr (
"Radius of circle at the center of the cursor that will remain empty"));
99 layoutCursor->addWidget (m_spinInnerRadius, rowCursor++, 1);
100 connect (m_spinInnerRadius, SIGNAL (valueChanged(
const QString &)),
this, SLOT (slotCursorInnerRadius (
const QString &)));
102 QLabel *labelLineWidth =
new QLabel(
"Line width (pixels):");
103 layoutCursor->addWidget (labelLineWidth, rowCursor, 0);
105 m_spinLineWidth =
new QSpinBox;
106 m_spinLineWidth->setRange (LINE_WIDTH_MIN, LINE_WIDTH_MAX);
107 m_spinLineWidth->setWhatsThis (tr (
"Width of each arm of the cross of the cursor"));
108 layoutCursor->addWidget (m_spinLineWidth, rowCursor++, 1);
109 connect (m_spinLineWidth, SIGNAL (valueChanged(
const QString &)),
this, SLOT (slotCursorLineWidth (
const QString &)));
116 void DlgSettingsDigitizeCurve::createPreview (QGridLayout *layout,
119 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::createPreview";
121 QLabel *labelPreview =
new QLabel (
"Preview");
122 layout->addWidget (labelPreview, row++, 0, 1, 4);
124 m_scenePreview =
new QGraphicsScene (
this);
125 m_scenePreview->setSceneRect(0,
131 ViewPreview::VIEW_ASPECT_RATIO_VARIABLE,
133 m_viewPreview->setWhatsThis (tr (
"Preview window showing the currently selected cursor"));
134 m_viewPreview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
135 m_viewPreview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
138 layout->addWidget (m_viewPreview, row++, 0, 1, 4);
143 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::createSubPanel";
145 QWidget *subPanel =
new QWidget ();
146 QGridLayout *layout =
new QGridLayout (subPanel);
147 subPanel->setLayout (layout);
149 layout->setColumnStretch (0, 1);
150 layout->setColumnStretch (1, 0);
151 layout->setColumnStretch (2, 0);
152 layout->setColumnStretch (3, 1);
155 createControls(layout, row);
156 createPreview (layout, row);
163 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::handleOk";
167 *m_modelDigitizeCurveBefore,
168 *m_modelDigitizeCurveAfter);
176 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::load";
181 if (m_modelDigitizeCurveBefore != 0) {
182 delete m_modelDigitizeCurveBefore;
184 if (m_modelDigitizeCurveAfter != 0) {
185 delete m_modelDigitizeCurveAfter;
193 ENGAUGE_ASSERT (INNER_RADIUS_MIN <= m_modelDigitizeCurveAfter->cursorInnerRadius ());
194 ENGAUGE_ASSERT (INNER_RADIUS_MAX >= m_modelDigitizeCurveAfter->
cursorInnerRadius ());
195 ENGAUGE_ASSERT (LINE_WIDTH_MIN <= m_modelDigitizeCurveAfter->cursorLineWidth ());
196 ENGAUGE_ASSERT (LINE_WIDTH_MAX >= m_modelDigitizeCurveAfter->
cursorLineWidth ());
202 int index = m_cmbSize->findData (QVariant (m_modelDigitizeCurveAfter->
cursorSize()));
203 m_cmbSize->setCurrentIndex (index);
204 m_spinLineWidth->setValue (m_modelDigitizeCurveAfter->
cursorLineWidth());
211 void DlgSettingsDigitizeCurve::slotCursorCustom (
bool)
213 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::slotCursorCustom";
220 void DlgSettingsDigitizeCurve::slotCursorInnerRadius (
const QString &)
222 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::slotCursorInnerRadius";
229 void DlgSettingsDigitizeCurve::slotCursorLineWidth (
const QString &)
231 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::slotCursorLineWidth";
238 void DlgSettingsDigitizeCurve::slotCursorSize (
const QString &)
240 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::slotCursorSize";
242 m_modelDigitizeCurveAfter->
setCursorSize ((CursorSize) m_cmbSize->currentData().toInt());
247 void DlgSettingsDigitizeCurve::slotCursorStandard (
bool)
249 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::slotCursorStandard";
256 void DlgSettingsDigitizeCurve::updateControls()
259 bool isGoodState = 2 * (m_modelDigitizeCurveAfter->
cursorInnerRadius() + LINE_LENGTH_MIN) <=
260 CursorSizeToPixels (m_modelDigitizeCurveAfter->
cursorSize());
263 m_spinInnerRadius->setEnabled (m_btnCustom->isChecked());
264 m_cmbSize->setEnabled (m_btnCustom->isChecked());
265 m_spinLineWidth->setEnabled (m_btnCustom->isChecked());
268 void DlgSettingsDigitizeCurve::updatePreview()
270 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::updatePreview";
273 QCursor cursor = cursorFactory.
generate (*m_modelDigitizeCurveAfter);
274 m_viewPreview->setCursor (cursor);
DlgSettingsDigitizeCurve(MainWindow &mainWindow)
Single constructor.
int cursorLineWidth() const
Get method for cursor line width.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
virtual void createOptionalSaveDefault(QHBoxLayout *layout)
Let subclass define an optional Save As Default button.
Create standard cross cursor, or custom cursor, according to settings.
void setCursorLineWidth(int lineWidth)
Set method for cursor line width.
void setCmdMediator(CmdMediator &cmdMediator)
Store CmdMediator for easy access by the leaf class.
virtual void handleOk()
Process slotOk.
bool cursorStandardCross() const
Get method for cursor type.
void setCursorSize(CursorSize cursorSize)
Set method for cursor size.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Class that modifies QGraphicsView to automatically expand/shrink the view to fit the window...
int cursorInnerRadius() const
Get method for cursor inner radius.
void setCursorInnerRadius(int innerRadius)
Set method for cursor inner radius.
void finishPanel(QWidget *subPanel)
Add Ok and Cancel buttons to subpanel to get the whole dialog.
virtual QWidget * createSubPanel()
Create dialog-specific panel to which base class will add Ok and Cancel buttons.
static int MINIMUM_PREVIEW_HEIGHT
Dialog layout constant that guarantees preview has sufficent room.
void enableOk(bool enable)
Let leaf subclass control the Ok button.
CursorSize cursorSize() const
Get method for cursor size.
Command for DlgSettingsDigitizeCurve.
Abstract base class for all Settings dialogs.
QCursor generate(const DocumentModelDigitizeCurve &modelDigitizeCurve) const
Factory method to generate standard or custom cursor.
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.
void setCursorStandardCross(bool cursorStandardCross)
Set method for cursor type.