2014-01-10 15:27:44 -08:00
/*
* ZeroTier One - Global Peer to Peer Ethernet
* Copyright ( C ) 2012 - 2013 ZeroTier Networks LLC
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
*
* - -
*
* ZeroTier may be used and distributed under the terms of the GPLv3 , which
* are available at : http : //www.gnu.org/licenses/gpl-3.0.html
*
* If you would like to embed ZeroTier into a commercial application or
* redistribute it in a modified binary form , please contact ZeroTier Networks
* LLC . Start here : http : //www.zerotier.com/
*/
2013-12-12 15:47:00 -08:00
# include "networkwidget.h"
2013-11-20 16:16:30 -05:00
# include "mainwindow.h"
2013-12-12 15:47:00 -08:00
# include "ui_networkwidget.h"
2013-11-13 16:50:49 -05:00
2013-11-18 12:01:33 -05:00
# include <QClipboard>
2013-11-20 16:16:30 -05:00
# include <QString>
# include <QStringList>
# include <QCoreApplication>
# include <QProcess>
# include <QList>
# include <QMessageBox>
2014-01-26 22:24:29 -08:00
# include <QFont>
# include "../node/Constants.hpp"
2013-11-18 12:01:33 -05:00
2013-12-12 15:47:00 -08:00
NetworkWidget : : NetworkWidget ( QWidget * parent , const std : : string & nwid ) :
2013-11-18 12:01:33 -05:00
QWidget ( parent ) ,
2013-12-12 15:47:00 -08:00
ui ( new Ui : : NetworkWidget ) ,
2013-11-20 16:16:30 -05:00
networkIdStr ( nwid )
2013-11-13 16:50:49 -05:00
{
ui - > setupUi ( this ) ;
2014-01-24 13:26:24 -08:00
ui - > networkIdButton - > setText ( QString ( nwid . c_str ( ) ) ) ;
2013-12-19 14:59:52 -08:00
2013-11-21 13:45:44 -05:00
QFontMetrics fm ( ui - > ipListWidget - > font ( ) ) ;
int lineHeight = ui - > ipListWidget - > spacing ( ) + fm . height ( ) ;
2013-12-19 14:59:52 -08:00
ui - > ipListWidget - > setMinimumHeight ( lineHeight * 4 ) ;
ui - > ipListWidget - > setMaximumHeight ( lineHeight * 4 ) ;
2014-01-26 22:24:29 -08:00
# ifdef __APPLE__
2013-12-19 14:59:52 -08:00
QWidgetList widgets = this - > findChildren < QWidget * > ( ) ;
foreach ( QWidget * widget , widgets )
widget - > setAttribute ( Qt : : WA_MacShowFocusRect , false ) ;
2014-01-26 22:24:29 -08:00
# 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
2013-11-13 16:50:49 -05:00
}
2013-12-12 15:47:00 -08:00
NetworkWidget : : ~ NetworkWidget ( )
2013-11-13 16:50:49 -05:00
{
delete ui ;
}
2013-11-18 12:01:33 -05:00
2013-12-12 15:47:00 -08:00
void NetworkWidget : : setStatus ( const std : : string & status , const std : : string & age )
2013-11-20 16:16:30 -05:00
{
ui - > statusLabel - > setText ( QString ( status . c_str ( ) ) ) ;
2013-11-21 15:11:22 -05:00
if ( status = = " OK " )
2014-01-24 13:26:24 -08:00
ui - > ageLabel - > setText ( QString ( " [ " ) + age . c_str ( ) + " s ago] " ) ;
2013-11-21 15:11:22 -05:00
else ui - > ageLabel - > setText ( QString ( ) ) ;
2013-11-20 16:16:30 -05:00
}
2013-12-12 15:47:00 -08:00
void NetworkWidget : : setNetworkName ( const std : : string & name )
2013-11-20 16:16:30 -05:00
{
2013-12-19 14:59:52 -08:00
if ( name = = " ? " ) {
2013-12-19 18:15:34 -08:00
ui - > nameLabel - > setText ( " ... waiting ... " ) ;
ui - > nameLabel - > setEnabled ( false ) ;
2013-12-19 14:59:52 -08:00
} else {
ui - > nameLabel - > setText ( QString ( name . c_str ( ) ) ) ;
2013-12-19 18:15:34 -08:00
ui - > nameLabel - > setEnabled ( true ) ;
2013-12-19 14:59:52 -08:00
}
2013-11-20 16:16:30 -05:00
}
2013-12-12 15:47:00 -08:00
void NetworkWidget : : setNetworkType ( const std : : string & type )
2013-11-20 16:16:30 -05:00
{
2013-11-20 18:29:02 -05:00
ui - > networkTypeLabel - > setText ( QString ( type . c_str ( ) ) ) ;
2013-11-20 16:16:30 -05:00
if ( type = = " ? " )
2013-12-19 14:59:52 -08:00
ui - > networkTypeLabel - > setStatusTip ( " Waiting for configuration... " ) ;
2013-11-20 16:16:30 -05:00
else if ( type = = " public " )
2013-12-19 14:59:52 -08:00
ui - > networkTypeLabel - > setStatusTip ( " This network can be joined by anyone in the world. " ) ;
2013-11-20 16:16:30 -05:00
else if ( type = = " private " )
2013-12-19 14:59:52 -08:00
ui - > networkTypeLabel - > setStatusTip ( " This network is private; only authorized peers can join. " ) ;
else ui - > networkTypeLabel - > setStatusTip ( " Unknown network type. " ) ;
2013-11-20 16:16:30 -05:00
}
2013-12-12 15:47:00 -08:00
void NetworkWidget : : setNetworkDeviceName ( const std : : string & dev )
2013-11-20 16:16:30 -05:00
{
ui - > deviceLabel - > setText ( QString ( dev . c_str ( ) ) ) ;
}
2013-12-12 15:47:00 -08:00
void NetworkWidget : : setIps ( const std : : string & commaSeparatedList )
2013-11-20 16:16:30 -05:00
{
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 ) {
2013-11-20 18:29:02 -05:00
if ( ui - > ipListWidget - > findItems ( * i , Qt : : MatchCaseSensitive ) . size ( ) = = 0 )
2013-11-20 16:16:30 -05:00
ui - > ipListWidget - > addItem ( * i ) ;
}
2013-11-20 18:29:02 -05:00
for ( int i = 0 ; i < ui - > ipListWidget - > count ( ) ; + + i ) {
QListWidgetItem * item = ui - > ipListWidget - > item ( i ) ;
2013-11-20 16:16:30 -05:00
if ( ! ips . contains ( item - > text ( ) ) )
ui - > ipListWidget - > removeItemWidget ( item ) ;
}
}
2013-12-12 15:47:00 -08:00
const std : : string & NetworkWidget : : networkId ( )
2013-11-20 16:16:30 -05:00
{
return networkIdStr ;
}
2013-12-12 15:47:00 -08:00
void NetworkWidget : : on_leaveNetworkButton_clicked ( )
2013-11-18 12:01:33 -05:00
{
2013-11-20 16:16:30 -05:00
if ( QMessageBox : : question ( this , " Leave Network? " , QString ( " Are you sure you want to leave network ' " ) + networkIdStr . c_str ( ) + " '? " , QMessageBox : : No , QMessageBox : : Yes ) = = QMessageBox : : Yes ) {
this - > setEnabled ( false ) ;
2013-12-20 16:07:20 -08:00
zeroTierClient - > send ( ( QString ( " leave " ) + networkIdStr . c_str ( ) ) . toStdString ( ) ) ;
2013-11-20 16:16:30 -05:00
}
2013-11-18 12:01:33 -05:00
}
2014-01-24 13:26:24 -08:00
void NetworkWidget : : on_networkIdButton_clicked ( )
2013-11-18 12:01:33 -05:00
{
2014-01-24 13:26:24 -08:00
QApplication : : clipboard ( ) - > setText ( ui - > networkIdButton - > text ( ) ) ;
2013-11-18 12:01:33 -05:00
}
2013-12-17 18:20:20 -08:00
2013-12-18 16:52:21 -08:00
void NetworkWidget : : on_ipListWidget_itemActivated ( QListWidgetItem * item )
2013-12-17 18:20:20 -08:00
{
2014-01-27 14:55:56 -08:00
if ( item )
QApplication : : clipboard ( ) - > setText ( item - > text ( ) ) ;
}
void NetworkWidget : : on_ipListWidget_currentItemChanged ( QListWidgetItem * current , QListWidgetItem * previous )
{
if ( current )
QApplication : : clipboard ( ) - > setText ( current - > text ( ) ) ;
2013-12-17 18:20:20 -08:00
}