X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fcoreconfigwizard.cpp;h=030af57463eae0bb0503e7dad3f5c440fc40e10d;hp=bc2ebf3cf68152c2c01ee98dd0391d75d455099c;hb=029c6d402af7b00b320dd5ce48f230783a88957a;hpb=7082ea3159aaaea098b34c204d5123a3dca3753a diff --git a/src/qtui/coreconfigwizard.cpp b/src/qtui/coreconfigwizard.cpp index bc2ebf3c..030af574 100644 --- a/src/qtui/coreconfigwizard.cpp +++ b/src/qtui/coreconfigwizard.cpp @@ -20,6 +20,8 @@ #include #include +#include +#include #include "coreconfigwizard.h" #include "iconloader.h" @@ -30,7 +32,7 @@ CoreConfigWizard::CoreConfigWizard(const QList &backends, QWidget *par setPage(AdminUserPage, new CoreConfigWizardPages::AdminUserPage(this)); setPage(StorageSelectionPage, new CoreConfigWizardPages::StorageSelectionPage(_backends, this)); syncPage = new CoreConfigWizardPages::SyncPage(this); - connect(syncPage, SIGNAL(setupCore(const QString &)), this, SLOT(prepareCoreSetup(const QString &))); + connect(syncPage, SIGNAL(setupCore(const QString &, const QVariantMap &)), this, SLOT(prepareCoreSetup(const QString &, const QVariantMap &))); setPage(SyncPage, syncPage); syncRelayPage = new CoreConfigWizardPages::SyncRelayPage(this); connect(syncRelayPage, SIGNAL(startOver()), this, SLOT(startOver())); @@ -63,13 +65,16 @@ QHash CoreConfigWizard::backends() const { return _backends; } -void CoreConfigWizard::prepareCoreSetup(const QString &backend) { +void CoreConfigWizard::prepareCoreSetup(const QString &backend, const QVariantMap &properties) { // Prevent the user from changing any settings he already specified... - foreach(int idx, visitedPages()) page(idx)->setEnabled(false); + foreach(int idx, visitedPages()) + page(idx)->setEnabled(false); + QVariantMap foo; foo["AdminUser"] = field("adminUser.user").toString(); foo["AdminPasswd"] = field("adminUser.password").toString(); foo["Backend"] = backend; + foo["ConnectionProperties"] = properties; emit setupCore(foo); } @@ -91,7 +96,6 @@ void CoreConfigWizard::coreSetupFailed(const QString &error) { //foreach(int idx, visitedPages()) page(idx)->setEnabled(true); //setStartId(SyncPage); //restart(); - } void CoreConfigWizard::startOver() { @@ -183,9 +187,73 @@ QString StorageSelectionPage::selectedBackend() const { return ui.backendList->currentText(); } +QVariantMap StorageSelectionPage::connectionProperties() const { + QString backend = ui.backendList->itemData(ui.backendList->currentIndex()).toString(); + QVariantMap properties = _backends[backend].toMap()["ConnectionProperties"].toMap(); + if(!properties.isEmpty() && _connectionBox) { + QVariantMap::iterator propertyIter = properties.begin(); + while(propertyIter != properties.constEnd()) { + QWidget *widget = _connectionBox->findChild(propertyIter.key()); + switch(propertyIter.value().type()) { + case QVariant::Int: + { + QSpinBox *spinbox = qobject_cast(widget); + Q_ASSERT(spinbox); + propertyIter.value() = QVariant(spinbox->value()); + } + break; + default: + { + QLineEdit *lineEdit = qobject_cast(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; + } + + QVariantMap properties = _backends[backend].toMap()["ConnectionProperties"].toMap(); + if(!properties.isEmpty()) { + QGroupBox *propertyBox = new QGroupBox(this); + propertyBox->setTitle(tr("Connection Properties")); + QFormLayout *formlayout = new QFormLayout; + + QVariantMap::const_iterator propertyIter = properties.constBegin(); + while(propertyIter != properties.constEnd()) { + QWidget *widget = 0; + switch(propertyIter.value().type()) { + case QVariant::Int: + { + QSpinBox *spinbox = new QSpinBox(propertyBox); + spinbox->setMaximum(64000); + spinbox->setValue(propertyIter.value().toInt()); + widget = spinbox; + } + break; + default: + widget = new QLineEdit(propertyIter.value().toString(), propertyBox); + } + widget->setObjectName(propertyIter.key()); + formlayout->addRow(propertyIter.key() + ":", widget); + propertyIter++; + } + propertyBox->setLayout(formlayout); + static_cast(layout())->insertWidget(layout()->indexOf(ui.descriptionBox) + 1, propertyBox); + _connectionBox = propertyBox; + } } /*** Sync Page ***/ @@ -199,11 +267,14 @@ SyncPage::SyncPage(QWidget *parent) : QWizardPage(parent) { void SyncPage::initializePage() { complete = false; hasError = false; - QString backend = qobject_cast(wizard()->page(CoreConfigWizard::StorageSelectionPage))->selectedBackend(); + + StorageSelectionPage *storagePage = qobject_cast(wizard()->page(CoreConfigWizard::StorageSelectionPage)); + QString backend = storagePage->selectedBackend(); + QVariantMap properties = storagePage->connectionProperties(); Q_ASSERT(!backend.isEmpty()); ui.user->setText(wizard()->field("adminUser.user").toString()); ui.backend->setText(backend); - emit setupCore(backend); + emit setupCore(backend, properties); } int SyncPage::nextId() const {