File indexing completed on 2024-05-12 05:39:52
0001 #ifndef CONNECTIONPROFILE_H 0002 #define CONNECTIONPROFILE_H 0003 0004 #include <QObject> 0005 #include <QProperty> 0006 #include <QString> 0007 #include <optional> 0008 0009 #include "network/network_type.h" 0010 #include "network_global.h" 0011 0012 typedef std::function<void(void)> StdFunc; 0013 /** 0014 * @brief The ConnectionProfile class stores any data about the connection: Mode (client or server) or role (GM or 0015 * Player) 0016 */ 0017 class NETWORK_EXPORT ConnectionProfile : public QObject 0018 { 0019 Q_OBJECT 0020 Q_PROPERTY(bool isServer READ isServer WRITE setServerMode NOTIFY serverChanged) 0021 Q_PROPERTY(QString address READ address WRITE setAddress NOTIFY addressChanged) 0022 Q_PROPERTY(int port READ port WRITE setPort NOTIFY portChanged) 0023 Q_PROPERTY(bool isGM READ isGM WRITE setGm NOTIFY gmChanged) 0024 Q_PROPERTY(QString title READ profileTitle WRITE setProfileTitle NOTIFY titleChanged) 0025 Q_PROPERTY(QString campaignPath READ campaignPath WRITE setCampaignPath NOTIFY campaignPathChanged) 0026 Q_PROPERTY(QColor playerColor READ playerColor WRITE setPlayerColor NOTIFY playerColorChanged) 0027 Q_PROPERTY(QString playerName READ playerName WRITE setPlayerName NOTIFY playerNameChanged) 0028 Q_PROPERTY(QString playerId READ playerId WRITE setPlayerId NOTIFY playerIdChanged) 0029 Q_PROPERTY(QByteArray playerAvatar READ playerAvatar WRITE setPlayerAvatar NOTIFY playerAvatarChanged) 0030 0031 Q_PROPERTY(bool valid READ valid NOTIFY validChanged) 0032 Q_PROPERTY(bool connectionInfoValid READ connectionInfoValid NOTIFY connectionInfoValidChanged) 0033 Q_PROPERTY(bool playerInfoValid READ playerInfoValid WRITE setPlayerInfoValid NOTIFY playerInfoValidChanged) 0034 Q_PROPERTY(bool campaignInfoValid READ campaignInfoValid WRITE setCampaignInfoValid NOTIFY campaignInfoValidChanged) 0035 Q_PROPERTY(bool charactersValid READ charactersValid WRITE setCharactersValid NOTIFY charactersValidChanged) 0036 public: 0037 ConnectionProfile(); 0038 0039 virtual ~ConnectionProfile(); 0040 QString profileTitle() const; 0041 QString playerName() const; 0042 QColor playerColor() const; 0043 QByteArray playerAvatar() const; 0044 QString playerId() const; 0045 QString address() const; 0046 quint16 port() const; 0047 bool isServer() const; 0048 bool isGM() const; 0049 QString campaignPath() const; 0050 QByteArray password() const; 0051 0052 bool valid() const; 0053 bool connectionInfoValid() const; 0054 bool playerInfoValid() const; 0055 bool charactersValid() const; 0056 bool campaignInfoValid() const; 0057 0058 const std::vector<connection::CharacterData>& characters(); 0059 void setCharacters(const std::vector<connection::CharacterData>& characters); 0060 connection::CharacterData& character(int i); 0061 void addCharacter(const connection::CharacterData& data); 0062 void removeCharacter(int index); 0063 int characterCount(); 0064 void clearCharacter(); 0065 void cloneProfile(const ConnectionProfile* src); 0066 0067 public slots: 0068 void setProfileTitle(const QString&); 0069 void setPlayerColor(const QColor&); 0070 void setPlayerAvatar(const QByteArray&); 0071 void setPlayerName(const QString&); 0072 void setAddress(const QString&); 0073 void setPlayerId(const QString& playerId); 0074 void setPort(quint16); 0075 void setServerMode(bool); 0076 void setGm(bool); 0077 void setCampaignPath(const QString& id); 0078 void editPassword(const QByteArray& password); 0079 void setHash(const QByteArray& password); 0080 void setCharactersValid(bool val); 0081 void setCampaignInfoValid(bool val); 0082 void setPlayerInfoValid(bool b); 0083 0084 void characterHasChanged(); 0085 0086 signals: 0087 void serverChanged(); 0088 void addressChanged(); 0089 void portChanged(); 0090 void gmChanged(); 0091 void campaignPathChanged(); 0092 void titleChanged(); 0093 void playerColorChanged(); 0094 void playerNameChanged(); 0095 void playerIdChanged(); 0096 void playerAvatarChanged(); 0097 void characterCountChanged(); 0098 void passwordChanged(); 0099 void validChanged(); 0100 void characterChanged(); 0101 0102 void playerInfoValidChanged(); 0103 void charactersValidChanged(); 0104 void campaignInfoValidChanged(); 0105 void connectionInfoValidChanged(); 0106 0107 private slots: 0108 void setValid(bool b); 0109 void setConnectionInfoValid(bool b); 0110 0111 private: 0112 // Profile data 0113 QString m_title; ///< @brief defines the name of the profile. It can be what ever users want. 0114 0115 // Player data 0116 QString m_playerName; 0117 QColor m_playerColor; 0118 QByteArray m_playerAvatar; 0119 QString m_playerId; 0120 bool m_isGM= true; 0121 0122 // Connection data 0123 bool m_server= false; 0124 quint16 m_port= 6660; 0125 QString m_address; 0126 QByteArray m_password; 0127 0128 // campaign dir 0129 QString m_campaignDir; 0130 0131 // Character info 0132 std::vector<connection::CharacterData> m_characters; 0133 0134 bool m_valid{}; 0135 bool m_validConnectionInfo{}; 0136 bool m_validPlayerInfo{}; 0137 bool m_validCharacter{}; 0138 bool m_validCampaign{}; 0139 }; 0140 0141 #endif // CONNECTIONPROFILE_H