finish of close fiche button and add of start menu

This commit is contained in:
2025-07-14 23:31:12 +02:00
parent 24c4685cb2
commit 22e56df104
38 changed files with 421 additions and 138 deletions
+151 -17
View File
@@ -1,5 +1,6 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "textFormatUtils.h"
#include <iostream>
#include <QFile>
@@ -9,6 +10,7 @@
#include <QJsonArray>
#include <QJsonValue>
#include <QPushButton>
#include <QTimer>
using namespace std;
@@ -18,21 +20,27 @@ MainWindow::MainWindow(QWidget *parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
addWindow();
notePad = new NotePad();
connect(notePad, &NotePad::demandeSauvegarde, this, &MainWindow::recevoirSauvegarde);
Character* c = new Character();
currentCharacter = c;
characters.append(c);
currentFile = QString();
files.append(currentFile);
ui->ageLineEdit->setValidator(new QIntValidator(0, 999999, ui->ageLineEdit));
ui->niveauLineEdit->setValidator(new QIntValidator(0, 999999, ui->niveauLineEdit));
ui->tailleLineEdit->setValidator(new QDoubleValidator(0.0, 999999.0, 1,ui->tailleLineEdit));
ui->BackPack->setHidden(true);
loadImage(QString("data/images/logo.png"));
ui->Edition->setHidden(true);
ui->Fenetre->setStyleSheet("background-color: #f2f2f2;");
qobject_cast<QPushButton*>(ui->Fenetre->children()[0])->setStyleSheet("background-color: white;");
QPushButton* button;
button = new QPushButton("+", ui->Fenetre);
button->setObjectName(QString("addFiche"));
button->setFixedSize(35, 35);
button->move(sizeButtonFiche*idFicheButtonCounter, 0);
qobject_cast<QPushButton*>(ui->Fenetre->children()[0])->setStyleSheet("background-color: transparent;border:none;");
button->show();
connect(button, &QPushButton::clicked, this, &MainWindow::ajouter_fiche_clicked);
for(int i=0; i<ui->menuEdition->actions().size(); i++){
ui->menuEdition->actions()[i]->setDisabled(true);
}
}
@@ -59,14 +67,22 @@ void MainWindow::loadNewCharacter(){
file.close();
Character* c = new Character(&file);
createNewCharacter(c, fileName);
currentCharacter = c;
characters.append(c);
currentFile = fileName;
files.append(fileName);
createNewCharacter(c, fileName);
}
void MainWindow::createNewCharacter(Character* p, QString s) {
if(characters.size() == 0){
ui->StartMenu->setHidden(true);
ui->BackPack->setHidden(true);
ui->Edition->setHidden(false);
}
delete ui->Fenetre->children().last();
addWindow(s);
notePad->setTexte(p->getTexteBlocNote());
ui->BackPackPlainTextEdit->setPlainText(p->getTexteBlocNote());
@@ -81,7 +97,19 @@ void MainWindow::createNewCharacter(Character* p, QString s) {
QPushButton* bt = qobject_cast<QPushButton*>(ui->Fenetre->children()[i]);
bt->setStyleSheet("background-color: #f2f2f2;");
}
qobject_cast<QPushButton*>(ui->Fenetre->children()[ui->Fenetre->children().size()-1])->setStyleSheet("background-color: white;");
qobject_cast<QPushButton*>(ui->Fenetre->children().last())->setStyleSheet("background-color: white;");
int nb = ui->Fenetre->children().size();
QPushButton* button;
button = new QPushButton("+", ui->Fenetre);
button->setObjectName(QString("addFiche"));
button->setFixedSize(35, 35);
button->move(nb*sizeButtonFiche, 0);
qobject_cast<QPushButton*>(ui->Fenetre->children().last())->setStyleSheet("background-color: transparent;border:none;");
button->show();
connect(button, &QPushButton::clicked, this, &MainWindow::ajouter_fiche_clicked);
}
@@ -168,7 +196,6 @@ void MainWindow::saveJson(){
file.close();
if (button) {
if (button->objectName() != currentFile) {
std::cout << "oui" << std::endl;
button->setObjectName(currentFile);
button->setText(extractFileName(currentFile));
}
@@ -313,6 +340,7 @@ void MainWindow::setUi(Character* p){
spinBox->setValue(p->getStats()[i]);
}
}
ui->BackPackPlainTextEdit->setPlainText(p->getTexteBackPack());
loadImage(p->getImage());
}
@@ -326,9 +354,15 @@ void MainWindow::toogleBackPack(){
if(ui->BackPack->isHidden()){
ui->Edition->setHidden(true);
ui->BackPack->setHidden(false);
for(int i=0; i<ui->menuEdition->actions().size(); i++){
ui->menuEdition->actions()[i]->setDisabled(false);
}
}else{
ui->BackPack->setHidden(true);
ui->Edition->setHidden(false);
for(int i=0; i<ui->menuEdition->actions().size(); i++){
ui->menuEdition->actions()[i]->setDisabled(true);
}
}
}
@@ -339,6 +373,19 @@ void MainWindow::on_actionNouvelle_fiche_triggered(){this->createNewCharacter(ne
void MainWindow::on_actionSauvegarder_triggered(){this->saveJson();}
void MainWindow::on_actionEnregistrer_sous_triggered(){this->saveAsJson();}
void MainWindow::on_actionFermer_triggered(){QApplication::quit();}
void MainWindow::on_pushButtonNewFiche_clicked(){this->createNewCharacter(new Character());}
void MainWindow::on_pushButtonOpenFiche_clicked(){this->loadNewCharacter();}
void MainWindow::on_actionCouleur_triggered(){TextFormatUtils::changeFontColor(this);}
void MainWindow::on_actionPolice_triggered(){TextFormatUtils::changeFont(this);}
void MainWindow::on_actionTaille_triggered(){TextFormatUtils::changeFontSize(this);}
void MainWindow::on_actionGras_triggered(){TextFormatUtils::toggleBold();}
void MainWindow::on_actionItalique_triggered(){TextFormatUtils::toggleItalic();}
void MainWindow::on_actionSouligner_triggered(){TextFormatUtils::toggleUnderline();}
void MainWindow::on_actionSurligner_triggered(){TextFormatUtils::toggleOverline();}
void MainWindow::changer_fiche_clicked(){changeCurrentCharacter();}
void MainWindow::ajouter_fiche_clicked(){this->createNewCharacter(new Character());}
void MainWindow::on_imagePushButton_clicked()
{
@@ -352,6 +399,19 @@ void MainWindow::on_actionCaract_ristiques_triggered(){this->toogleBackPack();}
void MainWindow::addWindow(const QString& s){
int nb = ui->Fenetre->children().size();
int widthBar = ui->Fenetre->size().width();
if((nb+1)*sizeButtonFiche + 35 > widthBar){
while((nb+1)*sizeButtonFiche + 35 > widthBar){
sizeButtonFiche--;
}
}
for(int i=0; i<nb; i++){
QWidget* widget = qobject_cast<QWidget*>(ui->Fenetre->children()[i]);
widget->setGeometry(i*sizeButtonFiche, 0, sizeButtonFiche, 35);
widget->show();
}
QPushButton* button;
if(s == ""){
button = new QPushButton("Sans titre", ui->Fenetre);
@@ -360,11 +420,79 @@ void MainWindow::addWindow(const QString& s){
button = new QPushButton(extractFileName(s), ui->Fenetre);
button->setObjectName(s);
}
button->setFixedSize(100, 35);
button->move(nb * 100, 0);
button->setGeometry(nb * sizeButtonFiche, 0, sizeButtonFiche, 35);
button->setProperty("id", idFicheButtonCounter);
button->show();
connect(button, &QPushButton::clicked, this, &MainWindow::changer_fiche_clicked);
QPushButton* closeButton = new QPushButton("X", button);
closeButton->setFixedSize(25, 25);
closeButton->move(button->width() - 28, (button->height()-25)/2);
closeButton->setStyleSheet("QPushButton { font-size: 10px; padding: 0px; }");
closeButton->raise();
closeButton->show();
connect(closeButton, &QPushButton::clicked, this, [=]() {
int id = button->property("id").toInt();
button->deleteLater();
QTimer::singleShot(0, this, [=]() {
int newNb = ui->Fenetre->children().size();
for(int i=0; i<newNb; i++){
QWidget* widget = qobject_cast<QWidget*>(ui->Fenetre->children()[i]);
widget->setGeometry(i*sizeButtonFiche, 0, sizeButtonFiche, 35);
widget->show();
}
int indice = 0;
bool supprCurent = false;
for(int i=0; i<characters.size(); i++){
if(id == i){
if(characters[i] == currentCharacter){
supprCurent = true;
indice = i;
if(i+1 != characters.size()){
currentCharacter = characters[i+1];
}else if(i>0){
currentCharacter = characters[i-1];
}
}
delete characters[i];
characters.remove(i);
break;
}
}
if(id == indice){
if(supprCurent){
for(int i=0; i<ui->Fenetre->children().size(); i++){
QPushButton* bt = qobject_cast<QPushButton*>(ui->Fenetre->children()[i]);
bt->setStyleSheet("background-color: #f2f2f2;");
}
if(indice + 1 != files.size()){
currentFile = files[indice+1];
setUi(currentCharacter);
notePad->setUi(currentCharacter->getTexteBlocNote());
qobject_cast<QPushButton*>(ui->Fenetre->children()[indice])->setStyleSheet("background-color: white;");
}else if(indice>0){
currentFile = files[indice-1];
setUi(currentCharacter);
notePad->setUi(currentCharacter->getTexteBlocNote());
qobject_cast<QPushButton*>(ui->Fenetre->children()[indice-1])->setStyleSheet("background-color: white;");
}else{
toogleStartMenu();
}
}
files.remove(indice);
}
idFicheButtonCounter = 0;
for(int i=0; i<ui->Fenetre->children().size()-1; i++){
ui->Fenetre->children()[i]->setProperty("id", idFicheButtonCounter);
idFicheButtonCounter++;
}
});
});
idFicheButtonCounter++;
}
@@ -374,12 +502,10 @@ QString MainWindow::extractFileName(QString s){
return infoFichier.fileName();
}
void MainWindow::changer_fiche_clicked(){
changeCurrentChracter();
}
void MainWindow::changeCurrentChracter(){
void MainWindow::changeCurrentCharacter(){
getUi();
notePad->getUi();
currentCharacter->setTexteBlocNote(notePad->getTexte());
@@ -403,3 +529,11 @@ void MainWindow::changeCurrentChracter(){
button->setStyleSheet("background-color: white;");
}
void MainWindow::toogleStartMenu(){
ui->BackPack->setHidden(true);
ui->Edition->setHidden(true);
ui->StartMenu->setHidden(false);
}