diff --git a/src/DataProcessWorkPool.cpp b/src/DataProcessWorkPool.cpp index 901227d..e684ae4 100644 --- a/src/DataProcessWorkPool.cpp +++ b/src/DataProcessWorkPool.cpp @@ -22,41 +22,12 @@ #include "DataCalcProcess/NolinearLeastSquaresCurveFit.h" #include "EnergyScaleDataModel.h" #include "DataCalcProcess/CoincidenceSpectrumProcess.h" +#include "BackgroundTaskListModel.h" #include using namespace DataProcessWorkPool; using namespace io; -DataProcessTaskList* DataProcessTaskList::_s_instance = nullptr; - -DataProcessTaskList *DataProcessTaskList::Instance() -{ - if (!_s_instance) { - _s_instance = new DataProcessTaskList(); - } - return _s_instance; -} - -DataProcessTaskList::~DataProcessTaskList() -{ - Clear(); -} - -void DataProcessTaskList::InserTask(DataProcessTask* task) -{ - _task_list.insert(task->GetTaskName(), task); -} - -void DataProcessTaskList::RemoveTask(const QString &task_name) -{ - _task_list.remove(task_name); -} - -void DataProcessTaskList::Clear() -{ - -} - void DataProcessTask::SetFinishedNotifier(QObject* finished_notifier, const char* finished_process, const QString& project_name) { @@ -96,11 +67,11 @@ void DataProcessTask::run() return; } - DataProcessTaskList::Instance()->InserTask(this); + BackgroundTaskListModel::Instance()->InserTask(this); bool task_ok = processTask(); - DataProcessTaskList::Instance()->RemoveTask(this->GetTaskName()); + BackgroundTaskListModel::Instance()->RemoveTask(this->GetTaskName()); if ((GetFinishedNotifier() != nullptr) && (GetFinishedNotifierProcess() != nullptr)) { QMetaObject::invokeMethod( @@ -139,7 +110,7 @@ bool ParticleDataTask::processTask() return processEveryChannelParticleData(); } -const QString &EveryChannelParticleCountDataTask::GetTaskName() +QString EveryChannelParticleCountDataTask::GetTaskName() { return QStringLiteral(u"[%1]通道粒子计数统计处理").arg(this->GetProjectName()); } @@ -267,7 +238,7 @@ bool EveryChannelParticleCountDataTask::processEveryChannelParticleData() //////////////////////////////////////////////////////////////////////////////////// -const QString &ParticleDataSortTask::GetTaskName() +QString ParticleDataSortTask::GetTaskName() { return QStringLiteral(u"[%1]粒子数据按时间排序处理").arg(this->GetProjectName()); } @@ -501,7 +472,7 @@ bool ParticleDataSortByMinimysTask::processEveryChannelParticleData() return ret_ok; } -const QString &CoincidenceEventAnalysisTask::GetTaskName() +QString CoincidenceEventAnalysisTask::GetTaskName() { return QStringLiteral(u"[%1]粒子数据符合处理").arg(this->GetProjectName()); } @@ -584,7 +555,7 @@ bool CoincidenceEventAnalysisTask::processTask() return true; } -const QString &AutoFindPeaksTask::GetTaskName() +QString AutoFindPeaksTask::GetTaskName() { return QStringLiteral(u"[%1]粒子通道计数谱自动寻峰处理").arg(this->GetProjectName()); } @@ -687,7 +658,7 @@ bool AutoFindPeaksTask::processTask() return true; } -const QString &ChannelEnergyScaleFittingTask::GetTaskName() +QString ChannelEnergyScaleFittingTask::GetTaskName() { return QStringLiteral(u"[%1]能量刻度拟合处理").arg(this->GetProjectName()); } @@ -778,7 +749,7 @@ bool ChannelEnergyScaleFittingTask::processTask() return true; } -const QString &EnergyScaleParticleDataTask::GetTaskName() +QString EnergyScaleParticleDataTask::GetTaskName() { return QStringLiteral(u"[%1]粒子数据能量刻度处理").arg(this->GetProjectName()); } @@ -845,7 +816,7 @@ bool EnergyScaleParticleDataTask::processTask() return true; } -const QString &EnergyCountProcessTask::GetTaskName() +QString EnergyCountProcessTask::GetTaskName() { return QStringLiteral(u"[%1]粒子能量计数统计处理").arg(this->GetProjectName()); } @@ -930,7 +901,7 @@ bool EnergyCountProcessTask::processTask() return true; } -const QString &EnergyScaleCoincidenceDataTask::GetTaskName() +QString EnergyScaleCoincidenceDataTask::GetTaskName() { return QStringLiteral(u"[%1]粒子符合数据能量刻度处理").arg(this->GetProjectName()); } @@ -1022,7 +993,7 @@ bool EnergyScaleCoincidenceDataTask::processTask() return true; } -const QString &EnergyScaleaAntiCoincidenceDataTask::GetTaskName() +QString EnergyScaleaAntiCoincidenceDataTask::GetTaskName() { return QStringLiteral(u"[%1]粒子反符合数据能量刻度处理").arg(this->GetProjectName()); } diff --git a/src/DataProcessWorkPool.h b/src/DataProcessWorkPool.h index 233dd77..47c51b6 100644 --- a/src/DataProcessWorkPool.h +++ b/src/DataProcessWorkPool.h @@ -16,7 +16,7 @@ namespace DataProcessWorkPool class DataProcessTask : public QRunnable { public: - virtual const QString& GetTaskName() = 0; + virtual QString GetTaskName() = 0; void SetFinishedNotifier(QObject* finished_notifier, const char* finished_process, const QString& project_name); const QString& GetProjectName() const; @@ -41,24 +41,6 @@ namespace DataProcessWorkPool QVariant _task_result_data; }; - class DataProcessTaskList - { - public: - static DataProcessTaskList* Instance(); - virtual ~DataProcessTaskList(); - void InserTask(DataProcessTask *task); - void RemoveTask(const QString& task_name); - void Clear(); - signals: - void taskInserted(); - void taskRemoved(const QString& task_name); - private: - explicit DataProcessTaskList() {} - static DataProcessTaskList* _s_instance; - private: - QMap _task_list; - }; - class ParticleDataTask : public DataProcessTask { public: @@ -78,7 +60,7 @@ namespace DataProcessWorkPool class EveryChannelParticleCountDataTask : public ParticleDataTask { public: - const QString& GetTaskName(); + QString GetTaskName(); void SetAllChannelCountResultDir(const QString& dir_path); const QString& GetAllChannelCountResultDir() const; void SetEveryChannelCountResultDir(const QString&dir_path); @@ -95,7 +77,7 @@ namespace DataProcessWorkPool class ParticleDataSortTask : public ParticleDataTask { public: - const QString& GetTaskName(); + QString GetTaskName(); void SetSortedResultDir(const QString& sorted_result_dir); const QString& GetSortedResultDir() const; @@ -114,7 +96,7 @@ namespace DataProcessWorkPool class CoincidenceEventAnalysisTask : public DataProcessTask { public: - const QString& GetTaskName(); + QString GetTaskName(); private: virtual bool processTask() override; }; @@ -122,7 +104,7 @@ namespace DataProcessWorkPool class AutoFindPeaksTask : public DataProcessTask { public: - const QString& GetTaskName(); + QString GetTaskName(); void SetAnalysisType(AnalysisType analysis_type); void SetDataFileList(const QMap& data_files_set); void SetResultDir(const QString& result_dir); @@ -142,7 +124,7 @@ namespace DataProcessWorkPool public: typedef QMap > > FitDataMap; public: - const QString& GetTaskName(); + QString GetTaskName(); void SetData(const FitDataMap& channel_energy_scale_fit_data_map, const QMap& fit_degree_map); void SetResultDir(const QString& result_dir); virtual bool IsValidSetWorkParameters() const override; @@ -157,7 +139,7 @@ namespace DataProcessWorkPool class EnergyScaleParticleDataTask : public DataProcessTask { public: - const QString& GetTaskName(); + QString GetTaskName(); private: virtual bool processTask() override; }; @@ -165,7 +147,7 @@ namespace DataProcessWorkPool class EnergyCountProcessTask : public DataProcessTask { public: - const QString& GetTaskName(); + QString GetTaskName(); private: virtual bool processTask() override; }; @@ -173,7 +155,7 @@ namespace DataProcessWorkPool class EnergyScaleCoincidenceDataTask : public DataProcessTask { public: - const QString& GetTaskName(); + QString GetTaskName(); private: virtual bool processTask() override; }; @@ -181,7 +163,7 @@ namespace DataProcessWorkPool class EnergyScaleaAntiCoincidenceDataTask : public DataProcessTask { public: - const QString& GetTaskName(); + QString GetTaskName(); private: virtual bool processTask() override; }; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 7125b41..0067069 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -27,7 +27,7 @@ #include "GlobalDefine.h" #include "DeviceParamsManagerDlg.h" #include "NuclideLib.h" -#include +#include "BackgroundTaskListView.h" #include using namespace ads; @@ -307,16 +307,22 @@ void MainWindow::initAction() void MainWindow::initStatusBar() { - _w_watcher_list = new QListWidget(this); - _w_watcher_list->setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); - QPalette palette = _w_watcher_list->palette(); + _w_watcher_task_list = new BackgroundTaskListView(this); + _w_watcher_task_list->setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); + QPalette palette = _w_watcher_task_list->palette(); palette.setColor(QPalette::Base, Qt::gray); - _w_watcher_list->setPalette(palette); - _w_watcher_list->setAutoFillBackground(true); + _w_watcher_task_list->setPalette(palette); + _w_watcher_task_list->setAutoFillBackground(true); _btn_task_watcher = new QPushButton(QStringLiteral(u"后台任务监视"), _status_bar); _status_bar->addPermanentWidget(_btn_task_watcher); - connect(_btn_task_watcher, &QPushButton::clicked, this, &MainWindow::onShowBackgroundTaskList); + connect(_btn_task_watcher, &QPushButton::clicked, this, [this](){ + if ( _w_watcher_task_list->isVisible() ) { + _w_watcher_task_list->hide(); + } else { + this->onShowBackgroundTaskList(); + } + }); } void MainWindow::applyStyleSheet() @@ -387,7 +393,7 @@ void MainWindow::closeEvent(QCloseEvent* event) void MainWindow::moveEvent(QMoveEvent *event) { QMainWindow::moveEvent(event); - if (this->_w_watcher_list->isVisible()) { + if (this->_w_watcher_task_list->isVisible()) { onShowBackgroundTaskList(); } } @@ -403,8 +409,8 @@ void MainWindow::onShowBackgroundTaskList() this->updateGeometry(); this->_btn_task_watcher->updateGeometry(); - this->_w_watcher_list->adjustSize(); - QSize pop_size = this->_w_watcher_list->size(); + this->_w_watcher_task_list->adjustSize(); + QSize pop_size = this->_w_watcher_task_list->size(); QPoint btn_top_teft = this->_btn_task_watcher->mapToGlobal(QPoint(0, 0)); int btn_width = this->_btn_task_watcher->width(); @@ -421,15 +427,15 @@ void MainWindow::onShowBackgroundTaskList() // if (y < screen_rect.top()) // y = btn_top_teft.y() + btn_height + 6; - this->_w_watcher_list->move(x, y); - this->_w_watcher_list->show(); + this->_w_watcher_task_list->move(x, y); + this->_w_watcher_task_list->show(); } void MainWindow::resizeEvent(QResizeEvent *event) { QMainWindow::resizeEvent(event); - if (this->_w_watcher_list->isVisible()) { + if (this->_w_watcher_task_list->isVisible()) { onShowBackgroundTaskList(); } } diff --git a/src/MainWindow.h b/src/MainWindow.h index 6d66505..625c7fd 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -15,7 +15,7 @@ class CDockWidget; } class QPlainTextEdit; class MeasureAnalysisTreeView; -class QListWidget; +class BackgroundTaskListView; class QPushButton; QT_END_NAMESPACE @@ -69,7 +69,7 @@ private: QPlainTextEdit* _plain_edit_info_output; QStatusBar* _status_bar; QPushButton* _btn_task_watcher; - QListWidget* _w_watcher_list; + BackgroundTaskListView* _w_watcher_task_list; private: Ui::MainWindow *ui; diff --git a/src/src.pro b/src/src.pro index fcab269..1cbd14c 100644 --- a/src/src.pro +++ b/src/src.pro @@ -40,7 +40,8 @@ INCLUDEPATH += \ $${PWD}/NuclideLib \ $${PWD}/AntiConformEnergySpectrumView\ $${PWD}/CoincidenceEventTimeView\ - $${PWD}/NuclideAnalysisView + $${PWD}/NuclideAnalysisView \ + $${PWD}/BackgroundTaskListView DEPENDPATH += \ @@ -62,13 +63,15 @@ DEPENDPATH += \ $${PWD}/NuclideLib \ $${PWD}/AntiConformEnergySpectrumView\ $${PWD}/CoincidenceEventTimeView\ - $${PWD}/NuclideAnalysisView - + $${PWD}/NuclideAnalysisView \ + $${PWD}/BackgroundTaskListView SOURCES += \ 2DSpectralCompliance/TwoDSpectralCompliance.cpp \ AboutDlg.cpp \ + BackgroundTaskListView/BackgroundTaskListModel.cpp \ + BackgroundTaskListView/BackgroundTaskListView.cpp \ BusyIndicator/BusyIndicator.cpp \ CoincidenceEventTimeView/CoincidenceEventTimeView.cpp \ CountRateAnalysisView/CountRateAnalysisView.cpp \ @@ -119,6 +122,8 @@ HEADERS += \ 2DSpectralCompliance/TwoDSpectralCompliance.h \ AboutDlg.h \ AnalysisTypeDefine.h \ + BackgroundTaskListView/BackgroundTaskListModel.h \ + BackgroundTaskListView/BackgroundTaskListView.h \ BusyIndicator/BusyIndicator.h \ CoincidenceEventTimeView/CoincidenceEventTimeView.h \ CountRateAnalysisView/CountRateAnalysisView.h \