Warning, /plasma/kwin/src/plugins/tileseditor/qml/TileDelegate.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2022 Marco Martin <mart@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Layouts 0009 import org.kde.kwin as KWinComponents 0010 import org.kde.kwin.private.effects 0011 import org.kde.kirigami 2.20 as Kirigami 0012 import org.kde.plasma.components 3.0 as PlasmaComponents 0013 0014 Item { 0015 id: delegate 0016 required property KWinComponents.Tile tile 0017 0018 x: Math.round(tile.absoluteGeometryInScreen.x) 0019 y: Math.round(tile.absoluteGeometryInScreen.y) 0020 z: focus ? 1000 : 0 0021 //onZChanged: print(delegate + " "+z) 0022 width: Math.round(tile.absoluteGeometryInScreen.width) 0023 height: Math.round(tile.absoluteGeometryInScreen.height) 0024 Connections { 0025 target: tile 0026 function onTilesChanged() { 0027 if (tile.layoutDirection === KWinComponents.Tile.Floating && tile.tiles.length === 0) { 0028 tile.layoutDirection = tile.parent.layoutDirection; 0029 } 0030 } 0031 } 0032 ResizeHandle { 0033 anchors { 0034 horizontalCenter: parent.left 0035 top: parent.top 0036 bottom: parent.bottom 0037 } 0038 tile: delegate.tile 0039 edge: Qt.LeftEdge 0040 } 0041 ResizeHandle { 0042 anchors { 0043 verticalCenter: parent.top 0044 left: parent.left 0045 right: parent.right 0046 } 0047 tile: delegate.tile 0048 edge: Qt.TopEdge 0049 } 0050 ResizeHandle { 0051 anchors { 0052 horizontalCenter: parent.right 0053 top: parent.top 0054 bottom: parent.bottom 0055 } 0056 tile: delegate.tile 0057 edge: Qt.RightEdge 0058 visible: tile.layoutDirection === KWinComponents.Tile.Floating 0059 } 0060 ResizeHandle { 0061 anchors { 0062 verticalCenter: parent.bottom 0063 left: parent.left 0064 right: parent.right 0065 } 0066 tile: delegate.tile 0067 edge: Qt.BottomEdge 0068 visible: tile.layoutDirection === KWinComponents.Tile.Floating 0069 } 0070 0071 ResizeCorner { 0072 anchors { 0073 top: parent.top 0074 left: parent.left 0075 } 0076 tile: delegate.tile 0077 corner: Qt.TopLeftCorner 0078 } 0079 ResizeCorner { 0080 anchors { 0081 top: parent.top 0082 right: parent.right 0083 } 0084 tile: delegate.tile 0085 corner: Qt.TopRightCorner 0086 } 0087 ResizeCorner { 0088 anchors { 0089 left: parent.left 0090 bottom: parent.bottom 0091 } 0092 tile: delegate.tile 0093 corner: Qt.BottomLeftCorner 0094 } 0095 ResizeCorner { 0096 anchors { 0097 right: parent.right 0098 bottom: parent.bottom 0099 } 0100 tile: delegate.tile 0101 corner: Qt.BottomRightCorner 0102 } 0103 0104 Item { 0105 anchors.fill: parent 0106 0107 Rectangle { 0108 anchors { 0109 fill: parent 0110 margins: Kirigami.Units.smallSpacing 0111 } 0112 visible: tile.tiles.length === 0 0113 radius: 3 0114 opacity: tile.layoutDirection === KWinComponents.Tile.Floating ? 0.6 : 0.3 0115 color: tile.layoutDirection === KWinComponents.Tile.Floating ? Kirigami.Theme.backgroundColor : "transparent" 0116 border.color: Kirigami.Theme.textColor 0117 Rectangle { 0118 anchors { 0119 fill: parent 0120 margins: 1 0121 } 0122 radius: 3 0123 color: "transparent" 0124 border.color: Kirigami.Theme.backgroundColor 0125 } 0126 MouseArea { 0127 anchors.fill: parent 0128 hoverEnabled: true 0129 propagateComposedEvents: true 0130 property point lastPos 0131 onClicked: { 0132 delegate.focus = true; 0133 if (tile.layoutDirection !== KWinComponents.Tile.Floating) { 0134 mouse.accepted = false; 0135 } 0136 } 0137 onPressed: { 0138 lastPos = mapToItem(null, mouse.x, mouse.y); 0139 } 0140 onPositionChanged: { 0141 if (!pressed || tile.layoutDirection !== KWinComponents.Tile.Floating) { 0142 return; 0143 } 0144 let pos = mapToItem(null, mouse.x, mouse.y); 0145 let deltaPoint = Qt.point(pos.x - lastPos.x, pos.y - lastPos.y); 0146 deltaPoint.x = Math.max(deltaPoint.x, tile.parent.absoluteGeometryInScreen.x - tile.absoluteGeometryInScreen.x); 0147 deltaPoint.x = Math.min(deltaPoint.x, (tile.parent.absoluteGeometryInScreen.x + tile.parent.absoluteGeometryInScreen.width) - (tile.absoluteGeometryInScreen.x + tile.absoluteGeometryInScreen.width)); 0148 0149 deltaPoint.y = Math.max(deltaPoint.y, tile.parent.absoluteGeometryInScreen.y - tile.absoluteGeometryInScreen.y); 0150 deltaPoint.y = Math.min(deltaPoint.y, (tile.parent.absoluteGeometryInScreen.y + tile.parent.absoluteGeometryInScreen.height) - (tile.absoluteGeometryInScreen.y + tile.absoluteGeometryInScreen.height)); 0151 0152 tile.moveByPixels(deltaPoint); 0153 lastPos = pos; 0154 } 0155 } 0156 } 0157 GridLayout { 0158 anchors.centerIn: parent 0159 visible: tile.tiles.length === 0 0160 readonly property bool compact: delegate.width < Kirigami.Units.gridUnit * 10 || delegate.height < splitButton.implicitHeight * visibleChildren.length + rowSpacing * visibleChildren.length + Kirigami.Units.gridUnit 0161 rows: compact ? 1 : -1 0162 columns: compact ? -1 : 1 0163 PlasmaComponents.Button { 0164 id: splitButton 0165 Layout.fillWidth: true 0166 icon.name: "view-split-left-right" 0167 text: i18nd("kwin","Split Horizontally") 0168 display: parent.compact ? PlasmaComponents.Button.IconOnly : PlasmaComponents.Button.TextBesideIcon 0169 onClicked: tile.split(KWinComponents.Tile.Horizontal) 0170 } 0171 PlasmaComponents.Button { 0172 Layout.fillWidth: true 0173 icon.name: "view-split-top-bottom" 0174 text: i18nd("kwin","Split Vertically") 0175 display: parent.compact ? PlasmaComponents.Button.IconOnly : PlasmaComponents.Button.TextBesideIcon 0176 onClicked: tile.split(KWinComponents.Tile.Vertical) 0177 } 0178 PlasmaComponents.Button { 0179 Layout.fillWidth: true 0180 visible: tile.layoutDirection !== KWinComponents.Tile.Floating 0181 icon.name: "window-duplicate" 0182 text: i18nd("kwin","Add Floating Tile") 0183 display: parent.compact ? PlasmaComponents.Button.IconOnly : PlasmaComponents.Button.TextBesideIcon 0184 onClicked: tile.split(KWinComponents.Tile.Floating) 0185 } 0186 PlasmaComponents.Button { 0187 id: deleteButton 0188 visible: tile.canBeRemoved 0189 Layout.fillWidth: true 0190 icon.name: "edit-delete" 0191 text: i18nd("kwin","Delete") 0192 display: parent.compact ? PlasmaComponents.Button.IconOnly : PlasmaComponents.Button.TextBesideIcon 0193 onClicked: { 0194 tile.remove(); 0195 } 0196 } 0197 } 0198 } 0199 TapHandler { 0200 enabled: tile.layoutDirection === KWinComponents.Tile.Floating && tile.isLayout 0201 onTapped: effect.deactivate(effect.animationDuration); 0202 } 0203 PlasmaComponents.Button { 0204 anchors { 0205 right: parent.right 0206 bottom: parent.bottom 0207 margins: Kirigami.Units.smallSpacing 0208 } 0209 visible: tile.layoutDirection === KWinComponents.Tile.Floating && tile.isLayout 0210 icon.name: "window-duplicate" 0211 text: i18nd("kwin","Add Floating Tile") 0212 onClicked: tile.split(KWinComponents.Tile.Floating) 0213 } 0214 }