Warning, /plasma/plasma-mobile/containments/homescreens/halcyon/package/contents/ui/FolderGrid.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org> 0002 // SPDX-License-Identifier: LGPL-2.0-or-later 0003 0004 import QtQuick 0005 import QtQuick.Controls as QQC2 0006 import QtQuick.Layouts 0007 import QtQuick.Effects 0008 import QtQml.Models 0009 0010 import org.kde.plasma.components 3.0 as PC3 0011 import org.kde.draganddrop as DragDrop 0012 0013 import org.kde.kirigami as Kirigami 0014 import org.kde.plasma.private.mobileshell as MobileShell 0015 import org.kde.private.mobile.homescreen.halcyon as Halcyon 0016 0017 MobileShell.GridView { 0018 id: root 0019 property Halcyon.ApplicationFolder folder: null 0020 0021 property string folderName: folder ? folder.name : "" 0022 property var folderModel: folder ? folder.applications : [] 0023 0024 required property bool twoColumn 0025 0026 signal openConfigureRequested() 0027 signal closeRequested() 0028 0029 property bool inFolderTitleEditMode: false 0030 0031 TapHandler { 0032 onLongPressed: root.openConfigureRequested() 0033 onTapped: root.closeRequested() 0034 } 0035 0036 header: MobileShell.BaseItem { 0037 topPadding: Math.round(root.height * 0.2) 0038 bottomPadding: Kirigami.Units.gridUnit 0039 leftPadding: 0 0040 rightPadding: 0 0041 implicitWidth: root.width 0042 0043 background: Rectangle { 0044 color: 'transparent' 0045 TapHandler { 0046 onLongPressed: root.openConfigureRequested() 0047 onTapped: root.closeRequested() 0048 } 0049 } 0050 0051 Component { 0052 id: folderTitleEdit 0053 0054 TextEdit { 0055 text: root.folderName 0056 color: "white" 0057 selectByMouse: true 0058 wrapMode: TextEdit.Wrap 0059 0060 Component.onCompleted: forceActiveFocus() 0061 0062 font.weight: Font.Bold 0063 font.pointSize: 18 0064 0065 layer.enabled: true 0066 layer.effect: MobileShell.TextDropShadow {} 0067 0068 onTextChanged: { 0069 if (text.includes('\n')) { 0070 // exit text edit mode when new line is entered 0071 root.inFolderTitleEditMode = false; 0072 } else { 0073 root.folder.name = text; 0074 } 0075 } 0076 onEditingFinished: root.inFolderTitleEditMode = false 0077 } 0078 } 0079 0080 Component { 0081 id: folderTitleLabel 0082 0083 QQC2.Label { 0084 text: root.folderName 0085 color: "white" 0086 style: Text.Normal 0087 styleColor: "transparent" 0088 horizontalAlignment: Text.AlignLeft 0089 textFormat: Text.MarkdownText 0090 0091 elide: Text.ElideRight 0092 wrapMode: Text.Wrap 0093 maximumLineCount: 2 0094 0095 font.weight: Font.Bold 0096 font.pointSize: 18 0097 0098 layer.enabled: true 0099 layer.effect: MobileShell.TextDropShadow {} 0100 0101 MouseArea { 0102 anchors.fill: parent 0103 onClicked: root.inFolderTitleEditMode = true 0104 } 0105 } 0106 } 0107 0108 contentItem: RowLayout { 0109 id: rowLayout 0110 spacing: Kirigami.Units.smallSpacing * 2 0111 0112 // close folder button 0113 MouseArea { 0114 id: button 0115 Layout.alignment: Qt.AlignVCenter 0116 implicitHeight: Kirigami.Units.iconSizes.small + Kirigami.Units.gridUnit 0117 implicitWidth: Kirigami.Units.iconSizes.small + Kirigami.Units.gridUnit 0118 0119 cursorShape: Qt.PointingHandCursor 0120 onClicked: root.closeRequested() 0121 0122 // button background 0123 Rectangle { 0124 anchors.fill: parent 0125 color: Qt.rgba(255, 255, 255, button.pressed ? 0.2 : 0) 0126 radius: button.width / 2 0127 } 0128 0129 // button icon 0130 Kirigami.Icon { 0131 anchors.centerIn: parent 0132 implicitHeight: Kirigami.Units.iconSizes.small 0133 implicitWidth: Kirigami.Units.iconSizes.small 0134 isMask: true 0135 color: 'white' 0136 source: 'arrow-left' 0137 0138 layer.enabled: true 0139 layer.effect: MultiEffect { 0140 shadowEnabled: true 0141 shadowVerticalOffset: 1 0142 blurMax: 8 0143 shadowOpacity: 0.6 0144 } 0145 } 0146 } 0147 0148 // folder title 0149 Loader { 0150 Layout.alignment: Qt.AlignVCenter 0151 Layout.fillWidth: true 0152 Layout.maximumWidth: rowLayout.width - button.width - rowLayout.spacing 0153 sourceComponent: root.inFolderTitleEditMode ? folderTitleEdit : folderTitleLabel 0154 } 0155 } 0156 } 0157 0158 model: DelegateModel { 0159 id: visualModel 0160 model: root.folderModel 0161 0162 delegate: Item { 0163 id: delegateRoot 0164 width: root.cellWidth 0165 height: root.cellHeight 0166 0167 property int visualIndex: DelegateModel.itemsIndex 0168 0169 DropArea { 0170 anchors.fill: parent 0171 onEntered: (drag) => { 0172 let from = drag.source.visualIndex; 0173 let to = appDelegate.visualIndex; 0174 visualModel.items.move(from, to); 0175 root.folder.moveEntry(from, to); 0176 } 0177 } 0178 0179 FavoritesAppDelegate { 0180 id: appDelegate 0181 visualIndex: delegateRoot.visualIndex 0182 0183 isFolder: false 0184 application: model.application 0185 0186 menuActions: [ 0187 Kirigami.Action { 0188 icon.name: "emblem-favorite" 0189 text: i18n("Remove from favourites") 0190 onTriggered: root.folder.removeApp(model.index) 0191 }, 0192 Kirigami.Action { 0193 icon.name: "document-open-folder" 0194 text: i18n("Move out of folder") 0195 onTriggered: root.folder.moveAppOut(model.index) 0196 } 0197 ] 0198 0199 implicitWidth: root.cellWidth 0200 implicitHeight: visible ? root.cellHeight : 0 0201 0202 anchors.horizontalCenter: parent.horizontalCenter 0203 anchors.verticalCenter: parent.verticalCenter 0204 0205 states: [ 0206 State { 0207 when: appDelegate.drag.active 0208 ParentChange { 0209 target: appDelegate 0210 parent: root 0211 } 0212 0213 AnchorChanges { 0214 target: appDelegate 0215 anchors.horizontalCenter: undefined 0216 anchors.verticalCenter: undefined 0217 } 0218 } 0219 ] 0220 } 0221 } 0222 } 0223 0224 // animations 0225 displaced: Transition { 0226 NumberAnimation { 0227 properties: "x,y" 0228 easing.type: Easing.OutQuad 0229 } 0230 } 0231 }