v1.17.2: Fix wrong message pop up + load settings

This commit is contained in:
Markus
2025-04-09 14:16:51 +02:00
parent 0627dc31cc
commit 1bbcf72111
8 changed files with 173 additions and 17 deletions

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>ProjektManager</Name>
<Version>1.17.1</Version>
<Version>1.17.2</Version>
<Title><Name>ProjektManager</Name> Installer</Title>
<InstallerApplicationIcon>installerIcon1</InstallerApplicationIcon>
<InstallerWindowIcon>installerIcon2</InstallerWindowIcon>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<DisplayName>ProjektManager 1.17.1</DisplayName>
<DisplayName>ProjektManager 1.17.2</DisplayName>
<Description>aaaaa</Description>
<Version>1.17.1</Version>
<Version>1.17.2</Version>
<Default>true</Default>
<ReleaseDate>2025-04-09</ReleaseDate>
<Operations>

View File

@@ -4,7 +4,7 @@
#include <QStyle>
QString MainWindow::version = "1.17.1";
QString MainWindow::version = "1.17.2";
QString MainWindow::appName = "ProjektManager";
int main(int argc, char *argv[])

View File

@@ -5,6 +5,7 @@
#include "newprojektdialog.h"
#include "mainsettingsdialog.h"
#include <QList>
#include <iostream>
MainWindow::MainWindow(QWidget *parent)
@@ -98,29 +99,57 @@ MainWindow::~MainWindow()
qDebug() << "~MainWindow()";
}
void MainWindow::createNewProjektEntry()
{
std::cout << "test3" << std::endl;
if(!mainsettingsDialog->checkDefPaths()) {
QMessageBox::critical(this, "Pfadeinstellungen ungültig oder nicht gesetzt!", "Pfadeinstellungen ungültig oder nicht gesetzt!");
return;
}
NewProjektDialog * npd = new NewProjektDialog();
if(npd->exec() == QDialog::Accepted) {
auto data = npd->getProjektStruct(projects);
createNewtask(CREATE_NEW_PROJECT, data);
// Use addProject to handle both adding to list and saving to file
projects->addProject(data);
// Prüfen ob das Projekt bereits in der Liste existiert
bool projectExists = false;
for (int i = 0; i < projects->size(); i++) {
if (projects->at(i)->getPath() == data->getPath()) {
// Das Projekt existiert bereits in der Liste
projectExists = true;
addProjectToListWidget(data);
// Zeige eine Benachrichtigung, dass das Projekt bereits existiert
if (QMessageBox::question(this, "Projekt bereits vorhanden",
"Dieses Projekt ist bereits in der Liste vorhanden.\n"
"Möchten Sie es aktualisieren?",
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
// Projekt aktualisieren
projects->replaceProject(i, data);
createNewtask(S_TASK::UPDATE_PROJECT_DATA, data);
} else {
// Wenn der Benutzer "Nein" wählt, brich ab und lösche das neu erstellte Objekt
delete data;
}
break;
}
}
// Wenn das Projekt noch nicht existiert, füge es hinzu
if (!projectExists) {
createNewtask(CREATE_NEW_PROJECT, data);
// Projekt zur Liste hinzufügen und in die UI einfügen
projects->addProject(data);
addProjectToListWidget(data);
} else {
// Die Projektliste aktualisieren, falls ein bestehendes Projekt aktualisiert wurde
reloadEntryList();
}
}
}
void MainWindow::reloadEntryList()
@@ -151,6 +180,7 @@ void MainWindow::createNewtask(S_TASK task, ProjektData *data)
void MainWindow::on_pushButton_clicked()
{
//Create-Dialog & reload
std::cout << "test" << std::endl;
createNewProjektEntry();
}
@@ -205,10 +235,21 @@ void MainWindow::projectSettings_clicked(unsigned long long id)
for(int i = 0; i < projects->size(); i++) {
if(projects->at(i)->getId() == id) {
std::cout << "id: " << projects->at(i)->getId() << " -> " << std::endl;
NewProjektDialog * npd = new NewProjektDialog(projects->at(i));
std::cout << "id2: " << projects->at(i)->getId() << " -> " << std::endl;
connect(npd, SIGNAL(removeClicked(unsigned long long)), this, SLOT(projectSettings_remove_clicked(unsigned long long)));
if(npd->exec() == QDialog::Accepted) {
std::cout << "getProjektStruct: " << projects->at(i)->getId() << " -> " << std::endl;
auto data = npd->getProjektStruct(projects);
std::cout << "..getProjektStruct: " << projects->at(i)->getId() << " -> " << std::endl;
// Replace project at index i with the updated data
projects->replaceProject(i, data);
@@ -267,6 +308,8 @@ void MainWindow::closeEvent(QCloseEvent *event)
void MainWindow::on_actionNeues_Projekt_hinzuf_gen_triggered()
{
std::cout << "test2" << std::endl;
//Create-Dialog & reload
createNewProjektEntry();
}

View File

@@ -10,7 +10,8 @@
NewProjektDialog::NewProjektDialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::NewProjektDialog)
, ui(new Ui::NewProjektDialog),
lookForExistingSettingsFile(true)
{
qDebug() << " NewProjektDialog()";
@@ -30,7 +31,9 @@ NewProjektDialog::NewProjektDialog(QWidget *parent)
NewProjektDialog::NewProjektDialog(ProjektData *projektData, QWidget *parent)
: NewProjektDialog(parent)
{
qDebug() << " NewProjektDialog()";
qDebug() << " NewProjektDialog(ProjektData)";
lookForExistingSettingsFile = false;
//load settings!
loadSettingsFromProjektData(projektData);
@@ -104,11 +107,47 @@ void NewProjektDialog::loadSettingsFromProjektData(ProjektData *projektData) {
this->id = projektData->getId();
}
ProjektData *NewProjektDialog::getProjektStruct(ProjektDataList *projektDataParent)
ProjektData *NewProjektDialog::getProjektStruct(ProjektDataList *projektDataParent, bool checkExisting)
{
QString name = ui->lineEditProjektName->text();
QString path = ui->lineEdit_path->text();
qDebug() << "getProjektStruct()";
// Prüfen, ob bereits eine .prjctmngr-Datei für dieses Projekt existiert
ProjektData* existingProject = ProjektData::checkExistingSettings(path, projektDataParent);
if (existingProject && checkExisting) {
// Wenn ein bestehendes Projekt gefunden wurde, aktualisiere einige wichtige Felder
// basierend auf den Benutzereingaben im Dialog
existingProject->setParentList(projektDataParent);
// Aktualisiere das bestehende Projekt mit den neuen Werten aus dem Dialog
// (nur die wichtigsten Felder, Rest bleibt erhalten)
// Wenn wir das Projekt bearbeiten (und nicht neu erstellen)
// und der Pfad ändert sich nicht, behalte die bestehenden Einstellungen bei
if (this->id == existingProject->getId()) {
return existingProject;
}
// Zeige dem Benutzer eine Abfrage, ob die bestehenden Einstellungen verwendet werden sollen
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Question);
msgBox.setText("Projekteinstellungen gefunden");
msgBox.setInformativeText("Für dieses Projekt wurden bereits Einstellungen gefunden.\n"
"Möchten Sie diese bestehenden Einstellungen verwenden?");
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::Yes);
if (msgBox.exec() == QMessageBox::Yes) {
// Bestehende Einstellungen verwenden, nur ID aktualisieren
existingProject->setId( (this->id == 0) ? QDateTime::currentMSecsSinceEpoch() : this->id );
return existingProject;
}
// Wenn der Benutzer "Nein" wählt, machen wir mit der Erstellung eines neuen Projekts weiter
}
QString qt_installer_name = ui->lineEdit_qt_installer_name->text();
QString qt_installer_version = ui->lineEdit_qt_installer_version->text();
QString qt_installer_titel = ui->lineEdit_qt_titel->text();
@@ -185,12 +224,41 @@ void NewProjektDialog::on_pushButton_browse_clicked()
}
void NewProjektDialog::on_lineEdit_path_textChanged(const QString &arg1)
{
bool ok = arg1.endsWith(".pro") && QFile(arg1).exists();
QPalette p = ui->lineEdit_path->palette();
p.setColor(QPalette::Text, ok? qApp->palette().buttonText().color() : Qt::red);
ui->lineEdit_path->setPalette(p);
// Wenn ein gültiger .pro-Pfad eingegeben wurde, prüfe auf vorhandene Einstellungen
if (ok && this->lookForExistingSettingsFile) {
ProjektData* existingProject = ProjektData::checkExistingSettings(arg1);
if (existingProject) {
// Wenn bestehende Einstellungen gefunden wurden, frage den Benutzer
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Question);
msgBox.setText("Projekteinstellungen gefunden");
msgBox.setInformativeText("Für dieses Projekt wurden bereits Einstellungen gefunden.\n"
"Möchten Sie diese bestehenden Einstellungen laden?");
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::Yes);
if (msgBox.exec() == QMessageBox::Yes) {
// Wenn der Benutzer zustimmt, lade die bestehenden Einstellungen in den Dialog
loadSettingsFromProjektData(existingProject);
this->id = existingProject->getId(); // ID übernehmen
// Wir benötigen das Objekt nicht mehr, da wir die Daten bereits in den Dialog geladen haben
delete existingProject;
} else {
// Bei Ablehnung, lösche das geladene Objekt
delete existingProject;
}
}
}
checkIfNeccessaryFieldAreFilled();
}

View File

@@ -20,7 +20,7 @@ public:
~NewProjektDialog();
ProjektData * getProjektStruct(ProjektDataList *projektDataParent = nullptr);
ProjektData * getProjektStruct(ProjektDataList *projektDataParent = nullptr, bool checkExisting = true);
private slots:
void on_pushButton_browse_clicked();
@@ -67,6 +67,7 @@ private:
QPair<QString, QString> searchForVersionString(bool messageBox = true);
size_t id;
bool lookForExistingSettingsFile;
};

View File

@@ -114,6 +114,41 @@ QString ProjektData::getConfigFilePath() const
}
ProjektData* ProjektData::checkExistingSettings(const QString& proFilePath, ProjektDataList* parentList)
{
QFileInfo fileInfo(proFilePath);
QString configPath = fileInfo.absolutePath() + "/.prjctmngr";
// Prüfen, ob eine .prjctmngr-Datei existiert
if (QFile::exists(configPath)) {
qDebug() << "Bestehende .prjctmngr-Datei gefunden im Verzeichnis:" << fileInfo.absolutePath();
// Versuche, die existierende Projekt-Konfiguration zu laden
ProjektData* existingProject = ProjektData::load(proFilePath);
if (existingProject) {
// Stelle sicher, dass der Pfad zur .pro-Datei korrekt ist
// (falls die .prjctmngr-Datei von einem anderen System kommt)
if (existingProject->getPath() != proFilePath) {
qDebug() << "Aktualisiere Projekt-Pfad von" << existingProject->getPath() << "zu" << proFilePath;
existingProject->path = proFilePath;
existingProject->save(); // Speichere die aktualisierte Version
}
// Setze die Parent-Liste
if (parentList) {
existingProject->setParentList(parentList);
}
return existingProject;
}
}
// Keine existierende Konfiguration gefunden oder Laden fehlgeschlagen
return nullptr;
}
bool ProjektData::save()
{
QFile file(getConfigFilePath());
@@ -242,6 +277,11 @@ ProjektData* ProjektData::readFromStream(QDataStream& in, const QString& project
return data;
}
void ProjektData::setId(size_t newId)
{
id = newId;
}
bool ProjektData::dataValid() const {

View File

@@ -45,6 +45,8 @@ public:
QString getConfigFilePath() const;
// Prüft, ob für einen bestimmten .pro-Pfad bereits eine .prjctmngr-Datei existiert
static ProjektData* checkExistingSettings(const QString& proFilePath, ProjektDataList* parentList = nullptr);
bool dataValid() const;
QString getProjectDirPath() const;
@@ -111,6 +113,8 @@ public:
bool getGit_lfs() const;
void setId(size_t newId);
private:
// Helper method to write project data to a QDataStream
void writeToStream(QDataStream &out) const;