summaryrefslogtreecommitdiff
path: root/ZeroTierUI/networkwidget.cpp
blob: 2bbd23f7428c357e991dedb6f6472b8336829c57 (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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "networkwidget.h"
#include "mainwindow.h"
#include "ui_networkwidget.h"

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

NetworkWidget::NetworkWidget(QWidget *parent,const std::string &nwid) :
	QWidget(parent),
	ui(new Ui::NetworkWidget),
	networkIdStr(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 * 4);
	ui->ipListWidget->setMaximumHeight(lineHeight * 4);

	QWidgetList widgets = this->findChildren<QWidget*>();
	foreach(QWidget* widget, widgets)
		widget->setAttribute(Qt::WA_MacShowFocusRect,false);
}

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

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)");
	else ui->ageLabel->setText(QString());
}

void NetworkWidget::setNetworkName(const std::string &name)
{
	if (name == "?") {
		ui->nameLabel->setText((QString("( ")+this->networkId().c_str())+" )");
	} else {
		ui->nameLabel->setText(QString(name.c_str()));
	}
}

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

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

void NetworkWidget::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,Qt::MatchCaseSensitive).size() == 0)
			ui->ipListWidget->addItem(*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);
	}
}

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

void NetworkWidget::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 NetworkWidget::on_networkIdPushButton_clicked()
{
	QApplication::clipboard()->setText(ui->networkIdPushButton->text());
}

void NetworkWidget::on_ipListWidget_itemActivated(QListWidgetItem *item)
{
		if (item)
			QApplication::clipboard()->setText(item->text());
}