QtNovelUI/libProjectManager/xmlprojectmanager.h

96 lines
3.8 KiB
C
Raw Permalink Normal View History

2022-11-17 08:26:05 +00:00
#ifndef XMLPROJECTMANAGER_H
#define XMLPROJECTMANAGER_H
#include "libProjectManager_global.h"
#include <QDomDocument>
#include <QObject>
2022-11-18 23:47:32 +00:00
#include "libProjectManager.h"
2022-11-17 08:26:05 +00:00
namespace Project {
enum class NodeType{
2023-02-26 14:44:00 +00:00
ROOT,
2022-11-17 08:26:05 +00:00
GROUP,
FILE,
};
class ProjectNode : public QStandardItem
{
public:
ProjectNode(NodeType t, const QString &name);
virtual ~ProjectNode() = default;
virtual NodeType nodeType() const;
void setFile(const QString &name);
QString file() const;
private:
NodeType type_indi;
QString filename;
};
2023-08-12 13:01:01 +00:00
class LIBPROJECTMANAGER_EXPORT XMLProjectManager : public QObject,
public Project::ProjectManager,
public Project::FilesOperate,
public Project::FilesQuery {
2022-11-17 08:26:05 +00:00
public:
XMLProjectManager(QObject *parent = nullptr);
virtual ~XMLProjectManager();
2023-08-14 14:09:23 +00:00
// FilesQuery interface
public:
virtual QList<QModelIndex> filesGather(const QModelIndex &node) const override;
virtual QList<std::tuple<QString, QFileInfo>> filesWithEnds(const QString &suffix) const override;
virtual QFileInfo queryInfo(const QModelIndex &path) override;
virtual QModelIndex queryIndex(const QFileInfo &file) override;
virtual QStringList packagePath(const QModelIndex &path) const override;
// FilesOperate interface
public:
virtual QModelIndex newPackage(const QList<QString> &path_defs) override;
virtual QModelIndex newFile(const QModelIndex &package_appoint, const QString &node, const QString &suffix) override;
virtual void rename(const QModelIndex &node, const QString &name) override;
virtual void moveTo(const QModelIndex &node_frompath, const QModelIndex &target_group, int index) override;
virtual void deleteT(const QModelIndex &node_path) override;
2022-11-17 08:26:05 +00:00
// ProjectManager interface
public:
2023-12-24 04:49:58 +00:00
virtual void addListener(ManagerListener *inst) override;
virtual void removeListener(ManagerListener *inst) override;
2023-08-14 14:09:23 +00:00
virtual QStandardItemModel *model() const override;
2023-02-26 14:44:00 +00:00
virtual Config::Configration *configraions() const override;
2023-08-12 13:01:01 +00:00
virtual FilesOperate *operateAccess() const override;
virtual FilesQuery *queryAccess() const override;
2023-02-26 14:44:00 +00:00
virtual QString suffix() const override;
virtual void openProject(const QString &project_file) override;
2023-08-14 14:09:23 +00:00
virtual void newProject(const QDir &project_dir, const QString &name) override;
2022-11-17 08:26:05 +00:00
virtual void closeProject() override;
virtual void save() override;
2023-08-12 13:01:01 +00:00
virtual QString name() const override;
virtual void resetName(const QString &name) override;
2023-08-14 14:09:23 +00:00
virtual QDir directory() const override;
virtual bool isOpenning() const noexcept override;
2022-11-17 08:26:05 +00:00
private:
2023-12-24 04:49:58 +00:00
QList<ManagerListener*> listeners_list;
2022-11-17 08:26:05 +00:00
Config::Configration *const project_config;
QStandardItemModel*const project_structure;
QString filepath_store;
2023-08-14 14:09:23 +00:00
bool open_status, unsaved_status;
2022-11-17 08:26:05 +00:00
void structure_parser(QDomElement struct_elm, ProjectNode *pnode);
void structure_severlize(ProjectNode *pnode, QDomElement &elm);
ProjectNode* node_follows(ProjectNode* pnode, const QList<QString> &path_remains);
2023-02-26 14:44:00 +00:00
QList<std::tuple<QString, QFileInfo>> nodes_search(ProjectNode *pnode, const QString &suffix) const;
2022-11-17 08:26:05 +00:00
2023-02-26 14:44:00 +00:00
QModelIndex groups_rebuild(ProjectNode *pnode, const QList<QString> &path_remains);
virtual QModelIndex query_index(const QFileInfo &file, const QModelIndex &base);
2023-12-24 04:49:58 +00:00
void notify_all(std::function<void(ManagerListener*inst)> proc);
2022-11-17 08:26:05 +00:00
};
}
#endif // XMLPROJECTMANAGER_H