- QVariantMap properties;
- QStringList setupKeys = _backends[backend].toMap()["SetupKeys"].toStringList();
- if(!setupKeys.isEmpty()) {
- QVariantMap defaults = _backends[backend].toMap()["SetupDefaults"].toMap();
- foreach(QString key, setupKeys) {
- QWidget *widget = _connectionBox->findChild<QWidget *>(key);
- QVariant def;
- if(defaults.contains(key)) {
- def = defaults[key];
- }
- switch(def.type()) {
- case QVariant::Int:
- {
- QSpinBox *spinbox = qobject_cast<QSpinBox *>(widget);
- Q_ASSERT(spinbox);
- def = QVariant(spinbox->value());
- }
- break;
- default:
- {
- QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget);
- Q_ASSERT(lineEdit);
- def = QVariant(lineEdit->text());
- }
- }
- properties[key] = def;
- }
- }
- qDebug() << properties;
-
-
-// QVariantMap properties = _backends[backend].toMap()["ConnectionProperties"].toMap();
-// if(!properties.isEmpty() && _connectionBox) {
-// QVariantMap::iterator propertyIter = properties.begin();
-// while(propertyIter != properties.constEnd()) {
-// QWidget *widget = _connectionBox->findChild<QWidget *>(propertyIter.key());
-// switch(propertyIter.value().type()) {
-// case QVariant::Int:
-// {
-// QSpinBox *spinbox = qobject_cast<QSpinBox *>(widget);
-// Q_ASSERT(spinbox);
-// propertyIter.value() = QVariant(spinbox->value());
-// }
-// break;
-// default:
-// {
-// QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget);
-// Q_ASSERT(lineEdit);
-// propertyIter.value() = QVariant(lineEdit->text());
-// }
-// }
-// propertyIter++;
-// }
-// }
- return properties;
-}
-
-void StorageSelectionPage::on_backendList_currentIndexChanged() {
- QString backend = ui.backendList->itemData(ui.backendList->currentIndex()).toString();
- ui.description->setText(_backends[backend].toMap()["Description"].toString());
-
- if(_connectionBox) {
- layout()->removeWidget(_connectionBox);
- _connectionBox->deleteLater();
- _connectionBox = 0;
- }
-
- QStringList setupKeys = _backends[backend].toMap()["SetupKeys"].toStringList();
- if(!setupKeys.isEmpty()) {
- QVariantMap defaults = _backends[backend].toMap()["SetupDefaults"].toMap();
- QGroupBox *propertyBox = new QGroupBox(this);
- propertyBox->setTitle(tr("Connection Properties"));
- QFormLayout *formlayout = new QFormLayout;
-
- foreach(QString key, setupKeys) {
- QWidget *widget = 0;
- QVariant def;
- if(defaults.contains(key)) {
- def = defaults[key];
- }
- switch(def.type()) {
- case QVariant::Int:
- {
- QSpinBox *spinbox = new QSpinBox(propertyBox);
- spinbox->setMaximum(64000);
- spinbox->setValue(def.toInt());
- widget = spinbox;
+StorageSelectionPage::StorageSelectionPage(const QVariantList &backendInfos, QWidget *parent)
+ : QWizardPage(parent)
+{
+ ui.setupUi(this);
+
+ setTitle(tr("Select Storage Backend"));
+ setSubTitle(tr("Please select a storage backend for Quassel Core."));
+ setCommitPage(true);
+
+ registerField("storage.backend", ui.backendList);
+
+ int defaultIndex {0}; // Legacy cores send backend infos in arbitrary order
+
+ for (auto &&backendInfo : backendInfos) {
+ auto props = backendInfo.toMap();
+ // Extract field infos to avoid having to reparse the list
+ std::vector<FieldInfo> fields;
+
+ // Legacy cores (prior to 0.13) didn't send SetupData for storage backends; deal with this
+ if (!props.contains("SetupData")) {
+ const auto &defaultValues = props["SetupDefaults"].toMap();
+ for (auto &&key : props["SetupKeys"].toStringList()) {
+ fields.emplace_back(std::make_tuple(key, key, defaultValues.value(key, QString{})));
+ }
+ if (props.value("IsDefault", false).toBool()) {
+ defaultIndex = ui.backendList->count();
+ }