X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fcoreconfigwizard.cpp;h=837b08442a69e70c18888879da658ef997804d32;hp=030af57463eae0bb0503e7dad3f5c440fc40e10d;hb=6e73ba4a19fd92038e1ea749125767661fb34e27;hpb=029c6d402af7b00b320dd5ce48f230783a88957a diff --git a/src/qtui/coreconfigwizard.cpp b/src/qtui/coreconfigwizard.cpp index 030af574..837b0844 100644 --- a/src/qtui/coreconfigwizard.cpp +++ b/src/qtui/coreconfigwizard.cpp @@ -24,15 +24,24 @@ #include #include "coreconfigwizard.h" +#include "coreconnection.h" #include "iconloader.h" -CoreConfigWizard::CoreConfigWizard(const QList &backends, QWidget *parent) : QWizard(parent) { - foreach(QVariant v, backends) _backends[v.toMap()["DisplayName"].toString()] = v; +CoreConfigWizard::CoreConfigWizard(CoreConnection *connection, const QList &backends, QWidget *parent) + : QWizard(parent), + _connection(connection) +{ + setModal(true); + setAttribute(Qt::WA_DeleteOnClose); + + foreach(const QVariant &v, backends) + _backends[v.toMap()["DisplayName"].toString()] = v; + setPage(IntroPage, new CoreConfigWizardPages::IntroPage(this)); setPage(AdminUserPage, new CoreConfigWizardPages::AdminUserPage(this)); setPage(StorageSelectionPage, new CoreConfigWizardPages::StorageSelectionPage(_backends, this)); syncPage = new CoreConfigWizardPages::SyncPage(this); - connect(syncPage, SIGNAL(setupCore(const QString &, const QVariantMap &)), this, SLOT(prepareCoreSetup(const QString &, const QVariantMap &))); + connect(syncPage, SIGNAL(setupCore(const QString &, const QVariantMap &)), SLOT(prepareCoreSetup(const QString &, const QVariantMap &))); setPage(SyncPage, syncPage); syncRelayPage = new CoreConfigWizardPages::SyncRelayPage(this); connect(syncRelayPage, SIGNAL(startOver()), this, SLOT(startOver())); @@ -59,6 +68,12 @@ CoreConfigWizard::CoreConfigWizard(const QList &backends, QWidget *par setWindowTitle(tr("Core Configuration Wizard")); setPixmap(QWizard::LogoPixmap, DesktopIcon("quassel")); + + connect(connection, SIGNAL(coreSetupSuccess()), SLOT(coreSetupSuccess())); + connect(connection, SIGNAL(coreSetupFailed(QString)), SLOT(coreSetupFailed(QString))); + //connect(connection, SIGNAL(loginSuccess()), SLOT(loginSuccess())); + connect(connection, SIGNAL(synchronized()), SLOT(syncFinished())); + connect(this, SIGNAL(rejected()), connection, SLOT(disconnectFromCore())); } QHash CoreConfigWizard::backends() const { @@ -75,18 +90,14 @@ void CoreConfigWizard::prepareCoreSetup(const QString &backend, const QVariantMa foo["AdminPasswd"] = field("adminUser.password").toString(); foo["Backend"] = backend; foo["ConnectionProperties"] = properties; - emit setupCore(foo); + coreConnection()->doCoreSetup(foo); } void CoreConfigWizard::coreSetupSuccess() { syncPage->setStatus(tr("Your core has been successfully configured. Logging you in...")); syncPage->setError(false); syncRelayPage->setMode(CoreConfigWizardPages::SyncRelayPage::Error); - QVariantMap loginData; - loginData["User"] = field("adminUser.user"); - loginData["Password"] = field("adminUser.password"); - loginData["RememberPasswd"] = field("adminUser.rememberPasswd"); - emit loginToCore(loginData); + coreConnection()->loginToCore(field("adminUser.user").toString(), field("adminUser.password").toString(), field("adminUser.rememberPasswd").toBool()); } void CoreConfigWizard::coreSetupFailed(const QString &error) { @@ -112,8 +123,7 @@ void CoreConfigWizard::loginSuccess() { } void CoreConfigWizard::syncFinished() { - // TODO: display identities and networks settings if appropriate! - // accept(); + accept(); } namespace CoreConfigWizardPages { @@ -162,9 +172,12 @@ bool AdminUserPage::isComplete() const { /*** Storage Selection Page ***/ -StorageSelectionPage::StorageSelectionPage(const QHash &backends, QWidget *parent) : QWizardPage(parent) { +StorageSelectionPage::StorageSelectionPage(const QHash &backends, QWidget *parent) + : QWizardPage(parent), + _connectionBox(0), + _backends(backends) +{ ui.setupUi(this); - _backends = backends; setTitle(tr("Select Storage Backend")); setSubTitle(tr("Please select a database backend for the Quassel Core storage to store the backlog and other data in.")); @@ -189,29 +202,61 @@ QString StorageSelectionPage::selectedBackend() const { 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()) { + + 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(key); + QVariant def; + if(defaults.contains(key)) { + def = defaults[key]; + } + switch(def.type()) { case QVariant::Int: - { - QSpinBox *spinbox = qobject_cast(widget); - Q_ASSERT(spinbox); - propertyIter.value() = QVariant(spinbox->value()); - } - break; + { + QSpinBox *spinbox = qobject_cast(widget); + Q_ASSERT(spinbox); + def = QVariant(spinbox->value()); + } + break; default: - { - QLineEdit *lineEdit = qobject_cast(widget); - Q_ASSERT(lineEdit); - propertyIter.value() = QVariant(lineEdit->text()); - } + { + QLineEdit *lineEdit = qobject_cast(widget); + Q_ASSERT(lineEdit); + def = QVariant(lineEdit->text()); + } } - propertyIter++; + 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(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; } @@ -225,30 +270,39 @@ void StorageSelectionPage::on_backendList_currentIndexChanged() { _connectionBox = 0; } - QVariantMap properties = _backends[backend].toMap()["ConnectionProperties"].toMap(); - if(!properties.isEmpty()) { + 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; - QVariantMap::const_iterator propertyIter = properties.constBegin(); - while(propertyIter != properties.constEnd()) { + foreach(QString key, setupKeys) { QWidget *widget = 0; - switch(propertyIter.value().type()) { + 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(propertyIter.value().toInt()); - widget = spinbox; - } - break; + { + QSpinBox *spinbox = new QSpinBox(propertyBox); + spinbox->setMaximum(64000); + spinbox->setValue(def.toInt()); + widget = spinbox; + } + break; default: - widget = new QLineEdit(propertyIter.value().toString(), propertyBox); + { + QLineEdit *lineEdit = new QLineEdit(def.toString(), propertyBox); + if(key.toLower().contains("password")) { + lineEdit->setEchoMode(QLineEdit::Password); + } + widget = lineEdit; + } } - widget->setObjectName(propertyIter.key()); - formlayout->addRow(propertyIter.key() + ":", widget); - propertyIter++; + widget->setObjectName(key); + formlayout->addRow(key + ":", widget); } propertyBox->setLayout(formlayout); static_cast(layout())->insertWidget(layout()->indexOf(ui.descriptionBox) + 1, propertyBox);