00001
00002
00003
00004
00005
00006
00007 #include "CmdMediator.h"
00008 #include "DlgSettingsAbstractBase.h"
00009 #include "EngaugeAssert.h"
00010 #include "Logger.h"
00011 #include "MainWindow.h"
00012 #include <QColor>
00013 #include <QComboBox>
00014 #include <QPushButton>
00015 #include <QScrollArea>
00016 #include <QSettings>
00017 #include <QSpacerItem>
00018 #include <QVBoxLayout>
00019
00020 int DlgSettingsAbstractBase::MINIMUM_DIALOG_WIDTH = 380;
00021 int DlgSettingsAbstractBase::MINIMUM_PREVIEW_HEIGHT = 100;
00022
00023 DlgSettingsAbstractBase::DlgSettingsAbstractBase(const QString &title,
00024 const QString &dialogName,
00025 MainWindow &mainWindow) :
00026 QDialog (&mainWindow),
00027 m_mainWindow (mainWindow),
00028 m_cmdMediator (0),
00029 m_dialogName (dialogName),
00030 m_disableOkAtStartup (true)
00031 {
00032 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsAbstractBase::DlgSettingsAbstractBase"
00033 << " name=" << m_dialogName.toLatin1().data();
00034
00035 setWindowTitle (title);
00036 setModal (true);
00037 }
00038
00039 DlgSettingsAbstractBase::~DlgSettingsAbstractBase()
00040 {
00041 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsAbstractBase::~DlgSettingsAbstractBase"
00042 << " name=" << m_dialogName.toLatin1().data();
00043 }
00044
00045 CmdMediator &DlgSettingsAbstractBase::cmdMediator ()
00046 {
00047 ENGAUGE_CHECK_PTR (m_cmdMediator);
00048
00049 return *m_cmdMediator;
00050 }
00051
00052 void DlgSettingsAbstractBase::enableOk (bool enable)
00053 {
00054 m_btnOk->setEnabled (enable);
00055 }
00056
00057 void DlgSettingsAbstractBase::finishPanel (QWidget *subPanel,
00058 int minimumWidth,
00059 int minimumHeightOrZero)
00060 {
00061 const int STRETCH_OFF = 0, STRETCH_ON = 1;
00062
00063 m_scroll = new QScrollArea (this);
00064 m_scroll->setStyleSheet ("QScrollArea { border: 0; margin: 0; padding: 0;}");
00065 m_scroll->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
00066 m_scroll->setVerticalScrollBarPolicy (Qt::ScrollBarAsNeeded);
00067 m_scroll->setSizePolicy (QSizePolicy::Minimum,
00068 QSizePolicy::Minimum);
00069 m_scroll->setMinimumWidth (minimumWidth);
00070
00071 QWidget *viewport = new QWidget (this);
00072 m_scroll->setWidget (viewport);
00073 m_scroll->setWidgetResizable (true);
00074
00075 QHBoxLayout *scrollLayout = new QHBoxLayout (this);
00076 scrollLayout->addWidget (m_scroll);
00077 setLayout (scrollLayout);
00078
00079 QVBoxLayout *panelLayout = new QVBoxLayout (viewport);
00080 viewport->setLayout (panelLayout);
00081
00082 panelLayout->addWidget (subPanel);
00083 panelLayout->setStretch (panelLayout->count () - 1, STRETCH_ON);
00084
00085 QWidget *panelButtons = new QWidget (this);
00086 QHBoxLayout *buttonLayout = new QHBoxLayout (panelButtons);
00087
00088 createOptionalSaveDefault(buttonLayout);
00089
00090 QHBoxLayout *layoutRightSide = new QHBoxLayout;
00091
00092 QWidget *widgetRightSide = new QWidget;
00093 widgetRightSide->setLayout (layoutRightSide);
00094 buttonLayout->addWidget (widgetRightSide);
00095
00096 QSpacerItem *spacerExpanding = new QSpacerItem (40, 5, QSizePolicy::Expanding, QSizePolicy::Expanding);
00097 layoutRightSide->addItem (spacerExpanding);
00098
00099 m_btnOk = new QPushButton (tr ("Ok"));
00100 m_btnOk->setEnabled (false);
00101 layoutRightSide->addWidget (m_btnOk, 0, Qt::AlignRight);
00102 connect (m_btnOk, SIGNAL (released ()), this, SLOT (slotOk ()));
00103
00104 QSpacerItem *spacerFixed = new QSpacerItem (40, 5, QSizePolicy::Fixed, QSizePolicy::Fixed);
00105 layoutRightSide->addItem (spacerFixed);
00106
00107 m_btnCancel = new QPushButton (tr ("Cancel"));
00108 layoutRightSide->addWidget (m_btnCancel, 0, Qt::AlignRight);
00109 connect (m_btnCancel, SIGNAL (released ()), this, SLOT (slotCancel ()));
00110
00111 panelLayout->addWidget (panelButtons, STRETCH_ON);
00112 panelLayout->setStretch (panelLayout->count () - 1, STRETCH_OFF);
00113
00114 setSizePolicy (QSizePolicy::Minimum,
00115 QSizePolicy::Minimum);
00116
00117 if (minimumHeightOrZero > 0) {
00118 m_scroll->setMinimumHeight (minimumHeightOrZero);
00119 }
00120 }
00121
00122 MainWindow &DlgSettingsAbstractBase::mainWindow ()
00123 {
00124 return m_mainWindow;
00125 }
00126
00127 const MainWindow &DlgSettingsAbstractBase::mainWindow () const
00128 {
00129 return m_mainWindow;
00130 }
00131
00132 void DlgSettingsAbstractBase::populateColorComboWithoutTransparent (QComboBox &combo)
00133 {
00134 combo.addItem (colorPaletteToString (COLOR_PALETTE_BLUE),
00135 QVariant (COLOR_PALETTE_BLUE));
00136 combo.addItem (colorPaletteToString (COLOR_PALETTE_BLACK),
00137 QVariant (COLOR_PALETTE_BLACK));
00138 combo.addItem (colorPaletteToString (COLOR_PALETTE_CYAN),
00139 QVariant (COLOR_PALETTE_CYAN));
00140 combo.addItem (colorPaletteToString (COLOR_PALETTE_GOLD),
00141 QVariant (COLOR_PALETTE_GOLD));
00142 combo.addItem (colorPaletteToString (COLOR_PALETTE_GREEN),
00143 QVariant (COLOR_PALETTE_GREEN));
00144 combo.addItem (colorPaletteToString (COLOR_PALETTE_MAGENTA),
00145 QVariant (COLOR_PALETTE_MAGENTA));
00146 combo.addItem (colorPaletteToString (COLOR_PALETTE_RED),
00147 QVariant (COLOR_PALETTE_RED));
00148 combo.addItem (colorPaletteToString (COLOR_PALETTE_YELLOW),
00149 QVariant (COLOR_PALETTE_YELLOW));
00150 }
00151
00152 void DlgSettingsAbstractBase::populateColorComboWithTransparent (QComboBox &combo)
00153 {
00154 populateColorComboWithoutTransparent (combo);
00155 combo.addItem ("Transparent", QVariant (COLOR_PALETTE_TRANSPARENT));
00156 }
00157
00158 void DlgSettingsAbstractBase::saveGeometryToSettings()
00159 {
00160
00161 QSettings settings;
00162 settings.setValue (m_dialogName, saveGeometry ());
00163 }
00164
00165 void DlgSettingsAbstractBase::setCmdMediator (CmdMediator &cmdMediator)
00166 {
00167 m_cmdMediator = &cmdMediator;
00168 }
00169
00170 void DlgSettingsAbstractBase::setDisableOkAtStartup(bool disableOkAtStartup)
00171 {
00172 m_disableOkAtStartup = disableOkAtStartup;
00173 }
00174
00175 void DlgSettingsAbstractBase::showEvent (QShowEvent * )
00176 {
00177 if (m_disableOkAtStartup) {
00178 m_btnOk->setEnabled (false);
00179 }
00180
00181 QSettings settings;
00182 if (settings.contains (m_dialogName)) {
00183
00184
00185 restoreGeometry (settings.value (m_dialogName).toByteArray ());
00186 }
00187 }
00188
00189 void DlgSettingsAbstractBase::slotCancel ()
00190 {
00191 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsAbstractBase::slotCancel";
00192
00193 saveGeometryToSettings();
00194 hide();
00195 }
00196
00197 void DlgSettingsAbstractBase::slotOk ()
00198 {
00199 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsAbstractBase::slotOk";
00200
00201 saveGeometryToSettings();
00202
00203
00204 handleOk ();
00205 }