summaryrefslogtreecommitdiff
path: root/ZeroTierUI/mainwindow.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2013-11-20 18:29:02 -0500
committerAdam Ierymenko <adam.ierymenko@gmail.com>2013-11-20 18:29:02 -0500
commit4d86b2f02fbf4d693136f3698984bcc10016b83d (patch)
treee2a6e2cfdbb10db3271632194073ad3823e70a2f /ZeroTierUI/mainwindow.cpp
parentc979a695c5c58a62c7e3e08128860634b2fc421f (diff)
downloadinfinitytier-4d86b2f02fbf4d693136f3698984bcc10016b83d.tar.gz
infinitytier-4d86b2f02fbf4d693136f3698984bcc10016b83d.zip
UI work...
Diffstat (limited to 'ZeroTierUI/mainwindow.cpp')
-rw-r--r--ZeroTierUI/mainwindow.cpp44
1 files changed, 43 insertions, 1 deletions
diff --git a/ZeroTierUI/mainwindow.cpp b/ZeroTierUI/mainwindow.cpp
index c618243a..40a2bf87 100644
--- a/ZeroTierUI/mainwindow.cpp
+++ b/ZeroTierUI/mainwindow.cpp
@@ -1,9 +1,11 @@
#include "mainwindow.h"
#include "aboutwindow.h"
+#include "network.h"
#include "ui_mainwindow.h"
#include <string>
#include <map>
+#include <set>
#include <vector>
#include <stdexcept>
@@ -16,6 +18,7 @@
#include <QDebug>
#include <QProcess>
#include <QStringList>
+#include <QVBoxLayout>
// Globally visible
ZeroTier::Node::LocalClient *zeroTierClient = (ZeroTier::Node::LocalClient *)0;
@@ -127,11 +130,48 @@ void MainWindow::customEvent(QEvent *event)
if (hdr.size() >= 5)
this->myVersion = hdr[4].c_str();
} else if (hdr[1] == "listnetworks") {
- const QObjectList &existingNetworks = ui->networksScrollAreaContentWidget->children();
+ std::set<std::string> networkIds;
+ // Add/update network widgets in scroll area
for(unsigned long i=1;i<m->ztMessage.size();++i) {
std::vector<std::string> l(ZeroTier::Node::LocalClient::splitLine(m->ztMessage[i]));
+ // 200 listnetworks <nwid> <name> <status> <type> <dev> <ips>
+ if ((l.size() == 8)&&(l[2].length() == 16)) {
+ networkIds.insert(l[2]);
+ Network *nw = (Network *)0;
+ for(QObjectList::const_iterator n(ui->networksScrollAreaContentWidget->children().begin());n!=ui->networksScrollAreaContentWidget->children().end();++n) {
+ Network *n2 = (Network *)*n;
+ if ((n2)&&(n2->networkId() == l[2])) {
+ nw = n2;
+ break;
+ }
+ }
+ if (!nw) {
+ nw = new Network(ui->networksScrollAreaContentWidget,l[2]);
+ }
+ nw->setNetworkName(l[3]);
+ nw->setStatus(l[4]);
+ nw->setNetworkType(l[5]);
+ nw->setNetworkDeviceName(l[6]);
+ nw->setIps(l[7]);
+ }
}
+
+ // Remove widgets for networks no longer in the list
+ for(QObjectList::const_iterator n(ui->networksScrollAreaContentWidget->children().begin());n!=ui->networksScrollAreaContentWidget->children().end();++n) {
+ Network *n2 = (Network *)*n;
+ if ((n2)&&(!networkIds.count(n2->networkId())))
+ n2->deleteLater();
+ }
+
+ // Update layout
+ QVBoxLayout *layout = new QVBoxLayout();
+ layout->setSpacing(0);
+ layout->setMargin(0);
+ for(QObjectList::const_iterator n(ui->networksScrollAreaContentWidget->children().begin());n!=ui->networksScrollAreaContentWidget->children().end();++n)
+ layout->addWidget((QWidget *)*n);
+ delete ui->networksScrollAreaContentWidget->layout();
+ ui->networksScrollAreaContentWidget->setLayout(layout);
} else if (hdr[1] == "listpeers") {
this->numPeers = 0;
for(unsigned long i=1;i<m->ztMessage.size();++i) {
@@ -212,6 +252,8 @@ void MainWindow::on_networkIdLineEdit_textChanged(const QString &text)
default: break;
}
}
+ if (newText.size() > 16)
+ newText.truncate(16);
ui->networkIdLineEdit->setText(newText);
}