X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fnetworkssettingspage.cpp;h=ffef9919af52bc89d04c8af7e3a51156c2cdeecd;hp=65301f0f5a8e8e52cf3c55ab5ecf687af1049834;hb=9d919506679e00fcdf47ab3cbebad414d77bda7d;hpb=8010224cf5bfe5685dc2cf535e8dc1ec19c4c364 diff --git a/src/qtui/settingspages/networkssettingspage.cpp b/src/qtui/settingspages/networkssettingspage.cpp index 65301f0f..ffef9919 100644 --- a/src/qtui/settingspages/networkssettingspage.cpp +++ b/src/qtui/settingspages/networkssettingspage.cpp @@ -25,7 +25,7 @@ #include "networkssettingspage.h" #include "client.h" -#include "global.h" +#include "iconloader.h" #include "identity.h" #include "network.h" @@ -33,17 +33,31 @@ NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("General"), tr("Networks"), parent) { ui.setupUi(this); - connectedIcon = QIcon(":/22x22/actions/network-connect"); - connectingIcon = QIcon(":/22x22/actions/gear"); - disconnectedIcon = QIcon(":/22x22/actions/network-disconnect"); + // set up icons + ui.renameNetwork->setIcon(SmallIcon("edit-rename")); + ui.addNetwork->setIcon(SmallIcon("list-add")); + ui.deleteNetwork->setIcon(SmallIcon("edit-delete")); + ui.addServer->setIcon(SmallIcon("list-add")); + ui.deleteServer->setIcon(SmallIcon("edit-delete")); + ui.editServer->setIcon(SmallIcon("configure")); + ui.upServer->setIcon(SmallIcon("go-up")); + ui.downServer->setIcon(SmallIcon("go-down")); + + _ignoreWidgetChanges = false; + + connectedIcon = SmallIcon("network-connect"); + connectingIcon = SmallIcon("network-wired"); // FIXME network-connecting + disconnectedIcon = SmallIcon("network-disconnect"); foreach(int mib, QTextCodec::availableMibs()) { QByteArray codec = QTextCodec::codecForMib(mib)->name(); ui.sendEncoding->addItem(codec); ui.recvEncoding->addItem(codec); + ui.serverEncoding->addItem(codec); } ui.sendEncoding->model()->sort(0); ui.recvEncoding->model()->sort(0); + ui.serverEncoding->model()->sort(0); currentId = 0; setEnabled(Client::isConnected()); // need a core connection! setWidgetStates(); @@ -62,6 +76,7 @@ NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("G connect(ui.useDefaultEncodings, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.sendEncoding, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.recvEncoding, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); + connect(ui.serverEncoding, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.autoReconnect, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); connect(ui.reconnectInterval, SIGNAL(valueChanged(int)), this, SLOT(widgetHasChanged())); connect(ui.reconnectRetries, SIGNAL(valueChanged(int)), this, SLOT(widgetHasChanged())); @@ -145,6 +160,7 @@ bool NetworksSettingsPage::aboutToSave() { } void NetworksSettingsPage::widgetHasChanged() { + if(_ignoreWidgetChanges) return; bool changed = testHasChanged(); if(changed != hasChanged()) setChangedState(changed); } @@ -165,18 +181,25 @@ void NetworksSettingsPage::setWidgetStates() { // network list if(ui.networkList->selectedItems().count()) { NetworkId id = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value(); + const Network *net = 0; + if(id > 0) net = Client::network(id); ui.detailsBox->setEnabled(true); ui.renameNetwork->setEnabled(true); ui.deleteNetwork->setEnabled(true); - ui.connectNow->setEnabled(id > 0 - && (Client::network(id)->connectionState() == Network::Initialized - || Client::network(id)->connectionState() == Network::Disconnected)); - if(Client::network(id) && Client::network(id)->isConnected()) { - ui.connectNow->setIcon(disconnectedIcon); - ui.connectNow->setText(tr("Disconnect")); + ui.connectNow->setEnabled(net); + // && (Client::network(id)->connectionState() == Network::Initialized + // || Client::network(id)->connectionState() == Network::Disconnected)); + if(net) { + if(net->connectionState() == Network::Disconnected) { + ui.connectNow->setIcon(connectedIcon); + ui.connectNow->setText(tr("Connect")); + } else { + ui.connectNow->setIcon(disconnectedIcon); + ui.connectNow->setText(tr("Disconnect")); + } } else { - ui.connectNow->setIcon(connectedIcon); - ui.connectNow->setText(tr("Connect")); + ui.connectNow->setIcon(QIcon()); + ui.connectNow->setText(tr("Apply first!")); } } else { ui.renameNetwork->setEnabled(false); @@ -218,9 +241,17 @@ void NetworksSettingsPage::setItemState(NetworkId id, QListWidgetItem *item) { foreach(QListWidgetItem *i, items) { NetworkId oldid = i->data(Qt::UserRole).value(); if(oldid > 0) continue; // only locally created nets should be replaced - if(oldid == currentId) select = true; + if(oldid == currentId) { + select = true; + currentId = 0; + ui.networkList->clearSelection(); + } int row = ui.networkList->row(i); - if(row >= 0) delete ui.networkList->takeItem(row); + if(row >= 0) { + QListWidgetItem *olditem = ui.networkList->takeItem(row); + Q_ASSERT(olditem); + delete olditem; + } networkInfos.remove(oldid); break; } @@ -295,7 +326,7 @@ void NetworksSettingsPage::clientIdentityRemoved(IdentityId id) { } QListWidgetItem *NetworksSettingsPage::networkItem(NetworkId id) const { - for(int i = 0; i < ui.networkList->count(); i++) { + for(int i = 0; i < ui.networkList->count(); i++) { QListWidgetItem *item = ui.networkList->item(i); if(item->data(Qt::UserRole).value() == id) return item; } @@ -304,7 +335,24 @@ QListWidgetItem *NetworksSettingsPage::networkItem(NetworkId id) const { void NetworksSettingsPage::clientNetworkAdded(NetworkId id) { insertNetwork(id); - connect(Client::network(id), SIGNAL(updatedRemotely()), this, SLOT(clientNetworkUpdated())); + //connect(Client::network(id), SIGNAL(updatedRemotely()), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(identitySet(IdentityId)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(networkNameSet(const QString &)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(serverListSet(QVariantList)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(useRandomServerSet(bool)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(performSet(const QStringList &)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(useAutoIdentifySet(bool)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(autoIdentifyServiceSet(const QString &)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(autoIdentifyPasswordSet(const QString &)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(useAutoReconnectSet(bool)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(autoReconnectIntervalSet(quint32)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(autoReconnectRetriesSet(quint16)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(unlimitedReconnectRetriesSet(bool)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(rejoinChannelsSet(bool)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(codecForServerSet(const QByteArray &)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(codecForEncodingSet(const QByteArray &)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(codecForDecodingSet(const QByteArray &)), this, SLOT(clientNetworkUpdated())); + connect(Client::network(id), SIGNAL(connectionStateSet(Network::ConnectionState)), this, SLOT(networkConnectionStateChanged(Network::ConnectionState))); connect(Client::network(id), SIGNAL(connectionError(const QString &)), this, SLOT(networkConnectionError(const QString &))); } @@ -342,6 +390,7 @@ void NetworksSettingsPage::networkConnectionStateChanged(Network::ConnectionStat ui.connectNow->setEnabled(state == Network::Initialized || state == Network::Disconnected); } setItemState(net->networkId()); + setWidgetStates(); } void NetworksSettingsPage::networkConnectionError(const QString &) { @@ -374,14 +423,15 @@ QListWidgetItem *NetworksSettingsPage::insertNetwork(const NetworkInfo &info) { } void NetworksSettingsPage::displayNetwork(NetworkId id) { + _ignoreWidgetChanges = true; if(id != 0) { NetworkInfo info = networkInfos[id]; ui.identityList->setCurrentIndex(ui.identityList->findData(info.identity.toInt())); ui.serverList->clear(); - foreach(QVariant v, info.serverList) { - ui.serverList->addItem(QString("%1:%2").arg(v.toMap()["Host"].toString()).arg(v.toMap()["Port"].toUInt())); + foreach(Network::Server server, info.serverList) { + ui.serverList->addItem(QString("%1:%2").arg(server.host).arg(server.port)); } - setItemState(id); + //setItemState(id); ui.randomServer->setChecked(info.useRandomServer); ui.performEdit->setPlainText(info.perform.join("\n")); ui.autoIdentify->setChecked(info.useAutoIdentify); @@ -390,10 +440,12 @@ void NetworksSettingsPage::displayNetwork(NetworkId id) { if(info.codecForEncoding.isEmpty()) { ui.sendEncoding->setCurrentIndex(ui.sendEncoding->findText(Network::defaultCodecForEncoding())); ui.recvEncoding->setCurrentIndex(ui.recvEncoding->findText(Network::defaultCodecForDecoding())); + ui.serverEncoding->setCurrentIndex(ui.serverEncoding->findText(Network::defaultCodecForServer())); ui.useDefaultEncodings->setChecked(true); } else { ui.sendEncoding->setCurrentIndex(ui.sendEncoding->findText(info.codecForEncoding)); ui.recvEncoding->setCurrentIndex(ui.recvEncoding->findText(info.codecForDecoding)); + ui.serverEncoding->setCurrentIndex(ui.serverEncoding->findText(info.codecForServer)); ui.useDefaultEncodings->setChecked(false); } ui.autoReconnect->setChecked(info.useAutoReconnect); @@ -406,8 +458,11 @@ void NetworksSettingsPage::displayNetwork(NetworkId id) { ui.identityList->setCurrentIndex(-1); ui.serverList->clear(); ui.performEdit->clear(); + ui.autoIdentifyService->clear(); + ui.autoIdentifyPassword->clear(); setWidgetStates(); } + _ignoreWidgetChanges = false; currentId = id; } @@ -421,9 +476,11 @@ void NetworksSettingsPage::saveToNetworkInfo(NetworkInfo &info) { if(ui.useDefaultEncodings->isChecked()) { info.codecForEncoding.clear(); info.codecForDecoding.clear(); + info.codecForServer.clear(); } else { info.codecForEncoding = ui.sendEncoding->currentText().toLatin1(); info.codecForDecoding = ui.recvEncoding->currentText().toLatin1(); + info.codecForServer = ui.serverEncoding->currentText().toLatin1(); } info.useAutoReconnect = ui.autoReconnect->isChecked(); info.autoReconnectInterval = ui.reconnectInterval->value(); @@ -517,7 +574,7 @@ void NetworksSettingsPage::on_connectNow_clicked() { NetworkId id = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value(); const Network *net = Client::network(id); if(!net) return; - if(!net->isConnected()) net->requestConnect(); + if(net->connectionState() == Network::Disconnected) net->requestConnect(); else net->requestDisconnect(); } @@ -529,14 +586,13 @@ void NetworksSettingsPage::on_serverList_itemSelectionChanged() { void NetworksSettingsPage::on_addServer_clicked() { if(currentId == 0) return; - ServerEditDlg dlg(QVariantMap(), this); + ServerEditDlg dlg(Network::Server(), 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() { @@ -562,8 +618,8 @@ void NetworksSettingsPage::on_deleteServer_clicked() { void NetworksSettingsPage::on_upServer_clicked() { int cur = ui.serverList->currentRow(); - QVariant foo = networkInfos[currentId].serverList.takeAt(cur); - networkInfos[currentId].serverList.insert(cur-1, foo); + Network::Server server = networkInfos[currentId].serverList.takeAt(cur); + networkInfos[currentId].serverList.insert(cur-1, server); displayNetwork(currentId); ui.serverList->setCurrentRow(cur-1); widgetHasChanged(); @@ -571,8 +627,8 @@ void NetworksSettingsPage::on_upServer_clicked() { void NetworksSettingsPage::on_downServer_clicked() { int cur = ui.serverList->currentRow(); - QVariant foo = networkInfos[currentId].serverList.takeAt(cur); - networkInfos[currentId].serverList.insert(cur+1, foo); + Network::Server server = networkInfos[currentId].serverList.takeAt(cur); + networkInfos[currentId].serverList.insert(cur+1, server); displayNetwork(currentId); ui.serverList->setCurrentRow(cur+1); widgetHasChanged(); @@ -593,44 +649,49 @@ NetworkEditDlg::NetworkEditDlg(const QString &old, const QStringList &exist, QWi } QString NetworkEditDlg::networkName() const { - return ui.networkEdit->text(); + return ui.networkEdit->text().trimmed(); } void NetworkEditDlg::on_networkEdit_textChanged(const QString &text) { - ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(text.isEmpty() || existing.contains(text)); + ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(text.isEmpty() || existing.contains(text.trimmed())); } /************************************************************************** * ServerEditDlg *************************************************************************/ - -ServerEditDlg::ServerEditDlg(const QVariant &_serverData, QWidget *parent) : QDialog(parent) { +ServerEditDlg::ServerEditDlg(const Network::Server &server, 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); - } + ui.useSSL->setIcon(SmallIcon("document-encrypt")); + ui.host->setText(server.host); + ui.port->setValue(server.port); + ui.password->setText(server.password); + ui.useSSL->setChecked(server.useSsl); + ui.sslVersion->setCurrentIndex(server.sslVersion); + ui.useProxy->setChecked(server.useProxy); + ui.proxyType->setCurrentIndex(server.proxyType == QNetworkProxy::Socks5Proxy ? 0 : 1); + ui.proxyHost->setText(server.proxyHost); + ui.proxyPort->setValue(server.proxyPort); + ui.proxyUsername->setText(server.proxyUser); + ui.proxyPassword->setText(server.proxyPass); on_host_textChanged(); } -QVariant ServerEditDlg::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; +Network::Server ServerEditDlg::serverData() const { + Network::Server server(ui.host->text().trimmed(), ui.port->value(), ui.password->text(), ui.useSSL->isChecked()); + server.sslVersion = ui.sslVersion->currentIndex(); + server.useProxy = ui.useProxy->isChecked(); + server.proxyType = ui.proxyType->currentIndex() == 0 ? QNetworkProxy::Socks5Proxy : QNetworkProxy::HttpProxy; + server.proxyHost = ui.proxyHost->text(); + server.proxyPort = ui.proxyPort->value(); + server.proxyUser = ui.proxyUsername->text(); + server.proxyPass = ui.proxyPassword->text(); + return server; } void ServerEditDlg::on_host_textChanged() { - ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(ui.host->text().isEmpty()); + ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(ui.host->text().trimmed().isEmpty()); } /************************************************************************** @@ -650,6 +711,9 @@ SaveNetworksDlg::SaveNetworksDlg(const QList &toCreate, const QList connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(clientEvent())); connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), this, SLOT(clientEvent())); + foreach(NetworkId id, toRemove) { + Client::removeNetwork(id); + } foreach(NetworkInfo info, toCreate) { Client::createNetwork(info); } @@ -664,9 +728,6 @@ SaveNetworksDlg::SaveNetworksDlg(const QList &toCreate, const QList 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();