shift-shell/components/mobilehomescreencomponents/qml/LauncherGrid.qml

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

83 lines
3.2 KiB
QML
Raw Normal View History

/*
2021-03-01 20:03:25 +00:00
* SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
*
2021-03-01 20:03:25 +00:00
* SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick 2.4
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.3 as Controls
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.kquickcontrolsaddons 2.0
import org.kde.kirigami 2.10 as Kirigami
2019-07-30 11:39:07 +00:00
import org.kde.plasma.private.containmentlayoutmanager 1.0 as ContainmentLayoutManager
2020-02-11 12:57:34 +00:00
import org.kde.plasma.private.nanoshell 2.0 as NanoShell
import org.kde.plasma.private.mobilehomescreencomponents 0.1 as HomeScreenComponents
2019-08-22 14:59:30 +00:00
2019-08-16 13:50:37 +00:00
LauncherContainer {
id: root
2019-08-30 14:14:34 +00:00
readonly property int columns: Math.floor(root.flow.width / cellWidth)
2021-09-13 16:40:56 +00:00
readonly property int cellWidth: root.flow.width / Math.floor(root.flow.width / ((availableCellHeight - reservedSpaceForLabel) + PlasmaCore.Units.smallSpacing*4))
2019-08-23 10:54:19 +00:00
readonly property int cellHeight: availableCellHeight
2020-07-16 12:51:58 +00:00
signal launched
2019-08-23 10:54:19 +00:00
frame.width: width
2019-08-16 13:50:37 +00:00
Repeater {
parent: root.flow
model: HomeScreenComponents.ApplicationListModel
delegate: HomeDelegate {
2019-08-16 13:50:37 +00:00
id: delegate
width: root.cellWidth
height: root.cellHeight
2019-08-22 11:14:28 +00:00
parent: parentFromLocation
property Item parentFromLocation: {
2020-03-20 00:58:46 +00:00
switch (model.applicationLocation) {
case HomeScreenComponents.ApplicationListModel.Desktop:
2019-08-16 13:50:37 +00:00
return appletsLayout;
case HomeScreenComponents.ApplicationListModel.Favorites:
2019-08-23 10:54:19 +00:00
return favoriteStrip.flow;
default:
2019-08-16 13:50:37 +00:00
return root.flow;
}
}
2019-09-02 16:23:38 +00:00
Component.onCompleted: {
if (model.applicationLocation === HomeScreenComponents.ApplicationListModel.Desktop) {
2019-09-02 16:23:38 +00:00
appletsLayout.restoreItem(delegate);
}
}
onLaunch: (x, y, icon, title) => {
if (icon !== "") {
NanoShell.StartupFeedback.open(
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));
}
2020-07-16 12:51:58 +00:00
root.launched();
}
onParentFromLocationChanged: {
2019-09-02 16:23:38 +00:00
if (!launcherDragManager.active && parent != parentFromLocation) {
parent = parentFromLocation;
if (model.applicationLocation === HomeScreenComponents.ApplicationListModel.Favorites) {
plasmoid.nativeInterface.stackBefore(delegate, parentFromLocation.children[index]);
} else if (model.applicationLocation === HomeScreenComponents.ApplicationListModel.Grid) {
plasmoid.nativeInterface.stackBefore(delegate, parentFromLocation.children[Math.max(0, index - HomeScreenComponents.ApplicationListModel.favoriteCount)]);
}
}
}
}
}
}
2019-08-16 13:50:37 +00:00