81 lines
2.4 KiB
C
81 lines
2.4 KiB
C
|
#ifndef XMLPROJECTMANAGER_H
|
||
|
#define XMLPROJECTMANAGER_H
|
||
|
|
||
|
#include "libProjectManager_global.h"
|
||
|
|
||
|
#include <QDomDocument>
|
||
|
#include <QObject>
|
||
|
#include "ProjectManager.h"
|
||
|
|
||
|
namespace Project {
|
||
|
|
||
|
|
||
|
enum class NodeType{
|
||
|
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;
|
||
|
};
|
||
|
|
||
|
|
||
|
class LIBPROJECTMANAGER_EXPORT XMLProjectManager
|
||
|
: public Project::ProjectManager
|
||
|
{
|
||
|
public:
|
||
|
XMLProjectManager(QObject *parent = nullptr);
|
||
|
virtual ~XMLProjectManager();
|
||
|
|
||
|
|
||
|
// ProjectManager interface
|
||
|
public:
|
||
|
virtual bool isOpen() const override;
|
||
|
virtual int openProject(const QString &project_file) override;
|
||
|
virtual int newProject(const QString &project_dir, const QString &name) override;
|
||
|
virtual void closeProject() override;
|
||
|
virtual void save() override;
|
||
|
virtual QString projectName() const override;
|
||
|
|
||
|
virtual Config::Configration *configraions() const override;
|
||
|
virtual QStandardItemModel *model() const override;
|
||
|
|
||
|
virtual int createFile(const QList<QString> &path, const QString &name, const QString &suffix) override;
|
||
|
virtual bool deletePath(const QList<QString> &path) override;
|
||
|
virtual QList<QFileInfo> filesWithEnds(const QString &suffix) const override;
|
||
|
virtual QStandardItem *newPath(const QList<QString> &path) override;
|
||
|
|
||
|
virtual QFileInfo queryWith(const QList<QString> &path) override;
|
||
|
virtual bool moveTo(const QList<QString> &item_path, const QList<QString> &target_group, int index) override;
|
||
|
|
||
|
private:
|
||
|
Config::Configration *const project_config;
|
||
|
QStandardItemModel*const mode_holder;
|
||
|
QString file_path;
|
||
|
bool open_status;
|
||
|
|
||
|
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);
|
||
|
QList<QFileInfo> nodes_search(ProjectNode *pnode, const QString &suffix) const;
|
||
|
|
||
|
|
||
|
ProjectNode *groups_rebuild(ProjectNode *pnode, const QList<QString> &path_remains);
|
||
|
|
||
|
};
|
||
|
|
||
|
}
|
||
|
#endif // XMLPROJECTMANAGER_H
|