#include "mainwindow.h" #include "basketmodel.h" #include "pricedialog.h" #include "sellerdialog.h" #include #include constexpr int STATUSBAR_TIMEOUT = 5000; MainWindow::MainWindow() { ui_.setupUi(this); marketplace_ = std::make_unique(); marketplace_->loadFromDb(); statusBar()->showMessage("Gespeicherte Daten wurden geladen.", STATUSBAR_TIMEOUT); BasketModel* model = new BasketModel(getMarketplace(), ui_.basketView); ui_.basketView->setModel(model); ui_.basketView->setColumnHidden(0, true); // hide the uuid connect(ui_.actionQuit, &QAction::triggered, qApp, QApplication::quit); connect(ui_.actionEditSeller, &QAction::triggered, this, &MainWindow::on_actionEditSeller_triggered); connect(ui_.sellerNoEdit, &QLineEdit::returnPressed, this, &MainWindow::on_sellerNoEdit_checkSellerNo); connect(ui_.paidButton, &QPushButton::clicked, this, &MainWindow::on_paidButton_triggered); connect(ui_.basketView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &MainWindow::onBasketViewSelectionChanged); } void MainWindow::on_actionEditSeller_triggered() { auto dialog = std::make_unique(this); int retCode = dialog->exec(); if (retCode == QDialog::Accepted) { marketplace_->sortSellers(); marketplace_->storeToDb(); statusBar()->showMessage("Änderungen an den Verkäufer-Stammdaten gespeichert.", STATUSBAR_TIMEOUT); } else { marketplace_->loadFromDb(); statusBar()->showMessage("Änderungen an den Verkäufer-Stammdaten verworfen!", STATUSBAR_TIMEOUT); } } void MainWindow::on_paidButton_triggered() { if (marketplace_->basketSize() > 0) { dynamic_cast(ui_.basketView->model())->finishSale(); } return; } void MainWindow::on_sellerNoEdit_checkSellerNo() { using std::regex, std::regex_match, std::smatch; auto inputText = ui_.sellerNoEdit->text().toStdString(); if (inputText.empty()) { if (marketplace_->basketSize() > 0) { dynamic_cast(ui_.basketView->model())->finishSale(); } return; } regex pattern{R"(\d{1,5})"}; smatch result; if (!regex_match(inputText, result, pattern)) { return; } int sellerNo = std::stoi(result[0]); auto seller = marketplace_->findSellerWithSellerNo(sellerNo); if (seller) { PriceDialog priceDialog(this); auto dialogResult = priceDialog.exec(); if (dialogResult == QDialog::Accepted) { int price = priceDialog.getPrice(); dynamic_cast(ui_.basketView->model())->addArticle(seller, price); } } ui_.sellerNoEdit->clear(); } void MainWindow::onBasketViewSelectionChanged(const QItemSelection& selected, [[maybe_unused]] const QItemSelection& deselected) { if (selected.size() > 0) { ui_.cancelArticleButton->setEnabled(true); } else { ui_.cancelArticleButton->setEnabled(false); } }