#pragma once
#include "Common.h"
///
/// 工具仓库类,用于从dll中加载所有的工具信息
/// 本项目中将工具的静态信息和动态信息分开定义
///
class ToolDepository
{
public:
ToolDepository();
virtual ~ToolDepository();
// 加载文件中保存的工具信息
bool LoadTools();
// 获取指定DLL的指针
DllTool* GetToolPtr(const QString& strToolName);
// 2022-10-4,查询指定Dll的全路径
QString GetDllPathByName(const QString& strToolName);
// 直接获取输出Port
const STATIC_TOOL* GetOutputPort() const
{
return &m_toolPortOutput;
}
// 直接获取输出Port
const STATIC_TOOL* GetInputPort() const
{
return &m_toolPortInput;
}
// 通过名称获取工具的指针
TOOL* getToolByName(QString strName);
//// 检测Tool的有效性
//bool ValidateTool(const TOOL& toolInfo);
public:
QVector m_TotalTools; // 工具箱中所有的工具
protected:
// 从文件中加载工具信息
bool LoadFromFile(const QString& strPath);
// 从dll中提取工具信息
bool ParseToolsFromDll(const QString& strDllPath, const QString& strDllName);
// 将工具信息添加到Category中
bool AddToCategory(const STATIC_TOOL& newTool, const QString& strCategoryName);
// 2021-3-29增加,直接在内部生成port工具,不从外部加载了
void createPortTool();
// 2022-3-13 生成内置注释工具
void createCommentTool();
// 2022-3-22 生成内置的Goto工具
void createGotoTool();
// 2022-4-18 生成内置的并行计算工具
void createParallelTool();
// 2022-8-22 生成内置的For循环工具
void createForLoopTool();
// 2022-9-2 生成内置的等待Event工具
void createWaitTool();
protected:
// 内部直接生成的port工具
STATIC_TOOL m_toolPortOutput;
STATIC_TOOL m_toolPortInput;
// 2022-3-13 内置的注释工具
STATIC_TOOL m_toolComment;
// 2022-3-22 内置的Goto工具
STATIC_TOOL m_toolGoto;
// 2022-4-18 内置的并行计算工具
STATIC_TOOL m_toolParallel;
// 2022-8-22 内置的For循环工具
STATIC_TOOL m_toolForLoop;
// 2022-9-2 内置的Wait工具
STATIC_TOOL m_toolWait;
// 存储标准工具对应的Dll路径,用于快速检索
QHash m_toolDllPaths;
};