vlc | branch: master | Fatih Uzunoglu <[email protected]> | Fri Oct 9 19:56:38 2020 +0300| [0a5ed1035db94b15ea2c6b8d4ddf8eca0bd32e5e] | committer: Pierre Lamot
qml: adapt new sort behavior to playlist overlay menu > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0a5ed1035db94b15ea2c6b8d4ddf8eca0bd32e5e --- modules/gui/qt/playlist/qml/PlaylistListView.qml | 127 ++++++++++++++++------- modules/gui/qt/playlist/qml/PlaylistMenu.qml | 61 +++++++++-- modules/gui/qt/playlist/qml/PlaylistToolbar.qml | 4 +- 3 files changed, 139 insertions(+), 53 deletions(-) diff --git a/modules/gui/qt/playlist/qml/PlaylistListView.qml b/modules/gui/qt/playlist/qml/PlaylistListView.qml index c99b5577f5..b833e42168 100644 --- a/modules/gui/qt/playlist/qml/PlaylistListView.qml +++ b/modules/gui/qt/playlist/qml/PlaylistListView.qml @@ -45,6 +45,18 @@ Widgets.NavigableFocusScope { VLCColors {id: vlcNightColors; state: "night"} + function sortPL(key) { + if (mainPlaylistController.sortKey !== key) { + mainPlaylistController.setSortOrder(PlaylistControllerModel.SORT_ORDER_ASC) + mainPlaylistController.setSortKey(key) + } + else { + mainPlaylistController.switchSortOrder() + } + + mainPlaylistController.sort() + } + Rectangle { id: parentRect anchors.fill: parent @@ -95,25 +107,72 @@ Widgets.NavigableFocusScope { Action { id:moveTracksAction; text: i18n.qtr("Move Selection"); onTriggered: view.mode = "move"; } Action { id:deleteAction; text: i18n.qtr("Remove Selected"); onTriggered: view.onDelete(); } - //sortmenu - Action { id: sortTitleAction; text: i18n.qtr("Title"); - onTriggered: mainPlaylistController.sort(PlaylistControllerModel.SORT_KEY_TITLE, PlaylistControllerModel.SORT_ORDER_ASC)} - Action { id: sortDurationAction;text: i18n.qtr("Duration"); - onTriggered: mainPlaylistController.sort(PlaylistControllerModel.SORT_KEY_DURATION, PlaylistControllerModel.SORT_ORDER_ASC)} - Action { id: sortArtistAction; text: i18n.qtr("Artist"); - onTriggered: mainPlaylistController.sort(PlaylistControllerModel.SORT_KEY_ARTIST, PlaylistControllerModel.SORT_ORDER_ASC)} - Action { id: sortAlbumAction; text: i18n.qtr("Album"); - onTriggered: mainPlaylistController.sort(PlaylistControllerModel.SORT_KEY_ALBUM, PlaylistControllerModel.SORT_ORDER_ASC)} - Action { id: sortGenreAction; text: i18n.qtr("Genre"); - onTriggered: mainPlaylistController.sort(PlaylistControllerModel.SORT_KEY_GENRE, PlaylistControllerModel.SORT_ORDER_ASC)} - Action { id: sortDateAction; text: i18n.qtr("Date"); - onTriggered: mainPlaylistController.sort(PlaylistControllerModel.SORT_KEY_DATE, PlaylistControllerModel.SORT_ORDER_ASC)} - Action { id: sortTrackAction; text: i18n.qtr("Track Number"); - onTriggered: mainPlaylistController.sort(PlaylistControllerModel.SORT_KEY_TRACK_NUMBER, PlaylistControllerModel.SORT_ORDER_ASC)} - Action { id: sortURLAction; text: i18n.qtr("URL"); - onTriggered: mainPlaylistController.sort(PlaylistControllerModel.SORT_KEY_URL, PlaylistControllerModel.SORT_ORDER_ASC)} - Action { id: sortRatingAction; text: i18n.qtr("Rating"); - onTriggered: mainPlaylistController.sort(PlaylistControllerModel.SORT_KEY_RATING, PlaylistControllerModel.SORT_ORDER_ASC)} + readonly property var sortList: [sortTitleAction, + sortDurationAction, + sortArtistAction, + sortAlbumAction, + sortGenreAction, + sortDateAction, + sortTrackAction, + sortURLAction, + sortRatingAction] + + Connections { + id: plControllerConnections + target: mainPlaylistController + + property alias sortList: overlayMenu.sortList + + function setMark() { + for (var i = 0; i < sortList.length; i++) { + if(sortList[i].key === mainPlaylistController.sortKey) { + sortList[i].sortActiveMark = "✓" + sortList[i].sortOrderMark = (mainPlaylistController.sortOrder === PlaylistControllerModel.SORT_ORDER_ASC ? "↓" : "↑") + continue + } + + sortList[i].sortActiveMark = "" + sortList[i].sortOrderMark = "" + } + } + + onSortOrderChanged: { + plControllerConnections.setMark() + } + + onSortKeyChanged: { + plControllerConnections.setMark() + } + } + + // sortmenu + Action { id: sortTitleAction; text: i18n.qtr("Title"); onTriggered: root.sortPL(key); + readonly property int key: PlaylistControllerModel.SORT_KEY_TITLE; + property string sortActiveMark; property string sortOrderMark } + Action { id: sortDurationAction; text: i18n.qtr("Duration"); onTriggered: root.sortPL(key); + readonly property int key: PlaylistControllerModel.SORT_KEY_DURATION + property string sortActiveMark; property string sortOrderMark } + Action { id: sortArtistAction; text: i18n.qtr("Artist"); onTriggered: root.sortPL(key); + readonly property int key: PlaylistControllerModel.SORT_KEY_ARTIST + property string sortActiveMark; property string sortOrderMark } + Action { id: sortAlbumAction; text: i18n.qtr("Album"); onTriggered: root.sortPL(key); + readonly property int key: PlaylistControllerModel.SORT_KEY_ALBUM + property string sortActiveMark; property string sortOrderMark } + Action { id: sortGenreAction; text: i18n.qtr("Genre"); onTriggered: root.sortPL(key); + readonly property int key: PlaylistControllerModel.SORT_KEY_GENRE + property string sortActiveMark; property string sortOrderMark } + Action { id: sortDateAction; text: i18n.qtr("Date"); onTriggered: root.sortPL(key); + readonly property int key: PlaylistControllerModel.SORT_KEY_DATE + property string sortActiveMark; property string sortOrderMark } + Action { id: sortTrackAction; text: i18n.qtr("Track Number"); onTriggered: root.sortPL(key); + readonly property int key: PlaylistControllerModel.SORT_KEY_TRACK_NUMBER + property string sortActiveMark; property string sortOrderMark } + Action { id: sortURLAction; text: i18n.qtr("URL"); onTriggered: root.sortPL(key); + readonly property int key: PlaylistControllerModel.SORT_KEY_URL + property string sortActiveMark; property string sortOrderMark } + Action { id: sortRatingAction; text: i18n.qtr("Rating"); onTriggered: root.sortPL(key); + readonly property int key: PlaylistControllerModel.SORT_KEY_RATING + property string sortActiveMark; property string sortOrderMark } models: { "rootmenu" : { @@ -159,17 +218,7 @@ Widgets.NavigableFocusScope { }, "sortmenu" :{ title: i18n.qtr("Sort Playlist"), - entries: [ - sortTitleAction, - sortDurationAction, - sortArtistAction, - sortAlbumAction, - sortGenreAction, - sortDateAction, - sortTrackAction, - sortURLAction, - sortRatingAction, - ] + entries: sortList } } } @@ -619,19 +668,19 @@ Widgets.NavigableFocusScope { height: VLCStyle.heightBar_normal visible: !(infoText.text === "") - RectangularGlow { - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.horizontalCenter: parent.horizontalCenter + RectangularGlow { + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter width: infoText.width + VLCStyle.dp(18, VLCStyle.scale) height: infoText.height + VLCStyle.dp(12, VLCStyle.scale) - glowRadius: 2 - cornerRadius: 10 - spread: 0.1 - color: _colors.glowColorBanner - } + glowRadius: 2 + cornerRadius: 10 + spread: 0.1 + color: _colors.glowColorBanner + } Label { id: infoText diff --git a/modules/gui/qt/playlist/qml/PlaylistMenu.qml b/modules/gui/qt/playlist/qml/PlaylistMenu.qml index 24ec66db57..9a58edea5c 100644 --- a/modules/gui/qt/playlist/qml/PlaylistMenu.qml +++ b/modules/gui/qt/playlist/qml/PlaylistMenu.qml @@ -142,12 +142,27 @@ Widgets.NavigableFocusScope { icon.width: VLCStyle.fontHeight_normal icon.height: VLCStyle.fontHeight_normal - contentItem: Label { - text: control.text - color: "white" - font.pixelSize: VLCStyle.fontSize_normal - leftPadding: VLCStyle.icon_small + contentItem: RowLayout { + width: control.width + Label { + Layout.fillWidth: true + + text: control.text + color: "white" + font.pixelSize: VLCStyle.fontSize_normal + leftPadding: VLCStyle.icon_small + } + + Loader { + active: currentModel === "sortmenu" + + sourceComponent: Label { + text: modelData.sortOrderMark + color: "white" + font.pixelSize: VLCStyle.fontSize_normal + } + } } background: Rectangle { @@ -155,18 +170,42 @@ Widgets.NavigableFocusScope { implicitHeight: VLCStyle.fontHeight_normal color: control.activeFocus ? "orange" : "transparent" - ColorImage { + Item { + id: leftSide width: control.icon.width height: control.icon.height x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding y: control.topPadding + (control.availableHeight - height) / 2 - source: control.checked ? "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/check.png" - : modelData.icon.source ? modelData.icon.source - : "" - visible: true - color: control.enabled ? VLCStyle.colors.playerFg : VLCStyle.colors.playerFgInactive + Loader { + id: leftTextLoader + active: currentModel === "sortmenu" + + anchors.fill: parent + + sourceComponent: Label { + text: modelData.sortActiveMark + color: "white" + font.pixelSize: VLCStyle.fontSize_normal + } + } + + Loader { + active: !leftTextLoader.active + anchors.fill: parent + + sourceComponent: ColorImage { + width: leftSide.width + height: leftSide.height + + source: control.checked ? "qrc:/qt-project.org/imports/QtQuick/Controls.2/images/check.png" + : modelData.icon.source ? modelData.icon.source + : "" + visible: true + color: control.enabled ? VLCStyle.colors.playerFg : VLCStyle.colors.playerFgInactive + } + } } ColorImage { diff --git a/modules/gui/qt/playlist/qml/PlaylistToolbar.qml b/modules/gui/qt/playlist/qml/PlaylistToolbar.qml index 64da3a766d..3741332246 100644 --- a/modules/gui/qt/playlist/qml/PlaylistToolbar.qml +++ b/modules/gui/qt/playlist/qml/PlaylistToolbar.qml @@ -99,9 +99,7 @@ Widgets.NavigableFocusScope { listWidth: VLCStyle.widthSortBox onSortSelected: { - if (modelData.criteria !== sortKey) - mainPlaylistController.setSortOrder(PlaylistControllerModel.SORT_ORDER_ASC) - mainPlaylistController.setSortKey(modelData.criteria) + root.sortPL(modelData.criteria) } Keys.priority: Keys.AfterItem _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
