diff --git a/src/data/contents/ui/MainPage.qml b/src/data/contents/ui/MainPage.qml --- a/src/data/contents/ui/MainPage.qml +++ b/src/data/contents/ui/MainPage.qml @@ -17,7 +17,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import QtQuick 2.1 +import QtQuick 2.3 import QtQuick.Controls 2.0 as QQC2 import QtQuick.Layouts 1.2 import org.kde.kirigami 2.11 as Kirigami @@ -31,10 +31,19 @@ color: Kirigami.Theme.backgroundColor } + leftPadding: 0 + rightPadding: 0 + bottomPadding: 0 + topPadding: 0 title: qsTr("Kirigami Gallery") //flickable: mainListView actions { + main: Kirigami.Action { + iconName: "go-home" + enabled: root.pageStack.lastVisibleItem != pageRoot + onTriggered: root.pageStack.pop(-1) + } contextualActions: [ Kirigami.Action { text:"Action 1" @@ -189,32 +198,101 @@ } } } + KSortFilterProxyModel { + id: filteredModel + sourceModel: galleryModel + filterRole: "title" + filterRegularExpression: { + if (searchField.text === "") return new RegExp() + return new RegExp("%1".arg(searchField.text), "i") + } + } ColumnLayout { + spacing: 0 Kirigami.CardsLayout { + visible: root.pageStack.wideMode + Layout.topMargin: Kirigami.Units.largeSpacing + Layout.leftMargin: Kirigami.Units.largeSpacing Repeater { - activeFocusOnTab: true focus: true - model: KSortFilterProxyModel { - sourceModel: galleryModel - filterRole: "title" - filterRegularExpression: { - if (!searchAction.checked || searchField.text === "") return new RegExp() - return new RegExp("%1".arg(searchField.text), "i") + model: filteredModel + delegate: Kirigami.Card { + id: listItem + Rectangle { + anchors.fill: parent + color: "transparent" + border { + width: listItem.activeFocus ? 2 : 0 + color: Kirigami.Theme.activeTextColor + } + } + activeFocusOnTab: true + showClickFeedback: true + onClicked: action.trigger() + Keys.onReturnPressed: action.trigger() + Keys.onEnterPressed: action.trigger() + highlighted: action.checked + implicitWidth: Kirigami.Units.gridUnit*30 + implicitHeight: root.pageStack.lastVisibleItem == pageRoot ? Kirigami.Units.gridUnit*10 : Kirigami.Units.gridUnit*2 + Layout.maximumWidth: Kirigami.Units.gridUnit*30 + Image { + id: littleBanner + height: width + source: img + fillMode: Image.PreserveAspectFit + mipmap: true + anchors { + top: parent.top + bottom: parent.bottom + left: parent.left + leftMargin: Kirigami.Units.smallSpacing + } + } + Kirigami.Heading { + text: title + level: 2 + anchors.verticalCenter: parent.verticalCenter + anchors.left: littleBanner.right + anchors.leftMargin: Kirigami.Units.largeSpacing + } + Kirigami.PagePoolAction { + id: action + pagePool: mainPagePool + basePage: pageRoot + page: targetPage } } + } + } + Kirigami.CardsLayout { + visible: !root.pageStack.wideMode + Layout.topMargin: Kirigami.Units.largeSpacing + Repeater { + focus: true + model: filteredModel delegate: Kirigami.Card { id: listItem banner { source: img title: title titleAlignment: Qt.AlignBottom | Qt.AlignLeft } + Rectangle { + anchors.fill: parent + color: "transparent" + border { + width: listItem.activeFocus ? 2 : 0 + color: Kirigami.Theme.activeTextColor + } + } + activeFocusOnTab: true showClickFeedback: true onClicked: action.trigger() + Keys.onReturnPressed: action.trigger() + Keys.onEnterPressed: action.trigger() highlighted: action.checked implicitWidth: Kirigami.Units.gridUnit * 30 Layout.maximumWidth: Kirigami.Units.gridUnit * 30 - Kirigami.PagePoolAction { id: action pagePool: mainPagePool