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; |