From 207edb27ba7ae598c8b29fdc1b16c3837c4cb576 Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Mon, 16 Jul 2018 12:00:17 +0200 Subject: [PATCH] more on sellerdialog --- .vscode/c_cpp_properties.json | 3 +- .vscode/settings.json | 3 +- src/core/entity.h | 1 + src/core/marketplace.cpp | 13 ++++++-- src/core/marketplace.h | 3 ++ src/gui/CMakeLists.txt | 3 ++ src/gui/mainwindow.cpp | 8 +++++ src/gui/mainwindow.h | 6 +++- src/gui/sellerdialog.cpp | 12 ++++++++ src/gui/sellerdialog.h | 22 +++++++++++++ src/gui/sellerdialog.ui | 32 +++++++++++-------- src/gui/sellermodel.cpp | 58 +++++++++++++++++++++++++++++++++++ src/gui/sellermodel.h | 21 +++++++++++++ 13 files changed, 168 insertions(+), 17 deletions(-) create mode 100644 src/gui/sellerdialog.cpp create mode 100644 src/gui/sellerdialog.h create mode 100644 src/gui/sellermodel.cpp create mode 100644 src/gui/sellermodel.h diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 238b7e5..4a7f15c 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -5,7 +5,8 @@ "includePath": [ "${workspaceFolder}/**", "/usr/include/qt", - "/usr/include/qt/QtWidgets" + "/usr/include/qt/QtWidgets", + "/usr/include/qt/QtCore" ], "defines": [], "compilerPath": "/usr/bin/clang", diff --git a/.vscode/settings.json b/.vscode/settings.json index 4d57c80..cd2d78b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -61,5 +61,6 @@ "utility": "cpp", "variant": "cpp", "algorithm": "cpp" - } + }, + "C_Cpp.clang_format_path": "/usr/bin/clang-format" } \ No newline at end of file diff --git a/src/core/entity.h b/src/core/entity.h index 7c37fbf..124412a 100644 --- a/src/core/entity.h +++ b/src/core/entity.h @@ -19,6 +19,7 @@ class Entity void setSourceNo(int sourceNo); const boost::uuids::uuid& getUuid() const { return uuid_; }; + std::string getUuidAsString() const { return boost::uuids::to_string(uuid_); } virtual State getState() const; virtual int getSourceNo() const; diff --git a/src/core/marketplace.cpp b/src/core/marketplace.cpp index 946e1ad..b0e6b46 100644 --- a/src/core/marketplace.cpp +++ b/src/core/marketplace.cpp @@ -1,9 +1,18 @@ #include "marketplace.h" #include "database.h" -void Marketplace::storeToDb() { +Marketplace::Marketplace() +{ + auto seller = std::make_shared("Max", "Mustermann"); + sellers_.push_back(seller); +} + +void Marketplace::storeToDb() +{ const std::string DB_PATH{"/tmp/kima2.db"}; Database db(DB_PATH); db.storeSellers(sellers_); -} \ No newline at end of file +} + +std::vector>& Marketplace::getSellers() { return sellers_; } \ No newline at end of file diff --git a/src/core/marketplace.h b/src/core/marketplace.h index 9656a37..03e5221 100644 --- a/src/core/marketplace.h +++ b/src/core/marketplace.h @@ -10,8 +10,11 @@ class Marketplace { public: + Marketplace(); void storeToDb(); void loadFromDb(); + std::vector>& getSellers(); + private: std::vector> sellers_; std::vector> sales_; diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 6425366..0ddff48 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -12,6 +12,9 @@ set(GUI_SOURCES kima2.cpp mainwindow.cpp mainwindow.ui + sellerdialog.cpp + sellerdialog.ui + sellermodel.cpp ) add_executable(kima2 ${GUI_SOURCES}) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index d352cfe..5bf8018 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -1,11 +1,19 @@ #include "mainwindow.h" +#include "sellerdialog.h" + MainWindow::MainWindow() { ui_.setupUi(this); connect(ui_.actionQuit, &QAction::triggered, qApp, QApplication::quit); + connect(ui_.actionEditSeller, &QAction::triggered, this, &MainWindow::on_actionEditSeller_triggered); marketplace_ = std::make_unique(); } +void MainWindow::on_actionEditSeller_triggered() +{ + auto dialog = std::make_unique(this); + dialog->exec(); +} \ No newline at end of file diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 943382c..e9826b4 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -1,9 +1,10 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H +#include "ui_mainwindow.h" + #include -#include "ui_mainwindow.h" #include #include @@ -14,8 +15,11 @@ class MainWindow : public QMainWindow public: MainWindow(); + Marketplace* getMarketplace() {return marketplace_.get();} private: + void on_actionEditSeller_triggered(); + Ui::MainWindow ui_; std::unique_ptr marketplace_; }; diff --git a/src/gui/sellerdialog.cpp b/src/gui/sellerdialog.cpp new file mode 100644 index 0000000..256e740 --- /dev/null +++ b/src/gui/sellerdialog.cpp @@ -0,0 +1,12 @@ +#include "sellerdialog.h" + +#include "mainwindow.h" + +SellerDialog::SellerDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(parent, f) +{ + ui_.setupUi(this); + SellerModel* model = new SellerModel( + dynamic_cast(parent)->getMarketplace()->getSellers(), ui_.tableView); + ui_.tableView->setModel(model); + ui_.tableView->setColumnHidden(0, true); // hide the uuid +} diff --git a/src/gui/sellerdialog.h b/src/gui/sellerdialog.h new file mode 100644 index 0000000..7194e6f --- /dev/null +++ b/src/gui/sellerdialog.h @@ -0,0 +1,22 @@ +#ifndef SELLER_DIALOG_H +#define SELLER_DIALOG_H + +#include "ui_sellerdialog.h" + +#include "sellermodel.h" + +#include + +class SellerDialog : public QDialog +{ + Q_OBJECT + + public: + SellerDialog(QWidget* parent = nullptr, + Qt::WindowFlags f = Qt::WindowTitleHint | Qt::WindowSystemMenuHint); + + private: + Ui::SellerDialog ui_; +}; + +#endif \ No newline at end of file diff --git a/src/gui/sellerdialog.ui b/src/gui/sellerdialog.ui index b789849..28b9edd 100644 --- a/src/gui/sellerdialog.ui +++ b/src/gui/sellerdialog.ui @@ -1,17 +1,15 @@ - sellerDialog - + SellerDialog + Qt::NonModal - - - 0 - 0 - 400 - 300 - + + + 0 + 0 + Verkäufer Dialog @@ -23,7 +21,17 @@ - + + + + 0 + 0 + + + + QAbstractScrollArea::AdjustToContents + + @@ -82,7 +90,7 @@ buttonBox accepted() - sellerDialog + SellerDialog accept() @@ -98,7 +106,7 @@ buttonBox rejected() - sellerDialog + SellerDialog reject() diff --git a/src/gui/sellermodel.cpp b/src/gui/sellermodel.cpp new file mode 100644 index 0000000..62b0b45 --- /dev/null +++ b/src/gui/sellermodel.cpp @@ -0,0 +1,58 @@ +#include "sellermodel.h" + +SellerModel::SellerModel(std::vector>& sellers, QObject* parent) + : QAbstractTableModel(parent), sellers_(&sellers) +{ +} + +int SellerModel::rowCount(const QModelIndex& parent) const { return sellers_->size(); } + +int SellerModel::columnCount(const QModelIndex& parent) const { return 5; } + +QVariant SellerModel::data(const QModelIndex& index, int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + Seller* seller = sellers_->at(index.row()).get(); + switch (index.column()) { + case 0: + return seller->getUuidAsString().c_str(); + case 1: + return seller->getSellerNo(); + case 2: + return seller->getFirstName().c_str(); + case 3: + return QString(seller->getLastName().c_str()); + case 4: + return seller->numArticlesOffered(); + default: + return "???"; + } + return QVariant{}; +} + +QVariant SellerModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) { + switch (section) { + case 0: + return "ID"; + case 1: + return "Nummer"; + case 2: + return "Vorname"; + case 3: + return "Nachname"; + case 4: + return "Anz. Artikel"; + default: + return "???"; + } + return QStringLiteral("%1").arg(section); + } else + return ""; +} \ No newline at end of file diff --git a/src/gui/sellermodel.h b/src/gui/sellermodel.h new file mode 100644 index 0000000..65c4a82 --- /dev/null +++ b/src/gui/sellermodel.h @@ -0,0 +1,21 @@ +#ifndef SELLER_MODEL_H +#define SELLER_MODEL_H + +#include + +#include + +class SellerModel : public QAbstractTableModel +{ + public: + explicit SellerModel(std::vector>& sellers, QObject* parent = nullptr); + virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override; + virtual int columnCount(const QModelIndex& parent = QModelIndex()) const override; + virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; + virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override; + + private: + std::vector>* sellers_; +}; + +#endif \ No newline at end of file