Trim network name on edit
[quassel.git] / src / qtui / settingspages / networkssettingspage.cpp
index 614de27..2362c03 100644 (file)
 #include "networkssettingspage.h"
 
 #include "client.h"
-#include "global.h"
+#include "iconloader.h"
 #include "identity.h"
 #include "network.h"
 
 
 NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("General"), tr("Networks"), parent) {
   ui.setupUi(this);
+
+  // 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 = QIcon(":/22x22/actions/network-connect");
-  connectingIcon = QIcon(":/22x22/actions/gear");
-  disconnectedIcon = QIcon(":/22x22/actions/network-disconnect");
+  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();
@@ -63,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()));
@@ -230,17 +244,13 @@ void NetworksSettingsPage::setItemState(NetworkId id, QListWidgetItem *item) {
         if(oldid == currentId) {
           select = true;
           currentId = 0;
+          ui.networkList->clearSelection();
         }
         int row = ui.networkList->row(i);
         if(row >= 0) {
-          qDebug() << "ABOUT TO REMOVE: id=" << oldid << "from row" << row;
           QListWidgetItem *olditem = ui.networkList->takeItem(row);
-          qDebug() << "Successfully removed item from list.";
-          if(!olditem) {
-            qWarning() << "NetworksSettingsPage::setItemState(): Why the heck don't we have an itempointer here?";
-            Q_ASSERT(olditem);  // abort non-gracefully, I need to figure out what's causing this
-          }
-          else delete olditem;
+          Q_ASSERT(olditem);
+          delete olditem;
         }
         networkInfos.remove(oldid);
         break;
@@ -316,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<NetworkId>() == id) return item;
   }
@@ -325,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 &)));
 }
@@ -363,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 &) {
@@ -403,7 +431,7 @@ void NetworksSettingsPage::displayNetwork(NetworkId id) {
     foreach(QVariant v, info.serverList) {
       ui.serverList->addItem(QString("%1:%2").arg(v.toMap()["Host"].toString()).arg(v.toMap()["Port"].toUInt()));
     }
-    setItemState(id);
+    //setItemState(id);
     ui.randomServer->setChecked(info.useRandomServer);
     ui.performEdit->setPlainText(info.perform.join("\n"));
     ui.autoIdentify->setChecked(info.useAutoIdentify);
@@ -412,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);
@@ -446,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();
@@ -618,12 +650,12 @@ 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()));
 }
 
 
@@ -633,6 +665,8 @@ void NetworkEditDlg::on_networkEdit_textChanged(const QString &text) {
 
 ServerEditDlg::ServerEditDlg(const QVariant &_serverData, QWidget *parent) : QDialog(parent) {
   ui.setupUi(this);
+  ui.useSSL->setIcon(SmallIcon("document-encrypt"));
+
   QVariantMap serverData = _serverData.toMap();
   if(serverData.count()) {
     ui.host->setText(serverData["Host"].toString());
@@ -647,7 +681,7 @@ ServerEditDlg::ServerEditDlg(const QVariant &_serverData, QWidget *parent) : QDi
 
 QVariant ServerEditDlg::serverData() const {
   QVariantMap _serverData;
-  _serverData["Host"] = ui.host->text();
+  _serverData["Host"] = ui.host->text().trimmed();
   _serverData["Port"] = ui.port->value();
   _serverData["Password"] = ui.password->text();
   _serverData["UseSSL"] = ui.useSSL->isChecked();
@@ -655,7 +689,7 @@ QVariant ServerEditDlg::serverData() const {
 }
 
 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());
 }
 
 /**************************************************************************
@@ -675,6 +709,9 @@ SaveNetworksDlg::SaveNetworksDlg(const QList<NetworkInfo> &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);
     }
@@ -689,9 +726,6 @@ SaveNetworksDlg::SaveNetworksDlg(const QList<NetworkInfo> &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();