diff options
author | ꦌꦫꦶꦏ꧀ꦦꦿꦧꦮꦑꦩꦭ꧀ <erik@darapsa.co.id> | 2023-06-19 10:58:31 +0800 |
---|---|---|
committer | ꦌꦫꦶꦏ꧀ꦦꦿꦧꦮꦑꦩꦭ꧀ <erik@darapsa.co.id> | 2023-06-19 10:58:31 +0800 |
commit | 9d6608227a46e62f81b0bad78f12406ba29819cc (patch) | |
tree | cb5fb60b7d753b9200ef941232eab608a68c101b /ord.cxx | |
parent | a6cfa494405bef00571ef676ac153c21622946f9 (diff) |
Ord items list now contain pointers to the Items
so that it can contain subclasses of Item, since the ones contained are
just the pointers. The space reserved for an Item wouldn't be enough for
a subclass' additional members. The space reserved for *a pointer to* an
Item, on the other hand, should be enough for a later casted pointer to
something derived from an Item.
Diffstat (limited to 'ord.cxx')
-rw-r--r-- | ord.cxx | 29 |
1 files changed, 15 insertions, 14 deletions
@@ -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; |