+NetworkEditDlg::NetworkEditDlg(const QString &old, const QStringList &exist, QWidget *parent) : QDialog(parent), existing(exist) {
+ ui.setupUi(this);
+
+ if(old.isEmpty()) {
+ // new network
+ setWindowTitle(tr("Add Network"));
+ on_networkEdit_textChanged(""); // disable ok button
+ } else ui.networkEdit->setText(old);
+}
+
+QString NetworkEditDlg::networkName() const {
+ return ui.networkEdit->text();
+
+}
+
+void NetworkEditDlg::on_networkEdit_textChanged(const QString &text) {
+ ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(text.isEmpty() || existing.contains(text));
+}
+
+
+/**************************************************************************
+ * ServerEditDlg
+ *************************************************************************/
+
+ServerEditDlg::ServerEditDlg(const QVariant &_serverData, QWidget *parent) : QDialog(parent) {
+ ui.setupUi(this);
+ QVariantMap serverData = _serverData.toMap();
+ if(serverData.count()) {
+ ui.host->setText(serverData["Host"].toString());
+ ui.port->setValue(serverData["Port"].toUInt());
+ ui.password->setText(serverData["Password"].toString());
+ ui.useSSL->setChecked(serverData["UseSSL"].toBool());
+ } else {
+ ui.port->setValue(6667);
+ }
+ on_host_textChanged();
+}
+
+QVariant ServerEditDlg::serverData() const {
+ QVariantMap _serverData;
+ _serverData["Host"] = ui.host->text().trimmed();
+ _serverData["Port"] = ui.port->value();
+ _serverData["Password"] = ui.password->text();
+ _serverData["UseSSL"] = ui.useSSL->isChecked();
+ return _serverData;
+}
+
+void ServerEditDlg::on_host_textChanged() {
+ ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(ui.host->text().trimmed().isEmpty());
+}
+
+/**************************************************************************
+ * SaveNetworksDlg
+ *************************************************************************/
+
+SaveNetworksDlg::SaveNetworksDlg(const QList<NetworkInfo> &toCreate, const QList<NetworkInfo> &toUpdate, const QList<NetworkId> &toRemove, QWidget *parent) : QDialog(parent)
+{
+ ui.setupUi(this);
+
+ numevents = toCreate.count() + toUpdate.count() + toRemove.count();
+ rcvevents = 0;
+ if(numevents) {
+ ui.progressBar->setMaximum(numevents);
+ ui.progressBar->setValue(0);
+
+ connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(clientEvent()));
+ connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), this, SLOT(clientEvent()));
+
+ foreach(NetworkInfo info, toCreate) {
+ Client::createNetwork(info);
+ }
+ foreach(NetworkInfo info, toUpdate) {
+ const Network *net = Client::network(info.networkId);
+ if(!net) {
+ qWarning() << "Invalid client network!";
+ numevents--;
+ continue;
+ }
+ // FIXME this only checks for one changed item rather than all!
+ connect(net, SIGNAL(updatedRemotely()), this, SLOT(clientEvent()));
+ Client::updateNetwork(info);
+ }
+ foreach(NetworkId id, toRemove) {
+ Client::removeNetwork(id);
+ }
+ } else {
+ qWarning() << "Sync dialog called without stuff to change!";
+ accept();
+ }
+}
+
+void SaveNetworksDlg::clientEvent() {
+ ui.progressBar->setValue(++rcvevents);
+ if(rcvevents >= numevents) accept();
+}