Skip to content

Commit

Permalink
Merge pull request musescore#18518 from cbjeukendrup/fix_updating_off…
Browse files Browse the repository at this point in the history
…set_property

Fix updating the Offset property in the Inspector when dragging item in the notation view
  • Loading branch information
RomanPudashkin committed Jul 12, 2023
2 parents 8d2434c + bbc9b04 commit 539a421
Show file tree
Hide file tree
Showing 11 changed files with 67 additions and 60 deletions.
4 changes: 2 additions & 2 deletions src/inspector/models/abstractinspectorproxymodel.h
Expand Up @@ -63,6 +63,8 @@ class AbstractInspectorProxyModel : public AbstractInspectorModel

void updateModels(const ElementKeySet& newElementKeySet);

void onCurrentNotationChanged() override;

public slots:
void setDefaultSubModelType(mu::inspector::InspectorModelType modelType);

Expand All @@ -74,8 +76,6 @@ public slots:
void setModels(const QList<AbstractInspectorModel*>& models);

private:
void onCurrentNotationChanged() override;

QHash<InspectorModelType, AbstractInspectorModel*> m_modelsHash;
InspectorModelType m_defaultSubModelType = InspectorModelType::TYPE_UNDEFINED;
};
Expand Down
28 changes: 14 additions & 14 deletions src/inspector/models/general/generalsettingsmodel.cpp
Expand Up @@ -33,8 +33,12 @@ GeneralSettingsModel::GeneralSettingsModel(QObject* parent, IElementRepositorySe

setTitle(qtrc("inspector", "General"));
setSectionType(InspectorSectionType::SECTION_GENERAL);
setPlaybackProxyModel(new PlaybackProxyModel(this, repository));
setAppearanceSettingsModel(new AppearanceSettingsModel(this, repository));

m_playbackProxyModel = new PlaybackProxyModel(this, repository);
m_playbackProxyModel->init();

m_appearanceSettingsModel = new AppearanceSettingsModel(this, repository);
m_appearanceSettingsModel->init();
}

void GeneralSettingsModel::createProperties()
Expand Down Expand Up @@ -124,6 +128,14 @@ void GeneralSettingsModel::loadProperties(const mu::engraving::PropertyIdSet& pr
}
}

void GeneralSettingsModel::onCurrentNotationChanged()
{
AbstractInspectorModel::onCurrentNotationChanged();

m_appearanceSettingsModel->onCurrentNotationChanged();
m_playbackProxyModel->onCurrentNotationChanged();
}

void GeneralSettingsModel::onVisibleChanged(bool visible)
{
beginCommand();
Expand Down Expand Up @@ -167,15 +179,3 @@ QObject* GeneralSettingsModel::appearanceSettingsModel() const
{
return m_appearanceSettingsModel;
}

void GeneralSettingsModel::setPlaybackProxyModel(PlaybackProxyModel* playbackProxyModel)
{
m_playbackProxyModel = playbackProxyModel;
emit playbackProxyModelChanged(m_playbackProxyModel);
}

void GeneralSettingsModel::setAppearanceSettingsModel(AppearanceSettingsModel* appearanceSettingsModel)
{
m_appearanceSettingsModel = appearanceSettingsModel;
emit appearanceSettingsModelChanged(m_appearanceSettingsModel);
}
12 changes: 3 additions & 9 deletions src/inspector/models/general/generalsettingsmodel.h
Expand Up @@ -36,8 +36,8 @@ class GeneralSettingsModel : public AbstractInspectorModel
Q_PROPERTY(PropertyItem * isPlayable READ isPlayable CONSTANT)
Q_PROPERTY(PropertyItem * isSmall READ isSmall CONSTANT)

Q_PROPERTY(QObject * playbackProxyModel READ playbackProxyModel NOTIFY playbackProxyModelChanged)
Q_PROPERTY(QObject * appearanceSettingsModel READ appearanceSettingsModel NOTIFY appearanceSettingsModelChanged)
Q_PROPERTY(QObject * playbackProxyModel READ playbackProxyModel CONSTANT)
Q_PROPERTY(QObject * appearanceSettingsModel READ appearanceSettingsModel CONSTANT)

public:
explicit GeneralSettingsModel(QObject* parent, IElementRepositoryService* repository);
Expand All @@ -50,13 +50,7 @@ class GeneralSettingsModel : public AbstractInspectorModel
QObject* playbackProxyModel() const;
QObject* appearanceSettingsModel() const;

public slots:
void setPlaybackProxyModel(mu::inspector::PlaybackProxyModel* playbackProxyModel);
void setAppearanceSettingsModel(mu::inspector::AppearanceSettingsModel* appearanceSettingsModel);

signals:
void playbackProxyModelChanged(QObject* playbackProxyModel);
void appearanceSettingsModelChanged(QObject* appearanceSettingsModel);
void onCurrentNotationChanged() override;

private:
void createProperties() override;
Expand Down
4 changes: 4 additions & 0 deletions src/inspector/models/general/playback/playbackproxymodel.cpp
Expand Up @@ -43,5 +43,9 @@ PlaybackProxyModel::PlaybackProxyModel(QObject* parent, IElementRepositoryServic
new GradualTempoChangePlaybackModel(this, repository)
};

for (AbstractInspectorModel* model : models) {
model->init();
}

setModels(models);
}
Expand Up @@ -40,5 +40,9 @@ BarlineSettingsProxyModel::BarlineSettingsProxyModel(QObject* parent, IElementRe
new StaffSettingsModel(this, repository)
};

for (AbstractInspectorModel* model : models) {
model->init();
}

setModels(models);
}
29 changes: 15 additions & 14 deletions src/inspector/models/notation/notes/beams/beamsettingsmodel.cpp
Expand Up @@ -22,7 +22,6 @@
#include "beamsettingsmodel.h"

#include "translation.h"
#include "dataformatter.h"

using namespace mu::inspector;
using namespace mu::engraving;
Expand All @@ -32,7 +31,18 @@ BeamSettingsModel::BeamSettingsModel(QObject* parent, IElementRepositoryService*
{
setModelType(InspectorModelType::TYPE_BEAM);
setTitle(qtrc("inspector", "Beam"));
setBeamModesModel(new BeamModesModel(this, repository));

m_beamModesModel = new BeamModesModel(this, repository);
m_beamModesModel->init();

connect(m_beamModesModel->isFeatheringAvailable(), &PropertyItem::propertyModified,
this, [this](const mu::engraving::Pid, const QVariant& newValue) {
if (!newValue.toBool()) {
setFeatheringMode(BeamTypes::FeatheringMode::FEATHERING_NONE);
}
});

connect(m_beamModesModel->mode(), &PropertyItem::propertyModified, this, &AbstractInspectorModel::requestReloadPropertyItems);

createProperties();
}
Expand Down Expand Up @@ -287,18 +297,9 @@ void BeamSettingsModel::setFeatheringMode(BeamTypes::FeatheringMode featheringMo
emit featheringModeChanged(featheringMode);
}

void BeamSettingsModel::setBeamModesModel(BeamModesModel* beamModesModel)
void BeamSettingsModel::onCurrentNotationChanged()
{
m_beamModesModel = beamModesModel;

connect(m_beamModesModel->isFeatheringAvailable(), &PropertyItem::propertyModified,
this, [this](const mu::engraving::Pid, const QVariant& newValue) {
if (!newValue.toBool()) {
setFeatheringMode(BeamTypes::FeatheringMode::FEATHERING_NONE);
}
});

connect(m_beamModesModel->mode(), &PropertyItem::propertyModified, this, &AbstractInspectorModel::requestReloadPropertyItems);
AbstractInspectorModel::onCurrentNotationChanged();

emit beamModesModelChanged(m_beamModesModel);
m_beamModesModel->onCurrentNotationChanged();
}
6 changes: 3 additions & 3 deletions src/inspector/models/notation/notes/beams/beamsettingsmodel.h
Expand Up @@ -31,7 +31,7 @@ class BeamSettingsModel : public AbstractInspectorModel
{
Q_OBJECT

Q_PROPERTY(QObject * beamModesModel READ beamModesModel NOTIFY beamModesModelChanged)
Q_PROPERTY(QObject * beamModesModel READ beamModesModel CONSTANT)

Q_PROPERTY(PropertyItem * featheringHeightLeft READ featheringHeightLeft CONSTANT)
Q_PROPERTY(PropertyItem * featheringHeightRight READ featheringHeightRight CONSTANT)
Expand Down Expand Up @@ -72,12 +72,10 @@ class BeamSettingsModel : public AbstractInspectorModel
public slots:
void setIsBeamHeightLocked(bool isBeamHeightLocked);
void setFeatheringMode(BeamTypes::FeatheringMode featheringMode);
void setBeamModesModel(BeamModesModel* beamModesModel);

signals:
void isBeamHeightLockedChanged(bool isBeamHeightLocked);
void featheringModeChanged(BeamTypes::FeatheringMode featheringMode);
void beamModesModelChanged(QObject* beamModesModel);

private:
void createProperties() override;
Expand All @@ -96,6 +94,8 @@ public slots:

void updateFeatheringMode(const qreal left, const qreal right);

void onCurrentNotationChanged() override;

BeamModesModel* m_beamModesModel = nullptr;

PropertyItem* m_featheringHeightLeft = nullptr;
Expand Down
Expand Up @@ -50,6 +50,10 @@ NoteSettingsProxyModel::NoteSettingsProxyModel(QObject* parent, IElementReposito
models << inspectorModelCreator()->newInspectorModel(modelType, this, repository);
}

for (AbstractInspectorModel* model : models) {
model->init();
}

setModels(models);

connect(m_repository->getQObject(), SIGNAL(elementsUpdated(const QList<mu::engraving::EngravingItem*>&)), this,
Expand Down
21 changes: 11 additions & 10 deletions src/inspector/models/notation/rests/beams/restbeamsettingsmodel.cpp
Expand Up @@ -22,7 +22,6 @@
#include "restbeamsettingsmodel.h"

#include "translation.h"
#include "dataformatter.h"

using namespace mu::inspector;
using namespace mu::engraving;
Expand All @@ -32,24 +31,26 @@ RestBeamSettingsModel::RestBeamSettingsModel(QObject* parent, IElementRepository
{
setModelType(InspectorModelType::TYPE_BEAM);
setTitle(qtrc("inspector", "Beam"));
setBeamModesModel(new BeamModesModel(this, repository));

m_beamModesModel = new BeamModesModel(this, repository);
m_beamModesModel->init();

connect(m_beamModesModel->mode(), &PropertyItem::propertyModified, this, &AbstractInspectorModel::requestReloadPropertyItems);
}

QObject* RestBeamSettingsModel::beamModesModel() const
{
return m_beamModesModel;
}

void RestBeamSettingsModel::setBeamModesModel(BeamModesModel* beamModesModel)
void RestBeamSettingsModel::requestElements()
{
m_beamModesModel = beamModesModel;

connect(m_beamModesModel->mode(), &PropertyItem::propertyModified, this, &AbstractInspectorModel::requestReloadPropertyItems);

emit beamModesModelChanged(m_beamModesModel);
m_elementList = m_repository->findElementsByType(mu::engraving::ElementType::REST);
}

void RestBeamSettingsModel::requestElements()
void RestBeamSettingsModel::onCurrentNotationChanged()
{
m_elementList = m_repository->findElementsByType(mu::engraving::ElementType::REST);
AbstractInspectorModel::onCurrentNotationChanged();

m_beamModesModel->onCurrentNotationChanged();
}
Expand Up @@ -24,32 +24,27 @@

#include "models/abstractinspectormodel.h"
#include "models/notation/beams/beammodesmodel.h"
#include "types/beamtypes.h"

namespace mu::inspector {
class RestBeamSettingsModel : public AbstractInspectorModel
{
Q_OBJECT

Q_PROPERTY(QObject * beamModesModel READ beamModesModel NOTIFY beamModesModelChanged)
Q_PROPERTY(QObject * beamModesModel READ beamModesModel CONSTANT)

public:
explicit RestBeamSettingsModel(QObject* parent, IElementRepositoryService* repository);

QObject* beamModesModel() const;

public slots:
void setBeamModesModel(BeamModesModel* beamModesModel);

signals:
void beamModesModelChanged(QObject* beamModesModel);

private:
void createProperties() override {}
void requestElements() override;
void loadProperties() override {}
void resetProperties() override {}

void onCurrentNotationChanged() override;

BeamModesModel* m_beamModesModel = nullptr;
};
}
Expand Down
Expand Up @@ -41,6 +41,10 @@ RestSettingsProxyModel::RestSettingsProxyModel(QObject* parent, IElementReposito
models << inspectorModelCreator()->newInspectorModel(modelType, this, repository);
}

for (AbstractInspectorModel* model : models) {
model->init();
}

setModels(models);

connect(m_repository->getQObject(), SIGNAL(elementsUpdated(const QList<mu::engraving::EngravingItem*>&)), this,
Expand Down

0 comments on commit 539a421

Please sign in to comment.