summaryrefslogtreecommitdiff
path: root/qicclient/catalog.hxx
blob: 782c864a60abe99bcdf6d069c09a4063c4666da7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#ifndef QICCLIENT_CATALOG_HXX
#define QICCLIENT_CATALOG_HXX

#include <QAbstractListModel>
#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};
				m_price = product->price;
			}
			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; }
			double price() const { return m_price; }

		private:
			QString m_sku;
			QString m_description;
			QString m_comment;
			QString m_image;
			double 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;

		public slots:
			void update(icclient_catalog* catalog);

		signals:
			void updated();

		protected:
			QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;

		private:
			QList<Product> products;
			void addProduct(Product const& product);
	};

}

#endif // QICCLIENT_CATALOG_HXX