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