diff options
Diffstat (limited to 'catalog.cxx')
-rw-r--r-- | catalog.cxx | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/catalog.cxx b/catalog.cxx new file mode 100644 index 0000000..17702bc --- /dev/null +++ b/catalog.cxx @@ -0,0 +1,62 @@ +#include "qicclient/catalog.hxx" + +namespace ICClient { + + int Catalog::rowCount(QModelIndex const& parent) const + { + Q_UNUSED(parent) + return products.count(); + } + + QVariant Catalog::data(QModelIndex const& index, int role) const + { + auto row = index.row(); + + if (row < 0 || row >= products.count()) return QVariant(); + + auto product = products[row]; + switch (role) { + case SkuRole: + return product.sku(); + case DescriptionRole: + return product.description(); + case CommentRole: + return product.comment(); + case ImageRole: + return product.image(); + case PriceRole: + return product.price(); + default: + return QVariant(); + } + } + + QHash<int, QByteArray> Catalog::roleNames() const + { + return QHash<int, QByteArray>{ + {SkuRole, "sku"} + , {DescriptionRole, "description"} + , {CommentRole, "comment"} + , {ImageRole, "image"} + , {PriceRole, "price"} + }; + } + + void Catalog::addProduct(Product const& product) + { + beginInsertRows(QModelIndex(), rowCount(), rowCount()); + products << product; + endInsertRows(); + } + + void Catalog::update(icclient_catalog* catalog) + { + if (catalog) { + for (size_t i = 0; i < catalog->length; i++) + addProduct(Product{catalog->products[i]}); + icclient_product_freecatalog(catalog); + } + emit updated(); + } + +} |