diff --git a/src/qml/main.qml b/src/qml/main.qml index 2881210..a7d61f7 100644 --- a/src/qml/main.qml +++ b/src/qml/main.qml @@ -1,5 +1,4 @@ import QtQuick -/* import QtQuick.Dialogs */ import QtQuick.Controls as Controls import Qt.labs.platform as Labs import QtQuick.Window diff --git a/src/qml/presenter/Actions.qml b/src/qml/presenter/Actions.qml index 049ac47..723f0ab 100644 --- a/src/qml/presenter/Actions.qml +++ b/src/qml/presenter/Actions.qml @@ -1,5 +1,4 @@ import QtQuick 2.13 -import QtQuick.Dialogs 1.0 import QtQuick.Controls 2.15 as Controls import QtQuick.Window 2.15 import QtQuick.Layouts 1.15 diff --git a/src/qml/presenter/Header.qml b/src/qml/presenter/Header.qml index d6695dd..f582139 100644 --- a/src/qml/presenter/Header.qml +++ b/src/qml/presenter/Header.qml @@ -1,5 +1,4 @@ import QtQuick 2.13 -import QtQuick.Dialogs 1.0 import QtQuick.Controls 2.15 as Controls import QtQuick.Window 2.15 import QtQuick.Layouts 1.15 diff --git a/src/qml/presenter/ImageEditor.qml b/src/qml/presenter/ImageEditor.qml index e345a16..725b320 100644 --- a/src/qml/presenter/ImageEditor.qml +++ b/src/qml/presenter/ImageEditor.qml @@ -1,6 +1,5 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 as Controls -import QtQuick.Dialogs 1.3 import QtQuick.Layouts 1.15 import org.kde.kirigami 2.13 as Kirigami import "./" as Presenter diff --git a/src/qml/presenter/LeftDock.qml b/src/qml/presenter/LeftDock.qml index 4e393d3..c13c7b2 100644 --- a/src/qml/presenter/LeftDock.qml +++ b/src/qml/presenter/LeftDock.qml @@ -1,5 +1,4 @@ import QtQuick 2.13 -/* import QtQuick.Dialogs 1.0 */ import QtQuick.Controls 2.0 as Controls /* import QtQuick.Window 2.15 */ import QtQuick.Layouts 1.15 diff --git a/src/qml/presenter/LoadingSpinner.qml b/src/qml/presenter/LoadingSpinner.qml index 2e4b13c..19bfc5f 100644 --- a/src/qml/presenter/LoadingSpinner.qml +++ b/src/qml/presenter/LoadingSpinner.qml @@ -1,7 +1,7 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 as Controls import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.15 +import Qt5Compat.GraphicalEffects import org.kde.kirigami 2.13 as Kirigami import "./" as Presenter diff --git a/src/qml/presenter/MainWindow.qml b/src/qml/presenter/MainWindow.qml index 24820a6..696a693 100644 --- a/src/qml/presenter/MainWindow.qml +++ b/src/qml/presenter/MainWindow.qml @@ -1,5 +1,4 @@ import QtQuick 2.15 -import QtQuick.Dialogs 1.0 import QtQuick.Controls 2.15 as Controls import QtQuick.Window 2.15 import QtQuick.Layouts 1.15 @@ -176,13 +175,13 @@ Controls.Page { /* id: pWindow */ /* } */ - SongProxyModel { id: songProxyModel } - ImageProxyModel { id: imageProxyModel } - PresentationProxyModel { id: presProxyModel } - VideoProxyModel { id: videoProxyModel } - /* ServiceThing { id: serviceThing } */ + /* SongProxyModel { id: songProxyModel } */ + /* ImageProxyModel { id: imageProxyModel } */ + /* PresentationProxyModel { id: presProxyModel } */ + /* VideoProxyModel { id: videoProxyModel } */ + ServiceThing { id: serviceThing } FileHelper { id: fileHelper } - SlideHelper { id: slideHelper } + /* SlideHelper { id: slideHelper } */ SongEditor { id: songEditorModel /* songModel: songProxyModel.songModel() */ diff --git a/src/qml/presenter/NewVideo.qml b/src/qml/presenter/NewVideo.qml index 17bf96e..f84ea16 100644 --- a/src/qml/presenter/NewVideo.qml +++ b/src/qml/presenter/NewVideo.qml @@ -1,6 +1,5 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 as Controls -import QtQuick.Dialogs 1.3 import QtQuick.Layouts 1.15 import QtGraphicalEffects 1.15 import org.kde.kirigami 2.13 as Kirigami diff --git a/src/qml/presenter/Presentation.qml b/src/qml/presenter/Presentation.qml index 29f1106..da7911b 100644 --- a/src/qml/presenter/Presentation.qml +++ b/src/qml/presenter/Presentation.qml @@ -1,13 +1,12 @@ import QtQuick 2.15 -import QtQuick.Dialogs 1.0 import QtQuick.Controls 2.15 as Controls import QtQuick.Window 2.15 import QtQuick.Layouts 1.15 +import QtMultimedia /* import QtAudioEngine 1.15 */ import org.kde.kirigami 2.13 as Kirigami import "./" as Presenter import org.presenter 1.0 -import mpv 1.0 FocusScope { id: root @@ -454,13 +453,12 @@ FocusScope { onTriggered: root.visible ? keyHandler.forceActiveFocus() : null } - MpvObject { + MediaPlayer { id: audio - useHwdec: true - enableAudio: true + audioOutput: AudioOutput {} // embeded mpv allows to set commandline propertys using the options/ // syntax. This could be abstracted later, but for now this works. - Component.onCompleted: audio.setProperty("options/audio-display", "no"); + /* Component.onCompleted: audio.setProperty("options/audio-display", "no"); */ } function pauseVideo() { diff --git a/src/qml/presenter/PresentationEditor.qml b/src/qml/presenter/PresentationEditor.qml index 9f8137f..e1d303f 100644 --- a/src/qml/presenter/PresentationEditor.qml +++ b/src/qml/presenter/PresentationEditor.qml @@ -1,6 +1,5 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 as Controls -import QtQuick.Dialogs 1.3 import QtQuick.Layouts 1.15 import QtWebEngine 1.10 import org.kde.kirigami 2.13 as Kirigami diff --git a/src/qml/presenter/PresentationWindow.qml b/src/qml/presenter/PresentationWindow.qml index 9ee7d70..b93f576 100644 --- a/src/qml/presenter/PresentationWindow.qml +++ b/src/qml/presenter/PresentationWindow.qml @@ -1,5 +1,4 @@ import QtQuick 2.15 -import QtQuick.Dialogs 1.0 import QtQuick.Controls 2.15 as Controls import QtQuick.Window 2.15 import QtQuick.Layouts 1.15 diff --git a/src/qml/presenter/PreviewSlide.qml b/src/qml/presenter/PreviewSlide.qml index d7f7dbd..8662d3e 100644 --- a/src/qml/presenter/PreviewSlide.qml +++ b/src/qml/presenter/PreviewSlide.qml @@ -3,7 +3,7 @@ import QtQuick.Controls 2.15 as Controls import QtQuick.Layouts 1.15 import QtMultimedia 5.15 /* import QtAudioEngine 1.15 */ -import QtGraphicalEffects 1.15 +import Qt5Compat.GraphicalEffects import org.kde.kirigami 2.13 as Kirigami import "./" as Presenter import org.presenter 1.0 diff --git a/src/qml/presenter/ServiceList.qml b/src/qml/presenter/ServiceList.qml index ed2124c..36bd6a0 100644 --- a/src/qml/presenter/ServiceList.qml +++ b/src/qml/presenter/ServiceList.qml @@ -1,5 +1,4 @@ import QtQuick 2.13 -/* import QtQuick.Dialogs 1.0 */ import QtQuick.Controls 2.12 as Controls /* import QtQuick.Window 2.15 */ import QtQuick.Layouts 1.15 @@ -8,7 +7,7 @@ import QtQml.Models 2.15 /* import QtQml.Models 2.12 */ /* import QtMultimedia 5.15 */ /* import QtAudioEngine 1.15 */ -import QtGraphicalEffects 1.15 +import Qt5Compat.GraphicalEffects import org.kde.kirigami 2.13 as Kirigami import "./" as Presenter import org.presenter 1.0 @@ -78,206 +77,220 @@ Item { } } - Component { - id: delegate - Kirigami.AbstractListItem { - id: serviceListItem - implicitWidth: serviceItemList.width - height: Kirigami.Units.gridUnit * 2 + Item { + id: serviceListItem + implicitWidth: serviceItemList.width + height: Kirigami.Units.gridUnit * 2 - property var selectedItems + property var selectedItems - DropArea { - id: serviceDrop - anchors.fill: parent + DropArea { + id: serviceDrop + anchors.fill: parent - onEntered: (drag) => { - if (drag.keys[0] === "library") { - dropHighlightLine.visible = true; - dropHighlightLine.y = serviceDrop.mapToItem( - serviceItemList,0,0).y - 2; + onEntered: (drag) => { + if (drag.keys[0] === "library") { + dropHighlightLine.visible = true; + dropHighlightLine.y = serviceDrop.mapToItem( + serviceItemList,0,0).y - 2; + } + } + + onDropped: (drag) => { + loadingItem.visible = true; + console.log("DROPPED IN ITEM AREA: " + drag.keys); + console.log(dragItemIndex + " " + index); + const hlIndex = serviceItemList.currentIndex; + if (drag.keys[0] === "library") { + addItem(index, + dragItemType, + dragItemIndex); + } else if (drag.keys[0] === "serviceitem") { + /* ServiceItemModel.moveRows(serviceItemList.indexDragged, */ + /* serviceItemList.moveToIndex, 1); */ + /* serviceItemList.currentIndex = moveToIndex; */ + } + dropHighlightLine.visible = false; + loadingItem.visible = false; + } + + keys: ["library","serviceitem"] + + Rectangle { + id: visServiceItem + width: serviceDrop.width + height: serviceDrop.height + anchors { + horizontalCenter: parent.horizontalCenter + verticalCenter: parent.verticalCenter + } + color: { + if (active) + Kirigami.Theme.highlightColor; + else if (selected) + Kirigami.Theme.focusColor; + else if (mouseHandler.containsMouse) + Kirigami.Theme.hoverColor; + else + Kirigami.Theme.backgroundColor; + } + + Controls.Label { + id: label + anchors.left: dragHandle.right + anchors.verticalCenter: parent.verticalCenter + anchors.leftMargin: 5 + text: name + elide: Text.ElideRight + width: parent.width - trailing.width - dragHandle.width - 25 + color: { + if (selected || + mouseHandler.containsMouse || active) + Kirigami.Theme.highlightedTextColor; + else + Kirigami.Theme.textColor; } } - onDropped: (drag) => { - loadingItem.visible = true; - console.log("DROPPED IN ITEM AREA: " + drag.keys); - console.log(dragItemIndex + " " + index); - const hlIndex = serviceItemList.currentIndex; - if (drag.keys[0] === "library") { - addItem(index, - dragItemType, - dragItemIndex); - } else if (drag.keys[0] === "serviceitem") { - /* ServiceItemModel.moveRows(serviceItemList.indexDragged, */ - /* serviceItemList.moveToIndex, 1); */ - /* serviceItemList.currentIndex = moveToIndex; */ - } - dropHighlightLine.visible = false; - loadingItem.visible = false; - } - - keys: ["library","serviceitem"] - - Rectangle { - id: visServiceItem - width: serviceDrop.width - height: serviceDrop.height - anchors { - horizontalCenter: parent.horizontalCenter - verticalCenter: parent.verticalCenter + Kirigami.Icon { + id: trailing + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + anchors.rightMargin: 5 + implicitWidth: Kirigami.Units.gridUnit + source: { + switch (type) { + case 'image': return "folder-pictures-symbolic"; + case 'video': return "folder-videos-symbolic"; + case 'song': return "folder-music-symbolic"; + case 'presentation': return "x-office-presentation-symbolic"; + default: return "slideshow-plugin"; + } } color: { - if (active) - Kirigami.Theme.highlightColor; - else if (selected) - Kirigami.Theme.focusColor; - else if (mouseHandler.containsMouse) - Kirigami.Theme.hoverColor; + if (selected || + mouseHandler.containsMouse || active) + Kirigami.Theme.highlightedTextColor; else - Kirigami.Theme.backgroundColor; + Kirigami.Theme.textColor; } + } - Controls.Label { - id: label - anchors.left: dragHandle.right - anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: 5 - text: name - elide: Text.ElideRight - width: parent.width - trailing.width - dragHandle.width - 25 - color: { - if (selected || - mouseHandler.containsMouse || active) - Kirigami.Theme.highlightedTextColor; - else - Kirigami.Theme.textColor; + /* onYChanged: serviceItemList.updateDrag(Math.round(y)); */ + + states: [ + State { + when: mouseHandler.drag.active + ParentChange { + target: visServiceItem + parent: serviceItemList + } + + PropertyChanges { + target: visServiceItem + /* backgroundColor: Kirigami.Theme.backgroundColor */ + /* textColor: Kirigami.Theme.textColor */ + anchors.verticalCenter: undefined + anchors.horizontalCenter: undefined } } + ] - Kirigami.Icon { - id: trailing - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - anchors.rightMargin: 5 - implicitWidth: Kirigami.Units.gridUnit - source: { - switch (type) { - case 'image': return "folder-pictures-symbolic"; - case 'video': return "folder-videos-symbolic"; - case 'song': return "folder-music-symbolic"; - case 'presentation': return "x-office-presentation-symbolic"; - default: return "slideshow-plugin"; - } - } - color: { - if (selected || - mouseHandler.containsMouse || active) - Kirigami.Theme.highlightedTextColor; - else - Kirigami.Theme.textColor; - } + /* Drag.dragType: Drag.Automatic */ + /* Drag.active: mouseHandler.drag.active */ + /* Drag.hotSpot.x: width / 2 */ + /* Drag.hotSpot.y: height / 2 */ + /* Drag.keys: ["serviceitem"] */ + + MouseArea { + id: mouseHandler + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.LeftButton | Qt.RightButton + + /* drag { */ + /* target: visServiceItem */ + /* axis: Drag.YAxis */ + /* /\* minimumY: root.y *\/ */ + /* /\* maximumY: serviceItemList.height - serviceDrop.height *\/ */ + /* smoothed: false */ + /* } */ + + /* drag.onActiveChanged: { */ + /* if (mouseHandler.drag.active) { */ + /* serviceItemList.indexDragged = index; */ + /* } */ + /* } */ + + /* onPositionChanged: { */ + /* if (!pressed) { */ + /* return; */ + /* } */ + /* mouseArea.arrangeItem(); */ + /* } */ + + onPressed: { + serviceItemList.interactive = false; } - /* onYChanged: serviceItemList.updateDrag(Math.round(y)); */ - - states: [ - State { - when: mouseHandler.drag.active - ParentChange { - target: visServiceItem - parent: serviceItemList - } - - PropertyChanges { - target: visServiceItem - /* backgroundColor: Kirigami.Theme.backgroundColor */ - /* textColor: Kirigami.Theme.textColor */ - anchors.verticalCenter: undefined - anchors.horizontalCenter: undefined - } - } - ] - - /* Drag.dragType: Drag.Automatic */ - /* Drag.active: mouseHandler.drag.active */ - /* Drag.hotSpot.x: width / 2 */ - /* Drag.hotSpot.y: height / 2 */ - /* Drag.keys: ["serviceitem"] */ - - MouseArea { - id: mouseHandler - anchors.fill: parent - hoverEnabled: true - acceptedButtons: Qt.LeftButton | Qt.RightButton - - /* drag { */ - /* target: visServiceItem */ - /* axis: Drag.YAxis */ - /* /\* minimumY: root.y *\/ */ - /* /\* maximumY: serviceItemList.height - serviceDrop.height *\/ */ - /* smoothed: false */ - /* } */ - - /* drag.onActiveChanged: { */ - /* if (mouseHandler.drag.active) { */ - /* serviceItemList.indexDragged = index; */ - /* } */ - /* } */ - - /* onPositionChanged: { */ - /* if (!pressed) { */ - /* return; */ - /* } */ - /* mouseArea.arrangeItem(); */ - /* } */ - - onPressed: { - serviceItemList.interactive = false; - } - - onClicked: { - if (mouse.button === Qt.RightButton) { - if (!selected) { - serviceItemList.currentIndex = index; - ServiceItemModel.select(index); - } - rightClickMenu.popup(mouse); - } - else if ((mouse.button === Qt.LeftButton) && - (mouse.modifiers === Qt.ShiftModifier)) { - ServiceItemModel.selectItems(index); - } else { + onClicked: { + if (mouse.button === Qt.RightButton) { + if (!selected) { serviceItemList.currentIndex = index; ServiceItemModel.select(index); } - refocusPresentation(); + rightClickMenu.popup(mouse); } - - onDoubleClicked: { - changeServiceItem(index); - } - - onReleased: { - console.log("should drop"); - visServiceItem.Drag.drop(); + else if ((mouse.button === Qt.LeftButton) && + (mouse.modifiers === Qt.ShiftModifier)) { + ServiceItemModel.selectItems(index); + } else { + serviceItemList.currentIndex = index; + ServiceItemModel.select(index); } + refocusPresentation(); } - Presenter.DragHandle { - id: dragHandle - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: 5 - /* width: 20 */ - listItem: serviceListItem - listView: serviceItemList - onMoveRequested: ServiceItemModel.moveRows(oldIndex, - newIndex, - 1) + onDoubleClicked: { + changeServiceItem(index); } + onReleased: { + console.log("should drop"); + visServiceItem.Drag.drop(); + } } + + Presenter.DragHandle { + id: dragHandle + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + anchors.leftMargin: 5 + /* width: 20 */ + listItem: serviceListItem + listView: serviceItemList + onMoveRequested: ServiceItemModel.moveRows(oldIndex, + newIndex, + 1) + } + + } + Controls.Menu { + id: rightClickMenu + Kirigami.Action { + text: "Copy" + } + Kirigami.Action { + text: "Paste" + } + Kirigami.Action { + text: "Delete" + onTriggered: removeItem(index) + } + + Controls.MenuSeparator {} + + Controls.Menu { id: rightClickMenu Kirigami.Action { @@ -307,9 +320,9 @@ Item { ObsModel.setScene(modelData); } } - onObjectAdded: obsMenu.insertAction(index, object) - onObjectRemoved: obsMenu.removeAction(object) } + onObjectAdded: obsMenu.insertAction(index, object) + onObjectRemoved: obsMenu.removeAction(object) } } } @@ -345,11 +358,7 @@ Item { model: ServiceItemModel - delegate: Kirigami.DelegateRecycler { - width: serviceItemList.width - height: Kirigami.Units.gridUnit * 2 - sourceComponent: delegate - } + delegate: serviceListItem Kirigami.WheelHandler { id: wheelHandler target: serviceItemList diff --git a/src/qml/presenter/Settings.qml b/src/qml/presenter/Settings.qml index 2eac9af..e2217ab 100644 --- a/src/qml/presenter/Settings.qml +++ b/src/qml/presenter/Settings.qml @@ -1,5 +1,4 @@ import QtQuick 2.13 -import QtQuick.Dialogs 1.0 import QtQuick.Controls 2.15 as Controls import QtQuick.Layouts 1.15 import org.kde.kirigami 2.13 as Kirigami diff --git a/src/qml/presenter/Slide.qml b/src/qml/presenter/Slide.qml index 99c436d..020e1c4 100644 --- a/src/qml/presenter/Slide.qml +++ b/src/qml/presenter/Slide.qml @@ -4,11 +4,10 @@ import QtQuick.Layouts 1.15 import QtMultimedia /* import QtAudioEngine 1.15 */ import QtWebEngine 1.10 -import QtGraphicalEffects 1.15 +import Qt5Compat.GraphicalEffects import org.kde.kirigami 2.13 as Kirigami import "./" as Presenter import org.presenter 1.0 -import mpv 1.0 Item { id: root diff --git a/src/qml/presenter/SlideEditor.qml b/src/qml/presenter/SlideEditor.qml index 82734b8..9f37c51 100644 --- a/src/qml/presenter/SlideEditor.qml +++ b/src/qml/presenter/SlideEditor.qml @@ -1,7 +1,6 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 as Controls -import QtQuick.Dialogs 1.3 import QtQuick.Layouts 1.15 import QtWebEngine 1.10 import org.kde.kirigami 2.13 as Kirigami diff --git a/src/qml/presenter/SlidesListView.qml b/src/qml/presenter/SlidesListView.qml index 97d330c..cc1448b 100644 --- a/src/qml/presenter/SlidesListView.qml +++ b/src/qml/presenter/SlidesListView.qml @@ -3,7 +3,6 @@ import QtQuick.Controls 2.15 as Controls import org.kde.kirigami 2.13 as Kirigami import "./" as Presenter import org.presenter 1.0 -import mpv 1.0 ListView { // The active items X value from root diff --git a/src/qml/presenter/SongEditor.qml b/src/qml/presenter/SongEditor.qml index 97ef194..45dcedc 100644 --- a/src/qml/presenter/SongEditor.qml +++ b/src/qml/presenter/SongEditor.qml @@ -1,7 +1,6 @@ import QtQuick 2.13 import QtQuick.Controls 2.15 as Controls import Qt.labs.platform 1.1 as Labs -import QtQuick.Dialogs 1.3 import QtQuick.Layouts 1.15 import org.kde.kirigami 2.13 as Kirigami import "./" as Presenter diff --git a/src/qml/presenter/SongEditorSlideList.qml b/src/qml/presenter/SongEditorSlideList.qml index 10c8232..0eab302 100644 --- a/src/qml/presenter/SongEditorSlideList.qml +++ b/src/qml/presenter/SongEditorSlideList.qml @@ -1,5 +1,4 @@ import QtQuick 2.15 -import QtQuick.Dialogs 1.0 import QtQuick.Controls 2.15 as Controls import QtQuick.Window 2.15 import QtQuick.Layouts 1.15 diff --git a/src/qml/presenter/TextBackground.qml b/src/qml/presenter/TextBackground.qml index 4ced54f..4c26348 100644 --- a/src/qml/presenter/TextBackground.qml +++ b/src/qml/presenter/TextBackground.qml @@ -1,5 +1,5 @@ -import QtQuick 2.13 -import QtGraphicalEffects 1.15 +import QtQuick +import Qt5Compat.GraphicalEffects import org.kde.kirigami 2.13 as Kirigami Item { diff --git a/src/qml/presenter/VideoEditor.qml b/src/qml/presenter/VideoEditor.qml index 0e20e5a..0438fbb 100644 --- a/src/qml/presenter/VideoEditor.qml +++ b/src/qml/presenter/VideoEditor.qml @@ -1,10 +1,9 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 as Controls -import QtQuick.Dialogs 1.3 import QtQuick.Layouts 1.15 import org.kde.kirigami 2.13 as Kirigami +import QtMultimedia import "./" as Presenter -import mpv 1.0 import org.presenter 1.0 Item { @@ -90,19 +89,10 @@ Item { Layout.leftMargin: Kirigami.Units.largeSpacing Layout.rightMargin: Kirigami.Units.largeSpacing - MpvObject { + Video { id: videoPreview width: parent.width height: parent.height - objectName: "mpv" - useHwdec: true - enableAudio: audioOn - Component.onCompleted: mpvLoadingTimer.start() - onPositionChanged: videoSlider.value = position - onFileLoaded: { - /* showPassiveNotification(video.title + " has been loaded"); */ - videoPreview.pause(); - } } RowLayout { @@ -111,7 +101,7 @@ Item { height: videoTitleField.height spacing: 2 Kirigami.Icon { - source: videoPreview.isPlaying ? "media-pause" : "media-play" + source: videoPreview.playbackState == MediaPlayer.PlayingState ? "media-pause" : "media-play" Layout.preferredWidth: 25 Layout.preferredHeight: 25 color: Kirigami.Theme.textColor @@ -127,7 +117,7 @@ Item { Layout.preferredHeight: 25 from: 0 to: videoPreview.duration - /* value: videoPreview.postion */ + value: videoPreview.postion live: true onMoved: videoPreview.seek(value); }