File indexing completed on 2024-05-12 05:39:50

0001 #ifndef FILTEREDCHARACTERMODEL_H
0002 #define FILTEREDCHARACTERMODEL_H
0003 
0004 #include "core_global.h"
0005 #include "model/nonplayablecharactermodel.h"
0006 #include <QSortFilterProxyModel>
0007 
0008 namespace campaign
0009 {
0010 class CORE_EXPORT FilteredCharacterModel : public QSortFilterProxyModel
0011 {
0012     Q_OBJECT
0013     // clang-format off
0014     Q_PROPERTY(QString search READ search WRITE setSearch NOTIFY searchChanged)
0015     Q_PROPERTY(bool advanced READ advanced WRITE setAdvanced NOTIFY advancedChanged)
0016     Q_PROPERTY(QString exclude READ exclude WRITE setExclude NOTIFY excludeChanged)
0017     Q_PROPERTY(QString tags READ tags WRITE setTags NOTIFY tagsChanged)
0018     Q_PROPERTY(QString excludeTags READ excludeTags WRITE setExcludeTags NOTIFY excludeTagsChanged)
0019     Q_PROPERTY(Definition avatarDefinition READ avatarDefinition WRITE setAvatarDefinition NOTIFY avatarDefinitionChanged)
0020     Q_PROPERTY(Definition initiativeScoreDef READ initiativeScoreDef WRITE setInitiativeScoreDef NOTIFY initiativeScoreDefChanged)
0021     Q_PROPERTY(Definition actionDef READ actionDef WRITE setActionDef NOTIFY actionDefChanged)
0022     Q_PROPERTY(Definition shapeDef READ shapeDef WRITE setShapeDef NOTIFY shapeDefChanged)
0023     Q_PROPERTY(Definition propertiesDef READ propertiesDef WRITE setPropertiesDef NOTIFY propertiesDefChanged)
0024     Q_PROPERTY(Definition initiativeCmdDef READ initiativeCmdDef WRITE setInitiativeCmdDef NOTIFY initiativeCmdDefChanged)
0025     Q_PROPERTY(Definition gmdetailsDef READ gmdetailsDef WRITE setGmdetailsDef NOTIFY gmdetailsDefChanged)
0026     Q_PROPERTY(QString gmdetails READ gmdetails WRITE setGmdetails NOTIFY gmdetailsChanged)
0027     Q_PROPERTY(FilteredCharacterModel::HealthState hlState READ hlState WRITE setHlState NOTIFY hlStateChanged)
0028     Q_PROPERTY(QString characterStateId READ characterStateId WRITE setCharacterStateId NOTIFY characterStateIdChanged)
0029     // clang-format on
0030 public:
0031     enum Definition
0032     {
0033         All,
0034         With,
0035         Without,
0036     };
0037     Q_ENUM(Definition)
0038     enum HealthState
0039     {
0040         HS_All,
0041         HS_Full,
0042         HS_Injured,
0043         HS_Dead,
0044     };
0045     Q_ENUM(HealthState)
0046 
0047     FilteredCharacterModel();
0048     QString search() const;
0049     void setSearch(const QString& search);
0050 
0051     FilteredCharacterModel::Definition initiativeCmdDef() const;
0052     void setInitiativeCmdDef(FilteredCharacterModel::Definition newInitiativeCmdDef);
0053 
0054     FilteredCharacterModel::Definition propertiesDef() const;
0055     void setPropertiesDef(FilteredCharacterModel::Definition newPropertiesDef);
0056 
0057     FilteredCharacterModel::Definition shapeDef() const;
0058     void setShapeDef(FilteredCharacterModel::Definition newShapeDef);
0059 
0060     FilteredCharacterModel::Definition actionDef() const;
0061     void setActionDef(FilteredCharacterModel::Definition newActionDef);
0062 
0063     FilteredCharacterModel::Definition initiativeScoreDef() const;
0064     void setInitiativeScoreDef(FilteredCharacterModel::Definition newInitiativeScoreDef);
0065 
0066     FilteredCharacterModel::Definition avatarDefinition() const;
0067     void setAvatarDefinition(campaign::FilteredCharacterModel::Definition newAvatarDefinition);
0068 
0069     bool advanced() const;
0070     void setAdvanced(bool newAdvanced);
0071 
0072     const QString& exclude() const;
0073     void setExclude(const QString& newExclude);
0074 
0075     const QString& tags() const;
0076     void setTags(const QString& newTags);
0077 
0078     const QString& excludeTags() const;
0079     void setExcludeTags(const QString& newExcludeTags);
0080 
0081     FilteredCharacterModel::Definition gmdetailsDef() const;
0082     void setGmdetailsDef(FilteredCharacterModel::Definition newGmdetailsDef);
0083 
0084     const QString& gmdetails() const;
0085     void setGmdetails(const QString& newGmdetails);
0086 
0087     FilteredCharacterModel::HealthState hlState() const;
0088     void setHlState(FilteredCharacterModel::HealthState newHlState);
0089 
0090     QString characterStateId() const;
0091     void setCharacterStateId(const QString& newCharacterStateId);
0092 
0093 protected:
0094     bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override;
0095     bool lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const override;
0096 
0097 signals:
0098     void searchChanged();
0099     void initiativeCmdDefChanged();
0100     void propertiesDefChanged();
0101     void shapeDefChanged();
0102     void actionDefChanged();
0103     void initiativeScoreDefChanged();
0104     void avatarDefinitionChanged();
0105     void advancedChanged();
0106     void excludeChanged();
0107     void tagsChanged();
0108     void excludeTagsChanged();
0109     void gmdetailsDefChanged();
0110     void gmdetailsChanged();
0111     void hlStateChanged();
0112 
0113     void characterStateIdChanged();
0114 
0115 private:
0116     QString m_search;
0117     int m_role= -1;
0118     Definition m_initiativeCmdDef{All};
0119     Definition m_propertiesDef{All};
0120     Definition m_shapeDef{All};
0121     Definition m_actionDef{All};
0122     Definition m_initiativeScoreDef{All};
0123     Definition m_avatarDefinition{All};
0124     Definition m_gmdetailsDef{All};
0125     bool m_advanced{};
0126     QString m_exclude;
0127     QString m_tags;
0128     QString m_excludeTags;
0129     QString m_gmdetails;
0130     FilteredCharacterModel::HealthState m_hlState{HS_All};
0131     QString m_characterStateId;
0132 };
0133 } // namespace campaign
0134 #endif // FILTEREDCHARACTERMODEL_H