summaryrefslogtreecommitdiff
path: root/ZeroTierUI/network.cpp
blob: 1a6a631d7ce2afa35f786846e83dc846ea42bf72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "network.h"
#include "mainwindow.h"
#include "ui_network.h"

#include <QClipboard>
#include <QString>
#include <QStringList>
#include <QCoreApplication>
#include <QProcess>
#include <QList>
#include <QMessageBox>

Network::Network(QWidget *parent,const std::string &nwid) :
	QWidget(parent),
	ui(new Ui::Network),
	networkIdStr(nwid)
{
	ui->setupUi(this);
	ui->networkIdPushButton->setText(QString(nwid.c_str()));
}

Network::~Network()
{
	delete ui;
}

void Network::setStatus(const std::string &status)
{
	ui->statusLabel->setText(QString(status.c_str()));
}

void Network::setNetworkName(const std::string &status)
{
	ui->nameLabel->setText(QString(status.c_str()));
}

void Network::setNetworkType(const std::string &type)
{
	ui->networkTypeLabel->setText(QString(status.c_str()));
	if (type == "?")
		ui->networkTypeLabel->setToolTip("Waiting for configuration...");
	else if (type == "public")
		ui->networkTypeLabel->setToolTip("This network can be joined by anyone.");
	else if (type == "private")
		ui->networkTypeLabel->setToolTip("This network is private, only authorized peers can join.");
	else ui->networkTypeLabel->setToolTip(QString());
}

void Network::setNetworkDeviceName(const std::string &dev)
{
	ui->deviceLabel->setText(QString(dev.c_str()));
}

void Network::setIps(const std::string &commaSeparatedList)
{
	QStringList ips(QString(commaSeparatedList.c_str()).split(QChar(','),QString::SkipEmptyParts));
	if (commaSeparatedList == "-")
		ips.clear();

	QStringList tmp;
	ips.sort();
	for(QStringList::iterator i(ips.begin());i!=ips.end();++i) {
		QString ipOnly(*i);
		int slashIdx = ipOnly.indexOf('/');
		if (slashIdx > 0)
			ipOnly.truncate(slashIdx);
		tmp.append(ipOnly);
	}
	ips = tmp;

	for(QStringList::iterator i(ips.begin());i!=ips.end();++i) {
		if (ui->ipListWidget->findItems(*i).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;
		if (!ips.contains(item->text()))
			ui->ipListWidget->removeItemWidget(item);
	}
}

const std::string &Network::networkId()
{
	return networkIdStr;
}

void Network::on_leaveNetworkButton_clicked()
{
	if (QMessageBox::question(this,"Leave Network?",QString("Are you sure you want to leave network '") + networkIdStr.c_str() + "'?",QMessageBox::No,QMessageBox::Yes) == QMessageBox::Yes) {
		zeroTierClient->send((QString("leave ") + networkIdStr.c_str()).toStdString());
		this->setEnabled(false);
	}
}

void Network::on_networkIdPushButton_clicked()
{
	QApplication::clipboard()->setText(ui->networkIdPushButton->text());
}