diff options
| -rw-r--r-- | interchange/ord.hxx | 11 | ||||
| -rw-r--r-- | ord.cxx | 29 | 
2 files changed, 22 insertions, 18 deletions
diff --git a/interchange/ord.hxx b/interchange/ord.hxx index 302e6db..390d415 100644 --- a/interchange/ord.hxx +++ b/interchange/ord.hxx @@ -48,7 +48,7 @@ namespace QInterchange {  			Ord() {}  			explicit Ord(struct interchange_ord_order *order,  					QObject* parent = nullptr); -			~Ord() {} +			virtual ~Ord() { for (auto item : items) delete item; }  			int rowCount(QModelIndex const& parent = QModelIndex()) const Q_DECL_OVERRIDE;  			QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const  				Q_DECL_OVERRIDE; @@ -76,13 +76,16 @@ namespace QInterchange {  		protected:  			QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;  			void init(struct interchange_ord_order *order); -			void addItem(Item const &item); -			const Item &itemAt(int row) const { return items[row]; } +			void addItem(Item *item); +			const Item *itemAt(int row) const +			{ +				return items.at(row); +			}  			void emitUpdate(const QString &response);  			void emitTransaction(QString const& response);  		private: -			QList<Item> items; +			QList<Item *> items;  			QString profile;  			double m_subtotal;  			double m_shipping; @@ -14,7 +14,7 @@ namespace QInterchange {  	{  		init(order);  		for (size_t i = 0; i < order->nitems; i++) -			addItem(Item{&order->items[i]}); +			addItem(new Item{&order->items[i]});  	}  	void Ord::init(struct interchange_ord_order *order) @@ -35,24 +35,24 @@ namespace QInterchange {  	{  		auto row = index.row();  		if (row < 0 || row >= items.count()) return QVariant(); -		auto item = items[row]; +		auto item = items.at(row);  		switch (role) {  			case Product::SkuRole: -				return item.sku; +				return item->sku;  			case Product::TitleRole: -				return item.title; +				return item->title;  			case Product::DescriptionRole: -				return item.description; +				return item->description;  			case Product::ImageRole: -				return item.image; +				return item->image;  			case Product::PriceRole: -				return item.price; +				return item->price;  			case Product::OptionTypeRole: -				return item.optionType; +				return item->optionType;  			case Item::QuantityRole: -				return item.quantity; +				return item->quantity;  			case Item::NameRole: -				return item.name; +				return item->name;  			default:  				return QVariant();  		} @@ -72,18 +72,19 @@ namespace QInterchange {  		};  	} -	void Ord::addItem(Item const& item) +	void Ord::addItem(Item *item)  	{ -		auto sku = item.sku; +		auto sku = item->sku;  		auto iterator = std::find_if(items.begin(), items.end(), -				[&sku](Item const& item) { -			return sku == item.sku; +				[&sku](Item *item) { +			return sku == item->sku;  		});  		if (iterator != items.end()) {  			auto index = items.indexOf(*iterator);  			beginRemoveRows(QModelIndex(), index, index);  			items.removeAt(index);  			endRemoveRows(); +			delete *iterator;  		}  		beginInsertRows(QModelIndex(), rowCount(), rowCount());  		items << item;  |