diff --git a/GUI/coregui/Models/JobItem.cpp b/GUI/coregui/Models/JobItem.cpp index 0ceee6f1a2cbab2125865964f45fa60faa9c1463..26b081705e44ad6f254f18bfa5c95fcd34552a8b 100644 --- a/GUI/coregui/Models/JobItem.cpp +++ b/GUI/coregui/Models/JobItem.cpp @@ -263,6 +263,25 @@ QString JobItem::presentationType() return getItemValue(P_PRESENTATION_TYPE).toString(); } +QString JobItem::defaultPresentationType() +{ + auto instrument = instrumentItem(); + if (!instrument) + GUIHelpers::Error("Error in JobItem::defaultPresentationType: default presentation type " + "cannot be determined"); + + auto instrument_type = instrument->modelType(); + if (instrument_type == Constants::SpecularInstrumentType) + return Constants::SpecularDataPresentation; + else if (instrument_type == Constants::GISASInstrumentType + || instrument_type == Constants::OffSpecInstrumentType) + return Constants::IntensityDataPresentation; + else + GUIHelpers::Error("Error in JobItem::defaultPresentationType: unknown type of instrument " + "attached to the job item."); + return QString(); +} + //! Updates the name of file to store intensity data. void JobItem::updateIntensityDataFileName() diff --git a/GUI/coregui/Models/JobItem.h b/GUI/coregui/Models/JobItem.h index 927f40f0e5749b90e067f8ba405f0e3c185bcfe0..0620a0247035f5604f35b0bd25b77a560a1823e3 100644 --- a/GUI/coregui/Models/JobItem.h +++ b/GUI/coregui/Models/JobItem.h @@ -98,6 +98,7 @@ public: RealDataItem* realDataItem(); QString presentationType(); + QString defaultPresentationType(); private: void updateIntensityDataFileName(); diff --git a/GUI/coregui/Models/JobModel.cpp b/GUI/coregui/Models/JobModel.cpp index 40e1c75fb09b9208d700ff20d6892b39396313b0..8bf698d0f42728a5a3281a6304210fda4d1e3a4d 100644 --- a/GUI/coregui/Models/JobModel.cpp +++ b/GUI/coregui/Models/JobModel.cpp @@ -91,6 +91,8 @@ JobItem *JobModel::addJob(const MultiLayerItem *multiLayerItem, jobItem->getItem(JobItem::P_SAMPLE_NAME)->setValue(multiLayerItem->itemName()); jobItem->getItem(JobItem::P_INSTRUMENT_NAME)->setValue(instrumentItem->itemName()); + jobItem->setItemValue(JobItem::P_PRESENTATION_TYPE, jobItem->defaultPresentationType()); + ParameterTreeUtils::createParameterTree(jobItem); JobModelFunctions::setupJobItemOutput(jobItem); diff --git a/GUI/coregui/Models/JobModelFunctions.cpp b/GUI/coregui/Models/JobModelFunctions.cpp index 727a40ec8acc28afbeff4bb9fb41fdfd437f4fa3..e4ef5af0c7346fc1711eaf013c9088e223934014 100644 --- a/GUI/coregui/Models/JobModelFunctions.cpp +++ b/GUI/coregui/Models/JobModelFunctions.cpp @@ -62,7 +62,6 @@ void JobModelFunctions::setupJobItemOutput(JobItem* jobItem) } - //! Setups JobItem for fit. void JobModelFunctions::setupJobItemForFit(JobItem *jobItem, const RealDataItem *realDataItem) diff --git a/GUI/coregui/Models/item_constants.h b/GUI/coregui/Models/item_constants.h index 6fae1f0802f3b29a0b9b47a8a0609f44c5e5d473..859854746027905ca158157843ce3aad03a9f384 100644 --- a/GUI/coregui/Models/item_constants.h +++ b/GUI/coregui/Models/item_constants.h @@ -263,6 +263,7 @@ const ModelType AVERAGE_LAYER_MATERIAL = "Average Layer Material"; // --- Presentation types ---------------------------------------------------------- const QString IntensityDataPresentation = "Color Map"; +const QString SpecularDataPresentation = "Reflectometry"; const QString IntensityProjectionsPresentation = "Projections"; const QString FitComparisonPresentation = "Fit Data"; const QString MaskEditorPresentation = "Mask Editor"; diff --git a/GUI/coregui/Views/JobWidgets/JobOutputDataWidget.cpp b/GUI/coregui/Views/JobWidgets/JobOutputDataWidget.cpp index 063275eb4035a091a270752937ca7a79737f8c68..e9639061d27f0f1f7c91673bcda9e5793b7fe29b 100644 --- a/GUI/coregui/Views/JobWidgets/JobOutputDataWidget.cpp +++ b/GUI/coregui/Views/JobWidgets/JobOutputDataWidget.cpp @@ -61,9 +61,9 @@ void JobOutputDataWidget::onActivityChanged(int activity) if (activity == JobViewFlags::FITTING_ACTIVITY) { widget->setPresentation(Constants::FitComparisonPresentation); } else if (activity == JobViewFlags::REAL_TIME_ACTIVITY) { - widget->setPresentation(Constants::IntensityDataPresentation); + widget->setDefaultPresentation(); } else if (activity == JobViewFlags::JOB_VIEW_ACTIVITY) { - widget->setPresentation(Constants::IntensityDataPresentation); + widget->setDefaultPresentation(); } } } @@ -74,5 +74,5 @@ bool JobOutputDataWidget::isValidJobItem(JobItem *item) return false; // do not show running job items, the rest (canceled, fitted, etc) are shown - return item->isRunning() ? false: true; + return !item->isRunning(); } diff --git a/GUI/coregui/Views/JobWidgets/JobResultsPresenter.cpp b/GUI/coregui/Views/JobWidgets/JobResultsPresenter.cpp index ddff3db8ae1def7644d8e8c13ce5e23464008c9d..662224c08d0d5dbd16e5e15e4f94690a42805e07 100644 --- a/GUI/coregui/Views/JobWidgets/JobResultsPresenter.cpp +++ b/GUI/coregui/Views/JobWidgets/JobResultsPresenter.cpp @@ -13,10 +13,11 @@ // ************************************************************************** // #include "JobResultsPresenter.h" -#include "IntensityDataProjectionsWidget.h" #include "FitComparisonWidget.h" -#include "JobItem.h" +#include "IntensityDataProjectionsWidget.h" #include "IntensityDataWidget.h" +#include "JobItem.h" +#include "SpecularDataWidget.h" namespace { // Will switch to the presentation which was used before for given item @@ -32,6 +33,8 @@ JobResultsPresenter::JobResultsPresenter(QWidget* parent) create_new<IntensityDataProjectionsWidget>); registerWidget(Constants::FitComparisonPresentation, create_new<FitComparisonWidget>); + + registerWidget(Constants::SpecularDataPresentation, create_new<SpecularDataWidget>); } QString JobResultsPresenter::itemPresentation() const @@ -48,6 +51,13 @@ void JobResultsPresenter::setPresentation(const QString& presentationType) currentItem()->setItemValue(JobItem::P_PRESENTATION_TYPE, presentationType); } +void JobResultsPresenter::setDefaultPresentation() +{ + auto job_item = dynamic_cast<JobItem*>(currentItem()); + Q_ASSERT(job_item); + setPresentation(job_item->defaultPresentationType()); +} + //! Returns list of presentation types, available for given item. JobItem with fitting abilities //! is valid for IntensityDataWidget and FitComparisonWidget. @@ -68,6 +78,7 @@ QStringList JobResultsPresenter::presentationList(SessionItem* item) Q_ASSERT(item->modelType() == Constants::JobItemType); return QStringList() << Constants::IntensityDataPresentation + << Constants::SpecularDataPresentation << Constants::IntensityProjectionsPresentation << Constants::FitComparisonPresentation; } diff --git a/GUI/coregui/Views/JobWidgets/JobResultsPresenter.h b/GUI/coregui/Views/JobWidgets/JobResultsPresenter.h index 4a17aec49eea0a549812421a2b49eb22017daf5b..908dd5e33939ff9c030249467f7992bd34d8aa05 100644 --- a/GUI/coregui/Views/JobWidgets/JobResultsPresenter.h +++ b/GUI/coregui/Views/JobWidgets/JobResultsPresenter.h @@ -28,6 +28,7 @@ public: explicit JobResultsPresenter(QWidget* parent = 0); void setPresentation(const QString& presentationType) override; + void setDefaultPresentation(); protected: QString itemPresentation() const override; diff --git a/GUI/coregui/Views/SpecularDataWidgets/SpecularDataWidget.cpp b/GUI/coregui/Views/SpecularDataWidgets/SpecularDataWidget.cpp index bf45393d6af01fddd9195077f860ffaf8cd84acb..9ea1ec02f6cd1b70dc624cf2eab6cc6911e8897a 100644 --- a/GUI/coregui/Views/SpecularDataWidgets/SpecularDataWidget.cpp +++ b/GUI/coregui/Views/SpecularDataWidgets/SpecularDataWidget.cpp @@ -13,11 +13,12 @@ // ************************************************************************** // #include "SpecularDataWidget.h" -#include "SpecularDataItem.h" -#include "SpecularDataCanvas.h" -#include "JobItem.h" +#include "GUIHelpers.h" #include "IntensityDataItemUtils.h" #include "IntensityDataPropertyWidget.h" +#include "JobItem.h" +#include "SpecularDataItem.h" +#include "SpecularDataCanvas.h" #include <QBoxLayout> #include <QMenu> @@ -69,12 +70,10 @@ void SpecularDataWidget::onContextMenuRequest(const QPoint& point) SpecularDataItem* SpecularDataWidget::specularDataItem() { - // temporarily commented out - // return IntensityDataItemUtils::intensityDataItem(currentItem()); + auto parent = currentItem(); + if (!parent || parent->modelType() != Constants::JobItemType) + throw GUIHelpers::Error( + "Error in SpecularDataWidget::specularDataItem: parent item is of unexpected type"); - // temporary solution, should be removed after starting to use - // JobItem - SpecularDataItem* result = dynamic_cast<SpecularDataItem*>(currentItem()); - Q_ASSERT(result); - return result; + return &parent->item<SpecularDataItem>(JobItem::T_OUTPUT); } diff --git a/GUI/coregui/Views/TestView.cpp b/GUI/coregui/Views/TestView.cpp index 69f62308b9d239b284243ae9b67dc24e6f93387c..380ef195d38843589662a40f8378bd4814f8a951 100644 --- a/GUI/coregui/Views/TestView.cpp +++ b/GUI/coregui/Views/TestView.cpp @@ -15,6 +15,7 @@ #include "TestView.h" #include "AccordionWidget.h" #include "JobModel.h" +#include "JobItem.h" #include "MaskEditor.h" #include "MaterialEditor.h" #include "MinimizerItem.h" @@ -184,13 +185,15 @@ void TestView::test_ba3d() void TestView::test_specular_data_widget() { SessionModel* tempModel = new SessionModel("Test", this); - auto data = fillTestItem(tempModel->insertNewItem(Constants::SpecularDataType)); + auto job_item = dynamic_cast<JobItem*>(tempModel->insertNewItem(Constants::JobItemType)); + fillTestItem(tempModel->insertNewItem(Constants::SpecularDataType, + tempModel->indexOfItem(job_item), -1, JobItem::T_OUTPUT)); QVBoxLayout *layout = new QVBoxLayout; layout->setMargin(0); layout->setSpacing(0); auto widget = new SpecularDataWidget(this); - widget->setItem(data); + widget->setItem(job_item); layout->addWidget(widget); setLayout(layout); }