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>
</message>
</context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TestLvl::TestSnake</name>
<message>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -111,6 +111,13 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>StoreView</name>
<message>
<source>Buy</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TestLvl::TestSnake</name>
<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 {
return _keys.size();
}
@ -65,12 +61,17 @@ void StoreViewModel::init(Store *store, User *user) {
int diff = store->size() - _keys.size();
if (diff > 0) {
beginInsertRows({}, _keys.size(), store->size() - 1);
auto update = [this](Store *store) {
_store = store;
_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();
} else if (diff == 0) {
@ -78,17 +79,26 @@ void StoreViewModel::init(Store *store, User *user) {
} else {
beginRemoveRows({}, store->size(), _keys.size() - 1);
_store = store;
_keys = store->keysList();
update(store);
endRemoveRows();
}
}
void StoreViewModel::setUser(User *user) {
if (_currentUser) {
disconnect(_currentUser, &User::sigItemsUlocked,
this, &StoreViewModel::handleItemsUnlocked);
}
_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 {
@ -107,4 +117,11 @@ void StoreViewModel::buy(int 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:
StoreViewModel();
QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override;
int rowCount(const QModelIndex &parent = {}) const override;
int columnCount(const QModelIndex &parent = {}) const override;
QVariant data(const QModelIndex &index, int role) const override;
@ -68,10 +67,18 @@ public:
Q_INVOKABLE void buy(int item);
signals:
/**
* @brief visibleChanged This slot emited when store visibel changed
*/
void visibleChanged();
private slots:
void handleItemsUnlocked(const QSet<int> &);
private:
void updateView();
enum StoreRoles {
ItemId,
ItemName,
@ -82,8 +89,10 @@ private:
Store *_store = nullptr;
QList<int> _keys;
QHash<int, int> _keysIndexes;
User* _currentUser = nullptr;
bool _visible = false;
};
}

View File

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

View File

@ -145,10 +145,10 @@ signals:
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.
*/
void itemUlocked(const QSet<int> & unclokedItems);
void sigItemsUlocked(const QSet<int> & unclokedItems);
protected:
/**