#include "projecttreemodel.h" #include #include #include #include #include #include "futurecpp.h" #include "projectcontainer.h" namespace { enum { RowSprites, RowSounds, RowBackgrounds, RowPaths, RowScripts, RowFonts, RowTimeLines, RowObjects, RowRooms, RowGameInformation, RowGlobalGameSettings, RowExtensionPackages, NumberOfRows }; } ProjectTreeModel::ProjectTreeModel(QObject *parent) : QAbstractItemModel{parent} { } ProjectTreeModel::ProjectTreeModel(ProjectContainer &project, QObject *parent) : QAbstractItemModel{parent}, m_project{&project} { } QModelIndex ProjectTreeModel::index(int row, int column, const QModelIndex &parent) const { if (!parent.isValid()) return createIndex(row, column, std::to_underlying(NodeType::Root)); else if (!parent.parent().isValid()) { switch (nodeType(parent)) { case NodeType::Root: switch (parent.row()) { case RowSprites: return createIndex(row, column, std::to_underlying(NodeType::Sprite)); case RowSounds: return createIndex(row, column, std::to_underlying(NodeType::Sound)); case RowBackgrounds: return createIndex(row, column, std::to_underlying(NodeType::Background)); case RowPaths: return createIndex(row, column, std::to_underlying(NodeType::Path)); case RowScripts: return createIndex(row, column, std::to_underlying(NodeType::Script)); case RowFonts: return createIndex(row, column, std::to_underlying(NodeType::Font)); case RowTimeLines: return createIndex(row, column, std::to_underlying(NodeType::TimeLine)); case RowObjects: return createIndex(row, column, std::to_underlying(NodeType::Object)); case RowRooms: return createIndex(row, column, std::to_underlying(NodeType::Room)); default: qWarning() << "unexpected parent row" << parent.row(); return {}; } default: qWarning() << "unexpected parent type" << parent.internalId(); return {}; } } else { qWarning() << "unexpected parent"; return {}; } } QModelIndex ProjectTreeModel::parent(const QModelIndex &child) const { switch (nodeType(child)) { case NodeType::Root: return {}; case NodeType::Sprite: return rootFor(); case NodeType::Sound: return rootFor(); case NodeType::Background: return rootFor(); case NodeType::Path: return rootFor(); case NodeType::Script: return rootFor