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 }