diff --git a/autotests/qmltests/tst_GridBrowserDelegate.qml b/autotests/qmltests/tst_GridBrowserDelegate.qml --- a/autotests/qmltests/tst_GridBrowserDelegate.qml +++ b/autotests/qmltests/tst_GridBrowserDelegate.qml @@ -107,46 +107,46 @@ compare(selectedSpy.count, 0); compare(delegateItem.focus, true, "delegateItem.focus"); + var replaceAndPlayButtonItem = findChild(delegateItem, "replaceAndPlayButton"); var enqueueButtonItem = findChild(delegateItem, "enqueueButton"); var openButtonItem = findChild(delegateItem, "openButton"); - var replaceAndPlayButtonItem = findChild(delegateItem, "replaceAndPlayButton"); + verify(replaceAndPlayButtonItem !== null, "valid replaceAndPlayButton") verify(enqueueButtonItem !== null, "valid enqueueButton") verify(openButtonItem !== null, "valid openButton") - verify(replaceAndPlayButtonItem !== null, "valid replaceAndPlayButton") + compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); keyClick(Qt.Key_Tab) compare(enqueueSpy.count, 0) compare(replaceAndPlaySpy.count, 0) compare(openSpy.count, 0) compare(selectedSpy.count, 0) compare(delegateItem.focus, true, "delegateItem.focus"); - compare(enqueueButtonItem.focus, true, "enqueueButton.focus"); + compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); + compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); keyClick(Qt.Key_Tab) compare(enqueueSpy.count, 0) compare(replaceAndPlaySpy.count, 0) compare(openSpy.count, 0) compare(selectedSpy.count, 0) compare(delegateItem.focus, true, "delegateItem.focus"); - compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); - compare(openButtonItem.focus, true, "enqueueButton.focus"); compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); + compare(enqueueButtonItem.focus, true, "enqueueButton.focus"); + compare(openButtonItem.focus, false, "enqueueButton.focus"); keyClick(Qt.Key_Tab) compare(enqueueSpy.count, 0) compare(replaceAndPlaySpy.count, 0) compare(openSpy.count, 0) compare(selectedSpy.count, 0) compare(delegateItem.focus, true, "delegateItem.focus"); + compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); - compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); + compare(openButtonItem.focus, true, "enqueueButton.focus"); enqueueButtonItem.focus = false; openButtonItem.focus = false; @@ -173,75 +173,75 @@ compare(openSpy.count, 0); compare(selectedSpy.count, 0); + var replaceAndPlayButtonItem = findChild(delegateItem, "replaceAndPlayButton"); var enqueueButtonItem = findChild(delegateItem, "enqueueButton"); var openButtonItem = findChild(delegateItem, "openButton"); - var replaceAndPlayButtonItem = findChild(delegateItem, "replaceAndPlayButton"); + verify(replaceAndPlayButtonItem !== null, "valid replaceAndPlayButton") verify(enqueueButtonItem !== null, "valid enqueueButton") verify(openButtonItem !== null, "valid openButton") - verify(replaceAndPlayButtonItem !== null, "valid replaceAndPlayButton") + compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); mouseClick(delegateItem, 0, 0); compare(delegateItem.focus, false, "delegateItem.focus"); + compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); compare(enqueueSpy.count, 0); compare(replaceAndPlaySpy.count, 0); compare(openSpy.count, 0); compare(selectedSpy.count, 1); - mouseDoubleClickSequence(delegateItem, 0, 0); - openSpy.wait(150); - compare(delegateItem.focus, false, "delegateItem.focus"); - compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); - compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); - compare(enqueueSpy.count, 0); - compare(replaceAndPlaySpy.count, 0); - compare(openSpy.count, 1); - compare(selectedSpy.count, 2); - mouseMove(enqueueButtonItem); mouseClick(enqueueButtonItem); - compare(delegateItem.focus, false, "delegateItem.focus"); - compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); - compare(openButtonItem.focus, false, "enqueueButton.focus"); + compare(delegateItem.focus, true, "delegateItem.focus"); compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); + compare(enqueueButtonItem.focus, true, "enqueueButton.focus"); + compare(openButtonItem.focus, false, "enqueueButton.focus"); compare(enqueueSpy.count, 1); compare(replaceAndPlaySpy.count, 0); - compare(openSpy.count, 1); - compare(selectedSpy.count, 2); + compare(openSpy.count, 0); + compare(selectedSpy.count, 1); mouseMove(openButtonItem); mouseClick(openButtonItem); - compare(delegateItem.focus, false, "delegateItem.focus"); - compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); - compare(openButtonItem.focus, false, "enqueueButton.focus"); + compare(delegateItem.focus, true, "delegateItem.focus"); compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); + compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); + compare(openButtonItem.focus, true, "enqueueButton.focus"); compare(enqueueSpy.count, 1); compare(replaceAndPlaySpy.count, 0); - compare(openSpy.count, 2); - compare(selectedSpy.count, 2); + compare(openSpy.count, 1); + compare(selectedSpy.count, 1); mouseMove(replaceAndPlayButtonItem); mouseClick(replaceAndPlayButtonItem); - compare(delegateItem.focus, false, "delegateItem.focus"); + compare(delegateItem.focus, true, "delegateItem.focus"); + compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); compare(enqueueSpy.count, 1); compare(replaceAndPlaySpy.count, 1); - compare(openSpy.count, 2); - compare(selectedSpy.count, 2); + compare(openSpy.count, 1); + compare(selectedSpy.count, 1); mouseMove(otherItem, 0, 0); - compare(delegateItem.focus, false, "delegateItem.focus"); + compare(delegateItem.focus, true, "delegateItem.focus"); + compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); + compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); + compare(openButtonItem.focus, false, "enqueueButton.focus"); + compare(enqueueSpy.count, 1); + compare(replaceAndPlaySpy.count, 1); + compare(openSpy.count, 1); + compare(selectedSpy.count, 1); + + mouseDoubleClickSequence(delegateItem, 0, 0); + openSpy.wait(150); + compare(delegateItem.focus, true, "delegateItem.focus"); + compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); compare(enqueueSpy.count, 1); compare(replaceAndPlaySpy.count, 1); compare(openSpy.count, 2); @@ -267,66 +267,86 @@ compare(selectedSpy.count, 0); compare(delegateItem.focus, true, "delegateItem.focus"); + var replaceAndPlayButtonItem = findChild(delegateItem, "replaceAndPlayButton"); var enqueueButtonItem = findChild(delegateItem, "enqueueButton"); var openButtonItem = findChild(delegateItem, "openButton"); - var replaceAndPlayButtonItem = findChild(delegateItem, "replaceAndPlayButton"); + verify(replaceAndPlayButtonItem !== null, "valid replaceAndPlayButton") verify(enqueueButtonItem !== null, "valid enqueueButton") verify(openButtonItem !== null, "valid openButton") - verify(replaceAndPlayButtonItem !== null, "valid replaceAndPlayButton") + compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); keyClick(Qt.Key_Tab); - compare(enqueueSpy.count, 0); compare(replaceAndPlaySpy.count, 0); + compare(enqueueSpy.count, 0); compare(openSpy.count, 0); compare(selectedSpy.count, 0); compare(delegateItem.focus, true, "delegateItem.focus"); - compare(enqueueButtonItem.focus, true, "enqueueButton.focus"); + compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); + compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); - keyClick(Qt.Key_Tab); + keyClick(Qt.Key_Enter); + compare(replaceAndPlaySpy.count, 1); compare(enqueueSpy.count, 0); - compare(replaceAndPlaySpy.count, 0); compare(openSpy.count, 0); compare(selectedSpy.count, 0); compare(delegateItem.focus, true, "delegateItem.focus"); + compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); - compare(openButtonItem.focus, true, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); + compare(openButtonItem.focus, false, "enqueueButton.focus"); - keyClick(Qt.Key_Tab); + keyClick(Qt.Key_Return); + compare(replaceAndPlaySpy.count, 2); compare(enqueueSpy.count, 0); - compare(replaceAndPlaySpy.count, 0); compare(openSpy.count, 0); compare(selectedSpy.count, 0); compare(delegateItem.focus, true, "delegateItem.focus"); + compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); - keyClick(Qt.Key_Enter); + keyClick(Qt.Key_Tab); + compare(replaceAndPlaySpy.count, 2); compare(enqueueSpy.count, 0); - compare(replaceAndPlaySpy.count, 0); - compare(openSpy.count, 1); + compare(openSpy.count, 0); compare(selectedSpy.count, 0); compare(delegateItem.focus, true, "delegateItem.focus"); - compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); + compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); + compare(enqueueButtonItem.focus, true, "enqueueButton.focus"); + compare(openButtonItem.focus, false, "enqueueButton.focus"); + + keyClick(Qt.Key_Enter); + compare(replaceAndPlaySpy.count, 2); + compare(enqueueSpy.count, 1); + compare(openSpy.count, 0); + compare(selectedSpy.count, 0); + compare(delegateItem.focus, true, "delegateItem.focus"); + compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); + compare(enqueueButtonItem.focus, true, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); keyClick(Qt.Key_Return); - compare(enqueueSpy.count, 0); - compare(replaceAndPlaySpy.count, 0); - compare(openSpy.count, 2); + compare(replaceAndPlaySpy.count, 2); + compare(enqueueSpy.count, 2); + compare(openSpy.count, 0); compare(selectedSpy.count, 0); compare(delegateItem.focus, true, "delegateItem.focus"); - compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); + compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); + compare(enqueueButtonItem.focus, true, "enqueueButton.focus"); compare(openButtonItem.focus, false, "enqueueButton.focus"); - compare(replaceAndPlayButtonItem.focus, true, "enqueueButton.focus"); + + keyClick(Qt.Key_Tab); + compare(replaceAndPlaySpy.count, 2); + compare(enqueueSpy.count, 2); + compare(openSpy.count, 0); + compare(selectedSpy.count, 0); + compare(delegateItem.focus, true, "delegateItem.focus"); + compare(replaceAndPlayButtonItem.focus, false, "enqueueButton.focus"); + compare(enqueueButtonItem.focus, false, "enqueueButton.focus"); + compare(openButtonItem.focus, true, "enqueueButton.focus"); enqueueButtonItem.focus = false; openButtonItem.focus = false; diff --git a/src/qml/BaseTheme.qml b/src/qml/BaseTheme.qml --- a/src/qml/BaseTheme.qml +++ b/src/qml/BaseTheme.qml @@ -97,8 +97,8 @@ property int navigationBarHeight: dp(100) property int navigationBarFilterHeight: dp(44) - property int gridDelegateHeight: dp(100) + layoutVerticalMargin + fontSize.height * 2 - property int gridDelegateWidth: dp(100) + property int gridDelegateHeight: dp(170) + layoutVerticalMargin + fontSize.height * 2 + property int gridDelegateWidth: dp(170) property int viewSelectorDelegateHeight: dp(24) diff --git a/src/qml/GridBrowserDelegate.qml b/src/qml/GridBrowserDelegate.qml --- a/src/qml/GridBrowserDelegate.qml +++ b/src/qml/GridBrowserDelegate.qml @@ -17,7 +17,6 @@ import QtQuick 2.7 import QtQuick.Controls 2.2 -import QtQuick.Controls 1.4 as Controls1 import QtQuick.Window 2.2 import QtQml.Models 2.1 import QtQuick.Layouts 1.2 @@ -39,36 +38,8 @@ signal open() signal selected() - Controls1.Action { - id: enqueueAction - - text: i18nc("Add whole container to play list", "Enqueue") - iconName: 'media-track-add-amarok' - onTriggered: enqueue(databaseId, mainText) - - enabled: databaseId !== undefined - } - - Controls1.Action { - id: openAction - - text: i18nc("Open view of the container", "Open") - iconName: 'document-open-folder' - onTriggered: open() - } - - Controls1.Action { - id: replaceAndPlayAction - - text: i18nc("Clear play list and add whole container to play list", "Play Now and Replace Play List") - iconName: 'media-playback-start' - onTriggered: replaceAndPlay(databaseId, mainText) - - enabled: databaseId !== undefined - } - - Keys.onReturnPressed: openAction.trigger(this) - Keys.onEnterPressed: openAction.trigger(this) + Keys.onReturnPressed: open() + Keys.onEnterPressed: open() ColumnLayout { anchors.fill: parent @@ -88,7 +59,7 @@ gridEntry.selected() } - onDoubleClicked: openAction.trigger(this) + onDoubleClicked: open() TextMetrics { id: mainLabelSize @@ -114,48 +85,78 @@ Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + Loader { id: hoverLoader active: false - anchors.centerIn: parent + anchors { + bottom: parent.bottom + bottomMargin: 2 + left: parent.left + leftMargin: 2 + } + z: 1 opacity: 0 sourceComponent: Row { + spacing: 2 - Controls1.ToolButton { - id: enqueueButton - objectName: 'enqueueButton' + Button { + id: replaceAndPlayButton + objectName: 'replaceAndPlayButton' + + icon.name: 'media-playback-start' - action: enqueueAction + hoverEnabled: true + ToolTip.visible: hovered + ToolTip.delay: 1000 + ToolTip.text: i18nc("Clear play list and add whole container to play list", "Play now, replacing current playlist") - visible: enqueueAction.enabled + onClicked: replaceAndPlay(databaseId, mainText) + Keys.onReturnPressed: replaceAndPlay(databaseId, mainText) + Keys.onEnterPressed: replaceAndPlay(databaseId, mainText) + + + visible: databaseId !== undefined width: elisaTheme.delegateToolButtonSize height: elisaTheme.delegateToolButtonSize } - Controls1.ToolButton { - id: openButton - objectName: 'openButton' + Button { + id: enqueueButton + objectName: 'enqueueButton' + + icon.name: 'media-track-add-amarok' + hoverEnabled: true + ToolTip.visible: hovered + ToolTip.delay: 1000 + ToolTip.text: i18nc("Add whole container to play list", "Add to playlist") + + onClicked: enqueue(databaseId, mainText) + Keys.onReturnPressed: enqueue(databaseId, mainText) + Keys.onEnterPressed: enqueue(databaseId, mainText) - action: openAction + visible: databaseId !== undefined width: elisaTheme.delegateToolButtonSize height: elisaTheme.delegateToolButtonSize } - Controls1.ToolButton { - id: replaceAndPlayButton - objectName: 'replaceAndPlayButton' - - scale: LayoutMirroring.enabled ? -1 : 1 + Button { + id: openButton + objectName: 'openButton' - action: replaceAndPlayAction + icon.name: 'go-next-view-page' + hoverEnabled: true + ToolTip.visible: hovered + ToolTip.delay: 1000 + ToolTip.text: i18nc("Open view of the container", "Open") - visible: replaceAndPlayAction.enabled + onClicked: open() width: elisaTheme.delegateToolButtonSize height: elisaTheme.delegateToolButtonSize @@ -215,10 +216,14 @@ font.weight: Font.Bold color: myPalette.text - horizontalAlignment: Text.AlignLeft + // FIXME: Center-aligned text looks better overall, but + // sometimes results in font kerning issues + // See https://bugreports.qt.io/browse/QTBUG-49646 + horizontalAlignment: Text.AlignHCenter Layout.topMargin: elisaTheme.layoutVerticalMargin * 0.5 - Layout.preferredWidth: gridEntry.width * 0.85 + Layout.maximumWidth: gridEntry.width * 0.9 + Layout.minimumWidth: Layout.maximumWidth Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom elide: Text.ElideRight @@ -230,9 +235,13 @@ font.weight: Font.Light color: myPalette.text - horizontalAlignment: Text.AlignLeft + // FIXME: Center-aligned text looks better overall, but + // sometimes results in font kerning issues + // See https://bugreports.qt.io/browse/QTBUG-49646 + horizontalAlignment: Text.AlignHCenter - Layout.preferredWidth: gridEntry.width * 0.85 + Layout.maximumWidth: gridEntry.width * 0.9 + Layout.minimumWidth: Layout.maximumWidth Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom visible: delegateDisplaySecondaryText @@ -259,10 +268,6 @@ target: hoverLoader opacity: 0.0 } - PropertyChanges { - target: coverImageLoader - opacity: 1 - } }, State { name: 'hoveredOrSelected' @@ -275,10 +280,6 @@ target: hoverLoader opacity: 1.0 } - PropertyChanges { - target: coverImageLoader - opacity: 0.2 - } } ]