From d4bb32a007a16d2e2b4ed23894c2cf4ca9d66a69 Mon Sep 17 00:00:00 2001
From: Dmitry Yurov <d.yurov@fz-juelich.de>
Date: Wed, 24 Oct 2018 13:27:10 +0200
Subject: [PATCH] Fixes for loading saved project

Redmine: #2194
---
 GUI/coregui/Models/DataViewUtils.cpp     | 2 ++
 GUI/coregui/Models/InstrumentItems.cpp   | 2 ++
 GUI/coregui/Models/JobItemUtils.cpp      | 2 ++
 GUI/coregui/Models/PointwiseAxisItem.cpp | 3 ++-
 4 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/GUI/coregui/Models/DataViewUtils.cpp b/GUI/coregui/Models/DataViewUtils.cpp
index 82edd43dccc..5ad35437dd7 100644
--- a/GUI/coregui/Models/DataViewUtils.cpp
+++ b/GUI/coregui/Models/DataViewUtils.cpp
@@ -27,6 +27,8 @@ AxesUnits selectedUnits(Data1DViewItem* view_item)
 void DataViewUtils::updateAxesTitle(Data1DViewItem* view_item)
 {
     auto converter = getConverter(view_item);
+    if (!converter)
+        return;
     auto current_units = selectedUnits(view_item);
     view_item->setXaxisTitle(QString::fromStdString(converter->axisName(0, current_units)));
     if (converter->dimension() > 1)
diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp
index a608219ced6..627c12ab280 100644
--- a/GUI/coregui/Models/InstrumentItems.cpp
+++ b/GUI/coregui/Models/InstrumentItems.cpp
@@ -185,6 +185,8 @@ std::unique_ptr<IUnitConverter> SpecularInstrumentItem::createUnitConverter() co
     const auto instrument = createInstrument();
     auto axis_item = beamItem()->currentInclinationAxisItem();
     if (auto pointwise_axis = dynamic_cast<PointwiseAxisItem*>(axis_item)) {
+        if (!pointwise_axis->containsNonXMLData()) // workaround for loading project
+            return nullptr;
         AxesUnits native_units = JobItemUtils::axesUnitsFromName(pointwise_axis->getUnitsLabel());
         return std::make_unique<UnitConverter1D>(instrument->getBeam(), *pointwise_axis->getAxis(),
                                                  native_units);
diff --git a/GUI/coregui/Models/JobItemUtils.cpp b/GUI/coregui/Models/JobItemUtils.cpp
index 4e74c31fef7..5b4e408f748 100644
--- a/GUI/coregui/Models/JobItemUtils.cpp
+++ b/GUI/coregui/Models/JobItemUtils.cpp
@@ -93,6 +93,8 @@ void JobItemUtils::setIntensityItemAxesUnits(DataItem* intensityItem,
                                               const InstrumentItem* instrumentItem)
 {
     const auto converter = DomainObjectBuilder::createUnitConverter(instrumentItem);
+    if (!converter)
+        return;
     setIntensityItemAxesUnits(intensityItem, *converter);
 }
 
diff --git a/GUI/coregui/Models/PointwiseAxisItem.cpp b/GUI/coregui/Models/PointwiseAxisItem.cpp
index 75b506b8401..e1150461ee7 100644
--- a/GUI/coregui/Models/PointwiseAxisItem.cpp
+++ b/GUI/coregui/Models/PointwiseAxisItem.cpp
@@ -51,6 +51,7 @@ void PointwiseAxisItem::init(const IAxis& axis, const QString& units_label)
     m_axis = std::unique_ptr<IAxis>(axis.clone());
     setItemValue(P_NATIVE_UNITS, units_label);
     findInstrument();
+    updateIndicators();
 }
 
 const IAxis* PointwiseAxisItem::getAxis() const
@@ -87,6 +88,7 @@ bool PointwiseAxisItem::load(const QString& projectDir)
         return false;
 
     m_axis = std::unique_ptr<IAxis>(data->getAxis(0).clone());
+    findInstrument();
     setLastModified(QDateTime::currentDateTime());
     return true;
 }
@@ -132,7 +134,6 @@ void PointwiseAxisItem::findInstrument()
     while (parent_item && parent_item->modelType() != Constants::SpecularInstrumentType)
         parent_item = parent_item->parent();
     m_instrument = static_cast<SpecularInstrumentItem*>(parent_item);
-    updateIndicators();
 }
 
 void PointwiseAxisItem::updateIndicators()
-- 
GitLab