🛠️ build(_new): made with qt

This commit is contained in:
Eshan Roy
2024-11-22 11:33:54 +05:30
parent 96b0c17ce6
commit 18571bde55
5 changed files with 174 additions and 166 deletions

View File

@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(SnigdhaOSBlackbox VERSION 0.1 LANGUAGES CXX) project(snigdhaos-blackbox VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
@@ -22,43 +22,36 @@ set(PROJECT_SOURCES
) )
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(SnigdhaOSBlackbox qt_add_executable(snigdhaos-blackbox
MANUAL_FINALIZATION MANUAL_FINALIZATION
${PROJECT_SOURCES} ${PROJECT_SOURCES}
) )
# Define target properties for Android with Qt 6 as: # Define target properties for Android with Qt 6 as:
# set_property(TARGET SnigdhaOSBlackbox APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR # set_property(TARGET snigdhaos-blackbox APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android) # ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation # For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
# else() # else()
# if(ANDROID) # if(ANDROID)
# add_library(SnigdhaOSBlackbox SHARED # add_library(snigdhaos-blackbox SHARED
# ${PROJECT_SOURCES} # ${PROJECT_SOURCES}
# ) # )
# Define properties for Android with Qt 5 after find_package() calls as: # Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") # set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
# else()
# add_executable(SnigdhaOSBlackbox
# ${PROJECT_SOURCES}
# )
# endif()
# endif()
else() else()
add_executable(SnigdhaOSBlackbox add_executable(snigdhaos-blackbox
${PROJECT_SOURCES} ${PROJECT_SOURCES}
) )
endif() endif()
target_link_libraries(SnigdhaOSBlackbox PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network) target_link_libraries(snigdhaos-blackbox PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network)
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an # If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though. # explicit, fixed bundle identifier manually though.
# if(${QT_VERSION} VERSION_LESS 6.1.0) # if(${QT_VERSION} VERSION_LESS 6.1.0)
# set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.SnigdhaOSBlackbox) # set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.snigdhaos-blackbox)
# endif() # endif()
# set_target_properties(SnigdhaOSBlackbox PROPERTIES # set_target_properties(snigdhaos-blackbox PROPERTIES
# ${BUNDLE_ID_OPTION} # ${BUNDLE_ID_OPTION}
# MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} # MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
# MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} # MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
@@ -67,12 +60,12 @@ target_link_libraries(SnigdhaOSBlackbox PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Q
# ) # )
# include(GNUInstallDirs) # include(GNUInstallDirs)
install(TARGETS SnigdhaOSBlackbox install(TARGETS snigdhaos-blackbox
BUNDLE DESTINATION . BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
# RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
) )
if(QT_VERSION_MAJOR EQUAL 6) if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(SnigdhaOSBlackbox) qt_finalize_executable(snigdhaos-blackbox)
endif() endif()

View File

@@ -2,11 +2,10 @@
#include <QApplication> #include <QApplication>
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QApplication a(argc, argv); QApplication a(argc, argv);
SnigdhaOSBlackBox w(nullptr, a.arguments().length() > 1 ? a.arguments()[1] : ""); SnigdhaOSBlackbox w(nullptr, a.arguments().length() > 1 ? a.arguments()[1] : "");
w.show(); w.show();
return a.exec(); return a.exec();
} }

View File

@@ -8,14 +8,16 @@
#include <QScrollArea> #include <QScrollArea>
#include <QTemporaryFile> #include <QTemporaryFile>
#include <QTimer> #include <QTimer>
#include <QNetworkReply> #include <QtNetwork/QNetworkReply>
#include <unistd.h> #include <unistd.h>
const char* INTERNET_CHECK_URL = "https://snigdha-os.github.io/"; const char* INTERNET_CHECK_URL = "https://snigdha-os.github.io/";
SnigdhaOSBlackBox::SnigdhaOSBlackBox(QWidget *parent, QString state)
SnigdhaOSBlackbox::SnigdhaOSBlackbox(QWidget *parent, QString state)
: QMainWindow(parent) : QMainWindow(parent)
, ui(new Ui::SnigdhaOSBlackBox) , ui(new Ui::SnigdhaOSBlackbox)
{ {
this->setWindowIcon(QIcon("/usr/share/pixmaps/snigdhaos-blackbox.svg")); this->setWindowIcon(QIcon("/usr/share/pixmaps/snigdhaos-blackbox.svg"));
ui->setupUi(this); ui->setupUi(this);
@@ -23,22 +25,20 @@ SnigdhaOSBlackBox::SnigdhaOSBlackBox(QWidget *parent, QString state)
executable_modify_date = QFileInfo(QCoreApplication::applicationFilePath()).lastModified(); executable_modify_date = QFileInfo(QCoreApplication::applicationFilePath()).lastModified();
updateState(state); updateState(state);
} }
//destructor for Snigdha OS Blackbox class
SnigdhaOSBlackBox::~SnigdhaOSBlackBox() SnigdhaOSBlackbox::~SnigdhaOSBlackbox()
{ {
delete ui; delete ui;
} }
void SnigdhaOSBlackBox::doInternetUpRequest(){ void SnigdhaOSBlackbox::doInternetUpRequest() {
QNetworkAccessManager* network_manager = new QNetworkAccessManager(); QNetworkAccessManager* network_manager = new QNetworkAccessManager(this);
auto network_reply = network_manager->head(QNetworkRequest(QString(INTERNET_CHECK_URL))); QNetworkReply* network_reply = network_manager->head(QNetworkRequest(QString(INTERNET_CHECK_URL)));
QTimer* timer = new QTimer(this); QTimer* timer = new QTimer(this);
timer->setSingleShot(true); timer->setSingleShot(true);
timer->start(5000); timer->start(5000); //5 sec
//Try again fuction!
connect(timer, &QTimer::timeout, this, [this, timer, network_reply, network_manager]() { connect(timer, &QTimer::timeout, this, [this, timer, network_reply, network_manager]() {
timer->deleteLater(); timer->deleteLater();
network_reply->abort(); network_reply->abort();
@@ -53,7 +53,7 @@ void SnigdhaOSBlackBox::doInternetUpRequest(){
network_reply->deleteLater(); network_reply->deleteLater();
network_manager->deleteLater(); network_manager->deleteLater();
if (network_reply->error() == network_reply->NoError) { if (network_reply->error() == network_reply->NoError){
updateState(State::UPDATE); updateState(State::UPDATE);
} }
else { else {
@@ -62,127 +62,131 @@ void SnigdhaOSBlackBox::doInternetUpRequest(){
}); });
} }
void SnigdhaOSBlackBox::doUpdate(){ void SnigdhaOSBlackbox::doUpdate() {
if (qEnvironmentVariableIsSet("SNIGDHAOS_BLACKBOX_SELFUPDATE")) { if (qEnvironmentVariableIsSet("SNIGDHAOS_BLACKBOX_SELFUPDATE")) {
updateState(State::SELECT); updateState(State::SELECT);
return; return;
} }
auto process = new QProcess(this); auto process = new QProcess(this);
QTemporaryFile* file = new QTemporaryFile(this); QTemporaryFile* file = new QTemporaryFile(this);
file->open(); file->open();
file->setAutoRemove(true); file->setAutoRemove(true);
process->start("/usr/lib/snigdhaos/launch-terminal", QStringList() << QString("sudo pacman -Syyu 2>&1 && rm \"" + file->fileName() + "\"; read -p 'Press Ebter to Exit'")); process->start("/usr/lib/snigdhaos/launch-terminal", QStringList() << QString("sudo pacman -Syyu 2>&1 && rm \"" + file->fileName() + "\"; read -p 'Press Enter to Exit"));
connect(process,QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, [this, process, file](int exitcode, QProcess::ExitStatus status){ connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, [this, process, file](int exitcode, QProcess::ExitStatus status) {
process->deleteLater(); process->deleteLater();
file->deleteLater(); file->deleteLater();
if (exitcode == 0 && !file->exists()) {
if (exitcode == 0 && !file->exists()){
relaunchSelf("POST_UPDATE"); relaunchSelf("POST_UPDATE");
} }
else{ else {
relaunchSelf("UPDATE_RETRY"); relaunchSelf("UPDATE_RETRY");
} }
}); });
} }
void SnigdhaOSBlackBox::doApply(){ void SnigdhaOSBlackbox::doApply() {
QStringList packages; QStringList packages;
QStringList setup_commands; QStringList setup_commands;
QStringList prepare_commands; QStringList prepare_commands;
auto checkboxList = ui->selectWidget_tabs->findChildren<QCheckBox*>(); auto checkBoxList = ui->selectWidget_tabs->findChildren<QCheckBox*>();
for (auto checkbox : checkBoxList) {
for (auto checkbox : checkboxList){ if (checkbox->isChecked()) {
if (checkbox->isChecked()){
packages += checkbox->property("packages").toStringList(); packages += checkbox->property("packages").toStringList();
setup_commands += checkbox->property("setup_commands").toStringList(); setup_commands += checkbox->property("setup_commands").toStringList();
prepare_commands += checkbox->property("prepare_commands").toStringList(); prepare_commands += checkbox->property("prepare_commands").toStringList();
} }
} }
if (packages.empty()){ if (packages.isEmpty()) {
updateState(State::SUCCESS); updateState(State::SUCCESS);
return; return;
} }
if (packages.contains("docker")){ if (packages.contains("podman")) {
setup_commands += "systemctl enable --now podman.socket";
}
if (packages.contains("docker")) {
setup_commands += "systemctl enable --now docker.socket"; setup_commands += "systemctl enable --now docker.socket";
} }
if (packages.contains("virt-manager-meta") && packages.contains("gnome-boxes")){
setup_commands += "systemctl enable --now libvirtd";
}
packages.removeDuplicates(); packages.removeDuplicates();
QTemporaryFile* prepareFile = new QTemporaryFile(this); QTemporaryFile* prepareFile = new QTemporaryFile(this);
prepareFile->setAutoRemove(true); prepareFile->setAutoRemove(true);
prepareFile->open(); prepareFile->open();
QTextStream prepareStream(prepareFile); QTextStream prepareStream(prepareFile);
prepareStream << prepare_commands.join('\n'); prepareStream << prepare_commands.join('\n');
prepareFile->close(); prepareFile->close();
QTemporaryFile* packagesFiles = new QTemporaryFile(this);
packagesFiles->setAutoRemove(true); QTemporaryFile* packagesFile = new QTemporaryFile(this);
packagesFiles->open(); packagesFile->setAutoRemove(true);
QTextStream packagesStream(packagesFiles); packagesFile->open();
QTextStream packagesStream(packagesFile);
packagesStream << packages.join(' '); packagesStream << packages.join(' ');
packagesFiles->close(); packagesFile->close();
QTemporaryFile* setupFile = new QTemporaryFile(this); QTemporaryFile* setupFile = new QTemporaryFile(this);
setupFile->setAutoRemove(true); setupFile->setAutoRemove(true);
setupFile->open(); setupFile->open();
QTextStream setupStream(setupFile); QTextStream setupStream(setupFile);
setupStream <<setup_commands.join('\n'); setupStream << setup_commands.join('\n');
setupFile->close(); setupFile->close();
auto process = new QProcess(this); auto process = new QProcess(this);
process->start("/usr/lib/snigdhaos/launch-terminal", QStringList() << QString("/usr/lib/snigdhaos/-blackbox/apply.sh \"") + prepareFile->fileName() + "\" \"" + packagesFiles->fileName() + "\" \"" + setupFile->fileName() + "\""); process->start("/usr/lib/snigdhaos/launch-terminal", QStringList() << QString("/usr/lib/snigdhaos-blackbox/apply.sh \"") + prepareFile->fileName() + "\" \"" + packagesFile->fileName() + "\" \"" + setupFile->fileName() + "\"");
connect(process,QOverload<int,QProcess::ExitStatus>::of(&QProcess::finished), this, [this, process, prepareFile, packagesFiles, setupFile](int exitcode, QProcess::ExitStatus status) { connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, [this, process, prepareFile, packagesFile, setupFile](int exitcode, QProcess::ExitStatus status) {
process->deleteLater(); process->deleteLater();
prepareFile->deleteLater(); prepareFile->deleteLater();
packagesFiles->deleteLater(); packagesFile->deleteLater();
setupFile->deleteLater(); setupFile->deleteLater();
if (exitcode == 0 && !packagesFiles->exists()){ if (exitcode == 0 && !packagesFile->exists()) {
updateState(State::SELECT); updateState(State::SELECT);
} }
else{ else {
updateState(State::APPLY_RETRY); updateState(State::APPLY_RETRY);
} }
}); });
} }
void SnigdhaOSBlackBox::populateSelectWidget() { void SnigdhaOSBlackbox::populateSelectWidget() {
if (ui->selectWidget_tabs->count() > 1){ if (ui->selectWidget_tabs->count() > 1) {
return; return;
} }
auto desktop = qEnvironmentVariable("XDG_SESSION_DESKTOP"); auto desktop = qEnvironmentVariable("XDG_DESKTOP_SESSION");
// I will go for gnome only!
ui->checkBox_GNOME->setVisible(desktop == "gnome"); ui->checkBox_GNOME->setVisible(desktop == "gnome");
bool isDesktop = false; bool isDesktop = false;
auto chassis = QFile("/sys/class/dmi/id/chassis_type"); auto chassis = QFile("/sys/class/dmi/id/chassis_type");
if (chassis.open(QFile::ReadOnly)) { if (chassis.open(QFile::ReadOnly)) {
QStringList list = {"3", "4", "6", "7", "23", "24"}; QStringList list = { "3", "4", "6", "7", "23", "24" };
QTextStream in(&chassis); QTextStream in(&chassis);
isDesktop = list.contains(in.readLine()); isDesktop = list.contains(in.readLine());
} }
ui->checkBox_Performance->setVisible(isDesktop); ui->checkBox_Performance->setVisible(isDesktop);
populateSelectWidget("/usr/lib/snigdhaos-blackbox/webapp.txt", "WebApp"); populateSelectWidget("/usr/lib/snigdhaos-blackbox/webapp.txt", "WEBAPP");
populateSelectWidget("/usr/lib/snigdhaos-blackbox/fuzzer.txt", "Fuzzer");
} }
void SnigdhaOSBlackBox::populateSelectWidget(QString filename, QString label){ void SnigdhaOSBlackbox::populateSelectWidget(QString filename, QString label) {
QFile file(filename); QFile file(filename);
if (file.open(QIODevice::ReadOnly)){
if (file.open(QIODevice::ReadOnly)) {
QScrollArea* scroll = new QScrollArea(ui->selectWidget_tabs); QScrollArea* scroll = new QScrollArea(ui->selectWidget_tabs);
QWidget* tab = new QWidget(scroll); QWidget* tab = new QWidget(scroll);
QVBoxLayout* layout = new QVBoxLayout(tab); QVBoxLayout* layout = new QVBoxLayout(tab);
QTextStream in(&file); QTextStream in(&file);
while(!in.atEnd()) {
while (!in.atEnd()) {
QString def = in.readLine(); QString def = in.readLine();
QString packages = in.readLine(); QString packages = in.readLine();
QString display = in.readLine(); QString display = in.readLine();
auto checkbox = new QCheckBox(tab); auto checkbox = new QCheckBox(tab);
checkbox->setChecked(def == "true"); checkbox->setChecked(def == "true");
checkbox->setText(display); checkbox->setText(display);
@@ -196,78 +200,86 @@ void SnigdhaOSBlackBox::populateSelectWidget(QString filename, QString label){
} }
} }
void SnigdhaOSBlackBox::updateState(State state){ void SnigdhaOSBlackbox::updateState(State state) {
if (currentState != state){ if (currentState != state) {
currentState = state; currentState = state;
this->show(); this->show();
this->activateWindow(); this->activateWindow();
this->raise(); this->raise();
switch(state){ switch (state) {
case State::WELCOME: case State::WELCOME:
ui->mainStackedWidget->setCurrentWidget(ui->textWidget); ui->mainStackedWidget->setCurrentWidget(ui->textWidget);
ui->textStackedWidget->setCurrentWidget(ui->textWidget_welcome); ui->textStackedWidget->setCurrentWidget(ui->textWidget_welcome);
ui->textWidget_buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); ui->textWidget_buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
break; break;
case State::INTERNET:
ui->mainStackedWidget->setCurrentWidget(ui->waitingWidget); case State::INTERNET:
ui->waitingWidget_text->setText("Waiting For Internet Connection..."); ui->mainStackedWidget->setCurrentWidget(ui->mainStackedWidget);
doInternetUpRequest(); ui->waitingWidget_text->setText("Waiting For Internet Connection...");
break; doInternetUpRequest();
case State::UPDATE: break;
ui->mainStackedWidget->setCurrentWidget(ui->waitingWidget);
ui->waitingWidget_text->setText("Waiting For Update To Finish..."); case State::UPDATE:
doUpdate(); ui->mainStackedWidget->setCurrentWidget(ui->waitingWidget);
break; ui->waitingWidget_text->setText("Please Wait! Till We Finish The Update...");
case State::UPDATE_RETRY: doUpdate();
ui->mainStackedWidget->setCurrentWidget(ui->textWidget); break;
ui->textStackedWidget->setCurrentWidget(ui->textWidget_updateRetry);
ui->textWidget_buttonBox->setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No); case State::UPDATE_RETRY:
break; ui->mainStackedWidget->setCurrentWidget(ui->textWidget);
case State::QUIT: ui->textStackedWidget->setCurrentWidget(ui->textWidget_updateRetry);
ui->mainStackedWidget->setCurrentWidget(ui->textWidget); ui->textWidget_buttonBox->setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No);
ui->textStackedWidget->setCurrentWidget(ui->textWidget_quit); break;
ui->textWidget_buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Reset);
break; case State::QUIT:
case State::SELECT: ui->mainStackedWidget->setCurrentWidget(ui->textWidget);
ui->mainStackedWidget->setCurrentWidget(ui->selectWidget); ui->textStackedWidget->setCurrentWidget(ui->textWidget_quit);
populateSelectWidget(); ui->textWidget_buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Reset);
break; break;
case State::APPLY:
ui->mainStackedWidget->setCurrentWidget(ui->waitingWidget); case State::SELECT:
ui->waitingWidget_text->setText("Applying..."); ui->mainStackedWidget->setCurrentWidget(ui->waitingWidget);
doApply(); populateSelectWidget();
break; break;
case State::APPLY_RETRY:
ui->mainStackedWidget->setCurrentWidget(ui->textWidget); case State::APPLY:
ui->textStackedWidget->setCurrentWidget(ui->textWidget_applyRetry); ui->mainStackedWidget->setCurrentWidget(ui->waitingWidget);
ui->textWidget_buttonBox->setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No); ui->waitingWidget_text->setText("We are applying the changes...");
break; doApply();
case State::SUCCESS: break;
ui->mainStackedWidget->setCurrentWidget(ui->textWidget);
ui->textStackedWidget->setCurrentWidget(ui->textWidget_success); case State::APPLY_RETRY:
ui->textWidget_buttonBox->setStandardButtons(QDialogButtonBox::Ok); ui->mainStackedWidget->setCurrentWidget(ui->textWidget);
break; ui->textStackedWidget->setCurrentWidget(ui->textWidget_applyRetry);
ui->textWidget_buttonBox->setStandardButtons(QDialogButtonBox::Yes | QDialogButtonBox::No | QDialogButtonBox::Reset);
break;
case State::SUCCESS:
ui->mainStackedWidget->setCurrentWidget(ui->textWidget);
ui->textStackedWidget->setCurrentWidget(ui->textWidget_success);
ui->textWidget_buttonBox->setStandardButtons(QDialogButtonBox::Ok);
break;
} }
} }
} }
void SnigdhaOSBlackBox::updateState(QString state) { void SnigdhaOSBlackbox::updateState(QString state) {
if (state == "POST_UPDATE"){ if (state == "POST_UPDATE"){
updateState(State::SELECT); updateState(State::SELECT);
} }
else if (state == "UPDATE_RETRY"){ else if (state == "UPDATE_RETRY") {
updateState(State::UPDATE_RETRY); updateState(State::UPDATE_RETRY);
} }
else{ else {
updateState(State::WELCOME); updateState(State::WELCOME);
} }
} }
void SnigdhaOSBlackBox::relaunchSelf(QString param) { void SnigdhaOSBlackbox::relaunchSelf(QString param) {
auto binary = QFileInfo(QCoreApplication::applicationFilePath()); auto binary = QFileInfo(QCoreApplication::applicationFilePath());
if (executable_modify_date != binary.lastModified()) { if (executable_modify_date != binary.lastModified()) {
execlp(binary.absolutePath().toUtf8().constData(), binary.fileName().toUtf8().constData(), param.toUtf8().constData(), NULL); execlp(binary.absoluteFilePath().toUtf8().constData(), binary.fileName().toUtf8().constData(), param.toUtf8().constData(), NULL);
exit(0); exit(0);
} }
else { else {
@@ -275,47 +287,53 @@ void SnigdhaOSBlackBox::relaunchSelf(QString param) {
} }
} }
void SnigdhaOSBlackBox::on_textWidget_buttonBox_clicked(QAbstractButton* button) { void SnigdhaOSBlackbox::on_textWidget_buttonBox_clicked(QAbstractButton* button) {
switch(currentState) { switch(currentState) {
case State::WELCOME: case State::WELCOME:
if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Ok) { if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Ok) {
updateState(State::INTERNET); updateState(State::INTERNET);
} }
break; break;
case State::UPDATE_RETRY:
if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Yes) { case State::UPDATE_RETRY:
updateState(State::INTERNET); if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Yes) {
} updateState(State::INTERNET);
break; }
case State::APPLY_RETRY: break;
if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Ok) {
updateState(State::APPLY); case State::APPLY_RETRY:
} if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Yes) {
else if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Reset) { updateState(State::APPLY);
updateState(State::SELECT); }
} else if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Reset) {
break; updateState(State::SELECT);
case State::SUCCESS: }
if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Ok) { break;
QApplication::quit();
} case State::SUCCESS:
break; if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Ok) {
case State::QUIT: QApplication::quit();
if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::No || ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Ok) { }
QApplication::quit(); break;
}
else { case State::QUIT:
updateState(State::WELCOME); if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::No || ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Ok) {
} QApplication::quit();
default:; }
else {
updateState(State::WELCOME);
}
break;
default:;
} }
if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::No || ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Cancel) { if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::No || ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Cancel) {
updateState(State::QUIT); updateState(State::QUIT);
} }
} }
void SnigdhaOSBlackBox::on_selectWidget_buttonBox_clicked(QAbstractButton* button) { void SnigdhaOSBlackbox::on_selectWidget_buttonBox_Clicked(QAbstractButton* button) {
if (ui->textWidget_buttonBox->standardButton(button) == QDialogButtonBox::Ok) { if (ui->selectWidget_buttonBox->standardButton(button) == QDialogButtonBox::Ok) {
updateState(State::APPLY); updateState(State::APPLY);
} }
else { else {

View File

@@ -3,15 +3,15 @@
#include <QMainWindow> #include <QMainWindow>
#include <QAbstractButton> #include <QAbstractButton>
#include <QNetworkAccessManager> #include <QtNetwork/QNetworkAccessManager>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace Ui { namespace Ui {
class SnigdhaOSBlackBox; class SnigdhaOSBlackbox;
} }
QT_END_NAMESPACE QT_END_NAMESPACE
class SnigdhaOSBlackBox : public QMainWindow class SnigdhaOSBlackbox : public QMainWindow
{ {
Q_OBJECT Q_OBJECT
@@ -27,16 +27,14 @@ public:
APPLY_RETRY, APPLY_RETRY,
SUCCESS SUCCESS
}; };
SnigdhaOSBlackbox(QWidget *parent = nullptr, QString state = "WELCOME");
SnigdhaOSBlackBox(QWidget* parent = nullptr, QString state = "WELCOME"); ~SnigdhaOSBlackbox();
~SnigdhaOSBlackBox();
private slots: private slots:
void on_textWidget_buttonBox_clicked(QAbstractButton* button); void on_textWidget_buttonBox_clicked(QAbstractButton* button);
void on_selectWidget_buttonBox_clicked(QAbstractButton* button); void on_selectWidget_buttonBox_Clicked(QAbstractButton* button);
private: private:
Ui::SnigdhaOSBlackBox *ui; Ui::SnigdhaOSBlackbox *ui;
QDateTime executable_modify_date; QDateTime executable_modify_date;
State currentState; State currentState;

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>SnigdhaOSBlackBox</class> <class>SnigdhaOSBlackbox</class>
<widget class="QMainWindow" name="SnigdhaOSBlackBox"> <widget class="QMainWindow" name="SnigdhaOSBlackbox">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
@@ -18,7 +18,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QStackedWidget" name="mainStackedWidget"> <widget class="QStackedWidget" name="mainStackedWidget">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>2</number>
</property> </property>
<widget class="QWidget" name="textWidget"> <widget class="QWidget" name="textWidget">
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">