#include "mainwindow.h" #include "ui_mainwindow.h" #include "dialog1.h" #include <QPixmap> #include <QMessageBox> #include <QRadioButton> #include <QDebug> // Für Debugging-Ausgaben #include "paymentprocessor.h" #include "zubereitung.h" #include "display.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), secondwindow(new Dialog1(this)), //paymentProcessor(new PaymentProcessor()), // Initialisierung von paymentProcessor selectedRamen(Tonkotsu), selectedSauce(Soy) { ui->setupUi(this); //secondwindow->show(); Zubereitung *zubereitung = new Zubereitung(selectedRamen, selectedSauce); // Überprüfen Sie, ob das Zubereitung-Objekt erfolgreich erstellt wurde if (zubereitung != nullptr) { // Initialisieren Sie den PaymentProcessor mit dem Zubereitung-Objekt paymentProcessor = new PaymentProcessor(zubereitung); // Weitere Initialisierungen und Signal-Slot-Verbindungen // ... // Debugging-Ausgabe zur Überprüfung der Initialisierung qDebug() << "PaymentProcessor initialized: " << (paymentProcessor != nullptr); // ... updateLabels(); } else { qDebug() << "Error: Failed to create Zubereitung object!"; // Möglicherweise müssen Sie hier eine Fehlerbehandlung hinzufügen } qDebug() << "PaymentProcessor initialized: " << (paymentProcessor != nullptr); // Debugging-Ausgabe zur Überprüfung der Initialisierung qDebug() << "PaymentProcessor initialized: " << (paymentProcessor != nullptr); paymentProcessor->setTotalAmount(0.0); ui->cardButtonsWidget->setVisible(false); ui->cashButtonsWidget->setVisible(false); ui->labelTotalAmount->setText(QString::number(paymentProcessor->getTotalAmount()) + " €"); ui->labelPaidAmount->setText(QString::number(paymentProcessor->getPaidAmount()) + " €"); // Signal-Slot-Verbindungen connect(paymentProcessor, &PaymentProcessor::paymentUpdated, this, &MainWindow::updatePaidAmount); connect(paymentProcessor, &PaymentProcessor::paymentSuccessful, this, &MainWindow::showPaymentSuccessMessage); connect(ui->buttonCard1, &QPushButton::clicked, this, &MainWindow::on_cardButton_clicked); connect(ui->buttonCard2, &QPushButton::clicked, this, &MainWindow::on_cardButton_clicked); connect(ui->buttonCard3, &QPushButton::clicked, this, &MainWindow::on_cardButton_clicked); connect(ui->buttonCash10, &QPushButton::clicked, this, &MainWindow::on_cashButton_clicked); connect(ui->buttonCash5, &QPushButton::clicked, this, &MainWindow::on_cashButton_clicked); connect(ui->buttonCash2, &QPushButton::clicked, this, &MainWindow::on_cashButton_clicked); connect(ui->buttonCash1, &QPushButton::clicked, this, &MainWindow::on_cashButton_clicked); connect(ui->bestaetigen_2, &QPushButton::clicked, this, &MainWindow::on_bestaetigen_2_clicked); //connect(ui->buttonConfirmSelection, &QPushButton::clicked, this, &MainWindow::on_buttonConfirmSelection_clicked); connect(ui->buttonCheckCashBalance, &QPushButton::clicked, this, &MainWindow::checkCashBalance); connect(ui->buttonClearCashBalance, &QPushButton::clicked, this, &MainWindow::clearCashBalance); updateLabels(); connect(ui->buttonCheckCashBalance, &QPushButton::clicked, this, &MainWindow::checkCashBalance); connect(ui->buttonClearCashBalance, &QPushButton::clicked, this, &MainWindow::clearCashBalance); connect(ui->startSimulationButton, &QPushButton::clicked, this, &MainWindow::on_startSimulationButton_clicked); connect(paymentProcessor, &PaymentProcessor::paymentSuccessful, this, &MainWindow::updateChangeLabel); /* QPixmap ramen(":/re.png"); int w = ui->ramen_pic->width(); int h = ui->ramen_pic->height(); ui->ramen_pic->setPixmap(ramen.scaled(w,h,Qt::KeepAspectRatio)); QPixmap tonkotsu(":/new/ramen_menu/ICON/tonkotsu.png"); int w1 = ui->label_2->width(); int h1 = ui->label_2->height(); ui->label_2->setPixmap(tonkotsu.scaled(w1,h1,Qt::KeepAspectRatio)); QPixmap kimchi(":/new/ramen_menu/ICON/kimchi.png"); int w2 = ui->kimchi_pic->width(); int h2 = ui->kimchi_pic->height(); ui->kimchi_pic->setPixmap(kimchi.scaled(w2,h2,Qt::KeepAspectRatio)); QPixmap garlic(":/new/ramen_menu/ICON/marutai-kumamoto-ma-yu-black-garlic-oil-tonkotsu-instant-ramen-3-packs-japanese-taste-3.jpg"); int w3 = ui->garlic_pic->width(); int h3 = ui->garlic_pic->height(); ui->garlic_pic->setPixmap(garlic.scaled(w3,h3,Qt::KeepAspectRatio)); QPixmap spicy_miso(":/new/ramen_menu/ICON/Spicy_Kimshi_Miso.png"); int w4 = ui->Spicy_Kimchi_Miso_pic->width(); int h4 = ui->Spicy_Kimchi_Miso_pic->height(); ui->Spicy_Kimchi_Miso_pic->setPixmap(spicy_miso.scaled(w4,h4,Qt::KeepAspectRatio)); QPixmap spicy_beef(":/new/ramen_menu/ICON/spicy_kimchi.png"); int w5 = ui->Spicy_Kimshi_Beef_pic->width(); int h5 = ui->Spicy_Kimshi_Beef_pic->height(); ui->Spicy_Kimshi_Beef_pic->setPixmap(spicy_beef.scaled(w5,h5,Qt::KeepAspectRatio)); QPixmap Shoyu_Chicken(":/new/ramen_menu/ICON/Shoyu.png"); int w6 = ui->Shoyu_Chicken_pic->width(); int h6 = ui->Shoyu_Chicken_pic->height(); ui->Shoyu_Chicken_pic->setPixmap(Shoyu_Chicken.scaled(w6,h6,Qt::KeepAspectRatio)); QPixmap Shio(":/new/ramen_menu/ICON/Shio.jpg"); int w7 = ui->Shio_pic->width(); int h7 = ui->Shio_pic->height(); ui->Shio_pic->setPixmap(Shio.scaled(w7,h7,Qt::KeepAspectRatio)); QPixmap Vegetarische_Shoyu(":/new/ramen_menu/ICON/veg_shoyu.png"); int w8 = ui->Vegetarische_Shoyu_pic->width(); int h8 = ui->Vegetarische_Shoyu_pic->height(); ui->Vegetarische_Shoyu_pic->setPixmap(Vegetarische_Shoyu.scaled(w8,h8,Qt::KeepAspectRatio)); QPixmap Champon(":/new/ramen_menu/ICON/Champon.jpg"); int w9 = ui->Champon_pic->width(); int h9 = ui->Champon_pic->height(); ui->Champon_pic->setPixmap(Champon.scaled(w9,h9,Qt::KeepAspectRatio)); QPixmap Seitan(":/new/ramen_menu/ICON/Seitan.jpg"); int w10 = ui->Seitan_pic->width(); int h10 = ui->Seitan_pic->height(); ui->Seitan_pic->setPixmap(Seitan.scaled(w10,h10,Qt::KeepAspectRatio)); QPixmap Tantan(":/new/ramen_menu/ICON/Tantan.png"); int w11 = ui->Tantan_pic->width(); int h11 = ui->Tantan_pic->height(); ui->Tantan_pic->setPixmap(Tantan.scaled(w11,h11,Qt::KeepAspectRatio)); QPixmap Meeresfruechte(":/new/ramen_menu/ICON/japanische-meeresfruechte-ramen-mit-tintenfischsauce_1205-11089.png"); int w12 = ui->Meeresfruechte_pic->width(); int h12 = ui->Meeresfruechte_pic->height(); ui->Meeresfruechte_pic->setPixmap(Meeresfruechte.scaled(w12,h12,Qt::KeepAspectRatio)); QPixmap Mastercard(":/new/ramen_menu/ICON/Mastercard.png"); int w13 = ui->Master_pic->width(); int h13 = ui->Master_pic->height(); ui->Master_pic->setPixmap(Mastercard.scaled(w13,h13,Qt::KeepAspectRatio)); QPixmap Amex(":/new/ramen_menu/ICON/amex.jpg"); int w14 = ui->Amer_pic->width(); int h14 = ui->Amer_pic->height(); ui->Amer_pic->setPixmap(Amex.scaled(w14,h14,Qt::KeepAspectRatio)); QPixmap Giro(":/new/ramen_menu/ICON/Giro.png"); int w15 = ui->giro_pic->width(); int h15 = ui->giro_pic->height(); ui->giro_pic->setPixmap(Giro.scaled(w15,h15,Qt::KeepAspectRatio)); */ Display display; display.setImage(ui->ramen_pic, ":/re.png"); display.setImage(ui->label_2, ":/new/ramen_menu/ICON/tonkotsu.png"); display.setImage(ui->kimchi_pic, ":/new/ramen_menu/ICON/kimchi.png"); display.setImage(ui->garlic_pic, ":/new/ramen_menu/ICON/marutai-kumamoto-ma-yu-black-garlic-oil-tonkotsu-instant-ramen-3-packs-japanese-taste-3.jpg"); display.setImage(ui->Spicy_Kimchi_Miso_pic, ":/new/ramen_menu/ICON/Spicy_Kimshi_Miso.png"); display.setImage(ui->Spicy_Kimshi_Beef_pic, ":/new/ramen_menu/ICON/spicy_kimchi.png"); display.setImage(ui->Shoyu_Chicken_pic, ":/new/ramen_menu/ICON/Shoyu.png"); display.setImage(ui->Shio_pic, ":/new/ramen_menu/ICON/Shio.jpg"); display.setImage(ui->Vegetarische_Shoyu_pic, ":/new/ramen_menu/ICON/veg_shoyu.png"); display.setImage(ui->Champon_pic, ":/new/ramen_menu/ICON/Champon.jpg"); display.setImage(ui->Seitan_pic, ":/new/ramen_menu/ICON/Seitan.jpg"); display.setImage(ui->Tantan_pic, ":/new/ramen_menu/ICON/Tantan.png"); display.setImage(ui->Meeresfruechte_pic, ":/new/ramen_menu/ICON/japanische-meeresfruechte-ramen-mit-tintenfischsauce_1205-11089.png"); display.setImage(ui->Master_pic, ":/new/ramen_menu/ICON/Mastercard.png"); display.setImage(ui->Amer_pic, ":/new/ramen_menu/ICON/amex.jpg"); display.setImage(ui->giro_pic, ":/new/ramen_menu/ICON/Giro.png"); ui->stackedWidget->setCurrentIndex(0); } MainWindow::~MainWindow() { delete ui; delete paymentProcessor; // Sicherstellen, dass der Speicher freigegeben wird } void MainWindow::on_pushButton_clicked() { ui->stackedWidget->setCurrentIndex(1); } void MainWindow::handleDialog1() { this->show(); } void MainWindow::on_bestaetigen_2_clicked() { if(ui->tonkotsu->isChecked()) { selectedRamen = Tonkotsu; } else if (ui->kimchi_button->isChecked()) { selectedRamen = Spicy_kimchi; } else if (ui->garlic_button->isChecked()) { selectedRamen = Black_Garlic_Oil_Tonkotsu; } else if (ui->Spicy_Kimshi_Beef_button->isChecked()) { selectedRamen = Spicy_Kimchi_Beef; } else if (ui->Spicy_Kimchi_Miso_button->isChecked()) { selectedRamen = Spicy_Kimshi_Miso; } else if (ui->Meeresfruechte_button->isChecked()) { selectedRamen = Meeresfrüchte; } else if (ui->Shio_button->isChecked()) { selectedRamen = Shio; } else if (ui->Vegetarische_Shoyu_button->isChecked()) { selectedRamen = Vegetarische_Shoyu; } else if (ui->Champon_button->isChecked()) { selectedRamen = Champon; } else if (ui->Seitan_button->isChecked()) { selectedRamen = Seitan; } else if (ui->Tantan_button->isChecked()) { selectedRamen = Tantan; } else if (ui->Shoyu_Chicken_button->isChecked()) { selectedRamen = Shoyu_Chicken; } else { QMessageBox::warning(this, tr("Warnung"), tr("Bitte wählen Sie den Ramen aus, um fortzufahren.")); return; } ui->stackedWidget->setCurrentIndex(2); } void MainWindow::on_pushButton_2_clicked() { ui->stackedWidget->setCurrentIndex(0); } void MainWindow::on_radioButtonCard_toggled(bool checked) { ui->cardButtonsWidget->setVisible(checked); ui->cashButtonsWidget->setVisible(!checked); } void MainWindow::on_radioButtonCash_toggled(bool checked) { ui->cashButtonsWidget->setVisible(checked); ui->cardButtonsWidget->setVisible(!checked); } void MainWindow::on_cardButton_clicked() { //qDebug() << "Card button clicked"; // Debugging-Ausgabe //paymentProcessor->processCardPayment(); QPushButton* button = qobject_cast<QPushButton*>(sender()); if (button) { QString buttonText = button->text(); qDebug() << "Card button clicked: " << buttonText; // Debugging-Ausgabe paymentProcessor->processCardPayment(); // ui->labelCardStatus->setText("Card button clicked: " + buttonText); } } void MainWindow::on_cashButton_clicked() { QPushButton* button = qobject_cast<QPushButton*>(sender()); if (button) { double amount = button->text().replace("€", "").toDouble(); qDebug() << "Cash button clicked: " << amount; // Debugging-Ausgabe paymentProcessor->processCashPayment(amount); } } void MainWindow::updatePaidAmount(double amount) { ui->labelPaidAmount->setText(QString::number(amount) + " €"); } void MainWindow::showPaymentSuccessMessage() { double change = paymentProcessor->getChange(); QString message = QString("Vielen Dank für Ihre Zahlung! Rückgeld: %1 €").arg(change); QMessageBox::information(this, "Bezahlung erfolgreich", "Vielen Dank für Ihre Zahlung!"); //paymentProcessor->reset(); updatePaidAmount(paymentProcessor->getPaidAmount()); } void MainWindow::on_pushButton_7_clicked() { if(ui->soy_button->isChecked()) { selectedSauce = Soy; } else if (ui->fish_button->isChecked()) { selectedSauce = Fish; } else if (ui->hoisin_button->isChecked()) { selectedSauce = Hoisin; } else if (ui->sambal_button->isChecked()) { selectedSauce = Sambal; } else if (ui->chilioil_button->isChecked()) { selectedSauce = Chili_Oil; } else if (ui->chilicrisp_button->isChecked()) { selectedSauce = Chili_Crisp; } else { QMessageBox::warning(this, tr("Warnung"), tr("Bitte wählen Sie den Ramen aus, um fortzufahren.")); return; } updateLabels(); ui->stackedWidget->setCurrentIndex(3); } //Zubereitung void MainWindow::on_buttonSelectRamen_clicked() { // Beispielcode zur Auswahl einer Ramenart // Hier sollten Sie einen Dialog oder ein Auswahlmenü öffnen // Für dieses Beispiel setzen wir einfach einen Wert selectedRamen = Black_Garlic_Oil_Tonkotsu; // Beispielauswahl updateLabels(); } void MainWindow::on_buttonSelectSauce_clicked() { // Beispielcode zur Auswahl einer Soßeart // Hier sollten Sie einen Dialog oder ein Auswahlmenü öffnen // Für dieses Beispiel setzen wir einfach einen Wert selectedSauce = Hoisin; // Beispielauswahl updateLabels(); } void MainWindow::updateLabels() { // Update labels to show the selected Ramen and Sauce QString ramenName; switch (selectedRamen) { case Tonkotsu: ramenName = "Tonkotsu"; break; case Black_Garlic_Oil_Tonkotsu: ramenName = "Black Garlic Oil Tonkotsu"; break; case Spicy_Kimchi_Beef: ramenName = "Black Garlic Oil Tonkotsu"; break; case Meeresfrüchte: ramenName = "Meeresfrüchte"; break; case Spicy_kimchi: ramenName = "Spicy_Kimchi_Beef"; break; case Spicy_Kimshi_Miso: ramenName = "Spicy_Kimshi_Miso"; break; case Shoyu_Chicken: ramenName = "Shoyu_Chicken"; break; case Shio: ramenName = "Shio"; break; case Vegetarische_Shoyu: ramenName = "Vegetarische_Shoyu"; break; case Champon: ramenName = "Champon"; break; case Seitan: ramenName = "Seitan"; break; case Tantan: ramenName = "Tantan"; break; default: ramenName = "Unbekannte Ramenart"; break; } QString sauceName; switch (selectedSauce) { case Soy: sauceName = "Soy"; break; case Hoisin: sauceName = "Hoisin"; break; case Fish: sauceName = "Fish"; break; case Chili_Oil: sauceName = "Chili_Oil"; break; case Sambal: sauceName = "Sambal"; break; case Chili_Crisp: sauceName = "Chili_Crisp"; break; // Weitere Fälle hier hinzufügen... default: sauceName = "Unbekannte Soßeart"; break; } //double final = price +preis; Zubereitung zubereitung(selectedRamen, selectedSauce); double final = zubereitung.getprice(); paymentProcessor->setTotalAmount(final); ui->labelTotalAmount->setText(QString::number(paymentProcessor->getTotalAmount()) + " €"); ui->labelSelectedRamen->setText("Selected Ramen: " + ramenName); ui->labelSelectedSauce->setText("Selected Sauce: " + sauceName); } void MainWindow::on_buttonConfirmSelection_clicked() { Zubereitung *zubereitung = new Zubereitung(selectedRamen, selectedSauce); if (paymentProcessor != nullptr) { delete paymentProcessor; // Vorherige Instanz löschen, um Speicherlecks zu vermeiden } paymentProcessor = new PaymentProcessor(zubereitung, this); updateLabels(); // Hier können Sie den Preis anzeigen oder andere Aktionen durchführen ui->labelTotalAmount->setText(QString::number(paymentProcessor->getTotalAmount()) + " €"); ui->labelPaidAmount->setText(QString::number(paymentProcessor->getPaidAmount()) + " €"); } /* void MainWindow::on_buttonCash5_clicked() { int amount = 5; // Der Wert 5 entspricht dem 5€-Schein paymentProcessor->processCashPayment(amount); } */ void MainWindow::on_pushButton_3_clicked() { if (ui->radioButton_2->isChecked()) selectedGeldschein = GeldscheinTyp::Zehn; } void MainWindow::checkCashBalance() { double cashBalance = paymentProcessor->getCashBalance(); QMessageBox::information(this, tr("Cash Balance"), tr("Current cash balance: %1 €").arg(cashBalance)); } void MainWindow::clearCashBalance() { paymentProcessor->clearCashBalance(); QMessageBox::information(this, tr("Cash Balance Cleared"), tr("The cash balance has been cleared.")); } void MainWindow::on_pushButton_4_clicked() { ui->stackedWidget->setCurrentIndex(0); } /*void MainWindow::on_startSimulationButton_clicked() { if (!secondwindow) { secondwindow = new Dialog1(this); } secondwindow->startSimulation(); secondwindow->show(); }*/ void MainWindow::on_startSimulationButton_clicked() { if (!secondwindow) { secondwindow = new Dialog1(this); } // Positioniere das zweite Fenster neben dem Hauptfenster QPoint mainWindowPos = this->pos(); QSize mainWindowSize = this->size(); int secondWindowX = mainWindowPos.x() + mainWindowSize.width(); int secondWindowY = mainWindowPos.y(); secondwindow->move(secondWindowX, secondWindowY); secondwindow->startSimulation(); secondwindow->show(); } void MainWindow::updateChangeLabel() { double change = paymentProcessor->getChange(); ui->changeLabel->setText(QString("Rückgeld: %1 €").arg(change)); paymentProcessor->reset(); }