File indexing completed on 2024-05-12 05:39:48
0001 /*************************************************************************** 0002 * Copyright (C) 2021 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 CAMPAIGN_ANTAGONISTBOARDCONTROLLER_H 0021 #define CAMPAIGN_ANTAGONISTBOARDCONTROLLER_H 0022 0023 #include <QObject> 0024 #include <QPointer> 0025 0026 #include <array> 0027 #include <memory> 0028 0029 #include "core_global.h" 0030 #include "model/characterstatemodel.h" 0031 #include "model/colormodel.h" 0032 #include "model/filteredcharactermodel.h" 0033 #include "model/genericmodel.h" 0034 #include "model/nonplayablecharactermodel.h" 0035 #include "model/statemodel.h" 0036 0037 namespace campaign 0038 { 0039 Q_NAMESPACE 0040 class CampaignEditor; 0041 0042 enum class ModelType 0043 { 0044 Model_Action, 0045 Model_Shape, 0046 Model_Properties 0047 }; 0048 CORE_EXPORT Q_ENUM_NS(ModelType); 0049 0050 class CORE_EXPORT AntagonistBoardController : public QObject 0051 { 0052 Q_OBJECT 0053 0054 Q_PROPERTY(GenericModel* actionModel READ actionModel CONSTANT) 0055 Q_PROPERTY(GenericModel* shapeModel READ shapeModel CONSTANT) 0056 Q_PROPERTY(GenericModel* propertyModel READ propertyModel CONSTANT) 0057 Q_PROPERTY(StateModel* stateModel READ stateModel NOTIFY stateModelChanged) 0058 Q_PROPERTY(NonPlayableCharacter* character READ character WRITE setCharacter NOTIFY characterChanged) 0059 Q_PROPERTY(ColorModel* colorModel READ colorModel CONSTANT) 0060 Q_PROPERTY(StateModel* stateModel READ stateModel CONSTANT) 0061 Q_PROPERTY(bool editingCharacter READ editingCharacter NOTIFY characterChanged) 0062 Q_PROPERTY(QString searchText READ searchText WRITE setSearchText NOTIFY searchTextChanged) 0063 Q_PROPERTY(FilteredCharacterModel* filteredModel READ filteredModel CONSTANT) 0064 Q_PROPERTY(QString imageFolder READ imageFolder CONSTANT) 0065 Q_PROPERTY(CharacterStateModel* characterStateModel READ characterStateModel NOTIFY characterStateModelChanged) 0066 public: 0067 explicit AntagonistBoardController(campaign::CampaignEditor* editor, QObject* parent= nullptr); 0068 0069 GenericModel* actionModel() const; 0070 GenericModel* shapeModel() const; 0071 GenericModel* propertyModel() const; 0072 QString searchText() const; 0073 FilteredCharacterModel* filteredModel() const; 0074 QString imageFolder() const; 0075 0076 bool editingCharacter() const; 0077 NonPlayableCharacter* character() const; 0078 0079 ColorModel* colorModel() const; 0080 StateModel* stateModel() const; 0081 CharacterStateModel* characterStateModel() const; 0082 0083 public slots: 0084 void removeData(const QModelIndex& index, campaign::ModelType type); 0085 void appendData(campaign::ModelType type); 0086 void setSearchText(const QString& text); 0087 void editCharacter(const QString& id); 0088 void setCharacter(campaign::NonPlayableCharacter* character); 0089 void saveToken(); 0090 0091 void addCharacter(); 0092 void removeCharacter(const QString& id); 0093 void changeImage(const QString& id, const QByteArray& filename); 0094 0095 signals: 0096 void characterChanged(); 0097 void searchTextChanged(); 0098 void characterEditionChanged(); 0099 void stateModelChanged(); 0100 void characterStateModelChanged(); 0101 0102 private: 0103 QPointer<campaign::CampaignEditor> m_editor; 0104 std::array<GenericModel*, 3> m_models; 0105 QPointer<NonPlayableCharacter> m_character; 0106 std::unique_ptr<FilteredCharacterModel> m_filteredModel; 0107 std::unique_ptr<ColorModel> m_colorModel; 0108 std::unique_ptr<StateModel> m_stateModel; 0109 QString m_imageFolder; 0110 int m_size= 64; 0111 }; 0112 } // namespace campaign 0113 #endif // CAMPAIGN_ANTAGONISTBOARDCONTROLLER_H