From 59912f14782c193a2394a2b0d044902a59c96870 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Tue, 29 Jan 2008 16:05:41 +0000 Subject: [PATCH] Syncing my current state, Network settings still not fully functional, so don't use them yet! Provided a hacky way to disconnect from a network, you'll find that in the Debug menu. No visual feedback is given, but you should be able to reconnect afterwards. --- src/client/client.cpp | 31 ++- src/client/client.h | 18 +- src/common/network.cpp | 23 ++ src/common/network.h | 5 + src/core/coresession.cpp | 12 +- src/core/coresession.h | 1 + src/core/networkconnection.cpp | 8 +- src/core/networkconnection.h | 1 + src/qtui/coreconnectdlg.cpp | 1 + src/qtui/mainwin.cpp | 14 +- src/qtui/mainwin.h | 3 + .../settingspages/networkssettingspage.cpp | 219 +++++++++++++++++- src/qtui/settingspages/networkssettingspage.h | 31 ++- .../settingspages/networkssettingspage.ui | 4 +- src/qtui/settingspages/servereditdlgnew.ui | 6 +- src/qtui/ui/mainwin.ui | 8 +- 16 files changed, 343 insertions(+), 42 deletions(-) diff --git a/src/client/client.cpp b/src/client/client.cpp index de43a0b6..ecfc1092 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -106,6 +106,12 @@ void Client::init() { p->attachSlot(SIGNAL(identityCreated(const Identity &)), this, SLOT(coreIdentityCreated(const Identity &))); p->attachSlot(SIGNAL(identityRemoved(IdentityId)), this, SLOT(coreIdentityRemoved(IdentityId))); + p->attachSignal(this, SIGNAL(requestCreateNetwork(const NetworkInfo &)), SIGNAL(createNetwork(const NetworkInfo &))); + p->attachSignal(this, SIGNAL(requestUpdateNetwork(const NetworkInfo &)), SIGNAL(updateNetwork(const NetworkInfo &))); + p->attachSignal(this, SIGNAL(requestRemoveNetwork(NetworkId)), SIGNAL(removeNetwork(NetworkId))); + p->attachSlot(SIGNAL(networkCreated(const NetworkInfo &)), this, SLOT(coreNetworkCreated(const NetworkInfo &))); + p->attachSlot(SIGNAL(networkRemoved(NetworkId)), this, SLOT(coreNetworkRemoved(NetworkId))); + connect(p, SIGNAL(disconnected()), this, SLOT(disconnectFromCore())); //connect(mainUi, SIGNAL(connectToCore(const QVariantMap &)), this, SLOT(connectToCore(const QVariantMap &))); @@ -333,6 +339,13 @@ QStringList Client::sessionDataKeys() { /*** ***/ +// FIXME +void Client::disconnectFromNetwork(NetworkId id) { + if(!instance()->_networks.contains(id)) return; + Network *net = instance()->_networks[id]; + net->requestDisconnect(); +} + /* void Client::networkConnected(uint netid) { // TODO: create statusBuffer / switch to networkids @@ -362,19 +375,18 @@ void Client::networkDisconnected(NetworkId networkid) { } */ -void Client::addNetwork(NetworkId netid) { - Network *net = new Network(netid, instance()); - addNetwork(net); -} - void Client::addNetwork(Network *net) { net->setProxy(signalProxy()); signalProxy()->synchronize(net); networkModel()->attachNetwork(net); connect(net, SIGNAL(destroyed()), instance(), SLOT(networkDestroyed())); instance()->_networks[net->networkId()] = net; - emit instance()->networkAdded(net->networkId()); - //if(net->networkId() == 1) net->requestConnect(); // FIXME + emit instance()->networkCreated(net->networkId()); +} + +void Client::createNetwork(const NetworkInfo &info) { + + } /*** ***/ @@ -396,8 +408,9 @@ void Client::bufferDestroyed() { } void Client::networkDestroyed() { - Network *netinfo = static_cast(sender()); - NetworkId networkId = netinfo->networkId(); + // FIXME this is not gonna work, net is a QObject here already! + Network *net = static_cast(sender()); + NetworkId networkId = net->networkId(); if(_networks.contains(networkId)) _networks.remove(networkId); } diff --git a/src/client/client.h b/src/client/client.h index 4df6685d..95f30a35 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -42,6 +42,7 @@ class IrcUser; class IrcChannel; class NickModel; class SignalProxy; +struct NetworkInfo; class QTimer; @@ -83,9 +84,9 @@ public: */ static void removeIdentity(IdentityId id); - static void addNetwork(NetworkId id); - static void addNetwork(Network *); - + static void createNetwork(const NetworkInfo &info); + static void updateNetwork(const NetworkInfo &info); + static void removeNetwork(NetworkId id); static NetworkModel *networkModel(); static BufferModel *bufferModel(); @@ -103,6 +104,8 @@ public: static QVariant retrieveSessionData(const QString &key, const QVariant &def = QVariant()); static QStringList sessionDataKeys(); + static void disconnectFromNetwork(NetworkId); + enum ClientMode { LocalCore, RemoteCore }; signals: @@ -143,7 +146,12 @@ signals: //! Sent to the core when an identity shall be removed. Should not be used elsewhere. void requestRemoveIdentity(IdentityId); - void networkAdded(NetworkId id); + void networkCreated(NetworkId id); + void networkRemoved(NetworkId id); + + void requestCreateNetwork(const NetworkInfo &info); + void requestUpdateNetwork(const NetworkInfo &info); + void requestRemoveNetwork(const NetworkInfo &info); public slots: //void selectBuffer(Buffer *); @@ -179,7 +187,7 @@ private: virtual ~Client(); void init(); - void syncToCore(const QVariantMap &sessionState); + static void addNetwork(Network *); static QPointer instanceptr; diff --git a/src/common/network.cpp b/src/common/network.cpp index f1cff6cf..e899969a 100644 --- a/src/common/network.cpp +++ b/src/common/network.cpp @@ -503,6 +503,12 @@ void Network::requestConnect() { else emit connectRequested(networkId()); // and this is for CoreSession :) } +void Network::requestDisconnect() { + if(!proxy()) return; + if(proxy()->proxyMode() == SignalProxy::Client) emit disconnectRequested(); // on the client this triggers calling this slot on the core + else emit disconnectRequested(networkId()); // and this is for CoreSession :) +} + // ==================== // Private: // ==================== @@ -540,3 +546,20 @@ void Network::determinePrefixes() { } } +/************************************************************************ + * NetworkInfo + ************************************************************************/ + +bool NetworkInfo::operator==(const NetworkInfo &other) const { + if(networkId != other.networkId) return false; + if(networkName != other.networkName) return false; + if(identity != other.identity) return false; + if(codecForEncoding != other.codecForEncoding) return false; + if(codecForDecoding != other.codecForDecoding) return false; + if(serverList != other.serverList) return false; + return true; +} + +bool NetworkInfo::operator!=(const NetworkInfo &other) const { + return !(*this == other); +} diff --git a/src/common/network.h b/src/common/network.h index 255d3ec4..84b9b4bf 100644 --- a/src/common/network.h +++ b/src/common/network.h @@ -150,6 +150,7 @@ public slots: void ircUserNickChanged(QString newnick); void requestConnect(); + void requestDisconnect(); private slots: void ircUserDestroyed(); @@ -188,6 +189,7 @@ signals: void ircChannelInitDone(IrcChannel *); void connectRequested(NetworkId = 0); + void disconnectRequested(NetworkId = 0); private: NetworkId _networkId; @@ -206,6 +208,7 @@ private: QHash _supports; // stores results from RPL_ISUPPORT QList _serverList; + QStringList _perform; //QVariantMap networkSettings; QPointer _proxy; @@ -225,6 +228,8 @@ struct NetworkInfo { QByteArray codecForDecoding; QList serverList; + bool operator==(const NetworkInfo &other) const; + bool operator!=(const NetworkInfo &other) const; }; diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 910bca14..19359c8d 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -70,6 +70,7 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent) : QObje //p->attachSlot(SIGNAL(requestNetworkStates()), this, SLOT(networkStateRequested())); p->attachSlot(SIGNAL(requestConnect(QString)), this, SLOT(connectToNetwork(QString))); + p->attachSlot(SIGNAL(disconnectFromNetwork(NetworkId)), this, SLOT(disconnectFromNetwork(NetworkId))); // FIXME p->attachSlot(SIGNAL(sendInput(BufferInfo, QString)), this, SLOT(msgFromClient(BufferInfo, QString))); p->attachSlot(SIGNAL(requestBacklog(BufferInfo, QVariant, QVariant)), this, SLOT(sendBacklog(BufferInfo, QVariant, QVariant))); p->attachSignal(this, SIGNAL(displayMsg(Message))); @@ -106,7 +107,12 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent) : QObje net->setCodecForEncoding("ISO-8859-15"); // FIXME net->setCodecForDecoding("ISO-8859-15"); // FIXME QList slist; - foreach(QVariant v, network["Servers"].toList()) slist << v.toMap(); + foreach(QVariant v, network["Servers"].toList()) { + QVariantMap server; + server["Host"] = v.toMap()["Address"]; + server["Port"] = v.toMap()["Port"]; + slist << server; + } net->setServerList(slist); net->setProxy(p); _networks[netid] = net; @@ -238,6 +244,10 @@ void CoreSession::attachNetworkConnection(NetworkConnection *conn) { // TODO add error handling } +void CoreSession::disconnectFromNetwork(NetworkId id) { + _connections[id]->disconnectFromIrc(); +} + void CoreSession::networkStateRequested() { } diff --git a/src/core/coresession.h b/src/core/coresession.h index 01ffd8e8..943063b0 100644 --- a/src/core/coresession.h +++ b/src/core/coresession.h @@ -69,6 +69,7 @@ public slots: void connectToNetwork(QString, const QVariant &previousState = QVariant()); void connectToNetwork(NetworkId, const QVariant &previousState = QVariant()); + void disconnectFromNetwork(NetworkId id); //void processSignal(ClientSignal, QVariant, QVariant, QVariant); void sendBacklog(BufferInfo, QVariant, QVariant); diff --git a/src/core/networkconnection.cpp b/src/core/networkconnection.cpp index 0369c213..a00e4f49 100644 --- a/src/core/networkconnection.cpp +++ b/src/core/networkconnection.cpp @@ -46,7 +46,7 @@ NetworkConnection::NetworkConnection(Network *network, CoreSession *session, con connect(network, SIGNAL(currentServerSet(const QString &)), this, SLOT(sendPerform())); connect(&socket, SIGNAL(connected()), this, SLOT(socketConnected())); - //connect(&socket, SIGNAL(disconnected()), this, SLOT(quit())); FIXME + connect(&socket, SIGNAL(disconnected()), this, SLOT(socketDisconnected())); connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError))); connect(&socket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(socketStateChanged(QAbstractSocket::SocketState))); connect(&socket, SIGNAL(readyRead()), this, SLOT(socketHasData())); @@ -137,7 +137,7 @@ void NetworkConnection::connectToIrc() { } // TODO implement cycling / random servers - QString host = serverList[0]["Address"].toString(); + QString host = serverList[0]["Host"].toString(); quint16 port = serverList[0]["Port"].toUInt(); displayStatusMsg(QString("Connecting to %1:%2...").arg(host).arg(port)); socket.connectToHost(host, port); @@ -204,6 +204,10 @@ void NetworkConnection::socketStateChanged(QAbstractSocket::SocketState state) { //qDebug() << "Socket state changed: " << state; } +void NetworkConnection::socketDisconnected() { + emit disconnected(networkId()); +} + // FIXME switch to BufferId void NetworkConnection::userInput(QString buf, QString msg) { userInputHandler()->handleUserInput(buf, msg); diff --git a/src/core/networkconnection.h b/src/core/networkconnection.h index 1e1247b5..59f40c61 100644 --- a/src/core/networkconnection.h +++ b/src/core/networkconnection.h @@ -107,6 +107,7 @@ private slots: void socketHasData(); void socketError(QAbstractSocket::SocketError); void socketConnected(); + void socketDisconnected(); void socketStateChanged(QAbstractSocket::SocketState); private: diff --git a/src/qtui/coreconnectdlg.cpp b/src/qtui/coreconnectdlg.cpp index a3585f78..93a1d7c1 100644 --- a/src/qtui/coreconnectdlg.cpp +++ b/src/qtui/coreconnectdlg.cpp @@ -350,6 +350,7 @@ void CoreConnectDlg::coreIrcUsersProgress(quint32 val, quint32 max) { ui.ircUsersProgress->setRange(0, 1); ui.ircUsersProgress->setValue(1); } else { + if(val % 100) return; ui.ircUsersProgress->setFormat("%v/%m"); ui.ircUsersProgress->setRange(0, max); ui.ircUsersProgress->setValue(val); diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 518b2b84..309d9c7b 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -60,6 +60,7 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent) : QMainWindow(parent), gui(_gui) { void MainWin::init() { Client::signalProxy()->attachSignal(this, SIGNAL(requestBacklog(BufferInfo, QVariant, QVariant))); + Client::signalProxy()->attachSignal(this, SIGNAL(disconnectFromNetwork(NetworkId))); ui.bufferWidget->init(); show(); @@ -193,7 +194,9 @@ void MainWin::setupMenus() { connect(ui.actionEditIdentities, SIGNAL(triggered()), serverListDlg, SLOT(editIdentities())); connect(ui.actionSettingsDlg, SIGNAL(triggered()), this, SLOT(showSettingsDlg())); connect(ui.actionDebug_Console, SIGNAL(triggered()), this, SLOT(showDebugConsole())); + connect(ui.actionDisconnectNet, SIGNAL(triggered()), this, SLOT(disconnectFromNet())); connect(ui.actionAboutQt, SIGNAL(triggered()), QApplication::instance(), SLOT(aboutQt())); + } void MainWin::setupViews() { @@ -235,7 +238,7 @@ void MainWin::setupSettingsDlg() { settingsDlg->registerSettingsPage(new FontsSettingsPage(settingsDlg)); settingsDlg->registerSettingsPage(new IdentitiesSettingsPage(settingsDlg)); - //settingsDlg->registerSettingsPage(new NetworksSettingsPage(settingsDlg)); + settingsDlg->registerSettingsPage(new NetworksSettingsPage(settingsDlg)); } void MainWin::connectedToCore() { @@ -318,7 +321,10 @@ void MainWin::systrayActivated( QSystemTrayIcon::ActivationReason activationReas else hide(); } - - - } + +void MainWin::disconnectFromNet() { + int i = QInputDialog::getInteger(this, tr("Disconnect from Network"), tr("Enter network id:")); + emit disconnectFromNetwork(NetworkId(i)); +} + diff --git a/src/qtui/mainwin.h b/src/qtui/mainwin.h index 76f1dea0..d4b8ab14 100644 --- a/src/qtui/mainwin.h +++ b/src/qtui/mainwin.h @@ -66,9 +66,12 @@ class MainWin : public QMainWindow { void showCoreConnectionDlg(bool autoConnect = false); void coreConnectionDlgFinished(int result); + void disconnectFromNet(); + signals: void connectToCore(const QVariantMap &connInfo); void disconnectFromCore(); + void disconnectFromNetwork(NetworkId); void requestBacklog(BufferInfo, QVariant, QVariant); private: diff --git a/src/qtui/settingspages/networkssettingspage.cpp b/src/qtui/settingspages/networkssettingspage.cpp index c2dd3fb4..fd2d7e85 100644 --- a/src/qtui/settingspages/networkssettingspage.cpp +++ b/src/qtui/settingspages/networkssettingspage.cpp @@ -19,10 +19,12 @@ ***************************************************************************/ #include +#include #include "networkssettingspage.h" #include "client.h" +#include "global.h" #include "identity.h" #include "network.h" @@ -42,8 +44,9 @@ NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("G connect(Client::instance(), SIGNAL(identityCreated(IdentityId)), this, SLOT(clientIdentityAdded(IdentityId))); connect(Client::instance(), SIGNAL(identityRemoved(IdentityId)), this, SLOT(clientIdentityRemoved(IdentityId))); - //connect(ui.networkList, SIGNAL(itemSelectionChanged()), this, SLOT(setWidgetStates())); - //connect(ui.serverList, SIGNAL(itemSelectionChanged()), this, SLOT(setWidgetStates())); + connect(ui.identityList, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); + //connect(ui., SIGNAL(), this, SLOT(widgetHasChanged())); + //connect(ui., SIGNAL(), this, SLOT(widgetHasChanged())); foreach(IdentityId id, Client::identityIds()) { clientIdentityAdded(id); @@ -51,8 +54,32 @@ NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("G } void NetworksSettingsPage::save() { - - + if(currentId != 0) saveToNetworkInfo(networkInfos[currentId]); + + // First, remove the temporarily created networks + QList toCreate, toUpdate; + QList toRemove; + QHash::iterator i = networkInfos.begin(); + while(i != networkInfos.end()) { + if((*i).networkId < 0) { + toCreate.append(*i); + i = networkInfos.erase(i); + } else { + if((*i) != Client::network((*i).networkId)->networkInfo()) { + toUpdate.append(*i); + } + ++i; + } + } + foreach(NetworkId id, Client::networkIds()) { + if(!networkInfos.contains(id)) toRemove.append(id); + } + SaveNetworksDlg dlg(toCreate, toUpdate, toRemove, this); + int ret = dlg.exec(); + if(ret == QDialog::Rejected) { + // canceled -> reload everything to be safe + load(); + } } void NetworksSettingsPage::load() { @@ -80,13 +107,25 @@ void NetworksSettingsPage::reset() { */ } +bool NetworksSettingsPage::aboutToSave() { + + return true; // FIXME +} + void NetworksSettingsPage::widgetHasChanged() { bool changed = testHasChanged(); if(changed != hasChanged()) setChangedState(changed); } bool NetworksSettingsPage::testHasChanged() { - + if(currentId != 0) { + saveToNetworkInfo(networkInfos[currentId]); + } + if(Client::networkIds().count() != networkInfos.count()) return true; + foreach(NetworkId id, networkInfos.keys()) { + if(id < 0) return true; + if(Client::network(id)->networkInfo() != networkInfos[id]) return true; + } return false; } @@ -98,7 +137,7 @@ void NetworksSettingsPage::setWidgetStates() { ui.renameNetwork->setEnabled(true); ui.deleteNetwork->setEnabled(true); ui.connectNow->setEnabled(true); - if(Client::network(id)->isConnected()) { + if(Client::network(id) && Client::network(id)->isConnected()) { ui.connectNow->setIcon(disconnectedIcon); ui.connectNow->setText(tr("Disconnect")); } else { @@ -204,6 +243,8 @@ void NetworksSettingsPage::clientNetworkUpdated() { QListWidgetItem *item = networkItem(net->networkId()); if(!item) return; item->setText(net->networkName()); + if(net->isInitialized()) item->setFlags(item->flags() | Qt::ItemIsEnabled); + else item->setFlags(item->flags() & ~Qt::ItemIsEnabled); if(net->isConnected()) { item->setIcon(connectedIcon); } else { @@ -212,43 +253,167 @@ void NetworksSettingsPage::clientNetworkUpdated() { } -void NetworksSettingsPage::insertNetwork(NetworkId id) { +QListWidgetItem *NetworksSettingsPage::insertNetwork(NetworkId id) { NetworkInfo info = Client::network(id)->networkInfo(); networkInfos[id] = info; + return insertNetwork(info); +} + +QListWidgetItem *NetworksSettingsPage::insertNetwork(const NetworkInfo &info) { QListWidgetItem *item = new QListWidgetItem(disconnectedIcon, info.networkName); - item->setData(Qt::UserRole, QVariant::fromValue(id)); + item->setData(Qt::UserRole, QVariant::fromValue(info.networkId)); ui.networkList->addItem(item); - if(Client::network(id)->isConnected()) { + const Network *net = Client::network(info.networkId); + if(net->isInitialized()) item->setFlags(item->flags() | Qt::ItemIsEnabled); + else item->setFlags(item->flags() & ~Qt::ItemIsEnabled); + if(net && net->isConnected()) { item->setIcon(connectedIcon); } else { item->setIcon(disconnectedIcon); } widgetHasChanged(); + return item; } void NetworksSettingsPage::displayNetwork(NetworkId id, bool dontsave) { + Q_UNUSED(dontsave); NetworkInfo info = networkInfos[id]; + ui.identityList->setCurrentIndex(ui.identityList->findData(info.identity.toInt())); ui.serverList->clear(); foreach(QVariantMap v, info.serverList) { - ui.serverList->addItem(QString("%1:%2").arg(v["Address"].toString()).arg(v["Port"].toUInt())); + ui.serverList->addItem(QString("%1:%2").arg(v["Host"].toString()).arg(v["Port"].toUInt())); } - } +void NetworksSettingsPage::saveToNetworkInfo(NetworkInfo &info) { + info.identity = ui.identityList->itemData(ui.identityList->currentIndex()).toInt(); +} /*** Network list ***/ void NetworksSettingsPage::on_networkList_itemSelectionChanged() { + if(currentId != 0) { + saveToNetworkInfo(networkInfos[currentId]); + } if(ui.networkList->selectedItems().count()) { NetworkId id = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value(); + currentId = id; displayNetwork(id); + ui.serverList->setCurrentRow(0); + } else { + currentId = 0; } setWidgetStates(); } void NetworksSettingsPage::on_addNetwork_clicked() { + QStringList existing; + for(int i = 0; i < ui.networkList->count(); i++) existing << ui.networkList->item(i)->text(); + NetworkEditDlgNew dlg(QString(), existing, this); + if(dlg.exec() == QDialog::Accepted) { + NetworkId id; + for(id = 1; id <= networkInfos.count(); id++) { + widgetHasChanged(); + if(!networkInfos.keys().contains(-id.toInt())) break; + } + id = -id.toInt(); + NetworkInfo info; + info.networkId = id; + info.networkName = dlg.networkName(); + info.identity = 1; + networkInfos[id] = info; + QListWidgetItem *item = insertNetwork(info); + ui.networkList->setCurrentItem(item); + setWidgetStates(); + } +} + +void NetworksSettingsPage::on_deleteNetwork_clicked() { + if(ui.networkList->selectedItems().count()) { + NetworkId netid = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value(); + int ret = QMessageBox::question(this, tr("Delete Network?"), + tr("Do you really want to delete the network \"%1\" and all related settings, including the backlog?" + "

NOTE: Backlog deletion hasn't actually been implemented yet.").arg(networkInfos[netid].networkName), + QMessageBox::Yes|QMessageBox::No, QMessageBox::No); + if(ret == QMessageBox::Yes) { + currentId = 0; + networkInfos.remove(netid); qDebug() << netid << networkInfos.count(); + delete ui.networkList->selectedItems()[0]; + ui.networkList->setCurrentRow(qMin(ui.networkList->currentRow()+1, ui.networkList->count()-1)); + setWidgetStates(); + widgetHasChanged(); + } + } +} + +void NetworksSettingsPage::on_renameNetwork_clicked() { + if(!ui.networkList->selectedItems().count()) return; + QString old = ui.networkList->selectedItems()[0]->text(); + QStringList existing; + for(int i = 0; i < ui.networkList->count(); i++) existing << ui.networkList->item(i)->text(); + NetworkEditDlgNew dlg(old, existing, this); + if(dlg.exec() == QDialog::Accepted) { + ui.networkList->selectedItems()[0]->setText(dlg.networkName()); + NetworkId netid = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value(); + networkInfos[netid].networkName = dlg.networkName(); + widgetHasChanged(); + } +} + +/*** Server list ***/ + +void NetworksSettingsPage::on_serverList_itemSelectionChanged() { + setWidgetStates(); +} + +void NetworksSettingsPage::on_addServer_clicked() { + if(currentId == 0) return; + ServerEditDlgNew dlg(QVariantMap(), this); + if(dlg.exec() == QDialog::Accepted) { + networkInfos[currentId].serverList.append(dlg.serverData()); + displayNetwork(currentId); + ui.serverList->setCurrentRow(ui.serverList->count()-1); + widgetHasChanged(); + } +} +void NetworksSettingsPage::on_editServer_clicked() { + if(currentId == 0) return; + int cur = ui.serverList->currentRow(); + ServerEditDlgNew dlg(networkInfos[currentId].serverList[cur], this); + if(dlg.exec() == QDialog::Accepted) { + networkInfos[currentId].serverList[cur] = dlg.serverData(); + displayNetwork(currentId); + ui.serverList->setCurrentRow(cur); + widgetHasChanged(); + } +} +void NetworksSettingsPage::on_deleteServer_clicked() { + if(currentId == 0) return; + int cur = ui.serverList->currentRow(); + networkInfos[currentId].serverList.removeAt(cur); + displayNetwork(currentId); + ui.serverList->setCurrentRow(qMin(cur, ui.serverList->count()-1)); + widgetHasChanged(); +} + +void NetworksSettingsPage::on_upServer_clicked() { + int cur = ui.serverList->currentRow(); + QVariantMap foo = networkInfos[currentId].serverList.takeAt(cur); + networkInfos[currentId].serverList.insert(cur-1, foo); + displayNetwork(currentId); + ui.serverList->setCurrentRow(cur-1); + widgetHasChanged(); +} + +void NetworksSettingsPage::on_downServer_clicked() { + int cur = ui.serverList->currentRow(); + QVariantMap foo = networkInfos[currentId].serverList.takeAt(cur); + networkInfos[currentId].serverList.insert(cur+1, foo); + displayNetwork(currentId); + ui.serverList->setCurrentRow(cur+1); + widgetHasChanged(); } /************************************************************************** @@ -279,9 +444,39 @@ void NetworkEditDlgNew::on_networkEdit_textChanged(const QString &text) { * ServerEditDlg *************************************************************************/ -//ServerEditDlg:: +ServerEditDlgNew::ServerEditDlgNew(const QVariantMap &serverData, QWidget *parent) : QDialog(parent) { + ui.setupUi(this); + 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(Global::defaultPort); + } + on_host_textChanged(); +} +QVariantMap ServerEditDlgNew::serverData() const { + QVariantMap _serverData; + _serverData["Host"] = ui.host->text(); + _serverData["Port"] = ui.port->value(); + _serverData["Password"] = ui.password->text(); + _serverData["UseSSL"] = ui.useSSL->isChecked(); + return _serverData; +} +void ServerEditDlgNew::on_host_textChanged() { + ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(ui.host->text().isEmpty()); +} +/************************************************************************** + * SaveNetworksDlg + *************************************************************************/ +SaveNetworksDlg::SaveNetworksDlg(const QList &toCreate, const QList &toUpdate, const QList &toRemove, QWidget *parent) : QDialog(parent) +{ + ui.setupUi(this); + +} diff --git a/src/qtui/settingspages/networkssettingspage.h b/src/qtui/settingspages/networkssettingspage.h index 00c4532a..b0b4ef59 100644 --- a/src/qtui/settingspages/networkssettingspage.h +++ b/src/qtui/settingspages/networkssettingspage.h @@ -26,6 +26,8 @@ #include "settingspage.h" #include "ui_networkssettingspage.h" #include "ui_networkeditdlgnew.h" +#include "ui_servereditdlgnew.h" +#include "ui_saveidentitiesdlg.h" #include "network.h" #include "types.h" @@ -36,7 +38,7 @@ class NetworksSettingsPage : public SettingsPage { public: NetworksSettingsPage(QWidget *parent = 0); - //bool aboutToSave(); + bool aboutToSave(); public slots: void save(); @@ -58,6 +60,15 @@ class NetworksSettingsPage : public SettingsPage { void on_networkList_itemSelectionChanged(); void on_addNetwork_clicked(); + void on_deleteNetwork_clicked(); + void on_renameNetwork_clicked(); + + void on_serverList_itemSelectionChanged(); + void on_addServer_clicked(); + void on_deleteServer_clicked(); + void on_editServer_clicked(); + void on_upServer_clicked(); + void on_downServer_clicked(); private: Ui::NetworksSettingsPage ui; @@ -69,8 +80,10 @@ class NetworksSettingsPage : public SettingsPage { void reset(); bool testHasChanged(); - void insertNetwork(NetworkId); + QListWidgetItem *insertNetwork(NetworkId); + QListWidgetItem *insertNetwork(const NetworkInfo &info); QListWidgetItem *networkItem(NetworkId) const; + void saveToNetworkInfo(NetworkInfo &); }; class NetworkEditDlgNew : public QDialog { @@ -100,10 +113,22 @@ class ServerEditDlgNew : public QDialog { QVariantMap serverData() const; + private slots: + void on_host_textChanged(); + private: - QVariantMap _serverData; + Ui::ServerEditDlgNew ui; }; +class SaveNetworksDlg : public QDialog { + Q_OBJECT + + public: + SaveNetworksDlg(const QList &toCreate, const QList &toUpdate, const QList &toRemove, QWidget *parent = 0); + + private: + Ui::SaveIdentitiesDlg ui; +}; #endif diff --git a/src/qtui/settingspages/networkssettingspage.ui b/src/qtui/settingspages/networkssettingspage.ui index 71e29829..8039f172 100644 --- a/src/qtui/settingspages/networkssettingspage.ui +++ b/src/qtui/settingspages/networkssettingspage.ui @@ -5,8 +5,8 @@ 0 0 - 560 - 322 + 688 + 462 diff --git a/src/qtui/settingspages/servereditdlgnew.ui b/src/qtui/settingspages/servereditdlgnew.ui index 96e7eeb1..0c9a9ebf 100644 --- a/src/qtui/settingspages/servereditdlgnew.ui +++ b/src/qtui/settingspages/servereditdlgnew.ui @@ -30,10 +30,10 @@ - + - + 1 @@ -57,7 +57,7 @@ - + false diff --git a/src/qtui/ui/mainwin.ui b/src/qtui/ui/mainwin.ui index 02861330..f926cf97 100644 --- a/src/qtui/ui/mainwin.ui +++ b/src/qtui/ui/mainwin.ui @@ -46,7 +46,7 @@ 0 0 800 - 24 + 25 @@ -97,6 +97,7 @@ Debug + @@ -254,6 +255,11 @@ Debug &Console + + + Disconnect from Network... + + -- 2.20.1