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

0001 /*
0002     SPDX-FileCopyrightText: 2015 Jean-Baptiste Mardelle <jb@kdenlive.org>
0003     SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 */
0005 
0006 import QtQuick.Controls 2.15
0007 import QtQuick.Window 2.15
0008 import Kdenlive.Controls 1.0
0009 import QtQuick 2.15
0010 
0011 Item {
0012     id: root
0013     objectName: "root"
0014 
0015     SystemPalette { id: activePalette }
0016 
0017     // default size, but scalable by user
0018     height: 300; width: 400
0019     property string markerText
0020     property point profile: controller.profile
0021     property double zoom
0022     property point center
0023     property double scalex
0024     property double scaley
0025     property bool captureRightClick: false
0026     property bool dropped: false
0027     property string fps: '-'
0028     property bool showMarkers: false
0029     property bool showTimecode: false
0030     property bool showFps: false
0031     property bool showSafezone: false
0032     property bool showAudiothumb: false
0033     // Zoombar properties
0034     property double zoomStart: 0
0035     property double zoomFactor: 1
0036     property int zoomOffset: 0
0037     property bool showZoomBar: false
0038     property double offsetx : 0
0039     property double offsety : 0
0040     property real baseUnit: fontMetrics.font.pixelSize * 0.8
0041     property int duration: 300
0042     property int mouseRulerPos: 0
0043     property double frameSize: 10
0044     property double timeScale: 1
0045     property int overlayType: controller.overlayType
0046     property color overlayColor: controller.overlayColor
0047     property bool isClipMonitor: false
0048 
0049     function updateClickCapture() {
0050         root.captureRightClick = false
0051     }
0052 
0053     FontMetrics {
0054         id: fontMetrics
0055         font: fixedFont
0056     }
0057 
0058     signal editCurrentMarker()
0059     signal startRecording()
0060 
0061     onDurationChanged: {
0062         clipMonitorRuler.updateRuler()
0063     }
0064 
0065     onWidthChanged: {
0066         clipMonitorRuler.updateRuler()
0067     }
0068     function updatePalette() {
0069         clipMonitorRuler.forceRepaint()
0070     }
0071 
0072     function startCountdown() {
0073         countDownLoader.source = "Countdown.qml"
0074     }
0075     function stopCountdown() {
0076         root.startRecording()
0077         countDownLoader.source = ""
0078     }
0079 
0080     function switchOverlay() {
0081         if (controller.overlayType >= 5) {
0082             controller.overlayType = 0
0083         } else {
0084             controller.overlayType = controller.overlayType + 1;
0085         }
0086         root.overlayType = controller.overlayType
0087     }
0088     MouseArea {
0089         id: barOverArea
0090         hoverEnabled: true
0091         acceptedButtons: Qt.NoButton
0092         anchors.fill: parent
0093         onWheel: wheel => {
0094             controller.seek(wheel.angleDelta.x + wheel.angleDelta.y, wheel.modifiers)
0095         }
0096         onEntered: {
0097             controller.setWidgetKeyBinding(i18n("<b>Click</b> to play, <b>Double click</b> for fullscreen, <b>Hover right</b> for toolbar, <b>Wheel</b> or <b>arrows</b> to seek, <b>Ctrl wheel</b> to zoom"));
0098         }
0099         onExited: {
0100             controller.setWidgetKeyBinding();
0101         }
0102     }
0103     DropArea { //Drop area for effects
0104         id: effectArea
0105         anchors.fill: parent
0106         keys: 'kdenlive/effect'
0107         property string droppedData
0108         property string droppedDataSource
0109         onEntered: drag => {
0110             drag.acceptProposedAction()
0111             droppedData = drag.getDataAsString('kdenlive/effect')
0112             droppedDataSource = drag.getDataAsString('kdenlive/effectsource')
0113         }
0114         onDropped: {
0115             controller.addEffect(droppedData, droppedDataSource)
0116             droppedData = ""
0117             droppedDataSource = ""
0118         }
0119     }
0120     SceneToolBar {
0121         id: sceneToolBar
0122         anchors {
0123             right: parent.right
0124             top: parent.top
0125             topMargin: 4
0126             rightMargin: 4
0127             leftMargin: 4
0128         }
0129     }
0130 
0131     Item {
0132         height: root.height - controller.rulerHeight
0133         width: root.width
0134         Item {
0135             id: frame
0136             objectName: "referenceframe"
0137             width: root.profile.x * root.scalex
0138             height: root.profile.y * root.scaley
0139             x: root.center.x - width / 2 - root.offsetx;
0140             y: root.center.y - height / 2 - root.offsety;
0141 
0142             Loader {
0143                 anchors.fill: parent
0144                 source: {
0145                     switch(root.overlayType)
0146                     {
0147                         case 0:
0148                             return '';
0149                         case 1:
0150                             return "OverlayStandard.qml";
0151                         case 2:
0152                             return "OverlayMinimal.qml";
0153                         case 3:
0154                             return "OverlayCenter.qml";
0155                         case 4:
0156                             return "OverlayCenterDiagonal.qml";
0157                         case 5:
0158                             return "OverlayThirds.qml";
0159                     }
0160                 }
0161             }
0162             Loader {
0163                 id: countDownLoader
0164                 anchors.fill: parent
0165             }
0166         }
0167         Item {
0168             id: monitorOverlay
0169             anchors.fill: parent
0170 
0171             Label {
0172                 id: timecode
0173                 font.family: fontMetrics.font.family
0174                 font.pointSize: 1.5 * fontMetrics.font.pointSize
0175                 objectName: "timecode"
0176                 color: "#ffffff"
0177                 padding: 2
0178                 background: Rectangle {
0179                     color: "#66000000"
0180                 }
0181                 text: controller.timecode
0182                 visible: root.showTimecode
0183                 anchors {
0184                     right: parent.right
0185                     bottom: parent.bottom
0186                     bottomMargin: root.zoomOffset
0187                 }
0188             }
0189             Label {
0190                 id: fpsdropped
0191                 font.family: fontMetrics.font.family
0192                 font.pointSize: 1.5 * fontMetrics.font.pointSize
0193                 objectName: "fpsdropped"
0194                 color: "#ffffff"
0195                 padding: 2
0196                 background: Rectangle {
0197                     color: root.dropped ? "#99ff0000" : "#66004400"
0198                 }
0199                 text: i18n("%1fps", root.fps)
0200                 visible: root.showFps
0201                 anchors {
0202                     right: timecode.visible ? timecode.left : parent.right
0203                     bottom: parent.bottom
0204                     bottomMargin: root.zoomOffset
0205                 }
0206             }
0207             Label {
0208                 id: labelSpeed
0209                 font: fixedFont
0210                 anchors {
0211                     left: parent.left
0212                     top: parent.top
0213                 }
0214                 visible: Math.abs(controller.speed) > 1
0215                 text: "x" + controller.speed
0216                 color: "white"
0217                 background: Rectangle {
0218                     color: "darkgreen"
0219                 }
0220                 padding: 5
0221                 horizontalAlignment: TextInput.AlignHCenter
0222             }
0223             Label {
0224                 id: inPoint
0225                 font: fixedFont
0226                 anchors {
0227                     left: parent.left
0228                     bottom: parent.bottom
0229                     bottomMargin: root.zoomOffset
0230                 }
0231                 visible: root.showMarkers && controller.position == controller.zoneIn
0232                 text: i18n("In Point")
0233                 color: "white"
0234                 background: Rectangle {
0235                     color: "#228b22"
0236                 }
0237                 padding: 5
0238                 horizontalAlignment: TextInput.AlignHCenter
0239             }
0240             Label {
0241                 id: outPoint
0242                 font: fixedFont
0243                 anchors {
0244                     left: inPoint.visible ? inPoint.right : parent.left
0245                     bottom: parent.bottom
0246                     bottomMargin: root.zoomOffset
0247                 }
0248                 visible: root.showMarkers && controller.position == controller.zoneOut
0249                 text: i18n("Out Point")
0250                 color: "white"
0251                 background: Rectangle {
0252                     color: "#770000"
0253                 }
0254                 padding: 5
0255                 horizontalAlignment: TextInput.AlignHCenter
0256             }
0257             TextField {
0258                 id: marker
0259                 font: fixedFont
0260                 objectName: "markertext"
0261                 activeFocusOnPress: true
0262                 onEditingFinished: {
0263                     root.markerText = marker.displayText
0264                     marker.focus = false
0265                     root.editCurrentMarker()
0266                 }
0267                 anchors {
0268                     left: outPoint.visible ? outPoint.right : inPoint.visible ? inPoint.right : parent.left
0269                     bottom: parent.bottom
0270                     bottomMargin: root.zoomOffset
0271                 }
0272                 visible: root.showMarkers && text != ""
0273                 text: controller.markerComment
0274                 height: inPoint.height
0275                 width: fontMetrics.boundingRect(displayText).width + 10
0276                 horizontalAlignment: displayText == text ? TextInput.AlignHCenter : TextInput.AlignLeft
0277                 background: Rectangle {
0278                     color: controller.markerColor
0279                 }
0280                 color: "#000"
0281                 padding: 0
0282                 maximumLength: 25
0283             }
0284         }
0285     }
0286     MonitorRuler {
0287         id: clipMonitorRuler
0288         anchors {
0289             left: root.left
0290             right: root.right
0291             bottom: root.bottom
0292         }
0293         height: controller.rulerHeight
0294     }
0295 }