Warning, /multimedia/kdenlive/src/timeline2/view/qml/AudioLevels.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2019 Jean-Baptiste Mardelle <jb@kdenlive.org>
0003     SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 */
0005 
0006 import QtQuick 2.15
0007 import QtQuick.Controls 2.15
0008 import QtQuick.Layouts 1.15
0009 
0010 Item {
0011     id: recContainer
0012     property int trackId: -1
0013     property int recState: audiorec.recordState
0014     width: parent.width
0015     implicitHeight: root.baseUnit * 1.5
0016 
0017     onRecStateChanged: {
0018         if (recState == 1) {
0019             // Recording
0020             recbutton.color = 'orange'
0021             recbutton.ToolTip.text = i18n("Stop")
0022         } else if (recState == 2) {
0023             // Paused
0024             recbutton.color = 'white'
0025             recbutton.ToolTip.text = i18n("Paused")
0026         } else {
0027             recbutton.color = 'darkred'
0028             recbutton.ToolTip.text = i18n("Record")
0029         }
0030     }
0031     RowLayout {
0032         spacing: 4
0033         Layout.fillWidth: true
0034         Rectangle {
0035             id: recbutton
0036             width: root.baseUnit * 1.5
0037             height: root.baseUnit * 1.5
0038             radius: root.baseUnit * .75
0039             color: trackHeadRoot.isLocked ? 'grey' : 'darkred'
0040             border.color: 'black'
0041             ToolTip.visible: buttonArea.containsMouse
0042             ToolTip.delay: 1000
0043             ToolTip.timeout: 5000
0044             ToolTip.text: i18n("Record")
0045             MouseArea {
0046                 id: buttonArea
0047                 anchors.fill: parent
0048                 hoverEnabled: true
0049                 cursorShape: Qt.PointingHandCursor
0050                 enabled: !trackHeadRoot.isLocked
0051                 onEntered:  {
0052                     parent.border.color = 'red'
0053                     parent.border.width = 4
0054                 }
0055                 onExited:  {
0056                     parent.border.color = 'black'
0057                     parent.border.width = 1
0058                 }
0059                 onClicked: {
0060                     timeline.switchRecording(trackId, recState == 1 ? 0 : 1)
0061                 }
0062             }
0063         }
0064         Rectangle {
0065             id: levelsContainer
0066             width: recContainer.width - recbutton.width - 8
0067             height: recbutton.height - 1
0068             x: 1
0069             y: 1
0070             ToolTip.text: i18n("Mic level")
0071             ToolTip.visible: levelArea.containsMouse
0072             ToolTip.delay: 1000
0073             ToolTip.timeout: 5000
0074             color: Qt.lighter(activePalette.base)
0075             Repeater {
0076                 model: audiorec.levels.length === 0 ? 2 : audiorec.levels.length
0077                 id: bgRepeater
0078                 Rectangle {
0079                     required property int index
0080                     width: levelsContainer.width - 2
0081                     height: Math.max(1, levelsContainer.height / bgRepeater.count - 2)
0082                     x: 1
0083                     y: (height + 1) * index
0084                     gradient: Gradient {
0085                         orientation: Gradient.Horizontal
0086                         GradientStop { position: 0.0; color: "darkgreen" }
0087                         GradientStop { position: 0.69; color: "darkgreen" }
0088                         GradientStop { position: 0.7; color: "green" }
0089                         GradientStop { position: 0.84; color: "green" }
0090                         GradientStop { position: 0.85; color: "yellow" }
0091                         GradientStop { position: 0.99; color: "yellow" }
0092                         GradientStop { position: 1.0; color: "red" }
0093                     }
0094                 }
0095             }
0096             Repeater {
0097                 model: audiorec.levels.length === 0 ? 2 : audiorec.levels.length
0098                 id: levelRepeater
0099                 property int lastPos: 0
0100                 property int currentPos: 0
0101                 Item {
0102                     anchors.fill: parent
0103                     anchors.margins: 1
0104                     property double currentLevel: audiorec.levels.length <= 0 ? 0 : audiorec.levels[index]
0105                     property double peak: 0
0106                     Rectangle {
0107                         color: activePalette.base
0108                         opacity: 0.8
0109                         width: parent.width * (1.0 - currentLevel)
0110                         anchors.right: parent.right
0111                         height: parent.height / levelRepeater.count
0112                         y: height * index
0113                     }
0114                     onCurrentLevelChanged: {
0115                         if (currentLevel > peak) {
0116                             peak = currentLevel
0117                         } else if (peak > 0) {
0118                             peak -= 0.02
0119                         }
0120                     }
0121                     Rectangle {
0122                         visible: peak > 0
0123                         color: activePalette.text
0124                         width: 2
0125                         height: parent.height / levelRepeater.count
0126                         x: parent.width * peak
0127                         y: height * index
0128                     }
0129                 }
0130             }
0131             Repeater {
0132                 model: 8
0133                 Rectangle {
0134                     color: "#000000"
0135                     width: 1
0136                     y: 1
0137                     height: parent.height - 2
0138                     x: parent.width * (index + 1) / 9
0139                 }
0140             }
0141             Rectangle {
0142                 // main frame
0143                 anchors.fill: parent
0144                 color: "#00000000"
0145                 border.color: "#000000"
0146                 border.width: 1
0147             }
0148             MouseArea {
0149                 id: levelArea
0150                 hoverEnabled: true
0151                 anchors.fill: parent
0152                 acceptedButtons: Qt.NoButton
0153             }
0154         }
0155     }
0156 }