diff --git a/src/qml/ElisaMainWindow.qml b/src/qml/ElisaMainWindow.qml --- a/src/qml/ElisaMainWindow.qml +++ b/src/qml/ElisaMainWindow.qml @@ -41,7 +41,7 @@ width: persistentSettings.width height: persistentSettings.height - title: 'Elisa' + title: i18n("Elisa") property var goBackAction: elisa.action("go_back") diff --git a/src/qml/GridBrowserDelegate.qml b/src/qml/GridBrowserDelegate.qml --- a/src/qml/GridBrowserDelegate.qml +++ b/src/qml/GridBrowserDelegate.qml @@ -146,6 +146,8 @@ id: replaceAndPlayButton objectName: 'replaceAndPlayButton' + scale: LayoutMirroring.enabled ? -1 : 1 + action: replaceAndPlayAction width: elisaTheme.delegateToolButtonSize diff --git a/src/qml/MediaPlayerControl.qml b/src/qml/MediaPlayerControl.qml --- a/src/qml/MediaPlayerControl.qml +++ b/src/qml/MediaPlayerControl.qml @@ -228,6 +228,11 @@ } } + TextMetrics { + id: durationTextMetrics + text: i18nc("This is used to preserve a fixed width for the duration text.", "00:00:00") + } + LabelWithToolTip { id: positionLabel @@ -239,8 +244,10 @@ Layout.fillHeight: true Layout.rightMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 Layout.leftMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 + Layout.preferredWidth: durationTextMetrics.width+5 // be in the safe side verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignRight ProgressIndicator { id: timeIndicator @@ -323,8 +330,10 @@ Layout.fillHeight: true Layout.rightMargin: !LayoutMirroring.enabled ? (elisaTheme.layoutHorizontalMargin * 10) : 0 Layout.leftMargin: LayoutMirroring.enabled ? (elisaTheme.layoutHorizontalMargin * 10) : 0 + Layout.preferredWidth: durationTextMetrics.width verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignLeft ProgressIndicator { id: durationIndicator diff --git a/src/qml/MediaTrackDelegate.qml b/src/qml/MediaTrackDelegate.qml --- a/src/qml/MediaTrackDelegate.qml +++ b/src/qml/MediaTrackDelegate.qml @@ -133,20 +133,36 @@ visible: !detailedView text: { - var text = ""; - - text += (trackNumber > 0) ? trackNumber + "-" : ""; - text += title + ""; - - text += (artist !== albumArtist) ? " - " + artist + "" : ""; - - return text; + if (trackNumber > 0) { + if (artist !== albumArtist) + return i18nc("%1: track number. %2: track title. %3: artist name", + "%1-%2 - %3", + Number(trackNumber).toLocaleString(Qt.locale(), 'f', 0), + title, artist); + else + return i18nc("%1: track number. %2: track title.", + "%1-%2", + Number(trackNumber).toLocaleString(Qt.locale(), 'f', 0), + title); + } else { + if (artist !== albumArtist) + return i18nc("%1: track title. %2: artist name", + "%1 - %2", + title, artist); + else + return i18nc("%1: track title", + "%1", + title); + } } + elide: Text.ElideRight horizontalAlignment: Text.AlignLeft color: myPalette.text + Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter + Layout.fillWidth: true Layout.leftMargin: { if (!LayoutMirroring.enabled) return (!isSingleDiscAlbum ? elisaTheme.layoutHorizontalMargin * 4 : elisaTheme.layoutHorizontalMargin) @@ -159,10 +175,6 @@ else return 0 } - Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter - Layout.fillWidth: true - - elide: Text.ElideRight } Item { @@ -213,7 +225,15 @@ LabelWithToolTip { id: mainLabelDetailed - text: (trackNumber > -1) ? trackNumber + ' - ' + title : title + text: { + if (trackNumber > -1) { + return i18nc("%1: track number. %2: track title", "%1 - %2", + Number(trackNumber).toLocaleString(Qt.locale(), 'f', 0), title); + } else { + return title; + } + } + horizontalAlignment: Text.AlignLeft font.weight: Font.Bold @@ -285,6 +305,8 @@ ToolButton { id: clearAndEnqueueButton + scale: LayoutMirroring.enabled ? -1 : 1 + height: elisaTheme.delegateHeight width: elisaTheme.delegateHeight @@ -303,6 +325,11 @@ Layout.rightMargin: elisaTheme.layoutHorizontalMargin } + TextMetrics { + id: durationTextMetrics + text: i18nc("This is used to preserve a fixed width for the duration text.", "00:00") + } + LabelWithToolTip { id: durationLabel @@ -312,10 +339,12 @@ color: myPalette.text elide: Text.ElideRight + horizontalAlignment: Text.AlignRight Layout.alignment: Qt.AlignVCenter | Qt.AlignRight Layout.rightMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 Layout.leftMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 + Layout.preferredWidth: durationTextMetrics.width+1 // be in the safe side } } } diff --git a/src/qml/MediaTrackMetadataView.qml b/src/qml/MediaTrackMetadataView.qml --- a/src/qml/MediaTrackMetadataView.qml +++ b/src/qml/MediaTrackMetadataView.qml @@ -74,6 +74,10 @@ anchors.fill: parent spacing: 0 + // This is needed since Dialog doesn't inherit from Item + LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft + LayoutMirroring.childrenInherit: true + ListView { id: trackData @@ -95,7 +99,8 @@ Layout.preferredWidth: trackData.width * 0.3 Layout.minimumHeight: textSize.height - Layout.rightMargin: elisaTheme.layoutHorizontalMargin + Layout.rightMargin: !LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 + Layout.leftMargin: LayoutMirroring.enabled ? elisaTheme.layoutHorizontalMargin : 0 } Text { diff --git a/src/qml/PlayListEntry.qml b/src/qml/PlayListEntry.qml --- a/src/qml/PlayListEntry.qml +++ b/src/qml/PlayListEntry.qml @@ -249,7 +249,19 @@ LabelWithToolTip { id: mainCompactLabel - text: (trackNumber > -1 ? (((discNumber && !isSingleDiscAlbum) ? discNumber + ' - ' + trackNumber : trackNumber) + ' - ' + title) : title) + text: { + if (trackNumber > -1) { + if (discNumber && !isSingleDiscAlbum) + return i18nc("%1: disk number. %2: track number. %3: track title", "%1 - %2 - %3", + Number(discNumber).toLocaleString(Qt.locale(), 'f', 0), + Number(trackNumber).toLocaleString(Qt.locale(), 'f', 0), title); + else + return i18nc("%1: track number. %2: track title", "%1 - %2", + Number(trackNumber).toLocaleString(Qt.locale(), 'f', 0), title); + } else { + return title; + } + } font.weight: (isPlaying ? Font.Bold : Font.Normal) color: myPalette.text @@ -261,6 +273,7 @@ visible: isValid elide: Text.ElideRight + horizontalAlignment: Text.AlignLeft } LabelWithToolTip { @@ -306,6 +319,7 @@ implicitWidth: elisaTheme.smallDelegateToolButtonSize opacity: 0 + scale: LayoutMirroring.enabled ? -1 : 1 // We can mirror the symmetrical pause icon visible: opacity > 0.1 action: !(isPlaying == MediaPlayList.IsPlaying) ? playNow : pauseNow @@ -395,14 +409,23 @@ starSize: elisaTheme.ratingStarSize } + TextMetrics { + id: durationTextMetrics + text: i18nc("This is used to preserve a fixed width for the duration text.", "00:00") + } + LabelWithToolTip { id: durationLabel + text: duration color: myPalette.text elide: Text.ElideRight Layout.alignment: Qt.AlignVCenter | Qt.AlignRight + Layout.preferredWidth: durationTextMetrics.width+1 // be in the safe side + + horizontalAlignment: Text.AlignRight } } }