[vlc-commits] qml: add contextMenu
Abel Tesfaye
git at videolan.org
Tue Jul 30 17:57:06 CEST 2019
vlc | branch: master | Abel Tesfaye <Abeltesfaye45 at gmail.com> | Thu Jul 25 14:38:27 2019 +0300| [abe3929e5e0213060593ec098543a70bc2bc33d4] | committer: Jean-Baptiste Kempf
qml: add contextMenu
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=abe3929e5e0213060593ec098543a70bc2bc33d4
---
modules/gui/qt/qml/dialogs/ModalDialog.qml | 4 +-
modules/gui/qt/qml/mediacenter/MCVideoDisplay.qml | 103 +++++++++++++++++-----
modules/gui/qt/qml/utils/GridItem.qml | 44 +++++++--
3 files changed, 122 insertions(+), 29 deletions(-)
diff --git a/modules/gui/qt/qml/dialogs/ModalDialog.qml b/modules/gui/qt/qml/dialogs/ModalDialog.qml
index 95178b6d7f..5e6ddcf317 100644
--- a/modules/gui/qt/qml/dialogs/ModalDialog.qml
+++ b/modules/gui/qt/qml/dialogs/ModalDialog.qml
@@ -31,8 +31,8 @@ Dialog {
focus: true
modal: true
- x: (rootWindow.width - width) / 2
- y: (rootWindow.height - height) / 2
+ x: (rootWindow.x + rootWindow.width - width) / 2
+ y: (rootWindow.y + rootWindow.height - height) / 2
padding: VLCStyle.margin_normal
margins: VLCStyle.margin_large
diff --git a/modules/gui/qt/qml/mediacenter/MCVideoDisplay.qml b/modules/gui/qt/qml/mediacenter/MCVideoDisplay.qml
index 6ffdb82e33..abf8807b3b 100644
--- a/modules/gui/qt/qml/mediacenter/MCVideoDisplay.qml
+++ b/modules/gui/qt/qml/mediacenter/MCVideoDisplay.qml
@@ -22,6 +22,7 @@ import QtQml.Models 2.2
import org.videolan.medialib 0.1
import "qrc:///utils/" as Utils
+import "qrc:///dialogs/" as DG
import "qrc:///style/"
Utils.NavigableFocusScope {
@@ -29,6 +30,58 @@ Utils.NavigableFocusScope {
property alias model: delegateModel.model
+ DG.ModalDialog {
+ id: deleteDialog
+ rootWindow: root
+ title: qsTr("Are you sure you want to delete?")
+ standardButtons: Dialog.Yes | Dialog.No
+
+ onAccepted: console.log("Ok clicked")
+ onRejected: console.log("Cancel clicked")
+ }
+
+ Utils.MenuExt {
+ id: contextMenu
+ property var model: ({})
+ closePolicy: Popup.CloseOnReleaseOutside | Popup.CloseOnEscape
+
+ Utils.MenuItemExt {
+ id: playMenuItem
+ text: "Play from start"
+ onTriggered: medialib.addAndPlay( contextMenu.model.id )
+ }
+ Utils.MenuItemExt {
+ text: "Play all"
+ onTriggered: console.log("not implemented")
+ }
+ Utils.MenuItemExt {
+ text: "Play as audio"
+ onTriggered: console.log("not implemented")
+ }
+ Utils.MenuItemExt {
+ text: "Enqueue"
+ onTriggered: medialib.addToPlaylist( contextMenu.model.id )
+ }
+ Utils.MenuItemExt {
+ text: "Information"
+ onTriggered: console.log("not implemented")
+ }
+ Utils.MenuItemExt {
+ text: "Download subtitles"
+ onTriggered: console.log("not implemented")
+ }
+ Utils.MenuItemExt {
+ text: "Add to playlist"
+ onTriggered: console.log("not implemented")
+ }
+ Utils.MenuItemExt {
+ text: "Delete"
+ onTriggered: deleteDialog.open()
+ }
+
+ onClosed: contextMenu.parent.forceActiveFocus()
+
+ }
Utils.SelectableDelegateModel {
id: delegateModel
model: MLVideoModel {
@@ -50,14 +103,24 @@ Utils.NavigableFocusScope {
progress: Math.max(model.saved_position,0)
onItemClicked : {
- delegateModel.updateSelection( modifier , view.currentItem.currentIndex, index)
- view.currentItem.currentIndex = index
- view.currentItem.forceActiveFocus()
+ if (key == Qt.RightButton){
+ contextMenu.model = model
+ contextMenu.popup()
+ }
+ else {
+ delegateModel.updateSelection( modifier , view.currentItem.currentIndex, index)
+ view.currentItem.currentIndex = index
+ view.currentItem.forceActiveFocus()
+ }
}
onPlayClicked: medialib.addAndPlay( model.id )
onAddToPlaylistClicked : medialib.addToPlaylist( model.id )
- }
+ onContextMenuButtonClicked:{
+ contextMenu.model = model;
+ contextMenu.popup(menuParent,contextMenu.width,0,playMenuItem)
+ }
+ }
Utils.ListItem {
Package.name: "list"
width: root.width
@@ -107,7 +170,6 @@ Utils.NavigableFocusScope {
Component {
id: gridComponent
-
Utils.KeyNavigableGridView {
id: gridView_id
@@ -194,27 +256,24 @@ Utils.NavigableFocusScope {
}
}
- Utils.StackViewExt {
- id: view
-
- anchors.fill: parent
- anchors.margins: VLCStyle.margin_normal
+ Utils.StackViewExt {
+ id: view
- focus: true
+ anchors.fill: root
- initialItem: medialib.gridView ? gridComponent : listComponent
-
- Connections {
- target: medialib
- onGridViewChanged: {
- if (medialib.gridView)
- view.replace(gridComponent)
- else
- view.replace(listComponent)
+ focus: true
+ initialItem: medialib.gridView ? gridComponent : listComponent
+ Connections {
+ target: medialib
+ onGridViewChanged: {
+ if (medialib.gridView)
+ view.replace(gridComponent)
+ else
+ view.replace(listComponent)
+ }
}
- }
- }
+ }
Label {
anchors.centerIn: parent
visible: delegateModel.items.count === 0
diff --git a/modules/gui/qt/qml/utils/GridItem.qml b/modules/gui/qt/qml/utils/GridItem.qml
index f6a5656a65..6bb90d9e3c 100644
--- a/modules/gui/qt/qml/utils/GridItem.qml
+++ b/modules/gui/qt/qml/utils/GridItem.qml
@@ -45,9 +45,11 @@ Rectangle {
signal playClicked
signal addToPlaylistClicked
- signal itemClicked(int keys, int modifier)
+ signal itemClicked(int key, int modifier)
signal itemDoubleClicked(int keys, int modifier)
+ signal contextMenuButtonClicked(Item menuParent)
+
Rectangle {
id: gridItem
x: shiftX
@@ -58,12 +60,12 @@ Rectangle {
MouseArea {
id: mouseArea
hoverEnabled: true
- onClicked: {
- root.itemClicked(mouse.buttons, mouse.modifiers)
- }
+ onClicked: root.itemClicked(mouse.button, mouse.modifiers)
onDoubleClicked: root.itemDoubleClicked(mouse.buttons, mouse.modifiers);
width: childrenRect.width
height: childrenRect.height
+ acceptedButtons: Qt.RightButton | Qt.LeftButton
+ Keys.onMenuPressed: root.contextMenuButtonClicked(cover_bg)
Item {
id: picture
@@ -157,7 +159,6 @@ Rectangle {
}
}
}
-
ProgressBar {
id: progressBar
value: root.progress
@@ -181,6 +182,39 @@ Rectangle {
}
}
+ Button {
+ id: contextButton
+ visible: isVideo
+ anchors {
+ top:cover.top
+ right:cover.right
+ }
+ width: VLCStyle.icon_normal
+ height: VLCStyle.icon_normal
+ text: "\u22ef" //ellipsis icon
+ font.pointSize: VLCStyle.fontMetrics_normal
+
+ hoverEnabled: true
+ onClicked: root.contextMenuButtonClicked(cover_bg)
+ background: Rectangle {
+ id: contextButtonRect
+ anchors.fill: contextButton
+ color: "transparent"
+ }
+ contentItem: Text {
+ id: btnTxt
+ text: contextButton.text
+ font: contextButton.font
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ // layer.enabled: true
+ // layer.effect: DropShadow {
+ // color: VLCStyle.colors.text
+ // }
+
+ }
+ }
states: [
State {
name: "visible"
More information about the vlc-commits
mailing list