7 #include "CmdMediator.h" 8 #include "DlgSettingsAbstractBase.h" 9 #include "EngaugeAssert.h" 11 #include "MainWindow.h" 14 #include <QPushButton> 15 #include <QScrollArea> 17 #include <QSpacerItem> 18 #include <QVBoxLayout> 25 const QString &dialogName,
27 QDialog (&mainWindow),
28 m_mainWindow (mainWindow),
29 m_cmdMediator (nullptr),
30 m_dialogName (dialogName),
31 m_disableOkAtStartup (true)
33 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsAbstractBase::DlgSettingsAbstractBase" 34 <<
" name=" << m_dialogName.toLatin1().data();
36 setWindowTitle (title);
40 DlgSettingsAbstractBase::~DlgSettingsAbstractBase()
42 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsAbstractBase::~DlgSettingsAbstractBase" 43 <<
" name=" << m_dialogName.toLatin1().data();
48 ENGAUGE_CHECK_PTR (m_cmdMediator);
50 return *m_cmdMediator;
55 m_btnOk->setEnabled (enable);
60 int minimumHeightOrZero)
62 const int STRETCH_OFF = 0, STRETCH_ON = 1;
64 m_scroll =
new QScrollArea (
this);
65 m_scroll->setStyleSheet (
"QScrollArea { border: 0; margin: 0; padding: 0;}");
66 m_scroll->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
67 m_scroll->setVerticalScrollBarPolicy (Qt::ScrollBarAsNeeded);
68 m_scroll->setSizePolicy (QSizePolicy::Minimum,
69 QSizePolicy::Minimum);
70 m_scroll->setMinimumWidth (minimumWidth);
72 QWidget *viewport =
new QWidget (
this);
73 m_scroll->setWidget (viewport);
74 m_scroll->setWidgetResizable (
true);
76 QHBoxLayout *scrollLayout =
new QHBoxLayout (
this);
77 scrollLayout->addWidget (m_scroll);
78 setLayout (scrollLayout);
80 QVBoxLayout *panelLayout =
new QVBoxLayout (viewport);
81 viewport->setLayout (panelLayout);
83 panelLayout->addWidget (subPanel);
84 panelLayout->setStretch (panelLayout->count () - 1, STRETCH_ON);
86 QWidget *panelButtons =
new QWidget (
this);
87 QHBoxLayout *buttonLayout =
new QHBoxLayout (panelButtons);
91 QHBoxLayout *layoutRightSide =
new QHBoxLayout;
93 QWidget *widgetRightSide =
new QWidget;
94 widgetRightSide->setLayout (layoutRightSide);
95 buttonLayout->addWidget (widgetRightSide);
97 QSpacerItem *spacerExpanding =
new QSpacerItem (40, 5, QSizePolicy::Expanding, QSizePolicy::Expanding);
98 layoutRightSide->addItem (spacerExpanding);
100 m_btnOk =
new QPushButton (tr (
"Ok"));
101 m_btnOk->setEnabled (
false);
102 layoutRightSide->addWidget (m_btnOk, 0, Qt::AlignRight);
103 connect (m_btnOk, SIGNAL (released ()),
this, SLOT (slotOk ()));
105 QSpacerItem *spacerFixed =
new QSpacerItem (40, 5, QSizePolicy::Fixed, QSizePolicy::Fixed);
106 layoutRightSide->addItem (spacerFixed);
108 m_btnCancel =
new QPushButton (tr (
"Cancel"));
109 layoutRightSide->addWidget (m_btnCancel, 0, Qt::AlignRight);
110 connect (m_btnCancel, SIGNAL (released ()),
this, SLOT (slotCancel ()));
112 panelLayout->addWidget (panelButtons, STRETCH_ON);
113 panelLayout->setStretch (panelLayout->count () - 1, STRETCH_OFF);
115 setSizePolicy (QSizePolicy::Minimum,
116 QSizePolicy::Minimum);
118 if (minimumHeightOrZero > 0) {
119 m_scroll->setMinimumHeight (minimumHeightOrZero);
135 combo.addItem (colorPaletteToString (COLOR_PALETTE_BLUE),
136 QVariant (COLOR_PALETTE_BLUE));
137 combo.addItem (colorPaletteToString (COLOR_PALETTE_BLACK),
138 QVariant (COLOR_PALETTE_BLACK));
139 combo.addItem (colorPaletteToString (COLOR_PALETTE_CYAN),
140 QVariant (COLOR_PALETTE_CYAN));
141 combo.addItem (colorPaletteToString (COLOR_PALETTE_GOLD),
142 QVariant (COLOR_PALETTE_GOLD));
143 combo.addItem (colorPaletteToString (COLOR_PALETTE_GREEN),
144 QVariant (COLOR_PALETTE_GREEN));
145 combo.addItem (colorPaletteToString (COLOR_PALETTE_MAGENTA),
146 QVariant (COLOR_PALETTE_MAGENTA));
147 combo.addItem (colorPaletteToString (COLOR_PALETTE_RED),
148 QVariant (COLOR_PALETTE_RED));
149 combo.addItem (colorPaletteToString (COLOR_PALETTE_YELLOW),
150 QVariant (COLOR_PALETTE_YELLOW));
156 combo.addItem (
"Transparent", QVariant (COLOR_PALETTE_TRANSPARENT));
159 void DlgSettingsAbstractBase::saveGeometryToSettings()
162 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
163 settings.setValue (m_dialogName, saveGeometry ());
173 m_disableOkAtStartup = disableOkAtStartup;
176 void DlgSettingsAbstractBase::hideEvent (QHideEvent * )
178 saveGeometryToSettings();
181 void DlgSettingsAbstractBase::showEvent (QShowEvent * )
183 if (m_disableOkAtStartup) {
184 m_btnOk->setEnabled (
false);
187 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
188 if (settings.contains (m_dialogName)) {
191 restoreGeometry (settings.value (m_dialogName).toByteArray ());
195 void DlgSettingsAbstractBase::slotCancel ()
197 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsAbstractBase::slotCancel";
202 void DlgSettingsAbstractBase::slotOk ()
204 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgSettingsAbstractBase::slotOk";
static int MINIMUM_DIALOG_WIDTH
Dialog layout constant that guarantees every widget has sufficient room. Can be increased by finishPa...
void setDisableOkAtStartup(bool disableOkAtStartup)
Override the default Ok button behavior applied in showEvent.
DlgSettingsAbstractBase(const QString &title, const QString &dialogName, MainWindow &mainWindow)
Single constructor.
void setCmdMediator(CmdMediator &cmdMediator)
Store CmdMediator for easy access by the leaf class.
virtual void createOptionalSaveDefault(QHBoxLayout *layout)=0
Let subclass define an optional Save As Default button.
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 populateColorComboWithoutTransparent(QComboBox &combo)
Add colors in color palette to combobox, without transparent entry at end.
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.
virtual void handleOk()=0
Process slotOk.
void populateColorComboWithTransparent(QComboBox &combo)
Add colors in color palette to combobox, with transparent entry at end.
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.