Skip to content

Commit

Permalink
Inspector: fix offset properties
Browse files Browse the repository at this point in the history
In 6ded409, we had made offset properties a single PropertyItem to fix some problems with applying to style. This turns out to cause other problems, because we want to be able to edit x and y values separately, also when multiple items are selected, see #15452.
  • Loading branch information
cbjeukendrup committed Jan 8, 2023
1 parent 36adf11 commit c2fb1bc
Show file tree
Hide file tree
Showing 21 changed files with 395 additions and 202 deletions.
2 changes: 0 additions & 2 deletions src/inspector/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@ set(MODULE_SRC
${CMAKE_CURRENT_LIST_DIR}/models/inspectorlistmodel.h
${CMAKE_CURRENT_LIST_DIR}/models/propertyitem.cpp
${CMAKE_CURRENT_LIST_DIR}/models/propertyitem.h
${CMAKE_CURRENT_LIST_DIR}/models/pointfpropertyitem.cpp
${CMAKE_CURRENT_LIST_DIR}/models/pointfpropertyitem.h
${CMAKE_CURRENT_LIST_DIR}/models/general/generalsettingsmodel.cpp
${CMAKE_CURRENT_LIST_DIR}/models/general/generalsettingsmodel.h
${CMAKE_CURRENT_LIST_DIR}/models/general/appearance/appearancesettingsmodel.cpp
Expand Down
1 change: 0 additions & 1 deletion src/inspector/models/abstractinspectormodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
#include "actions/iactionsdispatcher.h"
#include "modularity/ioc.h"
#include "models/propertyitem.h"
#include "models/pointfpropertyitem.h"
#include "ui/view/iconcodes.h"
#include "types/commontypes.h"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
*/
#include "appearancesettingsmodel.h"

#include "types/commontypes.h"
#include "translation.h"

#include "log.h"
Expand All @@ -48,7 +47,24 @@ void AppearanceSettingsModel::createProperties()
m_minimumDistance = buildPropertyItem(Pid::MIN_DISTANCE);
m_color = buildPropertyItem(Pid::COLOR);
m_arrangeOrder = buildPropertyItem(Pid::Z);
//m_offset = buildPointFPropertyItem(Pid::OFFSET);

m_horizontalOffset = buildPropertyItem(mu::engraving::Pid::OFFSET, [](const QVariant& value, const engraving::EngravingItem* element) {
double newX = value.toDouble();
newX *= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return PointF(newX, element->getProperty(mu::engraving::Pid::OFFSET).value<PointF>().y());
}, [this](const QVariant& value) {
// TODO: What if m_verticalOffset->value() is invalid?
return PointF(value.toDouble(), m_verticalOffset->value().toDouble());
});

m_verticalOffset = buildPropertyItem(mu::engraving::Pid::OFFSET, [](const QVariant& value, const engraving::EngravingItem* element) {
double newY = value.toDouble();
newY *= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return PointF(element->getProperty(mu::engraving::Pid::OFFSET).value<PointF>().x(), newY);
}, [this](const QVariant& value) {
// TODO: What if m_horizontalOffset->value() is invalid?
return PointF(m_horizontalOffset->value().toDouble(), value.toDouble());
});
}

void AppearanceSettingsModel::requestElements()
Expand Down Expand Up @@ -77,7 +93,8 @@ void AppearanceSettingsModel::resetProperties()
m_measureWidth->resetToDefault();
m_color->resetToDefault();
m_arrangeOrder->resetToDefault();
m_offset->resetToDefault();
m_horizontalOffset->resetToDefault();
m_verticalOffset->resetToDefault();
}

void AppearanceSettingsModel::onNotationChanged(const PropertyIdSet& changedPropertyIdSet, const StyleIdSet&)
Expand Down Expand Up @@ -108,7 +125,17 @@ void AppearanceSettingsModel::loadProperties(const PropertyIdSet& propertyIdSet)
}

if (mu::contains(propertyIdSet, Pid::OFFSET)) {
loadPropertyItem(m_offset);
loadPropertyItem(m_horizontalOffset, [](const engraving::PropertyValue& propertyValue, const engraving::EngravingItem* element) {
double x = propertyValue.value<PointF>().x();
x /= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return x;
});

loadPropertyItem(m_verticalOffset, [](const engraving::PropertyValue& propertyValue, const engraving::EngravingItem* element) {
double y = propertyValue.value<PointF>().y();
y /= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return y;
});
}

emit isSnappedToGridChanged(isSnappedToGrid());
Expand Down Expand Up @@ -226,9 +253,14 @@ PropertyItem* AppearanceSettingsModel::arrangeOrder() const
return m_arrangeOrder;
}

PropertyItem* AppearanceSettingsModel::offset() const
PropertyItem* AppearanceSettingsModel::horizontalOffset() const
{
return m_horizontalOffset;
}

PropertyItem* AppearanceSettingsModel::verticalOffset() const
{
return m_offset;
return m_verticalOffset;
}

bool AppearanceSettingsModel::isSnappedToGrid() const
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ class AppearanceSettingsModel : public AbstractInspectorModel
Q_PROPERTY(PropertyItem * minimumDistance READ minimumDistance CONSTANT)
Q_PROPERTY(PropertyItem * color READ color CONSTANT)
Q_PROPERTY(PropertyItem * arrangeOrder READ arrangeOrder CONSTANT)
Q_PROPERTY(PropertyItem * offset READ offset CONSTANT)
Q_PROPERTY(PropertyItem * horizontalOffset READ horizontalOffset CONSTANT)
Q_PROPERTY(PropertyItem * verticalOffset READ verticalOffset CONSTANT)
Q_PROPERTY(bool isSnappedToGrid READ isSnappedToGrid WRITE setIsSnappedToGrid NOTIFY isSnappedToGridChanged)

public:
Expand All @@ -61,7 +62,8 @@ class AppearanceSettingsModel : public AbstractInspectorModel
PropertyItem* minimumDistance() const;
PropertyItem* color() const;
PropertyItem* arrangeOrder() const;
PropertyItem* offset() const;
PropertyItem* horizontalOffset() const;
PropertyItem* verticalOffset() const;

bool isSnappedToGrid() const;

Expand All @@ -86,7 +88,8 @@ public slots:
PropertyItem* m_minimumDistance = nullptr;
PropertyItem* m_color = nullptr;
PropertyItem* m_arrangeOrder = nullptr;
PointFPropertyItem* m_offset = nullptr;
PropertyItem* m_horizontalOffset = nullptr;
PropertyItem* m_verticalOffset = nullptr;
};
}

Expand Down
153 changes: 131 additions & 22 deletions src/inspector/models/notation/lines/textlinesettingsmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
*/
#include "textlinesettingsmodel.h"

#include "types/commontypes.h"
#include "types/linetypes.h"

#include "ui/view/iconcodes.h"
Expand Down Expand Up @@ -84,17 +83,74 @@ void TextLineSettingsModel::createProperties()

if (isTextVisible(BeginningText)) {
m_beginningText = buildPropertyItem(Pid::BEGIN_TEXT);
// m_beginningTextOffset = buildPointFPropertyItem(Pid::BEGIN_TEXT_OFFSET);

m_beginningTextHorizontalOffset
= buildPropertyItem(mu::engraving::Pid::BEGIN_TEXT_OFFSET, [](const QVariant& value, const engraving::EngravingItem* element) {
double newX = value.toDouble();
newX *= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return PointF(newX, element->getProperty(mu::engraving::Pid::BEGIN_TEXT_OFFSET).value<PointF>().y());
}, [this](const QVariant& value) {
// TODO: What if m_beginningTextVerticalOffset->value() is invalid?
return PointF(value.toDouble(), m_beginningTextVerticalOffset->value().toDouble());
});

m_beginningTextVerticalOffset
= buildPropertyItem(mu::engraving::Pid::BEGIN_TEXT_OFFSET, [](const QVariant& value, const engraving::EngravingItem* element) {
double newY = value.toDouble();
newY *= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return PointF(element->getProperty(mu::engraving::Pid::BEGIN_TEXT_OFFSET).value<PointF>().x(), newY);
}, [this](const QVariant& value) {
// TODO: What if m_beginningTextHorizontalOffset->value() is invalid?
return PointF(m_beginningTextHorizontalOffset->value().toDouble(), value.toDouble());
});
}

if (isTextVisible(ContinuousText)) {
m_continuousText = buildPropertyItem(Pid::CONTINUE_TEXT);
// m_continuousTextOffset = buildPointFPropertyItem(Pid::CONTINUE_TEXT_OFFSET);
if (isTextVisible(ContinueText)) {
m_continueText = buildPropertyItem(Pid::CONTINUE_TEXT);

m_continueTextHorizontalOffset
= buildPropertyItem(mu::engraving::Pid::CONTINUE_TEXT_OFFSET, [](const QVariant& value, const engraving::EngravingItem* element) {
double newX = value.toDouble();
newX *= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return PointF(newX, element->getProperty(mu::engraving::Pid::CONTINUE_TEXT_OFFSET).value<PointF>().y());
}, [this](const QVariant& value) {
// TODO: What if m_continueTextVerticalOffset->value() is invalid?
return PointF(value.toDouble(), m_continueTextVerticalOffset->value().toDouble());
});

m_continueTextVerticalOffset
= buildPropertyItem(mu::engraving::Pid::CONTINUE_TEXT_OFFSET, [](const QVariant& value, const engraving::EngravingItem* element) {
double newY = value.toDouble();
newY *= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return PointF(element->getProperty(mu::engraving::Pid::CONTINUE_TEXT_OFFSET).value<PointF>().x(), newY);
}, [this](const QVariant& value) {
// TODO: What if m_continueTextHorizontalOffset->value() is invalid?
return PointF(m_continueTextHorizontalOffset->value().toDouble(), value.toDouble());
});
}

if (isTextVisible(EndText)) {
m_endText = buildPropertyItem(Pid::END_TEXT);
// m_endTextOffset = buildPointFPropertyItem(Pid::END_TEXT_OFFSET);

m_endTextHorizontalOffset
= buildPropertyItem(mu::engraving::Pid::END_TEXT_OFFSET, [](const QVariant& value, const engraving::EngravingItem* element) {
double newX = value.toDouble();
newX *= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return PointF(newX, element->getProperty(mu::engraving::Pid::END_TEXT_OFFSET).value<PointF>().y());
}, [this](const QVariant& value) {
// TODO: What if m_endTextVerticalOffset->value() is invalid?
return PointF(value.toDouble(), m_endTextVerticalOffset->value().toDouble());
});

m_endTextVerticalOffset
= buildPropertyItem(mu::engraving::Pid::END_TEXT_OFFSET, [](const QVariant& value, const engraving::EngravingItem* element) {
double newY = value.toDouble();
newY *= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return PointF(element->getProperty(mu::engraving::Pid::END_TEXT_OFFSET).value<PointF>().x(), newY);
}, [this](const QVariant& value) {
// TODO: What if m_endTextHorizontalOffset->value() is invalid?
return PointF(m_endTextHorizontalOffset->value().toDouble(), value.toDouble());
});
}
}

Expand Down Expand Up @@ -137,11 +193,14 @@ void TextLineSettingsModel::resetProperties()
m_hookHeight,
m_placement,
m_beginningText,
m_beginningTextOffset,
m_continuousText,
m_continuousTextOffset,
m_beginningTextHorizontalOffset,
m_beginningTextVerticalOffset,
m_continueText,
m_continueTextHorizontalOffset,
m_continueTextVerticalOffset,
m_endText,
m_endTextOffset
m_endTextHorizontalOffset,
m_endTextVerticalOffset
};

for (PropertyItem* property : allProperties) {
Expand Down Expand Up @@ -206,29 +265,44 @@ PropertyItem* TextLineSettingsModel::beginningText() const
return m_beginningText;
}

PropertyItem* TextLineSettingsModel::beginningTextOffset() const
PropertyItem* TextLineSettingsModel::beginningTextHorizontalOffset() const
{
return m_beginningTextHorizontalOffset;
}

PropertyItem* TextLineSettingsModel::beginningTextVerticalOffset() const
{
return m_beginningTextOffset;
return m_beginningTextVerticalOffset;
}

PropertyItem* TextLineSettingsModel::continuousText() const
PropertyItem* TextLineSettingsModel::continueText() const
{
return m_continuousText;
return m_continueText;
}

PropertyItem* TextLineSettingsModel::continuousTextOffset() const
PropertyItem* TextLineSettingsModel::continueTextHorizontalOffset() const
{
return m_continuousTextOffset;
return m_continueTextHorizontalOffset;
}

PropertyItem* TextLineSettingsModel::continueTextVerticalOffset() const
{
return m_continueTextVerticalOffset;
}

PropertyItem* TextLineSettingsModel::endText() const
{
return m_endText;
}

PropertyItem* TextLineSettingsModel::endTextOffset() const
PropertyItem* TextLineSettingsModel::endTextHorizontalOffset() const
{
return m_endTextHorizontalOffset;
}

PropertyItem* TextLineSettingsModel::endTextVerticalOffset() const
{
return m_endTextOffset;
return m_endTextVerticalOffset;
}

QVariantList TextLineSettingsModel::possibleStartHookTypes() const
Expand Down Expand Up @@ -348,23 +422,58 @@ void TextLineSettingsModel::loadProperties(const PropertyIdSet& propertyIdSet)
}

if (mu::contains(propertyIdSet, Pid::BEGIN_TEXT_OFFSET)) {
loadPropertyItem(m_beginningTextOffset);
loadPropertyItem(m_beginningTextHorizontalOffset,
[](const engraving::PropertyValue& propertyValue, const engraving::EngravingItem* element) {
double x = propertyValue.value<PointF>().x();
x /= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return x;
});

loadPropertyItem(m_beginningTextVerticalOffset,
[](const engraving::PropertyValue& propertyValue, const engraving::EngravingItem* element) {
double y = propertyValue.value<PointF>().y();
y /= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return y;
});
}

if (mu::contains(propertyIdSet, Pid::CONTINUE_TEXT)) {
loadPropertyItem(m_continuousText);
loadPropertyItem(m_continueText);
}

if (mu::contains(propertyIdSet, Pid::CONTINUE_TEXT_OFFSET)) {
loadPropertyItem(m_continuousTextOffset);
loadPropertyItem(m_continueTextHorizontalOffset,
[](const engraving::PropertyValue& propertyValue, const engraving::EngravingItem* element) {
double x = propertyValue.value<PointF>().x();
x /= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return x;
});

loadPropertyItem(m_continueTextVerticalOffset,
[](const engraving::PropertyValue& propertyValue, const engraving::EngravingItem* element) {
double y = propertyValue.value<PointF>().y();
y /= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return y;
});
}

if (mu::contains(propertyIdSet, Pid::END_TEXT)) {
loadPropertyItem(m_endText);
}

if (mu::contains(propertyIdSet, Pid::END_TEXT_OFFSET)) {
loadPropertyItem(m_endTextOffset);
loadPropertyItem(m_endTextHorizontalOffset,
[](const engraving::PropertyValue& propertyValue, const engraving::EngravingItem* element) {
double x = propertyValue.value<PointF>().x();
x /= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return x;
});

loadPropertyItem(m_endTextVerticalOffset, [](const engraving::PropertyValue& propertyValue, const engraving::EngravingItem* element) {
double y = propertyValue.value<PointF>().y();
y /= element->sizeIsSpatiumDependent() ? element->spatium() : mu::engraving::DPMM;
return y;
});
}

onUpdateLinePropertiesAvailability();
Expand Down
Loading

0 comments on commit c2fb1bc

Please sign in to comment.