You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
6.2 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "FITKAbstractProgramDriver.h"
#include "FITKAppFramework.h"
#include "FITKSignalTransfer.h"
#include <QFileSystemWatcher>
namespace AppFrame
{
/**
* @brief FITKProgramInputInfo 类的析构函数
*/
FITKProgramInputInfo::~FITKProgramInputInfo()
{
}
/**
* 设置程序输入信息的参数。
*
* 此函数用于设置FITKProgramInputInfo对象的参数。参数通过 QStringList 类型的 args 传递。
* 目前,该函数实现为空,但预留了未来扩展的可能,用于处理输入参数的解析和配置。
*
* @param args 参数列表,以 QStringList 的形式传递。
*/
void FITKProgramInputInfo::setArgs(const QStringList& args)
{
}
/**
* @brief 获取程序输入参数
*
* 该函数旨在返回程序的输入参数列表。当前实现中它返回一个空的QStringList。
* 在未来的开发中,这个函数可能会被用于返回实际的程序输入参数。
*
* @return QStringList 程序输入参数列表。当前返回空列表。
*/
QStringList FITKProgramInputInfo::args()
{
return QStringList();
}
QStringList FITKProgramInputInfo::getMonitorFiles()
{
return QStringList();
}
QStringList FITKProgramInputInfo::getMonitorPath()
{
return QStringList();
}
FITKAbstractProgramerDriver::~FITKAbstractProgramerDriver()
{
if (_fileWatcher != nullptr) delete _fileWatcher;
}
/**
* @brief 获取程序类型
*
* 该函数用于返回当前编程器支持的程序类型。然而,在这个实现中,它简单地返回-1
* 这可能表示不支持或未实现此功能。在继承这个类并实现这个功能时,
* 应该根据具体的编程器类型返回相应的程序类型。
*
* @return int 程序类型。返回-1表示不支持或未实现。
*/
int FITKAbstractProgramerDriver::getProgramType()
{
return -1;
}
QString FITKAbstractProgramerDriver::getProgramName()
{
return QString();
}
void FITKAbstractProgramerDriver::setInputInfo(FITKProgramInputInfo* info)
{
_inputInfo = info;
}
AppFrame::FITKProgramInputInfo* FITKAbstractProgramerDriver::getProgramInput()
{
return _inputInfo;
}
void FITKAbstractProgramerDriver::start()
{
}
void FITKAbstractProgramerDriver::stop()
{
}
/**
* @brief 发送消息给程序驱动器
*
* 此函数用于向程序驱动器发送特定类型的消息。它首先检查FITKAPP是否为空
* 如果为空,则直接返回。然后,它获取信号传输对象,并检查该对象是否为空。
* 如果信号传输对象不为空,它将发送消息给程序驱动器。
*
* @param messageType 消息的类型,用于标识不同类型的消息。
* @param message 要发送的实际消息内容。
*/
void FITKAbstractProgramerDriver::sendMessage(int messageType, const QString& message)
{
// 检查FITKAPP是否已经被初始化如果没有则直接返回。
if (FITKAPP == nullptr) return;
// 从FITKAPP中获取信号传输对象。
FITKSignalTransfer* transfer = FITKAPP->getSignalTransfer();
// 检查信号传输对象是否为空,如果为空,则直接返回。
if (transfer == nullptr) return;
// 发送消息 。
emit transfer->sendProgramDriverMessageSig(this, messageType, message);
}
/**
* 监视文件目录。
*
* 此函数用于启动或停止对特定文件和目录的监视。当文件或目录发生变化时,会触发相应的信号,
* 从而调用连接的槽函数进行处理。如果不需要监视可以通过将m参数设置为false来停止监视。
*
* @param m 指示是否开始监视的布尔值默认为true表示开始监视。
*/
void FITKAbstractProgramerDriver::monitorFileDirectories(bool m /*= true*/)
{
// 如果已经存在文件监视器实例,则先释放资源
if (_fileWatcher != nullptr)
delete _fileWatcher;
_fileWatcher = nullptr;
// 如果不需监视m为false或输入信息为空则直接返回
if (!m || _inputInfo == nullptr)
return;
// 创建新的文件监视器实例
_fileWatcher = new QFileSystemWatcher;
// 获取需要监视的文件和目录路径
QStringList f = _inputInfo->getMonitorFiles();
QStringList p = _inputInfo->getMonitorPath();
// 将文件和目录路径添加到文件监视器中
_fileWatcher->addPaths(p);
_fileWatcher->addPaths(f);
// 连接文件变化和目录变化的信号到相应的槽函数
connect(_fileWatcher, &QFileSystemWatcher::fileChanged, this,&FITKAbstractProgramerDriver::fileChangedSlot);
connect(_fileWatcher, &QFileSystemWatcher::directoryChanged,this, &FITKAbstractProgramerDriver::directoryChangedSlot);
}
/**
* 文件更改槽函数。
*
* 当监视的文件发生变化时,此槽函数被触发。它通过应用的信号传输器发出一个信号,
* 指示文件已更改,并传递发生变化的文件路径。
*
* @param file 发生变化的文件路径。
*/
void FITKAbstractProgramerDriver::fileChangedSlot(const QString& file)
{
if (FITKAPP == nullptr) return;
FITKSignalTransfer* transfer = FITKAPP->getSignalTransfer();
if (transfer == nullptr) return;
emit transfer->fileDirectoryChangedSig(this, true, file);
}
/**
* 目录更改槽函数。
*
* 当监视的目录发生变化时,此槽函数被激活。功能类似于`fileChangedSlot`,但针对的是目录变更,
* 并通过信号传输器发出目录变化的信号。
*
* @param dir 发生变化的目录路径。
*/
void FITKAbstractProgramerDriver::directoryChangedSlot(const QString& dir)
{
if (FITKAPP == nullptr) return;
FITKSignalTransfer* transfer = FITKAPP->getSignalTransfer();
if (transfer == nullptr) return;
emit transfer->fileDirectoryChangedSig(this, true, dir);
}
}