shift-shell/containments/homescreen/package/contents/ui/launcher/LauncherGrid.qml

94 lines
3.8 KiB
QML
Raw Normal View History

/*
* Copyright 2019 Marco Martin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
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
2020-02-11 12:57:34 +00:00
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
2019-08-22 14:59:30 +00:00
import org.kde.phone.homescreen 1.0
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)
2019-08-16 13:50:37 +00:00
readonly property int cellWidth: root.flow.width / Math.floor(root.flow.width / ((availableCellHeight - reservedSpaceForLabel) + units.smallSpacing*4))
2019-08-23 10:54:19 +00:00
readonly property int cellHeight: availableCellHeight
launcherGrid: root
2019-08-23 10:54:19 +00:00
frame.width: width
2019-08-16 13:50:37 +00:00
Repeater {
parent: root.flow
2019-08-16 13:50:37 +00:00
model: plasmoid.nativeInterface.applicationListModel
delegate: Delegate {
id: delegate
width: root.cellWidth
height: root.cellHeight
2019-08-22 11:14:28 +00:00
parent: parentFromLocation
property Item parentFromLocation: {
2019-08-23 10:54:19 +00:00
switch (model.ApplicationLocationRole) {
case ApplicationListModel.Desktop:
2019-08-16 13:50:37 +00:00
return appletsLayout;
2019-08-23 10:54:19 +00:00
case ApplicationListModel.Favorites:
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.ApplicationLocationRole == ApplicationListModel.Desktop) {
appletsLayout.restoreItem(delegate);
}
}
2020-02-11 15:14:54 +00:00
onLaunch: (x, y, icon, title) => {
delegate.grabToImage((img) => {
NanoShell.StartupFeedback.open(
icon,
title,
ColourAverage.averageColour(img.image),
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));
});
2019-12-20 06:44:15 +00:00
}
onParentFromLocationChanged: {
2019-09-02 16:23:38 +00:00
if (!launcherDragManager.active && parent != parentFromLocation) {
parent = parentFromLocation;
if (model.ApplicationLocationRole == ApplicationListModel.Favorites) {
plasmoid.nativeInterface.stackBefore(delegate, parentFromLocation.children[index]);
} else if (model.ApplicationLocationRole == ApplicationListModel.Grid) {
plasmoid.nativeInterface.stackBefore(delegate, parentFromLocation.children[Math.max(0, index - plasmoid.nativeInterface.applicationListModel.favoriteCount)]);
}
}
}
}
}
}
2019-08-16 13:50:37 +00:00