diff --git a/src/qml/ContentView.qml b/src/qml/ContentView.qml --- a/src/qml/ContentView.qml +++ b/src/qml/ContentView.qml @@ -34,6 +34,22 @@ viewManager.goBack() } + function openArtist(name) { + viewManager.openChildView(name, '', elisaTheme.artistIcon, 0, ElisaUtils.Artist) + } + + function openAlbum(artist, album, image, albumID) { + image = !image ? elisaTheme.defaultAlbumImage : image; + viewManager.openChildView(album, artist, image, albumID, ElisaUtils.Album); + } + + function openNowPlaying() { + viewManager.closeAllViews(); + + // This is needed to trigger the state change + listViews.currentIndex = 0; + } + ViewManager { id: viewManager diff --git a/src/qml/ElisaMainWindow.qml b/src/qml/ElisaMainWindow.qml --- a/src/qml/ElisaMainWindow.qml +++ b/src/qml/ElisaMainWindow.qml @@ -197,6 +197,7 @@ title: elisa.manageHeaderBar.title artist: elisa.manageHeaderBar.artist image: elisa.manageHeaderBar.image + albumID: elisa.manageHeaderBar.albumId ratingVisible: false @@ -222,6 +223,9 @@ playerControl.onPlayNext: elisa.mediaPlayList.skipNextTrack() playerControl.isMaximized: persistentSettings.headerBarIsMaximized + onOpenArtist: { contentView.openArtist(artist) } + onOpenNowPlaying: { contentView.openNowPlaying() } + onOpenAlbum: { contentView.openAlbum(album, artist, image, albumID) } TrackImportNotification { id: importedTracksCountNotification diff --git a/src/qml/HeaderBar.qml b/src/qml/HeaderBar.qml --- a/src/qml/HeaderBar.qml +++ b/src/qml/HeaderBar.qml @@ -32,10 +32,15 @@ property string oldImage property string tracksCount property int trackRating + property int albumID property bool ratingVisible property alias playerControl: playControlItem property alias isMaximized: playControlItem.isMaximized + signal openArtist() + signal openAlbum() + signal openNowPlaying() + onImageChanged: { if (changeBackgroundTransition.running) { @@ -223,25 +228,43 @@ LabelWithToolTip { id: mainLabel text: title - Layout.fillWidth: true Layout.alignment: Qt.AlignLeft elide: Text.ElideRight color: myPalette.highlightedText font.pointSize: elisaTheme.defaultFontPointSize * 2.5 font.bold: true Layout.bottomMargin: titleFontInfo.height * 0.5 + + MouseArea { + id: titleMouseArea + hoverEnabled: true + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: { + openNowPlaying() + } + } } LabelWithToolTip { id: authorLabel text: artist - Layout.fillWidth: true Layout.alignment: Qt.AlignLeft elide: Text.ElideRight color: myPalette.highlightedText font.pointSize: elisaTheme.defaultFontPointSize * 1.5 + MouseArea { + id: authorMouseArea + hoverEnabled: true + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: { + openArtist() + } + } + layer.effect: Glow { cached: true @@ -255,7 +278,6 @@ LabelWithToolTip { id: albumLabel text: album - Layout.fillWidth: true Layout.alignment: Qt.AlignLeft elide: Text.ElideRight color: myPalette.highlightedText @@ -271,6 +293,15 @@ samples: 9 } + MouseArea { + id: albumMouseArea + hoverEnabled: true + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onClicked: { + openAlbum() + } + } } RatingStar { @@ -303,20 +334,23 @@ Layout.leftMargin: elisaTheme.layoutHorizontalMargin * 7 Layout.rightMargin: elisaTheme.layoutHorizontalMargin * 2 } - - LabelWithToolTip { - id: remainingTracksLabel - text: i18np("1 track remaining", "%1 tracks remaining", tracksCount) - Layout.alignment: Qt.AlignRight | Qt.AlignBottom - Layout.bottomMargin: elisaTheme.layoutVerticalMargin - Layout.leftMargin: elisaTheme.layoutHorizontalMargin - Layout.rightMargin: elisaTheme.layoutHorizontalMargin * 1.75 - elide: Text.ElideRight - visible: tracksCount > 0 - color: myPalette.highlightedText - } } } + + LabelWithToolTip { + id: remainingTracksLabel + + text: i18np("1 track remaining", "%1 tracks remaining", tracksCount) + + elide: Text.ElideRight + visible: tracksCount > 0 + color: myPalette.highlightedText + + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.rightMargin: elisaTheme.layoutHorizontalMargin * 2 + anchors.bottomMargin: elisaTheme.layoutHorizontalMargin * 2 + } } SequentialAnimation {