/*************************************************************************** * This file is part of netctl-gui * * * * netctl-gui 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. * * * * netctl-gui 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 netctl-gui. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ #include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include #include #include #include "bridgewidget.h" #include "dbusoperation.h" #include "errorwindow.h" #include "ethernetwidget.h" #include "generalwidget.h" #include "ipwidget.h" #include "macvlanwidget.h" #include "mobilewidget.h" #include "passwdwidget.h" #include "pppoewidget.h" #include "tunnelwidget.h" #include "tuntapwidget.h" #include "version.h" #include "vlanwidget.h" #include "wirelesswidget.h" void MainWindow::reportABug() { if (debug) qDebug() << PDEBUG; if (QDesktopServices::openUrl(QUrl(QString(BUGTRACKER)))) ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); else ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); } // menu update slots void MainWindow::setMenuActionsShown(const bool state) { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "State" << state; QStringList keys = toolBarActions.keys(); for (int i=0; isetVisible(state); } void MainWindow::updateMenuMain() { if (debug) qDebug() << PDEBUG; actionMenu->setDefaultAction(toolBarActions[QString("mainStart")]); toolBarActions[QString("netctlAuto")]->setVisible(true); toolBarActions[QString("mainRefresh")]->setVisible(true); if (ui->tableWidget_main->currentItem() == nullptr) return; if (!ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 2)->text().isEmpty()) { toolBarActions[QString("mainRestart")]->setVisible(true); toolBarActions[QString("mainStart")]->setText(QApplication::translate("MainWindow", "Stop")); toolBarActions[QString("mainStart")]->setIcon(QIcon::fromTheme("process-stop")); } else { toolBarActions[QString("mainStart")]->setText(QApplication::translate("MainWindow", "Start")); toolBarActions[QString("mainStart")]->setIcon(QIcon::fromTheme("system-run")); } if (!mainTabGetActiveProfiles().isEmpty()) { if (!mainTabGetActiveProfiles().contains(ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text())) toolBarActions[QString("mainSwitch")]->setVisible(true); toolBarActions[QString("mainStopAll")]->setVisible(true); } toolBarActions[QString("mainStart")]->setVisible(true); if (!ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 3)->text().isEmpty()) { toolBarActions[QString("mainEnable")]->setText(QApplication::translate("MainWindow", "Disable")); toolBarActions[QString("mainEnable")]->setIcon(QIcon::fromTheme("edit-remove")); } else { toolBarActions[QString("mainEnable")]->setText(QApplication::translate("MainWindow", "Enable")); toolBarActions[QString("mainEnable")]->setIcon(QIcon::fromTheme("list-add")); } toolBarActions[QString("mainEnable")]->setVisible(true); toolBarActions[QString("mainEdit")]->setVisible(true); toolBarActions[QString("mainRemove")]->setVisible(true); } void MainWindow::updateMenuProfile() { if (debug) qDebug() << PDEBUG; actionMenu->setDefaultAction(toolBarActions[QString("profileSave")]); toolBarActions[QString("profileClear")]->setVisible(true); toolBarActions[QString("profileLoad")]->setVisible(!ui->comboBox_profile->currentText().isEmpty()); toolBarActions[QString("profileRemove")]->setVisible(!ui->comboBox_profile->currentText().isEmpty()); toolBarActions[QString("profileSave")]->setVisible(!ui->comboBox_profile->currentText().isEmpty()); } void MainWindow::updateMenuWifi() { if (debug) qDebug() << PDEBUG; actionMenu->setDefaultAction(toolBarActions[QString("wifiStart")]); toolBarActions[QString("wifiRefresh")]->setVisible(true); if (ui->tableWidget_wifi->currentItem() == nullptr) return; if (ui->tableWidget_wifi->item(ui->tableWidget_wifi->currentItem()->row(), 5)->text().isEmpty()) { toolBarActions[QString("wifiStart")]->setText(QApplication::translate("MainWindow", "Start")); toolBarActions[QString("wifiStart")]->setIcon(QIcon::fromTheme("system-run")); } else { toolBarActions[QString("wifiStart")]->setText(QApplication::translate("MainWindow", "Stop")); toolBarActions[QString("wifiStart")]->setIcon(QIcon::fromTheme("process-stop")); } toolBarActions[QString("wifiStart")]->setVisible(true); } // tab update slots void MainWindow::updateMainTab() { if (debug) qDebug() << PDEBUG; if (!checkExternalApps(QString("netctl"))) { ErrorWindow::showWindow(1, QString(PDEBUG), debug); emit(needToBeConfigured()); return; } ui->tabWidget->setDisabled(true); QList profiles; bool netctlAutoStatus = false; if (useHelper) { QList responce = sendRequestToLib(QString("isNetctlAutoActive"), debug); if (responce.isEmpty()) { if (debug) qDebug() << PDEBUG << ":" << "Could not interact with helper, disable it"; useHelper = false; return updateMainTab(); } netctlAutoStatus = responce[0].toBool(); profiles = parseOutputNetctl(sendRequestToLib(QString("netctlVerboseProfileList"), debug)); } else { netctlAutoStatus = netctlCommand->isNetctlAutoRunning(); profiles = netctlCommand->getProfileList(); } ui->widget_netctlAuto->setHidden(!netctlAutoStatus); ui->tableWidget_main->setSortingEnabled(false); ui->tableWidget_main->selectRow(-1); ui->tableWidget_main->sortByColumn(0, Qt::AscendingOrder); ui->tableWidget_main->clear(); ui->tableWidget_main->setRowCount(profiles.count()); // create header QStringList headerList; headerList.append(QApplication::translate("MainWindow", "Name")); headerList.append(QApplication::translate("MainWindow", "Description")); headerList.append(QApplication::translate("MainWindow", "Active")); headerList.append(QApplication::translate("MainWindow", "Enabled")); ui->tableWidget_main->setHorizontalHeaderLabels(headerList); // create items for (int i=0; itableWidget_main->setItem(i, 0, new QTableWidgetItem(profiles[i].name)); ui->tableWidget_main->item(i, 0)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); ui->tableWidget_main->item(i, 0)->setToolTip(toolTip); ui->tableWidget_main->item(i, 0)->setFont(font); // description ui->tableWidget_main->setItem(i, 1, new QTableWidgetItem(profiles[i].description)); ui->tableWidget_main->item(i, 1)->setTextAlignment(Qt::AlignJustify | Qt::AlignVCenter); ui->tableWidget_main->item(i, 1)->setToolTip(toolTip); // active ui->tableWidget_main->setItem(i, 2, new QTableWidgetItem(checkStatus(profiles[i].active, true))); ui->tableWidget_main->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); // enabled ui->tableWidget_main->setItem(i, 3, new QTableWidgetItem(checkStatus(profiles[i].enabled, true))); ui->tableWidget_main->item(i, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } ui->tableWidget_main->setSortingEnabled(true); ui->tableWidget_main->resizeRowsToContents(); ui->tableWidget_main->resizeColumnsToContents(); ui->tableWidget_main->resizeRowsToContents(); #if QT_VERSION >= 0x050000 ui->tableWidget_main->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); #else ui->tableWidget_main->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); #endif ui->tabWidget->setEnabled(true); ui->statusBar->showMessage(QApplication::translate("MainWindow", "Updated")); update(); } void MainWindow::updateProfileTab() { if (debug) qDebug() << PDEBUG; ui->tabWidget->setDisabled(true); profileTabClear(); ui->tabWidget->setEnabled(true); ui->statusBar->showMessage(QApplication::translate("MainWindow", "Updated")); update(); } void MainWindow::updateWifiTab() { if (debug) qDebug() << PDEBUG; wifiTabSetEnabled(checkExternalApps(QString("wpasup-only"))); if (!checkExternalApps(QString("wpasup"))) { ErrorWindow::showWindow(1, QString(PDEBUG), debug); emit(needToBeConfigured()); return; } ui->tabWidget->setDisabled(true); QList scanResults; if (useHelper) scanResults = parseOutputWifi(sendRequestToCtrl(QString("VerboseWiFi"), debug)); else scanResults = wpaCommand->scanWifi(); ui->tableWidget_wifi->setSortingEnabled(false); ui->tableWidget_wifi->selectRow(-1); ui->tableWidget_wifi->sortByColumn(3, Qt::AscendingOrder); ui->tableWidget_wifi->clear(); ui->tableWidget_wifi->setRowCount(scanResults.count()); // create header QStringList headerList; headerList.append(QApplication::translate("MainWindow", "Name")); headerList.append(QApplication::translate("MainWindow", "Type")); headerList.append(QApplication::translate("MainWindow", "# of points")); headerList.append(QApplication::translate("MainWindow", "Signal")); headerList.append(QApplication::translate("MainWindow", "Security")); headerList.append(QApplication::translate("MainWindow", "Active")); headerList.append(QApplication::translate("MainWindow", "Exists")); ui->tableWidget_wifi->setHorizontalHeaderLabels(headerList); // create items for (int i=0; itableWidget_wifi->setItem(i, 0, new QTableWidgetItem(scanResults[i].name)); ui->tableWidget_wifi->item(i, 0)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); ui->tableWidget_wifi->item(i, 0)->setToolTip(toolTip); ui->tableWidget_wifi->item(i, 0)->setFont(font); // type ui->tableWidget_wifi->setItem(i, 1, new QTableWidgetItem(type)); ui->tableWidget_wifi->item(i, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget_wifi->item(i, 1)->setToolTip(toolTip); // count ui->tableWidget_wifi->setItem(i, 2, new QTableWidgetItem(QString::number(scanResults[i].frequencies.count()))); ui->tableWidget_wifi->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget_wifi->item(i, 2)->setToolTip(toolTip); // signal ui->tableWidget_wifi->setItem(i, 3, new QTableWidgetItem(QString::number(scanResults[i].signal))); ui->tableWidget_wifi->item(i, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget_wifi->item(i, 3)->setToolTip(toolTip); // security ui->tableWidget_wifi->setItem(i, 4, new QTableWidgetItem(scanResults[i].security)); ui->tableWidget_wifi->item(i, 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->tableWidget_wifi->item(i, 4)->setToolTip(toolTip); // active ui->tableWidget_wifi->setItem(i, 5, new QTableWidgetItem(checkStatus(scanResults[i].active, true))); ui->tableWidget_wifi->item(i, 5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); // exists ui->tableWidget_wifi->setItem(i, 6, new QTableWidgetItem(checkStatus(scanResults[i].exists, true))); ui->tableWidget_wifi->item(i, 6)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } ui->tableWidget_wifi->setSortingEnabled(true); ui->tableWidget_wifi->resizeRowsToContents(); ui->tableWidget_wifi->resizeColumnsToContents(); ui->tableWidget_wifi->resizeRowsToContents(); #if QT_VERSION >= 0x050000 ui->tableWidget_wifi->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); #else ui->tableWidget_wifi->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); #endif ui->tabWidget->setEnabled(true); ui->statusBar->showMessage(QApplication::translate("MainWindow", "Updated")); update(); } // main tab slots void MainWindow::mainTabContextualMenu(const QPoint &pos) { if (debug) qDebug() << PDEBUG; if (ui->tableWidget_main->currentItem() == nullptr) return; // create menu QMenu menu(this); QAction *refreshTable = menu.addAction(QApplication::translate("MainWindow", "Refresh")); refreshTable->setIcon(QIcon::fromTheme("view-refresh")); menu.addSeparator(); QAction *startProfile = menu.addAction(QApplication::translate("MainWindow", "Start profile")); QAction *restartProfile = menu.addAction(QApplication::translate("MainWindow", "Restart profile")); restartProfile->setIcon(QIcon::fromTheme("view-refresh")); QAction *enableProfile = menu.addAction(QApplication::translate("MainWindow", "Enable profile")); menu.addSeparator(); QAction *editProfile = menu.addAction(QApplication::translate("MainWindow", "Edit profile")); editProfile->setIcon(QIcon::fromTheme("document-edit")); QAction *removeProfile = menu.addAction(QApplication::translate("MainWindow", "Remove profile")); removeProfile->setIcon(QIcon::fromTheme("edit-delete")); // set text if (!ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 2)->text().isEmpty()) { restartProfile->setVisible(true); startProfile->setText(QApplication::translate("MainWindow", "Stop profile")); startProfile->setIcon(QIcon::fromTheme("process-stop")); } else { restartProfile->setVisible(false); startProfile->setText(QApplication::translate("MainWindow", "Start profile")); startProfile->setIcon(QIcon::fromTheme("system-run")); } if (!ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 3)->text().isEmpty()) { enableProfile->setText(QApplication::translate("MainWindow", "Disable profile")); enableProfile->setIcon(QIcon::fromTheme("edit-remove")); } else { enableProfile->setText(QApplication::translate("MainWindow", "Enable profile")); enableProfile->setIcon(QIcon::fromTheme("list-add")); } // actions QAction *action = menu.exec(ui->tableWidget_main->viewport()->mapToGlobal(pos)); if (action == refreshTable) { if (debug) qDebug() << PDEBUG << ":" << "Refresh table"; updateMainTab(); } else if (action == startProfile) { if (debug) qDebug() << PDEBUG << ":" << "Start profile"; mainTabStartProfile(); } else if (action == restartProfile) { if (debug) qDebug() << PDEBUG << ":" << "Restart profile"; mainTabRestartProfile(); } else if (action == enableProfile) { if (debug) qDebug() << PDEBUG << ":" << "Enable profile"; mainTabEnableProfile(); } else if (action == editProfile) { if (debug) qDebug() << PDEBUG << ":" << "Edit profile"; mainTabEditProfile(); } else if (action == removeProfile) { if (debug) qDebug() << PDEBUG << ":" << "Remove profile"; mainTabRemoveProfile(); } } void MainWindow::mainTabEditProfile() { if (debug) qDebug() << PDEBUG; if (ui->tableWidget_main->currentItem() == nullptr) return; ui->tabWidget->setDisabled(true); QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text(); ui->tabWidget->setCurrentIndex(1); ui->comboBox_profile->addItem(profile); ui->comboBox_profile->setCurrentIndex(ui->comboBox_profile->count() - 1); } void MainWindow::mainTabEnableProfile() { if (debug) qDebug() << PDEBUG; if (!checkExternalApps(QString("netctl"))) { ErrorWindow::showWindow(1, QString(PDEBUG), debug); emit(needToBeConfigured()); return; } if (ui->tableWidget_main->currentItem() == nullptr) return; ui->tabWidget->setDisabled(true); QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text(); if (enableProfileSlot(profile)) ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); else ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); updateMainTab(); } QStringList MainWindow::mainTabGetActiveProfiles() { if (debug) qDebug() << PDEBUG; QStringList profiles; for (int i=0; itableWidget_main->rowCount(); i++) { if (ui->tableWidget_main->item(i, 2)->text().isEmpty()) continue; profiles.append(ui->tableWidget_main->item(i, 0)->text()); } return profiles; } void MainWindow::mainTabRemoveProfile() { if (debug) qDebug() << PDEBUG; if (ui->tableWidget_main->currentItem() == nullptr) return; ui->tabWidget->setDisabled(true); QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text(); bool status = false; if (useHelper) { QList args; args.append(profile); QList responce = sendRequestToCtrlWithArgs(QString("Remove"), args, debug); if (responce.isEmpty()) { if (debug) qDebug() << PDEBUG << ":" << "Could not interact with helper, disable it"; useHelper = false; return mainTabRemoveProfile(); } status = responce[0].toBool(); } else status = netctlProfile->removeProfile(profile); if (status) ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); else ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); updateMainTab(); } void MainWindow::mainTabRestartProfile() { if (debug) qDebug() << PDEBUG; if (!checkExternalApps(QString("netctl"))) { ErrorWindow::showWindow(1, QString(PDEBUG), debug); emit(needToBeConfigured()); return; } if (ui->tableWidget_main->currentItem() == nullptr) return; ui->tabWidget->setDisabled(true); QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text(); if (restartProfileSlot(profile)) ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); else ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); updateMainTab(); } void MainWindow::mainTabStartProfile() { if (debug) qDebug() << PDEBUG; if (!checkExternalApps(QString("netctl"))) { ErrorWindow::showWindow(1, QString(PDEBUG), debug); emit(needToBeConfigured()); return; } if (ui->tableWidget_main->currentItem() == nullptr) return; ui->tabWidget->setDisabled(true); QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text(); if (startProfileSlot(profile)) ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); else ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); updateMainTab(); } void MainWindow::mainTabStopAllProfiles() { if (debug) qDebug() << PDEBUG; if (!checkExternalApps(QString("netctl"))) { ErrorWindow::showWindow(1, QString(PDEBUG), debug); emit(needToBeConfigured()); return; } ui->tabWidget->setDisabled(true); bool status = false; if (useHelper) { QList responce = sendRequestToCtrl(QString("StolAll"), debug); if (responce.isEmpty()) { if (debug) qDebug() << PDEBUG << ":" << "Could not interact with helper, disable it"; useHelper = false; return mainTabStopAllProfiles(); } status = responce[0].toBool(); } else status = netctlCommand->stopAllProfiles(); if (status) ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); else ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); updateMainTab(); } void MainWindow::mainTabSwitchToProfile() { if (debug) qDebug() << PDEBUG; if (!checkExternalApps(QString("netctl"))) { ErrorWindow::showWindow(1, QString(PDEBUG), debug); emit(needToBeConfigured()); return; } if (ui->tableWidget_main->currentItem() == nullptr) return; ui->tabWidget->setDisabled(true); QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text(); if (switchToProfileSlot(profile)) ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); else ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); updateMainTab(); } // profile tab slots void MainWindow::profileTabChangeState(const QString current) { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Current type" << current; generalWid->setVisible(true); ipWid->setVisible((current != QString("pppoe")) && (current != QString("mobile_ppp"))); bridgeWid->setVisible(current == QString("bridge")); ethernetWid->setVisible((current == QString("ethernet")) || (current == QString("vlan")) || (current == QString("macvlan"))); macvlanWid->setVisible(current == QString("macvlan")); mobileWid->setVisible(current == QString("mobile_ppp")); pppoeWid->setVisible(current == QString("pppoe")); tunnelWid->setVisible(current == QString("tunnel")); tuntapWid->setVisible(current == QString("tuntap")); vlanWid->setVisible(current == QString("vlan")); wirelessWid->setVisible(current == QString("wireless")); } void MainWindow::profileTabClear() { if (debug) qDebug() << PDEBUG; ui->comboBox_profile->clear(); QList profiles; if (useHelper) profiles = parseOutputNetctl(sendRequestToLib(QString("netctlVerboseProfileList"), debug)); else profiles = netctlCommand->getProfileList(); for (int i=0; icomboBox_profile->addItem(profiles[i].name); ui->comboBox_profile->setCurrentIndex(-1); generalWid->clear(); ipWid->clear(); bridgeWid->clear(); ethernetWid->clear(); macvlanWid->clear(); mobileWid->clear(); pppoeWid->clear(); tunnelWid->clear(); tuntapWid->clear(); vlanWid->clear(); wirelessWid->clear(); profileTabChangeState(generalWid->connectionType->currentText()); } void MainWindow::profileTabCreateProfile() { if (debug) qDebug() << PDEBUG; // error checking if (ui->comboBox_profile->currentText().isEmpty()) return ErrorWindow::showWindow(3, QString(PDEBUG), debug); if (generalWid->isOk() == 1) return ErrorWindow::showWindow(4, QString(PDEBUG), debug); else if (generalWid->isOk() == 2) return ErrorWindow::showWindow(5, QString(PDEBUG), debug); 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")) || (generalWid->connectionType->currentText() == QString("macvlan")) || (generalWid->connectionType->currentText() == QString("openvswitch"))) { if (ipWid->isOk() == 1) return ErrorWindow::showWindow(6, QString(PDEBUG), debug); else if (ipWid->isOk() == 2) return ErrorWindow::showWindow(6, QString(PDEBUG), debug); } if (generalWid->connectionType->currentText() == QString("ethernet")) { if (ethernetWid->isOk() == 1) return ErrorWindow::showWindow(7, QString(PDEBUG), debug); } else if (generalWid->connectionType->currentText() == QString("wireless")) { if (wirelessWid->isOk() == 1) return ErrorWindow::showWindow(8, QString(PDEBUG), debug); else if (wirelessWid->isOk() == 2) return ErrorWindow::showWindow(9, QString(PDEBUG), debug); else if (wirelessWid->isOk() == 3) return ErrorWindow::showWindow(10, QString(PDEBUG), debug); else if (wirelessWid->isOk() == 4) return ErrorWindow::showWindow(7, QString(PDEBUG), debug); else if (wirelessWid->isOk() == 5) return ErrorWindow::showWindow(11, QString(PDEBUG), debug); } else if (generalWid->connectionType->currentText() == QString("bridge")) { } else if (generalWid->connectionType->currentText() == QString("pppoe")) { if (pppoeWid->isOk() == 1) return ErrorWindow::showWindow(7, QString(PDEBUG), debug); else if (pppoeWid->isOk() == 2) return ErrorWindow::showWindow(12, QString(PDEBUG), debug); else if (pppoeWid->isOk() == 3) return ErrorWindow::showWindow(13, QString(PDEBUG), debug); else if (pppoeWid->isOk() == 4) return ErrorWindow::showWindow(12, QString(PDEBUG), debug); } else if (generalWid->connectionType->currentText() == QString("mobile_ppp")) { if (mobileWid->isOk() == 1) return ErrorWindow::showWindow(15, QString(PDEBUG), debug); if (mobileWid->isOk() == 2) return ErrorWindow::showWindow(7, QString(PDEBUG), debug); } else if (generalWid->connectionType->currentText() == QString("tunnel")) { if (tunnelWid->isOk() == 1) return ErrorWindow::showWindow(20, QString(PDEBUG), debug); } else if (generalWid->connectionType->currentText() == QString("tuntap")) { if (tuntapWid->isOk() == 1) return ErrorWindow::showWindow(15, QString(PDEBUG), debug); if (tuntapWid->isOk() == 2) return ErrorWindow::showWindow(15, QString(PDEBUG), debug); } else if (generalWid->connectionType->currentText() == QString("vlan")) { if (ethernetWid->isOk() == 1) return ErrorWindow::showWindow(7, QString(PDEBUG), debug); } else if (generalWid->connectionType->currentText() == QString("macvlan")) { if (ethernetWid->isOk() == 1) return ErrorWindow::showWindow(7, QString(PDEBUG), debug); } ui->tabWidget->setDisabled(true); // read settings QString profile = QFileInfo(ui->comboBox_profile->currentText()).fileName(); QMap settings; settings = generalWid->getSettings(); if (generalWid->connectionType->currentText() == QString("ethernet")) { QMap addSettings = ipWid->getSettings(); for (int i=0; igetSettings(); for (int i=0; iconnectionType->currentText() == QString("wireless")) { QMap addSettings = ipWid->getSettings(); for (int i=0; igetSettings(); for (int i=0; iconnectionType->currentText() == QString("bond")) || (generalWid->connectionType->currentText() == QString("dummy")) || (generalWid->connectionType->currentText() == QString("openvswitch"))) { QMap addSettings = ipWid->getSettings(); for (int i=0; iconnectionType->currentText() == QString("bridge")) { QMap addSettings = ipWid->getSettings(); for (int i=0; igetSettings(); for (int i=0; iconnectionType->currentText() == QString("pppoe")) { QMap addSettings = pppoeWid->getSettings(); for (int i=0; iconnectionType->currentText() == QString("mobile_ppp")) { QMap addSettings = mobileWid->getSettings(); for (int i=0; iconnectionType->currentText() == QString("tunnel")) { QMap addSettings = ipWid->getSettings(); for (int i=0; igetSettings(); for (int i=0; iconnectionType->currentText() == QString("tuntap")) { QMap addSettings = ipWid->getSettings(); for (int i=0; igetSettings(); for (int i=0; iconnectionType->currentText() == QString("vlan")) { QMap addSettings = ipWid->getSettings(); for (int i=0; igetSettings(); for (int i=0; igetSettings(); for (int i=0; iconnectionType->currentText() == QString("macvlan")) { QMap addSettings = ipWid->getSettings(); for (int i=0; igetSettings(); for (int i=0; igetSettings(); for (int i=0; i args; args.append(profile); args.append(settingsList); QList responce = sendRequestToCtrlWithArgs(QString("Create"), args, debug); if (responce.isEmpty()) { if (debug) qDebug() << PDEBUG << ":" << "Could not interact with helper, disable it"; useHelper = false; return profileTabCreateProfile(); } status = responce[0].toBool(); } else { QString profileTempName = netctlProfile->createProfile(profile, settings); status = netctlProfile->copyProfile(profileTempName); } if (status) ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); else ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); updateProfileTab(); } void MainWindow::profileTabLoadProfile() { if (debug) qDebug() << PDEBUG; QString profile = QFileInfo(ui->comboBox_profile->currentText()).fileName(); if (profile.isEmpty()) return; QMap settings; if (useHelper) { QList args; args.append(profile); QList responce = sendRequestToLibWithArgs(QString("Profile"), args, debug); if (responce.isEmpty()) { if (debug) qDebug() << PDEBUG << ":" << "Could not interact with helper, disable it"; useHelper = false; return profileTabLoadProfile(); } QStringList settingsList = responce[0].toStringList(); for (int i=0; igetSettingsFromProfile(profile); if (settings.isEmpty()) return ErrorWindow::showWindow(17, QString(PDEBUG), debug); 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")) || (generalWid->connectionType->currentText() == QString("openvswitch"))) { 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); } else if (generalWid->connectionType->currentText() == QString("macvlan")) { ipWid->setSettings(settings); ethernetWid->setSettings(settings); macvlanWid->setSettings(settings); } } void MainWindow::profileTabRemoveProfile() { if (debug) qDebug() << PDEBUG; ui->tabWidget->setDisabled(true); QString profile = QFileInfo(ui->comboBox_profile->currentText()).fileName(); if (profile.isEmpty()) return ErrorWindow::showWindow(17, QString(PDEBUG), debug); bool status = false; if (useHelper) { QList args; args.append(profile); QList responce = sendRequestToCtrlWithArgs(QString("Remove"), args, debug); if (responce.isEmpty()) { if (debug) qDebug() << PDEBUG << ":" << "Could not interact with helper, disable it"; useHelper = false; return profileTabLoadProfile(); } status = responce[0].toBool(); } else status = netctlProfile->removeProfile(profile); if (status) ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); else ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); updateProfileTab(); } // wifi tab slots void MainWindow::wifiTabContextualMenu(const QPoint &pos) { if (debug) qDebug() << PDEBUG; if (ui->tableWidget_wifi->currentItem() == nullptr) return; // create menu QMenu menu(this); QAction *refreshTable = menu.addAction(QApplication::translate("MainWindow", "Refresh")); refreshTable->setIcon(QIcon::fromTheme("view-refresh")); menu.addSeparator(); QAction *startWifi = menu.addAction(QApplication::translate("MainWindow", "Start WiFi")); // set text if (ui->tableWidget_wifi->item(ui->tableWidget_wifi->currentItem()->row(), 5)->text().isEmpty()) { startWifi->setText(QApplication::translate("MainWindow", "Start WiFi")); startWifi->setIcon(QIcon::fromTheme("system-run")); } else { startWifi->setText(QApplication::translate("MainWindow", "Stop WiFi")); startWifi->setIcon(QIcon::fromTheme("process-stop")); } // actions QAction *action = menu.exec(ui->tableWidget_main->viewport()->mapToGlobal(pos)); if (action == refreshTable) { if (debug) qDebug() << PDEBUG << ":" << "Refresh WiFi"; updateWifiTab(); } else if (action == startWifi) { if (debug) qDebug() << PDEBUG << ":" << "Start WiFi"; wifiTabStart(); } } void MainWindow::wifiTabSetEnabled(const bool state) { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "State" << state; ui->tableWidget_wifi->setHidden(!state); ui->label_wifi->setHidden(state); } void MainWindow::wifiTabStart() { if (debug) qDebug() << PDEBUG; if (!checkExternalApps(QString("wpasup"))) { ErrorWindow::showWindow(1, QString(PDEBUG), debug); emit(needToBeConfigured()); return; } if (ui->tableWidget_wifi->currentItem() == nullptr) return; ui->tabWidget->setDisabled(true); // name is hidden if (ui->tableWidget_wifi->item(ui->tableWidget_wifi->currentItem()->row(), 0)->text() == QString("")) { hiddenNetwork = true; passwdWid = new PasswdWidget(this); passwdWid->setPassword(false); int widgetWidth = 2 * width() / 3; int widgetHeight = 110; int x = (width() - widgetWidth) / 2; int y = (height() - widgetHeight) / 2; passwdWid->setGeometry(x, y, widgetWidth, widgetHeight); passwdWid->show(); passwdWid->setFocusToLineEdit(); return; } // name isn't hidden hiddenNetwork = false; QString profile = ui->tableWidget_wifi->item(ui->tableWidget_wifi->currentItem()->row(), 0)->text(); QString profileName = QString(""); if (!ui->tableWidget_wifi->item(ui->tableWidget_wifi->currentItem()->row(), 6)->text().isEmpty()) { if (useHelper) { QList args; args.append(profile); QList responce = sendRequestToLibWithArgs(QString("ProfileByEssid"), args, debug); if (responce.isEmpty()) { if (debug) qDebug() << PDEBUG << ":" << "Could not interact with helper, disable it"; useHelper = false; return wifiTabStart(); } profileName = responce[0].toString(); } else profileName = wpaCommand->existentProfile(profile); if (startProfileSlot(profileName)) ui->statusBar->showMessage(QApplication::translate("MainWindow", "Done")); else ui->statusBar->showMessage(QApplication::translate("MainWindow", "Error")); } else { QString security = ui->tableWidget_wifi->item(ui->tableWidget_wifi->currentItem()->row(), 1)->text(); if (security == QString("none")) return connectToUnknownEssid(QString("")); else { passwdWid = new PasswdWidget(this); passwdWid->setPassword(true); int widgetWidth = 2 * width() / 3; int widgetHeight = 110; int x = (width() - widgetWidth) / 2; int y = (height() - widgetHeight) / 2; passwdWid->setGeometry(x, y, widgetWidth, widgetHeight); passwdWid->show(); passwdWid->setFocusToLineEdit(); return; } } updateWifiTab(); }