Skip to content
Snippets Groups Projects
Commit c8fd7cf6 authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

ModelTuningWidget is connected with JobQueueModel

parent d58dc93d
No related branches found
No related tags found
No related merge requests found
...@@ -79,6 +79,9 @@ void JobItem::initOutputDataItem() ...@@ -79,6 +79,9 @@ void JobItem::initOutputDataItem()
void JobItem::setResults(const Simulation *simulation) void JobItem::setResults(const Simulation *simulation)
{ {
if(!simulation)
throw GUIHelpers::Error("JobItem::setResults() -> Error. Null simulation.");
// qDeleteAll(m_data_items); // qDeleteAll(m_data_items);
// m_data_items.clear(); // m_data_items.clear();
if(m_data_items.isEmpty()) { if(m_data_items.isEmpty()) {
......
...@@ -107,24 +107,21 @@ QString JobQueueData::getIdentifierForJobItem(const JobItem *item) ...@@ -107,24 +107,21 @@ QString JobQueueData::getIdentifierForJobItem(const JobItem *item)
//! submit job and run it in a thread //! submit job and run it in a thread
void JobQueueData::runJob(QString identifier) void JobQueueData::runJob(const QString &identifier)
{ {
if(getThread(identifier)) { if(getThread(identifier)) {
qDebug() << "JobQueueData::runInThread() -> Thread is already running"; qDebug() << "JobQueueData::runInThread() -> Thread is already running";
return; return;
} }
// FIXME Simplify this part by getting rid from the method JobQueueData::createJob(QString jobName, Simulation *simulation, JobItem::RunPolicy run_policy) if(getSimulation(identifier))
// to allow only JobItem's with initialized InstrumentModel and SampleModel throw GUIHelpers::Error("JobQueueData::runJob() -> Error. Simulation is already existing.");
Simulation *simulation = getSimulation(identifier);
if(!simulation) {
JobItem *jobItem = getJobItem(identifier);
simulation = QuickSimulationHelper::getSimulation(jobItem->getSampleModel(), jobItem->getInstrumentModel());
m_simulations[identifier] = simulation;
}
// endoffixme
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; m_runners[identifier] = runner;
QThread *thread = new QThread(); QThread *thread = new QThread();
...@@ -153,7 +150,7 @@ void JobQueueData::runJob(QString identifier) ...@@ -153,7 +150,7 @@ void JobQueueData::runJob(QString identifier)
//! cancels running job //! cancels running job
void JobQueueData::cancelJob(QString identifier) void JobQueueData::cancelJob(const QString &identifier)
{ {
//qDebug() << "JobQueueData::cancelJob()"; //qDebug() << "JobQueueData::cancelJob()";
if(getThread(identifier)) { if(getThread(identifier)) {
...@@ -166,7 +163,7 @@ void JobQueueData::cancelJob(QString identifier) ...@@ -166,7 +163,7 @@ void JobQueueData::cancelJob(QString identifier)
//! remove job from list completely //! remove job from list completely
void JobQueueData::removeJob(QString identifier) void JobQueueData::removeJob(const QString &identifier)
{ {
qDebug() << "JobQueueData::removeJob" << identifier; qDebug() << "JobQueueData::removeJob" << identifier;
cancelJob(identifier); cancelJob(identifier);
...@@ -179,15 +176,7 @@ void JobQueueData::removeJob(QString identifier) ...@@ -179,15 +176,7 @@ void JobQueueData::removeJob(QString identifier)
break; break;
} }
} }
// removing simulations clearSimulation(identifier);
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;
}
}
} }
...@@ -217,17 +206,9 @@ void JobQueueData::onFinishedJob() ...@@ -217,17 +206,9 @@ void JobQueueData::onFinishedJob()
// propagating simulation results // propagating simulation results
Simulation *simulation = getSimulation(runner->getIdentifier()); Simulation *simulation = getSimulation(runner->getIdentifier());
if(simulation) { jobItem->setResults(simulation);
jobItem->setResults(simulation);
// jobItem->init();
// jobItem->getOutputDataItem()->setOutputData(simulation->getIntensityData());
}
// if(runner->isTerminated()) { // propagating status of runner
// jobItem->setStatus(JobItem::Canceled);
// } else {
// jobItem->setStatus(JobItem::Completed);
// }
jobItem->setStatus(runner->getStatus()); jobItem->setStatus(runner->getStatus());
if(runner->getStatus() == JobItem::Failed) if(runner->getStatus() == JobItem::Failed)
jobItem->setComments(runner->getFailureMessage()); jobItem->setComments(runner->getFailureMessage());
...@@ -238,10 +219,9 @@ void JobQueueData::onFinishedJob() ...@@ -238,10 +219,9 @@ void JobQueueData::onFinishedJob()
if(jobItem->getRunPolicy() & JobItem::RunImmediately) if(jobItem->getRunPolicy() & JobItem::RunImmediately)
emit focusRequest(jobItem); emit focusRequest(jobItem);
// qDebug() << " JobQueueData::onFinishedJob() -> before emiting jobIsFinished()";
emit jobIsFinished(runner->getIdentifier()); emit jobIsFinished(runner->getIdentifier());
// qDebug() << " JobQueueData::onFinishedJob() -> after emiting jobIsFinished(), before asigning runner for deletion";
clearSimulation(runner->getIdentifier());
assignForDeletion(runner); assignForDeletion(runner);
// qDebug() << " JobQueueData::onFinishedJob() -> after emiting jobIsFinished(), after asigning runner for deletion"; // qDebug() << " JobQueueData::onFinishedJob() -> after emiting jobIsFinished(), after asigning runner for deletion";
...@@ -329,6 +309,14 @@ void JobQueueData::assignForDeletion(JobRunner *runner) ...@@ -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 //! generates job name
QString JobQueueData::generateJobName() QString JobQueueData::generateJobName()
{ {
......
...@@ -45,14 +45,16 @@ public slots: ...@@ -45,14 +45,16 @@ public slots:
void onFinishedThread(); void onFinishedThread();
void onCancelAllJobs(); void onCancelAllJobs();
void runJob(QString identifier); void runJob(const QString &identifier);
void cancelJob(QString identifier); void cancelJob(const QString &identifier);
void removeJob(QString identifier); void removeJob(const QString &identifier);
friend class QuickSimulationRunner; friend class QuickSimulationRunner;
private: private:
void assignForDeletion(QThread *thread); void assignForDeletion(QThread *thread);
void assignForDeletion(JobRunner *runner); void assignForDeletion(JobRunner *runner);
void clearSimulation(const QString &identifier);
void updateGlobalProgress(); void updateGlobalProgress();
QString generateJobName(); QString generateJobName();
......
#include "AdvModelTuningWidget.h" #include "AdvModelTuningWidget.h"
#include "JobItem.h" #include "JobItem.h"
#include "QuickSimulationSettings.h" #include "QuickSimulationSettings.h"
#include "QuickSimulationHelper.h"
#include "GUIHelpers.h"
#include "ModelTuningDelegate.h"
#include "JobQueueData.h"
#include <QLabel> #include <QLabel>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QTreeView> #include <QTreeView>
#include <QStandardItemModel>
#include <QDebug>
AdvModelTuningWidget::AdvModelTuningWidget(QWidget *parent) AdvModelTuningWidget::AdvModelTuningWidget(JobQueueData *jobQueueData, QWidget *parent)
: QWidget(parent) : QWidget(parent)
, m_jobQueueData(jobQueueData)
, m_currentJobItem(0) , m_currentJobItem(0)
, m_quickSimulationSettings(0) , m_quickSimulationSettings(0)
, m_parameterModel(0)
, m_delegate(new ModelTuningDelegate)
{ {
setMinimumSize(128, 128); setMinimumSize(128, 128);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
...@@ -22,6 +31,8 @@ AdvModelTuningWidget::AdvModelTuningWidget(QWidget *parent) ...@@ -22,6 +31,8 @@ AdvModelTuningWidget::AdvModelTuningWidget(QWidget *parent)
m_treeView = new QTreeView(); 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->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; QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->setMargin(0); mainLayout->setMargin(0);
...@@ -35,7 +46,66 @@ AdvModelTuningWidget::AdvModelTuningWidget(QWidget *parent) ...@@ -35,7 +46,66 @@ AdvModelTuningWidget::AdvModelTuningWidget(QWidget *parent)
} }
AdvModelTuningWidget::~AdvModelTuningWidget()
{
delete m_parameterModel;
}
void AdvModelTuningWidget::setCurrentItem(JobItem *item) 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();
} }
#ifndef ADVMODELTUNINGWIDGET_H #ifndef ADVMODELTUNINGWIDGET_H
#define ADVMODELTUNINGWIDGET_H #define ADVMODELTUNINGWIDGET_H
#include "ItemLink.h"
#include <QWidget> #include <QWidget>
class QLabel;
class JobItem; class JobItem;
class QuickSimulationSettings; class QuickSimulationSettings;
class ModelTuningDelegate;
class JobQueueData;
class QTreeView; class QTreeView;
class QStandardItemModel;
class AdvModelTuningWidget : public QWidget class AdvModelTuningWidget : public QWidget
{ {
...@@ -13,15 +18,23 @@ class AdvModelTuningWidget : public QWidget ...@@ -13,15 +18,23 @@ class AdvModelTuningWidget : public QWidget
public: public:
AdvModelTuningWidget(QWidget *parent = 0); AdvModelTuningWidget(JobQueueData *jobQueueData, QWidget *parent = 0);
virtual ~AdvModelTuningWidget() {} virtual ~AdvModelTuningWidget();
void setCurrentItem(JobItem *item); void setCurrentItem(JobItem *item);
public slots:
void onCurrentLinkChanged(ItemLink link);
private: private:
void updateParameterModel();
JobQueueData *m_jobQueueData;
JobItem *m_currentJobItem; JobItem *m_currentJobItem;
QuickSimulationSettings *m_quickSimulationSettings; QuickSimulationSettings *m_quickSimulationSettings;
QTreeView *m_treeView; QTreeView *m_treeView;
QStandardItemModel *m_parameterModel;
ModelTuningDelegate *m_delegate;
}; };
......
...@@ -75,7 +75,7 @@ void JobRealTimeWidget::itemClicked(JobItem * item) ...@@ -75,7 +75,7 @@ void JobRealTimeWidget::itemClicked(JobItem * item)
if( !widget && (item->getStatus() == JobItem::Completed || item->getStatus() == JobItem::Canceled)) { if( !widget && (item->getStatus() == JobItem::Completed || item->getStatus() == JobItem::Canceled)) {
qDebug() << "JobOutputDataWidget::itemClicked() -> creating"; qDebug() << "JobOutputDataWidget::itemClicked() -> creating";
widget = new AdvModelTuningWidget(); widget = new AdvModelTuningWidget(m_jobQueueModel->getJobQueueData());
widget->setCurrentItem(item); widget->setCurrentItem(item);
m_stack->addWidget(widget); m_stack->addWidget(widget);
m_jobItemToTuningWidget[item] = widget; m_jobItemToTuningWidget[item] = widget;
......
...@@ -19,12 +19,14 @@ ...@@ -19,12 +19,14 @@
ModelTuningDelegate::ModelTuningDelegate(int valueColumn, QObject *parent) ModelTuningDelegate::ModelTuningDelegate(QObject *parent)
: QItemDelegate(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, void ModelTuningDelegate::paint(QPainter *painter,
......
...@@ -12,7 +12,7 @@ class BA_CORE_API_ ModelTuningDelegate : public QItemDelegate ...@@ -12,7 +12,7 @@ class BA_CORE_API_ ModelTuningDelegate : public QItemDelegate
Q_OBJECT Q_OBJECT
public: public:
ModelTuningDelegate(int valueColumn, QObject *parent = 0); ModelTuningDelegate(QObject *parent = 0);
QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & /* index */) const QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & /* index */) const
{ {
...@@ -29,6 +29,8 @@ public: ...@@ -29,6 +29,8 @@ public:
const QModelIndex &index) const; const QModelIndex &index) const;
void setSliderRangeFactor(double value); void setSliderRangeFactor(double value);
void setValueColumn(int valueColumn) { m_valueColumn = valueColumn; }
signals: signals:
void currentLinkChanged(ItemLink link); void currentLinkChanged(ItemLink link);
......
...@@ -19,7 +19,7 @@ ModelTuningWidget::ModelTuningWidget(SampleModel *sampleModel, InstrumentModel * ...@@ -19,7 +19,7 @@ ModelTuningWidget::ModelTuningWidget(SampleModel *sampleModel, InstrumentModel *
: QWidget(parent) : QWidget(parent)
, m_parameterModel(0) , m_parameterModel(0)
, m_treeView(0) , m_treeView(0)
, m_delegate(new ModelTuningDelegate(1)) , m_delegate(new ModelTuningDelegate)
, m_sampleModel(0) , m_sampleModel(0)
, m_instrumentModel(0) , m_instrumentModel(0)
, m_simulationRunner(0) , m_simulationRunner(0)
......
...@@ -127,21 +127,21 @@ void JobView::resetToDefaultLayout() ...@@ -127,21 +127,21 @@ void JobView::resetToDefaultLayout()
setTrackingEnabled(true); setTrackingEnabled(true);
onJobViewActivityRequest(); //onJobViewActivityRequest();
} }
void JobView::onJobViewActivityRequest() void JobView::onJobViewActivityRequest()
{ {
m_d->m_dockWidgets[JobListDock]->show(); // m_d->m_dockWidgets[JobListDock]->show();
m_d->m_dockWidgets[RealTimeDock]->hide(); // m_d->m_dockWidgets[RealTimeDock]->hide();
} }
void JobView::onRealTimeActivityRequest() void JobView::onRealTimeActivityRequest()
{ {
m_d->m_dockWidgets[JobListDock]->hide(); // m_d->m_dockWidgets[JobListDock]->hide();
m_d->m_dockWidgets[RealTimeDock]->show(); // m_d->m_dockWidgets[RealTimeDock]->show();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment