diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-11-21 13:45:44 -0500 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-11-21 13:45:44 -0500 |
commit | e3b0197e570e203c00cd7ad8a893360cc1da0263 (patch) | |
tree | ba5097c89fab80646d0486abd96b002a086624f9 | |
parent | 4d86b2f02fbf4d693136f3698984bcc10016b83d (diff) | |
download | infinitytier-e3b0197e570e203c00cd7ad8a893360cc1da0263.tar.gz infinitytier-e3b0197e570e203c00cd7ad8a893360cc1da0263.zip |
Network list update works in UI.
-rw-r--r-- | ZeroTierUI/mainwindow.cpp | 65 | ||||
-rw-r--r-- | ZeroTierUI/mainwindow.ui | 49 | ||||
-rw-r--r-- | ZeroTierUI/network.cpp | 4 | ||||
-rw-r--r-- | ZeroTierUI/network.ui | 590 |
4 files changed, 337 insertions, 371 deletions
diff --git a/ZeroTierUI/mainwindow.cpp b/ZeroTierUI/mainwindow.cpp index 40a2bf87..e427a6a1 100644 --- a/ZeroTierUI/mainwindow.cpp +++ b/ZeroTierUI/mainwindow.cpp @@ -8,6 +8,7 @@ #include <set> #include <vector> #include <stdexcept> +#include <utility> #include <QClipboard> #include <QMutex> @@ -130,48 +131,48 @@ void MainWindow::customEvent(QEvent *event) if (hdr.size() >= 5) this->myVersion = hdr[4].c_str(); } else if (hdr[1] == "listnetworks") { - std::set<std::string> networkIds; - - // Add/update network widgets in scroll area + std::map< std::string,std::vector<std::string> > byNwid; 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]); - } + if ((l.size() == 8)&&(l[2].length() == 16)) + byNwid[l[2]] = l; + } + + std::map< std::string,std::pair<int,Network *> > existingByNwid; + for(int r=0;r<ui->networkListWidget->count();++r) { + Network *nw = (Network *)ui->networkListWidget->itemWidget(ui->networkListWidget->item(r)); + existingByNwid[nw->networkId()] = std::make_pair(r,nw); + } + + for(std::map< std::string,std::pair<int,Network *> >::iterator i(existingByNwid.begin());i!=existingByNwid.end();++i) { + if (byNwid.count(i->first)) { + std::vector<std::string> &l = byNwid[i->first]; + i->second.second->setNetworkName(l[3]); + i->second.second->setStatus(l[4]); + i->second.second->setNetworkType(l[5]); + i->second.second->setNetworkDeviceName(l[6]); + i->second.second->setIps(l[7]); + } else { + delete ui->networkListWidget->takeItem(i->second.first); + } + } + + for(std::map< std::string,std::vector<std::string> >::iterator i(byNwid.begin());i!=byNwid.end();++i) { + if (!existingByNwid.count(i->first)) { + std::vector<std::string> &l = i->second; + Network *nw = new Network((QWidget *)0,i->first); nw->setNetworkName(l[3]); nw->setStatus(l[4]); nw->setNetworkType(l[5]); nw->setNetworkDeviceName(l[6]); nw->setIps(l[7]); + QListWidgetItem *item = new QListWidgetItem(); + item->setSizeHint(nw->sizeHint()); + ui->networkListWidget->addItem(item); + ui->networkListWidget->setItemWidget(item,nw); } } - - // 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) { diff --git a/ZeroTierUI/mainwindow.ui b/ZeroTierUI/mainwindow.ui index add117f7..025ac6cd 100644 --- a/ZeroTierUI/mainwindow.ui +++ b/ZeroTierUI/mainwindow.ui @@ -35,44 +35,31 @@ <number>6</number> </property> <item> - <widget class="QScrollArea" name="networksScrollArea"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="toolTip"> - <string/> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> + <widget class="QListWidget" name="networkListWidget"> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> </property> <property name="horizontalScrollBarPolicy"> <enum>Qt::ScrollBarAlwaysOff</enum> </property> - <property name="widgetResizable"> + <property name="autoScroll"> + <bool>false</bool> + </property> + <property name="editTriggers"> + <set>QAbstractItemView::NoEditTriggers</set> + </property> + <property name="alternatingRowColors"> <bool>true</bool> </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + <property name="selectionMode"> + <enum>QAbstractItemView::NoSelection</enum> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectRows</enum> + </property> + <property name="verticalScrollMode"> + <enum>QAbstractItemView::ScrollPerPixel</enum> </property> - <widget class="QWidget" name="networksScrollAreaContentWidget"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>656</width> - <height>238</height> - </rect> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> </widget> </item> <item> diff --git a/ZeroTierUI/network.cpp b/ZeroTierUI/network.cpp index 12d02516..1631c816 100644 --- a/ZeroTierUI/network.cpp +++ b/ZeroTierUI/network.cpp @@ -17,6 +17,10 @@ Network::Network(QWidget *parent,const std::string &nwid) : { ui->setupUi(this); ui->networkIdPushButton->setText(QString(nwid.c_str())); + QFontMetrics fm(ui->ipListWidget->font()); + int lineHeight = ui->ipListWidget->spacing() + fm.height(); + ui->ipListWidget->setMinimumHeight(lineHeight * 3); + ui->ipListWidget->setMaximumHeight(lineHeight * 3); } Network::~Network() diff --git a/ZeroTierUI/network.ui b/ZeroTierUI/network.ui index c138e7e0..507bf335 100644 --- a/ZeroTierUI/network.ui +++ b/ZeroTierUI/network.ui @@ -7,11 +7,11 @@ <x>0</x> <y>0</y> <width>580</width> - <height>267</height> + <height>253</height> </rect> </property> <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <sizepolicy hsizetype="Expanding" vsizetype="Maximum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -22,249 +22,308 @@ <property name="styleSheet"> <string notr="true"/> </property> - <layout class="QHBoxLayout" name="horizontalLayout_3"> + <layout class="QHBoxLayout" name="horizontalLayout"> <property name="spacing"> - <number>0</number> + <number>6</number> </property> <property name="leftMargin"> - <number>0</number> + <number>6</number> </property> <property name="topMargin"> - <number>3</number> + <number>6</number> </property> <property name="rightMargin"> - <number>0</number> + <number>6</number> </property> <property name="bottomMargin"> - <number>3</number> + <number>6</number> </property> <item> - <widget class="QFrame" name="frame"> - <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> + <widget class="QWidget" name="leftWidget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> + <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> + <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="3" column="1"> + <widget class="QLabel" name="nameLabel"> + <property name="font"> + <font> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>?</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>?</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>?</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>?</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QWidget" name="rightWidget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> </property> - <layout class="QHBoxLayout" name="horizontalLayout"> + <layout class="QVBoxLayout" name="verticalLayout"> <property name="spacing"> - <number>6</number> + <number>3</number> + </property> + <property name="sizeConstraint"> + <enum>QLayout::SetNoConstraint</enum> </property> <property name="leftMargin"> - <number>6</number> + <number>0</number> </property> <property name="topMargin"> - <number>6</number> + <number>0</number> </property> <property name="rightMargin"> - <number>6</number> + <number>0</number> </property> <property name="bottomMargin"> - <number>6</number> + <number>0</number> </property> <item> - <widget class="QWidget" name="leftWidget" native="true"> + <widget class="QLabel" name="label_6"> + <property name="font"> + <font> + <underline>false</underline> + </font> + </property> + <property name="text"> + <string>IP Address Assignments</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item> + <widget class="QListWidget" name="ipListWidget"> <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <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="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> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="font"> + <font> + <family>Courier</family> + <pointsize>12</pointsize> + </font> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="editTriggers"> + <set>QAbstractItemView::NoEditTriggers</set> + </property> + <property name="showDropIndicator" stdset="0"> + <bool>false</bool> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::SingleSelection</enum> + </property> + <property name="horizontalScrollMode"> + <enum>QAbstractItemView::ScrollPerPixel</enum> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> </widget> </item> <item> - <widget class="QWidget" name="rightWidget" native="true"> + <widget class="QWidget" name="leaveNetworkButtonContainerWidget" native="true"> <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <layout class="QVBoxLayout" name="verticalLayout"> + <property name="minimumSize"> + <size> + <width>100</width> + <height>0</height> + </size> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> <property name="spacing"> - <number>6</number> + <number>0</number> </property> <property name="leftMargin"> <number>0</number> @@ -279,117 +338,32 @@ text-align: left;</string> <number>0</number> </property> <item> - <widget class="QLabel" name="label_6"> - <property name="font"> - <font> - <underline>false</underline> - </font> - </property> - <property name="text"> - <string>IP Addresses</string> - </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> - </property> - </widget> - </item> - <item> - <widget class="QListWidget" name="ipListWidget"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> - <property name="minimumSize"> + <property name="sizeHint" stdset="0"> <size> - <width>0</width> - <height>0</height> + <width>40</width> + <height>20</height> </size> </property> + </spacer> + </item> + <item> + <widget class="QToolButton" name="leaveNetworkButton"> <property name="font"> <font> - <family>Courier</family> - <pointsize>12</pointsize> + <pointsize>10</pointsize> + <underline>false</underline> </font> </property> - <property name="editTriggers"> - <set>QAbstractItemView::NoEditTriggers</set> - </property> - <property name="showDropIndicator" stdset="0"> - <bool>false</bool> - </property> - <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 name="styleSheet"> + <string notr="true">padding: 0.1em; margin:0;</string> </property> - <property name="minimumSize"> - <size> - <width>100</width> - <height>0</height> - </size> + <property name="text"> + <string>Leave Network</string> </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> |