diff --git a/sources/gui/src/bridgewidget.cpp b/sources/gui/src/bridgewidget.cpp index 5badf15..103a161 100644 --- a/sources/gui/src/bridgewidget.cpp +++ b/sources/gui/src/bridgewidget.cpp @@ -56,7 +56,6 @@ QHash BridgeWidget::getSettings() if (isOk() == 0) { if (ui->checkBox_skip->checkState() == Qt::Checked) bridgeSettings[QString("SkipForwardingDelay")] = QString("yes"); - clear(); } return bridgeSettings; diff --git a/sources/gui/src/ethernetwidget.cpp b/sources/gui/src/ethernetwidget.cpp index f1b6688..917825c 100644 --- a/sources/gui/src/ethernetwidget.cpp +++ b/sources/gui/src/ethernetwidget.cpp @@ -121,7 +121,6 @@ QHash EthernetWidget::getSettings() ethernetSettings[QString("TimeoutCarrier")] = QString(ui->spinBox_timeoutCarrier->value()); if (ui->spinBox_timeoutWpa->value() != 15) ethernetSettings[QString("TimeoutWPA")] = QString(ui->spinBox_timeoutWpa->value()); - clear(); } return ethernetSettings; diff --git a/sources/gui/src/generalwidget.cpp b/sources/gui/src/generalwidget.cpp index cd76b31..5664535 100644 --- a/sources/gui/src/generalwidget.cpp +++ b/sources/gui/src/generalwidget.cpp @@ -147,7 +147,6 @@ QHash GeneralWidget::getSettings() generalSettings[QString("ExecDownPre")] = QString("'") + ui->lineEdit_execDownPre->text() + QString("'"); if (ui->checkBox_forceConnect->checkState() == Qt::Checked) generalSettings[QString("ForceConnect")] = QString("yes"); - clear(); } return generalSettings; diff --git a/sources/gui/src/ipwidget.cpp b/sources/gui/src/ipwidget.cpp index a2f97c6..fa72ae2 100644 --- a/sources/gui/src/ipwidget.cpp +++ b/sources/gui/src/ipwidget.cpp @@ -471,7 +471,6 @@ QHash IpWidget::getSettings() dnsOpt.append(QString("'") + ui->listWidget_dnsOptions->item(i)->text() + QString("'")); ipSettings[QString("DNSOptions")] = dnsOpt.join(QString(" ")); } - clear(); } return ipSettings; diff --git a/sources/gui/src/mainwindow.cpp b/sources/gui/src/mainwindow.cpp index 13e7d6c..aa15f6d 100644 --- a/sources/gui/src/mainwindow.cpp +++ b/sources/gui/src/mainwindow.cpp @@ -168,6 +168,7 @@ void MainWindow::createActions() 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_profileSave, SIGNAL(clicked(bool)), this, SLOT(profileTabCreateProfile())); connect(ui->pushButton_profileLoad, SIGNAL(clicked(bool)), this, SLOT(profileTabLoadProfile())); connect(generalWid->connectionType, SIGNAL(currentIndexChanged(QString)), this, SLOT(profileTabChangeState(QString))); @@ -235,7 +236,9 @@ void MainWindow::updateMainTab() void MainWindow::updateProfileTab() { + ui->tabWidget->setDisabled(true); profileTabClear(); + ui->tabWidget->setEnabled(true); } @@ -412,25 +415,6 @@ void MainWindow::profileTabBrowseProfile() } -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")) { @@ -545,11 +529,202 @@ void MainWindow::profileTabChangeState(QString current) } +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::profileTabCreateProfile() +{ + // error checking + if (ui->lineEdit_profile->text().isEmpty()) { + return; + } + if (generalWid->isOk() == 1) { + return; + } + else if (generalWid->isOk() == 2) { + return; + } + if ((generalWid->connectionType->currentText() == QString("ethernet")) || + (generalWid->connectionType->currentText() == QString("wireless")) || + (generalWid->connectionType->currentText() == QString("bond")) || + (generalWid->connectionType->currentText() == QString("dummy")) || + (generalWid->connectionType->currentText() == QString("bridge")) || + (generalWid->connectionType->currentText() == QString("tunnel")) || + (generalWid->connectionType->currentText() == QString("tuntap")) || + (generalWid->connectionType->currentText() == QString("vlan"))) { + if (ipWid->isOk() == 1) { + return; + } + else if (ipWid->isOk() == 2) { + return; + } + } + if (generalWid->connectionType->currentText() == QString("ethernet")) { + if (ethernetWid->isOk() == 1) { + return; + } + } + else if (generalWid->connectionType->currentText() == QString("wireless")) { + if (wirelessWid->isOk() == 1) { + return; + } + else if (wirelessWid->isOk() == 2) { + return; + } + else if (wirelessWid->isOk() == 3) { + return; + } + else if (wirelessWid->isOk() == 4) { + return; + } + else if (wirelessWid->isOk() == 5) { + return; + } + } + else if (generalWid->connectionType->currentText() == QString("bridge")) { + } + else if (generalWid->connectionType->currentText() == QString("pppoe")) { + if (pppoeWid->isOk() == 1) { + return; + } + else if (pppoeWid->isOk() == 2) { + return; + } + else if (pppoeWid->isOk() == 3) { + return; + } + else if (pppoeWid->isOk() == 4) { + return; + } + } + else if (generalWid->connectionType->currentText() == QString("mobile_ppp")) { + if (mobileWid->isOk() == 1) { + return; + } + if (mobileWid->isOk() == 2) { + return; + } + } + else if (generalWid->connectionType->currentText() == QString("tunnel")) { + } + else if (generalWid->connectionType->currentText() == QString("tuntap")) { + if (tuntapWid->isOk() == 1) { + return; + } + if (tuntapWid->isOk() == 2) { + return; + } + } + else if (generalWid->connectionType->currentText() == QString("vlan")) { + if (ethernetWid->isOk() == 1) { + return; + } + } + + ui->tabWidget->setDisabled(true); + // read settings + QString profile = ui->lineEdit_profile->text(); + QHash settings; + settings = generalWid->getSettings(); + if (generalWid->connectionType->currentText() == QString("ethernet")) { + QHash addSettings = ipWid->getSettings(); + for (int i=0; igetSettings(); + for (int i=0; iconnectionType->currentText() == QString("wireless")) { + QHash addSettings = ipWid->getSettings(); + for (int i=0; igetSettings(); + for (int i=0; iconnectionType->currentText() == QString("bond")) || + (generalWid->connectionType->currentText() == QString("dummy"))) { + QHash addSettings = ipWid->getSettings(); + for (int i=0; iconnectionType->currentText() == QString("bridge")) { + QHash addSettings = ipWid->getSettings(); + for (int i=0; igetSettings(); + for (int i=0; iconnectionType->currentText() == QString("pppoe")) { + QHash addSettings = pppoeWid->getSettings(); + for (int i=0; iconnectionType->currentText() == QString("mobile_ppp")) { + QHash addSettings = mobileWid->getSettings(); + for (int i=0; iconnectionType->currentText() == QString("tunnel")) { + QHash addSettings = ipWid->getSettings(); + for (int i=0; igetSettings(); + for (int i=0; iconnectionType->currentText() == QString("tuntap")) { + QHash addSettings = ipWid->getSettings(); + for (int i=0; igetSettings(); + for (int i=0; iconnectionType->currentText() == QString("vlan")) { + QHash addSettings = ipWid->getSettings(); + for (int i=0; igetSettings(); + for (int i=0; igetSettings(); + for (int i=0; icreateProfile(profile, settings); + if (netctlProfile->copyProfile(profileTempName)) + ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); + else + ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); + + updateProfileTab(); +} + + 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")) { diff --git a/sources/gui/src/mainwindow.h b/sources/gui/src/mainwindow.h index aafe90f..6ea7867 100644 --- a/sources/gui/src/mainwindow.h +++ b/sources/gui/src/mainwindow.h @@ -82,6 +82,7 @@ private slots: void profileTabBrowseProfile(); void profileTabChangeState(QString current); void profileTabClear(); + void profileTabCreateProfile(); void profileTabLoadProfile(); // wifi tab slots void wifiTabSetEnabled(bool state); diff --git a/sources/gui/src/mainwindow.ui b/sources/gui/src/mainwindow.ui index dd73aa8..63f8c29 100644 --- a/sources/gui/src/mainwindow.ui +++ b/sources/gui/src/mainwindow.ui @@ -18,7 +18,7 @@ - 1 + 0 @@ -190,8 +190,8 @@ 0 0 - 439 - 357 + 429 + 348 @@ -356,7 +356,7 @@ 0 0 471 - 23 + 20 diff --git a/sources/gui/src/mobilewidget.cpp b/sources/gui/src/mobilewidget.cpp index 3239a7c..dbf1a83 100644 --- a/sources/gui/src/mobilewidget.cpp +++ b/sources/gui/src/mobilewidget.cpp @@ -120,7 +120,6 @@ QHash MobileWidget::getSettings() mobileSettings[QString("UsePeerDNS")] = QString("false"); if (!ui->lineEdit_options->text().isEmpty()) mobileSettings[QString("OptionsFile")] = QString("'") + ui->lineEdit_options->text() + QString("'"); - clear(); } return mobileSettings; diff --git a/sources/gui/src/netctlinteract.cpp b/sources/gui/src/netctlinteract.cpp index 3acb196..2ef6594 100644 --- a/sources/gui/src/netctlinteract.cpp +++ b/sources/gui/src/netctlinteract.cpp @@ -74,7 +74,7 @@ QStringList Netctl::getProfileDescriptions(QStringList profileList) else if (fileStr[0] != '#') if (fileStr.split(QString("="), QString::SkipEmptyParts).count() == 2) if (fileStr.split(QString("="), QString::SkipEmptyParts)[0] == QString("Description")) - descriptions.append(fileStr.split(QString("="), QString::SkipEmptyParts)[1].split(QString("\n"), QString::SkipEmptyParts)[0]); + descriptions.append(fileStr.split(QString("="), QString::SkipEmptyParts)[1].remove(QString("\n"))); } else descriptions.append(QString("")); @@ -125,7 +125,7 @@ QString Netctl::getSsidFromProfile(QString profile) else if (fileStr[0] != '#') { if (fileStr.split(QString("="), QString::SkipEmptyParts).count() == 2) if (fileStr.split(QString("="), QString::SkipEmptyParts)[0] == QString("ESSID")) - ssidName = fileStr.split(QString("="), QString::SkipEmptyParts)[1].split(QString("\n"), QString::SkipEmptyParts)[0]; + ssidName = fileStr.split(QString("="), QString::SkipEmptyParts)[1].remove(QString("\n")); } } diff --git a/sources/gui/src/netctlprofile.cpp b/sources/gui/src/netctlprofile.cpp index 2abf10d..d6e3f2f 100644 --- a/sources/gui/src/netctlprofile.cpp +++ b/sources/gui/src/netctlprofile.cpp @@ -18,6 +18,9 @@ #include "netctlprofile.h" #include +#include +#include +#include #include "mainwindow.h" @@ -37,6 +40,38 @@ NetctlProfile::~NetctlProfile() } +bool NetctlProfile::copyProfile(QString oldPath) +{ + QString newPath = profileDirectory->absolutePath() + QDir::separator() + QFileInfo(oldPath).fileName(); + QProcess command; + command.start(sudoCommand + QString(" /usr/bin/cp ") + oldPath + QString(" ") + newPath); + command.waitForFinished(-1); + if (command.exitCode() == 0) + return true; + else + return false; +} + + +QString NetctlProfile::createProfile(QString profile, QHash settings) +{ + + QString profileTempName = QDir::homePath() + QDir::separator() + + QString(".cache") + QDir::separator() + QFileInfo(profile).fileName(); + QFile profileFile(profileTempName); + + if (!profileFile.open(QIODevice::WriteOnly | QIODevice::Text)) + return profileTempName; + + QTextStream out(&profileFile); + for (int i=0; i NetctlProfile::getSettingsFromProfile(QString profile) { QHash settings; diff --git a/sources/gui/src/netctlprofile.h b/sources/gui/src/netctlprofile.h index 18429dd..40de89a 100644 --- a/sources/gui/src/netctlprofile.h +++ b/sources/gui/src/netctlprofile.h @@ -33,6 +33,8 @@ public: QString profileDir = QString(""), QString sudoPath = QString("")); ~NetctlProfile(); + bool copyProfile(QString oldPath); + QString createProfile(QString profile, QHash settings); QHash getSettingsFromProfile(QString profile); private: diff --git a/sources/gui/src/pppoewidget.cpp b/sources/gui/src/pppoewidget.cpp index 5a421f7..abf8a34 100644 --- a/sources/gui/src/pppoewidget.cpp +++ b/sources/gui/src/pppoewidget.cpp @@ -161,7 +161,6 @@ QHash PppoeWidget::getSettings() pppoeSettings[QString("PPPoEMAC")] = QString("'") + ui->lineEdit_mac->text() + QString("'"); if (ui->checkBox_ipv6->checkState() == Qt::Checked) pppoeSettings[QString("PPPoEIP6")] = QString("yes"); - clear(); } return pppoeSettings; diff --git a/sources/gui/src/tunnelwidget.cpp b/sources/gui/src/tunnelwidget.cpp index 7439133..429598e 100644 --- a/sources/gui/src/tunnelwidget.cpp +++ b/sources/gui/src/tunnelwidget.cpp @@ -93,7 +93,6 @@ QHash TunnelWidget::getSettings() tunnelSettings[QString("Local")] = QString("'") + getIp(ui->lineEdit_local->text().remove(QString(" "))) + QString("'"); if (!ui->lineEdit_remote->text().split(QString(".")).join(QString("")).remove(QString(" ")).isEmpty()) tunnelSettings[QString("Remote")] = QString("'") + getIp(ui->lineEdit_remote->text().remove(QString(" "))) + QString("'"); - clear(); } return tunnelSettings; diff --git a/sources/gui/src/tuntapwidget.cpp b/sources/gui/src/tuntapwidget.cpp index 55cdb62..ce18ec7 100644 --- a/sources/gui/src/tuntapwidget.cpp +++ b/sources/gui/src/tuntapwidget.cpp @@ -59,7 +59,6 @@ QHash TuntapWidget::getSettings() tuntapSettings[QString("Mode")] = QString("'") + ui->comboBox_mode->currentText() + QString("'"); tuntapSettings[QString("User")] = QString("'") + ui->lineEdit_user->text() + QString("'"); tuntapSettings[QString("Group")] = QString("'") + ui->lineEdit_group->text() + QString("'"); - clear(); } return tuntapSettings; diff --git a/sources/gui/src/vlanwidget.cpp b/sources/gui/src/vlanwidget.cpp index 9f73bfc..9611039 100644 --- a/sources/gui/src/vlanwidget.cpp +++ b/sources/gui/src/vlanwidget.cpp @@ -55,7 +55,6 @@ QHash VlanWidget::getSettings() if (isOk() == 0) { vlanSettings[QString("VLANID")] = QString(ui->spinBox_vlan->value()); - clear(); } return vlanSettings; diff --git a/sources/gui/src/wirelesswidget.cpp b/sources/gui/src/wirelesswidget.cpp index 92efbc3..9e3f354 100644 --- a/sources/gui/src/wirelesswidget.cpp +++ b/sources/gui/src/wirelesswidget.cpp @@ -232,7 +232,7 @@ QHash WirelessWidget::getSettings() wirelessSettings[QString("Priority")] = QString(ui->spinBox_priority->value()); if (!ui->lineEdit_country->text().isEmpty()) wirelessSettings[QString("Country")] = QString("'") + ui->lineEdit_country->text() + QString("'"); - if (!ui->lineEdit_wpaGroup->text().isEmpty()) + if (ui->lineEdit_wpaGroup->text() != QString("wheel")) wirelessSettings[QString("WPAGroup")] = QString("'") + ui->lineEdit_wpaGroup->text() + QString("'"); if (ui->listWidget_drivers->count() != 0) { QStringList drivers; @@ -246,7 +246,6 @@ QHash WirelessWidget::getSettings() wirelessSettings[QString("TimeoutWPA")] = QString(ui->spinBox_timeoutWpa->value()); if (ui->checkBox_exclude->checkState() == Qt::Checked) wirelessSettings[QString("ExcludeAuto")] = QString("yes"); - clear(); } return wirelessSettings;