Implemented the general component for inspector's properties
This commit is contained in:
parent
bb98d81b40
commit
397ce12f94
5 changed files with 131 additions and 7 deletions
|
@ -152,5 +152,6 @@
|
||||||
<file>view/qml/notation/bends/BendPopup.qml</file>
|
<file>view/qml/notation/bends/BendPopup.qml</file>
|
||||||
<file>view/qml/notation/tremolobars/TremoloBarSettings.qml</file>
|
<file>view/qml/notation/tremolobars/TremoloBarSettings.qml</file>
|
||||||
<file>view/qml/notation/tremolobars/TremoloBarPopup.qml</file>
|
<file>view/qml/notation/tremolobars/TremoloBarPopup.qml</file>
|
||||||
|
<file>view/qml/common/InspectorPropertyView.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -370,10 +370,7 @@ QVariant AbstractInspectorModel::valueFromElementUnits(const Ms::Pid& pid, const
|
||||||
PropertyItem* AbstractInspectorModel::buildPropertyItem(const Ms::Pid& propertyId, std::function<void(const int propertyId,
|
PropertyItem* AbstractInspectorModel::buildPropertyItem(const Ms::Pid& propertyId, std::function<void(const int propertyId,
|
||||||
const QVariant& newValue)> onPropertyChangedCallBack)
|
const QVariant& newValue)> onPropertyChangedCallBack)
|
||||||
{
|
{
|
||||||
Ms::Sid styleId = styleIdByPropertyId(propertyId);
|
PropertyItem* newPropertyItem = new PropertyItem(static_cast<int>(propertyId), this);
|
||||||
|
|
||||||
PropertyItem* newPropertyItem = new PropertyItem(static_cast<int>(propertyId), static_cast<int>(styleId), this);
|
|
||||||
newPropertyItem->setIsStyled(styleId != Ms::Sid::NOSTYLE);
|
|
||||||
|
|
||||||
auto callback = onPropertyChangedCallBack;
|
auto callback = onPropertyChangedCallBack;
|
||||||
|
|
||||||
|
@ -386,6 +383,8 @@ PropertyItem* AbstractInspectorModel::buildPropertyItem(const Ms::Pid& propertyI
|
||||||
connect(newPropertyItem, &PropertyItem::propertyModified, this, callback);
|
connect(newPropertyItem, &PropertyItem::propertyModified, this, callback);
|
||||||
connect(newPropertyItem, &PropertyItem::applyToStyleRequested, this, [this] (const int sid, const QVariant& newStyleValue) {
|
connect(newPropertyItem, &PropertyItem::applyToStyleRequested, this, [this] (const int sid, const QVariant& newStyleValue) {
|
||||||
updateStyleValue(static_cast<Ms::Sid>(sid), newStyleValue);
|
updateStyleValue(static_cast<Ms::Sid>(sid), newStyleValue);
|
||||||
|
|
||||||
|
emit requestReloadPropertyItems();
|
||||||
});
|
});
|
||||||
|
|
||||||
return newPropertyItem;
|
return newPropertyItem;
|
||||||
|
@ -400,6 +399,10 @@ void AbstractInspectorModel::loadPropertyItem(PropertyItem* propertyItem, std::f
|
||||||
|
|
||||||
Ms::Pid pid = static_cast<Ms::Pid>(propertyItem->propertyId());
|
Ms::Pid pid = static_cast<Ms::Pid>(propertyItem->propertyId());
|
||||||
|
|
||||||
|
Ms::Sid styleId = styleIdByPropertyId(pid);
|
||||||
|
propertyItem->setStyleId(static_cast<int>(styleId));
|
||||||
|
propertyItem->setIsStyled(styleId != Ms::Sid::NOSTYLE);
|
||||||
|
|
||||||
QVariant propertyValue;
|
QVariant propertyValue;
|
||||||
QVariant defaultPropertyValue;
|
QVariant defaultPropertyValue;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "propertyitem.h"
|
#include "propertyitem.h"
|
||||||
|
|
||||||
PropertyItem::PropertyItem(const int propertyId, const int styleId, QObject* parent) : QObject(parent)
|
PropertyItem::PropertyItem(const int propertyId, QObject* parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
m_propertyId = propertyId;
|
m_propertyId = propertyId;
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,8 @@ void PropertyItem::fillValues(const QVariant& currentValue, const QVariant& defa
|
||||||
updateCurrentValue(currentValue);
|
updateCurrentValue(currentValue);
|
||||||
|
|
||||||
setDefaultValue(defaultValue);
|
setDefaultValue(defaultValue);
|
||||||
|
|
||||||
|
emit isModifiedChanged(isModified());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyItem::updateCurrentValue(const QVariant& currentValue)
|
void PropertyItem::updateCurrentValue(const QVariant& currentValue)
|
||||||
|
@ -17,7 +19,6 @@ void PropertyItem::updateCurrentValue(const QVariant& currentValue)
|
||||||
m_currentValue = currentValue;
|
m_currentValue = currentValue;
|
||||||
|
|
||||||
emit isUndefinedChanged(isUndefined());
|
emit isUndefinedChanged(isUndefined());
|
||||||
emit isModifiedChanged(isModified());
|
|
||||||
emit valueChanged(m_currentValue);
|
emit valueChanged(m_currentValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +67,11 @@ bool PropertyItem::isModified() const
|
||||||
return m_currentValue != m_defaultValue;
|
return m_currentValue != m_defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PropertyItem::setStyleId(const int styleId)
|
||||||
|
{
|
||||||
|
m_styleId = styleId;
|
||||||
|
}
|
||||||
|
|
||||||
void PropertyItem::setValue(const QVariant& value)
|
void PropertyItem::setValue(const QVariant& value)
|
||||||
{
|
{
|
||||||
if (m_currentValue == value)
|
if (m_currentValue == value)
|
||||||
|
@ -74,6 +80,7 @@ void PropertyItem::setValue(const QVariant& value)
|
||||||
updateCurrentValue(value);
|
updateCurrentValue(value);
|
||||||
|
|
||||||
emit propertyModified(m_propertyId, m_currentValue);
|
emit propertyModified(m_propertyId, m_currentValue);
|
||||||
|
emit isModifiedChanged(isModified());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyItem::setDefaultValue(const QVariant& defaultValue)
|
void PropertyItem::setDefaultValue(const QVariant& defaultValue)
|
||||||
|
|
|
@ -16,7 +16,7 @@ class PropertyItem : public QObject
|
||||||
Q_PROPERTY(bool isModified READ isModified NOTIFY isModifiedChanged)
|
Q_PROPERTY(bool isModified READ isModified NOTIFY isModifiedChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit PropertyItem(const int propertyId, const int styleId, QObject* parent = nullptr);
|
explicit PropertyItem(const int propertyId, QObject* parent = nullptr);
|
||||||
|
|
||||||
void fillValues(const QVariant& currentValue, const QVariant& defaultValue);
|
void fillValues(const QVariant& currentValue, const QVariant& defaultValue);
|
||||||
void updateCurrentValue(const QVariant& currentValue);
|
void updateCurrentValue(const QVariant& currentValue);
|
||||||
|
@ -32,6 +32,8 @@ public:
|
||||||
bool isStyled() const;
|
bool isStyled() const;
|
||||||
bool isModified() const;
|
bool isModified() const;
|
||||||
|
|
||||||
|
void setStyleId(const int styleId);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setValue(const QVariant& value);
|
void setValue(const QVariant& value);
|
||||||
void setDefaultValue(const QVariant& defaultValue);
|
void setDefaultValue(const QVariant& defaultValue);
|
||||||
|
|
111
inspectors/view/qml/common/InspectorPropertyView.qml
Normal file
111
inspectors/view/qml/common/InspectorPropertyView.qml
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Layouts 1.3
|
||||||
|
import QtQuick.Controls 1.4
|
||||||
|
import QtQuick.Controls 2.2
|
||||||
|
import MuseScore.UiComponents 1.0
|
||||||
|
import MuseScore.Ui 1.0
|
||||||
|
|
||||||
|
Column {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property QtObject propertyItem: null
|
||||||
|
|
||||||
|
property alias titleText: titleLabel.text
|
||||||
|
property bool isStyled: propertyItem ? propertyItem.isStyled : false
|
||||||
|
property bool isModified: propertyItem ? propertyItem.isModified : false
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
spacing: 8
|
||||||
|
|
||||||
|
Item {
|
||||||
|
height: contentRow.implicitHeight
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
id: contentRow
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
spacing: 4
|
||||||
|
|
||||||
|
StyledTextLabel {
|
||||||
|
id: titleLabel
|
||||||
|
|
||||||
|
Layout.alignment: Qt.AlignLeft
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.maximumWidth: parent.width/2
|
||||||
|
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
}
|
||||||
|
|
||||||
|
ContextMenu {
|
||||||
|
id: menu
|
||||||
|
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.maximumWidth: 24
|
||||||
|
Layout.preferredHeight: 24
|
||||||
|
Layout.preferredWidth: 24
|
||||||
|
|
||||||
|
Action {
|
||||||
|
id: resetToDefaultAction
|
||||||
|
|
||||||
|
checkable: false
|
||||||
|
enabled: root.isModified
|
||||||
|
|
||||||
|
onTriggered: {
|
||||||
|
menu.forceClose()
|
||||||
|
|
||||||
|
if (propertyItem) {
|
||||||
|
propertyItem.resetToDefault()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Action {
|
||||||
|
id: applyToStyleAction
|
||||||
|
|
||||||
|
checkable: true
|
||||||
|
checked: !root.isModified
|
||||||
|
enabled: root.isModified
|
||||||
|
|
||||||
|
onTriggered: {
|
||||||
|
menu.forceClose()
|
||||||
|
|
||||||
|
if (propertyItem) {
|
||||||
|
propertyItem.applyToStyle()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateMenuModel() {
|
||||||
|
menu.clearMenuItems()
|
||||||
|
|
||||||
|
if (root.isStyled) {
|
||||||
|
menu.addMenuItem(qsTr("Reset to style default"), resetToDefaultAction)
|
||||||
|
menu.addMenuItem(qsTr("Set as style"), applyToStyleAction)
|
||||||
|
} else {
|
||||||
|
menu.addMenuItem( qsTr("Reset to default"), resetToDefaultAction)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: contentRow
|
||||||
|
hoverEnabled: true
|
||||||
|
propagateComposedEvents: true
|
||||||
|
|
||||||
|
onContainsMouseChanged: {
|
||||||
|
menu.hovered = containsMouse
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onPropertyItemChanged: {
|
||||||
|
if (propertyItem) {
|
||||||
|
menu.updateMenuModel()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue