[vlc-devel] [PATCH 23/49] qml: update Network contextual actions
Pierre Lamot
pierre at videolabs.io
Fri Oct 11 15:17:47 CEST 2019
action can now operate on the selection
---
.../qt/qml/mediacenter/MCNetworkDisplay.qml | 54 ++++++++++++-------
.../MCNetworksSectionSelectableDM.qml | 42 +++++++++++----
2 files changed, 68 insertions(+), 28 deletions(-)
diff --git a/modules/gui/qt/qml/mediacenter/MCNetworkDisplay.qml b/modules/gui/qt/qml/mediacenter/MCNetworkDisplay.qml
index 6333489603..0ef1f6ba9f 100644
--- a/modules/gui/qt/qml/mediacenter/MCNetworkDisplay.qml
+++ b/modules/gui/qt/qml/mediacenter/MCNetworkDisplay.qml
@@ -32,40 +32,56 @@ Utils.NavigableFocusScope {
property alias tree: providerModel.tree
Utils.MenuExt {
id: contextMenu
+ property var delegateModel: undefined
property var model: ({})
- property bool isIndexible: !contextMenu.model ? false : Boolean(contextMenu.model.can_index)
- property bool isFileType: !contextMenu.model ? false : contextMenu.model.type === MLNetworkModel.TYPE_FILE
closePolicy: Popup.CloseOnReleaseOutside | Popup.CloseOnEscape
focus:true
Instantiator {
id: instanciator
- function perform(id){
- switch(id){
- case 0: console.log("not implemented"); break;
- case 1: contextMenu.model.indexed = !contextMenu.model.indexed; break;
- default: console.log("unknown id:",id)
+ property var modelActions: {
+ "play": function() {
+ if (delegateModel) {
+ delegateModel.playSelection()
+ }
+ contextMenu.close()
+ },
+ "enqueue": function() {
+ if (delegateModel)
+ delegateModel.enqueueSelection()
+ contextMenu.close()
+ },
+ "index": function(index) {
+ contextMenu.model.indexed = contextMenu.model.indexed
+ contextMenu.close()
}
- contextMenu.close()
}
- model: [
- {
- active: contextMenu.isFileType,
- text: qsTr("Play all"),
- performId: 0
- },
- {
- active: contextMenu.isIndexible,
- text: !contextMenu.model ? "" : contextMenu.model.indexed ? qsTr("Unindex") : qsTr("Index") ,
- performId: 1
+
+ model: [{
+ active: true,
+ text: qsTr("Play"),
+ action: "play"
+ }, {
+ active: true,
+ text: qsTr("Enqueue"),
+ action: "enqueue"
+ }, {
+ active: contextMenu.model && !!contextMenu.model.can_index,
+ text: contextMenu.model && contextMenu.model.indexed ? qsTr("Unindex") : qsTr("Index"),
+ action: "index"
}
]
+
onObjectAdded: model[index].active && contextMenu.insertItem( index, object )
onObjectRemoved: model[index].active && contextMenu.removeItem( object )
delegate: Utils.MenuItemExt {
focus: true
text: modelData.text
- onTriggered: instanciator.perform(modelData.performId)
+ onTriggered: {
+ if (modelData.action && instanciator.modelActions[modelData.action]) {
+ instanciator.modelActions[modelData.action]()
+ }
+ }
}
}
diff --git a/modules/gui/qt/qml/mediacenter/MCNetworksSectionSelectableDM.qml b/modules/gui/qt/qml/mediacenter/MCNetworksSectionSelectableDM.qml
index 3bc5d3dc6d..bd9f0b5c63 100644
--- a/modules/gui/qt/qml/mediacenter/MCNetworksSectionSelectableDM.qml
+++ b/modules/gui/qt/qml/mediacenter/MCNetworksSectionSelectableDM.qml
@@ -51,6 +51,7 @@ Utils.SelectableDelegateModel {
onContextMenuButtonClicked: {
contextMenu.model = model
+ contextMenu.delegateModel = delegateModel
contextMenu.popup(menuParent)
}
}
@@ -75,6 +76,7 @@ Utils.SelectableDelegateModel {
onContextMenuButtonClicked: {
contextMenu.model = model
+ contextMenu.delegateModel = delegateModel
contextMenu.popup(menuParent)
}
@@ -84,22 +86,44 @@ Utils.SelectableDelegateModel {
}
+ function switchIndex() {
+ var list = []
+ for (var i = 0; i < delegateModel.selectedGroup.count; i++) {
+ var obj = delegateModel.selectedGroup.get(i)
+ if (obj.model.can_index) {
+ console.log("index", obj.model.mrl, obj.model.indexed)
+ obj.model.indexed = !obj.model.indexed
+ }
+ }
+ }
+
+ function playSelection() {
+ var list = []
+ for (var i = 0; i < delegateModel.selectedGroup.count; i++) {
+ var mrl = delegateModel.selectedGroup.get(i).model.mrl;
+ list.push(mrl)
+ }
+ medialib.addAndPlay( list )
+ }
+
+ function enqueueSelection() {
+ var list = []
+ for (var i = 0; i < delegateModel.selectedGroup.count; i++) {
+ var mrl = delegateModel.selectedGroup.get(i).model.mrl;
+ list.push(mrl)
+ }
+ medialib.addToPlaylist( list )
+ }
+
function actionAtIndex(index) {
if ( delegateModel.selectedGroup.count > 1 ) {
- var list = []
- for (var i = 0; i < delegateModel.selectedGroup.count; i++) {
- var type = delegateModel.selectedGroup.get(i).model.type;
- var mrl = delegateModel.selectedGroup.get(i).model.mrl;
- if (type == MLNetworkModel.TYPE_FILE)
- list.push(mrl)
- }
- medialib.addAndPlay( list )
+ playSelection()
} else {
if (delegateModel.items.get(index).model.type === MLNetworkModel.TYPE_DIRECTORY
|| delegateModel.items.get(index).model.type === MLNetworkModel.TYPE_NODE) {
history.push(["mc", "network", { tree: delegateModel.items.get(index).model.tree }], History.Go);
} else {
- medialib.addAndPlay( delegateModel.items.get(index).model.mrl );
+ playSelection()
}
}
}
--
2.20.1
More information about the vlc-devel
mailing list