mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2026-09-22 15:29:03 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7fdca150a9 | ||
|
|
165de71754 | ||
|
|
6b1a4b6e64 | ||
|
|
aaf0ef6b19 | ||
|
|
fb2745ba3b | ||
|
|
d452ed7db8 | ||
|
|
8f5cd0a361 | ||
|
|
d7bc3c6f4a | ||
|
|
d04e5a1fe0 | ||
|
|
bf5f09a0c7 | ||
|
|
a154d660d9 | ||
|
|
7a49d50187 | ||
|
|
ce0bd93289 | ||
|
|
0fdefdf7a4 | ||
|
|
8236f20759 | ||
|
|
e16b2a8831 | ||
|
|
f7fbc6f633 | ||
|
|
3a9b0cf132 | ||
|
|
2a3e646b94 | ||
|
|
64231aa3f0 | ||
|
|
117e6fb356 | ||
|
|
03ea06fa84 | ||
|
|
525ab3faa9 | ||
|
|
490e86dde3 | ||
|
|
6e076e77d8 | ||
|
|
d75f2f7051 | ||
|
|
aa1be9fcad | ||
|
|
17796aaed4 | ||
|
|
2355fa973e | ||
|
|
694e9f2bdc | ||
|
|
372566295e | ||
|
|
4e85213473 | ||
|
|
d6a346ca6e | ||
|
|
8b65b3e6d7 | ||
|
|
ffffc0179f | ||
|
|
f80ec871f6 | ||
|
|
e0cb5caef2 | ||
|
|
afbbf61588 | ||
|
|
28665079a0 | ||
|
|
80997f652b | ||
|
|
9d67a02b5f | ||
|
|
22efa1ab53 | ||
|
|
f19d1e253a | ||
|
|
b65f7f7895 | ||
|
|
fb49d2ced9 | ||
|
|
434ce96f2c | ||
|
|
6ae2c5f5c7 | ||
|
|
6f4e494e06 | ||
|
|
eb554a504d | ||
|
|
8771418170 | ||
|
|
2f37ea842f | ||
|
|
9232ba1da0 | ||
|
|
a0916b926f | ||
|
|
2da6a7570b | ||
|
|
2498ecbc84 | ||
|
|
4935fdf6e4 | ||
|
|
370dd6c4da | ||
|
|
06ca24e8e2 | ||
|
|
c4425c836a | ||
|
|
f0dd90d9d7 | ||
|
|
6bc5a84a2d | ||
|
|
3375363d93 | ||
|
|
fbb40b98ad | ||
|
|
a365a0e3ba | ||
|
|
45c5b66e9e | ||
|
|
f303c24d3c | ||
|
|
3d4762eab3 | ||
|
|
a5896264fa | ||
|
|
4d1cca1150 | ||
|
|
092e6e947e | ||
|
|
07f505971c | ||
|
|
7eccc5ebf2 |
No files matched your search
+9
-13
@@ -9,19 +9,13 @@
|
||||
/netconf-service/netconf-test
|
||||
/netconf-service/netconf.service
|
||||
/ipch
|
||||
/ZeroTierOne.sdf
|
||||
/ZeroTierOne.v11.suo
|
||||
/vsprojects/SelfTest/Debug
|
||||
/vsprojects/SelfTest/Release
|
||||
/vsprojects/ZeroTierOne/Debug
|
||||
/vsprojects/ZeroTierOne/Release
|
||||
/vsprojects/ZeroTierOne/x64
|
||||
/vsprojects/TapDriver/Win32
|
||||
/vsprojects/TapDriver/x64
|
||||
/vsprojects/InstallerUpdater/obj
|
||||
/vsprojects/Service/obj
|
||||
/vsprojects/SelfTest/SelfTest.aps
|
||||
/Build/*
|
||||
/windows/ZeroTierOne.sdf
|
||||
/windows/ZeroTierOne.v11.suo
|
||||
/windows/*/x64
|
||||
/windows/*/Win32
|
||||
/windows/ZeroTierOneService/obj
|
||||
/windows/ZeroTierOneService/bin
|
||||
/windows/Build
|
||||
*.log
|
||||
*.opensdf
|
||||
*.user
|
||||
@@ -34,3 +28,5 @@
|
||||
*.autosave
|
||||
/ZeroTier One.zip
|
||||
/ZeroTier One.dmg
|
||||
/windows/x64
|
||||
/windows/ZeroTierOneInstaller/ZeroTierOneInstaller
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
Binary file not shown.
+93
-87
@@ -3,109 +3,115 @@ TARGET = "ZeroTier One"
|
||||
TEMPLATE = app
|
||||
|
||||
win32:RC_FILE = ZeroTierUI.rc
|
||||
win32:LIBS += winhttp.lib Iphlpapi.lib ws2_32.lib advapi32.lib Shell32.lib Rpcrt4.lib
|
||||
win32:QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\"
|
||||
|
||||
mac:ICON = zt1icon.icns
|
||||
mac:QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
|
||||
mac:QMAKE_INFO_PLIST = Info.plist
|
||||
mac:LIBS += -framework Cocoa
|
||||
|
||||
SOURCES += main.cpp\
|
||||
mainwindow.cpp \
|
||||
aboutwindow.cpp \
|
||||
../node/C25519.cpp \
|
||||
../node/CertificateOfMembership.cpp \
|
||||
../node/Defaults.cpp \
|
||||
../node/Demarc.cpp \
|
||||
../node/EthernetTap.cpp \
|
||||
../node/HttpClient.cpp \
|
||||
../node/Identity.cpp \
|
||||
../node/InetAddress.cpp \
|
||||
../node/Logger.cpp \
|
||||
../node/Multicaster.cpp \
|
||||
../node/Network.cpp \
|
||||
../node/NetworkConfig.cpp \
|
||||
../node/Node.cpp \
|
||||
../node/NodeConfig.cpp \
|
||||
../node/Packet.cpp \
|
||||
../node/PacketDecoder.cpp \
|
||||
../node/Peer.cpp \
|
||||
../node/Poly1305.cpp \
|
||||
../node/Salsa20.cpp \
|
||||
../node/Service.cpp \
|
||||
../node/SHA512.cpp \
|
||||
../node/SoftwareUpdater.cpp \
|
||||
../node/Switch.cpp \
|
||||
../node/SysEnv.cpp \
|
||||
../node/Topology.cpp \
|
||||
../node/UdpSocket.cpp \
|
||||
../node/Utils.cpp \
|
||||
../ext/lz4/lz4.c \
|
||||
../ext/lz4/lz4hc.c \
|
||||
networkwidget.cpp \
|
||||
installdialog.cpp \
|
||||
SOURCES += main.cpp \
|
||||
mainwindow.cpp \
|
||||
aboutwindow.cpp \
|
||||
../node/C25519.cpp \
|
||||
../node/CertificateOfMembership.cpp \
|
||||
../node/Defaults.cpp \
|
||||
../node/Demarc.cpp \
|
||||
../node/EthernetTap.cpp \
|
||||
../node/HttpClient.cpp \
|
||||
../node/Identity.cpp \
|
||||
../node/InetAddress.cpp \
|
||||
../node/Logger.cpp \
|
||||
../node/Multicaster.cpp \
|
||||
../node/Network.cpp \
|
||||
../node/NetworkConfig.cpp \
|
||||
../node/Node.cpp \
|
||||
../node/NodeConfig.cpp \
|
||||
../node/Packet.cpp \
|
||||
../node/PacketDecoder.cpp \
|
||||
../node/Peer.cpp \
|
||||
../node/Poly1305.cpp \
|
||||
../node/Salsa20.cpp \
|
||||
../node/Service.cpp \
|
||||
../node/SHA512.cpp \
|
||||
../node/SoftwareUpdater.cpp \
|
||||
../node/Switch.cpp \
|
||||
../node/SysEnv.cpp \
|
||||
../node/Topology.cpp \
|
||||
../node/UdpSocket.cpp \
|
||||
../node/Utils.cpp \
|
||||
../ext/lz4/lz4.c \
|
||||
../ext/lz4/lz4hc.c \
|
||||
networkwidget.cpp \
|
||||
installdialog.cpp \
|
||||
licensedialog.cpp
|
||||
|
||||
HEADERS += mainwindow.h \
|
||||
aboutwindow.h \
|
||||
../node/Node.hpp \
|
||||
../node/Utils.hpp \
|
||||
../node/Defaults.hpp \
|
||||
../node/Address.hpp \
|
||||
../node/Array.hpp \
|
||||
../node/AtomicCounter.hpp \
|
||||
../node/BandwidthAccount.hpp \
|
||||
../node/Buffer.hpp \
|
||||
../node/C25519.hpp \
|
||||
../node/CertificateOfMembership.hpp \
|
||||
../node/CMWC4096.hpp \
|
||||
../node/Condition.hpp \
|
||||
../node/Constants.hpp \
|
||||
../node/Demarc.hpp \
|
||||
../node/Dictionary.hpp \
|
||||
../node/EthernetTap.hpp \
|
||||
../node/HttpClient.hpp \
|
||||
../node/Identity.hpp \
|
||||
../node/InetAddress.hpp \
|
||||
../node/Logger.hpp \
|
||||
../node/MAC.hpp \
|
||||
../node/Multicaster.hpp \
|
||||
../node/MulticastGroup.hpp \
|
||||
../node/Mutex.hpp \
|
||||
../node/Network.hpp \
|
||||
../node/NetworkConfig.hpp \
|
||||
../node/NodeConfig.hpp \
|
||||
../node/NonCopyable.hpp \
|
||||
../node/Packet.hpp \
|
||||
../node/PacketDecoder.hpp \
|
||||
../node/Peer.hpp \
|
||||
../node/Poly1305.hpp \
|
||||
../node/RuntimeEnvironment.hpp \
|
||||
../node/Salsa20.hpp \
|
||||
../node/Service.hpp \
|
||||
../node/SHA512.hpp \
|
||||
../node/SharedPtr.hpp \
|
||||
../node/SoftwareUpdater.hpp \
|
||||
../node/Switch.hpp \
|
||||
../node/SysEnv.hpp \
|
||||
../node/Thread.hpp \
|
||||
../node/Topology.hpp \
|
||||
../node/UdpSocket.hpp \
|
||||
../ext/lz4/lz4.h \
|
||||
../ext/lz4/lz4hc.h \
|
||||
networkwidget.h \
|
||||
installdialog.h \
|
||||
mac_doprivileged.h \
|
||||
aboutwindow.h \
|
||||
../node/Node.hpp \
|
||||
../node/Utils.hpp \
|
||||
../node/Defaults.hpp \
|
||||
../node/Address.hpp \
|
||||
../node/Array.hpp \
|
||||
../node/AtomicCounter.hpp \
|
||||
../node/BandwidthAccount.hpp \
|
||||
../node/Buffer.hpp \
|
||||
../node/C25519.hpp \
|
||||
../node/CertificateOfMembership.hpp \
|
||||
../node/CMWC4096.hpp \
|
||||
../node/Condition.hpp \
|
||||
../node/Constants.hpp \
|
||||
../node/Demarc.hpp \
|
||||
../node/Dictionary.hpp \
|
||||
../node/EthernetTap.hpp \
|
||||
../node/HttpClient.hpp \
|
||||
../node/Identity.hpp \
|
||||
../node/InetAddress.hpp \
|
||||
../node/Logger.hpp \
|
||||
../node/MAC.hpp \
|
||||
../node/Multicaster.hpp \
|
||||
../node/MulticastGroup.hpp \
|
||||
../node/Mutex.hpp \
|
||||
../node/Network.hpp \
|
||||
../node/NetworkConfig.hpp \
|
||||
../node/NodeConfig.hpp \
|
||||
../node/NonCopyable.hpp \
|
||||
../node/Packet.hpp \
|
||||
../node/PacketDecoder.hpp \
|
||||
../node/Peer.hpp \
|
||||
../node/Poly1305.hpp \
|
||||
../node/RuntimeEnvironment.hpp \
|
||||
../node/Salsa20.hpp \
|
||||
../node/Service.hpp \
|
||||
../node/SHA512.hpp \
|
||||
../node/SharedPtr.hpp \
|
||||
../node/SoftwareUpdater.hpp \
|
||||
../node/Switch.hpp \
|
||||
../node/SysEnv.hpp \
|
||||
../node/Thread.hpp \
|
||||
../node/Topology.hpp \
|
||||
../node/UdpSocket.hpp \
|
||||
../ext/lz4/lz4.h \
|
||||
../ext/lz4/lz4hc.h \
|
||||
networkwidget.h \
|
||||
installdialog.h \
|
||||
mac_doprivileged.h \
|
||||
licensedialog.h \
|
||||
main.h
|
||||
|
||||
FORMS += mainwindow.ui \
|
||||
aboutwindow.ui \
|
||||
networkwidget.ui \
|
||||
installdialog.ui \
|
||||
licensedialog.ui
|
||||
aboutwindow.ui \
|
||||
networkwidget.ui \
|
||||
installdialog.ui \
|
||||
licensedialog.ui \
|
||||
quickstartdialog.ui
|
||||
|
||||
RESOURCES += \
|
||||
resources.qrc
|
||||
|
||||
mac:OBJECTIVE_SOURCES += \
|
||||
mac_doprivileged.mm
|
||||
|
||||
OTHER_FILES += \
|
||||
stylesheet.css
|
||||
@@ -29,7 +29,9 @@
|
||||
#include "ui_aboutwindow.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
#include <QFont>
|
||||
|
||||
#include "../node/Constants.hpp"
|
||||
#include "../node/Node.hpp"
|
||||
|
||||
AboutWindow::AboutWindow(QWidget *parent) :
|
||||
@@ -37,7 +39,6 @@ AboutWindow::AboutWindow(QWidget *parent) :
|
||||
ui(new Ui::AboutWindow)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
ui->aboutTextLabel->setText(QString("ZeroTier One\nVersion ")+ZeroTier::Node::versionString()+"\nQt Graphical User Interface\n\n(c)2011-2014 ZeroTier Networks LLC\n\nReleased under the terms of the GNU\nGeneral Public License v3.0, see: http://gplv3.fsf.org for terms.\n\nAuthor(s): Adam Ierymenko");
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
|
||||
@@ -5,11 +5,22 @@
|
||||
#include "licensedialog.h"
|
||||
#include "ui_licensedialog.h"
|
||||
|
||||
#include "../node/Constants.hpp"
|
||||
|
||||
LicenseDialog::LicenseDialog(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::LicenseDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
QWidgetList widgets = this->findChildren<QWidget*>();
|
||||
foreach(QWidget *widget, widgets) {
|
||||
QFont font(widget->font());
|
||||
font.setPointSizeF(font.pointSizeF() * 0.75);
|
||||
widget->setFont(font);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
LicenseDialog::~LicenseDialog()
|
||||
|
||||
+28
-3
@@ -32,6 +32,12 @@
|
||||
#include <QApplication>
|
||||
#include <QDir>
|
||||
#include <QString>
|
||||
#include <QFont>
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
#include <WinSock2.h>
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
QSettings *settings = (QSettings *)0;
|
||||
|
||||
@@ -39,6 +45,20 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
{
|
||||
WSADATA wsaData;
|
||||
WSAStartup(MAKEWORD(2,2),&wsaData);
|
||||
}
|
||||
#endif
|
||||
|
||||
{
|
||||
QFile qss(":css/stylesheet.css");
|
||||
qss.open(QFile::ReadOnly);
|
||||
QString style(qss.readAll());
|
||||
a.setStyleSheet(style);
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
// If service isn't installed, download and install it
|
||||
if (!QFile::exists("/Library/Application Support/ZeroTier/One/zerotier-one")) {
|
||||
@@ -51,15 +71,20 @@ int main(int argc, char *argv[])
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
QString zt1AppSupport(QDir::homePath() + "/Library/Application Support/ZeroTier/One");
|
||||
QDir::root().mkpath(zt1AppSupport);
|
||||
settings = new QSettings(zt1AppSupport + "/ui.ini",QSettings::IniFormat);
|
||||
{
|
||||
// Put QSettings here because this is one of the writable directories allowed
|
||||
// in Apple's app store sandbox specs. We might end up in app store someday.
|
||||
QString zt1AppSupport(QDir::homePath() + "/Library/Application Support/ZeroTier/One");
|
||||
QDir::root().mkpath(zt1AppSupport);
|
||||
settings = new QSettings(zt1AppSupport + "/ui.ini",QSettings::IniFormat);
|
||||
}
|
||||
#else
|
||||
settings = new QSettings("ZeroTier Networks","ZeroTier One");
|
||||
#endif
|
||||
|
||||
if (!settings->value("acceptedLicenseV1",false).toBool()) {
|
||||
LicenseDialog ld;
|
||||
ld.setStyleSheet(a.styleSheet());
|
||||
ld.exec();
|
||||
}
|
||||
|
||||
|
||||
+65
-24
@@ -44,12 +44,14 @@
|
||||
#include <QVBoxLayout>
|
||||
#include <QScrollBar>
|
||||
#include <QEventLoop>
|
||||
#include <QFont>
|
||||
|
||||
#include "main.h"
|
||||
#include "mainwindow.h"
|
||||
#include "aboutwindow.h"
|
||||
#include "networkwidget.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "ui_quickstartdialog.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <stdio.h>
|
||||
@@ -99,13 +101,29 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
ui->setupUi(this);
|
||||
if (ui->networkListWidget->verticalScrollBar())
|
||||
ui->networkListWidget->verticalScrollBar()->setSingleStep(8);
|
||||
|
||||
#ifdef __APPLE__
|
||||
QWidgetList widgets = this->findChildren<QWidget*>();
|
||||
foreach(QWidget *widget, widgets)
|
||||
widget->setAttribute(Qt::WA_MacShowFocusRect,false);
|
||||
ui->noNetworksLabel->setText("Connecting to Service..."); // changed when result is received
|
||||
#endif
|
||||
|
||||
this->pollServiceTimerId = this->startTimer(1000);
|
||||
this->setEnabled(false); // gets enabled when updates are received
|
||||
#ifdef __WINDOWS__
|
||||
QWidgetList widgets = this->findChildren<QWidget*>();
|
||||
foreach(QWidget *widget, widgets) {
|
||||
QFont font(widget->font());
|
||||
font.setPointSizeF(font.pointSizeF() * 0.75);
|
||||
widget->setFont(font);
|
||||
}
|
||||
#endif
|
||||
|
||||
ui->noNetworksLabel->setVisible(true);
|
||||
ui->noNetworksLabel->setText("Connecting to Service...");
|
||||
ui->bottomContainerWidget->setVisible(false);
|
||||
ui->networkListWidget->setVisible(false);
|
||||
|
||||
this->firstTimerTick = true;
|
||||
this->pollServiceTimerId = this->startTimer(200);
|
||||
this->cyclesSinceResponseFromService = 0;
|
||||
}
|
||||
|
||||
@@ -117,15 +135,26 @@ MainWindow::~MainWindow()
|
||||
mainWindow = (MainWindow *)0;
|
||||
}
|
||||
|
||||
void MainWindow::timerEvent(QTimerEvent *event)
|
||||
void MainWindow::timerEvent(QTimerEvent *event) // event can be null since code also calls this directly
|
||||
{
|
||||
event->accept();
|
||||
|
||||
if (this->isHidden())
|
||||
return;
|
||||
if (pollServiceTimerId < 0)
|
||||
if (this->pollServiceTimerId < 0)
|
||||
return;
|
||||
|
||||
if (this->firstTimerTick) {
|
||||
this->firstTimerTick = false;
|
||||
this->killTimer(this->pollServiceTimerId);
|
||||
|
||||
if (!settings->value("shown_quickStart",false).toBool()) {
|
||||
on_actionQuick_Start_triggered();
|
||||
settings->setValue("shown_quickStart",true);
|
||||
settings->sync();
|
||||
}
|
||||
|
||||
this->pollServiceTimerId = this->startTimer(1500);
|
||||
}
|
||||
|
||||
if (!zeroTierClient) {
|
||||
std::string authToken;
|
||||
if (!ZeroTier::Utils::readFile(ZeroTier::Node::LocalClient::authTokenDefaultUserPath().c_str(),authToken)) {
|
||||
@@ -173,19 +202,25 @@ void MainWindow::timerEvent(QTimerEvent *event)
|
||||
#endif
|
||||
|
||||
if (!ZeroTier::Utils::readFile(ZeroTier::Node::LocalClient::authTokenDefaultUserPath().c_str(),authToken)) {
|
||||
QMessageBox::critical(this,"Cannot Authorize","Unable to authorize this user to administrate ZeroTier One. (Did you enter your password correctly?)",QMessageBox::Ok,QMessageBox::NoButton);
|
||||
QApplication::exit(1);
|
||||
return;
|
||||
if (!ZeroTier::Utils::readFile(ZeroTier::Node::LocalClient::authTokenDefaultSystemPath().c_str(),authToken)) {
|
||||
QMessageBox::critical(this,"Cannot Authorize","Unable to authorize this user to administrate ZeroTier One. (Did you enter your password correctly?)",QMessageBox::Ok,QMessageBox::NoButton);
|
||||
QApplication::exit(1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
zeroTierClient = new ZeroTier::Node::LocalClient(authToken.c_str(),0,&handleZTMessage,this);
|
||||
}
|
||||
|
||||
// TODO: do something more user-friendly here... or maybe try to restart
|
||||
// the service?
|
||||
if (++this->cyclesSinceResponseFromService == 4)
|
||||
QMessageBox::critical(this,"No Response from Service","The ZeroTier One service does not appear to be running.",QMessageBox::Ok,QMessageBox::NoButton);
|
||||
if (++this->cyclesSinceResponseFromService >= 3) {
|
||||
if (this->cyclesSinceResponseFromService == 3)
|
||||
QMessageBox::warning(this,"Service Not Running","Can't connect to the ZeroTier One service. Is it running?",QMessageBox::Ok);
|
||||
ui->noNetworksLabel->setVisible(true);
|
||||
ui->noNetworksLabel->setText("Connecting to Service...");
|
||||
ui->bottomContainerWidget->setVisible(false);
|
||||
ui->networkListWidget->setVisible(false);
|
||||
}
|
||||
|
||||
zeroTierClient->send("info");
|
||||
zeroTierClient->send("listnetworks");
|
||||
@@ -198,14 +233,14 @@ void MainWindow::customEvent(QEvent *event)
|
||||
if (m->ztMessage.size() == 0)
|
||||
return;
|
||||
|
||||
this->cyclesSinceResponseFromService = 0;
|
||||
|
||||
std::vector<std::string> hdr(ZeroTier::Node::LocalClient::splitLine(m->ztMessage[0]));
|
||||
if (hdr.size() < 2)
|
||||
return;
|
||||
if (hdr[0] != "200")
|
||||
return;
|
||||
|
||||
this->cyclesSinceResponseFromService = 0;
|
||||
|
||||
if (hdr[1] == "info") {
|
||||
if (hdr.size() >= 3)
|
||||
this->myAddress = hdr[2].c_str();
|
||||
@@ -281,6 +316,11 @@ void MainWindow::customEvent(QEvent *event)
|
||||
ui->noNetworksLabel->setVisible(true);
|
||||
} else ui->noNetworksLabel->setVisible(false);
|
||||
|
||||
if (!ui->bottomContainerWidget->isVisible())
|
||||
ui->bottomContainerWidget->setVisible(true);
|
||||
if (!ui->networkListWidget->isVisible())
|
||||
ui->networkListWidget->setVisible(true);
|
||||
|
||||
if (this->myAddress.size())
|
||||
ui->addressButton->setText(this->myAddress);
|
||||
else ui->addressButton->setText(" ");
|
||||
@@ -292,14 +332,6 @@ void MainWindow::customEvent(QEvent *event)
|
||||
st += QString::number(this->numPeers);
|
||||
st += " direct links to peers";
|
||||
ui->statusLabel->setText(st);
|
||||
|
||||
if (this->myStatus == "ONLINE") {
|
||||
if (!this->isEnabled())
|
||||
this->setEnabled(true);
|
||||
} else {
|
||||
if (this->isEnabled())
|
||||
this->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_joinNetworkButton_clicked()
|
||||
@@ -363,3 +395,12 @@ void MainWindow::on_addressButton_clicked()
|
||||
{
|
||||
QApplication::clipboard()->setText(this->myAddress);
|
||||
}
|
||||
|
||||
void MainWindow::on_actionQuick_Start_triggered()
|
||||
{
|
||||
Ui::QuickstartDialog qd;
|
||||
QDialog *qdd = new QDialog(this);
|
||||
qd.setupUi(qdd);
|
||||
qdd->setModal(false);
|
||||
qdd->show();
|
||||
}
|
||||
@@ -39,6 +39,7 @@
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include "../node/Constants.hpp"
|
||||
#include "../node/Node.hpp"
|
||||
#include "../node/Utils.hpp"
|
||||
|
||||
@@ -78,6 +79,7 @@ private slots:
|
||||
void on_actionAbout_triggered();
|
||||
void on_networkIdLineEdit_textChanged(const QString &text);
|
||||
void on_addressButton_clicked();
|
||||
void on_actionQuick_Start_triggered();
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
@@ -85,6 +87,7 @@ private:
|
||||
QString myAddress;
|
||||
QString myStatus;
|
||||
QString myVersion;
|
||||
bool firstTimerTick;
|
||||
int pollServiceTimerId;
|
||||
unsigned int numPeers;
|
||||
unsigned int cyclesSinceResponseFromService;
|
||||
|
||||
+23
-107
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>668</width>
|
||||
<width>720</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -36,43 +36,6 @@
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="noNetworksLabel">
|
||||
<property name="palette">
|
||||
<palette>
|
||||
<active>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="64">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</active>
|
||||
<inactive>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="64">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</inactive>
|
||||
<disabled>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>127</red>
|
||||
<green>127</green>
|
||||
<blue>127</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</disabled>
|
||||
</palette>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>16</pointsize>
|
||||
@@ -106,16 +69,6 @@
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QListWidget#networkListWidget {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QListWidget#networkListWidget::Item {
|
||||
background-color: palette(base);
|
||||
border: 0;
|
||||
}</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
@@ -135,7 +88,7 @@ QListWidget#networkListWidget::Item {
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="uniformItemSizes">
|
||||
<bool>true</bool>
|
||||
@@ -161,7 +114,7 @@ QListWidget#networkListWidget::Item {
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QPushButton" name="addressButton">
|
||||
<widget class="QToolButton" name="addressButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -179,33 +132,14 @@ QListWidget#networkListWidget::Item {
|
||||
<property name="statusTip">
|
||||
<string>Your 10-digit ZeroTier address; click to copy to clipboard.</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QPushButton {
|
||||
border: 0;
|
||||
text-align: left;
|
||||
padding: 0 5px 0 5px;
|
||||
margin: 0;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QPushButton:focus {
|
||||
background-color: rgba(0,0,0,15);
|
||||
}
|
||||
|
||||
QPushButton:hover {
|
||||
background-color: rgba(0,0,0,15);
|
||||
}
|
||||
|
||||
QPushButton:pressed {
|
||||
background-color: rgba(0,0,0,75);
|
||||
}
|
||||
s</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
<string notr="true">----------</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextOnly</enum>
|
||||
</property>
|
||||
<property name="class" stdset="0">
|
||||
<string notr="true">clickToCopy</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -225,11 +159,6 @@ s</string>
|
||||
<property name="statusTip">
|
||||
<string>Your network connection status.</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">padding: 0 0.75em 0 0.75em;
|
||||
margin: 0 4px 0 0;
|
||||
</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
@@ -267,7 +196,7 @@ margin: 0 4px 0 0;
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="joinNetworkButton">
|
||||
<widget class="QToolButton" name="joinNetworkButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -285,33 +214,9 @@ margin: 0 4px 0 0;
|
||||
<property name="statusTip">
|
||||
<string>Join this network.</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QPushButton {
|
||||
padding: 0 0.8em 0 0.8em;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
background-color: rgba(0,0,0,25);
|
||||
}
|
||||
|
||||
QPushButton:focus {
|
||||
background-color: rgba(0,0,0,33);
|
||||
}
|
||||
|
||||
QPushButton:hover {
|
||||
background-color: rgba(0,0,0,33);
|
||||
}
|
||||
|
||||
QPushButton:pressed {
|
||||
background-color: rgba(0,0,0,75);
|
||||
}
|
||||
</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">+</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -324,10 +229,15 @@ QPushButton:pressed {
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>668</width>
|
||||
<width>720</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
@@ -336,6 +246,7 @@ QPushButton:pressed {
|
||||
<string>Help</string>
|
||||
</property>
|
||||
<addaction name="actionAbout"/>
|
||||
<addaction name="actionQuick_Start"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
<property name="title">
|
||||
@@ -350,7 +261,7 @@ QPushButton:pressed {
|
||||
<widget class="QStatusBar" name="statusBar">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
<pointsize>10</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
</widget>
|
||||
@@ -364,6 +275,11 @@ QPushButton:pressed {
|
||||
<string>Exit</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionQuick_Start">
|
||||
<property name="text">
|
||||
<string>Quick Start</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<resources>
|
||||
|
||||
@@ -36,6 +36,9 @@
|
||||
#include <QProcess>
|
||||
#include <QList>
|
||||
#include <QMessageBox>
|
||||
#include <QFont>
|
||||
|
||||
#include "../node/Constants.hpp"
|
||||
|
||||
NetworkWidget::NetworkWidget(QWidget *parent,const std::string &nwid) :
|
||||
QWidget(parent),
|
||||
@@ -43,16 +46,27 @@ NetworkWidget::NetworkWidget(QWidget *parent,const std::string &nwid) :
|
||||
networkIdStr(nwid)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->networkIdPushButton->setText(QString(nwid.c_str()));
|
||||
ui->networkIdButton->setText(QString(nwid.c_str()));
|
||||
|
||||
QFontMetrics fm(ui->ipListWidget->font());
|
||||
int lineHeight = ui->ipListWidget->spacing() + fm.height();
|
||||
ui->ipListWidget->setMinimumHeight(lineHeight * 4);
|
||||
ui->ipListWidget->setMaximumHeight(lineHeight * 4);
|
||||
|
||||
#ifdef __APPLE__
|
||||
QWidgetList widgets = this->findChildren<QWidget*>();
|
||||
foreach(QWidget* widget, widgets)
|
||||
widget->setAttribute(Qt::WA_MacShowFocusRect,false);
|
||||
#endif
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
QWidgetList widgets = this->findChildren<QWidget*>();
|
||||
foreach(QWidget *widget, widgets) {
|
||||
QFont font(widget->font());
|
||||
font.setPointSizeF(font.pointSizeF() * 0.75);
|
||||
widget->setFont(font);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
NetworkWidget::~NetworkWidget()
|
||||
@@ -64,7 +78,7 @@ void NetworkWidget::setStatus(const std::string &status,const std::string &age)
|
||||
{
|
||||
ui->statusLabel->setText(QString(status.c_str()));
|
||||
if (status == "OK")
|
||||
ui->ageLabel->setText(QString("(configuration is ") + age.c_str() + " seconds old)");
|
||||
ui->ageLabel->setText(QString("[") + age.c_str() + "s ago]");
|
||||
else ui->ageLabel->setText(QString());
|
||||
}
|
||||
|
||||
@@ -138,13 +152,19 @@ void NetworkWidget::on_leaveNetworkButton_clicked()
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkWidget::on_networkIdPushButton_clicked()
|
||||
void NetworkWidget::on_networkIdButton_clicked()
|
||||
{
|
||||
QApplication::clipboard()->setText(ui->networkIdPushButton->text());
|
||||
QApplication::clipboard()->setText(ui->networkIdButton->text());
|
||||
}
|
||||
|
||||
void NetworkWidget::on_ipListWidget_itemActivated(QListWidgetItem *item)
|
||||
{
|
||||
if (item)
|
||||
QApplication::clipboard()->setText(item->text());
|
||||
if (item)
|
||||
QApplication::clipboard()->setText(item->text());
|
||||
}
|
||||
|
||||
void NetworkWidget::on_ipListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
|
||||
{
|
||||
if (current)
|
||||
QApplication::clipboard()->setText(current->text());
|
||||
}
|
||||
@@ -55,8 +55,9 @@ public:
|
||||
|
||||
private slots:
|
||||
void on_leaveNetworkButton_clicked();
|
||||
void on_networkIdPushButton_clicked();
|
||||
void on_networkIdButton_clicked();
|
||||
void on_ipListWidget_itemActivated(QListWidgetItem *item);
|
||||
void on_ipListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
|
||||
|
||||
private:
|
||||
Ui::NetworkWidget *ui;
|
||||
|
||||
+168
-143
@@ -20,7 +20,7 @@
|
||||
<string>Network</string>
|
||||
</property>
|
||||
<property name="class" stdset="0">
|
||||
<string>NetworkWidget</string>
|
||||
<string notr="true">networkListItem</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout">
|
||||
<property name="spacing">
|
||||
@@ -57,35 +57,123 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="nameLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>16</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>This network's short name.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>networkname</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QToolButton" name="networkIdButton">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Courier</family>
|
||||
<pointsize>13</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>Hexadecimal network ID; click to copy to clipboard.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">----------------</string>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextOnly</enum>
|
||||
</property>
|
||||
<property name="class" stdset="0">
|
||||
<string notr="true">clickToCopy</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>[</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="nameLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>13</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>This network's short name.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>networkname</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
<property name="class" stdset="0">
|
||||
<string notr="true">networkName</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>]</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@@ -100,6 +188,9 @@
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::ExpandingFieldsGrow</enum>
|
||||
</property>
|
||||
<property name="rowWrapPolicy">
|
||||
<enum>QFormLayout::DontWrapRows</enum>
|
||||
</property>
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
@@ -107,85 +198,30 @@
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
<property name="horizontalSpacing">
|
||||
<number>6</number>
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="verticalSpacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<number>4</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="Fixed" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Courier</family>
|
||||
<pointsize>14</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>Hexadecimal network ID; click to copy to clipboard.</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QPushButton {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
QPushButton:focus {
|
||||
background-color: rgba(0,0,0,15);
|
||||
}
|
||||
|
||||
QPushButton:hover {
|
||||
background-color: rgba(0,0,0,15);
|
||||
}
|
||||
|
||||
QPushButton:pressed {
|
||||
background-color: rgba(0,0,0,75);
|
||||
}
|
||||
</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_5">
|
||||
<property name="text">
|
||||
<string>Type:</string>
|
||||
</property>
|
||||
@@ -194,10 +230,11 @@ QPushButton:pressed {
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="networkTypeLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
@@ -213,8 +250,13 @@ QPushButton:pressed {
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Status:</string>
|
||||
</property>
|
||||
@@ -223,7 +265,22 @@ QPushButton:pressed {
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Device:</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
@@ -257,6 +314,7 @@ QPushButton:pressed {
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
@@ -282,18 +340,21 @@ QPushButton:pressed {
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
<pointsize>10</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>How recently did this network refresh its settings?</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>(configuration is 0 seconds old)</string>
|
||||
<string>[0s ago]</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@@ -312,20 +373,11 @@ QPushButton:pressed {
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" 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="5" column="1">
|
||||
<item row="4" column="1">
|
||||
<widget class="QLabel" name="deviceLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
@@ -381,6 +433,7 @@ QPushButton:pressed {
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
<underline>false</underline>
|
||||
</font>
|
||||
</property>
|
||||
@@ -388,7 +441,7 @@ QPushButton:pressed {
|
||||
<string notr="true">padding: 0.1em 0 0.1em 0;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>IP Address Assignments</string>
|
||||
<string>IP Addresses</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
@@ -416,17 +469,7 @@ QPushButton:pressed {
|
||||
</font>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string>Double-click an IP to copy it to the clipboard.</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QListWidget {
|
||||
background-color: rgba(0,0,0,10);
|
||||
}
|
||||
|
||||
QListWidget:hover {
|
||||
background-color: rgba(0,0,0,15);
|
||||
}
|
||||
</string>
|
||||
<string>IP addresses assigned to this interface; click to copy to clipboard.</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
@@ -446,6 +489,9 @@ QListWidget:hover {
|
||||
<property name="sortingEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="class" stdset="0">
|
||||
<string notr="true">ipAddressList</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@@ -480,7 +526,7 @@ QListWidget:hover {
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="leaveNetworkButton">
|
||||
<widget class="QToolButton" name="leaveNetworkButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -490,32 +536,11 @@ QListWidget:hover {
|
||||
<property name="statusTip">
|
||||
<string>Leave this network.</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QPushButton {
|
||||
padding: 0.25em;
|
||||
border: 0;
|
||||
margin: 2px 0 2px 0;
|
||||
background-color: rgba(0,0,0,25);
|
||||
}
|
||||
|
||||
QPushButton:focus {
|
||||
background-color: rgba(0,0,0,33);
|
||||
}
|
||||
|
||||
QPushButton:hover {
|
||||
background-color: rgba(0,0,0,33);
|
||||
}
|
||||
|
||||
QPushButton:pressed {
|
||||
background-color: rgba(0,0,0,75);
|
||||
}
|
||||
</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Leave Network</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
<property name="class" stdset="0">
|
||||
<string notr="true">leaveNetworkButton</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -0,0 +1,170 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>QuickstartDialog</class>
|
||||
<widget class="QDialog" name="QuickstartDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>480</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Quick Start</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<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>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>785</width>
|
||||
<height>800</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<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>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background: #000000;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="resources.qrc">:/img/ZT1GUI.png</pixmap>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>10</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Select Help -> Quick Start to see this screen again.</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>702</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="okButton">
|
||||
<property name="text">
|
||||
<string>OK</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="resources.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>okButton</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>QuickstartDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>753</x>
|
||||
<y>457</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>399</x>
|
||||
<y>239</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -1,5 +1,9 @@
|
||||
<RCC>
|
||||
<qresource prefix="/img">
|
||||
<file>zt1icon.png</file>
|
||||
<file>ZT1GUI.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="/css">
|
||||
<file>stylesheet.css</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
@@ -0,0 +1,106 @@
|
||||
QToolButton {
|
||||
margin: 0;
|
||||
padding: 2px;
|
||||
text-align: center;
|
||||
background: palette(button);
|
||||
color: palette(button-text);
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
QToolButton:focus {
|
||||
border: 1px solid #000000;
|
||||
}
|
||||
QToolButton:hover {
|
||||
background: palette(highlight);
|
||||
color: palette(highlight-text);
|
||||
}
|
||||
QToolButton:pressed {
|
||||
border: 1px solid #000000;
|
||||
}
|
||||
|
||||
QToolButton.clickToCopy {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
color: palette(link);
|
||||
}
|
||||
QToolButton.clickToCopy:focus {
|
||||
text-decoration: underline;
|
||||
}
|
||||
QToolButton.clickToCopy:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
QToolButton.clickToCopy:pressed {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
QToolButton.leaveNetworkButton {
|
||||
margin: 0 4px 3px 0;
|
||||
}
|
||||
|
||||
QMainWindow {
|
||||
background: palette(dark);
|
||||
}
|
||||
|
||||
QListWidget {
|
||||
background: transparent;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
QListWidget::item {
|
||||
background: palette(base);
|
||||
margin: 1px 0 1px 0;
|
||||
}
|
||||
|
||||
QListWidget.ipAddressList {
|
||||
background: palette(button);
|
||||
margin: 0 4px 4px 0;
|
||||
}
|
||||
QListWidget.ipAddressList::item {
|
||||
background: transparent;
|
||||
color: palette(link);
|
||||
border-bottom: 1px solid transparent;
|
||||
}
|
||||
QListWidget.ipAddressList::item:selected {
|
||||
background: transparent;
|
||||
border-top: 0;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-bottom: 1px solid transparent;
|
||||
}
|
||||
QListWidget.ipAddressList::item:hover {
|
||||
border-bottom: 1px solid palette(link);
|
||||
}
|
||||
|
||||
QStatusBar {
|
||||
background: palette(button);
|
||||
}
|
||||
|
||||
QLabel.networkName {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#networkIdButton {
|
||||
padding: 0.2em 0 0 0;
|
||||
}
|
||||
|
||||
#joinNetworkButton {
|
||||
margin: 1px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#noNetworksLabel {
|
||||
background: transparent;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#networkListWidget {
|
||||
background: palette(dark);
|
||||
margin: 0 0 2px 0;
|
||||
}
|
||||
|
||||
#bottomContainerWidget {
|
||||
background: palette(base);
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# This script signs an installer, creates its .NFO file, and
|
||||
# copies it to a destination directory. This in turn can be
|
||||
# uploaded to the official ZeroTier Networks update site for
|
||||
# auto-updating binary distribution users.
|
||||
#
|
||||
# It's in attic/ because end-users won't find it particularly
|
||||
# useful. You must have the ZeroTier One official signing
|
||||
# identity secret keys to sign binary releases for auto-update,
|
||||
# and of course you'd also have to upload it to our servers.
|
||||
#
|
||||
|
||||
# Build the app and the installer, then run this from the root
|
||||
# of the source tree. It'll need the zerotier-idtool symlink
|
||||
# that will be placed there after a build, too.
|
||||
|
||||
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
||||
|
||||
if [ "$#" -ne 1 ]; then
|
||||
echo "Usage: $0 <path to secret signing identity>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -e zerotier-idtool ]; then
|
||||
echo "Unable to find zerotier-idtool in current directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
secret="$1"
|
||||
|
||||
if [ ! -e "$secret" ]; then
|
||||
echo "Can't find $secret"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -f *.nfo
|
||||
|
||||
for inst in `ls ZeroTierOneInstaller-*-*-*_*_*`; do
|
||||
echo "Found installer: $inst"
|
||||
nfo="$inst.nfo"
|
||||
rm -f "$nfo"
|
||||
echo "tss=`date`" >>"$nfo"
|
||||
echo "vMajor=`echo $inst | cut -d - -f 4 | cut -d _ -f 1`" >>"$nfo"
|
||||
echo "vMinor=`echo $inst | cut -d - -f 4 | cut -d _ -f 2`" >>"$nfo"
|
||||
echo "vRevision=`echo $inst | cut -d - -f 4 | cut -d _ -f 3`" >>"$nfo"
|
||||
echo "signedBy=`cat $secret | cut -d : -f 1`" >>"$nfo"
|
||||
echo "ed25519=`./zerotier-idtool sign $secret $inst`" >>"$nfo"
|
||||
echo "url=http://download.zerotier.com/$inst" >>"$nfo"
|
||||
done
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Completely useless to outsiders. :)
|
||||
|
||||
scp ZeroTierOneInstaller-*-*-*_*_* nyarlathotep.zerotier.com:/www/download.zerotier.com/htdocs
|
||||
|
||||
if [ -f 'ZeroTier One.dmg' ]; then
|
||||
scp 'ZeroTier One.dmg' nyarlathotep.zerotier.com:/www/download.zerotier.com/htdocs/dist
|
||||
fi
|
||||
File renamed without changes.
Loaded 20 of 114 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user