From c8fd7cf664a29b089a37afb860d14e167bded905 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Thu, 25 Sep 2014 11:40:50 +0200 Subject: [PATCH] ModelTuningWidget is connected with JobQueueModel --- GUI/coregui/Models/JobItem.cpp | 3 + GUI/coregui/Models/JobQueueData.cpp | 56 ++++++-------- GUI/coregui/Models/JobQueueData.h | 8 +- .../JobQueueWidgets/AdvModelTuningWidget.cpp | 74 ++++++++++++++++++- .../JobQueueWidgets/AdvModelTuningWidget.h | 19 ++++- .../JobQueueWidgets/JobRealTimeWidget.cpp | 2 +- .../SimulationWidgets/ModelTuningDelegate.cpp | 10 ++- .../SimulationWidgets/ModelTuningDelegate.h | 4 +- .../SimulationWidgets/ModelTuningWidget.cpp | 2 +- GUI/coregui/Views/JobView.cpp | 10 +-- 10 files changed, 134 insertions(+), 54 deletions(-) diff --git a/GUI/coregui/Models/JobItem.cpp b/GUI/coregui/Models/JobItem.cpp index 7b6d83b8004..913e90b2b1f 100644 --- a/GUI/coregui/Models/JobItem.cpp +++ b/GUI/coregui/Models/JobItem.cpp @@ -79,6 +79,9 @@ void JobItem::initOutputDataItem() void JobItem::setResults(const Simulation *simulation) { + if(!simulation) + throw GUIHelpers::Error("JobItem::setResults() -> Error. Null simulation."); + // qDeleteAll(m_data_items); // m_data_items.clear(); if(m_data_items.isEmpty()) { diff --git a/GUI/coregui/Models/JobQueueData.cpp b/GUI/coregui/Models/JobQueueData.cpp index b832345e26b..8637c95f51c 100644 --- a/GUI/coregui/Models/JobQueueData.cpp +++ b/GUI/coregui/Models/JobQueueData.cpp @@ -107,24 +107,21 @@ QString JobQueueData::getIdentifierForJobItem(const JobItem *item) //! submit job and run it in a thread -void JobQueueData::runJob(QString identifier) +void JobQueueData::runJob(const QString &identifier) { if(getThread(identifier)) { qDebug() << "JobQueueData::runInThread() -> Thread is already running"; return; } - // FIXME Simplify this part by getting rid from the method JobQueueData::createJob(QString jobName, Simulation *simulation, JobItem::RunPolicy run_policy) - // to allow only JobItem's with initialized InstrumentModel and SampleModel - Simulation *simulation = getSimulation(identifier); - if(!simulation) { - JobItem *jobItem = getJobItem(identifier); - simulation = QuickSimulationHelper::getSimulation(jobItem->getSampleModel(), jobItem->getInstrumentModel()); - m_simulations[identifier] = simulation; - } - // endoffixme + if(getSimulation(identifier)) + throw GUIHelpers::Error("JobQueueData::runJob() -> Error. Simulation is already existing."); - JobRunner *runner = new JobRunner(identifier, getSimulation(identifier)); + JobItem *jobItem = getJobItem(identifier); + Simulation *simulation = QuickSimulationHelper::getSimulation(jobItem->getSampleModel(), jobItem->getInstrumentModel()); + m_simulations[identifier] = simulation; + + JobRunner *runner = new JobRunner(identifier, simulation); m_runners[identifier] = runner; QThread *thread = new QThread(); @@ -153,7 +150,7 @@ void JobQueueData::runJob(QString identifier) //! cancels running job -void JobQueueData::cancelJob(QString identifier) +void JobQueueData::cancelJob(const QString &identifier) { //qDebug() << "JobQueueData::cancelJob()"; if(getThread(identifier)) { @@ -166,7 +163,7 @@ void JobQueueData::cancelJob(QString identifier) //! remove job from list completely -void JobQueueData::removeJob(QString identifier) +void JobQueueData::removeJob(const QString &identifier) { qDebug() << "JobQueueData::removeJob" << identifier; cancelJob(identifier); @@ -179,15 +176,7 @@ void JobQueueData::removeJob(QString identifier) break; } } - // removing simulations - for(QMap<QString, Simulation *>::iterator it=m_simulations.begin(); it!=m_simulations.end(); ++it) { - if(it.key() == identifier) { - delete it.value(); - qDebug() << " JobQueueData::removeJob removing simulation" << identifier; - m_simulations.erase(it); - break; - } - } + clearSimulation(identifier); } @@ -217,17 +206,9 @@ void JobQueueData::onFinishedJob() // propagating simulation results Simulation *simulation = getSimulation(runner->getIdentifier()); - if(simulation) { - jobItem->setResults(simulation); -// jobItem->init(); -// jobItem->getOutputDataItem()->setOutputData(simulation->getIntensityData()); - } + jobItem->setResults(simulation); -// if(runner->isTerminated()) { -// jobItem->setStatus(JobItem::Canceled); -// } else { -// jobItem->setStatus(JobItem::Completed); -// } + // propagating status of runner jobItem->setStatus(runner->getStatus()); if(runner->getStatus() == JobItem::Failed) jobItem->setComments(runner->getFailureMessage()); @@ -238,10 +219,9 @@ void JobQueueData::onFinishedJob() if(jobItem->getRunPolicy() & JobItem::RunImmediately) emit focusRequest(jobItem); -// qDebug() << " JobQueueData::onFinishedJob() -> before emiting jobIsFinished()"; emit jobIsFinished(runner->getIdentifier()); -// qDebug() << " JobQueueData::onFinishedJob() -> after emiting jobIsFinished(), before asigning runner for deletion"; + clearSimulation(runner->getIdentifier()); assignForDeletion(runner); // qDebug() << " JobQueueData::onFinishedJob() -> after emiting jobIsFinished(), after asigning runner for deletion"; @@ -329,6 +309,14 @@ void JobQueueData::assignForDeletion(JobRunner *runner) } +void JobQueueData::clearSimulation(const QString &identifier) +{ + Simulation *simulation = getSimulation(identifier); + m_simulations.remove(identifier); + delete simulation; +} + + //! generates job name QString JobQueueData::generateJobName() { diff --git a/GUI/coregui/Models/JobQueueData.h b/GUI/coregui/Models/JobQueueData.h index e95e10d0a00..88c9a368866 100644 --- a/GUI/coregui/Models/JobQueueData.h +++ b/GUI/coregui/Models/JobQueueData.h @@ -45,14 +45,16 @@ public slots: void onFinishedThread(); void onCancelAllJobs(); - void runJob(QString identifier); - void cancelJob(QString identifier); - void removeJob(QString identifier); + void runJob(const QString &identifier); + void cancelJob(const QString &identifier); + void removeJob(const QString &identifier); friend class QuickSimulationRunner; private: void assignForDeletion(QThread *thread); void assignForDeletion(JobRunner *runner); + void clearSimulation(const QString &identifier); + void updateGlobalProgress(); QString generateJobName(); diff --git a/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.cpp b/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.cpp index 6f3118b697b..5da5958e93f 100644 --- a/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.cpp +++ b/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.cpp @@ -1,14 +1,23 @@ #include "AdvModelTuningWidget.h" #include "JobItem.h" #include "QuickSimulationSettings.h" +#include "QuickSimulationHelper.h" +#include "GUIHelpers.h" +#include "ModelTuningDelegate.h" +#include "JobQueueData.h" #include <QLabel> #include <QVBoxLayout> #include <QTreeView> +#include <QStandardItemModel> +#include <QDebug> -AdvModelTuningWidget::AdvModelTuningWidget(QWidget *parent) +AdvModelTuningWidget::AdvModelTuningWidget(JobQueueData *jobQueueData, QWidget *parent) : QWidget(parent) + , m_jobQueueData(jobQueueData) , m_currentJobItem(0) , m_quickSimulationSettings(0) + , m_parameterModel(0) + , m_delegate(new ModelTuningDelegate) { setMinimumSize(128, 128); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); @@ -22,6 +31,8 @@ AdvModelTuningWidget::AdvModelTuningWidget(QWidget *parent) m_treeView = new QTreeView(); m_treeView->setStyleSheet("QTreeView::branch {background: palette(base);}QTreeView::branch:has-siblings:!adjoins-item {border-image: url(:/images/treeview-vline.png) 0;}QTreeView::branch:has-siblings:adjoins-item {border-image: url(:/images/treeview-branch-more.png) 0;}QTreeView::branch:!has-children:!has-siblings:adjoins-item {border-image: url(:/images/treeview-branch-end.png) 0;}QTreeView::branch:has-children:!has-siblings:closed,QTreeView::branch:closed:has-children:has-siblings {border-image: none;image: url(:/images/treeview-branch-closed.png);}QTreeView::branch:open:has-children:!has-siblings,QTreeView::branch:open:has-children:has-siblings {border-image: none;image: url(:/images/treeview-branch-open.png);}"); + m_treeView->setItemDelegate(m_delegate); + connect(m_delegate, SIGNAL(currentLinkChanged(ItemLink)), this, SLOT(onCurrentLinkChanged(ItemLink))); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->setMargin(0); @@ -35,7 +46,66 @@ AdvModelTuningWidget::AdvModelTuningWidget(QWidget *parent) } +AdvModelTuningWidget::~AdvModelTuningWidget() +{ + delete m_parameterModel; +} + + void AdvModelTuningWidget::setCurrentItem(JobItem *item) { - m_currentJobItem = item; + qDebug() << "AdvModelTuningWidget::setCurrentItem" << item; + if(m_currentJobItem != item) { + m_currentJobItem = item; + updateParameterModel(); + } +} + +void AdvModelTuningWidget::onCurrentLinkChanged(ItemLink link) +{ + qDebug() << "AdvModelTuningWidget::onCurrentLinkChanged"; + Q_ASSERT(m_currentJobItem); + + if(m_currentJobItem->isRunning()) { + qDebug() << "AdvModelTuningWidget::onCurrentLinkChanged(ItemLink link) -> Running..."; + return; + } + + if(link.getItem()) + { + qDebug() << "AdvModelTuningWidget::onCurrentLinkChanged() -> Starting to tune model" << link.getItem()->modelType() << link.getPropertyName() << link.getValue(); + + link.getItem()->setRegisteredProperty(link.getPropertyName(), link.getValue()); + + m_jobQueueData->runJob(m_jobQueueData->getIdentifierForJobItem(m_currentJobItem)); + } + + + + + +} + + +void AdvModelTuningWidget::updateParameterModel() +{ + qDebug() << "AdvModelTuningWidget::updateParameterModel()"; + if(m_parameterModel) { + m_treeView->setModel(0); + delete m_parameterModel; + m_parameterModel = 0; + } + + if(!m_currentJobItem) return; + + if(!m_currentJobItem->getSampleModel() || !m_currentJobItem->getInstrumentModel()) + throw GUIHelpers::Error("AdvModelTuningWidget::updateParameterModel() -> Error. JobItem doesn't have sample or instrument model."); + + m_parameterModel = QuickSimulationHelper::createParameterModel(m_currentJobItem->getSampleModel(), m_currentJobItem->getInstrumentModel()); + + m_treeView->setModel(m_parameterModel); +// m_treeView->setFixedHeight(height); + m_treeView->setColumnWidth(0,170); + m_treeView->expandAll(); + } diff --git a/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.h b/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.h index 7f8b832d122..7ee2e0e465d 100644 --- a/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.h +++ b/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.h @@ -1,11 +1,16 @@ #ifndef ADVMODELTUNINGWIDGET_H #define ADVMODELTUNINGWIDGET_H +#include "ItemLink.h" #include <QWidget> -class QLabel; + class JobItem; class QuickSimulationSettings; +class ModelTuningDelegate; +class JobQueueData; class QTreeView; +class QStandardItemModel; + class AdvModelTuningWidget : public QWidget { @@ -13,15 +18,23 @@ class AdvModelTuningWidget : public QWidget public: - AdvModelTuningWidget(QWidget *parent = 0); - virtual ~AdvModelTuningWidget() {} + AdvModelTuningWidget(JobQueueData *jobQueueData, QWidget *parent = 0); + virtual ~AdvModelTuningWidget(); void setCurrentItem(JobItem *item); +public slots: + void onCurrentLinkChanged(ItemLink link); + private: + void updateParameterModel(); + + JobQueueData *m_jobQueueData; JobItem *m_currentJobItem; QuickSimulationSettings *m_quickSimulationSettings; QTreeView *m_treeView; + QStandardItemModel *m_parameterModel; + ModelTuningDelegate *m_delegate; }; diff --git a/GUI/coregui/Views/Components/JobQueueWidgets/JobRealTimeWidget.cpp b/GUI/coregui/Views/Components/JobQueueWidgets/JobRealTimeWidget.cpp index e8221810457..6eeca0354b7 100644 --- a/GUI/coregui/Views/Components/JobQueueWidgets/JobRealTimeWidget.cpp +++ b/GUI/coregui/Views/Components/JobQueueWidgets/JobRealTimeWidget.cpp @@ -75,7 +75,7 @@ void JobRealTimeWidget::itemClicked(JobItem * item) if( !widget && (item->getStatus() == JobItem::Completed || item->getStatus() == JobItem::Canceled)) { qDebug() << "JobOutputDataWidget::itemClicked() -> creating"; - widget = new AdvModelTuningWidget(); + widget = new AdvModelTuningWidget(m_jobQueueModel->getJobQueueData()); widget->setCurrentItem(item); m_stack->addWidget(widget); m_jobItemToTuningWidget[item] = widget; diff --git a/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningDelegate.cpp b/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningDelegate.cpp index 4121592d15d..a3e14aa7a56 100644 --- a/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningDelegate.cpp +++ b/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningDelegate.cpp @@ -19,12 +19,14 @@ -ModelTuningDelegate::ModelTuningDelegate(int valueColumn, QObject *parent) +ModelTuningDelegate::ModelTuningDelegate(QObject *parent) : QItemDelegate(parent) + , m_valueColumn(1) + , m_sliderRangeFactor(10.0) + , m_multiplyFactor(100) + { - m_valueColumn = valueColumn; - m_multiplyFactor = 100; - m_sliderRangeFactor = 10.0; + } void ModelTuningDelegate::paint(QPainter *painter, diff --git a/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningDelegate.h b/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningDelegate.h index ac7f3a0e627..eab0c340a64 100644 --- a/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningDelegate.h +++ b/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningDelegate.h @@ -12,7 +12,7 @@ class BA_CORE_API_ ModelTuningDelegate : public QItemDelegate Q_OBJECT public: - ModelTuningDelegate(int valueColumn, QObject *parent = 0); + ModelTuningDelegate(QObject *parent = 0); QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & /* index */) const { @@ -29,6 +29,8 @@ public: const QModelIndex &index) const; void setSliderRangeFactor(double value); + void setValueColumn(int valueColumn) { m_valueColumn = valueColumn; } + signals: void currentLinkChanged(ItemLink link); diff --git a/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningWidget.cpp b/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningWidget.cpp index 9ecf81aa73b..ae0dbaf2803 100644 --- a/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningWidget.cpp +++ b/GUI/coregui/Views/Components/SimulationWidgets/ModelTuningWidget.cpp @@ -19,7 +19,7 @@ ModelTuningWidget::ModelTuningWidget(SampleModel *sampleModel, InstrumentModel * : QWidget(parent) , m_parameterModel(0) , m_treeView(0) - , m_delegate(new ModelTuningDelegate(1)) + , m_delegate(new ModelTuningDelegate) , m_sampleModel(0) , m_instrumentModel(0) , m_simulationRunner(0) diff --git a/GUI/coregui/Views/JobView.cpp b/GUI/coregui/Views/JobView.cpp index e7225bd1cf9..c66d3aa3fed 100644 --- a/GUI/coregui/Views/JobView.cpp +++ b/GUI/coregui/Views/JobView.cpp @@ -127,21 +127,21 @@ void JobView::resetToDefaultLayout() setTrackingEnabled(true); - onJobViewActivityRequest(); + //onJobViewActivityRequest(); } void JobView::onJobViewActivityRequest() { - m_d->m_dockWidgets[JobListDock]->show(); - m_d->m_dockWidgets[RealTimeDock]->hide(); +// m_d->m_dockWidgets[JobListDock]->show(); +// m_d->m_dockWidgets[RealTimeDock]->hide(); } void JobView::onRealTimeActivityRequest() { - m_d->m_dockWidgets[JobListDock]->hide(); - m_d->m_dockWidgets[RealTimeDock]->show(); +// m_d->m_dockWidgets[JobListDock]->hide(); +// m_d->m_dockWidgets[RealTimeDock]->show(); } -- GitLab