Files
snigdhaos-falcon/snigdhaosfalcon.cpp
2024-11-27 13:56:22 +05:30

64 lines
1.9 KiB
C++

#include "snigdhaosfalcon.h"
#include "ui_snigdhaosfalcon.h"
#include <QMessageBox>
SnigdhaOSFalcon::SnigdhaOSFalcon(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::SnigdhaOSFalcon)
{
ui->setupUi(this);
updateCheckBoxes();
connect(&installer, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(on_installerFinished(int,QProcess::ExitStatus)));
}
SnigdhaOSFalcon::~SnigdhaOSFalcon()
{
delete ui;
}
QList<QCheckBox*> SnigdhaOSFalcon::getCheckboxes() {
return this->ui->tabWidget->findChildren<QCheckBox*>();
}
void SnigdhaOSFalcon::updatePackageList() {
QStringList packages;
for (auto element : getCheckboxes()) {
auto string = element->property("packageName").toString();
if (string.isEmpty()) {
std::runtime_error(("Empty/Non existent package name detected for " + element->objectName()).toStdString());
}
packages.append(std::move(string));
}
QProcess proc;
proc.start("pacman -Qq " + packages.join(" "));
proc.waitForFinished();
QString installed = proc.readAllStandardOutput();
installed_packages = installed.split("\n");
}
void SnigdhaOSFalcon::updateCheckBoxes() {
updatePackageList();
for (auto element : getCheckboxes()) {
auto string = element->property("packageName").toString();
element->setChecked(installed_packages.contains(string));
}
}
void SnigdhaOSFalcon::lockCheckBoxes(bool locked) {
for (auto element : getCheckboxes()) {
element->setAttribute(Qt::WA_TransparentForMouseEvents, locked);
element->setFocusPolicy(locked ? Qt::NoFocus : Qt::StrongFocus);
}
this->ui->applyButtons->setAttribute(Qt::WA_TransparentForMouseEvents, locked);
this->ui->applyButtons->setFocusPolicy(locked ? Qt::NoFocus : Qt::StrongFocus);
}
void SnigdhaOSFalcon::on_installerFinished(int, QProcess::ExitStatus) {
if (!allowUnlock){
return;
}
updateCheckBoxes();
lockCheckBoxes(false);
}