summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id>2019-09-26 11:53:13 +0800
committerꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id>2019-09-26 11:53:13 +0800
commitd614c6c8bd12c2a01ab5ef90e34f068bfb019e25 (patch)
tree23a2734963749586824fc08f8636021fcf962e88
parent7974deaf50967b36f2312a484431b2c2dca4dfc6 (diff)
Catalog class
-rw-r--r--catalog.cxx62
m---------libicclient10
-rw-r--r--qicclient.pro2
-rw-r--r--qicclient/catalog.hxx81
4 files changed, 150 insertions, 5 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();
+ }
+
+}
diff --git a/libicclient b/libicclient
-Subproject 212608669c44c24462d803dc238ed21e899c2b9
+Subproject 8b8fcdd17bf243440f52bd74e447afcface8b10
diff --git a/qicclient.pro b/qicclient.pro
index 35d02f8..7adb82e 100644
--- a/qicclient.pro
+++ b/qicclient.pro
@@ -3,8 +3,10 @@ TEMPLATE = lib
CONFIG += staticlib
HEADERS += \
+ qicclient/catalog.hxx \
qicclient/client.hxx
SOURCES += \
+ catalog.cxx \
client.cxx
INCLUDEPATH += $$PWD/libicclient
LIBS += $$PWD/libicclient/libicclient.a
diff --git a/qicclient/catalog.hxx b/qicclient/catalog.hxx
new file mode 100644
index 0000000..07b4c81
--- /dev/null
+++ b/qicclient/catalog.hxx
@@ -0,0 +1,81 @@
+#ifndef QICCLIENT_CATALOG_HXX
+#define QICCLIENT_CATALOG_HXX
+
+#include <QAbstractListModel>
+#include <QLocale>
+#include <icclient/product.h>
+
+struct icclient_catalog;
+
+namespace ICClient {
+
+ class Product
+ {
+ public:
+ Product(icclient_product* product) : m_sku{product->sku}
+ {
+ if (product->description)
+ m_description
+ = QString{product->description};
+ if (product->comment)
+ m_comment = QString{product->comment};
+ if (product->image)
+ m_image = QString{product->image};
+ QLocale locale;
+ if (product->price)
+ m_price = locale.toCurrencyString
+ (product->price, "Rp");
+ }
+ QString const& sku() const { return m_sku; }
+ QString const& description() const { return m_description; }
+ QString const& comment() const { return m_comment; }
+ QString const& image() const { return m_image; }
+ QString const& price() const { return m_price; }
+
+ private:
+ QString m_sku;
+ QString m_description;
+ QString m_comment;
+ QString m_image;
+ QString m_price;
+ };
+
+ class Catalog : public QAbstractListModel
+ {
+ Q_OBJECT
+
+ public:
+ enum ProductRoles {
+ SkuRole = Qt::UserRole + 1,
+ DescriptionRole,
+ CommentRole,
+ ImageRole,
+ PriceRole
+ };
+
+ explicit Catalog(QObject* parent = nullptr)
+ : QAbstractListModel{parent} {}
+
+ int rowCount(QModelIndex const& parent
+ = QModelIndex()) const Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex& index
+ , int role = Qt::DisplayRole
+ ) const Q_DECL_OVERRIDE;
+
+ signals:
+ void updated();
+
+ protected:
+ QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;
+
+ private slots:
+ void update(icclient_catalog* catalog);
+
+ private:
+ QList<Product> products;
+ void addProduct(Product const& product);
+ };
+
+}
+
+#endif // QICCLIENT_CATALOG_HXX