Newer
Older
/** This file is part of Nootka (http://nootka.sf.net) *
* Copyright (C) 2017 by Tomasz Bojczuk (seelook@gmail.com) *
* on the terms of GNU GPLv3 license (http://www.gnu.org/licenses) */
import Score 1.0
import Nootka 1.0
Score {
id: mainScore
width: parent.width
property alias showNamesAct: showNamesAct
property alias extraAccidsAct: extraAccidsAct
property alias zoomInAct: zoomInAct
property alias zoomOutAct: zoomOutAct
property alias openXmlAct: openXmlAct
property alias saveXmlAct: saveXmlAct
property alias deleteLastAct: deleteLastAct
property alias clearScoreAct: clearScoreAct
property alias recModeAct: recModeAct
property alias playAct: playAct
scoreObj.meter: GLOB.rhythmsEnabled ? Tmeter.Meter_4_4 : Tmeter.NoMeter
focus: true
onFocusChanged: {
if (!focus) // FIXME: space key is stolen if any dialog/popup is invoked, this workaround avoids that but side effects are unknown yet
focus = true
}
clef: GLOB.clefType
scoreObj.clefType: GLOB.clefType
enableDoubleAccids: GLOB.enableDoubleAccids
enableKeySign: GLOB.keySignatureEnabled
scoreObj.showNoteNames: GLOB.namesOnScore
SeeLook
committed
scoreObj.nameColor: GLOB.nameColor
scoreObj.nameStyle: GLOB.noteNameStyle
scoreObj.enableDoubleAccidentals: GLOB.enableDoubleAccids
scoreObj.allowAdding: true
Timer { id: zoomTimer; interval: 500 }
MouseArea {
anchors.fill: parent
onWheel: {
if (wheel.modifiers & Qt.ControlModifier) {
if (wheel.angleDelta.y > 0) {
if (!zoomTimer.running) {
zoomInAct.trigger()
zoomTimer.running = true
}
} else if (wheel.angleDelta.y < 0) {
if (!zoomTimer.running) {
zoomOutAct.trigger()
zoomTimer.running = true
}
}
}
}
}
Text {
id: keyName
parent: firstStaff
visible: GLOB.showKeyName && enableKeySign
x: clef === Tclef.PianoStaffClefs ? 6.5 : 4.5
y: clef === Tclef.PianoStaffClefs ? 2.5 : 5
color: activPal.text
SeeLook
committed
text: getKeyNameText()
Connections {
target: GLOB
onKeyNameChanged: keyName.text = Qt.binding(keyName.getKeyNameText)
}
function getKeyNameText() {
return enableKeySign && firstStaff.keySignature ? Noo.majAndMinKeyName(firstStaff.keySignature.key) : ""
}
}
Rectangle { // note highlight
id: noteHighlight
parent: currentNote
visible: currentNote != null
width: currentNote ? (currentNote.width - currentNote.alterWidth) * 1.5 : 0
height: currentNote ? Math.min(12.0, currentNote.notePosY + 6.0) : 0
x: currentNote ? -width * 0.25 : 0
y: currentNote ? Math.min(currentNote.height - height, Math.max(0.0, currentNote.notePosY - height / 2.0)) : 0
color: Qt.rgba(activPal.highlight.r, activPal.highlight.g, activPal.highlight.b, 0.3)
z: -1
radius: width / 3.0
}
// NoteName {
// width: mainScore.width / 4
// height: mainScore.scale * 32
// y: mainScore.scale * 0.4
// x: mainScore.width * 0.7
// }
SeeLook
committed
text: Noo.TR("QShortcut", "Play")
SeeLook
committed
onTriggered: SOUND.playScore()
// shortcut: Shortcut { sequence: "Space"; onActivated: recModeAct.triggered() }
}
Taction {
id: recModeAct
text: recordMode ? qsTr("Note by note") : qsTr("Edit")
icon: recordMode ? "record" : "stopMelody"
onTriggered: recordMode = !recordMode
// shortcut: Shortcut { sequence: "Ctrl+Space"; onActivated: recModeAct.triggered() }
}
Taction {
id: openXmlAct
SeeLook
committed
text: Noo.TR("QShortcut", "Open")
onTriggered: {
SOUND.stopListen()
var xmlFle = Noo.getXmlToOpen()
scoreObj.openMusicXml(xmlFle)
SOUND.startListen()
}
shortcut: Shortcut { sequence: StandardKey.Open; onActivated: openXmlAct.triggered() }
}
Taction {
id: saveXmlAct
SeeLook
committed
text: Noo.TR("QShortcut", "Save")
onTriggered: {
var xmlFle = Noo.getXmlToSave()
scoreObj.saveMusicXml(xmlFle)
}
shortcut: Shortcut { sequence: StandardKey.Save; onActivated: saveXmlAct.triggered() }
}
Taction {
id: extraAccidsAct
text: qsTr("Additional accidentals")
checkable: true
Taction {
id: showNamesAct
text: qsTr("Show note names")
checkable: true
checked: GLOB.namesOnScore
onTriggered: { scoreObj.showNoteNames = checked }
}
Taction {
id: zoomOutAct
icon: "zoom-out"
text: qsTr("Zoom score out")
onTriggered: scaleFactor = Math.max(0.4, scaleFactor - 0.2)
shortcut: Shortcut { sequence: StandardKey.ZoomOut; onActivated: zoomOutAct.triggered() }
}
Taction {
id: zoomInAct
icon: "zoom-in"
text: qsTr("Zoom score in")
onTriggered: scaleFactor = scaleFactor = Math.min(scaleFactor + 0.2, 1.4)
shortcut: Shortcut { sequence: StandardKey.ZoomIn; onActivated: zoomInAct.triggered() }
}
Taction {
id: deleteLastAct
icon: "delete"
text: qsTr("Delete note")
onTriggered: scoreObj.deleteLastNote()
shortcut: Shortcut { sequence: "Del"; onActivated: deleteLastAct.triggered() }
}
Taction {
id: clearScoreAct
icon: "clear-score"
text: qsTr("Delete all notes")
onTriggered: clearScore()
shortcut: Shortcut { sequence: "Shift+Del"; onActivated: clearScoreAct.triggered() }
}
Shortcut {
sequence: StandardKey.MoveToNextChar;
onActivated: {
if (currentNote)
currentNote = scoreObj.getNext(currentNote)
else
currentNote = scoreObj.note(0)
}
}
Shortcut {
sequence: StandardKey.MoveToPreviousChar;
onActivated: {
if (currentNote)
currentNote = scoreObj.getPrev(currentNote)
else
currentNote = scoreObj.note(notesCount - 1)
}
}
Keys.onSpacePressed: {
if (event.modifiers & Qt.ControlModifier)
recModeAct.triggered()
else
playAct.triggered()
}