Warning, /education/gcompris/src/activities/piano_composition/OptionsRow.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - OptionsRow.qml
0002 *
0003 * SPDX-FileCopyrightText: 2018 Aman Kumar Gupta <gupta2140@gmail.com>
0004 *
0005 * Authors:
0006 * Beth Hadley <bethmhadley@gmail.com> (GTK+ version)
0007 * Johnny Jazeix <jazeix@gmail.com> (Qt Quick port)
0008 * Aman Kumar Gupta <gupta2140@gmail.com> (Qt Quick port)
0009 * Timothée Giet <animtim@gmail.com> (refactoring)
0010 *
0011 * SPDX-License-Identifier: GPL-3.0-or-later
0012 */
0013 import QtQuick 2.12
0014 import GCompris 1.0
0015
0016 import "../../core"
0017
0018 Grid {
0019 id: optionsRow
0020 columns: 2
0021
0022 //: Whole note, Half note, Quarter note and Eighth note are the different length notes in the musical notation.
0023 readonly property var noteLengthName: [[qsTr("Whole note"), "Whole"], [qsTr("Half note"), "Half"], [qsTr("Quarter note"), "Quarter"], [qsTr("Eighth note"), "Eighth"]]
0024
0025 //: Whole rest, Half rest, Quarter rest and Eighth rest are the different length rests (silences) in the musical notation.
0026 readonly property var restAddedMessage: [qsTr("Whole rest added"), qsTr("Half rest added"), qsTr("Quarter rest added"), qsTr("Eighth rest added")]
0027 readonly property var translatedRestNames: [qsTr("Whole rest"), qsTr("Half rest"), qsTr("Quarter rest"), qsTr("Eighth rest")]
0028 readonly property var lyricsOrPianoModes: [[qsTr("Piano"), "piano"], [qsTr("Lyrics"), "lyrics"]]
0029
0030 property real iconsWidth: score.height * 1.2
0031 property alias noteOptionsIndex: noteOptions.currentIndex
0032 property alias lyricsOrPianoModeIndex: lyricsOrPianoModeOption.currentIndex
0033 property alias keyOption: keyOption
0034 property alias bpmMeter: bpmMeter
0035 property alias restOptionIndex: restOptions.currentIndex
0036
0037 property bool restOptionsVisible: false
0038 property bool noteOptionsVisible: false
0039 property bool playButtonVisible: false
0040 property bool clearButtonVisible: false
0041 property bool undoButtonVisible: false
0042 property bool openButtonVisible: false
0043 property bool saveButtonVisible: false
0044 property bool changeAccidentalStyleButtonVisible: false
0045 property bool lyricsOrPianoModeOptionVisible: false
0046 property bool bpmVisible: false
0047
0048 signal undoButtonClicked
0049 signal clearButtonClicked
0050 signal openButtonClicked
0051 signal saveButtonClicked
0052 signal playButtonClicked
0053 signal bpmIncreased
0054 signal bpmDecreased
0055 signal bpmChanged
0056 signal emitOptionMessage(string message)
0057
0058 onPlayButtonClicked: {
0059 if(!multipleStaff.isMusicPlaying) {
0060 emitOptionMessage(qsTr("Play melody"))
0061 multipleStaff.play()
0062 } else {
0063 multipleStaff.stopPlaying()
0064 }
0065 }
0066
0067
0068 BpmMeter {
0069 id: bpmMeter
0070 }
0071
0072 BarButton {
0073 id: playButton
0074 source: multipleStaff.isMusicPlaying ?
0075 "qrc:/gcompris/src/activities/piano_composition/resource/stop.svg" :
0076 "qrc:/gcompris/src/activities/piano_composition/resource/play.svg"
0077 sourceSize.width: optionsRow.iconsWidth
0078 visible: playButtonVisible
0079 onClicked: {
0080 optionsRow.playButtonClicked()
0081 }
0082 }
0083
0084 BarButton {
0085 id: clearButton
0086 source: "qrc:/gcompris/src/activities/piano_composition/resource/erase.svg"
0087 sourceSize.width: optionsRow.iconsWidth
0088 visible: clearButtonVisible
0089 onClicked: clearButtonClicked()
0090 }
0091
0092 BarButton {
0093 id: undoButton
0094 source: "qrc:/gcompris/src/activities/piano_composition/resource/undo.svg"
0095 sourceSize.width: optionsRow.iconsWidth
0096 visible: undoButtonVisible
0097 onClicked: {
0098 emitOptionMessage(qsTr("Undo"))
0099 undoButtonClicked()
0100 }
0101 }
0102
0103 KeyOption {
0104 id: keyOption
0105 }
0106
0107 Item {
0108 id: rests
0109 width: optionsRow.iconsWidth * 2
0110 height: optionsRow.iconsWidth
0111 visible: restOptionsVisible
0112 Rectangle {
0113 color: "yellow"
0114 opacity: 0.1
0115 border.width: 2
0116 border.color: "black"
0117 anchors.fill: parent
0118 radius: 10
0119 }
0120
0121 SwitchableOptions {
0122 id: restOptions
0123
0124 readonly property string restTypeImage: (optionsRow.noteLengthName[currentIndex][1]).toLowerCase()
0125
0126 source: "qrc:/gcompris/src/activities/piano_composition/resource/%1Rest.svg".arg(restTypeImage)
0127 nbOptions: optionsRow.noteLengthName.length
0128 onClicked: {
0129 background.restType = optionsRow.noteLengthName[currentIndex][1]
0130 emitOptionMessage(optionsRow.translatedRestNames[currentIndex])
0131 }
0132 width: optionsRow.iconsWidth * 0.9
0133 sourceSize.width: width
0134 visible: restOptionsVisible
0135 anchors.topMargin: -3
0136 anchors.left: parent.left
0137 anchors.leftMargin: 5
0138 }
0139
0140 BarButton {
0141 id: addRestButton
0142 width: restOptions.width
0143 sourceSize.width: width
0144 source: "qrc:/gcompris/src/activities/piano_composition/resource/add.svg"
0145 anchors.right: parent.right
0146 anchors.verticalCenter: parent.verticalCenter
0147 visible: restOptions.visible
0148 onClicked: {
0149 emitOptionMessage(optionsRow.restAddedMessage[restOptionIndex])
0150 parent.scale = 1
0151 pianoLayout.addMusicElementAndPushToStack(restType.toLowerCase(), "Rest")
0152 }
0153 }
0154 }
0155
0156 BarButton {
0157 id: changeAccidentalStyleButton
0158 source: changeAccidentalStyleButtonVisible ? (piano.useSharpNotation ? "qrc:/gcompris/src/activities/piano_composition/resource/blacksharp.svg"
0159 : "qrc:/gcompris/src/activities/piano_composition/resource/blackflat.svg")
0160 : ""
0161 sourceSize.width: optionsRow.iconsWidth
0162 visible: changeAccidentalStyleButtonVisible
0163 onClicked: {
0164 piano.useSharpNotation = !piano.useSharpNotation
0165 //: Sharp notes and Flat notes represents the accidental style of the notes in the music.
0166 emitOptionMessage(piano.useSharpNotation ? qsTr("Sharp notes") : qsTr("Flat notes"))
0167 }
0168 }
0169
0170 SwitchableOptions {
0171 id: noteOptions
0172 source: "qrc:/gcompris/src/activities/piano_composition/resource/genericNote%1.svg".arg(optionsRow.noteLengthName[currentIndex][1])
0173 nbOptions: optionsRow.noteLengthName.length
0174 sourceSize.width: optionsRow.iconsWidth
0175 sourceSize.height: optionsRow.iconsWidth
0176 currentIndex: 2
0177 onClicked: {
0178 background.currentType = optionsRow.noteLengthName[currentIndex][1]
0179 emitOptionMessage(optionsRow.noteLengthName[currentIndex][0])
0180 }
0181 visible: noteOptionsVisible
0182 }
0183
0184 BarButton {
0185 id: openButton
0186 source: "qrc:/gcompris/src/activities/piano_composition/resource/open.svg"
0187 sourceSize.width: optionsRow.iconsWidth
0188 visible: openButtonVisible
0189 onClicked: openButtonClicked()
0190 }
0191
0192 BarButton {
0193 id: saveButton
0194 source: "qrc:/gcompris/src/activities/piano_composition/resource/save.svg"
0195 sourceSize.width: optionsRow.iconsWidth
0196 visible: saveButtonVisible
0197 onClicked: saveButtonClicked()
0198 }
0199
0200 SwitchableOptions {
0201 id: lyricsOrPianoModeOption
0202 nbOptions: optionsRow.lyricsOrPianoModes.length
0203 source: "qrc:/gcompris/src/activities/piano_composition/resource/%1.svg".arg(optionsRow.lyricsOrPianoModes[currentIndex][1])
0204 visible: lyricsOrPianoModeOptionVisible
0205 onClicked: emitOptionMessage(optionsRow.lyricsOrPianoModes[currentIndex][0])
0206 }
0207
0208 }