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();
|
|
|
|
|
|
|
|
|
|
|
|
// ProjectManager interface
|
|
|
|
public:
|
2023-02-26 14:44:00 +00:00
|
|
|
virtual QStandardItemModel* model() const override;
|
|
|
|
virtual Config::Configration *configraions() const override;
|
2023-08-12 13:01:01 +00:00
|
|
|
virtual QDir directory() const override;
|
|
|
|
|
|
|
|
virtual FilesOperate *operateAccess() const override;
|
|
|
|
|
|
|
|
virtual FilesQuery *queryAccess() const override;
|
2023-02-26 14:44:00 +00:00
|
|
|
|
|
|
|
virtual QString suffix() const override;
|
2023-08-12 13:01:01 +00:00
|
|
|
virtual bool isOpenning() const noexcept override;
|
2023-02-26 14:44:00 +00:00
|
|
|
virtual bool isModified() const noexcept override;
|
2023-02-25 07:19:27 +00:00
|
|
|
virtual void openProject(const QString &project_file) override;
|
2023-08-12 13:01:01 +00:00
|
|
|
virtual void newProject(const QString &path_holder, 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;
|
2022-11-17 08:26:05 +00:00
|
|
|
|
2023-02-26 14:44:00 +00:00
|
|
|
virtual QModelIndex newPackage(const QList<QString> &path) override;
|
|
|
|
virtual QStringList packagePath(const QModelIndex &path) const override;
|
2022-11-17 08:26:05 +00:00
|
|
|
|
2023-08-12 13:01:01 +00:00
|
|
|
virtual QModelIndex appendFile(const QModelIndex &package_path, const QString &name, const QString &path_on_disk) override;
|
2023-03-05 14:32:20 +00:00
|
|
|
virtual void rename(const QModelIndex &node, const QString &name) override;
|
|
|
|
virtual QList<QModelIndex> filesGather(const QModelIndex &node) const override;
|
2023-02-26 14:44:00 +00:00
|
|
|
virtual void moveTo(const QModelIndex &node_frompath, const QModelIndex &target_group, int index) override;
|
2023-08-12 13:01:01 +00:00
|
|
|
virtual void deleteT(const QModelIndex &node_path) override;
|
2022-11-17 08:26:05 +00:00
|
|
|
|
2023-02-26 14:44:00 +00:00
|
|
|
virtual QList<std::tuple<QString, QFileInfo>> filesWithEnds(const QString &suffix) const override;
|
|
|
|
|
|
|
|
virtual QFileInfo queryInfo(const QModelIndex &path) override;
|
2023-03-10 12:53:54 +00:00
|
|
|
virtual QModelIndex queryIndex(const QFileInfo &file) override;
|
2022-11-17 08:26:05 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
Config::Configration *const project_config;
|
2023-02-25 07:19:27 +00:00
|
|
|
QStandardItemModel*const project_structure;
|
|
|
|
QString filepath_store;
|
2022-11-17 08:26:05 +00:00
|
|
|
bool open_status;
|
2023-02-26 14:44:00 +00:00
|
|
|
QList<QString> all_files_managed;
|
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);
|
2023-03-10 12:53:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
virtual QModelIndex query_index(const QFileInfo &file, const QModelIndex &base);
|
2022-11-17 08:26:05 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif // XMLPROJECTMANAGER_H
|