[vlc-devel] [PATCH 18/18] qml: add URL tab under Discover group

Prince Gupta guptaprince8832 at gmail.com
Wed Sep 23 19:40:16 CEST 2020


---
 modules/gui/qt/Makefile.am                    |   1 +
 .../qt/medialibrary/qml/UrlListDisplay.qml    | 163 ++++++++++++++++++
 .../gui/qt/network/qml/DiscoverDisplay.qml    |   4 +
 modules/gui/qt/vlc.qrc                        |   1 +
 4 files changed, 169 insertions(+)
 create mode 100644 modules/gui/qt/medialibrary/qml/UrlListDisplay.qml

diff --git a/modules/gui/qt/Makefile.am b/modules/gui/qt/Makefile.am
index ecce218951..f775bbb5d1 100644
--- a/modules/gui/qt/Makefile.am
+++ b/modules/gui/qt/Makefile.am
@@ -627,6 +627,7 @@ libqt_plugin_la_QML = \
 	gui/qt/medialibrary/qml/MusicGenresDisplay.qml \
 	gui/qt/medialibrary/qml/MusicTrackListDisplay.qml \
 	gui/qt/medialibrary/qml/MusicTracksDisplay.qml \
+	gui/qt/medialibrary/qml/UrlListDisplay.qml \
 	gui/qt/medialibrary/qml/VideoDisplay.qml \
 	gui/qt/medialibrary/qml/VideoGridItem.qml \
 	gui/qt/medialibrary/qml/VideoInfoExpandPanel.qml \
diff --git a/modules/gui/qt/medialibrary/qml/UrlListDisplay.qml b/modules/gui/qt/medialibrary/qml/UrlListDisplay.qml
new file mode 100644
index 0000000000..3fee0a621f
--- /dev/null
+++ b/modules/gui/qt/medialibrary/qml/UrlListDisplay.qml
@@ -0,0 +1,163 @@
+
+/*****************************************************************************
+ * Copyright (C) 2020 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+import QtQuick 2.11
+import QtQuick.Controls 2.4
+import QtQml.Models 2.2
+
+import org.videolan.medialib 0.1
+
+import "qrc:///util" as Util
+import "qrc:///widgets/" as Widgets
+import "qrc:///util/KeyHelper.js" as KeyHelper
+import "qrc:///style/"
+
+Widgets.NavigableFocusScope {
+    id: root
+
+    MLUrlModel {
+        id: urlModel
+
+        ml: medialib
+    }
+
+    Util.SelectableDelegateModel {
+        id: selectionModel
+        model: urlModel
+    }
+
+    URLContextMenu {
+        id: contextMenu
+        model: urlModel
+    }
+
+    Column {
+        anchors.fill: parent
+
+        Item {
+            id: searchFieldContainer
+
+            width: root.width
+            height: searchField.height + VLCStyle.margin_normal * 2
+
+            TextField {
+                id: searchField
+
+                focus: true
+                anchors.centerIn: parent
+                height: VLCStyle.dp(32, VLCStyle.scale)
+                width: VLCStyle.colWidth(Math.max(VLCStyle.gridColumnsForWidth(root.width * .6), 2))
+                placeholderText: i18n.qtr("Paste or write the URL here")
+                color: VLCStyle.colors.text
+                font.pixelSize: VLCStyle.fontSize_large
+                background: Rectangle {
+                    color: VLCStyle.colors.bg
+                    border.width: VLCStyle.dp(2, VLCStyle.scale)
+                    border.color: searchField.activeFocus || searchField.hovered
+                                  ? VLCStyle.colors.accent
+                                  : VLCStyle.colors.setColorAlpha(VLCStyle.colors.text, .4)
+                }
+
+                onAccepted: {
+                    urlModel.addAndPlay(text)
+                }
+
+                Keys.onPressed: {
+                    if (event.accepted)
+                        return
+                    if (KeyHelper.matchUp(event)) {
+                        root.navigationUp()
+                        event.accepted = true
+                    } else if (KeyHelper.matchDown(event)) {
+                        listView_id.forceActiveFocus()
+                        event.accepted = true
+                    } else if (KeyHelper.matchLeft(event)) {
+                        root.navigationLeft()
+                        event.accepted = true
+                    } else if (KeyHelper.matchRight(event)) {
+                        root.navigationRight()
+                        event.accepted = true
+                    }
+                }
+            }
+        }
+
+
+        Widgets.KeyNavigableTableView {
+            id: listView_id
+
+            readonly property int _nbCols: VLCStyle.gridColumnsForWidth(
+                                               listView_id.availableRowWidth)
+            property Component urlHeaderDelegate: Widgets.IconLabel {
+                text: VLCIcons.history
+                color: VLCStyle.colors.caption
+            }
+
+            visible: urlModel.count > 0
+            width: parent.width
+            height: parent.height - searchFieldContainer.height
+            model: urlModel
+            selectionDelegateModel: selectionModel
+
+            sortModel: [{
+                    "isPrimary": true,
+                    "criteria": "url",
+                    "width": VLCStyle.colWidth(Math.max(listView_id._nbCols - 1,
+                                                        1)),
+                    "text": i18n.qtr("Url"),
+                    "showSection": "url",
+                    headerDelegate: urlHeaderDelegate
+                }, {
+                    "criteria": "last_played_date",
+                    "width": VLCStyle.colWidth(1),
+                    "showSection": "",
+                    "headerDelegate": tableColumns.timeHeaderDelegate,
+                    "showContextButton": true
+                }]
+
+            rowHeight: VLCStyle.listAlbumCover_height + VLCStyle.margin_xxsmall * 2
+            headerColor: VLCStyle.colors.bg
+            navigationUpItem: searchField
+            navigationParent: root
+
+            navigationLeft: function (index) {
+                if (isFocusOnContextButton)
+                    isFocusOnContextButton = false
+                else
+                    defaultNavigationLeft(index)
+            }
+            navigationRight: function (index) {
+                if (!isFocusOnContextButton)
+                    isFocusOnContextButton = true
+                else
+                    defaultNavigationRight(index)
+            }
+
+            onActionForSelection: medialib.addAndPlay(model.getIdsForIndexes(
+                                                          selection))
+
+            onContextMenuButtonClicked: contextMenu.popup(selectionModel.selectedIndexes, menuParent.mapToGlobal(0,0))
+            onRightClick: contextMenu.popup(selectionModel.selectedIndexes, globalMousePos)
+
+
+            Widgets.TableColumns {
+                id: tableColumns
+            }
+        }
+    }
+}
diff --git a/modules/gui/qt/network/qml/DiscoverDisplay.qml b/modules/gui/qt/network/qml/DiscoverDisplay.qml
index da7d7f0d22..c03a3e3ec5 100644
--- a/modules/gui/qt/network/qml/DiscoverDisplay.qml
+++ b/modules/gui/qt/network/qml/DiscoverDisplay.qml
@@ -68,6 +68,10 @@ Widgets.NavigableFocusScope {
             displayText: i18n.qtr("Services"),
             name: "services",
             url: "qrc:///network/ServicesHomeDisplay.qml"
+        }, {
+            displayText: i18n.qtr("URL"),
+            name: "url",
+            url: "qrc:/medialibrary/UrlListDisplay.qml"
         }
     ]
 
diff --git a/modules/gui/qt/vlc.qrc b/modules/gui/qt/vlc.qrc
index a15d56dfa1..ec13267124 100644
--- a/modules/gui/qt/vlc.qrc
+++ b/modules/gui/qt/vlc.qrc
@@ -257,6 +257,7 @@
         <file alias="MusicTrackListDisplay.qml">medialibrary/qml/MusicTrackListDisplay.qml</file>
         <file alias="ArtistTopBanner.qml">medialibrary/qml/ArtistTopBanner.qml</file>
         <file alias="MainDisplay.qml">medialibrary/qml/MainDisplay.qml</file>
+        <file alias="UrlListDisplay.qml">medialibrary/qml/UrlListDisplay.qml</file>
         <file alias="VideoInfoExpandPanel.qml">medialibrary/qml/VideoInfoExpandPanel.qml</file>
         <file alias="VideoListDisplay.qml">medialibrary/qml/VideoListDisplay.qml</file>
         <file alias="VideoGridItem.qml">medialibrary/qml/VideoGridItem.qml</file>
-- 
2.25.1



More information about the vlc-devel mailing list