diff --git a/src/AudioTrackDelegate.qml b/src/AudioTrackDelegate.qml deleted file mode 100644 --- a/src/AudioTrackDelegate.qml +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright 2016-2017 Matthieu Gallien - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -import QtQuick 2.4 -import QtQuick.Controls 1.2 -import QtQuick.Controls.Styles 1.2 -import QtQuick.Window 2.2 -import QtQml.Models 2.1 -import QtQuick.Layouts 1.2 -import QtGraphicalEffects 1.0 - -import org.kde.elisa 1.0 - -FocusScope { - property string title - property string artist - property string albumArtist - property alias duration: durationLabel.text - property int trackNumber - property int discNumber - property alias rating: ratingWidget.starRating - property bool isFirstTrackOfDisc - property bool isSingleDiscAlbum - property var databaseId - property var playList - property var playerControl - property bool isAlternateColor - property var trackData - - signal clicked() - - id: mediaServerEntry - - Action { - id: clearAndEnqueue - text: i18nc("Clear play list and enqueue current track", "Play Now and Replace Play List") - iconName: "media-playback-start" - onTriggered: { - playList.clearAndEnqueue(trackData) - playerControl.ensurePlay() - } - } - - Action { - id: enqueue - text: i18nc("Enqueue current track", "Enqueue") - iconName: "media-track-add-amarok" - onTriggered: { - playList.enqueue(trackData) - } - } - - ColumnLayout { - anchors.fill: parent - spacing: 0 - - Rectangle { - Layout.preferredHeight: elisaTheme.delegateHeight + elisaTheme.layoutVerticalMargin * 2 - Layout.minimumHeight: elisaTheme.delegateHeight + elisaTheme.layoutVerticalMargin * 2 - Layout.maximumHeight: elisaTheme.delegateHeight + elisaTheme.layoutVerticalMargin * 2 - Layout.fillWidth: true - - color: (mediaServerEntry.isAlternateColor ? myPalette.alternateBase : myPalette.base) - - visible: isFirstTrackOfDisc && !isSingleDiscAlbum - - focus: true - - LabelWithToolTip { - id: discHeaderLabel - - text: 'CD ' + discNumber - - font.weight: Font.Bold - font.italic: true - color: myPalette.text - - anchors.fill: parent - anchors.topMargin: elisaTheme.layoutVerticalMargin * 2 - anchors.leftMargin: elisaTheme.layoutHorizontalMargin - - elide: Text.ElideRight - } - } - - Rectangle { - id: rowRoot - - Layout.fillHeight: true - Layout.fillWidth: true - - color: (isAlternateColor ? myPalette.alternateBase : myPalette.base) - - MouseArea { - id: hoverHandle - - hoverEnabled: true - acceptedButtons: Qt.LeftButton - focus: true - - anchors.fill: parent - - onClicked: { - hoverHandle.forceActiveFocus() - mediaServerEntry.clicked() - } - - onDoubleClicked: playList.enqueue(trackData) - - RowLayout { - spacing: 0 - - anchors.fill: parent - - LabelWithToolTip { - id: mainLabel - - text: (artist !== albumArtist ? - "" + trackNumber + ' - ' + title + "" + ' - ' + artist + '' : - "" + trackNumber + ' - ' + title + "") - - horizontalAlignment: Text.AlignLeft - - color: myPalette.text - - Layout.leftMargin: { - if (!LayoutMirroring.enabled) - return (!isSingleDiscAlbum ? elisaTheme.layoutHorizontalMargin * 4 : elisaTheme.layoutHorizontalMargin) - else - return 0 - } - Layout.rightMargin: { - if (LayoutMirroring.enabled) - return (!isSingleDiscAlbum ? elisaTheme.layoutHorizontalMargin * 4 : elisaTheme.layoutHorizontalMargin) - else - return 0 - } - Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter - Layout.fillWidth: true - - elide: Text.ElideRight - } - - Loader { - id: hoverLoader - active: false - - Layout.fillHeight: true - Layout.preferredWidth: elisaTheme.delegateHeight * 2 - Layout.alignment: Qt.AlignVCenter | Qt.AlignRight - - sourceComponent: RowLayout { - id: highlightMarker - - spacing: 0 - - anchors.fill: parent - - ToolButton { - id: enqueueButton - - opacity: 1 - visible: opacity > 0.1 - action: enqueue - - Layout.preferredHeight: elisaTheme.delegateHeight * 0.75 - Layout.preferredWidth: elisaTheme.delegateHeight * 0.75 - Layout.alignment: Qt.AlignVCenter | Qt.AlignRight - } - - ToolButton { - id: clearAndEnqueueButton - - opacity: 1 - visible: opacity > 0.1 - action: clearAndEnqueue - - Layout.preferredHeight: elisaTheme.delegateHeight * 0.75 - Layout.preferredWidth: elisaTheme.delegateHeight * 0.75 - Layout.alignment: Qt.AlignVCenter | Qt.AlignRight - Layout.rightMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - Layout.leftMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - } - } - } - - RatingStar { - id: ratingWidget - - starSize: elisaTheme.ratingStarSize - - Layout.leftMargin: elisaTheme.layoutHorizontalMargin - Layout.rightMargin: elisaTheme.layoutHorizontalMargin - Layout.alignment: Qt.AlignVCenter | Qt.AlignRight - } - - LabelWithToolTip { - id: durationLabel - - text: duration - - font.weight: Font.Light - color: myPalette.text - - elide: "ElideRight" - - Layout.rightMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - Layout.leftMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - Layout.alignment: Qt.AlignVCenter | Qt.AlignRight - } - } - } - } - } - - states: [ - State { - name: 'default' - - PropertyChanges { - target: hoverLoader - active: false - } - PropertyChanges { - target: rowRoot - color: isAlternateColor ? myPalette.alternateBase : myPalette.base - } - }, - State { - name: 'active' - - when: hoverHandle.containsMouse || mediaServerEntry.activeFocus - - PropertyChanges { - target: hoverLoader - active: true - } - PropertyChanges { - target: rowRoot - color: myPalette.mid - } - } - - ] - transitions: Transition { - ParallelAnimation { - NumberAnimation { - properties: "height, opacity" - easing.type: Easing.InOutQuad - duration: 50 - } - ColorAnimation { - properties: "color" - duration: 200 - } - } - } -} - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -42,7 +42,6 @@ android/PlatformIntegration.qml RatingStar.qml - AudioTrackDelegate.qml PlayListEntry.qml MediaAlbumDelegate.qml MediaArtistDelegate.qml @@ -65,7 +64,8 @@ MediaAllAlbumView.qml MediaAllArtistView.qml MediaAllTracksView.qml - MediaTracksDelegate.qml + MediaTrackDelegate.qml + MediaAlbumTrackDelegate.qml ViewSelector.qml ) diff --git a/src/MediaAlbumView.qml b/src/MediaAlbumView.qml --- a/src/MediaAlbumView.qml +++ b/src/MediaAlbumView.qml @@ -143,68 +143,67 @@ focus: true - model: DelegateModel { - model: contentModel - - groups: [ - DelegateModelGroup { name: "selected" } - ] - - delegate: AudioTrackDelegate { - id: entry - - focus: true - - isAlternateColor: DelegateModel.itemsIndex % 2 - height: ((model.isFirstTrackOfDisc && !isSingleDiscAlbum) ? elisaTheme.delegateWithHeaderHeight : elisaTheme.delegateHeight) - width: contentDirectoryView.width - - databaseId: model.databaseId - playList: topListing.playListModel - playerControl: topListing.playerControl - - title: if (model != undefined && model.title !== undefined) - model.title - else - '' - - artist: if (model != undefined && model.artist !== undefined) - model.artist + model: contentModel + + delegate: MediaAlbumTrackDelegate { + id: entry + + height: ((model.isFirstTrackOfDisc && !isSingleDiscAlbum) ? elisaTheme.delegateHeight*2 : elisaTheme.delegateHeight) + width: contentDirectoryView.width + + focus: true + + mediaTrack.isAlternateColor: (index % 2) === 1 + + mediaTrack.title: if (model != undefined && model.title !== undefined) + model.title + else + '' + mediaTrack.artist: if (model != undefined && model.artist !== undefined) + model.artist + else + '' + mediaTrack.albumArtist: if (model != undefined && model.albumArtist !== undefined) + model.albumArtist + else + '' + mediaTrack.duration: if (model != undefined && model.duration !== undefined) + model.duration + else + '' + mediaTrack.trackNumber: if (model != undefined && model.trackNumber !== undefined) + model.trackNumber + else + '' + mediaTrack.discNumber: if (model != undefined && model.discNumber !== undefined) + model.discNumber else '' + mediaTrack.rating: if (model != undefined && model.rating !== undefined) + model.rating + else + 0 + mediaTrack.trackData: if (model != undefined && model.trackData !== undefined) + model.trackData + else + '' + mediaTrack.isFirstTrackOfDisc: if (model != undefined && model.isFirstTrackOfDisc !== undefined) + model.isFirstTrackOfDisc + else + false + mediaTrack.isSingleDiscAlbum: if (model != undefined && model.isSingleDiscAlbum !== undefined) + model.isSingleDiscAlbum + else + true - albumArtist: topListing.artistName - - duration: if (model != undefined && model.duration !== undefined) - model.duration - else - '' - - trackNumber: if (model != undefined && model.trackNumber !== undefined) - model.trackNumber - else - '' - - discNumber: if (model != undefined && model.discNumber !== undefined) - model.discNumber - else - '' - rating: if (model != undefined && model.rating !== undefined) - model.rating - else - 0 + mediaTrack.onClearPlaylist: topListing.playListModel.clearPlayList() - trackData: if (model != undefined && model.trackData !== undefined) - model.trackData - else - '' + mediaTrack.onEnqueueToPlaylist: topListing.playListModel.enqueue(track) - isFirstTrackOfDisc: model.isFirstTrackOfDisc - isSingleDiscAlbum: topListing.isSingleDiscAlbum + mediaTrack.onEnsurePlay: topListing.playerControl.ensurePlay() - onClicked: contentDirectoryView.currentIndex = index - } + mediaTrack.onClicked: contentDirectoryView.currentIndex = index } } } diff --git a/src/MediaAllTracksView.qml b/src/MediaAllTracksView.qml --- a/src/MediaAllTracksView.qml +++ b/src/MediaAllTracksView.qml @@ -28,14 +28,14 @@ import org.kde.elisa 1.0 FocusScope { + id: rootElement + property var playerControl property var playListModel property var tracksModel property var stackView property var musicListener - id: rootElement - SystemPalette { id: myPalette colorGroup: SystemPalette.Active @@ -88,7 +88,7 @@ filterRating: filterBar.filterRating } - delegate: MediaTracksDelegate { + delegate: MediaTrackDelegate { id: entry width: contentDirectoryView.width @@ -102,49 +102,60 @@ model.title else '' - artist: if (model != undefined && model.artist !== undefined) model.artist else '' - albumName: if (model != undefined && model.album !== undefined) model.album else '' - + albumArtist: if (model != undefined && model.albumArtist !== undefined) + model.albumArtist + else + '' duration: if (model != undefined && model.duration !== undefined) model.duration else '' - trackNumber: if (model != undefined && model.trackNumber !== undefined) model.trackNumber else '' - discNumber: if (model != undefined && model.discNumber !== undefined) model.discNumber else '' - rating: if (model != undefined && model.rating !== undefined) model.rating else 0 - trackData: if (model != undefined && model.trackData !== undefined) model.trackData else '' - coverImage: if (model != undefined && model.image !== undefined) model.image else '' - - playList: rootElement.playListModel - playerControl: rootElement.playerControl + trackResource: if (model != undefined && model.trackResource !== undefined) + model.trackResource + else + '' + isFirstTrackOfDisc: if (model != undefined && model.isFirstTrackOfDisc !== undefined) + model.isFirstTrackOfDisc + else + false + isSingleDiscAlbum: if (model != undefined && model.isSingleDiscAlbum !== undefined) + model.isSingleDiscAlbum + else + true + + onClearPlaylist: rootElement.playListModel.clearPlayList() + + onEnqueueToPlaylist: rootElement.playListModel.enqueue(track) + + onEnsurePlay: rootElement.playerControl.ensurePlay() onClicked: contentDirectoryView.currentIndex = index } diff --git a/src/MediaTracksDelegate.qml b/src/MediaTracksDelegate.qml deleted file mode 100644 --- a/src/MediaTracksDelegate.qml +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright 2016-2017 Matthieu Gallien - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -import QtQuick 2.4 -import QtQuick.Layouts 1.2 -import QtQuick.Controls 1.2 -import QtQuick.Window 2.2 -import QtGraphicalEffects 1.0 -import org.kde.elisa 1.0 - -FocusScope { - id: viewTrackDelegate - - property string title - property var coverImage - property string artist - property string albumName - property alias duration: durationLabel.text - property int trackNumber - property int discNumber - property alias rating: ratingWidget.starRating - property var databaseId - property var playList - property var playerControl - property bool isAlternateColor - property var trackData - - signal clicked() - - Action { - id: clearAndEnqueue - text: i18nc("Clear play list and enqueue current track", "Play Now and Replace Play List") - iconName: "media-playback-start" - onTriggered: { - playList.clearAndEnqueue(trackData) - playerControl.ensurePlay() - } - } - - Action { - id: enqueue - text: i18nc("Enqueue current track", "Enqueue") - iconName: "media-track-add-amarok" - onTriggered: { - playList.enqueue(trackData) - } - } - - Rectangle { - id: highlightMarker - - anchors.fill: parent - - color: (isAlternateColor ? myPalette.alternateBase : myPalette.base) - - MouseArea { - id: hoverArea - - anchors.fill: parent - - hoverEnabled: true - - acceptedButtons: Qt.LeftButton - - onClicked: { - hoverArea.forceActiveFocus() - viewTrackDelegate.clicked() - } - - onDoubleClicked: playList.enqueue(trackData) - - RowLayout { - anchors.fill: parent - spacing: 0 - - Item { - Layout.preferredHeight: viewTrackDelegate.height * 0.9 - Layout.preferredWidth: viewTrackDelegate.height * 0.9 - - Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter - - Image { - id: coverImageElement - - anchors.fill: parent - - sourceSize.width: viewTrackDelegate.height * 0.9 - sourceSize.height: viewTrackDelegate.height * 0.9 - fillMode: Image.PreserveAspectFit - smooth: true - - source: (coverImage ? coverImage : Qt.resolvedUrl(elisaTheme.albumCover)) - - asynchronous: true - - layer.enabled: image == undefined ? false : true - layer.effect: DropShadow { - horizontalOffset: viewTrackDelegate.height * 0.02 - verticalOffset: viewTrackDelegate.height * 0.02 - - source: coverImageElement - - radius: 5.0 - samples: 11 - - color: myPalette.shadow - } - } - } - - ColumnLayout { - Layout.fillWidth: true - Layout.fillHeight: true - Layout.alignment: Qt.AlignLeft - - spacing: 0 - - LabelWithToolTip { - id: mainLabel - - text: trackNumber + ' - ' + title - horizontalAlignment: Text.AlignLeft - - font.weight: Font.Bold - color: myPalette.text - - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - Layout.leftMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - Layout.rightMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - Layout.fillWidth: true - Layout.topMargin: elisaTheme.layoutVerticalMargin / 2 - - elide: "ElideRight" - } - - Item { - Layout.fillHeight: true - } - - LabelWithToolTip { - id: artistLabel - - text: artist + ' - ' + albumName - horizontalAlignment: Text.AlignLeft - - font.weight: Font.Light - font.italic: true - color: myPalette.text - - Layout.alignment: Qt.AlignLeft | Qt.AlignBottom - Layout.leftMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - Layout.rightMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - Layout.fillWidth: true - Layout.bottomMargin: elisaTheme.layoutVerticalMargin / 2 - - elide: "ElideRight" - } - } - - ToolButton { - id: enqueueButton - - Layout.preferredHeight: elisaTheme.trackDelegateHeight * 0.75 - Layout.preferredWidth: elisaTheme.trackDelegateHeight * 0.75 - - opacity: 0 - visible: opacity > 0.1 - action: enqueue - Layout.alignment: Qt.AlignVCenter | Qt.AlignRight - } - - ToolButton { - id: clearAndEnqueueButton - - Layout.preferredHeight: elisaTheme.trackDelegateHeight * 0.75 - Layout.preferredWidth: elisaTheme.trackDelegateHeight * 0.75 - - opacity: 0 - visible: opacity > 0.1 - action: clearAndEnqueue - - Layout.alignment: Qt.AlignVCenter | Qt.AlignRight - Layout.rightMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - Layout.leftMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - } - - RatingStar { - id: ratingWidget - - starSize: elisaTheme.ratingStarSize - - Layout.alignment: Qt.AlignVCenter | Qt.AlignRight - Layout.leftMargin: elisaTheme.layoutHorizontalMargin - Layout.rightMargin: elisaTheme.layoutHorizontalMargin - } - - LabelWithToolTip { - id: durationLabel - - text: duration - - font.weight: Font.Light - color: myPalette.text - - elide: "ElideRight" - - Layout.alignment: Qt.AlignVCenter | Qt.AlignRight - Layout.rightMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - Layout.leftMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 - } - } - } - } - - states: [ - State { - name: 'notSelected' - when: !hoverArea.containsMouse && !viewTrackDelegate.activeFocus - PropertyChanges { - target: clearAndEnqueueButton - opacity: 0 - } - PropertyChanges { - target: enqueueButton - opacity: 0 - } - PropertyChanges { - target: highlightMarker - color: (isAlternateColor ? myPalette.alternateBase : myPalette.base) - } - }, - State { - name: 'hoveredAndNotSelected' - when: hoverArea.containsMouse || viewTrackDelegate.activeFocus - PropertyChanges { - target: clearAndEnqueueButton - opacity: 1 - } - PropertyChanges { - target: enqueueButton - opacity: 1 - } - PropertyChanges { - target: highlightMarker - color: myPalette.mid - } - } - - ] - transitions: Transition { - ParallelAnimation { - NumberAnimation { - properties: "height, opacity" - easing.type: Easing.InOutQuad - duration: 50 - } - ColorAnimation { - properties: "color" - duration: 200 - } - } - } -} diff --git a/src/albummodel.h b/src/albummodel.h --- a/src/albummodel.h +++ b/src/albummodel.h @@ -79,7 +79,8 @@ IdRole = ResourceRole + 1, DatabaseIdRole = IdRole + 1, DiscFirstTrackRole = DatabaseIdRole + 1, - TrackDataRole = DiscFirstTrackRole + 1, + IsSingleDiscAlbumRole = DiscFirstTrackRole + 1, + TrackDataRole = IsSingleDiscAlbumRole + 1, }; Q_ENUM(ColumnsRoles) diff --git a/src/albummodel.cpp b/src/albummodel.cpp --- a/src/albummodel.cpp +++ b/src/albummodel.cpp @@ -73,7 +73,9 @@ roles[static_cast(ColumnsRoles::ImageRole)] = "image"; roles[static_cast(ColumnsRoles::DatabaseIdRole)] = "databaseId"; roles[static_cast(ColumnsRoles::DiscFirstTrackRole)] = "isFirstTrackOfDisc"; + roles[static_cast(ColumnsRoles::IsSingleDiscAlbumRole)] = "isSingleDiscAlbum"; roles[static_cast(ColumnsRoles::TrackDataRole)] = "trackData"; + roles[static_cast(ColumnsRoles::ResourceRole)] = "trackResource"; return roles; } @@ -174,6 +176,9 @@ result = (previousTrack.discNumber() != track.discNumber()); } break; + case ColumnsRoles::IsSingleDiscAlbumRole: + result = track.isSingleDiscAlbum(); + break; case ColumnsRoles::RatingRole: result = track.rating(); break; diff --git a/src/alltracksmodel.h b/src/alltracksmodel.h --- a/src/alltracksmodel.h +++ b/src/alltracksmodel.h @@ -41,14 +41,16 @@ CreatorRole = MilliSecondsDurationRole + 1, ArtistRole = CreatorRole + 1, AlbumRole = ArtistRole + 1, - TrackNumberRole = AlbumRole + 1, + AlbumArtistRole = AlbumRole + 1, + TrackNumberRole = AlbumArtistRole + 1, DiscNumberRole = TrackNumberRole + 1, RatingRole = DiscNumberRole + 1, ImageRole = RatingRole + 1, ResourceRole = ImageRole + 1, IdRole = ResourceRole + 1, DatabaseIdRole = IdRole + 1, - TrackDataRole = DatabaseIdRole + 1, + IsSingleDiscAlbumRole = DatabaseIdRole + 1, + TrackDataRole = IsSingleDiscAlbumRole + 1, }; Q_ENUM(ColumnsRoles) diff --git a/src/alltracksmodel.cpp b/src/alltracksmodel.cpp --- a/src/alltracksmodel.cpp +++ b/src/alltracksmodel.cpp @@ -61,12 +61,15 @@ roles[static_cast(ColumnsRoles::DurationRole)] = "duration"; roles[static_cast(ColumnsRoles::ArtistRole)] = "artist"; roles[static_cast(ColumnsRoles::AlbumRole)] = "album"; + roles[static_cast(ColumnsRoles::AlbumArtistRole)] = "albumArtist"; roles[static_cast(ColumnsRoles::TrackNumberRole)] = "trackNumber"; roles[static_cast(ColumnsRoles::DiscNumberRole)] = "discNumber"; roles[static_cast(ColumnsRoles::RatingRole)] = "rating"; roles[static_cast(ColumnsRoles::ImageRole)] = "image"; roles[static_cast(ColumnsRoles::DatabaseIdRole)] = "databaseId"; + roles[static_cast(ColumnsRoles::IsSingleDiscAlbumRole)] = "isSingleDiscAlbum"; roles[static_cast(ColumnsRoles::TrackDataRole)] = "trackData"; + roles[static_cast(ColumnsRoles::ResourceRole)] = "trackResource"; return roles; } @@ -142,6 +145,9 @@ case ColumnsRoles::AlbumRole: result = d->mAllTracks[d->mIds[index.row()]].albumName(); break; + case ColumnsRoles::AlbumArtistRole: + result = d->mAllTracks[d->mIds[index.row()]].albumArtist(); + break; case ColumnsRoles::TrackNumberRole: result = d->mAllTracks[d->mIds[index.row()]].trackNumber(); break; @@ -153,6 +159,9 @@ } break; } + case ColumnsRoles::IsSingleDiscAlbumRole: + result = d->mAllTracks[d->mIds[index.row()]].isSingleDiscAlbum(); + break; case ColumnsRoles::RatingRole: result = d->mAllTracks[d->mIds[index.row()]].rating(); break; diff --git a/src/upnpControl.qrc b/src/upnpControl.qrc --- a/src/upnpControl.qrc +++ b/src/upnpControl.qrc @@ -1,6 +1,5 @@ - AudioTrackDelegate.qml MediaPlayerControl.qml RatingStar.qml MediaPlayListView.qml @@ -37,12 +36,13 @@ PlatformIntegration.qml LabelWithToolTip.qml MediaAllTracksView.qml - MediaTracksDelegate.qml TopNotification.qml TrackImportNotification.qml TopNotificationItem.qml ViewSelector.qml FilterBar.qml + MediaTrackDelegate.qml + MediaAlbumTrackDelegate.qml windows/WindowsTheme.qml