shift-shell/containments/homescreens/folio/package/contents/ui/HomeScreenContents.qml

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

239 lines
8.3 KiB
QML
Raw Normal View History

/*
* SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
*
* SPDX-License-Identifier: LGPL-2.0-or-later
*/
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.1
2023-03-06 19:13:48 +00:00
import Qt5Compat.GraphicalEffects
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 3.0 as PlasmaComponents
import org.kde.draganddrop 2.0 as DragDrop
2023-03-06 19:13:48 +00:00
import org.kde.plasma.private.containmentlayoutmanager 1.0 as ContainmentLayoutManager
2023-03-06 19:13:48 +00:00
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import "private" as Private
DragDrop.DropArea {
id: dropArea
2023-03-06 19:13:48 +00:00
required property var homeScreenState
required property Folio.DesktopModel desktopModel
property var applicationListModel: Folio.ApplicationListModel
2021-05-05 15:37:31 +00:00
property alias launcherDelegate: launcherRepeater.delegate
2021-05-05 13:59:26 +00:00
property alias launcherModel: launcherRepeater.model
2021-05-05 15:37:31 +00:00
property alias launcherRepeater: launcherRepeater
property alias itemsBoundingRect: appletsLayout.childrenRect
property alias appletsLayout: appletsLayout
property FavoriteStrip favoriteStrip
property HomeScreenPages homeScreenPages
property LauncherDragManager launcherDragManager: LauncherDragManager {
id: launcherDragManager
parent: {
let candidate = dropArea;
while (candidate.parent) {
candidate = candidate.parent;
}
return candidate;
}
anchors.fill: parent
z: 999999
appletsLayout: dropArea.appletsLayout
favoriteStrip: dropArea.favoriteStrip
2023-03-06 19:13:48 +00:00
desktopModel: dropArea.desktopModel
}
property bool inAppletEditMode: false
Connections {
target: plasmoid
function onEditModeChanged() {
appletsLayout.editMode = plasmoid.editMode
}
}
onDragEnter: {
event.accept(event.proposedAction);
launcherDragManager.active = true;
}
2023-03-06 19:13:48 +00:00
onDragMove: {
let posInFavorites = favoriteStrip.mapFromItem(this, event.x, event.y);
if (posInFavorites.y > 0) {
if (desktopModel.favoriteCount >= desktopModel.maxFavoriteCount) {
launcherDragManager.hideSpacer();
} else {
launcherDragManager.showSpacerAtPos(event.x, event.y, favoriteStrip);
}
appletsLayout.hidePlaceHolder();
} else {
appletsLayout.showPlaceHolderAt(
Qt.rect(event.x - appletsLayout.defaultItemWidth / 2,
event.y - appletsLayout.defaultItemHeight / 2,
appletsLayout.defaultItemWidth,
appletsLayout.defaultItemHeight)
);
launcherDragManager.hideSpacer();
2021-03-31 15:01:24 +00:00
let scenePos = mapToItem(null, event.x, event.y);
//SCROLL LEFT
2021-09-13 16:40:56 +00:00
if (scenePos.x < PlasmaCore.Units.gridUnit) {
homeScreenPages.scrollLeft();
//SCROLL RIGHT
} else if (scenePos.x > homeScreenPages.width - PlasmaCore.Units.gridUnit) {
homeScreenPages.scrollRight();
//DON't SCROLL
} else {
homeScreenPages.stopScroll();
}
}
}
onDragLeave: {
appletsLayout.hidePlaceHolder();
launcherDragManager.active = false;
}
preventStealing: true
onDrop: {
launcherDragManager.active = false;
if (event.mimeData.formats[0] === "text/x-plasma-phone-homescreen-launcher") {
let storageId = event.mimeData.getDataAsByteArray("text/x-plasma-phone-homescreen-launcher");
let posInFavorites = favoriteStrip.flow.mapFromItem(this, event.x, event.y);
if (posInFavorites.y > 0) {
if (desktopModel.favoriteCount >= desktopModel.maxFavoriteCount ) {
return;
}
let pos = Math.min(desktopModel.count, Math.floor(posInFavorites.x/favoriteStrip.cellWidth))
desktopModel.addFavorite(storageId, pos, Folio.ApplicationListModel.Favorites)
let item = launcherRepeater.itemAt(pos);
if (item) {
item.x = posInFavorites.x;
item.y = 0//posInFavorites.y;
//launcherDragManager.showSpacer(item, item.width/2, item.height/2);
launcherDragManager.dropItem(item, item.width/2, item.height/2);
}
return;
}
let pos = desktopModel.count;
desktopModel.addFavorite(storageId, pos, Folio.ApplicationListModel.Desktop)
let item = launcherRepeater.itemAt(pos);
event.accept(event.proposedAction);
if (item) {
item.x = appletsLayout.placeHolder.x;
item.y = appletsLayout.placeHolder.y;
appletsLayout.hidePlaceHolder();
launcherDragManager.dropItem(item, appletsLayout.placeHolder.x + appletsLayout.placeHolder.width/2, appletsLayout.placeHolder.y + appletsLayout.placeHolder.height/2);
}
appletsLayout.hidePlaceHolder();
} else {
plasmoid.processMimeData(event.mimeData,
event.x - appletsLayout.placeHolder.width / 2, event.y - appletsLayout.placeHolder.height / 2);
event.accept(event.proposedAction);
appletsLayout.hidePlaceHolder();
}
}
ContainmentLayoutManager.AppletsLayout {
id: appletsLayout
anchors {
fill: parent
bottomMargin: dropArea.favoriteStrip ? dropArea.favoriteStrip.height : 0
}
signal appletsLayoutInteracted
TapHandler {
target: homeScreenPages
enabled: homeScreenState.currentView === HomeScreenState.PageView && homeScreenState.interactive
onTapped: {
//Hides icons close button
appletsLayout.appletsLayoutInteracted();
appletsLayout.editMode = false;
2021-04-08 15:36:23 +00:00
appletsLayout.forceActiveFocus();
}
onLongPressed: {
if (homeScreenState.currentSwipeState === HomeScreenState.DeterminingType) {
// only go into edit mode when not in a swipe
appletsLayout.editMode = true;
}
}
2021-04-08 15:36:23 +00:00
onPressedChanged: appletsLayout.focus = true;
}
cellWidth: favoriteStrip.cellWidth
cellHeight: Math.floor(height / Math.floor(height / favoriteStrip.cellHeight))
configKey: width > height ? "ItemGeometriesHorizontal" : "ItemGeometriesVertical"
containment: plasmoid
editModeCondition: plasmoid.immutable
? ContainmentLayoutManager.AppletsLayout.Manual
: ContainmentLayoutManager.AppletsLayout.AfterPressAndHold
// Sets the containment in edit mode when we go in edit mode as well
2021-04-07 16:41:58 +00:00
onEditModeChanged: plasmoid.editMode = editMode;
2021-09-13 16:40:56 +00:00
minimumItemWidth: PlasmaCore.Units.gridUnit * 3
minimumItemHeight: minimumItemWidth
2021-09-13 16:40:56 +00:00
defaultItemWidth: PlasmaCore.Units.gridUnit * 6
defaultItemHeight: defaultItemWidth
acceptsAppletCallback: function(applet, x, y) {
print("Applet: "+applet+" "+x+" "+y)
return true;
}
appletContainerComponent: MobileAppletContainer {
homeScreenState: dropArea.homeScreenState
launcherDragManager: dropArea.launcherDragManager
onEditModeChanged: {
inAppletEditMode = editMode;
}
}
placeHolder: ContainmentLayoutManager.PlaceHolder {}
//FIXME: move
PlasmaComponents.Label {
id: metrics
text: "M\nM"
visible: false
font.pointSize: PlasmaCore.Theme.defaultFont.pointSize * 0.9
}
LauncherRepeater {
id: launcherRepeater
desktopModel: dropArea.desktopModel
homeScreenState: dropArea.homeScreenState
cellWidth: appletsLayout.cellWidth
cellHeight: appletsLayout.cellHeight
appletsLayout: appletsLayout
favoriteStrip: dropArea.favoriteStrip
onScrollLeftRequested: homeScreenPages.scrollLeft()
onScrollRightRequested: homeScreenPages.scrollRight()
onStopScrollRequested: homeScreenPages.stopScroll()
}
}
}