shift-shell/containments/homescreens/halcyon/package/contents/ui/GridAppList.qml

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

111 lines
3.4 KiB
QML
Raw Normal View History

/*
* SPDX-FileCopyrightText: 2021 Devin Lin <espidev@gmail.com>
* SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.15 as Controls
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.kirigami 2.10 as Kirigami
import org.kde.plasma.private.nanoshell 2.0 as NanoShell
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
import org.kde.plasma.private.mobileshell.state 1.0 as MobileShellState
2023-03-05 02:40:06 +00:00
import org.kde.private.mobile.homescreen.halcyon 1.0 as Halcyon
MobileShell.GridView {
id: gridView
cacheBuffer: cellHeight * 20 // 10 rows above and below
reuseItems: true
Controls.ScrollBar.vertical: Controls.ScrollBar {}
Connections {
target: parent
function onFocusRequested() {
forceActiveFocus();
}
}
// ensure items aren't visible out of bounds
layer.enabled: true
readonly property int reservedSpaceForLabel: metrics.height
readonly property real effectiveContentWidth: width - leftMargin - rightMargin
cellWidth: gridView.effectiveContentWidth / Math.min(Math.floor(effectiveContentWidth / (PlasmaCore.Units.iconSizes.huge + Kirigami.Units.largeSpacing * 2)), 8)
cellHeight: cellWidth + reservedSpaceForLabel
property int columns: Math.floor(effectiveContentWidth / cellWidth)
property int rows: Math.ceil(Halcyon.ApplicationListModel.count / columns)
function goToBeginning() {
goToBeginningAnim.restart();
}
NumberAnimation on contentY {
id: goToBeginningAnim
to: gridView.originY
duration: 200
easing.type: Easing.InOutQuad
}
2022-06-18 19:42:29 +00:00
model: Halcyon.ApplicationListModel
header: MobileShell.BaseItem {
implicitWidth: gridView.effectiveContentWidth
2023-03-12 20:03:21 +00:00
topPadding: PlasmaCore.Units.largeSpacing + Math.round(gridView.height * 0.1)
bottomPadding: PlasmaCore.Units.largeSpacing
leftPadding: PlasmaCore.Units.smallSpacing
contentItem: PC3.Label {
color: "white"
font.pointSize: 16
font.weight: Font.Bold
text: i18n("Applications")
}
}
PC3.Label {
id: metrics
text: "M\nM"
visible: false
font.pointSize: PlasmaCore.Theme.defaultFont.pointSize * 0.85
font.weight: Font.Bold
}
Keys.onReturnPressed: currentItem.launchApp()
delegate: GridAppDelegate {
id: delegate
2022-06-18 19:42:29 +00:00
property Halcyon.Application application: model.application
width: gridView.cellWidth
height: gridView.cellHeight
reservedSpaceForLabel: gridView.reservedSpaceForLabel
onLaunch: (x, y, icon, title, storageId) => {
if (icon !== "") {
MobileShellState.Shell.openAppLaunchAnimation(
icon,
title,
delegate.iconItem.Kirigami.ScenePosition.x + delegate.iconItem.width/2,
delegate.iconItem.Kirigami.ScenePosition.y + delegate.iconItem.height/2,
Math.min(delegate.iconItem.width, delegate.iconItem.height));
}
2022-06-18 19:42:29 +00:00
application.setMinimizedDelegate(delegate);
MobileShell.ShellUtil.launchApp(application.storageId);
}
}
2023-03-12 20:03:21 +00:00
Component.onCompleted: {
goToBeginning();
}
}