Skip to content
Snippets Groups Projects
MainScore.qml 4.91 KiB
Newer Older
  • Learn to ignore specific revisions
  • /** This file is part of Nootka (http://nootka.sf.net)               *
    
     * Copyright (C) 2017-2020 by Tomasz Bojczuk (seelook@gmail.com)     *
    
     * on the terms of GNU GPLv3 license (http://www.gnu.org/licenses)   */
    
    SeeLook's avatar
    SeeLook committed
    import QtQuick 2.9
    import QtQuick.Controls 2.2
    
      property alias showNamesAct: mainObj.showNamesAct
      property alias extraAccidsAct: mainObj.extraAccidsAct
      property alias zoomInAct: mainObj.zoomInAct
      property alias zoomOutAct: mainObj.zoomOutAct
      property alias openXmlAct: mainObj.openXmlAct
      property alias saveXmlAct: mainObj.saveXmlAct
      property alias recModeAct: mainObj.recModeAct
      property alias playAct: mainObj.playAct
      property alias scoreActions: mainObj.scoreActions
    
      property alias melodyActions: mainObj.melodyActions
    
      property alias noteActions: mainObj.noteActions
    
      property alias notesMenuAct: mainObj.notesMenuAct
    
      property alias randMelodyAct: mainObj.randMelodyAct
    
      scoreObj.meter: GLOB.rhythmsEnabled && !GLOB.singleNoteMode ? Tmeter.Meter_4_4 : Tmeter.NoMeter
    
      enableDoubleAccids: GLOB.enableDoubleAccids
    
      scoreObj.showNoteNames: GLOB.namesOnScore
    
      scoreObj.nameColor: GLOB.nameColor
      scoreObj.nameStyle: GLOB.noteNameStyle
    
      scoreObj.enableDoubleAccidentals: GLOB.enableDoubleAccids
    
      scoreObj.enharmNotesEnabled: GLOB.showEnharmNotes
    
      scoreObj.enableTechnical: GLOB.instrument.type === Tinstrument.Bandoneon
    
        onMelodyGenerate: nootkaWindow.showDialog(Nootka.MelodyGenerator)
    
        onMelodyNameDialog: {
          var m = Qt.createComponent("qrc:/score/MelodyNameDialog.qml")
          m.createObject(nootkaWindow)
        }
    
      Timer { id: zoomTimer; interval: 500 }
    
    SeeLook's avatar
    SeeLook committed
      PinchArea {
    
        anchors.fill: parent
    
    SeeLook's avatar
    SeeLook committed
        pinch.dragAxis: Pinch.XandYAxis
        onPinchFinished: {
          if (pinch.scale > 1.2)
            zoom(true)
          else if (pinch.scale < 0.8)
            zoom(false)
        }
        // HACK: keeping MouseArea inside PinchArea makes it working
        MouseArea {
          anchors.fill: parent
          z: -1
          onWheel: {
            if (wheel.modifiers & Qt.ControlModifier) {
                if (wheel.angleDelta.y > 0)
                  zoom(true)
                else if (wheel.angleDelta.y < 0)
                  zoom(false)
            } else
                wheel.accepted = false
          }
        }
      }
      function zoom(zoomIn) {
        if (!zoomTimer.running) {
          if (zoomIn)
            zoomInAct.trigger()
          else
            zoomOutAct.trigger()
          zoomTimer.running = true
    
      Text {
        id: keyName
        parent: firstStaff
        visible: GLOB.showKeyName && enableKeySign
    
        x: clef === Tclef.PianoStaffClefs ? 7.5 : 5.5
    
        y: clef === Tclef.PianoStaffClefs ? 4.2 : 7
    
        font { pixelSize: 12 }
        transformOrigin: Item.TopLeft; scale: 1.0 / 6.0
    
        text: GLOB.showKeyName && enableKeySign ? mainObj.keyNameText : ""
    
      Connections {
        target: SOUND
        onInitialized: {
    
          singleNote = Qt.binding(function() { return GLOB.singleNoteMode })
    
          scoreObj.allowAdding = Qt.binding(function() { return !GLOB.singleNoteMode })
    
          enableKeySign = Qt.binding(function() { return GLOB.keySignatureEnabled })
    
          var t = Qt.createComponent("qrc:/StatusTip.qml")
          t.createObject(nootkaWindow)
    
          if (!GLOB.singleNoteMode)
            scoreObj.editModeAct.trigger()
    
        onClefTypeChanged: score.clef = GLOB.clefType
    
      Connections {
        target: GLOB.tuning
        onScordatureChanged: updateScord()
      }
      function updateScord() {
        if (scordature) {
          scordature.destroy()
          scordature = null
        }
    
        if (GLOB.tuning.scordature && GLOB.instrument.isGuitar && GLOB.instrument.type !== Tinstrument.BassGuitar) {
    
            var c = Qt.createComponent("qrc:/score/Scordature.qml")
    
            scordature = c.createObject(firstStaff)
    
            firstStaff.scordSpace = scordature.height
        } else
            firstStaff.scordSpace = 0
      }
    
            var c = Qt.createComponent("qrc:/score/NotePrompt.qml")
    
            notePrompt = c.createObject(scoreObj.note(0))
        } else
            notePrompt.destroy()
      }
    
    
        visible: currentNote != null && !singleNote
    
        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: Noo.alpha(activPal.highlight, 75)