diff options
| author | ꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id> | 2020-06-29 15:38:47 +0800 | 
|---|---|---|
| committer | ꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id> | 2020-06-29 15:38:47 +0800 | 
| commit | 228307e324190e760dc298ef84c3ffb29d4c8237 (patch) | |
| tree | 36f97ddb46c12ac98fb81b5969dbf6c64b474702 | |
| parent | a2a5964bddaf61c830f9a2a2a9bf6226c0168e64 (diff) | |
C++ instances keep a pointer to the C version
| -rw-r--r-- | basket.cxx | 16 | ||||
| -rw-r--r-- | catalog.cxx | 4 | ||||
| -rw-r--r-- | client.cxx | 10 | ||||
| m--------- | libicclient | 0 | ||||
| -rw-r--r-- | qicclient/basket.hxx | 5 | ||||
| -rw-r--r-- | qicclient/catalog.hxx | 2 | ||||
| -rw-r--r-- | qicclient/client.hxx | 8 | 
7 files changed, 20 insertions, 25 deletions
| @@ -1,4 +1,5 @@  #include <algorithm> +#include <icclient/ord.h>  #include "qicclient/basket.hxx"  namespace ICClient { @@ -58,18 +59,11 @@ namespace ICClient {  		items << item;  		endInsertRows();  		emit rowCountChanged(); -	} -	void Basket::update(icclient_ord_order* order) -	{ -		if (order) { -			for (size_t i = 0; i < order->nitems; i++) -				addItem(Item{order->items[i]}); -			m_subtotal = order->subtotal; -			m_totalCost = order->total_cost; -			emit subtotalChanged(); -			emit totalCostChanged(); -		} +		/* +		m_subtotal = order->subtotal; +		m_totalCost = order->total_cost; +		*/  	}  } diff --git a/catalog.cxx b/catalog.cxx index 0fe8a20..61fd0fd 100644 --- a/catalog.cxx +++ b/catalog.cxx @@ -6,6 +6,7 @@  namespace ICClient {  	Catalog::Catalog(icclient_catalog* catalog, QObject* parent) : +		catalog{catalog},  		QAbstractListModel{parent}  	{  		for (size_t i = 0; i < catalog->length; i++) @@ -90,8 +91,9 @@ namespace ICClient {  			product.author = catalog->data(index, Product::AuthorRole).toString();  			product.crossSell = catalog->data(index, Product::CrossSellRole).toStringList();  			addProduct(product); -			emit updated();  		} +		this->catalog = const_cast<icclient_catalog*>(catalog->c_catalog()); +		emit updated();  	}  } @@ -4,6 +4,7 @@  #include <icclient/client.h>  #include <icclient/member.h>  #include "qicclient/catalog.hxx" +#include "qicclient/basket.hxx"  #include "qicclient/client.hxx"  namespace ICClient { @@ -43,12 +44,11 @@ namespace ICClient {  		if (product) emit gotFlyPage(shared_ptr<Product>{new Product{product}});  	} -	void Client::order(icclient_ord_order** orderPtr, QString const& sku -			, icclient_catalog* catalog) +	void Client::order(QString const& sku, Catalog const& catalog, Basket& order)  	{ -		icclient_order(orderPtr, sku.toLatin1().constData(), catalog); -		icclient_ord_order* order = *orderPtr; -		emit ordered(order); +		auto c_order = order.c_order(); +		icclient_order(sku.toLatin1().constData(), catalog.c_catalog(), +				&c_order);  	}  	void Client::logIn(size_t (*handler)(void*, size_t, size_t, void*) diff --git a/libicclient b/libicclient -Subproject 3dd44e9bd785d14bd867fa9ca9f17365238578c +Subproject f9ccf11dab8e7ffef363c774c94c660c144f8ef diff --git a/qicclient/basket.hxx b/qicclient/basket.hxx index 019b165..f5665cd 100644 --- a/qicclient/basket.hxx +++ b/qicclient/basket.hxx @@ -54,9 +54,7 @@ namespace ICClient {  			double subtotal() const { return m_subtotal; }  			double shipping() const { return m_shipping; }  			double totalCost() const { return m_totalCost; } - -		public slots: -			void update(icclient_ord_order* order); +			icclient_ord_order* c_order() { return order; }  		signals:  			void rowCountChanged(); @@ -73,6 +71,7 @@ namespace ICClient {  			double m_subtotal;  			double m_shipping;  			double m_totalCost; +			icclient_ord_order* order;  	};  } diff --git a/qicclient/catalog.hxx b/qicclient/catalog.hxx index dfa7a7c..7f1dcfd 100644 --- a/qicclient/catalog.hxx +++ b/qicclient/catalog.hxx @@ -17,6 +17,7 @@ namespace ICClient {  			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; +			icclient_catalog const* c_catalog() const { return catalog; }  		public slots:  			void update(Catalog* catalog); @@ -30,6 +31,7 @@ namespace ICClient {  		private:  			void addProduct(Product const& product);  			QList<Product> products; +			icclient_catalog* catalog;  	};  } diff --git a/qicclient/client.hxx b/qicclient/client.hxx index a87f83f..056b3f8 100644 --- a/qicclient/client.hxx +++ b/qicclient/client.hxx @@ -3,7 +3,6 @@  #include <QObject> -struct icclient_ord_order;  struct icclient_user;  namespace ICClient { @@ -11,6 +10,7 @@ namespace ICClient {  	using std::shared_ptr;  	class Catalog;  	class Product; +	class Basket;  	class Client : public QObject  	{ @@ -31,9 +31,8 @@ namespace ICClient {  						size_t size, size_t nmemb,  						void* userdata),  					QString const& sku); -			void order(icclient_ord_order** orderPtr, -					QString const& sku, -					icclient_catalog* catalog); +			void order(QString const& sku, Catalog const& catalog, +					Basket& order);  			void logIn(size_t (*handler)(void*, size_t, size_t, void*),  					icclient_user* user,  					QString const& username, @@ -72,7 +71,6 @@ namespace ICClient {  		signals:  			void gotResults(Catalog* catalog);  			void gotFlyPage(shared_ptr<Product> product); -			void ordered(icclient_ord_order* order);  			void loggedIn(icclient_user* user);  			void loggedOut();  	}; |