Finally fixed that ***** crash during network configuration.
[quassel.git] / src / qtui / settingspages / networkssettingspage.cpp
index 80da554..f32540c 100644 (file)
@@ -32,6 +32,7 @@
 
 NetworksSettingsPage::NetworksSettingsPage(QWidget *parent) : SettingsPage(tr("General"), tr("Networks"), parent) {
   ui.setupUi(this);
+  _ignoreWidgetChanges = false;
 
   connectedIcon = QIcon(":/22x22/actions/network-connect");
   connectingIcon = QIcon(":/22x22/actions/gear");
@@ -145,6 +146,7 @@ bool NetworksSettingsPage::aboutToSave() {
 }
 
 void NetworksSettingsPage::widgetHasChanged() {
+  if(_ignoreWidgetChanges) return;
   bool changed = testHasChanged();
   if(changed != hasChanged()) setChangedState(changed);
 }
@@ -165,18 +167,25 @@ void NetworksSettingsPage::setWidgetStates() {
   // network list
   if(ui.networkList->selectedItems().count()) {
     NetworkId id = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value<NetworkId>();
+    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,15 +227,16 @@ void NetworksSettingsPage::setItemState(NetworkId id, QListWidgetItem *item) {
       foreach(QListWidgetItem *i, items) {
         NetworkId oldid = i->data(Qt::UserRole).value<NetworkId>();
         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) {
           QListWidgetItem *olditem = ui.networkList->takeItem(row);
-          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;
@@ -381,6 +391,7 @@ 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()));
@@ -388,7 +399,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);
@@ -413,8 +424,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;
 }
 
@@ -524,7 +538,7 @@ void NetworksSettingsPage::on_connectNow_clicked() {
   NetworkId id = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value<NetworkId>();
   const Network *net = Client::network(id);
   if(!net) return;
-  if(!net->isConnected()) net->requestConnect();
+  if(net->connectionState() == Network::Disconnected) net->requestConnect();
   else net->requestDisconnect();
 }
 
@@ -629,7 +643,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();
@@ -637,7 +651,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());
 }
 
 /**************************************************************************