diff --git a/src/qml/score/Score.qml b/src/qml/score/Score.qml index a22939d43b2cfec5d8a13aa44522df10f128dd05..ca93a8e946a57f5d94042d3ea009982d34d1f3a1 100644 --- a/src/qml/score/Score.qml +++ b/src/qml/score/Score.qml @@ -79,46 +79,45 @@ Flickable { TscoreObject { id: scoreObj - width: score.width / scale + width: score.width / score.scale enableDoubleAccidentals: score.enableDoubleAccids - onClicked: currentNote = scoreObj.activeNote + onClicked: score.currentNote = scoreObj.activeNote onStaffCreate: { - staves.push(Qt.createComponent("qrc:/score/Staff.qml").createObject(score.contentItem)); - score.lastStaff = staves[staves.length - 1]; + score.staves.push(Qt.createComponent("qrc:/score/Staff.qml").createObject(score.contentItem, { score: score })); + score.lastStaff = score.staves[score.staves.length - 1]; } onStavesHeightChanged: score.contentHeight = Math.max(stavesHeight, score.height) onStaffDestroying: staffNr => { - staves.splice(staffNr, 1); - lastStaff = staves[staves.length - 1]; + score.staves.splice(staffNr, 1); + lastStaff = score.staves[score.staves.length - 1]; } onNoteWasAdded: { - if (staves.length > 1) + if (score.staves.length > 1) ensureVisible(lastNote.staffItem.y, lastNote.staffItem.height * scale); } onAllowAddingChanged: { if (allowAdding) { - if (!delControl) - delControl = Qt.createComponent("qrc:/score/DelControl.qml").createObject(contentItem); - if (!noteAdd) - noteAdd = Qt.createComponent("qrc:/score/NoteAdd.qml").createObject(contentItem); - if (!scoreToobox) - scoreToobox = Qt.createComponent("qrc:/score/ScoreToolbox.qml").createObject(score); - + if (!score.delControl) + score.delControl = Qt.createComponent("qrc:/score/DelControl.qml").createObject(score.contentItem); + if (!score.noteAdd) + score.noteAdd = Qt.createComponent("qrc:/score/NoteAdd.qml").createObject(score.contentItem); + if (!score.scoreToobox) + score.scoreToobox = Qt.createComponent("qrc:/score/ScoreToolbox.qml").createObject(score); } } onActiveNoteChanged: { - if (!cursor) { - cursor = Qt.createComponent("qrc:/score/ScoreCursor.qml").createObject(contentItem); - cursor.parent = Qt.binding(function() { + if (!score.cursor) { + score.cursor = Qt.createComponent("qrc:/score/ScoreCursor.qml").createObject(score.contentItem); + score.cursor.parent = Qt.binding(function() { return scoreObj.activeNote; }); } - if (!scoreToobox && !readOnly) - scoreToobox = Qt.createComponent("qrc:/score/ScoreToolbox.qml").createObject(score); + if (!score.scoreToobox && !score.readOnly) + score.scoreToobox = Qt.createComponent("qrc:/score/ScoreToolbox.qml").createObject(score); } - onScoreWasCleared: ensureVisible(0, 0) + onScoreWasCleared: score.ensureVisible(0, 0) } // entire score background @@ -136,6 +135,7 @@ Flickable { Staff { id: staff0 + score: score meter: Meter { parent: staff0 } @@ -165,7 +165,6 @@ Flickable { } } - } ScrollBar.vertical: ScrollBar { diff --git a/src/qml/score/Staff.qml b/src/qml/score/Staff.qml index a42cd2ff7131927f3f599d2c6123dde1f7220ee6..c31c3ab8562b2190b420264df23e8f718a90f5a0 100644 --- a/src/qml/score/Staff.qml +++ b/src/qml/score/Staff.qml @@ -2,6 +2,8 @@ * Copyright (C) 2017-2021 by Tomasz Bojczuk (seelook@gmail.com) * * on the terms of GNU GPLv3 license (http://www.gnu.org/licenses) */ +pragma ComponentBehavior: Bound + import Nootka 1.0 import Nootka.Music import QtQuick 2.12 @@ -11,6 +13,7 @@ import Score 1.0 TstaffItem { id: staff + required property var score property alias clef: clef property real linesCount: score.clef === Tclef.PianoStaffClefs ? 49 : 38 property var keySignItem: null @@ -37,7 +40,7 @@ TstaffItem { Math.max(Screen.height / 4, Screen.pixelDensity * (NOO.isAndroid() ? 50 : 70))) / linesCount) * score.scaleFactor width: score.width / scale transformOrigin: Item.TopLeft - scoreObject: scoreObj + scoreObject: score.scoreObj notesIndent: firstNoteX upperLine: score.clef === Tclef.PianoStaffClefs ? 14 : 16 Component.onCompleted: checkIsKeyEnabled() @@ -45,30 +48,30 @@ TstaffItem { TstaffLines { id: upperStaff - x: score.clef === Tclef.PianoStaffClefs ? 3 : 0.5 - width: staff.width - (score.clef === Tclef.PianoStaffClefs ? 3.5 : 1) - y: upperLine - 0.1 + x: staff.score.clef === Tclef.PianoStaffClefs ? 3 : 0.5 + width: staff.width - (staff.score.clef === Tclef.PianoStaffClefs ? 3.5 : 1) + y: staff.upperLine - 0.1 staffScale: staff.scale } Loader { - sourceComponent: score.clef === Tclef.PianoStaffClefs ? lowerStaff : null + sourceComponent: staff.score.clef === Tclef.PianoStaffClefs ? lowerStaff : null } Component { id: lowerStaff TstaffLines { - x: score.clef === Tclef.PianoStaffClefs ? 3 : 0.5 - width: staff.width - (score.clef === Tclef.PianoStaffClefs ? 3.5 : 1) - y: upperLine - 0.1 + 22 + x: staff.score.clef === Tclef.PianoStaffClefs ? 3 : 0.5 + width: staff.width - (staff.score.clef === Tclef.PianoStaffClefs ? 3.5 : 1) + y: staff.upperLine - 0.1 + 22 staffScale: staff.scale } } Loader { - sourceComponent: score.clef === Tclef.PianoStaffClefs ? brace : null + sourceComponent: staff.score.clef === Tclef.PianoStaffClefs ? brace : null } Component { @@ -92,22 +95,25 @@ TstaffItem { } Connections { - target: score - function onEnableKeySignChanged() : void { checkIsKeyEnabled() } + target: staff.score + function onEnableKeySignChanged() : void { staff.checkIsKeyEnabled(); } } // measure number Text { - x: score.clef === Tclef.PianoStaffClefs ? 0.8 : 0.5 - y: upperLine - (score.clef === Tclef.Treble_G || score.clef === Tclef.Treble_G_8down || score.clef === Tclef.Tenor_C || score.clef === Tclef.PianoStaffClefs ? 8 : 5) - text: firstMeasureNr + 1 - visible: number > 0 && firstMeasureNr > 0 + x: staff.score.clef === Tclef.PianoStaffClefs ? 0.8 : 0.5 + y: staff.upperLine + - (staff.score.clef === Tclef.Treble_G || score.clef === Tclef.Treble_G_8down + || score.clef === Tclef.Tenor_C || score.clef === Tclef.PianoStaffClefs + ? 8 : 5) + text: staff.firstMeasureNr + 1 + visible: staff.number > 0 && staff.firstMeasureNr > 0 scale: 0.4 transformOrigin: Item.TopLeft color: activPal.text font { - pixelSize: score.clef === Tclef.PianoStaffClefs ? 7 : 5 + pixelSize: staff.score.clef === Tclef.PianoStaffClefs ? 7 : 5 family: "Scorek" }