-
Notifications
You must be signed in to change notification settings - Fork 919
Expand file tree
/
Copy pathFileActionsWindow.qml
More file actions
232 lines (203 loc) · 8.17 KB
/
FileActionsWindow.qml
File metadata and controls
232 lines (203 loc) · 8.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
/*
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: GPL-2.0-or-later
*/
pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Window
import QtQuick.Layouts
import QtQuick.Controls
import Qt5Compat.GraphicalEffects
import com.nextcloud.desktopclient
import Style
import "./../tray"
ApplicationWindow {
id: root
height: Style.filesActionsHeight
width: Style.filesActionsWidth
flags: Systray.useNormalWindow ? Qt.Window : Qt.Dialog | Qt.FramelessWindowHint
visible: true
color: "transparent"
property var accountState: ({})
property string localPath: ""
property string shortLocalPath: ""
property string fileId: ""
property string remoteItemPath: ""
readonly property int windowRadius: Systray.useNormalWindow ? 0.0 : Style.trayWindowRadius
title: qsTr("File actions for %1").arg(root.shortLocalPath)
FileActionsModel {
id: fileActionModel
accountState: root.accountState
localPath: root.localPath
fileId: root.fileId
remoteItemPath: root.remoteItemPath
}
background: Rectangle {
id: maskSource
radius: root.windowRadius
border.width: Style.trayWindowBorderWidth
border.color: palette.dark
color: palette.window
}
OpacityMask {
anchors.fill: parent
anchors.margins: Style.trayWindowBorderWidth
source: maskSourceItem
maskSource: maskSource
}
Rectangle {
id: maskSourceItem
anchors.fill: parent
anchors.margins: Style.standardSpacing
radius: root.windowRadius
clip: true
color: Style.colorWithoutTransparency(palette.base)
ColumnLayout {
id: windowContent
anchors.fill: parent
anchors.margins: Style.standardSpacing
RowLayout {
id: windowHeader
Layout.fillWidth: true
spacing: Style.standardSpacing
Image {
source: fileActionModel.fileIcon + palette.windowText
Layout.preferredWidth: Style.minimumActivityItemHeight
Layout.preferredHeight: Style.minimumActivityItemHeight
Layout.alignment: Qt.AlignVCenter
Layout.margins: Style.extraSmallSpacing
}
EnforcedPlainTextLabel {
id: headerLocalPath
text: root.shortLocalPath
elide: Text.ElideRight
font.bold: true
font.pixelSize: Style.pixelSize
color: palette.text
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
}
Button {
id: closeButton
flat: true
padding: Style.extraSmallSpacing
spacing: 0
icon.source: "image://svgimage-custom-color/close.svg/" + palette.windowText
icon.width: Style.extraSmallIconSize
icon.height: Style.extraSmallIconSize
Layout.alignment: Qt.AlignTop | Qt.AlignRight
Layout.rightMargin: Style.extraSmallSpacing
Layout.topMargin: Style.extraSmallSpacing
onClicked: root.close()
background: Rectangle {
color: "transparent"
radius: root.windowRadius
border.width: closeButton.hovered ? Style.trayWindowBorderWidth : 0
border.color: palette.dark
anchors.fill: parent
Layout.margins: Style.extraSmallSpacing
}
}
}
Rectangle {
id: lineTop
Layout.fillWidth: true
Layout.minimumHeight: Style.extraExtraSmallSpacing
color: palette.dark
}
ListView {
id: fileActionsView
model: fileActionModel
clip: true
spacing: Style.trayHorizontalMargin
Layout.fillWidth: true
Layout.fillHeight: true
delegate: ItemDelegate {
id: fileActionsDelegate
required property string name
required property int index
required property string actionIcon
Layout.fillWidth: true
height: implicitHeight
width: parent.width
implicitHeight: Style.activityListButtonHeight
padding: Style.standardSpacing
text: name
font.pixelSize: Style.defaultFontPtSize
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
icon {
source: actionIcon
color: palette.windowText
width: Style.minimumActivityItemHeight
height: Style.minimumActivityItemHeight
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
}
background: Rectangle {
color: "transparent"
radius: root.windowRadius
border.width: fileActionsDelegate.hovered ? Style.trayWindowBorderWidth : 0
border.color: palette.dark
anchors.margins: Style.standardSpacing
height: parent.height
width: parent.width
}
onClicked: fileActionModel.createRequest(index)
}
}
Button {
id: responseButton
visible: responseText.text !== ""
flat: true
Layout.fillWidth: true
implicitHeight: responseContent.implicitHeight
padding: Style.standardSpacing
leftPadding: Style.standardSpacing
rightPadding: Style.standardSpacing
spacing: Style.standardSpacing
background: Rectangle {
id: responseBorder
radius: root.windowRadius
border.width: Style.trayWindowBorderWidth
border.color: palette.dark
color: palette.window
Layout.fillWidth: true
}
contentItem: RowLayout {
id: responseContent
anchors.fill: parent
anchors.margins: Style.smallSpacing
spacing: Style.standardSpacing
Layout.fillWidth: true
Layout.minimumHeight: Style.accountAvatarStateIndicatorSize
Image {
source: "image://svgimage-custom-color/backup.svg/" + palette.windowText
Layout.preferredWidth: Style.minimumActivityItemHeight
Layout.preferredHeight: Style.minimumActivityItemHeight
Layout.alignment: Qt.AlignLeft
Layout.bottomMargin: Style.standardSpacing
}
Text {
id: responseText
text: fileActionModel.responseLabel
textFormat: Text.RichText
color: palette.text
font.pointSize: Style.pixelSize
font.underline: true
wrapMode: Text.WordWrap
Layout.fillWidth: true
bottomPadding: Style.standardSpacing
}
}
MouseArea {
id: responseArea
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
Qt.openUrlExternally(fileActionModel.responseUrl)
root.close()
}
}
}
}
}
}