Warning, /plasma/plasma-desktop/containments/desktop/package/contents/ui/ConfigIcons.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2014 Eike Hein <hein@kde.org>
0003 SPDX-FileCopyrightText: 2015 Kai Uwe Broulik <kde@privat.broulik.de>
0004
0005 SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007
0008 import QtQuick
0009 import QtQuick.Controls 2.15
0010 import QtQuick.Layouts 1.15
0011
0012 import org.kde.plasma.plasmoid 2.0
0013 import org.kde.plasma.core as PlasmaCore
0014 import org.kde.plasma.extras 2.0 as PlasmaExtras
0015 import org.kde.iconthemes as KIconThemes
0016 import org.kde.config // for KAuthorized
0017 import org.kde.kirigami 2.20 as Kirigami
0018
0019 import org.kde.private.desktopcontainment.folder 0.1 as Folder
0020
0021 Item {
0022 id: configIcons
0023
0024 property bool isPopup: (Plasmoid.location !== PlasmaCore.Types.Floating)
0025
0026 property string cfg_icon: Plasmoid.configuration.icon
0027 property alias cfg_useCustomIcon: useCustomIcon.checked
0028 property alias cfg_arrangement: arrangement.currentIndex
0029 property alias cfg_alignment: alignment.currentIndex
0030 property bool cfg_locked
0031 property alias cfg_sortMode: sortMode.mode
0032 property alias cfg_sortDesc: sortDesc.checked
0033 property alias cfg_sortDirsFirst: sortDirsFirst.checked
0034 property alias cfg_toolTips: toolTips.checked
0035 property alias cfg_selectionMarkers: selectionMarkers.checked
0036 property alias cfg_renameInline: renameInline.checked
0037 property alias cfg_popups: popups.checked
0038 property alias cfg_previews: previews.checked
0039 property var cfg_previewPlugins
0040 property alias cfg_viewMode: viewMode.currentIndex
0041 property alias cfg_iconSize: iconSize.value
0042 property alias cfg_labelWidth: labelWidth.currentIndex
0043 property alias cfg_textLines: textLines.value
0044
0045 readonly property bool lockedByKiosk: !KAuthorized.authorize("editable_desktop_icons")
0046
0047 KIconThemes.IconDialog {
0048 id: iconDialog
0049 onIconNameChanged: cfg_icon = iconName || "folder-symbolic";
0050 }
0051
0052 Kirigami.FormLayout {
0053 anchors {
0054 top: parent.top
0055 left: parent.left
0056 right: parent.right
0057 }
0058
0059 // Panel button
0060 RowLayout {
0061 spacing: Kirigami.Units.smallSpacing
0062 visible: isPopup
0063
0064 Kirigami.FormData.label: i18n("Panel button:")
0065
0066 CheckBox {
0067 id: useCustomIcon
0068 visible: isPopup
0069 checked: cfg_useCustomIcon
0070 text: i18n("Use a custom icon")
0071 }
0072
0073 Button {
0074 id: iconButton
0075 Layout.minimumWidth: Kirigami.Units.iconSizes.large + Kirigami.Units.smallSpacing * 2
0076 Layout.maximumWidth: Layout.minimumWidth
0077 Layout.minimumHeight: Layout.minimumWidth
0078 Layout.maximumHeight: Layout.minimumWidth
0079
0080 checkable: true
0081 enabled: useCustomIcon.checked
0082
0083 onClicked: {
0084 checked = Qt.binding(() =>
0085 iconMenu.status === PlasmaExtras.Menu.Open);
0086
0087 iconMenu.open(0, height);
0088 }
0089
0090 Kirigami.Icon {
0091 anchors.centerIn: parent
0092 width: Kirigami.Units.iconSizes.large
0093 height: width
0094 source: cfg_icon
0095 }
0096 }
0097
0098 PlasmaExtras.Menu {
0099 id: iconMenu
0100 visualParent: iconButton
0101
0102 PlasmaExtras.MenuItem {
0103 text: i18nc("@item:inmenu Open icon chooser dialog", "Choose…")
0104 icon: "document-open-folder"
0105 onClicked: iconDialog.open()
0106 }
0107
0108 PlasmaExtras.MenuItem {
0109 text: i18nc("@item:inmenu Reset icon to default", "Clear Icon")
0110 icon: "edit-clear"
0111 onClicked: cfg_icon = "folder-symbolic";
0112 }
0113 }
0114 }
0115
0116 Item {
0117 visible: isPopup
0118 Kirigami.FormData.isSection: true
0119 }
0120
0121
0122
0123 // Arrangement section
0124 ComboBox {
0125 id: arrangement
0126 Layout.fillWidth: true
0127 visible: !isPopup || viewMode.currentIndex === 1 /* Icons mode */
0128
0129 Kirigami.FormData.label: i18n("Arrangement:")
0130
0131 model: [
0132 Qt.application.layoutDirection === Qt.LeftToRight ?
0133 i18nc("@item:inlistbox arrangement of icons", "Left to Right") :
0134 i18nc("@item:inlistbox arrangement of icons", "Right to Left"),
0135 i18nc("@item:inlistbox arrangement of icons", "Top to Bottom"),
0136 ]
0137 }
0138
0139 ComboBox {
0140 id: alignment
0141 Layout.fillWidth: true
0142 visible: !isPopup || viewMode.currentIndex === 1 /* Icons mode */
0143
0144 model: [i18nc("@item:inlistbox alignment of icons", "Align left"),
0145 i18nc("@item:inlistbox alignment of icons", "Align right")]
0146 }
0147
0148 CheckBox {
0149 id: locked
0150 visible: ("containmentType" in plasmoid)
0151 checked: cfg_locked || lockedByKiosk
0152 enabled: !lockedByKiosk
0153
0154 onCheckedChanged: {
0155 if (!lockedByKiosk) {
0156 cfg_locked = checked;
0157 }
0158 }
0159
0160 text: i18n("Lock in place")
0161 }
0162
0163 Item {
0164 Kirigami.FormData.isSection: true
0165 visible: !isPopup || viewMode.currentIndex === 1 /* Icons mode */
0166 }
0167
0168
0169 // Sorting section
0170 ComboBox {
0171 id: sortMode
0172 Layout.fillWidth: true
0173
0174 Kirigami.FormData.label: i18n("Sorting:")
0175
0176 property int mode
0177 // FIXME TODO HACK: This maps the combo box list model to the KDirModel::ModelColumns
0178 // enum, which should be done in C++.
0179 property var indexToMode: [-1, 0, 1, 6, 2]
0180 property var modeToIndex: {'-1': '0', '0': '1', '1': '2', '6': '3', '2': '4'}
0181
0182 model: [i18nc("@item:inlistbox sort icons manually", "Manual"),
0183 i18nc("@item:inlistbox sort icons by name", "Name"),
0184 i18nc("@item:inlistbox sort icons by size", "Size"),
0185 i18nc("@item:inlistbox sort icons by file type", "Type"),
0186 i18nc("@item:inlistbox sort icons by date", "Date")]
0187
0188 Component.onCompleted: currentIndex = modeToIndex[mode]
0189 onActivated: mode = indexToMode[index]
0190 }
0191
0192 CheckBox {
0193 id: sortDesc
0194
0195 enabled: sortMode.currentIndex !== 0
0196
0197 text: i18nc("@option:check sort icons in descending order", "Descending")
0198 }
0199
0200 CheckBox {
0201 id: sortDirsFirst
0202
0203 enabled: sortMode.currentIndex !== 0
0204
0205 text: i18nc("@option:check sort icons with folders first", "Folders first")
0206 }
0207
0208 Item {
0209 Kirigami.FormData.isSection: true
0210 }
0211
0212
0213 // View Mode section (only if we're a pop-up)
0214 ComboBox {
0215 id: viewMode
0216 visible: isPopup
0217 Layout.fillWidth: true
0218
0219 Kirigami.FormData.label: i18nc("whether to use icon or list view", "View mode:")
0220
0221 model: [i18nc("@item:inlistbox show icons in a list", "List"),
0222 i18nc("@item:inlistbox show icons in a grid", "Grid")]
0223 }
0224
0225
0226 // Size section
0227 Slider {
0228 id: iconSize
0229
0230 Layout.fillWidth: true
0231 visible: !isPopup || viewMode.currentIndex === 1 /* Icons mode */
0232
0233 Kirigami.FormData.label: i18n("Icon size:")
0234
0235 from: 0
0236 to: 6
0237 stepSize: 1
0238 snapMode: Slider.SnapAlways
0239 }
0240
0241 RowLayout {
0242 Layout.fillWidth: true
0243
0244 Label {
0245 Layout.alignment: Qt.AlignLeft
0246 visible: !isPopup || viewMode.currentIndex === 1 /* Icons mode */
0247
0248 text: i18nc("@label:slider smallest icon size", "Small")
0249 }
0250 Item {
0251 Layout.fillWidth: true
0252 }
0253 Label {
0254 Layout.alignment: Qt.AlignRight
0255 visible: !isPopup || viewMode.currentIndex === 1 /* Icons mode */
0256
0257 text: i18nc("@label:slider largest icon size", "Large")
0258 }
0259 }
0260
0261 ComboBox {
0262 id: labelWidth
0263 visible: !isPopup || viewMode.currentIndex === 1 /* Icons mode */
0264 Layout.fillWidth: true
0265
0266 Kirigami.FormData.label: i18n("Label width:")
0267
0268 model: [
0269 i18nc("@item:inlistbox how long a text label should be", "Narrow"),
0270 i18nc("@item:inlistbox how long a text label should be", "Medium"),
0271 i18nc("@item:inlistbox how long a text label should be", "Wide"),
0272 ]
0273 }
0274
0275 SpinBox {
0276 id: textLines
0277 visible: !isPopup || viewMode.currentIndex === 1 /* Icons mode */
0278
0279 Kirigami.FormData.label: i18n("Text lines:")
0280
0281 from: 1
0282 to: 10
0283 stepSize: 1
0284 }
0285
0286 Item {
0287 Kirigami.FormData.isSection: true
0288 }
0289
0290
0291 // Features section
0292 CheckBox {
0293 id: toolTips
0294
0295 Kirigami.FormData.label: i18n("When hovering over icons:")
0296
0297 text: i18n("Show tooltips")
0298 }
0299
0300 CheckBox {
0301 id: selectionMarkers
0302 visible: Qt.styleHints.singleClickActivation
0303
0304 text: i18n("Show selection markers")
0305 }
0306
0307 CheckBox {
0308 id: popups
0309 visible: !isPopup
0310
0311 text: i18n("Show folder preview popups")
0312 }
0313
0314 Item {
0315 Kirigami.FormData.isSection: true
0316 }
0317
0318 CheckBox {
0319 id: renameInline
0320
0321 Kirigami.FormData.label: i18n("Rename:")
0322
0323 visible: !selectionMarkers.visible
0324
0325 text: i18n("Rename inline by clicking selected item's text")
0326 }
0327
0328 Item {
0329 Kirigami.FormData.isSection: true
0330 visible: renameInline.visible
0331 }
0332
0333 CheckBox {
0334 id: previews
0335
0336 Kirigami.FormData.label: i18n("Previews:")
0337
0338 text: i18n("Show preview thumbnails")
0339 }
0340
0341 Button {
0342 id: previewSettings
0343 Layout.fillWidth: true
0344
0345 icon.name: "configure"
0346 text: i18n("Configure Preview Plugins…")
0347
0348 onClicked: {
0349 const component = Qt.createComponent(Qt.resolvedUrl("FolderItemPreviewPluginsDialog.qml"));
0350 component.incubateObject(configIcons.Window.window.contentItem, {
0351 "previewPlugins": configIcons.cfg_previewPlugins,
0352 }, Qt.Asynchronous);
0353 component.destroy();
0354 }
0355 }
0356 }
0357 }