File indexing completed on 2024-05-19 05:40:35

0001 #include "controller/view_controller/charactersheetcontroller.h"
0002 
0003 //#include "charactersheet.h"
0004 #include "charactersheet/charactersheet.h"
0005 #include "charactersheet/charactersheetitem.h"
0006 #include "data/character.h"
0007 
0008 #include "data/player.h"
0009 
0010 QPointer<CharacterModel> CharacterSheetController::m_characterModel;
0011 
0012 CharacterSheetController::CharacterSheetController(const QString& id, const QUrl& path, QObject* parent)
0013     : MediaControllerBase(id, Core::ContentType::CHARACTERSHEET, parent)
0014     , m_model(new CharacterSheetModel)
0015     , m_imageModel(new charactersheet::ImageModel())
0016 {
0017     setUrl(path);
0018 
0019     connect(m_model.get(), &CharacterSheetModel::characterSheetHasBeenAdded, this, [this] { setModified(); });
0020     connect(m_model.get(), &CharacterSheetModel::dataCharacterChange, this, [this] { setModified(); });
0021 
0022     connect(m_imageModel.get(), &charactersheet::ImageModel::internalDataChanged, this, [this] { setModified(); });
0023 }
0024 
0025 CharacterSheetController::~CharacterSheetController() {}
0026 
0027 void CharacterSheetController::setQmlCode(const QString& qml)
0028 {
0029     m_qmlCode= qml;
0030 }
0031 
0032 void CharacterSheetController::addCharacterSheet(const QJsonObject& data, const QString& charId)
0033 { // called to create qml page from network
0034     if(!m_characterModel)
0035         return;
0036     auto sheet= new CharacterSheet();
0037     sheet->load(data);
0038     auto character= m_characterModel->character(charId);
0039 
0040     if(!character)
0041         return;
0042 
0043     auto player= dynamic_cast<Player*>(character->parentPerson());
0044     if(nullptr == player)
0045     {
0046         delete sheet;
0047         qWarning() << "No player found, the sheet cannot be added";
0048         return;
0049     }
0050     character->setSheet(sheet);
0051     m_model->addCharacterSheet(sheet, m_model->getCharacterSheetCount());
0052     emit sheetCreated(sheet, character);
0053 }
0054 
0055 void CharacterSheetController::setGameMasterId(const QString& id)
0056 {
0057     if(id == m_gameMasterId)
0058         return;
0059     m_gameMasterId= id;
0060     emit gameMasterIdChanged();
0061 }
0062 
0063 CharacterSheetModel* CharacterSheetController::model() const
0064 {
0065     return m_model.get();
0066 }
0067 
0068 charactersheet::ImageModel* CharacterSheetController::imageModel() const
0069 {
0070     return m_imageModel.get();
0071 }
0072 
0073 CharacterModel* CharacterSheetController::characterModel() const
0074 {
0075     return m_characterModel;
0076 }
0077 
0078 const QJsonObject& CharacterSheetController::rootJson() const
0079 {
0080     return m_rootJson;
0081 }
0082 
0083 QString CharacterSheetController::qmlCode() const
0084 {
0085     return m_qmlCode;
0086 }
0087 
0088 QString CharacterSheetController::gameMasterId() const
0089 {
0090     return m_gameMasterId;
0091 }
0092 
0093 bool CharacterSheetController::cornerEnabled() const
0094 {
0095     return false;
0096 }
0097 
0098 void CharacterSheetController::updateFieldFrom(const QString& sheetId, const QJsonObject& obj,
0099                                                const QString& parentPath)
0100 {
0101     auto sheet= m_model->getCharacterSheetById(sheetId);
0102 
0103     if(nullptr == sheet)
0104         return;
0105 
0106     sheet->setFieldData(obj, parentPath);
0107 }
0108 
0109 void CharacterSheetController::shareCharacterSheetToAll(int idx)
0110 {
0111     if(!localGM())
0112         return;
0113 
0114     auto sheet= m_model->getCharacterSheet(idx);
0115 
0116     if(sheet == nullptr)
0117         return;
0118 
0119     emit share(this, sheet, CharacterSheetUpdater::SharingMode::ALL, nullptr, {});
0120     // m_characterSheetUpdater->addCharacterSheetUpdate(sheet, CharacterSheetUpdater::UpdateMode::ALL, QStringList());
0121 }
0122 
0123 void CharacterSheetController::shareCharacterSheetTo(const QString& uuid, int idx)
0124 {
0125     if(!m_characterModel)
0126         return;
0127     auto character= m_characterModel->character(uuid);
0128 
0129     auto sheet= m_model->getCharacterSheet(idx);
0130 
0131     if(character == nullptr || sheet == nullptr)
0132         return;
0133 
0134     // MessageHelper::stopSharingSheet(sheet); TODO Stop sharing
0135     auto player= dynamic_cast<Player*>(character->parentPerson());
0136 
0137     if(nullptr == player)
0138         return;
0139     auto dest= player->uuid();
0140 
0141     sheet->setName(character->name());
0142     character->setSheet(sheet);
0143     emit sheetCreated(sheet, character);
0144 
0145     if(localGM())
0146     {
0147         emit share(this, sheet, CharacterSheetUpdater::SharingMode::ONE, character, {dest});
0148     }
0149 }
0150 
0151 void CharacterSheetController::setCharacterModel(CharacterModel* model)
0152 {
0153     m_characterModel= model;
0154 }
0155 
0156 void CharacterSheetController::setRootJson(const QJsonObject& newRootJson)
0157 {
0158     if(m_rootJson == newRootJson)
0159         return;
0160     m_rootJson= newRootJson;
0161     emit rootJsonChanged();
0162 }