From 76877f737e87d5e965b582d32a86f9d09fee381c Mon Sep 17 00:00:00 2001 From: arcan1s Date: Tue, 25 Feb 2014 02:06:33 +0400 Subject: [PATCH] added several function to profile tab --- sources/gui/src/bridgewidget.cpp | 9 ++ sources/gui/src/bridgewidget.h | 1 + sources/gui/src/ethernetwidget.cpp | 9 ++ sources/gui/src/ethernetwidget.h | 1 + sources/gui/src/generalwidget.cpp | 11 ++ sources/gui/src/generalwidget.h | 3 + sources/gui/src/ipwidget.cpp | 9 ++ sources/gui/src/ipwidget.h | 1 + sources/gui/src/mainwindow.cpp | 207 ++++++++++++++++++++++++++++- sources/gui/src/mainwindow.h | 8 +- sources/gui/src/mainwindow.ui | 15 ++- sources/gui/src/mobilewidget.cpp | 9 ++ sources/gui/src/mobilewidget.h | 1 + sources/gui/src/netctlprofile.cpp | 32 +++++ sources/gui/src/netctlprofile.h | 1 + sources/gui/src/pppoewidget.cpp | 9 ++ sources/gui/src/pppoewidget.h | 1 + sources/gui/src/sleepthread.h | 3 +- sources/gui/src/tunnelwidget.cpp | 9 ++ sources/gui/src/tunnelwidget.h | 1 + sources/gui/src/tuntapwidget.cpp | 9 ++ sources/gui/src/tuntapwidget.h | 1 + sources/gui/src/vlanwidget.cpp | 9 ++ sources/gui/src/vlanwidget.h | 1 + sources/gui/src/wirelesswidget.cpp | 9 ++ sources/gui/src/wirelesswidget.h | 1 + 26 files changed, 358 insertions(+), 12 deletions(-) diff --git a/sources/gui/src/bridgewidget.cpp b/sources/gui/src/bridgewidget.cpp index 3848e2a..5badf15 100644 --- a/sources/gui/src/bridgewidget.cpp +++ b/sources/gui/src/bridgewidget.cpp @@ -40,6 +40,15 @@ void BridgeWidget::clear() } +void BridgeWidget::setShown(bool state) +{ + if (state) + BridgeWidget::show(); + else + BridgeWidget::hide(); +} + + QHash BridgeWidget::getSettings() { QHash bridgeSettings; diff --git a/sources/gui/src/bridgewidget.h b/sources/gui/src/bridgewidget.h index e91b348..f4dbb92 100644 --- a/sources/gui/src/bridgewidget.h +++ b/sources/gui/src/bridgewidget.h @@ -38,6 +38,7 @@ public: public slots: void clear(); + void setShown(bool state); private: Ui::BridgeWidget *ui; diff --git a/sources/gui/src/ethernetwidget.cpp b/sources/gui/src/ethernetwidget.cpp index 518206c..f1b6688 100644 --- a/sources/gui/src/ethernetwidget.cpp +++ b/sources/gui/src/ethernetwidget.cpp @@ -54,6 +54,15 @@ void EthernetWidget::clear() } +void EthernetWidget::setShown(bool state) +{ + if (state) + EthernetWidget::show(); + else + EthernetWidget::hide(); +} + + void EthernetWidget::createActions() { connect(ui->pushButton_ethernetAdvanced, SIGNAL(clicked(bool)), this, SLOT(showAdvanced())); diff --git a/sources/gui/src/ethernetwidget.h b/sources/gui/src/ethernetwidget.h index e962b8d..8bb858f 100644 --- a/sources/gui/src/ethernetwidget.h +++ b/sources/gui/src/ethernetwidget.h @@ -39,6 +39,7 @@ public: public slots: void clear(); + void setShown(bool state); private slots: void selectWpaConfig(); diff --git a/sources/gui/src/generalwidget.cpp b/sources/gui/src/generalwidget.cpp index 045290b..cd76b31 100644 --- a/sources/gui/src/generalwidget.cpp +++ b/sources/gui/src/generalwidget.cpp @@ -28,6 +28,7 @@ GeneralWidget::GeneralWidget(QWidget *parent, QString ifaceDir, QString profileD ui(new Ui::GeneralWidget) { ui->setupUi(this); + connectionType = ui->comboBox_connection; createActions(); clear(); } @@ -35,6 +36,7 @@ GeneralWidget::GeneralWidget(QWidget *parent, QString ifaceDir, QString profileD GeneralWidget::~GeneralWidget() { + delete connectionType; delete ifaceDirectory; delete profileDirectory; delete ui; @@ -64,6 +66,15 @@ void GeneralWidget::clear() } +void GeneralWidget::setShown(bool state) +{ + if (state) + GeneralWidget::show(); + else + GeneralWidget::hide(); +} + + void GeneralWidget::createActions() { connect(ui->pushButton_generalAdvanced, SIGNAL(clicked(bool)), this, SLOT(showAdvanced())); diff --git a/sources/gui/src/generalwidget.h b/sources/gui/src/generalwidget.h index e4ac582..3846fdf 100644 --- a/sources/gui/src/generalwidget.h +++ b/sources/gui/src/generalwidget.h @@ -18,6 +18,7 @@ #ifndef GENERALWIDGET_H #define GENERALWIDGET_H +#include #include #include #include @@ -36,12 +37,14 @@ public: QString ifaceDir = QString(""), QString profileDir = QString("")); ~GeneralWidget(); + QComboBox *connectionType; QHash getSettings(); int isOk(); void setSettings(QHash settings); public slots: void clear(); + void setShown(bool state); private slots: void addAfter(); diff --git a/sources/gui/src/ipwidget.cpp b/sources/gui/src/ipwidget.cpp index d2e5507..a2f97c6 100644 --- a/sources/gui/src/ipwidget.cpp +++ b/sources/gui/src/ipwidget.cpp @@ -89,6 +89,15 @@ void IpWidget::clear() } +void IpWidget::setShown(bool state) +{ + if (state) + IpWidget::show(); + else + IpWidget::hide(); +} + + void IpWidget::createActions() { connect(ui->pushButton_ipAdvanced, SIGNAL(clicked(bool)), this, SLOT(showAdvanced())); diff --git a/sources/gui/src/ipwidget.h b/sources/gui/src/ipwidget.h index 43cb3e7..3ed72fa 100644 --- a/sources/gui/src/ipwidget.h +++ b/sources/gui/src/ipwidget.h @@ -38,6 +38,7 @@ public: public slots: void clear(); + void setShown(bool state); private slots: // buttons diff --git a/sources/gui/src/mainwindow.cpp b/sources/gui/src/mainwindow.cpp index 58b3062..13e7d6c 100644 --- a/sources/gui/src/mainwindow.cpp +++ b/sources/gui/src/mainwindow.cpp @@ -18,7 +18,7 @@ #include "mainwindow.h" #include "ui_mainwindow.h" -#include +#include #include #include "bridgewidget.h" @@ -45,12 +45,11 @@ MainWindow::MainWindow(QWidget *parent, bool defaultSettings, int tabNum) { ui->setupUi(this); ui->tabWidget->setCurrentIndex(tabNum-1); - ui->statusBar->showMessage(QApplication::translate("MainWindow", "Ready")); // SettingsWindow *settingsWindow; // settingsWindow = new SettingsWindow(this); // if (defaultSettings) - // тандартные настройки + // стандартные настройки // delete settingsWindow; // temporary block @@ -68,7 +67,6 @@ MainWindow::MainWindow(QWidget *parent, bool defaultSettings, int tabNum) wpaConfig.append(QString("/run/wpa_supplicant_netctl-gui")); wpaConfig.append(QString("users")); - // gui generalWid = new GeneralWidget(this, ifaceDir, profileDir); ui->scrollAreaWidgetContents->layout()->addWidget(generalWid); @@ -97,6 +95,7 @@ MainWindow::MainWindow(QWidget *parent, bool defaultSettings, int tabNum) createActions(); updateTabs(ui->tabWidget->currentIndex()); + ui->statusBar->showMessage(QApplication::translate("MainWindow", "Ready")); } @@ -165,6 +164,13 @@ void MainWindow::createActions() connect(ui->tableWidget_main, SIGNAL(itemActivated(QTableWidgetItem *)), this, SLOT(mainTabStartProfile())); connect(ui->tableWidget_main, SIGNAL(currentItemChanged(QTableWidgetItem *, QTableWidgetItem *)), this, SLOT(mainTabRefreshButtons(QTableWidgetItem *, QTableWidgetItem *))); + // profile tab events + connect(ui->lineEdit_profile, SIGNAL(returnPressed()), this, SLOT(profileTabLoadProfile())); + connect(ui->pushButton_profile, SIGNAL(clicked(bool)), this, SLOT(profileTabBrowseProfile())); + connect(ui->pushButton_profileClear, SIGNAL(clicked(bool)), this, SLOT(profileTabClear())); + connect(ui->pushButton_profileLoad, SIGNAL(clicked(bool)), this, SLOT(profileTabLoadProfile())); + connect(generalWid->connectionType, SIGNAL(currentIndexChanged(QString)), this, SLOT(profileTabChangeState(QString))); + // wifi page events connect(ui->pushButton_wifiRefresh, SIGNAL(clicked(bool)), this, SLOT(updateWifiTab())); connect(ui->pushButton_wifiStart, SIGNAL(clicked(bool)), this, SLOT(wifiTabStart())); @@ -229,7 +235,7 @@ void MainWindow::updateMainTab() void MainWindow::updateProfileTab() { - + profileTabClear(); } @@ -393,6 +399,197 @@ void MainWindow::mainTabRefreshButtons(QTableWidgetItem *current, QTableWidgetIt } +// profile tab slots +void MainWindow::profileTabBrowseProfile() +{ + QString filename = QFileDialog::getSaveFileName( + this, + QApplication::translate("MainWindow", "Save profile as..."), + QString("/etc/netctl/"), + QApplication::translate("MainWindow", "Profile (*)")); + if (!filename.isEmpty()) + ui->lineEdit_profile->setText(filename); +} + + +void MainWindow::profileTabClear() +{ + ui->lineEdit_profile->clear(); + + generalWid->clear(); + ipWid->clear(); + bridgeWid->clear(); + ethernetWid->clear(); + mobileWid->clear(); + pppoeWid->clear(); + tunnelWid->clear(); + tuntapWid->clear(); + vlanWid->clear(); + wirelessWid->clear(); + + profileTabChangeState(generalWid->connectionType->currentText()); +} + + +void MainWindow::profileTabChangeState(QString current) +{ + if (current == QString("ethernet")) { + generalWid->setShown(true); + ipWid->setShown(true); + bridgeWid->setShown(false); + ethernetWid->setShown(true); + mobileWid->setShown(false); + pppoeWid->setShown(false); + tunnelWid->setShown(false); + tuntapWid->setShown(false); + vlanWid->setShown(false); + wirelessWid->setShown(false); + } + else if (current == QString("wireless")) { + generalWid->setShown(true); + ipWid->setShown(true); + bridgeWid->setShown(false); + ethernetWid->setShown(false); + mobileWid->setShown(false); + pppoeWid->setShown(false); + tunnelWid->setShown(false); + tuntapWid->setShown(false); + vlanWid->setShown(false); + wirelessWid->setShown(true); + } + else if ((current == QString("bond")) || + (current == QString("dummy"))) { + generalWid->setShown(true); + ipWid->setShown(true); + bridgeWid->setShown(false); + ethernetWid->setShown(false); + mobileWid->setShown(false); + pppoeWid->setShown(false); + tunnelWid->setShown(false); + tuntapWid->setShown(false); + vlanWid->setShown(false); + wirelessWid->setShown(false); + } + else if (current == QString("bridge")) { + generalWid->setShown(true); + ipWid->setShown(true); + bridgeWid->setShown(true); + ethernetWid->setShown(false); + mobileWid->setShown(false); + pppoeWid->setShown(false); + tunnelWid->setShown(false); + tuntapWid->setShown(false); + vlanWid->setShown(false); + wirelessWid->setShown(false); + } + else if (current == QString("pppoe")) { + generalWid->setShown(true); + ipWid->setShown(false); + bridgeWid->setShown(false); + ethernetWid->setShown(false); + mobileWid->setShown(false); + pppoeWid->setShown(true); + tunnelWid->setShown(false); + tuntapWid->setShown(false); + vlanWid->setShown(false); + wirelessWid->setShown(false); + } + else if (current == QString("mobile_ppp")) { + generalWid->setShown(true); + ipWid->setShown(false); + bridgeWid->setShown(false); + ethernetWid->setShown(false); + mobileWid->setShown(true); + pppoeWid->setShown(false); + tunnelWid->setShown(false); + tuntapWid->setShown(false); + vlanWid->setShown(false); + wirelessWid->setShown(false); + } + else if (current == QString("tunnel")) { + generalWid->setShown(true); + ipWid->setShown(true); + bridgeWid->setShown(false); + ethernetWid->setShown(false); + mobileWid->setShown(false); + pppoeWid->setShown(false); + tunnelWid->setShown(true); + tuntapWid->setShown(false); + vlanWid->setShown(false); + wirelessWid->setShown(false); + } + else if (current == QString("tuntap")) { + generalWid->setShown(true); + ipWid->setShown(true); + bridgeWid->setShown(false); + ethernetWid->setShown(false); + mobileWid->setShown(false); + pppoeWid->setShown(false); + tunnelWid->setShown(false); + tuntapWid->setShown(true); + vlanWid->setShown(false); + wirelessWid->setShown(false); + } + else if (current == QString("vlan")) { + generalWid->setShown(true); + ipWid->setShown(true); + bridgeWid->setShown(false); + ethernetWid->setShown(true); + mobileWid->setShown(false); + pppoeWid->setShown(false); + tunnelWid->setShown(false); + tuntapWid->setShown(false); + vlanWid->setShown(true); + wirelessWid->setShown(false); + } +} + + +void MainWindow::profileTabLoadProfile() +{ + QString profile = ui->lineEdit_profile->text(); + QHash settings = netctlProfile->getSettingsFromProfile(profile); + printf("%i\n", settings.count()); + + generalWid->setSettings(settings); + if (generalWid->connectionType->currentText() == QString("ethernet")) { + ipWid->setSettings(settings); + ethernetWid->setSettings(settings); + } + else if (generalWid->connectionType->currentText() == QString("wireless")) { + ipWid->setSettings(settings); + wirelessWid->setSettings(settings); + } + else if ((generalWid->connectionType->currentText() == QString("bond")) || + (generalWid->connectionType->currentText() == QString("dummy"))) { + ipWid->setSettings(settings); + } + else if (generalWid->connectionType->currentText() == QString("bridge")) { + ipWid->setSettings(settings); + bridgeWid->setSettings(settings); + } + else if (generalWid->connectionType->currentText() == QString("pppoe")) { + pppoeWid->setSettings(settings); + } + else if (generalWid->connectionType->currentText() == QString("mobile_ppp")) { + mobileWid->setSettings(settings); + } + else if (generalWid->connectionType->currentText() == QString("tunnel")) { + ipWid->setSettings(settings); + tunnelWid->setSettings(settings); + } + else if (generalWid->connectionType->currentText() == QString("tuntap")) { + ipWid->setSettings(settings); + tuntapWid->setSettings(settings); + } + else if (generalWid->connectionType->currentText() == QString("vlan")) { + ipWid->setSettings(settings); + ethernetWid->setSettings(settings); + vlanWid->setSettings(settings); + } +} + + // wifi tab slots void MainWindow::wifiTabSetEnabled(bool state) { diff --git a/sources/gui/src/mainwindow.h b/sources/gui/src/mainwindow.h index b8bfaea..aafe90f 100644 --- a/sources/gui/src/mainwindow.h +++ b/sources/gui/src/mainwindow.h @@ -19,9 +19,8 @@ #define MAINWINDOW_H #include -#include -#include #include +#include class BridgeWidget; @@ -79,6 +78,11 @@ private slots: void mainTabRestartProfile(); void mainTabStartProfile(); void mainTabRefreshButtons(QTableWidgetItem *current, QTableWidgetItem *previous); + // profile tab slots + void profileTabBrowseProfile(); + void profileTabChangeState(QString current); + void profileTabClear(); + void profileTabLoadProfile(); // wifi tab slots void wifiTabSetEnabled(bool state); void wifiTabStart(); diff --git a/sources/gui/src/mainwindow.ui b/sources/gui/src/mainwindow.ui index 23e62b3..dd73aa8 100644 --- a/sources/gui/src/mainwindow.ui +++ b/sources/gui/src/mainwindow.ui @@ -18,7 +18,7 @@ - 0 + 1 @@ -190,8 +190,8 @@ 0 0 - 429 - 348 + 439 + 357 @@ -213,6 +213,13 @@ + + + + Load + + + @@ -349,7 +356,7 @@ 0 0 471 - 20 + 23 diff --git a/sources/gui/src/mobilewidget.cpp b/sources/gui/src/mobilewidget.cpp index 3409062..3239a7c 100644 --- a/sources/gui/src/mobilewidget.cpp +++ b/sources/gui/src/mobilewidget.cpp @@ -56,6 +56,15 @@ void MobileWidget::clear() } +void MobileWidget::setShown(bool state) +{ + if (state) + MobileWidget::show(); + else + MobileWidget::hide(); +} + + void MobileWidget::createActions() { connect(ui->pushButton_mobileAdvanced, SIGNAL(clicked(bool)), this, SLOT(showAdvanced())); diff --git a/sources/gui/src/mobilewidget.h b/sources/gui/src/mobilewidget.h index 9f6067b..5dc6fcb 100644 --- a/sources/gui/src/mobilewidget.h +++ b/sources/gui/src/mobilewidget.h @@ -38,6 +38,7 @@ public: public slots: void clear(); + void setShown(bool state); private slots: void selectOptionsFile(); diff --git a/sources/gui/src/netctlprofile.cpp b/sources/gui/src/netctlprofile.cpp index 9af2f28..2abf10d 100644 --- a/sources/gui/src/netctlprofile.cpp +++ b/sources/gui/src/netctlprofile.cpp @@ -17,6 +17,8 @@ #include "netctlprofile.h" +#include + #include "mainwindow.h" @@ -33,3 +35,33 @@ NetctlProfile::~NetctlProfile() { delete profileDirectory; } + + +QHash NetctlProfile::getSettingsFromProfile(QString profile) +{ + QHash settings; + QFile profileFile; + QString fileStr; + + if (profile[0] == QDir::separator()) + profileFile.setFileName(profile); + else + profileFile.setFileName(profileDirectory->absolutePath() + QDir::separator() + profile); + if (!profileFile.open(QIODevice::ReadOnly)) + return settings; + while (true) { + fileStr = QString(profileFile.readLine()); + if (profileFile.atEnd()) + break; + else if (fileStr[0] != '#') { + if (fileStr.split(QString("="), QString::SkipEmptyParts).count() == 2) + settings[fileStr.split(QString("="))[0]] = fileStr.split(QString("="))[1] + .remove(QString("(")) + .remove(QString(")")) + .remove(QString("\n")); + } + } + + profileFile.close(); + return settings; +} diff --git a/sources/gui/src/netctlprofile.h b/sources/gui/src/netctlprofile.h index 61d18dc..18429dd 100644 --- a/sources/gui/src/netctlprofile.h +++ b/sources/gui/src/netctlprofile.h @@ -33,6 +33,7 @@ public: QString profileDir = QString(""), QString sudoPath = QString("")); ~NetctlProfile(); + QHash getSettingsFromProfile(QString profile); private: MainWindow *parent; diff --git a/sources/gui/src/pppoewidget.cpp b/sources/gui/src/pppoewidget.cpp index 2a96ca6..5a421f7 100644 --- a/sources/gui/src/pppoewidget.cpp +++ b/sources/gui/src/pppoewidget.cpp @@ -65,6 +65,15 @@ void PppoeWidget::clear() } +void PppoeWidget::setShown(bool state) +{ + if (state) + PppoeWidget::show(); + else + PppoeWidget::hide(); +} + + void PppoeWidget::createFilter() { // session mac diff --git a/sources/gui/src/pppoewidget.h b/sources/gui/src/pppoewidget.h index e68eefc..06a3bb7 100644 --- a/sources/gui/src/pppoewidget.h +++ b/sources/gui/src/pppoewidget.h @@ -38,6 +38,7 @@ public: public slots: void clear(); + void setShown(bool state); private slots: void changeMode(int index); diff --git a/sources/gui/src/sleepthread.h b/sources/gui/src/sleepthread.h index e24dcd4..40231c5 100644 --- a/sources/gui/src/sleepthread.h +++ b/sources/gui/src/sleepthread.h @@ -26,7 +26,8 @@ class SleepThread : public QThread { Q_OBJECT // private run - void run () {} + void run() + {} public : static void usleep(long iSleepTime) diff --git a/sources/gui/src/tunnelwidget.cpp b/sources/gui/src/tunnelwidget.cpp index 86bb7e4..7439133 100644 --- a/sources/gui/src/tunnelwidget.cpp +++ b/sources/gui/src/tunnelwidget.cpp @@ -43,6 +43,15 @@ void TunnelWidget::clear() } +void TunnelWidget::setShown(bool state) +{ + if (state) + TunnelWidget::show(); + else + TunnelWidget::hide(); +} + + void TunnelWidget::createFilter() { // using input mask because validators is not comfortable diff --git a/sources/gui/src/tunnelwidget.h b/sources/gui/src/tunnelwidget.h index 654c76a..6ffc82e 100644 --- a/sources/gui/src/tunnelwidget.h +++ b/sources/gui/src/tunnelwidget.h @@ -38,6 +38,7 @@ public: public slots: void clear(); + void setShown(bool state); private: Ui::TunnelWidget *ui; diff --git a/sources/gui/src/tuntapwidget.cpp b/sources/gui/src/tuntapwidget.cpp index 5a5ea78..55cdb62 100644 --- a/sources/gui/src/tuntapwidget.cpp +++ b/sources/gui/src/tuntapwidget.cpp @@ -42,6 +42,15 @@ void TuntapWidget::clear() } +void TuntapWidget::setShown(bool state) +{ + if (state) + TuntapWidget::show(); + else + TuntapWidget::hide(); +} + + QHash TuntapWidget::getSettings() { QHash tuntapSettings; diff --git a/sources/gui/src/tuntapwidget.h b/sources/gui/src/tuntapwidget.h index 760b79c..1c8a153 100644 --- a/sources/gui/src/tuntapwidget.h +++ b/sources/gui/src/tuntapwidget.h @@ -38,6 +38,7 @@ public: public slots: void clear(); + void setShown(bool state); private: Ui::TuntapWidget *ui; diff --git a/sources/gui/src/vlanwidget.cpp b/sources/gui/src/vlanwidget.cpp index 14d1b42..9f73bfc 100644 --- a/sources/gui/src/vlanwidget.cpp +++ b/sources/gui/src/vlanwidget.cpp @@ -40,6 +40,15 @@ void VlanWidget::clear() } +void VlanWidget::setShown(bool state) +{ + if (state) + VlanWidget::show(); + else + VlanWidget::hide(); +} + + QHash VlanWidget::getSettings() { QHash vlanSettings; diff --git a/sources/gui/src/vlanwidget.h b/sources/gui/src/vlanwidget.h index 9b959bd..318d41d 100644 --- a/sources/gui/src/vlanwidget.h +++ b/sources/gui/src/vlanwidget.h @@ -38,6 +38,7 @@ public: public slots: void clear(); + void setShown(bool state); private: Ui::VlanWidget *ui; diff --git a/sources/gui/src/wirelesswidget.cpp b/sources/gui/src/wirelesswidget.cpp index cd17669..92efbc3 100644 --- a/sources/gui/src/wirelesswidget.cpp +++ b/sources/gui/src/wirelesswidget.cpp @@ -83,6 +83,15 @@ void WirelessWidget::clear() } +void WirelessWidget::setShown(bool state) +{ + if (state) + WirelessWidget::show(); + else + WirelessWidget::hide(); +} + + void WirelessWidget::createActions() { connect(ui->pushButton_wirelessAdvanced, SIGNAL(clicked(bool)), this, SLOT(showAdvanced())); diff --git a/sources/gui/src/wirelesswidget.h b/sources/gui/src/wirelesswidget.h index eba53b6..dfedaf6 100644 --- a/sources/gui/src/wirelesswidget.h +++ b/sources/gui/src/wirelesswidget.h @@ -40,6 +40,7 @@ public: public slots: void clear(); + void setShown(bool state); private slots: void addDriver();