Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator Friends Pages
DlgSettingsAbstractBase.cpp
1 #include "CmdMediator.h"
2 #include "DlgSettingsAbstractBase.h"
3 #include "EngaugeAssert.h"
4 #include "Logger.h"
5 #include "MainWindow.h"
6 #include <QColor>
7 #include <QComboBox>
8 #include <QPushButton>
9 #include <QSettings>
10 #include <QSpacerItem>
11 #include <QVBoxLayout>
12 
15 
17  const QString &dialogName,
18  MainWindow &mainWindow) :
19  QDialog (&mainWindow),
20  m_mainWindow (mainWindow),
21  m_cmdMediator (0),
22  m_dialogName (dialogName)
23 {
24  LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsAbstractBase::DlgSettingsAbstractBase"
25  << " name=" << m_dialogName.toLatin1().data();
26 
27  setWindowTitle (title);
28  setModal (true);
29 }
30 
31 DlgSettingsAbstractBase::~DlgSettingsAbstractBase()
32 {
33  LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsAbstractBase::~DlgSettingsAbstractBase"
34  << " name=" << m_dialogName.toLatin1().data();
35 }
36 
38 {
39  ENGAUGE_CHECK_PTR (m_cmdMediator);
40 
41  return *m_cmdMediator;
42 }
43 
45 {
46  m_btnOk->setEnabled (enable);
47 }
48 
49 void DlgSettingsAbstractBase::finishPanel (QWidget *subPanel)
50 {
51  const int STRETCH_OFF = 0, STRETCH_ON = 1;
52 
53  QVBoxLayout *panelLayout = new QVBoxLayout (this);
54 
55  setMinimumWidth (MINIMUM_DIALOG_WIDTH);
56  setLayout (panelLayout);
57 
58  panelLayout->addWidget (subPanel);
59  panelLayout->setStretch (panelLayout->count () - 1, STRETCH_ON);
60 
61  QWidget *panelButtons = new QWidget (this);
62  QHBoxLayout *buttonLayout = new QHBoxLayout (panelButtons);
63 
64  createOptionalSaveDefault(buttonLayout);
65 
66  QHBoxLayout *layoutRightSide = new QHBoxLayout;
67 
68  QWidget *widgetRightSide = new QWidget;
69  widgetRightSide->setLayout (layoutRightSide);
70  buttonLayout->addWidget (widgetRightSide);
71 
72  QSpacerItem *spacerExpanding = new QSpacerItem (40, 5, QSizePolicy::Expanding, QSizePolicy::Expanding);
73  layoutRightSide->addItem (spacerExpanding);
74 
75  m_btnOk = new QPushButton (tr ("Ok"));
76  m_btnOk->setEnabled (false); // Nothing to save initially
77  layoutRightSide->addWidget (m_btnOk, 0, Qt::AlignRight);
78  connect (m_btnOk, SIGNAL (released ()), this, SLOT (slotOk ()));
79 
80  QSpacerItem *spacerFixed = new QSpacerItem (40, 5, QSizePolicy::Fixed, QSizePolicy::Fixed);
81  layoutRightSide->addItem (spacerFixed);
82 
83  m_btnCancel = new QPushButton (tr ("Cancel"));
84  layoutRightSide->addWidget (m_btnCancel, 0, Qt::AlignRight);
85  connect (m_btnCancel, SIGNAL (released ()), this, SLOT (slotCancel ()));
86 
87  panelLayout->addWidget (panelButtons, STRETCH_ON);
88  panelLayout->setStretch (panelLayout->count () - 1, STRETCH_OFF);
89 }
90 
92 {
93  return m_mainWindow;
94 }
95 
97 {
98  return m_mainWindow;
99 }
100 
102 {
103  combo.addItem (colorPaletteToString (COLOR_PALETTE_BLUE),
104  QVariant (COLOR_PALETTE_BLUE));
105  combo.addItem (colorPaletteToString (COLOR_PALETTE_BLACK),
106  QVariant (COLOR_PALETTE_BLACK));
107  combo.addItem (colorPaletteToString (COLOR_PALETTE_CYAN),
108  QVariant (COLOR_PALETTE_CYAN));
109  combo.addItem (colorPaletteToString (COLOR_PALETTE_GOLD),
110  QVariant (COLOR_PALETTE_GOLD));
111  combo.addItem (colorPaletteToString (COLOR_PALETTE_GREEN),
112  QVariant (COLOR_PALETTE_GREEN));
113  combo.addItem (colorPaletteToString (COLOR_PALETTE_MAGENTA),
114  QVariant (COLOR_PALETTE_MAGENTA));
115  combo.addItem (colorPaletteToString (COLOR_PALETTE_RED),
116  QVariant (COLOR_PALETTE_RED));
117  combo.addItem (colorPaletteToString (COLOR_PALETTE_YELLOW),
118  QVariant (COLOR_PALETTE_YELLOW));
119 }
120 
122 {
124  combo.addItem ("Transparent", QVariant (COLOR_PALETTE_TRANSPARENT));
125 }
126 
127 void DlgSettingsAbstractBase::saveGeometryToSettings()
128 {
129  // Store the settings for use by showEvent
130  QSettings settings;
131  settings.setValue (m_dialogName, saveGeometry ());
132 }
133 
135 {
136  m_cmdMediator = &cmdMediator;
137 }
138 
139 void DlgSettingsAbstractBase::showEvent (QShowEvent * /* event */)
140 {
141  m_btnOk->setEnabled (false);
142 
143  QSettings settings;
144  if (settings.contains (m_dialogName)) {
145 
146  // Restore the settings that were stored by the last call to saveGeometryToSettings
147  restoreGeometry (settings.value (m_dialogName).toByteArray ());
148  }
149 }
150 
151 void DlgSettingsAbstractBase::slotCancel ()
152 {
153  LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsAbstractBase::slotCancel";
154 
155  saveGeometryToSettings();
156  hide();
157 }
158 
159 void DlgSettingsAbstractBase::slotOk ()
160 {
161  LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsAbstractBase::slotOk";
162 
163  saveGeometryToSettings();
164 
165  // Forward to leaf class
166  handleOk ();
167 }
static int MINIMUM_DIALOG_WIDTH
Dialog layout constant that guarantees every widget has sufficient room.
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 populateColorComboWithoutTransparent(QComboBox &combo)
Add colors in color palette to combobox, without transparent entry at end.
void finishPanel(QWidget *subPanel)
Add Ok and Cancel buttons to subpanel to get the whole dialog.
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.
Command queue stack.
Definition: CmdMediator.h:16
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...
Definition: MainWindow.h:66
CmdMediator & cmdMediator()
Provide access to Document information wrapped inside CmdMediator.