works store

This commit is contained in:
Andrei Yankovich 2021-08-15 10:21:12 +03:00
parent dd206439d6
commit ce75c0c5ee
14 changed files with 113 additions and 17 deletions

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>TestLvl::TestSnake</name> <name>TestLvl::TestSnake</name>
<message> <message>

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>TestLvl::TestSnake</name> <name>TestLvl::TestSnake</name>
<message> <message>

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>TestLvl::TestSnake</name> <name>TestLvl::TestSnake</name>
<message> <message>

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>TestLvl::TestSnake</name> <name>TestLvl::TestSnake</name>
<message> <message>

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>TestLvl::TestSnake</name> <name>TestLvl::TestSnake</name>
<message> <message>

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>TestLvl::TestSnake</name> <name>TestLvl::TestSnake</name>
<message> <message>

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>TestLvl::TestSnake</name> <name>TestLvl::TestSnake</name>
<message> <message>

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>TestLvl::TestSnake</name> <name>TestLvl::TestSnake</name>
<message> <message>

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>TestLvl::TestSnake</name> <name>TestLvl::TestSnake</name>
<message> <message>

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>TestLvl::TestSnake</name> <name>TestLvl::TestSnake</name>
<message> <message>

View File

@ -10,10 +10,6 @@ StoreViewModel::StoreViewModel() {
} }
QModelIndex StoreViewModel::index(int row, int column, const QModelIndex &parent) const {
return QAbstractListModel::index(row, column, parent);
}
int StoreViewModel::rowCount(const QModelIndex &) const { int StoreViewModel::rowCount(const QModelIndex &) const {
return _keys.size(); return _keys.size();
} }
@ -65,12 +61,17 @@ void StoreViewModel::init(Store *store, User *user) {
int diff = store->size() - _keys.size(); int diff = store->size() - _keys.size();
if (diff > 0) { auto update = [this](Store *store) {
beginInsertRows({}, _keys.size(), store->size() - 1);
_store = store; _store = store;
_keys = store->keysList(); _keys = store->keysList();
for (int index = 0; index < _keys.size(); ++index) {
_keysIndexes[index] = _keys[index];
}
};
if (diff > 0) {
beginInsertRows({}, _keys.size(), store->size() - 1);
update(store);
endInsertRows(); endInsertRows();
} else if (diff == 0) { } else if (diff == 0) {
@ -78,17 +79,26 @@ void StoreViewModel::init(Store *store, User *user) {
} else { } else {
beginRemoveRows({}, store->size(), _keys.size() - 1); beginRemoveRows({}, store->size(), _keys.size() - 1);
update(store);
_store = store;
_keys = store->keysList();
endRemoveRows(); endRemoveRows();
} }
} }
void StoreViewModel::setUser(User *user) { void StoreViewModel::setUser(User *user) {
if (_currentUser) {
disconnect(_currentUser, &User::sigItemsUlocked,
this, &StoreViewModel::handleItemsUnlocked);
}
_currentUser = user; _currentUser = user;
emit dataChanged(index(0,0), index(rowCount() - 1, columnCount() - 1), {ItemWasBuy});
if (_currentUser) {
connect(_currentUser, &User::sigItemsUlocked,
this, &StoreViewModel::handleItemsUnlocked);
handleItemsUnlocked(_currentUser->unlockedItems());
}
} }
bool StoreViewModel::visible() const { bool StoreViewModel::visible() const {
@ -107,4 +117,11 @@ void StoreViewModel::buy(int item) {
_store->buy(*_currentUser, item); _store->buy(*_currentUser, item);
} }
} }
void StoreViewModel::handleItemsUnlocked (const QSet<int> & ) {
emit dataChanged(index(0,0), index(_keys.size() - 1, 0), {ItemWasBuy});
}
} }

View File

@ -29,7 +29,6 @@ class StoreViewModel: public QAbstractListModel
public: public:
StoreViewModel(); StoreViewModel();
QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override;
int rowCount(const QModelIndex &parent = {}) const override; int rowCount(const QModelIndex &parent = {}) const override;
int columnCount(const QModelIndex &parent = {}) const override; int columnCount(const QModelIndex &parent = {}) const override;
QVariant data(const QModelIndex &index, int role) const override; QVariant data(const QModelIndex &index, int role) const override;
@ -68,10 +67,18 @@ public:
Q_INVOKABLE void buy(int item); Q_INVOKABLE void buy(int item);
signals: signals:
/**
* @brief visibleChanged This slot emited when store visibel changed
*/
void visibleChanged(); void visibleChanged();
private slots:
void handleItemsUnlocked(const QSet<int> &);
private: private:
void updateView();
enum StoreRoles { enum StoreRoles {
ItemId, ItemId,
ItemName, ItemName,
@ -82,8 +89,10 @@ private:
Store *_store = nullptr; Store *_store = nullptr;
QList<int> _keys; QList<int> _keys;
QHash<int, int> _keysIndexes;
User* _currentUser = nullptr; User* _currentUser = nullptr;
bool _visible = false; bool _visible = false;
}; };
} }

View File

@ -60,7 +60,7 @@ bool User::isUnlocked(int item) const {
void User::unclokItem(int item) { void User::unclokItem(int item) {
_unlockedItems.insert(item); _unlockedItems.insert(item);
emit itemUlocked({item}); emit sigItemsUlocked({item});
} }
void User::droppItem(int item) { void User::droppItem(int item) {
@ -69,7 +69,7 @@ void User::droppItem(int item) {
void User::setUnlockedItems(const QSet<int> &newUnlockedItems) { void User::setUnlockedItems(const QSet<int> &newUnlockedItems) {
_unlockedItems = newUnlockedItems; _unlockedItems = newUnlockedItems;
emit itemUlocked(newUnlockedItems); emit sigItemsUlocked(newUnlockedItems);
} }
int User::recalcTier() { int User::recalcTier() {

View File

@ -145,10 +145,10 @@ signals:
void xpChanged(); void xpChanged();
/** /**
* @brief itemUlocked This signal emited when user unlocked item. * @brief sigItemsUlocked This signal emited when user unlocked item.
* @param unclokedItems This is unlocked items set. Each items in the set is id of the unclocked item. * @param unclokedItems This is unlocked items set. Each items in the set is id of the unclocked item.
*/ */
void itemUlocked(const QSet<int> & unclokedItems); void sigItemsUlocked(const QSet<int> & unclokedItems);
protected: protected:
/** /**