23 #include "configurationdialog.h"
24 #include "ui_configurationdialog.h"
26 #include "configurationbasebox.h"
27 #include "qtmetapointer.h"
31 #include <QStandardItemModel>
32 #include <QStandardItem>
34 #include <QAbstractButton>
36 DClass<ConfigurationDialog> :
public Ui::ConfigurationDialog
39 QList<ConfigurationBaseBox*> configBoxesList;
40 QWidget* currentlyDisplayedCfgBox;
50 d->tvOptionsList->setHeaderHidden(
true);
51 d->tvOptionsList->setModel(
new QStandardItemModel(
this));
53 d->currentlyDisplayedCfgBox = NULL;
54 connect(d->buttonBox, SIGNAL( clicked(QAbstractButton *) ),
this, SLOT ( btnClicked(QAbstractButton *) ));
55 this->connect(d->tvOptionsList->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)),
56 SLOT(onOptionListCurrentChanged(QModelIndex, QModelIndex)));
59 ConfigurationDialog::~ConfigurationDialog()
61 for(
int i = 0; i < d->configBoxesList.count(); ++i)
63 delete d->configBoxesList[i];
69 if (!canConfigurationBoxBeAddedToList(pConfigurationBox))
74 QStandardItemModel* pModel = (QStandardItemModel*)d->tvOptionsList->model();
77 rootItem = pModel->invisibleRootItem();
80 if (!this->hasItemOnList(rootItem))
85 QStandardItem* pNewItem =
new QStandardItem(pConfigurationBox->
name());
86 pNewItem->setIcon(pConfigurationBox->
icon());
88 void* pointerConfigurationBox = pConfigurationBox;
90 QVariant variantConfigurationBox = qVariantFromValue(metaPointer);
91 pNewItem->setData(variantConfigurationBox);
95 rootItem->appendRow(pNewItem);
99 rootItem->insertRow(position, pNewItem);
102 d->configBoxesList.push_back(pConfigurationBox);
109 QStandardItemModel* pModel = (QStandardItemModel*)d->tvOptionsList->model();
110 if (rootItem == NULL)
112 rootItem = pModel->invisibleRootItem();
115 if (!this->hasItemOnList(rootItem))
121 QVariant variantMetaPointer = qVariantFromValue(metaPointer);
123 QStandardItem* pNewItem =
new QStandardItem(label);
124 pNewItem->setData(variantMetaPointer);
128 rootItem->appendRow(pNewItem);
132 rootItem->insertRow(position, pNewItem);
138 void ConfigurationDialog::btnClicked(QAbstractButton *button)
141 switch(d->buttonBox->standardButton(button))
146 case QDialogButtonBox::Ok:
147 if (this->validate())
150 this->saveSettings();
154 case QDialogButtonBox::Apply:
155 if (this->validate())
157 this->saveSettings();
161 case QDialogButtonBox::Cancel:
167 bool ConfigurationDialog::canConfigurationBoxBeAddedToList(
ConfigurationBaseBox* pConfigurationBox)
169 return isConfigurationBoxInfoValid(pConfigurationBox) && !isConfigurationBoxOnTheList(pConfigurationBox);
174 return pConfigurationBox != NULL && !pConfigurationBox->
name().isEmpty();
181 if (pConfigurationBox == pBoxOnTheList)
190 void ConfigurationDialog::keyPressEvent(QKeyEvent* e)
202 QDialog::keyPressEvent(e);
206 bool ConfigurationDialog::hasItemOnList(QStandardItem* pItem)
const
213 QStandardItemModel* pModel = (QStandardItemModel*)d->tvOptionsList->model();
218 return pModel->invisibleRootItem() == pItem
219 || pModel->indexFromItem(pItem).isValid();
222 void ConfigurationDialog::onOptionListCurrentChanged(
const QModelIndex ¤t,
const QModelIndex &previous)
224 if (current.isValid() && current != previous)
226 switchToItem(current);
230 void ConfigurationDialog::switchToItem(
const QModelIndex& index)
232 QStandardItemModel* model =
static_cast<QStandardItemModel*
>(d->tvOptionsList->model());
233 QStandardItem* item = model->itemFromIndex(index);
235 QtMetaPointer metaPointer = qVariantValue<QtMetaPointer>(item->data());
236 void* pointer = metaPointer;
241 if (isConfigurationBoxInfoValid(pConfigBox))
254 return d->tvOptionsList;
257 void ConfigurationDialog::saveSettings()
260 for (
int i = 0; i < d->configBoxesList.count(); ++i)
262 d->configBoxesList[i]->save();
270 for (
int i = 0; i < d->configBoxesList.count(); ++i)
272 d->configBoxesList[i]->read();
280 if (d->currentlyDisplayedCfgBox != NULL)
282 d->currentlyDisplayedCfgBox->hide();
283 d->mainPanel->setTitle(QString());
285 d->currentlyDisplayedCfgBox = widget;
289 d->mainPanel->layout()->addWidget(widget);
290 d->mainPanel->setTitle(widget->
title());
void showConfigurationBox(ConfigurationBaseBox *widget)
QTreeView * optionsTree()
Returns pointer to the tree widget that contains configuration sections list.
bool areSettingsAlreadyRead()
true if settings for this page have already been loaded at least once.
virtual QString name() const =0
Reimplement this to return a list-displayable name for this ConfigurationBaseBox. ...
QStandardItem * addLabel(QStandardItem *rootItem, const QString &label, int position=-1)
Adds a label node to the options tree view.
void read()
Read configuration from persistence to page contents.
virtual QStandardItem * addConfigurationBox(QStandardItem *rootItem, ConfigurationBaseBox *pConfigurationBox, int position=-1)
Adds a new configuration box to the options tree view.
void setAllowSave(bool b)
Change whether settings on this page can be stored in persisting configuration.
virtual QIcon icon() const =0
Reimplement this to return a displayable icon for the ConfigurationBaseBox.
virtual QString title() const
Page title, by default returns the same string as name().
Base class for configuration pages.