diff --git a/GUI/Model/Data/MaskItems.cpp b/GUI/Model/Data/MaskItems.cpp index f777c129dbe0ef8ed6e4d2e87d764be84d7dbf08..b912d248ab83463ba30859a89f21f501af88a8c9 100644 --- a/GUI/Model/Data/MaskItems.cpp +++ b/GUI/Model/Data/MaskItems.cpp @@ -265,6 +265,7 @@ void MaskItem::readFrom(QXmlStreamReader* r) // is visible? } else if (tag == Tag::IsVisible) { XML::readAttribute(r, XML::Attrib::value, &m_isVisible); + m_wasVisible = m_isVisible; XML::gotoEndElementOfTag(r, tag); } else diff --git a/GUI/Model/Data/MaskItems.h b/GUI/Model/Data/MaskItems.h index 9ab8aab319a44d411b36f3873c7ad481126f9de1..fcad5d77eaa171e509008d5ac263176142b08a5f 100644 --- a/GUI/Model/Data/MaskItems.h +++ b/GUI/Model/Data/MaskItems.h @@ -54,6 +54,9 @@ public: bool isVisibleValue() const; void setIsVisibleValue(bool visible); + bool wasVisible() const { return m_wasVisible; } + void setWasVisible(bool v) { m_wasVisible = v; } + virtual void writeTo(QXmlStreamWriter* w) const; virtual void readFrom(QXmlStreamReader* r); @@ -62,6 +65,7 @@ protected: QString m_maskName = "nameless by default"; bool m_maskValue = true; bool m_isVisible = true; + bool m_wasVisible = m_isVisible; // do not serialize }; class RectangleItem : public MaskItem { diff --git a/GUI/View/Mask/MaskEditorCanvas.cpp b/GUI/View/Mask/MaskEditorCanvas.cpp index 151267621971f371effbaaadce9ba1eabb06cf91..75d2035b5401bae9bf0c415f24d54d0b79676c43 100644 --- a/GUI/View/Mask/MaskEditorCanvas.cpp +++ b/GUI/View/Mask/MaskEditorCanvas.cpp @@ -82,9 +82,9 @@ void MaskEditorCanvas::onPresentationTypeRequest(MaskEditorFlags::PresentationTy m_resultsPresenter->updatePresenter(presentationType); if (auto* container = m_intensityDataItem->maskContainerItem()) { - bool isVisible = presentationType.testFlag(MaskEditorFlags::MASK_EDITOR); + bool tempVisible = presentationType.testFlag(MaskEditorFlags::MASK_EDITOR); for (MaskItem* mask : container->maskItems()) - mask->setIsVisibleValue(isVisible); + mask->setIsVisibleValue(tempVisible && mask->wasVisible()); } } diff --git a/GUI/View/Mask/MaskEditorPropertyPanel.cpp b/GUI/View/Mask/MaskEditorPropertyPanel.cpp index 0a64e94a01926325cf04255a6b561d63d4f208a1..c0a33c212897f7c481286f550765f7dc10ae4254 100644 --- a/GUI/View/Mask/MaskEditorPropertyPanel.cpp +++ b/GUI/View/Mask/MaskEditorPropertyPanel.cpp @@ -181,6 +181,7 @@ void MaskEditorPropertyPanel::createMaskEditorUI() const auto visibilityValueSetter = [this, maskItem](bool b) { m_inhibitSelectionChange = true; maskItem->setIsVisibleValue(b); + maskItem->setWasVisible(b); m_inhibitSelectionChange = false; }; addMaskCheckBox("Show", visibilityValueGetter, visibilityValueSetter);