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.
AppFlow/FITK_Kernel/FITKAppFramework/FITKAbstractProgramDriver.cpp

189 lines
6.2 KiB
C++

#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);
}
/**
*
*
*
* mfalse
*
* @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);
}
}