/***************************************************************************
- * Copyright (C) 2005-08 by the Quassel IRC Team *
+ * Copyright (C) 2005-09 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QDebug>
#include <QAbstractButton>
+#include <QFormLayout>
+#include <QSpinBox>
#include "coreconfigwizard.h"
-
-//#include "client.h"
-//#include "identitiessettingspage.h"
+#include "iconloader.h"
CoreConfigWizard::CoreConfigWizard(const QList<QVariant> &backends, QWidget *parent) : QWizard(parent) {
foreach(QVariant v, backends) _backends[v.toMap()["DisplayName"].toString()] = v;
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()));
setModal(true);
setWindowTitle(tr("Core Configuration Wizard"));
- setPixmap(QWizard::LogoPixmap, QPixmap(":icons/quassel-icon.png"));
+ setPixmap(QWizard::LogoPixmap, DesktopIcon("quassel"));
}
QHash<QString, QVariant> 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);
}
//foreach(int idx, visitedPages()) page(idx)->setEnabled(true);
//setStartId(SyncPage);
//restart();
-
}
void CoreConfigWizard::startOver() {
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<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;
+ }
+
+ 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<QVBoxLayout *>(layout())->insertWidget(layout()->indexOf(ui.descriptionBox) + 1, propertyBox);
+ _connectionBox = propertyBox;
+ }
}
/*** Sync Page ***/
void SyncPage::initializePage() {
complete = false;
hasError = false;
- QString backend = qobject_cast<StorageSelectionPage *>(wizard()->page(CoreConfigWizard::StorageSelectionPage))->selectedBackend();
+
+ StorageSelectionPage *storagePage = qobject_cast<StorageSelectionPage *>(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 {