porymap/include/ui/maplistmodels.h

155 lines
4.3 KiB
C
Raw Normal View History

2023-01-30 23:47:37 +00:00
#pragma once
#ifndef MAPLISTMODELS_H
#define MAPLISTMODELS_H
#include <QTreeView>
#include <QFontDatabase>
2023-02-14 06:50:14 +00:00
#include <QStyledItemDelegate>
2023-01-30 23:47:37 +00:00
#include <QStandardItemModel>
#include <QMap>
class Project;
enum MapListUserRoles {
2024-11-14 21:01:54 +00:00
NameRole = Qt::UserRole, // Holds the name of the item in the list
TypeRole, // Used to differentiate between the different layers of the map list tree view.
2023-01-30 23:47:37 +00:00
};
class MapTree : public QTreeView {
Q_OBJECT
public:
MapTree(QWidget *parent) : QTreeView(parent) {
this->setDropIndicatorShown(true);
this->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
2024-10-30 02:18:16 +00:00
this->setFocusPolicy(Qt::StrongFocus);
this->setContextMenuPolicy(Qt::CustomContextMenu);
}
2024-10-30 02:18:16 +00:00
protected:
virtual void keyPressEvent(QKeyEvent *event) override;
public slots:
void removeSelected();
};
2023-02-14 06:50:14 +00:00
class GroupNameDelegate : public QStyledItemDelegate {
Q_OBJECT
public:
GroupNameDelegate(Project *project, QObject *parent = nullptr) : QStyledItemDelegate(parent), project(project) {}
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
void setEditorData(QWidget *editor, const QModelIndex &index) const override;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
private:
Project *project = nullptr;
};
2024-10-18 19:22:34 +01:00
class MapListModel : public QStandardItemModel {
Q_OBJECT
public:
MapListModel(Project *project, QObject *parent = nullptr);
2024-10-18 19:22:34 +01:00
~MapListModel() { }
void setActiveItem(const QString &itemName) { this->activeItemName = itemName; }
virtual QStandardItem *insertMapItem(const QString &mapName, const QString &folderName);
virtual QStandardItem *insertMapFolderItem(const QString &folderName);
virtual QModelIndex indexOf(const QString &itemName) const;
virtual void removeItemAt(const QModelIndex &index);
virtual QStandardItem *getItem(const QModelIndex &index) const;
virtual QVariant data(const QModelIndex &index, int role) const override;
protected:
Project *project;
QStandardItem *root = nullptr;
QString activeItemName;
QString folderTypeName;
bool sortingEnabled = false;
bool editable = false;
QIcon mapGrayIcon;
QIcon mapIcon;
QIcon mapEditedIcon;
QIcon mapOpenedIcon;
QIcon mapFolderIcon;
QIcon emptyMapFolderIcon;
QMap<QString, QStandardItem *> mapFolderItems;
QMap<QString, QStandardItem *> mapItems;
virtual QStandardItem *createMapItem(const QString &mapName, QStandardItem *map = nullptr);
virtual QStandardItem *createMapFolderItem(const QString &groupName, QStandardItem *fromItem = nullptr);
virtual void removeItem(QStandardItem *item) = 0;
2024-10-18 19:22:34 +01:00
};
class MapGroupModel : public MapListModel {
2023-01-30 23:47:37 +00:00
Q_OBJECT
public:
MapGroupModel(Project *project, QObject *parent = nullptr);
2023-02-14 06:50:14 +00:00
~MapGroupModel() { }
2023-01-30 23:47:37 +00:00
QVariant data(const QModelIndex &index, int role) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
2023-01-30 23:47:37 +00:00
Qt::DropActions supportedDropActions() const override;
QStringList mimeTypes() const override;
QMimeData *mimeData(const QModelIndexList &indexes) const override;
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
2023-01-30 23:47:37 +00:00
protected:
void removeItem(QStandardItem *item) override;
private:
friend class MapTree;
void updateProject();
signals:
void dragMoveCompleted();
};
2024-10-18 19:22:34 +01:00
class MapAreaModel : public MapListModel {
Q_OBJECT
public:
MapAreaModel(Project *project, QObject *parent = nullptr);
~MapAreaModel() {}
protected:
void removeItem(QStandardItem *item) override;
};
2024-10-18 19:22:34 +01:00
class LayoutTreeModel : public MapListModel {
Q_OBJECT
public:
LayoutTreeModel(Project *project, QObject *parent = nullptr);
~LayoutTreeModel() {}
QVariant data(const QModelIndex &index, int role) const override;
QStandardItem *createMapFolderItem(const QString &folderName, QStandardItem *folder) override;
protected:
void removeItem(QStandardItem *item) override;
2023-01-30 23:47:37 +00:00
};
#endif // MAPLISTMODELS_H