File indexing completed on 2024-05-12 05:39:48
0001 /*************************************************************************** 0002 * Copyright (C) 2019 by Renaud Guezennec * 0003 * http://www.rolisteam.org/contact * 0004 * * 0005 * This software is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 * * 0010 * This program is distributed in the hope that it will be useful, * 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0013 * GNU General Public License for more details. * 0014 * * 0015 * You should have received a copy of the GNU General Public License * 0016 * along with this program; if not, write to the * 0017 * Free Software Foundation, Inc., * 0018 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 0019 ***************************************************************************/ 0020 #ifndef GAMECONTROLLER_H 0021 #define GAMECONTROLLER_H 0022 0023 #include <QClipboard> 0024 #include <QObject> 0025 #include <QUndoStack> 0026 #include <core_global.h> 0027 #include <memory> 0028 0029 #include "controller/audiocontroller.h" 0030 #include "controller/contentcontroller.h" 0031 #include "controller/instantmessagingcontroller.h" 0032 #include "controller/networkcontroller.h" 0033 #include "controller/playercontroller.h" 0034 #include "controller/preferencescontroller.h" 0035 #include "data/campaign.h" 0036 #include "data/campaignmanager.h" 0037 #include "diceparser_qobject/diceroller.h" 0038 0039 struct TipOfDay 0040 { 0041 QString title; 0042 QString content; 0043 QString url; 0044 int id; 0045 }; 0046 0047 namespace campaign 0048 { 0049 class CampaignManager; 0050 class Campaign; 0051 } // namespace campaign 0052 0053 class QAbstractItemModel; 0054 class LogController; 0055 class LogSenderScheduler; 0056 class RemoteLogController; 0057 class PreferencesManager; 0058 class PlayerController; 0059 class QSystemTrayIcon; 0060 class AutoSaveController; 0061 class CORE_EXPORT GameController : public QObject 0062 { 0063 Q_OBJECT 0064 Q_PROPERTY(PreferencesController* preferencesController READ preferencesController CONSTANT) 0065 Q_PROPERTY(PlayerController* playerController READ playerController CONSTANT) 0066 Q_PROPERTY(ContentController* contentController READ contentController CONSTANT) 0067 Q_PROPERTY(AudioController* audioController READ audioController CONSTANT) 0068 Q_PROPERTY(NetworkController* networkController READ networkController CONSTANT) 0069 Q_PROPERTY(QString campaignRoot READ campaignRoot WRITE setCampaignRoot NOTIFY campaignRootChanged) 0070 Q_PROPERTY(QString version READ version WRITE setVersion NOTIFY versionChanged) 0071 Q_PROPERTY(QString localPlayerId READ localPlayerId NOTIFY localPlayerIdChanged) 0072 Q_PROPERTY(QString remoteVersion READ remoteVersion NOTIFY remoteVersionChanged) 0073 Q_PROPERTY(TipOfDay tipOfDay READ tipOfDay NOTIFY tipOfDayChanged) 0074 Q_PROPERTY(bool localIsGM READ localIsGM NOTIFY localIsGMChanged) 0075 Q_PROPERTY(bool updateAvailable READ updateAvailable WRITE setUpdateAvailable NOTIFY updateAvailableChanged) 0076 Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged) 0077 Q_PROPERTY(DiceRoller* diceParser READ diceParser CONSTANT) 0078 Q_PROPERTY(campaign::CampaignManager* campaignManager READ campaignManager CONSTANT) 0079 Q_PROPERTY(campaign::Campaign* campaign READ campaign NOTIFY campaignChanged) 0080 public: 0081 explicit GameController(const QString& appname, const QString& version, QClipboard* clipboard, 0082 QObject* parent= nullptr); 0083 ~GameController(); 0084 0085 NetworkController* networkController() const; 0086 PlayerController* playerController() const; 0087 ContentController* contentController() const; 0088 PreferencesController* preferencesController() const; 0089 PreferencesManager* preferencesManager() const; 0090 InstantMessagingController* instantMessagingController() const; 0091 campaign::CampaignManager* campaignManager() const; 0092 campaign::Campaign* campaign() const; 0093 AudioController* audioController() const; 0094 0095 QString version() const; 0096 QString campaignRoot() const; 0097 QString localPlayerId() const; 0098 QString remoteVersion() const; 0099 bool localIsGM() const; 0100 bool updateAvailable() const; 0101 bool tipAvailable() const; 0102 bool connected() const; 0103 QUndoStack* undoStack() const; 0104 DiceRoller* diceParser() const; 0105 0106 LogController* logController() const; 0107 TipOfDay tipOfDay() const; 0108 0109 void clear(); 0110 0111 signals: 0112 void campaignRootChanged(); 0113 void versionChanged(); 0114 void localPlayerIdChanged(); 0115 void localIsGMChanged(bool); 0116 void updateAvailableChanged(); 0117 void connectedChanged(bool b); 0118 void remoteVersionChanged(); 0119 void tipOfDayChanged(); 0120 void closingApp(); 0121 void campaignChanged(); 0122 void dataLoaded(const QStringList missingFiles, const QStringList unmanagedFiles); 0123 0124 public slots: 0125 void addErrorLog(const QString& message, const QString& cat); 0126 void addWarningLog(const QString& message, const QString& cat); 0127 void addFeatureLog(const QString& message, const QString& cat); 0128 void addInfoLog(const QString& message, const QString& cat); 0129 void addSearchLog(const QString& message, const QString& cat); 0130 0131 void startCheckForUpdates(); 0132 void startIpRetriever(); 0133 void startTipOfDay(); 0134 void postSettingInit(); 0135 0136 void setCampaignRoot(const QString& path); 0137 void setVersion(const QString& version); 0138 void setUpdateAvailable(bool available); 0139 void setDataFromProfile(int profileIndex); 0140 void startConnection(); 0141 void stopConnection(); 0142 void postConnection(); 0143 void aboutToClose(); 0144 void setLocalPlayerId(const QString& id); 0145 0146 void newMedia(const std::map<QString, QVariant>& map); 0147 void openMedia(const std::map<QString, QVariant>& map); 0148 0149 void save(); 0150 void saveAs(const QString& path); 0151 0152 private: 0153 void addCommand(QUndoCommand* cmd); 0154 0155 private: 0156 std::unique_ptr<DiceRoller> m_diceParser; 0157 std::unique_ptr<LogController> m_logController; 0158 std::unique_ptr<RemoteLogController> m_remoteLogCtrl; 0159 std::unique_ptr<NetworkController> m_networkCtrl; 0160 std::unique_ptr<PlayerController> m_playerController; 0161 std::unique_ptr<PreferencesController> m_preferencesDialogController; 0162 std::unique_ptr<campaign::CampaignManager> m_campaignManager; 0163 std::unique_ptr<ContentController> m_contentCtrl; 0164 std::unique_ptr<PreferencesManager> m_preferences; 0165 std::unique_ptr<InstantMessagingController> m_instantMessagingCtrl; 0166 std::unique_ptr<AudioController> m_audioCtrl; 0167 0168 QString m_version; 0169 QString m_remoteVersion; 0170 bool m_updateAvailable= false; 0171 TipOfDay m_tipOfTheDay; 0172 std::unique_ptr<QUndoStack> m_undoStack; 0173 std::unique_ptr<AutoSaveController> m_autoSaveCtrl; 0174 }; 0175 0176 #endif // GAMECONTROLLER_H