Skip to content
Snippets Groups Projects
Commit a519aba2 authored by Mikhail Svechnikov's avatar Mikhail Svechnikov
Browse files

Job: store job activity

parent 4f66cacc
No related branches found
No related tags found
1 merge request!999GUI: save and load activity for job
......@@ -45,6 +45,7 @@ const QString value("value");
const QString Identifier("Id");
const QString Comments("Comments");
const QString PresentationType("PresentationType");
const QString Activity("Activity");
const QString Duration("Duration");
const QString BeginTime("Begin");
const QString EndTime("End");
......@@ -209,6 +210,7 @@ QString JobItem::presentationType() const
void JobItem::setPresentationType(const QString& type)
{
qInfo() << "JobItem::setPresentationType" << type;
m_presentationType = type;
}
......@@ -219,6 +221,7 @@ QString JobItem::activity() const
void JobItem::setActivity(const QString &activity)
{
qInfo() << "JobItem::setActivity" << activity;
m_activity = activity;
}
......@@ -456,6 +459,10 @@ void JobItem::writeNonSessionItems(QXmlStreamWriter* writer) const
GUI::Session::XML::writeAttribute(writer, Tags::value, m_identifier);
writer->writeEndElement();
writer->writeStartElement(Tags::Activity);
GUI::Session::XML::writeAttribute(writer, Tags::value, m_activity);
writer->writeEndElement();
writer->writeStartElement(Tags::PresentationType);
GUI::Session::XML::writeAttribute(writer, Tags::value, m_presentationType);
writer->writeEndElement();
......@@ -542,6 +549,9 @@ void JobItem::readNonSessionItems(QXmlStreamReader* reader)
} else if (reader->name() == Tags::Sample) {
m_sampleItem.readContentFrom(reader);
GUI::Session::XML::gotoEndElementOfTag(reader, Tags::Sample);
} else if (reader->name() == Tags::Activity) {
GUI::Session::XML::readAttribute(reader, Tags::value, &m_activity);
GUI::Session::XML::gotoEndElementOfTag(reader, Tags::Activity);
} else if (reader->name() == Tags::PresentationType) {
GUI::Session::XML::readAttribute(reader, Tags::value, &m_presentationType);
GUI::Session::XML::gotoEndElementOfTag(reader, Tags::PresentationType);
......
......@@ -57,8 +57,9 @@ void JobResultsPresenter::setPresentation(const QString& presentationType)
jobItem()->setPresentationType(presentationType);
}
void JobResultsPresenter::setPresentation(JobViewActivity activity)
void JobResultsPresenter::setPresentationForActivity(JobViewActivity activity)
{
QString presentation;
if (!jobItem() || jobItem()->isRunning())
return;
......@@ -73,6 +74,7 @@ void JobResultsPresenter::setPresentation(JobViewActivity activity)
presentation = defaultPresentationOfInstrument();
break;
}
qInfo() << "JobResultsPresenter::setPresentationForActivity : " << JobViewActivities::nameFromActivity(activity) << presentation;
setPresentation(presentation);
}
......
......@@ -31,7 +31,7 @@ public:
void setJobItem(JobItem* jobItem);
void setPresentation(const QString& presentationType) override;
void setPresentation(JobViewActivity activity);
void setPresentationForActivity(JobViewActivity activity);
protected:
QString itemPresentation() const override;
......
......@@ -33,7 +33,7 @@ public:
QVector<JobItem*> selectedJobs() const;
signals:
void selectedJobsChanged(const QVector<JobItem*>& jobs);
void selectedJobsChanged();
public slots:
void makeJobItemSelected(JobItem*);
......
......@@ -62,7 +62,7 @@ void JobView::onFocusRequest(JobItem* jobItem)
QVector<JobItem*> jobs = m_jobSelector->selectedJobs();
if (jobs.size() != 1 || jobItem != jobs.front()) {
m_jobSelector->makeJobItemSelected(jobItem);
setAppropriateActivityForJob(jobItem);
setActivityAndPresentationForNewJob(jobItem);
}
emit focusRequest(MainWindow::JOB);
......@@ -85,19 +85,38 @@ void JobView::setActivity(JobViewActivity activity)
//! Propagates change in JobItem's selection down into main widgets.
void JobView::onSelectionChanged(const QVector<JobItem*>& jobs)
void JobView::onSelectionChanged()
{
JobItem* jobItem = nullptr;
if (jobs.size() == 1)
jobItem = jobs.front();
// TODO temporary
// https://jugit.fz-juelich.de/mlz/bornagain/-/issues/325
// setAppropriateActivityForJob(jobItem);
// setAppropriateActivityForJob(jobItem);
m_jobResultsPresenter->setJobItem(selectedJob());
m_jobRealTimeWidget->setJobItem(selectedJob());
m_fitActivityPanel->setJobItem(selectedJob());
if(!selectedJob())
return;
m_jobResultsPresenter->setJobItem(jobItem);
m_jobRealTimeWidget->setJobItem(jobItem);
m_fitActivityPanel->setJobItem(jobItem);
if(!selectedJob()->activity().isEmpty()) {
// apply activity (show docs) for the current job
blockSignals(true);
QString jobActivity = selectedJob()->activity();
qInfo() << "JobView::onSelectionChanged : restore activity" << jobActivity;
ASSERT(!jobActivity.isEmpty())
setActivity(JobViewActivities::activityFromName(jobActivity));
blockSignals(false);
}
}
JobItem* JobView::selectedJob()
{
const QVector<JobItem*>& jobs = m_jobSelector->selectedJobs();
if (jobs.size() == 1)
return jobs.front();
return nullptr;
}
void JobView::createSubWindows()
......@@ -124,9 +143,12 @@ void JobView::createActions()
{
for (JobViewActivity activity : JobViewActivities::all()) {
auto* action = new QAction(this);
action->setText(JobViewActivities::name(activity));
action->setText(JobViewActivities::nameFromActivity(activity));
action->setCheckable(true);
connect(action, &QAction::triggered, [=]() { setActivity(activity); });
connect(action, &QAction::triggered, [=]() {
setActivity(activity);
});
m_activityActions.addAction(action);
}
}
......@@ -142,8 +164,8 @@ void JobView::connectSignals()
void JobView::connectActivityRelated()
{
// Activity was changed: this -> JobResultsPresenter
connect(this, &JobView::activityChanged, m_jobResultsPresenter,
qOverload<JobViewActivity>(&JobResultsPresenter::setPresentation));
// connect(this, &JobView::activityChanged, m_jobResultsPresenter,
// &JobResultsPresenter::setPresentationForActivity, Qt::UniqueConnection);
}
//! Connects signals related to JobItem
......@@ -160,25 +182,32 @@ void JobView::connectJobRelated()
&JobMessagePanel::setLog);
// activate view for the selected job at project opening
m_jobSelector->selectedJobsChanged(m_jobSelector->selectedJobs());
m_jobSelector->selectedJobsChanged();
}
//! Sets appropriate activity for new JobItem
//! Sets appropriate activity and presentation for new JobItem
void JobView::setAppropriateActivityForJob(JobItem* jobItem)
void JobView::setActivityAndPresentationForNewJob(JobItem* jobItem)
{
if (!jobItem)
return;
if (jobItem->isValidForFitting()) {
// fitting presentation
m_jobResultsPresenter->setPresentation(JobViewActivity::Fitting);
// ALTERNATIVE:
// fitting activity
// setActivity(JobViewActivity::Fitting);
//
// https://jugit.fz-juelich.de/mlz/bornagain/-/issues/325
}
qInfo() << "JobView::setActivityAndPresentationForNewJob";
JobViewActivity newActivity = JobViewActivity::JobView;
// save in current job
jobItem->setActivity(JobViewActivities::nameFromActivity(newActivity));
// apply activity to show the corresponding docs
setActivity(newActivity);
// set presentation to presenter and save it for job
m_jobResultsPresenter->setPresentationForActivity(newActivity);
// set fitting presentation if the simulation has data
if (jobItem->isValidForFitting())
m_jobResultsPresenter->setPresentationForActivity(JobViewActivity::Fitting);
}
void JobView::resetLayout()
......
......@@ -49,16 +49,17 @@ signals:
public slots:
void onFocusRequest(JobItem* jobItem);
void setActivity(JobViewActivity activity);
void onSelectionChanged(const QVector<JobItem*>& jobs);
void onSelectionChanged();
private:
JobItem* selectedJob();
void createSubWindows();
void createActions();
void connectSignals();
void connectActivityRelated();
void connectJobRelated();
void setAppropriateActivityForJob(JobItem* jobItem);
void setActivityAndPresentationForNewJob(JobItem* jobItem);
void resetLayout();
DocksController* m_docks;
......
......@@ -51,13 +51,21 @@ QList<JobViewActivity> all()
//! Returns name of activity.
QString name(JobViewActivity activity)
QString nameFromActivity(JobViewActivity activity)
{
QMap<JobViewActivity, QString>::const_iterator it = activityNames.find(activity);
ASSERT(it != activityNames.end());
return it.value();
}
//! Returns activity by its name.
JobViewActivity activityFromName(QString name)
{
ASSERT(activityNames.values().contains(name));
return activityNames.key(name);
}
//! Returns vector of JobView's dockId which have to be shown for given activity.
QVector<JobViewFlags::Dock> activeDocks(JobViewActivity activity)
......
......@@ -28,7 +28,8 @@ namespace JobViewActivities {
QList<JobViewActivity> all();
QString name(JobViewActivity activity);
QString nameFromActivity(JobViewActivity activity);
JobViewActivity activityFromName(QString name);
QVector<JobViewFlags::Dock> activeDocks(JobViewActivity activity);
......
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