Warning, /plasma/plasma-mobile/containments/homescreens/folio/package/contents/ui/delegate/AppDelegate.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
0002 // SPDX-License-Identifier: LGPL-2.0-or-later
0003 
0004 import QtQuick
0005 import QtQuick.Layouts
0006 import QtQuick.Controls as Controls
0007 import QtQuick.Effects
0008 
0009 import org.kde.kirigami 2.20 as Kirigami
0010 
0011 import org.kde.private.mobile.homescreen.folio 1.0 as Folio
0012 import org.kde.plasma.private.mobileshell.state as MobileShellState
0013 import org.kde.plasma.private.mobileshell as MobileShell
0014 
0015 AbstractDelegate {
0016     id: root
0017     shadow: true
0018     name: application.name
0019 
0020     property Folio.FolioApplication application
0021 
0022     property alias iconItem: icon
0023 
0024     property bool turnToFolder: false
0025     property bool turnToFolderAnimEnabled: false
0026 
0027     function launchApp() {
0028         if (application.icon !== "") {
0029             MobileShellState.ShellDBusClient.openAppLaunchAnimation(
0030                     application.icon,
0031                     application.name,
0032                     root.iconItem.Kirigami.ScenePosition.x + root.iconItem.width/2,
0033                     root.iconItem.Kirigami.ScenePosition.y + root.iconItem.height/2,
0034                     Math.min(root.iconItem.width, root.iconItem.height));
0035         }
0036 
0037         application.setMinimizedDelegate(root);
0038         MobileShell.AppLaunch.launchOrActivateApp(application.storageId);
0039     }
0040 
0041     onAfterClickAnimation: {
0042         launchApp();
0043     }
0044 
0045     contentItem: Item {
0046         height: Folio.FolioSettings.delegateIconSize
0047         width: Folio.FolioSettings.delegateIconSize
0048 
0049         // background for folder creation animation
0050         Rectangle {
0051             id: rect
0052             radius: Kirigami.Units.largeSpacing
0053             color: Qt.rgba(255, 255, 255, 0.3)
0054             anchors.fill: parent
0055 
0056             opacity: root.turnToFolder ? 1 : 0
0057             property real scaleAmount: root.turnToFolder ? 1.2 : 1.0
0058 
0059             Behavior on scaleAmount {
0060                 enabled: root.turnToFolderAnimEnabled
0061                 NumberAnimation { duration: Kirigami.Units.longDuration; easing.type: Easing.InOutQuad }
0062             }
0063             Behavior on opacity {
0064                 enabled: root.turnToFolderAnimEnabled
0065                 NumberAnimation { duration: Kirigami.Units.longDuration; easing.type: Easing.InOutQuad }
0066             }
0067 
0068             transform: Scale {
0069                 origin.x: rect.width / 2
0070                 origin.y: rect.height / 2
0071                 xScale: rect.scaleAmount
0072                 yScale: rect.scaleAmount
0073             }
0074         }
0075 
0076         // app icon
0077         DelegateAppIcon {
0078             id: icon
0079             anchors.fill: parent
0080             source: root.application.icon
0081 
0082             property real scaleAmount: root.turnToFolder ? 0.3 : 1.0
0083             Behavior on scaleAmount {
0084                 enabled: root.turnToFolderAnimEnabled
0085                 NumberAnimation { duration: root.turnToFolderAnimEnabled ? Kirigami.Units.longDuration : 0; easing.type: Easing.InOutQuad }
0086             }
0087 
0088             transform: Scale {
0089                 origin.x: icon.width / 2
0090                 origin.y: icon.height / 2
0091                 xScale: icon.scaleAmount
0092                 yScale: icon.scaleAmount
0093             }
0094 
0095             Rectangle {
0096                 anchors {
0097                     horizontalCenter: parent.horizontalCenter
0098                     bottom: parent.bottom
0099                     bottomMargin: -Kirigami.Units.smallSpacing
0100                 }
0101                 visible: root.application.running
0102                 radius: width
0103                 width: Kirigami.Units.smallSpacing
0104                 height: width
0105                 color: Kirigami.Theme.highlightColor
0106             }
0107         }
0108     }
0109 }
0110 
0111