diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-11-20 18:29:02 -0500 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-11-20 18:29:02 -0500 |
commit | 4d86b2f02fbf4d693136f3698984bcc10016b83d (patch) | |
tree | e2a6e2cfdbb10db3271632194073ad3823e70a2f | |
parent | c979a695c5c58a62c7e3e08128860634b2fc421f (diff) | |
download | infinitytier-4d86b2f02fbf4d693136f3698984bcc10016b83d.tar.gz infinitytier-4d86b2f02fbf4d693136f3698984bcc10016b83d.zip |
UI work...
-rw-r--r-- | ZeroTierUI/mainwindow.cpp | 44 | ||||
-rw-r--r-- | ZeroTierUI/mainwindow.ui | 30 | ||||
-rw-r--r-- | ZeroTierUI/network.cpp | 13 | ||||
-rw-r--r-- | ZeroTierUI/network.h | 2 | ||||
-rw-r--r-- | ZeroTierUI/network.ui | 532 |
5 files changed, 372 insertions, 249 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); } diff --git a/ZeroTierUI/mainwindow.ui b/ZeroTierUI/mainwindow.ui index 45b8fe63..add117f7 100644 --- a/ZeroTierUI/mainwindow.ui +++ b/ZeroTierUI/mainwindow.ui @@ -45,6 +45,9 @@ <property name="toolTip"> <string/> </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> <property name="horizontalScrollBarPolicy"> <enum>Qt::ScrollBarAlwaysOff</enum> </property> @@ -59,27 +62,16 @@ <rect> <x>0</x> <y>0</y> - <width>654</width> - <height>236</height> + <width>656</width> + <height>238</height> </rect> </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="spacing"> - <number>0</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - </layout> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> </widget> </widget> </item> diff --git a/ZeroTierUI/network.cpp b/ZeroTierUI/network.cpp index 1a6a631d..12d02516 100644 --- a/ZeroTierUI/network.cpp +++ b/ZeroTierUI/network.cpp @@ -29,14 +29,14 @@ void Network::setStatus(const std::string &status) ui->statusLabel->setText(QString(status.c_str())); } -void Network::setNetworkName(const std::string &status) +void Network::setNetworkName(const std::string &name) { - ui->nameLabel->setText(QString(status.c_str())); + ui->nameLabel->setText(QString(name.c_str())); } void Network::setNetworkType(const std::string &type) { - ui->networkTypeLabel->setText(QString(status.c_str())); + ui->networkTypeLabel->setText(QString(type.c_str())); if (type == "?") ui->networkTypeLabel->setToolTip("Waiting for configuration..."); else if (type == "public") @@ -69,13 +69,12 @@ void Network::setIps(const std::string &commaSeparatedList) ips = tmp; for(QStringList::iterator i(ips.begin());i!=ips.end();++i) { - if (ui->ipListWidget->findItems(*i).size() == 0) + if (ui->ipListWidget->findItems(*i,Qt::MatchCaseSensitive).size() == 0) ui->ipListWidget->addItem(*i); } - QList<QListWidgetItem *> inList(ui->ipListWidget->items()); - for(QList<QListWidgetItem *>::iterator i(inList.begin());i!=inList.end();++i) { - QListWidgetItem *item = *i; + for(int i=0;i<ui->ipListWidget->count();++i) { + QListWidgetItem *item = ui->ipListWidget->item(i); if (!ips.contains(item->text())) ui->ipListWidget->removeItemWidget(item); } diff --git a/ZeroTierUI/network.h b/ZeroTierUI/network.h index 1048767e..a47915e1 100644 --- a/ZeroTierUI/network.h +++ b/ZeroTierUI/network.h @@ -14,7 +14,7 @@ class Network : public QWidget Q_OBJECT public: - explicit Network(QWidget *parent = 0,const std::string &nwid); + explicit Network(QWidget *parent = 0,const std::string &nwid = std::string()); virtual ~Network(); void setStatus(const std::string &status); diff --git a/ZeroTierUI/network.ui b/ZeroTierUI/network.ui index a9b288a3..c138e7e0 100644 --- a/ZeroTierUI/network.ui +++ b/ZeroTierUI/network.ui @@ -6,12 +6,12 @@ <rect> <x>0</x> <y>0</y> - <width>618</width> - <height>108</height> + <width>580</width> + <height>267</height> </rect> </property> <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -19,181 +19,253 @@ <property name="windowTitle"> <string>Network</string> </property> - <property name="widgetResizable" stdset="0"> - <bool>true</bool> + <property name="styleSheet"> + <string notr="true"/> </property> <layout class="QHBoxLayout" name="horizontalLayout_3"> <property name="spacing"> - <number>6</number> + <number>0</number> </property> <property name="leftMargin"> - <number>6</number> + <number>0</number> </property> <property name="topMargin"> - <number>0</number> + <number>3</number> </property> <property name="rightMargin"> - <number>6</number> + <number>0</number> </property> <property name="bottomMargin"> - <number>0</number> + <number>3</number> </property> <item> - <widget class="QWidget" name="leftWidget" native="true"> - <layout class="QFormLayout" name="formLayout"> - <property name="fieldGrowthPolicy"> - <enum>QFormLayout::ExpandingFieldsGrow</enum> - </property> - <property name="labelAlignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - <property name="formAlignment"> - <set>Qt::AlignHCenter|Qt::AlignTop</set> - </property> - <property name="horizontalSpacing"> + <widget class="QFrame" name="frame"> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> <number>6</number> </property> - <property name="verticalSpacing"> - <number>2</number> - </property> <property name="leftMargin"> - <number>0</number> + <number>6</number> </property> <property name="topMargin"> - <number>0</number> + <number>6</number> </property> <property name="rightMargin"> - <number>0</number> + <number>6</number> </property> <property name="bottomMargin"> - <number>0</number> + <number>6</number> </property> - <item row="2" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Network ID:</string> - </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QPushButton" name="networkIdPushButton"> + <item> + <widget class="QWidget" name="leftWidget" native="true"> <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <property name="font"> - <font> - <family>Courier</family> - <pointsize>13</pointsize> - <weight>75</weight> - <bold>true</bold> - </font> - </property> - <property name="toolTip"> - <string>Click to Copy to Clipboard</string> - </property> - <property name="styleSheet"> - <string notr="true">border: 0; + <layout class="QFormLayout" name="formLayout"> + <property name="fieldGrowthPolicy"> + <enum>QFormLayout::ExpandingFieldsGrow</enum> + </property> + <property name="labelAlignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="formAlignment"> + <set>Qt::AlignHCenter|Qt::AlignTop</set> + </property> + <property name="horizontalSpacing"> + <number>6</number> + </property> + <property name="verticalSpacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item row="2" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Network ID:</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QPushButton" name="networkIdPushButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="font"> + <font> + <family>Courier</family> + <pointsize>13</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="toolTip"> + <string>Click to Copy to Clipboard</string> + </property> + <property name="styleSheet"> + <string notr="true">border: 0; padding: 0; margin: 0; text-align: left;</string> - </property> - <property name="text"> - <string>0000000000000000</string> - </property> - <property name="flat"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Name:</string> - </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> - </property> - </widget> - </item> - <item row="5" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Status:</string> - </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> - </property> - </widget> - </item> - <item row="5" column="1"> - <widget class="QLabel" name="statusLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="font"> - <font> - <weight>75</weight> - <bold>true</bold> - </font> - </property> - <property name="text"> - <string>OK</string> - </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> - </property> - </widget> - </item> - <item row="6" column="0"> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Device:</string> - </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> - </property> - </widget> - </item> - <item row="6" column="1"> - <widget class="QLabel" name="deviceLabel"> - <property name="font"> - <font> - <weight>75</weight> - <bold>true</bold> - </font> - </property> - <property name="text"> - <string>zt0</string> - </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> - </property> + </property> + <property name="text"> + <string>0000000000000000</string> + </property> + <property name="flat"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Name:</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QLabel" name="nameLabel"> + <property name="font"> + <font> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>(name)</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Type:</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QLabel" name="networkTypeLabel"> + <property name="font"> + <font> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>public</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Status:</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="5" column="1"> + <widget class="QLabel" name="statusLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="font"> + <font> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>OK</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="6" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Device:</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="6" column="1"> + <widget class="QLabel" name="deviceLabel"> + <property name="font"> + <font> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>zt0</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + </layout> </widget> </item> - <item row="7" column="1"> - <widget class="QWidget" name="leaveNetworkButtonContainerWidget" native="true"> + <item> + <widget class="QWidget" name="rightWidget" native="true"> <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <property name="minimumSize"> - <size> - <width>100</width> - <height>0</height> - </size> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_2"> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>6</number> + </property> <property name="leftMargin"> <number>0</number> </property> @@ -207,107 +279,125 @@ text-align: left;</string> <number>0</number> </property> <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> + <widget class="QLabel" name="label_6"> + <property name="font"> + <font> + <underline>false</underline> + </font> </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> + <property name="text"> + <string>IP Addresses</string> </property> - </spacer> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> </item> <item> - <widget class="QPushButton" name="leaveNetworkButton"> + <widget class="QListWidget" name="ipListWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> <property name="font"> <font> - <pointsize>10</pointsize> - <underline>true</underline> + <family>Courier</family> + <pointsize>12</pointsize> </font> </property> - <property name="styleSheet"> - <string notr="true">padding: 0; margin: 0;</string> + <property name="editTriggers"> + <set>QAbstractItemView::NoEditTriggers</set> </property> - <property name="text"> - <string>Leave Network</string> + <property name="showDropIndicator" stdset="0"> + <bool>false</bool> </property> - <property name="flat"> + <property name="selectionMode"> + <enum>QAbstractItemView::SingleSelection</enum> + </property> + <property name="resizeMode"> + <enum>QListView::Fixed</enum> + </property> + <property name="sortingEnabled"> <bool>true</bool> </property> </widget> </item> + <item> + <widget class="QWidget" name="leaveNetworkButtonContainerWidget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>100</width> + <height>0</height> + </size> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QToolButton" name="leaveNetworkButton"> + <property name="font"> + <font> + <pointsize>10</pointsize> + <underline>false</underline> + </font> + </property> + <property name="styleSheet"> + <string notr="true">padding: 0.1em; margin:0;</string> + </property> + <property name="text"> + <string>Leave Network</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> </layout> </widget> </item> - <item row="3" column="1"> - <widget class="QLabel" name="nameLabel"> - <property name="font"> - <font> - <weight>75</weight> - <bold>true</bold> - </font> - </property> - <property name="text"> - <string>(name)</string> - </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> - </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Type:</string> - </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="QLabel" name="networkTypeLabel"> - <property name="font"> - <font> - <weight>75</weight> - <bold>true</bold> - </font> - </property> - <property name="text"> - <string>public</string> - </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> - </property> - </widget> - </item> </layout> </widget> </item> - <item> - <widget class="QListWidget" name="ipListWidget"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="font"> - <font> - <family>Courier</family> - <pointsize>10</pointsize> - </font> - </property> - <property name="showDropIndicator" stdset="0"> - <bool>false</bool> - </property> - <property name="sortingEnabled"> - <bool>true</bool> - </property> - </widget> - </item> </layout> </widget> <resources/> |