diff --git a/src/libs/core/score/taddobject.cpp b/src/libs/core/score/taddobject.cpp index 0c07d99a77dc5c6051b79dc1390bb84d4289dd84..d9bb00d66cc531ffdd43a01bfa4a1202211faea2 100644 --- a/src/libs/core/score/taddobject.cpp +++ b/src/libs/core/score/taddobject.cpp @@ -105,11 +105,11 @@ void TaddObject::mouseReleaseEvent(QMouseEvent*) { setKeepMouseGrab(false); if (m_active) { if (m_hovered) { // mouse - emit addNote(); + addNote(); } else { // touch if (m_touchElapsed.elapsed() < 190) { if (m_yPos > 0.0) - emit addNote(); + addNote(); } m_hideTimer->stop(); m_hideTimer->start(2500); @@ -129,3 +129,10 @@ void TaddObject::mouseMoveEvent(QMouseEvent* event) { emit yPosChanged(); } } + + +void TaddObject::addNote() { + m_scoreObject->addNote(m_scoreObject->posToNote(m_yPos)); + if (m_scoreObject->recordMode()) + m_scoreObject->setSelectedItem(nullptr); +} diff --git a/src/libs/core/score/taddobject.h b/src/libs/core/score/taddobject.h index 575c6e7a9a96298ff1f3877483e7ed38a9628cd3..136cdf177d3561006ef124a686168c40e63756e7 100644 --- a/src/libs/core/score/taddobject.h +++ b/src/libs/core/score/taddobject.h @@ -56,7 +56,6 @@ public: signals: void activeChanged(); void yPosChanged(); - void addNote(); protected: void hoverEnterEvent(QHoverEvent* event) override; @@ -67,6 +66,8 @@ protected: void mouseReleaseEvent(QMouseEvent*) override; void mouseMoveEvent(QMouseEvent* event) override; + void addNote(); + private: TscoreObject *m_scoreObject = nullptr; bool m_active = false; diff --git a/src/libs/core/score/tscoreobject.cpp b/src/libs/core/score/tscoreobject.cpp index bc764be371ace1c39252cb6f9cce28694cf31ee7..181587f4d033f7337353da586da637e2cd864a55 100644 --- a/src/libs/core/score/tscoreobject.cpp +++ b/src/libs/core/score/tscoreobject.cpp @@ -75,6 +75,7 @@ TscoreObject::TscoreObject(QObject* parent) : m_leaveTimer = new QTimer(this); m_leaveTimer->setSingleShot(true); connect(m_leaveTimer, &QTimer::timeout, this, &TscoreObject::leaveTimeElapsed); + m_bgColor = qApp->palette().base().color(); } diff --git a/src/qml/MainScore.qml b/src/qml/MainScore.qml index f7cbcc093b10d71123c8aac01fb8d2cccf4dcce6..6bd8dcab88f98e3549b7827d1f4dc058a32bb7d6 100644 --- a/src/qml/MainScore.qml +++ b/src/qml/MainScore.qml @@ -47,7 +47,6 @@ Score { TmainScoreObject { id: mainObj - scoreObject: scoreObj deleteLastAct.shortcut: Shortcut { sequence: "Del"; onActivated: deleteLastAct.triggered(); enabled: !GLOB.singleNoteMode && !readOnly } clearScoreAct.shortcut: Shortcut { sequence: "Shift+Del"; onActivated: clearScoreAct.triggered(); enabled: !GLOB.singleNoteMode && !readOnly } openXmlAct.shortcut: Shortcut { sequence: StandardKey.Open; onActivated: openXmlAct.triggered(); enabled: !GLOB.singleNoteMode && !GLOB.isExam } @@ -97,6 +96,7 @@ Score { Connections { target: SOUND onInitialized: { + mainObj.scoreObject = scoreObj singleNote = Qt.binding(function() { return GLOB.singleNoteMode }) scoreObj.allowAdding = Qt.binding(function() { return !GLOB.singleNoteMode }) enableKeySign = Qt.binding(function() { return GLOB.keySignatureEnabled }) diff --git a/src/qml/level/MelodyPage.qml b/src/qml/level/MelodyPage.qml index 15c51f44de1e6f4ca03c732899fcae1ac0fa7c27..384cbc81de5080788f7667eb170c579f6f113e23 100644 --- a/src/qml/level/MelodyPage.qml +++ b/src/qml/level/MelodyPage.qml @@ -91,6 +91,7 @@ Tflickable { width: parent.width; height: melPage.height - topTile.height - melGrid.height meter: Tmeter.NoMeter enableKeySign: creator.useKeySign + scoreObj.allowAdding: visible Connections { target: creator onUpdateNotesList: updateNotesList() @@ -106,7 +107,7 @@ Tflickable { function updateNotesList() { listScore.clearScore() listScore.clef = creator.clef - listScore.setKeySignature(creator.keyOfRandList) + listScore.keySignature = creator.keyOfRandList for (var i = 0; i < creator.notesInList(); ++i) listScore.addNote(creator.noteFromList(i)) } diff --git a/src/qml/score/NoteAdd.qml b/src/qml/score/NoteAdd.qml index 4234108ecab651cbcf2aca195550c588e64b353d..480ce12f9cc1ab6cf55202a55b2246a780b95925 100644 --- a/src/qml/score/NoteAdd.qml +++ b/src/qml/score/NoteAdd.qml @@ -12,9 +12,7 @@ import Score 1.0 TaddObject { id: noteAdd - property TnoteItem lastNote: null - property alias noteText: note.text - property alias alterText: cursor.alterText + property TnoteItem lastNote: scoreObj.lastNote readonly property real alterWidth: 0 // dummy, NoteCursor looks for it @@ -34,6 +32,7 @@ TaddObject { color: Noo.alpha(activPal.highlight, 200) x: (4 - width) / 2 y: 15 + text: Noo.rhythmText(scoreObj.workRhythm) } NoteCursor { id: cursor; yPos: noteAdd.yPos; headText: scoreObj.workRtmText } diff --git a/src/qml/score/NoteCursor.qml b/src/qml/score/NoteCursor.qml index 4fbc6332461a822b87c4cfb7957fcab7ea61974e..39b21e560e28ef651b079ca50fff26500cd108da 100644 --- a/src/qml/score/NoteCursor.qml +++ b/src/qml/score/NoteCursor.qml @@ -13,10 +13,10 @@ Item { height: parent ? parent.height : 0 width: parent ? parent.width - (score.singleNote ? 0 : parent.alterWidth) : 0 - property alias headText: head.text + property string headText: parent ? scoreObj.activeRtmText() : "" property color color: GLOB.noteCursorColor - property real yPos: 0 - property alias alterText: alter.text + property real yPos: scoreObj.activeYpos +// property alias alterText: alter.text visible: yPos > 0 @@ -32,7 +32,7 @@ Item { id: head scale: 1.2 font { family: "Scorek"; pixelSize: 7 } - text: "\uf4be" + text: headText //"\uf4be" y: yPos - 15 color: noteCursor.color x: score.singleNote ? 1.5 : 0 @@ -42,6 +42,7 @@ Item { font { family: "Scorek"; pixelSize: 7 } color: noteCursor.color x: -width - 0.1 + text: score.alterText Text { font { family: "Scorek"; pixelSize: 7 } color: activPal.shadow diff --git a/src/qml/score/Score.qml b/src/qml/score/Score.qml index d28696baeecd3b0c733a0a75b49a0e8f046fe2ae..8ce34e3074a7318736c75b926534c5817512b1ae 100644 --- a/src/qml/score/Score.qml +++ b/src/qml/score/Score.qml @@ -30,10 +30,13 @@ Flickable { property alias singleNote: scoreObj.singleNote property alias recordMode: scoreObj.recordMode property alias bgRect: bgRect + property alias alterText: accidControl.text // private property var staves: [ staff0 ] - property alias noteAdd: addLoad.item + property var noteAdd: null + property var delControl: null + property var cursor: null clip: true boundsBehavior: Flickable.StopAtBounds @@ -75,6 +78,26 @@ Flickable { accidControl.show = false rtmControl.show = false } + onAllowAddingChanged: { + if (allowAdding) { + if (!delControl) { + var c = Qt.createComponent("qrc:/DelControl.qml") + delControl = c.createObject(contentItem) + delControl.active = Qt.binding(function() { return !readOnly && scoreObj.activeNote !== null && scoreObj.activeNote === scoreObj.lastNote }) + } + if (!noteAdd) { + var c = Qt.createComponent("qrc:/NoteAdd.qml") + noteAdd = c.createObject(contentItem) + } + } + } + onActiveNoteChanged: { + if (!cursor) { + var c = Qt.createComponent("qrc:/NoteCursor.qml") + cursor = c.createObject(contentItem) + cursor.parent = Qt.binding(function() { return scoreObj.activeNote }) + } + } } onCurrentNoteChanged: { @@ -96,14 +119,6 @@ Flickable { meter: Meter { parent: staff0 } } - NoteCursor { - id: cursor - parent: scoreObj.activeNote - yPos: scoreObj.activeYpos - alterText: accidControl.text - headText: parent ? scoreObj.activeRtmText() : "" - } - AccidControl { id: accidControl active: !readOnly && score.clef !== Tclef.NoClef && (scoreObj.activeNote !== null || (noteAdd && noteAdd.active)) @@ -117,23 +132,6 @@ Flickable { visible: !scoreObj.touched } - Loader { sourceComponent: scoreObj.allowAdding ? delControl : null } - Component { - id: delControl - DelControl { active: !readOnly && scoreObj.activeNote !== null && scoreObj.activeNote === scoreObj.lastNote } - } - - Loader { id: addLoad; sourceComponent: scoreObj.allowAdding ? addComp : null } - Component { - id: addComp - NoteAdd { - noteText: Noo.rhythmText(scoreObj.workRhythm) - onAddNote: { score.addNote(scoreObj.posToNote(yPos)); if (recordMode) currentNote = null } - alterText: accidControl.text - lastNote: scoreObj.lastNote - } - } - function ensureVisible(yy, hh) { if (contentY >= yy) contentY = yy