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

restore project notification about changed state

parent 1e5d1ee5
No related branches found
No related tags found
1 merge request!1339GUI: fix masks and projections
......@@ -15,6 +15,7 @@
#include "GUI/View/Mask/MaskEditorActions.h"
#include "GUI/Model/Device/MaskItems.h"
#include "GUI/Model/Model/SessionModel.h"
#include "GUI/Model/Project/ProjectDocument.h"
#include "GUI/Util/ActionFactory.h"
#include <QAction>
#include <QItemSelectionModel>
......@@ -112,6 +113,7 @@ void MaskEditorActions::onDeleteMaskAction()
m_maskContainerModel->removeMaskAt(indexes.back().row());
indexes = m_selectionModel->selectedIndexes();
}
gProjectDocument.value()->setModified();
}
//! Performs switch of mask value for all selected items (true -> false, false -> true)
......@@ -123,6 +125,7 @@ void MaskEditorActions::onToggleMaskValueAction()
if (MaskItem* item = m_maskContainerModel->itemForIndex(itemIndex))
item->setMaskValue(!item->maskValue());
}
gProjectDocument.value()->setModified();
}
void MaskEditorActions::onBringToFrontAction()
......@@ -160,6 +163,7 @@ void MaskEditorActions::changeMaskStackingOrder(MaskEditorFlags::Stacking value)
m_maskContainerModel->moveMask(row, new_row);
}
}
gProjectDocument.value()->setModified();
}
//! Returns true if at least one of MaskItems in the selection can be moved one level up
......
......@@ -16,12 +16,12 @@
#include "GUI/Model/Data/IntensityDataItem.h"
#include "GUI/Model/Device/MaskItems.h"
#include "GUI/Model/Model/SessionModel.h"
#include "GUI/Model/Project/ProjectDocument.h"
#include "GUI/View/Common/DoubleSpinBox.h"
#include "GUI/View/Plot2D/IntensityDataPropertyWidget.h"
#include "GUI/View/Tool/EditUtil.h"
#include "GUI/View/Tool/GroupBoxCollapser.h"
#include "GUI/View/Tool/LayoutUtils.h"
#include <QCheckBox>
#include <QFormLayout>
#include <QGroupBox>
......@@ -175,12 +175,12 @@ void MaskEditorPropertyPanel::createMaskEditorUI()
auto* maskItem = m_currentMaskItem; // shorthand
// -- mask value (only if not RoI)
if (!dynamic_cast<RegionOfInterestItem*>(maskItem)) {
const auto maskValueGetter = [=] { return maskItem->maskValue(); };
const auto maskValueSetter = [=](bool b) { maskItem->setMaskValue(b); };
const auto maskValueGetter = [maskItem] { return maskItem->maskValue(); };
const auto maskValueSetter = [maskItem](bool b) { maskItem->setMaskValue(b); };
addMaskCheckBox("Mask value", maskValueGetter, maskValueSetter);
}
// -- mask visibility
const auto visibilityValueGetter = [=] { return maskItem->isVisibleValue(); };
const auto visibilityValueGetter = [maskItem] { return maskItem->isVisibleValue(); };
const auto visibilityValueSetter = [=](bool b) {
m_inhibitSelectionChange = true;
maskItem->setIsVisibleValue(b);
......@@ -191,46 +191,47 @@ void MaskEditorPropertyPanel::createMaskEditorUI()
// -- name (only if not RoI)
if (!dynamic_cast<RegionOfInterestItem*>(maskItem)) {
auto* edit = new QLineEdit(maskItem->maskName(), m_maskPropertiesLayout->parentWidget());
connect(edit, &QLineEdit::textEdited, [=](const QString& t) { maskItem->setMaskName(t); });
connect(edit, &QLineEdit::textEdited, [maskItem](const QString& t) { maskItem->setMaskName(t); });
connect(edit, &QLineEdit::editingFinished, [] { gProjectDocument.value()->setModified(); });
m_maskPropertiesLayout->addRow("Name:", edit);
}
if (auto* c = dynamic_cast<RectangleItem*>(maskItem)) {
addMaskSpinBox(
"xlow", [=] { return c->xLow(); }, [=](double v) { c->setXLow(v); },
"xlow", [c] { return c->xLow(); }, [c](double v) { c->setXLow(v); },
RealLimits::limitless());
addMaskSpinBox(
"ylow", [=] { return c->yLow(); }, [=](double v) { c->setYLow(v); },
"ylow", [c] { return c->yLow(); }, [c](double v) { c->setYLow(v); },
RealLimits::limitless());
addMaskSpinBox(
"xup", [=] { return c->xUp(); }, [=](double v) { c->setXUp(v); },
"xup", [c] { return c->xUp(); }, [c](double v) { c->setXUp(v); },
RealLimits::limitless());
addMaskSpinBox(
"yup", [=] { return c->yUp(); }, [=](double v) { c->setYUp(v); },
"yup", [c] { return c->yUp(); }, [c](double v) { c->setYUp(v); },
RealLimits::limitless());
} else if (auto* c = dynamic_cast<EllipseItem*>(maskItem)) {
addMaskSpinBox(
"X center", [=] { return c->xCenter(); }, [=](double v) { c->setXCenter(v); },
"X center", [c] { return c->xCenter(); }, [c](double v) { c->setXCenter(v); },
RealLimits::limitless());
addMaskSpinBox(
"Y center", [=] { return c->yCenter(); }, [=](double v) { c->setYCenter(v); },
"Y center", [c] { return c->yCenter(); }, [c](double v) { c->setYCenter(v); },
RealLimits::limitless());
addMaskSpinBox(
"X radius", [=] { return c->xRadius(); }, [=](double v) { c->setXRadius(v); },
"X radius", [c] { return c->xRadius(); }, [c](double v) { c->setXRadius(v); },
RealLimits::nonnegative());
addMaskSpinBox(
"Y radius", [=] { return c->yRadius(); }, [=](double v) { c->setYRadius(v); },
"Y radius", [c] { return c->yRadius(); }, [c](double v) { c->setYRadius(v); },
RealLimits::nonnegative());
addMaskSpinBox(
"Angle", [=] { return c->angle(); }, [=](double v) { c->setAngle(v); },
"Angle", [c] { return c->angle(); }, [c](double v) { c->setAngle(v); },
RealLimits::limitless());
} else if (auto* c = dynamic_cast<VerticalLineItem*>(maskItem))
addMaskSpinBox(
"X position", [=] { return c->posX(); }, [=](double v) { c->setPosX(v); },
"X position", [c] { return c->posX(); }, [c](double v) { c->setPosX(v); },
RealLimits::limitless());
else if (auto* c = dynamic_cast<HorizontalLineItem*>(maskItem))
addMaskSpinBox(
"Y position", [=] { return c->posY(); }, [=](double v) { c->setPosY(v); },
"Y position", [c] { return c->posY(); }, [c](double v) { c->setPosY(v); },
RealLimits::limitless());
}
......@@ -243,7 +244,7 @@ void MaskEditorPropertyPanel::addMaskSpinBox(const QString& label, function<doub
spinBox->setValue(getter());
connect(spinBox, &QDoubleSpinBox::valueChanged, this,
[=](double newValue) { setter(newValue); });
[setter](double newVal) { setter(newVal); gProjectDocument.value()->setModified(); });
connect(m_currentMaskItem, &MaskItem::maskGeometryChanged, spinBox, [=] {
QSignalBlocker b(spinBox);
spinBox->setValue(getter());
......@@ -257,9 +258,9 @@ void MaskEditorPropertyPanel::addMaskCheckBox(const QString& title, function<boo
{
auto* checkBox = new QCheckBox(title, m_maskPropertiesLayout->parentWidget());
checkBox->setChecked(getter());
connect(checkBox, &QCheckBox::stateChanged, [=]() { setter(checkBox->isChecked()); });
connect(checkBox, &QCheckBox::stateChanged, this, [setter, checkBox]() { setter(checkBox->isChecked()); gProjectDocument.value()->setModified(); });
connect(m_currentMaskItem, &MaskItem::maskVisibilityChanged, this, [=]() {
connect(m_currentMaskItem, &MaskItem::maskVisibilityChanged, this, [checkBox, getter]() {
QSignalBlocker b(checkBox);
checkBox->setChecked(getter());
});
......
......@@ -18,6 +18,7 @@
#include "GUI/Model/Data/ProjectionItems.h"
#include "GUI/Model/Device/MaskItems.h"
#include "GUI/Model/MakeItem/ItemFactory.h"
#include "GUI/Model/Project/ProjectDocument.h"
#include "GUI/Util/Error.h"
#include "GUI/View/Mask/ColorMapSceneAdaptor.h"
#include "GUI/View/Mask/MaskGraphicsProxy.h"
......@@ -235,6 +236,9 @@ void MaskGraphicsScene::onSceneSelectionChanged()
m_block_selection = true;
if (!m_selectionModel)
return;
m_selectionModel->clearSelection();
for (QGraphicsItem* graphicsItem : selectedItems()) {
......@@ -250,6 +254,9 @@ void MaskGraphicsScene::onSceneSelectionChanged()
void MaskGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
if (Qt::LeftButton)
m_mouse_is_pressed = true;
if (event->buttons() & Qt::RightButton) {
if (isDrawingInProgress())
cancelCurrentDrawing();
......@@ -294,6 +301,8 @@ void MaskGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
void MaskGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
{
m_mouse_is_pressed = false;
if (isDrawingInProgress()) {
if (m_context.isRectangleShapeMode()) {
clearSelection();
......@@ -420,6 +429,12 @@ IShape2DView* MaskGraphicsScene::addViewForItem(MaskItemObject* item)
return view;
}
void MaskGraphicsScene::onMaskMove()
{
if(m_mouse_is_pressed)
gProjectDocument.value()->setModified(); // manual mask movement
}
//! Removes single view from scene.
void MaskGraphicsScene::removeItemViewFromScene(MaskItemObject *item)
......@@ -543,7 +558,9 @@ bool MaskGraphicsScene::isDrawingInProgress() const
void MaskGraphicsScene::setDrawingInProgress(bool value)
{
m_context.setDrawingInProgress(value);
if (!value)
if (value)
gProjectDocument.value()->setModified(); // manual mask creation
else
m_currentItem = nullptr;
}
......@@ -691,7 +708,6 @@ void MaskGraphicsScene::processLineItem(QGraphicsSceneMouseEvent* event)
m_maskContainerItem->updateMaskNames();
dynamic_cast<MaskItem*>(m_currentItem)->setMaskValue(m_context.getMaskValue());
subscribeMaskItem(m_currentItem);
emit lineItemProcessed();
setDrawingInProgress(false);
......
......@@ -68,6 +68,7 @@ private slots:
void onSessionSelectionChanged(const QItemSelection& /* selected */,
const QItemSelection& /* deselected */);
void onSceneSelectionChanged();
void onMaskMove();
protected:
void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
......@@ -117,6 +118,7 @@ private:
MaskGraphicsProxy* m_proxy = nullptr;
QSharedPointer<ISceneAdaptor> m_adaptor;
bool m_block_selection = false;
bool m_mouse_is_pressed = false;
IntensityDataItem* m_intensityItem = nullptr;
MaskItemObject* m_currentItem = nullptr;
QPointF m_currentMousePosition;
......
......@@ -16,6 +16,7 @@
#include "GUI/Model/Data/IntensityDataItem.h"
#include "GUI/Model/Data/ProjectionItems.h"
#include "GUI/Model/Model/SessionModel.h"
#include "GUI/Model/Project/ProjectDocument.h"
#include "GUI/View/Projection/SaveProjectionsAssistant.h"
#include <QAction>
#include <QItemSelectionModel>
......@@ -77,6 +78,7 @@ void ProjectionsEditorActions::onDeleteAction()
m_maskContainerModel->removeMaskAt(indexes.back().row());
indexes = m_selectionModel->selectedIndexes();
}
gProjectDocument.value()->setModified();
}
//! Performs saving of projections in ascii file
......
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