diff -r 0730c68fdf97 -r 773beead236f qmlfrontend/players_model.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlfrontend/players_model.h Fri May 24 23:39:51 2019 +0200 @@ -0,0 +1,83 @@ +#ifndef PLAYERSLISTMODEL_H +#define PLAYERSLISTMODEL_H + +#include +#include +#include +#include +#include +#include + +class PlayersListModel : public QAbstractListModel { + Q_OBJECT + + public: + enum StateFlag { + Ready = Qt::UserRole, + ServerAdmin = Qt::UserRole + 1, + RoomAdmin = Qt::UserRole + 2, + Registered = Qt::UserRole + 3, + Friend = Qt::UserRole + 4, + Ignore = Qt::UserRole + 5, + InGame = Qt::UserRole + 6, + InRoom = Qt::UserRole + 7, + Contributor = Qt::UserRole + 8 + // if you add a role that will affect the player icon, + // then also add it to the flags Qlist in updateIcon()! + }; + + enum SpecialRoles { + SortRole = Qt::UserRole + 100, + RoomFilterRole = Qt::UserRole + 101 + }; + + explicit PlayersListModel(QObject *parent = 0); + + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + + QVariant data(const QModelIndex &index, int role) const override; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::DisplayRole) override; + + void setFlag(const QString &nickname, StateFlag flagType, bool isSet); + bool isFlagSet(const QString &nickname, StateFlag flagType); + + bool insertRows(int row, int count, + const QModelIndex &parent = QModelIndex()) override; + bool removeRows(int row, int count, + const QModelIndex &parent = QModelIndex()) override; + + QModelIndex nicknameIndex(const QString &nickname); + + public slots: + void addPlayer(const QString &nickname, bool notify); + void removePlayer(const QString &nickname, const QString &msg = QString()); + void playerJoinedRoom(const QString &nickname, bool notify); + void playerLeftRoom(const QString &nickname); + void resetRoomFlags(); + void setNickname(const QString &nickname); + + signals: + void nickAdded(const QString &nick, bool notifyNick); + void nickRemoved(const QString &nick); + void nickAddedLobby(const QString &nick, bool notifyNick); + void nickRemovedLobby(const QString &nick, const QString &message); + + private: + QHash &m_icons(); + using DataEntry = QHash; + QList m_data; + QSet m_friendsSet, m_ignoredSet; + QString m_nickname; + QFont m_fontInRoom; + + void updateIcon(const QModelIndex &index); + void updateSortData(const QModelIndex &index); + void loadSet(QSet &set, const QString &fileName); + void saveSet(const QSet &set, const QString &fileName); + void checkFriendIgnore(const QModelIndex &mi); + bool isFriend(const QString &nickname); + bool isIgnored(const QString &nickname); +}; + +#endif // PLAYERSLISTMODEL_H