215 lines
8.2 KiB
C++
215 lines
8.2 KiB
C++
/*
|
||
* Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
|
||
*
|
||
* 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, 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/>.
|
||
*
|
||
*/
|
||
|
||
#include "confform.h"
|
||
#include "ui_confform.h"
|
||
#include "kylin-network-interface.h"
|
||
#include "backthread.h"
|
||
|
||
#include <unistd.h>
|
||
#include <stdlib.h>
|
||
|
||
extern QString llname, lwname;
|
||
|
||
ConfForm::ConfForm(QWidget *parent) :
|
||
QWidget(parent),
|
||
ui(new Ui::ConfForm)
|
||
{
|
||
ui->setupUi(this);
|
||
|
||
this->setWindowFlags(Qt::FramelessWindowHint);
|
||
|
||
this->setWindowTitle(tr("edit network"));//"网络设置"
|
||
|
||
ui->lbName->hide();
|
||
ui->lbTxt1->setText(tr("Method: "));//"编辑IP设置:"
|
||
ui->lbTxt2->setText(tr("Address: "));//"IP地址:"
|
||
ui->lbTxt3->setText(tr("Netmask: "));//"子网掩码:"
|
||
ui->lbTxt4->setText(tr("Gateway: "));//"默认网关:"
|
||
ui->lbTxt5->setText(tr("DNS 1: "));//"首选DNS:"
|
||
ui->lbTxt6->setText(tr("DNS 2: "));//"备选DNS:"
|
||
|
||
ui->lbTitle->setText(tr("Edit Conn"));//"网络设置"
|
||
ui->cbType->addItem(tr("Auto(DHCP)"));//"自动(DHCP)"
|
||
ui->cbType->addItem(tr("Manual"));//"手动"
|
||
|
||
connect(ui->cbType, SIGNAL(currentIndexChanged(int)), this, SLOT(cbTypeChanged(int)));
|
||
|
||
ui->cbMask->addItem("255.255.255.0");
|
||
ui->cbMask->addItem("255.255.0.0");
|
||
ui->cbMask->addItem("255.0.0.0");
|
||
|
||
ui->btnCancel->setText(tr("Cancel"));//"取消"
|
||
ui->btnOk->setText(tr("Save"));//"确定"
|
||
|
||
ui->centralWidget->setStyleSheet("#centralWidget{border:1px solid #297a97;background-color:#ffffff;}");
|
||
ui->lbIcon->setStyleSheet("QLabel{background-image:url(:/res/s/setting.png)}");
|
||
ui->lbTitle->setStyleSheet("QLabel{font-size:12px;color:#ffffff;}");
|
||
ui->lbTxt1->setStyleSheet("QLabel{font-weight:100;font-size:13px;color:#000000;}");
|
||
ui->lbTxt2->setStyleSheet("QLabel{font-weight:100;font-size:13px;color:#000000;}");
|
||
ui->lbTxt3->setStyleSheet("QLabel{font-weight:100;font-size:13px;color:#000000;}");
|
||
ui->lbTxt4->setStyleSheet("QLabel{font-weight:100;font-size:13px;color:#000000;}");
|
||
ui->lbTxt5->setStyleSheet("QLabel{font-weight:100;font-size:13px;color:#000000;}");
|
||
ui->lbTxt6->setStyleSheet("QLabel{font-weight:100;font-size:13px;color:#000000;}");
|
||
ui->wdLeftup->setStyleSheet("#wdLeftup{background-color:#266ab5;}");
|
||
ui->wdHead->setStyleSheet("#wdHead{background-color:#f5f6f7}");
|
||
ui->wdBottom->setStyleSheet("#wdBottom{background-color:#f5f6f7}");
|
||
ui->lbTraingle->setStyleSheet("QLabel{background-image:url(:/res/g/triangle.png)}");
|
||
ui->cbType->setStyleSheet("QComboBox{padding-left:20px;font-size:13px;border:1px solid #aaaaaa;}"
|
||
"QComboBox::drop-down{border:0;width:30px;}"
|
||
"QComboBox::down-arrow{image:url(:/res/g/down_arrow.png);}");
|
||
ui->cbMask->setStyleSheet("QComboBox{padding-left:20px;font-size:13px;border:1px solid #aaaaaa;}"
|
||
"QComboBox::drop-down{border:0;width:30px;}"
|
||
"QComboBox::down-arrow{image:url(:/res/g/down_arrow.png);}");
|
||
ui->leAddr->setStyleSheet("#leAddr{padding-left:20px;font-size:13px;border:1px solid #aaaaaa;}");
|
||
ui->leGateway->setStyleSheet("#leGateway{padding-left:20px;font-size:13px;border:1px solid #aaaaaa;}");
|
||
ui->leDns->setStyleSheet("#leDns{padding-left:20px;font-size:13px;border:1px solid #aaaaaa;}");
|
||
ui->leDns2->setStyleSheet("#leDns2{padding-left:20px;font-size:13px;border:1px solid #aaaaaa;}");
|
||
ui->btnCancel->setStyleSheet("QPushButton{border:1px solid #aaaaaa;background-color:#f5f5f5;}"
|
||
"QPushButton:Hover{border:2px solid #629ee8;background-color:#eeeeee;}"
|
||
"QPushButton:Pressed{border:1px solid #aaaaaa;background-color:#d8d8d8;}");
|
||
ui->btnOk->setStyleSheet("QPushButton{border:1px solid #aaaaaa;background-color:#f5f5f5;}"
|
||
"QPushButton:Hover{border:2px solid #629ee8;background-color:#eeeeee;}"
|
||
"QPushButton:Pressed{border:1px solid #aaaaaa;background-color:#d8d8d8;}");
|
||
|
||
// IP的正则格式限制
|
||
QRegExp rx("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");
|
||
ui->leAddr->setValidator(new QRegExpValidator(rx, this));
|
||
ui->leGateway->setValidator(new QRegExpValidator(rx, this));
|
||
ui->leDns->setValidator(new QRegExpValidator(rx, this));
|
||
ui->leDns2->setValidator(new QRegExpValidator(rx, this));
|
||
}
|
||
|
||
ConfForm::~ConfForm()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
void ConfForm::mousePressEvent(QMouseEvent *event){
|
||
if(event->button() == Qt::LeftButton){
|
||
this->isPress = true;
|
||
this->winPos = this->pos();
|
||
this->dragPos = event->globalPos();
|
||
event->accept();
|
||
}
|
||
}
|
||
void ConfForm::mouseReleaseEvent(QMouseEvent *event){
|
||
this->isPress = false;
|
||
this->setWindowOpacity(1);
|
||
}
|
||
void ConfForm::mouseMoveEvent(QMouseEvent *event){
|
||
if(this->isPress){
|
||
this->move(this->winPos - (this->dragPos - event->globalPos()));
|
||
this->setWindowOpacity(0.9);
|
||
event->accept();
|
||
}
|
||
}
|
||
|
||
void ConfForm::setProp(QString connName, QString v4method, QString addr, QString mask, QString gateway, QString dns, bool isActConf){
|
||
this->isActConf = isActConf;
|
||
ui->lbName->setText(connName);
|
||
|
||
if(v4method == "auto" || v4method == ""){
|
||
ui->cbType->setCurrentIndex(0);
|
||
cbTypeChanged(0);
|
||
}else{
|
||
ui->cbType->setCurrentIndex(1);
|
||
cbTypeChanged(1);
|
||
}
|
||
|
||
ui->leAddr->setText(addr);
|
||
ui->leGateway->setText(gateway);
|
||
|
||
// 配置中有多个DNS,只处理前两个
|
||
if(dns.indexOf(",") != -1){
|
||
QStringList dnss = dns.split(",");
|
||
ui->leDns->setText(dnss.at(0));
|
||
ui->leDns2->setText(dnss.at(1));
|
||
}else{
|
||
ui->leDns->setText(dns);
|
||
ui->leDns2->setText("");
|
||
}
|
||
|
||
if(mask == "24"){
|
||
ui->cbMask->setCurrentIndex(0);
|
||
}else if(mask == "16"){
|
||
ui->cbMask->setCurrentIndex(1);
|
||
}else if(mask == "8"){
|
||
ui->cbMask->setCurrentIndex(2);
|
||
}else{
|
||
ui->cbMask->setCurrentIndex(0);
|
||
}
|
||
}
|
||
|
||
void ConfForm::on_btnOk_clicked()
|
||
{
|
||
QString mask = "";
|
||
if(ui->cbMask->currentIndex() == 0){
|
||
mask = "24";
|
||
}else if(ui->cbMask->currentIndex() == 1){
|
||
mask = "16";
|
||
}else if(ui->cbMask->currentIndex() == 2){
|
||
mask = "8";
|
||
}else{
|
||
mask = "24";
|
||
}
|
||
|
||
if(ui->cbType->currentIndex() == 0){
|
||
kylin_network_set_automethod(ui->lbName->text().toUtf8().data());
|
||
}else{
|
||
QString dnss = ui->leDns->text();
|
||
if(ui->leDns2->text() != ""){
|
||
dnss.append(",");
|
||
dnss.append(ui->leDns2->text());
|
||
}
|
||
kylin_network_set_manualall(ui->lbName->text().toUtf8().data(), ui->leAddr->text().toUtf8().data(), mask.toUtf8().data(), ui->leGateway->text().toUtf8().data(), dnss.toUtf8().data());
|
||
}
|
||
|
||
this->hide();
|
||
|
||
// 如果是修改当前连接的网络,则修改设置后简略重连网络
|
||
if(this->isActConf == true){
|
||
QString cmd = "/usr/share/kylin-nm/shell/connup.sh '" + ui->lbName->text() + "'";
|
||
system(cmd.toUtf8().data());
|
||
|
||
QString txt(tr("New settings already effective"));
|
||
cmd = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';notify-send '" + txt + "' -t 3800";
|
||
system(cmd.toUtf8().data());
|
||
}
|
||
}
|
||
|
||
void ConfForm::on_btnCancel_clicked()
|
||
{
|
||
this->hide();
|
||
}
|
||
|
||
void ConfForm::cbTypeChanged(int index){
|
||
if(index == 0){
|
||
ui->wgManual->hide();
|
||
ui->centralWidget->resize(432, 178);
|
||
ui->wdBottom->move(1, 117);
|
||
this->resize(432, 178);
|
||
}
|
||
if(index == 1){
|
||
ui->wgManual->show();
|
||
ui->centralWidget->resize(432, 442);
|
||
ui->wdBottom->move(1, 381);
|
||
this->resize(432, 442);
|
||
}
|
||
}
|