ProjectManager接口改进

This commit is contained in:
玉宇清音 2023-08-12 21:01:01 +08:00
parent 4efa62dd52
commit fc0a6e2dac
3 changed files with 129 additions and 134 deletions

View File

@ -12,7 +12,84 @@ namespace Project {
/** /**
* @brief * @brief
*/ */
class ProjectException : public Config::ParseException { }; class ProjectException : public Config::ParseException {};
class FilesOperate {
public:
virtual ~FilesOperate() = default;
/**
* @brief
* @param path_defs
* @return
*/
virtual QModelIndex newPackage(const QList<QString> &path_defs) = 0;
/**
* @brief QModexIndex为逻辑路径
* @param path
* @return
*/
virtual QStringList packagePath(const QModelIndex &path) const = 0;
/**
* @brief
* @param package_appoint
* @throw ProjectException
*/
virtual QModelIndex appendFile(const QModelIndex &package_appoint, const QString &name, const QString &path_on_disk) = 0;
/**
* @brief
* @param node
* @param name
*/
virtual void rename(const QModelIndex &node, const QString &name) = 0;
/**
* @brief
* @param node_frompath
* @param target_group
* @return
*/
virtual void moveTo(const QModelIndex &node_frompath, const QModelIndex &target_group, int index = -1) = 0;
/**
* @brief
* @param node_path
* @throw ProjectException
*/
virtual void deleteT(const QModelIndex &node_path) = 0;
};
class FilesQuery {
public:
virtual ~FilesQuery() = default;
/**
* @brief
* @param node
* @return
*/
virtual QList<QModelIndex> filesGather(const QModelIndex &node) const = 0;
/**
* @brief
* @param suffix
* @return
*/
virtual QList<std::tuple<QString, QFileInfo>> filesWithEnds(const QString &suffix) const = 0;
/**
* @brief infoinfo
* @param path
* @return QFileInfo info实例
*/
virtual QFileInfo queryInfo(const QModelIndex &path) = 0;
/**
* @brief ModelIndex
* @param file
* @return
*/
virtual QModelIndex queryIndex(const QFileInfo &file) = 0;
};
/** /**
* @brief * @brief
@ -37,13 +114,11 @@ namespace Project {
* @brief * @brief
* @return * @return
*/ */
virtual Config::Configration* configraions() const = 0; virtual Config::Configration *configraions() const = 0;
/** virtual FilesOperate *operateAccess() const = 0;
* @brief
* @return virtual FilesQuery *queryAccess() const = 0;
*/
virtual QDir projectDir() const = 0;
// 项目操作========================================================= // 项目操作=========================================================
/** /**
@ -52,14 +127,6 @@ namespace Project {
*/ */
virtual QString suffix() const = 0; virtual QString suffix() const = 0;
/**
* @brief
* @param project_dir
* @param name
* @return
*/
virtual QString fmtedProjectPath(const QString &project_dir, const QString &name) const = 0;
/** /**
* @brief * @brief
* @param project_file * @param project_file
@ -72,21 +139,12 @@ namespace Project {
* @param name * @param name
* @throw ProjectException*, ParseException* * @throw ProjectException*, ParseException*
*/ */
virtual void newProject(const QString &project_dir, const QString &name) = 0; virtual void newProject(const QString &path_holder, const QString &name) = 0;
/** /**
* @brief * @brief
*/ */
virtual void closeProject() = 0; virtual void closeProject() = 0;
/**
* @brief
* @return
*/
virtual bool isOpen() const noexcept = 0;
/**
* @brief
* @return
*/
virtual bool isModified() const noexcept = 0;
/** /**
* @brief save * @brief save
@ -98,81 +156,32 @@ namespace Project {
* @brief * @brief
* @return * @return
*/ */
virtual QString projectName() const = 0; virtual QString name() const = 0;
/** /**
* @brief * @brief
* @param name * @param name
*/ */
virtual void resetProjectName(const QString& name) = 0; virtual void resetName(const QString &name) = 0;
// 项目内容管理=======================================================
/**
* @brief
* @param path_defs
* @return
*/
virtual QModelIndex newPackage(const QList<QString> &path_defs) = 0;
/**
* @brief QModexIndex为逻辑路径
* @param path
* @return
*/
virtual QStringList packagePath(const QModelIndex &path) const = 0;
/**
* @brief
* @param package_appoint
* @throw ProjectException
*/
virtual QModelIndex signFile(const QModelIndex &package_appoint, const QString &name, const QString &path_on_disk) = 0;
/**
* @brief
* @param node
* @param name
*/
virtual void rename(const QModelIndex &node, const QString &name) = 0;
/**
* @brief
* @param node
* @return
*/
virtual QList<QModelIndex> filesGather(const QModelIndex &node) const = 0;
/**
* @brief
* @param node_frompath
* @param target_group
* @return
*/
virtual void moveTo(const QModelIndex &node_frompath, const QModelIndex &target_group, int index=-1) = 0;
/**
* @brief
* @param node_path
* @throw ProjectException
*/
virtual void deleteTarget(const QModelIndex &node_path) = 0;
/** /**
* @brief * @brief
* @param suffix
* @return
*/
virtual QList<std::tuple<QString, QFileInfo>> filesWithEnds(const QString &suffix) const = 0;
/**
* @brief infoinfo
* @param path
* @return QFileInfo info实例
*/
virtual QFileInfo queryInfo(const QModelIndex &path) = 0;
/**
* @brief ModelIndex
* @param file
* @return * @return
*/ */
virtual QModelIndex queryIndex(const QFileInfo &file) = 0; virtual QDir directory() const = 0;
/**
* @brief
* @return
*/
virtual bool isOpenning() const noexcept = 0;
/**
* @brief
* @return
*/
virtual bool isModified() const noexcept = 0;
}; };
} // namespace Project
}
#endif // LIBPROJECTMANAGER_H #endif // LIBPROJECTMANAGER_H

View File

@ -60,10 +60,7 @@ QString XMLProjectManager::suffix() const
return "nsf"; return "nsf";
} }
bool XMLProjectManager::isOpen() const noexcept bool XMLProjectManager::isOpenning() const noexcept { return open_status; }
{
return open_status;
}
bool XMLProjectManager::isModified() const noexcept bool XMLProjectManager::isModified() const noexcept
{ {
@ -115,10 +112,9 @@ void XMLProjectManager::openProject(const QString &project_file)
pnode->setIcon(QIcon(":/icons/toplevel.png")); pnode->setIcon(QIcon(":/icons/toplevel.png"));
} }
void XMLProjectManager::newProject(const QString &project_dir, const QString &name) void XMLProjectManager::newProject(const QString &path_holder, const QString &name) {
{
// 确定目标项目文件 // 确定目标项目文件
filepath_store = fmtedProjectPath(project_dir, name); filepath_store = path_holder;
QFileInfo info(filepath_store); QFileInfo info(filepath_store);
if(info.exists()) if(info.exists())
@ -129,7 +125,7 @@ void XMLProjectManager::newProject(const QString &project_dir, const QString &na
project_node->setFile(".project_config.xml"); project_node->setFile(".project_config.xml");
project_structure->appendRow(project_node); project_structure->appendRow(project_node);
QDir root(project_dir); QDir root = info.absoluteDir();
project_config->loadFile(root.filePath(project_node->file())); project_config->loadFile(root.filePath(project_node->file()));
// 写出到磁盘 // 写出到磁盘
@ -138,14 +134,6 @@ void XMLProjectManager::newProject(const QString &project_dir, const QString &na
project_node->setIcon(QIcon(":/icons/toplevel.png")); project_node->setIcon(QIcon(":/icons/toplevel.png"));
} }
QString XMLProjectManager::fmtedProjectPath(const QString &project_dir, const QString &name) const
{
QDir root(project_dir);
auto project_file = root.filePath(name + ".nsf");
return project_file;
}
void XMLProjectManager::closeProject() void XMLProjectManager::closeProject()
{ {
open_status = false; open_status = false;
@ -175,26 +163,24 @@ void XMLProjectManager::save()
txout.flush(); txout.flush();
} }
QString XMLProjectManager::projectName() const QString XMLProjectManager::name() const { return project_structure->item(0)->text(); }
{
return project_structure->item(0)->text();
}
void XMLProjectManager::resetProjectName(const QString &name) void XMLProjectManager::resetName(const QString &name) { this->project_structure->item(0)->setText(name); }
{
this->project_structure->item(0)->setText(name);
}
Configration *XMLProjectManager::configraions() const Configration *XMLProjectManager::configraions() const
{ {
return this->project_config; return this->project_config;
} }
QDir XMLProjectManager::projectDir() const QDir XMLProjectManager::directory() const
{ {
return QFileInfo(filepath_store).absoluteDir(); return QFileInfo(filepath_store).absoluteDir();
} }
FilesOperate *XMLProjectManager::operateAccess() const { return const_cast<XMLProjectManager *>(this); }
FilesQuery *XMLProjectManager::queryAccess() const { return const_cast<XMLProjectManager *>(this); }
void XMLProjectManager::structure_parser(QDomElement struct_elm, ProjectNode *pnode) void XMLProjectManager::structure_parser(QDomElement struct_elm, ProjectNode *pnode)
{ {
auto children = struct_elm.childNodes(); auto children = struct_elm.childNodes();
@ -239,8 +225,7 @@ void XMLProjectManager::structure_severlize(ProjectNode *pnode, QDomElement &elm
} }
} }
QModelIndex XMLProjectManager::signFile(const QModelIndex &package_path, const QString &name, const QString &path_on_disk) QModelIndex XMLProjectManager::appendFile(const QModelIndex &package_path, const QString &name, const QString &path_on_disk) {
{
if(!package_path.isValid()) if(!package_path.isValid())
throw new Impl_ProjectException("参数错误", "指定的package_path无效"); throw new Impl_ProjectException("参数错误", "指定的package_path无效");
@ -298,8 +283,7 @@ QList<QModelIndex> XMLProjectManager::filesGather(const QModelIndex &node) const
return rets; return rets;
} }
void XMLProjectManager::deleteTarget(const QModelIndex &node_path) void XMLProjectManager::deleteT(const QModelIndex &node_path) {
{
if(!node_path.isValid()) if(!node_path.isValid())
throw new Impl_ProjectException("参数错误", "指定的节点路径无效"); throw new Impl_ProjectException("参数错误", "指定的节点路径无效");

View File

@ -30,10 +30,10 @@ namespace Project {
QString filename; QString filename;
}; };
class LIBPROJECTMANAGER_EXPORT XMLProjectManager : public QObject,
class LIBPROJECTMANAGER_EXPORT XMLProjectManager public Project::ProjectManager,
: public QObject, public Project::ProjectManager public Project::FilesOperate,
{ public Project::FilesQuery {
public: public:
XMLProjectManager(QObject *parent = nullptr); XMLProjectManager(QObject *parent = nullptr);
virtual ~XMLProjectManager(); virtual ~XMLProjectManager();
@ -43,27 +43,30 @@ namespace Project {
public: public:
virtual QStandardItemModel* model() const override; virtual QStandardItemModel* model() const override;
virtual Config::Configration *configraions() const override; virtual Config::Configration *configraions() const override;
virtual QDir projectDir() const override; virtual QDir directory() const override;
virtual FilesOperate *operateAccess() const override;
virtual FilesQuery *queryAccess() const override;
virtual QString suffix() const override; virtual QString suffix() const override;
virtual QString fmtedProjectPath(const QString &project_dir, const QString &name) const override; virtual bool isOpenning() const noexcept override;
virtual bool isOpen() const noexcept override;
virtual bool isModified() const noexcept override; virtual bool isModified() const noexcept override;
virtual void openProject(const QString &project_file) override; virtual void openProject(const QString &project_file) override;
virtual void newProject(const QString &project_dir, const QString &name) override; virtual void newProject(const QString &path_holder, const QString &name) override;
virtual void closeProject() override; virtual void closeProject() override;
virtual void save() override; virtual void save() override;
virtual QString projectName() const override; virtual QString name() const override;
virtual void resetProjectName(const QString& name) override; virtual void resetName(const QString &name) override;
virtual QModelIndex newPackage(const QList<QString> &path) override; virtual QModelIndex newPackage(const QList<QString> &path) override;
virtual QStringList packagePath(const QModelIndex &path) const override; virtual QStringList packagePath(const QModelIndex &path) const override;
virtual QModelIndex signFile(const QModelIndex &package_path, const QString &name, const QString &path_on_disk) override; virtual QModelIndex appendFile(const QModelIndex &package_path, const QString &name, const QString &path_on_disk) override;
virtual void rename(const QModelIndex &node, const QString &name) override; virtual void rename(const QModelIndex &node, const QString &name) override;
virtual QList<QModelIndex> filesGather(const QModelIndex &node) const override; virtual QList<QModelIndex> filesGather(const QModelIndex &node) const override;
virtual void moveTo(const QModelIndex &node_frompath, const QModelIndex &target_group, int index) override; virtual void moveTo(const QModelIndex &node_frompath, const QModelIndex &target_group, int index) override;
virtual void deleteTarget(const QModelIndex &node_path) override; virtual void deleteT(const QModelIndex &node_path) override;
virtual QList<std::tuple<QString, QFileInfo>> filesWithEnds(const QString &suffix) const override; virtual QList<std::tuple<QString, QFileInfo>> filesWithEnds(const QString &suffix) const override;
@ -88,6 +91,5 @@ namespace Project {
virtual QModelIndex query_index(const QFileInfo &file, const QModelIndex &base); virtual QModelIndex query_index(const QFileInfo &file, const QModelIndex &base);
}; };
} }
#endif // XMLPROJECTMANAGER_H #endif // XMLPROJECTMANAGER_H