File indexing completed on 2024-06-16 05:11:59

0001 #ifndef CHARACTER_CONTROLLER_H
0002 #define CHARACTER_CONTROLLER_H
0003 
0004 #include <QObject>
0005 #include <QUndoStack>
0006 #include <memory>
0007 
0008 #include "charactersheet/charactersheetmodel.h"
0009 #include "data/characterlist.h"
0010 
0011 class Section;
0012 class QAction;
0013 class QTreeView;
0014 
0015 class CharacterController : public QObject
0016 {
0017     Q_OBJECT
0018     Q_PROPERTY(CharacterSheetModel* model READ model CONSTANT)
0019     Q_PROPERTY(CharacterList* characters READ characters CONSTANT)
0020     Q_PROPERTY(int characterCount READ characterCount NOTIFY characterCountChanged)
0021 public:
0022     CharacterController(QObject* parent= nullptr);
0023     virtual ~CharacterController();
0024     void setRootSection(Section* section);
0025     void save(QJsonObject& obj);
0026     void load(const QJsonObject& obj, bool);
0027     CharacterSheetModel* model() const;
0028     CharacterList* characters() const;
0029     int characterCount() const;
0030     void checkCharacter(Section* sec);
0031     CharacterSheet* characterSheetFromIndex(int index) const;
0032     CharacterSheet* characterSheetFromUuid(const QString& uuid) const;
0033 
0034     void clear();
0035 
0036 public slots:
0037     void addCharacter();
0038     void removeCharacter(int index);
0039     void insertCharacter(int pos, CharacterSheet* sheet);
0040 
0041     void sendAddCharacterCommand();
0042     void sendRemoveCharacterCommand(const QModelIndex& index);
0043     void applyOnSelection(const QModelIndex& index, const QModelIndexList& list);
0044     void applyOnAllCharacter(const QModelIndex& index);
0045 
0046 signals:
0047     void characterCountChanged(int csCount);
0048     void dataChanged();
0049     void performCommand(QUndoCommand* cmd);
0050 
0051 private:
0052     std::unique_ptr<CharacterSheetModel> m_characterModel;
0053     std::unique_ptr<CharacterList> m_characters;
0054 };
0055 
0056 #endif