[vlc-commits] [Git][videolan/vlc][master] 6 commits: qml: Add VideoGridDisplay component

Steve Lhomme (@robUx4) gitlab at videolan.org
Mon Oct 9 18:29:28 UTC 2023



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
b5a8bd3d by Leon Vitanos at 2023-10-09T18:05:14+00:00
qml: Add VideoGridDisplay component

- - - - -
49a9a151 by Leon Vitanos at 2023-10-09T18:05:14+00:00
qml: Fix positioning issues/warnings on the Video page

- - - - -
68135259 by Leon Vitanos at 2023-10-09T18:05:14+00:00
qml: Implementation of "See All"

- - - - -
f2aac26e by Leon Vitanos at 2023-10-09T18:05:14+00:00
qml: Replace KeyNavigableView with VideoAll, which adds tableview functionality

- - - - -
d8e7786a by Leon Vitanos at 2023-10-09T18:05:14+00:00
qml: remove obsolete code for labels

- - - - -
bc152ad9 by Leon Vitanos at 2023-10-09T18:05:14+00:00
qml: Slight refactoring and fix missing translation

- - - - -


12 changed files:

- modules/gui/qt/Makefile.am
- modules/gui/qt/medialibrary/qml/MediaGroupDisplay.qml
- modules/gui/qt/medialibrary/qml/VideoAll.qml
- modules/gui/qt/medialibrary/qml/VideoAllDisplay.qml
- modules/gui/qt/medialibrary/qml/VideoAllSubDisplay.qml
- + modules/gui/qt/medialibrary/qml/VideoGridDisplay.qml
- modules/gui/qt/medialibrary/qml/VideoGridItem.qml
- modules/gui/qt/medialibrary/qml/VideoListDisplay.qml
- modules/gui/qt/medialibrary/qml/VideoDisplayRecentVideos.qml → modules/gui/qt/medialibrary/qml/VideoRecentVideos.qml
- + modules/gui/qt/medialibrary/qml/VideoRecentVideosDisplay.qml
- modules/gui/qt/vlc.qrc
- po/POTFILES.in


Changes:

=====================================
modules/gui/qt/Makefile.am
=====================================
@@ -878,10 +878,12 @@ libqt_plugin_la_QML = \
 	gui/qt/medialibrary/qml/PlaylistMedia.qml \
 	gui/qt/medialibrary/qml/PlaylistMediaDisplay.qml \
 	gui/qt/medialibrary/qml/VideoPlaylistsDisplay.qml \
-	gui/qt/medialibrary/qml/VideoDisplayRecentVideos.qml \
+        gui/qt/medialibrary/qml/VideoRecentVideos.qml \
+        gui/qt/medialibrary/qml/VideoRecentVideosDisplay.qml \
 	gui/qt/medialibrary/qml/VideoGridItem.qml \
 	gui/qt/medialibrary/qml/VideoInfoExpandPanel.qml \
 	gui/qt/medialibrary/qml/VideoListDisplay.qml \
+        gui/qt/medialibrary/qml/VideoGridDisplay.qml \
 	gui/qt/menus/qml/GlobalShortcuts.qml \
 	gui/qt/menus/qml/GlobalShortcutsMedialib.qml \
 	gui/qt/menus/qml/Menubar.qml \


=====================================
modules/gui/qt/medialibrary/qml/MediaGroupDisplay.qml
=====================================
@@ -54,7 +54,7 @@ VideoAll {
 
         // NOTE: We want this to be properly aligned with the grid items.
         leftPadding: root.contentMargin
-
+        topPadding: VLCStyle.margin_large
         bottomPadding: VLCStyle.margin_normal
 
         text: root.title


=====================================
modules/gui/qt/medialibrary/qml/VideoAll.qml
=====================================
@@ -98,9 +98,6 @@ MainInterface.MainViewLoader {
         History.push(["player"])
     }
 
-    function onLabelGrid(object) { return getLabel(object) }
-    function onLabelList(object) { return getLabel(object) }
-
     // Private events
 
     function _onNavigationUp() {
@@ -126,23 +123,22 @@ MainInterface.MainViewLoader {
     Component {
         id: grid
 
-        MainInterface.MainGridView {
+        VideoGridDisplay {
             id: gridView
 
             // Settings
 
-            cellWidth : VLCStyle.gridItem_video_width
-            cellHeight: VLCStyle.gridItem_video_height
-
-            topMargin: VLCStyle.margin_normal
-
             model: root.model
 
             selectionDelegateModel: selectionModel
 
             headerDelegate: root.header
 
-            activeFocusOnTab: true
+            dragItem: root.dragItem
+
+            contextMenu: root.contextMenu
+
+            labels: root.gridLabels
 
             // Navigation
 
@@ -150,96 +146,17 @@ MainInterface.MainViewLoader {
 
             Navigation.upAction: _onNavigationUp
 
-            // Events
-
-            // NOTE: Define the initial position and selection. This is done on activeFocus rather
-            //       than Component.onCompleted because selectionModel.selectedGroup update itself
-            //       after this event.
-            onActiveFocusChanged: {
-                if (activeFocus == false || model.count === 0 || selectionModel.hasSelection)
-                    return;
-
-                resetFocus() // restores initialIndex
-            }
-
-            onActionAtIndex: root.onAction(selectionModel.selectedIndexes)
-
-            // Connections
-
-            Connections {
-                target: root.contextMenu
-
-                onShowMediaInformation: {
-                    gridView.switchExpandItem(index)
-
-                    if (gridView.focus)
-                        expandItem.setCurrentItemFocus(Qt.TabFocusReason)
-                }
-            }
-
-            // Children
-
-            delegate: VideoGridItem {
-                id: gridItem
-
-                // properties required by ExpandGridView
-
-                property var model: ({})
-                property int index: -1
-
-                // Settings
-
-                opacity: (gridView.expandIndex !== -1
-                          &&
-                          gridView.expandIndex !== gridItem.index) ? 0.7 : 1
-
-               labels: root.gridLabels(model)
-
-                // FIXME: Sometimes MLBaseModel::getDataAt returns {} so we use 'isNew === true'.
-                showNewIndicator: (model.isNew === true)
-
-                dragItem: root.dragItem
-
-                // Events
-
-                onItemClicked: gridView.leftClickOnItem(modifier, index)
-
-                onItemDoubleClicked: root.onDoubleClick(model)
-
-                onContextMenuButtonClicked: {
-                    gridView.rightClickOnItem(index);
-
-                    const options = {}
-                    if (root.isInfoExpandPanelAvailable(model))
-                        options["information"] = index
-
-                    root.contextMenu.popup(selectionModel.selectedIndexes, globalMousePos, options);
-                }
-
-                // Animations
+            // Functions
 
-                Behavior on opacity { NumberAnimation { duration: VLCStyle.duration_short } }
+            function isInfoExpandPanelAvailable(modelIndexData) {
+                return root.isInfoExpandPanelAvailable(modelIndexData)
             }
 
-            expandDelegate: VideoInfoExpandPanel {
-                width: gridView.width
-
-                x: 0
-
-                model: root.model
-
-                Navigation.parentItem: gridView
-
-                Navigation.cancelAction: gridView.forceFocus
-                Navigation.upAction: gridView.forceFocus
-                Navigation.downAction: gridView.forceFocus
+            // Events
 
-                onRetract: gridView.retract()
-            }
+            onActionAtIndex: root.onAction(selectionModel.selectedIndexes)
 
-            function forceFocus() {
-                setCurrentItemFocus(Qt.TabFocus)
-            }
+            onItemDoubleClicked: root.onDoubleClick(model)
         }
     }
 
@@ -259,8 +176,6 @@ MainInterface.MainViewLoader {
 
             header: root.header
 
-            topMargin: VLCStyle.margin_normal
-
             headerPositioning: ListView.InlineHeader
 
             activeFocusOnTab: true
@@ -284,10 +199,6 @@ MainInterface.MainViewLoader {
             onRightClick: root.contextMenu.popup(selectionModel.selectedIndexes, globalMousePos)
 
             coverLabels: root.listLabels
-
-            // Functions
-
-            function onLabels(model) { return root.onLabelList(model); }
         }
     }
 


=====================================
modules/gui/qt/medialibrary/qml/VideoAllDisplay.qml
=====================================
@@ -44,6 +44,9 @@ Widgets.PageLoader {
     }, {
         name: "group",
         component: componentGroup
+    }, {
+        name: "recentVideos",
+        component: componentRecentVideos
     }]
 
     loadDefaultView: function () {
@@ -96,8 +99,6 @@ Widgets.PageLoader {
         MediaGroupDisplay {
             id: group
 
-            anchors.fill: parent
-
             onCurrentIndexChanged: root._updateHistoryGroup(group)
             onParentIdChanged    : root._updateHistoryGroup(group)
             onTitleChanged       : root._updateHistoryGroup(group)
@@ -107,4 +108,15 @@ Widgets.PageLoader {
             }
         }
     }
+
+    Component {
+        id: componentRecentVideos
+
+        VideoRecentVideosDisplay {
+            function isInfoExpandPanelAvailable(/* modelIndexData */) {
+                return true
+            }
+        }
+    }
+
 }


=====================================
modules/gui/qt/medialibrary/qml/VideoAllSubDisplay.qml
=====================================
@@ -50,8 +50,6 @@ VideoAll {
 
     // Settings
 
-    anchors.fill: parent
-
     model: !!_meta ? _meta.model : null
 
     contextMenu: Util.MLContextMenu { model: _meta ? _meta.model : null; showPlayAsAudioAction: true }
@@ -252,20 +250,16 @@ VideoAll {
         }
     }
 
-    header: VideoDisplayRecentVideos {
-        width: root.width - displayMarginBeginning - displayMarginEnd
-
-        x: displayMarginBeginning
+    header: VideoRecentVideos {
+        width: root.width
 
         // spacing between header and content
         bottomPadding: VLCStyle.margin_normal
+        leftPadding: root.leftPadding
+        rightPadding: root.rightPadding
 
         subtitleText: (root.model && root.model.count > 0) ? I18n.qtr("Videos") : ""
 
-        // NOTE: We want grid items to be visible on the sides.
-        displayMarginBeginning: root.contentMargin
-        displayMarginEnd: displayMarginBeginning
-
         Navigation.parentItem: root
 
         Navigation.downAction: function() {


=====================================
modules/gui/qt/medialibrary/qml/VideoGridDisplay.qml
=====================================
@@ -0,0 +1,147 @@
+/*****************************************************************************
+ * Copyright (C) 2023 VLC authors and VideoLAN
+ *
+ * Authors: Leon Vitanos <leon.vitanos at gmail.com>
+ *
+ * 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.12
+import QtQuick.Controls 2.12
+import QtQml.Models 2.12
+
+import org.videolan.vlc 0.1
+import org.videolan.medialib 0.1
+
+import "qrc:///main/" as MainInterface
+import "qrc:///util" as Util
+import "qrc:///widgets/" as Widgets
+import "qrc:///style/"
+
+MainInterface.MainGridView {
+    id: gridView
+
+    // Properties
+
+    property Widgets.MLDragItem dragItem
+    property Util.MLContextMenu contextMenu
+    property var labels
+
+    // Signals
+
+    signal itemDoubleClicked(var model)
+
+    // Settings
+
+    cellWidth : VLCStyle.gridItem_video_width
+    cellHeight: VLCStyle.gridItem_video_height
+
+    activeFocusOnTab: true
+
+    // Functions
+
+    // reimplement function to show "Info Panel" in grid view for the model index data
+    function isInfoExpandPanelAvailable(modelIndexData) {
+        return false
+    }
+
+    // Events
+
+    // NOTE: Define the initial position and selection. This is done on activeFocus rather
+    //       than Component.onCompleted because selectionModel.selectedGroup update itself
+    //       after this event.
+    onActiveFocusChanged: {
+        if (!activeFocus || model.count === 0 || selectionModel.hasSelection)
+            return;
+
+        resetFocus() // restores initialIndex
+    }
+
+    // Connections
+
+    Connections {
+        target: gridView.contextMenu
+
+        onShowMediaInformation: {
+            gridView.switchExpandItem(index)
+
+            if (gridView.focus)
+                expandItem.setCurrentItemFocus(Qt.TabFocusReason)
+        }
+    }
+
+    // Children
+
+    delegate: VideoGridItem {
+        id: gridItem
+
+        // Properties
+
+        /* required */ property var model: ({})
+        /* required */ property int index: -1
+
+        // Settings
+
+        opacity: (gridView.expandIndex !== -1
+                  &&
+                  gridView.expandIndex !== gridItem.index) ? 0.7 : 1
+
+        // FIXME: Sometimes MLBaseModel::getDataAt returns {} so we use 'isNew === true'.
+        showNewIndicator: (model.isNew === true)
+
+        dragItem: gridView.dragItem
+
+        labels: gridView.labels(model)
+
+        // Events
+
+        onItemClicked: gridView.leftClickOnItem(modifier, index)
+
+        onItemDoubleClicked: gridView.itemDoubleClicked(model)
+
+        onContextMenuButtonClicked: {
+            gridView.rightClickOnItem(index);
+
+            const options = {}
+            if (gridView.isInfoExpandPanelAvailable(model))
+                options["information"] = index
+
+            gridView.contextMenu.popup(selectionModel.selectedIndexes, globalMousePos, options);
+        }
+
+        // Animations
+
+        Behavior on opacity { NumberAnimation { duration: VLCStyle.duration_short } }
+    }
+
+    expandDelegate: VideoInfoExpandPanel {
+        x: 0
+
+        width: gridView.width
+
+        model: gridView.model
+
+        Navigation.parentItem: gridView
+
+        Navigation.cancelAction: gridView.forceFocus
+        Navigation.upAction: gridView.forceFocus
+        Navigation.downAction: gridView.forceFocus
+
+        onRetract: gridView.retract()
+    }
+
+    function forceFocus() {
+        setCurrentItemFocus(Qt.TabFocus)
+    }
+}


=====================================
modules/gui/qt/medialibrary/qml/VideoGridItem.qml
=====================================
@@ -29,10 +29,7 @@ Widgets.GridItem {
 
     property alias showNewIndicator: image.visible
     
-    property var labels: [
-        model.resolution_name || "",
-        model.channel || ""
-    ].filter(function(a) { return a !== "" })
+    property var labels
 
     function play() {
         if ( model.id !== undefined ) {


=====================================
modules/gui/qt/medialibrary/qml/VideoListDisplay.qml
=====================================
@@ -37,7 +37,7 @@ MainInterface.MainTableView {
     // NOTE: This is useful for groups because our main criteria is 'name' instead of 'title'.
     property string mainCriteria: "title"
 
-    property alias coverLabels: tableColumns.titlecoverLabels
+    property var coverLabels
 
     //---------------------------------------------------------------------------------------------
     // Private
@@ -115,22 +115,6 @@ MainInterface.MainTableView {
 
     rowHeight: VLCStyle.tableCoverRow_height
 
-    //---------------------------------------------------------------------------------------------
-    // Functions
-    //---------------------------------------------------------------------------------------------
-    // Events
-
-    function onLabels(model)
-    {
-        if (model === null)
-            return [];
-
-        return [
-            model.resolution_name || "",
-            model.channel         || ""
-        ].filter(function(a) { return a !== "" });
-    }
-
     //---------------------------------------------------------------------------------------------
     // Childs
     //---------------------------------------------------------------------------------------------
@@ -147,6 +131,6 @@ MainInterface.MainTableView {
         titleCover_width: VLCStyle.listAlbumCover_width
         titleCover_radius: VLCStyle.listAlbumCover_radius
 
-        titlecoverLabels: listView_id.onLabels
+        titlecoverLabels: listView_id.coverLabels
     }
 }


=====================================
modules/gui/qt/medialibrary/qml/VideoDisplayRecentVideos.qml → modules/gui/qt/medialibrary/qml/VideoRecentVideos.qml
=====================================
@@ -17,6 +17,7 @@
  *****************************************************************************/
 import QtQuick 2.12
 import QtQuick.Controls 2.12
+import QtQuick.Layouts 1.12
 import QtQml.Models 2.12
 
 import org.videolan.medialib 0.1
@@ -32,39 +33,28 @@ FocusScope {
 
     // Aliases
 
-    property alias bottomPadding: recentVideosColumn.bottomPadding
-
-    property alias displayMarginBeginning: listView.displayMarginBeginning
-    property alias displayMarginEnd: listView.displayMarginEnd
-
-    property alias subtitleText : subtitleLabel.text
+    property alias subtitleText: subtitleLabel.text
 
     // Settings
 
-    implicitHeight: recentVideosColumn.height
-
-    focus: listView.count > 0
-
-    // Functions
+    property int bottomPadding: recentVideosColumn.bottomPadding
+    property int leftPadding: VLCStyle.margin_xsmall
+    property int rightPadding: VLCStyle.margin_xsmall
 
-    function _play(id) {
-        MediaLib.addAndPlay( id, [":restore-playback-pos=2"] )
-        History.push(["player"])
-    }
+    implicitHeight: recentVideosColumn.height
 
-    function _playIndex(idx) {
-        recentModel.addAndPlay( [idx], [":restore-playback-pos=2"] )
-        History.push(["player"])
-    }
+    focus: recentModel.count > 0
 
     // Childs
 
-    Util.MLContextMenu {
-        id: contextMenu
+    MLRecentsVideoModel {
+        id: recentModel
 
-        model: listView.model
+        ml: MediaLib
 
-        showPlayAsAudioAction: true
+        limit: MainCtx.gridView ? view.currentItem.nbItemPerRow ?
+                                              view.currentItem.nbItemPerRow : 0
+                                : 5
     }
 
     readonly property ColorContext colorContext: ColorContext {
@@ -77,103 +67,77 @@ FocusScope {
 
         width: root.width
 
+        topPadding: VLCStyle.margin_large
+
         spacing: VLCStyle.margin_normal
 
-        Widgets.SubtitleLabel {
-            text: I18n.qtr("Continue Watching")
+        bottomPadding: root.bottomPadding
 
-            // NOTE: Setting this to listView.visible seems to causes unnecessary implicitHeight
-            //       calculations in the Column parent.
-            visible: listView.count > 0
-            color: theme.fg.primary
-        }
+        RowLayout {
+            anchors.left: parent.left
+            anchors.right: parent.right
 
-        Widgets.KeyNavigableListView {
-            id: listView
+            anchors.leftMargin: view.currentItem.contentLeftMargin
+            anchors.rightMargin: view.currentItem.contentRightMargin
 
-            width: parent.width
+            Widgets.SubtitleLabel {
+                id: label
 
-            implicitHeight: VLCStyle.gridItem_video_height + VLCStyle.gridItemSelectedBorder
-                            +
-                            VLCStyle.margin_xlarge
+                Layout.fillWidth: true
 
-            spacing: VLCStyle.column_spacing
+                text: I18n.qtr("Continue Watching")
 
-            // NOTE: We want navigation buttons to be centered on the item cover.
-            buttonMargin: VLCStyle.margin_xsmall + VLCStyle.gridCover_video_height / 2 - buttonLeft.height / 2
+                // NOTE: Setting this to gridView.visible seems to causes unnecessary implicitHeight
+                //       calculations in the Column parent.
+                visible: recentModel.count > 0
+                color: theme.fg.primary
+            }
+
+            Widgets.TextToolButton {
+                id: button
 
-            orientation: ListView.Horizontal
+                visible: recentModel.maximumCount > recentModel.count
 
-            focus: true
+                Layout.preferredWidth: implicitWidth
 
-            // NOTE: We want a gentle fade at the beginning / end of the history.
-            enableFade: true
+                focus: true
 
-            Navigation.parentItem: root
+                text: I18n.qtr("See All")
 
-            visible: listView.count > 0
+                font.pixelSize: VLCStyle.fontSize_large
 
-            model: MLRecentsVideoModel {
-                id: recentModel
+                Navigation.parentItem: root
 
-                ml: MediaLib
-                limit: 10
+                onClicked: History.push(["mc", "video", "all", "recentVideos"]);
             }
+        }
 
-            delegate: VideoGridItem {
-                id: gridItem
+        VideoAll {
+            id: view
 
-                pictureWidth: VLCStyle.gridCover_video_width
-                pictureHeight: VLCStyle.gridCover_video_height
+            // Settings
 
-                selected: activeFocus
+            visible: recentModel.count > 0
 
-                focus: true
+            width: root.width
+            height: MainCtx.gridView ? VLCStyle.gridItem_video_height + VLCStyle.gridItemSelectedBorder + VLCStyle.margin_xlarge
+                                     : VLCStyle.margin_xxlarge + Math.min(recentModel.count, 5) * VLCStyle.tableCoverRow_height
 
-                onItemDoubleClicked: gridItem.play()
-
-                onItemClicked: {
-                    listView.currentIndex = index
-                    this.forceActiveFocus(Qt.MouseFocusReason)
-                }
-
-                // NOTE: contextMenu.popup wants a list of indexes.
-                onContextMenuButtonClicked: {
-                    contextMenu.popup([listView.model.index(index, 0)],
-                                      globalMousePos,
-                                      { "player-options": [":restore-playback-pos=2"] })
-                }
-
-                dragItem: Widgets.DragItem {
-                    coverRole: "thumbnail"
-
-                    indexes: [index]
-
-                    onRequestData: {
-                        resolve([model])
-                    }
-
-                    onRequestInputItems: {
-                        const idList = data.map((o) => o.id)
-                        MediaLib.mlInputItem(idList, resolve)
-                    }
-                }
-
-                Behavior on opacity {
-                    NumberAnimation {
-                        duration: VLCStyle.duration_short
-                    }
-                }
-
-                function play() {
-                    if (model.id !== undefined) {
-                        root._play(model.id)
-                    }
-                }
-            }
+            leftPadding: root.leftPadding
+            rightPadding: root.rightPadding
 
-            onActionAtIndex: {
-                root._playIndex(index)
+            focus: recentModel.count !== 0
+
+            model: recentModel
+
+            sectionProperty: ""
+
+            sortModel: []
+
+            contextMenu: Util.MLContextMenu {
+                model: recentModel
+
+                showPlayAsAudioAction: true
             }
         }
 
@@ -182,6 +146,9 @@ FocusScope {
 
             visible: text !== ""
             color: theme.fg.primary
+
+            leftPadding: view.currentItem.contentLeftMargin
+            rightPadding: view.currentItem.contentRightMargin
         }
     }
 }


=====================================
modules/gui/qt/medialibrary/qml/VideoRecentVideosDisplay.qml
=====================================
@@ -0,0 +1,60 @@
+/*****************************************************************************
+ * Copyright (C) 2023 VLC authors and VideoLAN
+ *
+ * Authors: Leon Vitanos <leon.vitanos at gmail.com>
+ *
+ * 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.12
+
+import org.videolan.vlc 0.1
+import org.videolan.medialib 0.1
+
+import "qrc:///widgets/" as Widgets
+import "qrc:///style/"
+import "qrc:///util/"    as Util
+import "qrc:///main/" as MainInterface
+
+VideoAll {
+    id: root
+
+    // Settings
+
+    sectionProperty: ""
+
+    sortModel: []
+
+    // Children
+
+    model: MLRecentsVideoModel {
+        id: recentModel
+        ml: MediaLib
+    }
+
+    contextMenu: Util.MLContextMenu { model: recentModel; showPlayAsAudioAction: true }
+
+    header: Widgets.SubtitleLabel {
+        width: root.width
+
+        // NOTE: We want this to be properly aligned with the grid items.
+        leftPadding: root.contentMargin
+        topPadding: VLCStyle.margin_large
+        bottomPadding: VLCStyle.margin_normal
+
+        text: I18n.qtr("Continue Watching")
+        color: root.colorContext.fg.primary
+    }
+}


=====================================
modules/gui/qt/vlc.qrc
=====================================
@@ -278,7 +278,9 @@
         <file alias="VideoListDisplay.qml">medialibrary/qml/VideoListDisplay.qml</file>
         <file alias="VideoGridItem.qml">medialibrary/qml/VideoGridItem.qml</file>
         <file alias="AudioGridItem.qml">medialibrary/qml/AudioGridItem.qml</file>
-        <file alias="VideoDisplayRecentVideos.qml">medialibrary/qml/VideoDisplayRecentVideos.qml</file>
+        <file alias="VideoRecentVideos.qml">medialibrary/qml/VideoRecentVideos.qml</file>
+        <file alias="VideoGridDisplay.qml">medialibrary/qml/VideoGridDisplay.qml</file>
+        <file alias="VideoRecentVideosDisplay.qml">medialibrary/qml/VideoRecentVideosDisplay.qml</file>
     </qresource>
     <qresource prefix="/style">
         <file alias="AcrylicController.qml">style/AcrylicController.qml</file>


=====================================
po/POTFILES.in
=====================================
@@ -810,11 +810,13 @@ modules/gui/qt/medialibrary/qml/VideoAll.qml
 modules/gui/qt/medialibrary/qml/VideoAllDisplay.qml
 modules/gui/qt/medialibrary/qml/VideoAllSubDisplay.qml
 modules/gui/qt/medialibrary/qml/VideoDisplay.qml
-modules/gui/qt/medialibrary/qml/VideoDisplayRecentVideos.qml
+modules/gui/qt/medialibrary/qml/VideoRecentVideos.qml
+modules/gui/qt/medialibrary/qml/VideoRecentVideosDisplay.qml
 modules/gui/qt/medialibrary/qml/VideoGridItem.qml
 modules/gui/qt/medialibrary/qml/VideoInfoExpandPanel.qml
 modules/gui/qt/medialibrary/qml/VideoListDisplay.qml
 modules/gui/qt/medialibrary/qml/VideoPlaylistsDisplay.qml
+modules/gui/qt/medialibrary/qml/VideoGridDisplay.qml
 modules/gui/qt/menus/custom_menus.cpp
 modules/gui/qt/menus/custom_menus.hpp
 modules/gui/qt/menus/menus.cpp



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/c5948089b9a8531544f2e9ce40b8e84a58dfa5f9...bc152ad969ac0713f4acece6cada03e5d63db417

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/c5948089b9a8531544f2e9ce40b8e84a58dfa5f9...bc152ad969ac0713f4acece6cada03e5d63db417
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list