From 4d86b2f02fbf4d693136f3698984bcc10016b83d Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 20 Nov 2013 18:29:02 -0500 Subject: UI work... --- ZeroTierUI/mainwindow.cpp | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'ZeroTierUI/mainwindow.cpp') 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 #include +#include #include #include @@ -16,6 +18,7 @@ #include #include #include +#include // 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 networkIds; + // Add/update network widgets in scroll area for(unsigned long i=1;iztMessage.size();++i) { std::vector l(ZeroTier::Node::LocalClient::splitLine(m->ztMessage[i])); + // 200 listnetworks + 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;iztMessage.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); } -- cgit v1.2.3