7 #include "CmdMediator.h" 8 #include "CmdSettingsDigitizeCurve.h" 9 #include "CursorFactory.h" 10 #include "CursorSize.h" 11 #include "DlgSettingsDigitizeCurve.h" 12 #include "DocumentModelDigitizeCurve.h" 13 #include "EngaugeAssert.h" 15 #include "MainWindow.h" 16 #include "PointStyle.h" 19 #include <QGraphicsPixmapItem> 20 #include <QGridLayout> 21 #include <QGraphicsScene> 25 #include <QRadioButton> 28 #include "SegmentFactory.h" 29 #include "ViewPreview.h" 31 const int IMAGE_WIDTH = 100;
32 const int IMAGE_HEIGHT = 100;
33 const int MINIMUM_HEIGHT = 450;
34 const int INNER_RADIUS_MAX = 64;
35 const int INNER_RADIUS_MIN = 0;
36 const int LINE_LENGTH_MIN = 2;
37 const int LINE_WIDTH_MAX = 32;
38 const int LINE_WIDTH_MIN = 1;
42 "DlgSettingsDigitizeCurve",
46 m_modelDigitizeCurveBefore (0),
47 m_modelDigitizeCurveAfter (0)
49 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::DlgSettingsDigitizeCurve";
55 DlgSettingsDigitizeCurve::~DlgSettingsDigitizeCurve()
57 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::~DlgSettingsDigitizeCurve";
60 void DlgSettingsDigitizeCurve::createControls (QGridLayout *layout,
63 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::createControls";
65 m_boxCursor =
new QGroupBox (tr (
"Cursor"));
66 layout->addWidget (m_boxCursor, row++, 1, 1, 2);
69 QGridLayout *layoutCursor =
new QGridLayout;
70 m_boxCursor->setLayout (layoutCursor);
73 QLabel *labelCursorType =
new QLabel(tr (
"Type:"));
74 layoutCursor->addWidget (labelCursorType, rowCursor, 0);
76 m_btnStandard =
new QRadioButton (tr (
"Standard cross"));
77 m_btnStandard->setWhatsThis (tr (
"Selects the standard cross cursor"));
78 layoutCursor->addWidget (m_btnStandard, rowCursor++, 1);
79 connect (m_btnStandard, SIGNAL (toggled (
bool)),
this, SLOT (slotCursorStandard(
bool)));
81 m_btnCustom =
new QRadioButton (tr (
"Custom cross"));
82 m_btnCustom->setWhatsThis (tr (
"Selects a custom cursor based on the settings selected below"));
83 layoutCursor->addWidget (m_btnCustom, rowCursor++, 1);
84 connect (m_btnCustom, SIGNAL (toggled (
bool)),
this, SLOT (slotCursorCustom(
bool)));
86 QLabel *labelSize =
new QLabel(tr (
"Size (pixels):"));
87 layoutCursor->addWidget (labelSize, rowCursor, 0);
89 m_cmbSize =
new QComboBox;
90 m_cmbSize->addItem (QString::number (CursorSizeToPixels (CURSOR_SIZE_16)), QVariant (CURSOR_SIZE_16));
91 m_cmbSize->addItem (QString::number (CursorSizeToPixels (CURSOR_SIZE_32)), QVariant (CURSOR_SIZE_32));
92 m_cmbSize->addItem (QString::number (CursorSizeToPixels (CURSOR_SIZE_48)), QVariant (CURSOR_SIZE_48));
93 m_cmbSize->addItem (QString::number (CursorSizeToPixels (CURSOR_SIZE_64)), QVariant (CURSOR_SIZE_64));
94 ENGAUGE_ASSERT (m_cmbSize->count() == NUM_CURSOR_SIZES);
95 m_cmbSize->setWhatsThis (tr (
"Horizontal and vertical size of the cursor in pixels"));
96 layoutCursor->addWidget (m_cmbSize, rowCursor++, 1);
97 connect (m_cmbSize, SIGNAL (currentIndexChanged (
const QString &)),
this, SLOT (slotCursorSize (
const QString &)));
99 QLabel *labelInnerRadius =
new QLabel(tr (
"Inner radius (pixels):"));
100 layoutCursor->addWidget (labelInnerRadius, rowCursor, 0);
102 m_spinInnerRadius =
new QSpinBox;
103 m_spinInnerRadius->setRange (INNER_RADIUS_MIN, INNER_RADIUS_MAX);
104 m_spinInnerRadius->setWhatsThis (tr (
"Radius of circle at the center of the cursor that will remain empty"));
105 layoutCursor->addWidget (m_spinInnerRadius, rowCursor++, 1);
106 connect (m_spinInnerRadius, SIGNAL (valueChanged(
const QString &)),
this, SLOT (slotCursorInnerRadius (
const QString &)));
108 QLabel *labelLineWidth =
new QLabel(tr (
"Line width (pixels):"));
109 layoutCursor->addWidget (labelLineWidth, rowCursor, 0);
111 m_spinLineWidth =
new QSpinBox;
112 m_spinLineWidth->setRange (LINE_WIDTH_MIN, LINE_WIDTH_MAX);
113 m_spinLineWidth->setWhatsThis (tr (
"Width of each arm of the cross of the cursor"));
114 layoutCursor->addWidget (m_spinLineWidth, rowCursor++, 1);
115 connect (m_spinLineWidth, SIGNAL (valueChanged(
const QString &)),
this, SLOT (slotCursorLineWidth (
const QString &)));
122 void DlgSettingsDigitizeCurve::createPreview (QGridLayout *layout,
125 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::createPreview";
127 QLabel *labelPreview =
new QLabel (tr (
"Preview"));
128 layout->addWidget (labelPreview, row++, 0, 1, 4);
130 m_scenePreview =
new QGraphicsScene (
this);
131 m_scenePreview->setSceneRect(0,
137 ViewPreview::VIEW_ASPECT_RATIO_VARIABLE,
139 m_viewPreview->setWhatsThis (tr (
"Preview window showing the currently selected cursor.\n\n" 140 "Drag the cursor over this area to see the effects of the current settings on the cursor shape."));
141 m_viewPreview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
142 m_viewPreview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
145 layout->addWidget (m_viewPreview, row++, 0, 1, 4);
150 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::createSubPanel";
152 QWidget *subPanel =
new QWidget ();
153 QGridLayout *layout =
new QGridLayout (subPanel);
154 subPanel->setLayout (layout);
156 layout->setColumnStretch (0, 1);
157 layout->setColumnStretch (1, 0);
158 layout->setColumnStretch (2, 0);
159 layout->setColumnStretch (3, 1);
162 createControls(layout, row);
163 createPreview (layout, row);
170 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::handleOk";
174 *m_modelDigitizeCurveBefore,
175 *m_modelDigitizeCurveAfter);
183 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::load";
188 if (m_modelDigitizeCurveBefore != 0) {
189 delete m_modelDigitizeCurveBefore;
191 if (m_modelDigitizeCurveAfter != 0) {
192 delete m_modelDigitizeCurveAfter;
200 ENGAUGE_ASSERT (INNER_RADIUS_MIN <= m_modelDigitizeCurveAfter->cursorInnerRadius ());
201 ENGAUGE_ASSERT (INNER_RADIUS_MAX >= m_modelDigitizeCurveAfter->
cursorInnerRadius ());
202 ENGAUGE_ASSERT (LINE_WIDTH_MIN <= m_modelDigitizeCurveAfter->cursorLineWidth ());
203 ENGAUGE_ASSERT (LINE_WIDTH_MAX >= m_modelDigitizeCurveAfter->
cursorLineWidth ());
209 int index = m_cmbSize->findData (QVariant (m_modelDigitizeCurveAfter->
cursorSize()));
210 m_cmbSize->setCurrentIndex (index);
211 m_spinLineWidth->setValue (m_modelDigitizeCurveAfter->
cursorLineWidth());
221 setMinimumHeight (MINIMUM_HEIGHT);
225 void DlgSettingsDigitizeCurve::slotCursorCustom (
bool)
227 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::slotCursorCustom";
234 void DlgSettingsDigitizeCurve::slotCursorInnerRadius (
const QString &)
236 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::slotCursorInnerRadius";
243 void DlgSettingsDigitizeCurve::slotCursorLineWidth (
const QString &)
245 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::slotCursorLineWidth";
252 void DlgSettingsDigitizeCurve::slotCursorSize (
const QString &)
254 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::slotCursorSize";
256 m_modelDigitizeCurveAfter->
setCursorSize ((CursorSize) m_cmbSize->currentData().toInt());
261 void DlgSettingsDigitizeCurve::slotCursorStandard (
bool)
263 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::slotCursorStandard";
270 void DlgSettingsDigitizeCurve::updateControls()
273 bool isGoodState = 2 * (m_modelDigitizeCurveAfter->
cursorInnerRadius() + LINE_LENGTH_MIN) <=
274 CursorSizeToPixels (m_modelDigitizeCurveAfter->
cursorSize());
277 m_spinInnerRadius->setEnabled (m_btnCustom->isChecked());
278 m_cmbSize->setEnabled (m_btnCustom->isChecked());
279 m_spinLineWidth->setEnabled (m_btnCustom->isChecked());
282 void DlgSettingsDigitizeCurve::updatePreview()
284 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsDigitizeCurve::updatePreview";
287 QCursor cursor = cursorFactory.
generate (*m_modelDigitizeCurveAfter);
288 m_viewPreview->setCursor (cursor);
DlgSettingsDigitizeCurve(MainWindow &mainWindow)
Single constructor.
virtual void load(CmdMediator &cmdMediator)
Load settings from Document.
CursorSize cursorSize() const
Get method for cursor size.
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.
void setCursorSize(CursorSize cursorSize)
Set method for cursor size.
void finishPanel(QWidget *subPanel, int minimumWidth=MINIMUM_DIALOG_WIDTH, int minimumHeightOrZero=0)
Add Ok and Cancel buttons to subpanel to get the whole dialog.
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Class that modifies QGraphicsView to automatically expand/shrink the view to fit the window...
void setCursorInnerRadius(int innerRadius)
Set method for cursor inner radius.
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.
int cursorInnerRadius() const
Get method for cursor inner radius.
void enableOk(bool enable)
Let leaf subclass control the Ok button.
bool cursorStandardCross() const
Get method for cursor type.
Command for DlgSettingsDigitizeCurve.
int cursorLineWidth() const
Get method for cursor line width.
Abstract base class for all Settings dialogs.
MainWindow & mainWindow()
Get method for MainWindow.
QCursor generate(const DocumentModelDigitizeCurve &modelDigitizeCurve) const
Factory method to generate standard or custom cursor.
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.
virtual void setSmallDialogs(bool smallDialogs)
If false then dialogs have a minimum size so all controls are visible.