#include "sellermodel.h" #include #include SellerModel::SellerModel(Marketplace* market, QObject* parent) : QAbstractTableModel(parent), marketplace_(market) { } int SellerModel::rowCount(const QModelIndex& parent) const { return marketplace_->getSellers().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 = marketplace_->getSellers().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 ""; } Qt::ItemFlags SellerModel::flags(const QModelIndex& index) const { return QAbstractTableModel::flags(index) | Qt::ItemFlag::ItemIsEditable; } bool SellerModel::setData(const QModelIndex& index, const QVariant& value, int role) { if (role != Qt::EditRole) return false; Seller* seller = marketplace_->getSellers().at(index.row()).get(); switch (index.column()) { case 0: seller->setUuidFromString(value.toString().toStdString()); break; case 1: { if (value.toInt() < 0) return false; auto iter = std::find_if(marketplace_->getSellers().begin(), marketplace_->getSellers().end(), [&value](const std::unique_ptr& seller) { return value.toInt() == seller->getSellerNo(); }); if (iter != marketplace_->getSellers().end()) { /* QMessageBox(QMessageBox::Icon::Warning, "Fehler", "Die Verkäufernummer muss eindeutig sein.", QMessageBox::StandardButton::Ok) .exec(); */ return false; } seller->setSellerNo(value.toInt()); break; } case 2: seller->setFirstName(value.toString().toStdString()); break; case 3: seller->setLastName(value.toString().toStdString()); break; case 4: seller->setNumArticlesOffered(value.toInt()); break; default: return false; } if (seller->getState() == Seller::State::OK) seller->setState(Seller::State::UPDATE); dataChanged(index, index); return true; } bool SellerModel::insertRows(int row, int count, const QModelIndex& parent) { beginInsertRows(parent, row, row + count - 1); auto seller = std::make_unique(); seller->createUuid(); seller->setSellerNo(marketplace_->getNextSellerNo()); marketplace_->getSellers().push_back(std::move(seller)); endInsertRows(); return true; }