Warning, /plasma/plasma-simplemenu/package/contents/ui/ConfigGeneral.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2014 Eike Hein <hein@kde.org>
0003
0004 SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006
0007 import QtQuick 2.0
0008 import QtQuick.Controls 1.0
0009 import QtQuick.Dialogs 1.2
0010 import QtQuick.Layouts 1.0
0011
0012 import org.kde.plasma.core 2.0 as PlasmaCore
0013 import org.kde.plasma.components 2.0 as PlasmaComponents
0014
0015 import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons
0016 import org.kde.draganddrop 2.0 as DragDrop
0017
0018 import org.kde.plasma.private.kicker 0.1 as Kicker
0019
0020 Item {
0021 id: configGeneral
0022
0023 width: childrenRect.width
0024 height: childrenRect.height
0025
0026 property string cfg_icon: plasmoid.configuration.icon
0027 property bool cfg_useCustomButtonImage: plasmoid.configuration.useCustomButtonImage
0028 property string cfg_customButtonImage: plasmoid.configuration.customButtonImage
0029
0030 property alias cfg_appNameFormat: appNameFormat.currentIndex
0031 property alias cfg_switchCategoriesOnHover: switchCategoriesOnHover.checked
0032
0033 property alias cfg_useExtraRunners: useExtraRunners.checked
0034
0035 ColumnLayout {
0036 anchors.left: parent.left
0037
0038 RowLayout {
0039 spacing: units.smallSpacing
0040
0041 Label {
0042 text: i18n("Icon:")
0043 }
0044
0045 Button {
0046 id: iconButton
0047 Layout.minimumWidth: previewFrame.width + units.smallSpacing * 2
0048 Layout.maximumWidth: Layout.minimumWidth
0049 Layout.minimumHeight: previewFrame.height + units.smallSpacing * 2
0050 Layout.maximumHeight: Layout.minimumWidth
0051
0052 DragDrop.DropArea {
0053 id: dropArea
0054
0055 property bool containsAcceptableDrag: false
0056
0057 anchors.fill: parent
0058
0059 onDragEnter: {
0060 // Cannot use string operations (e.g. indexOf()) on "url" basic type.
0061 var urlString = event.mimeData.url.toString();
0062
0063 // This list is also hardcoded in KIconDialog.
0064 var extensions = [".png", ".xpm", ".svg", ".svgz"];
0065 containsAcceptableDrag = urlString.indexOf("file:///") === 0 && extensions.some(function (extension) {
0066 return urlString.indexOf(extension) === urlString.length - extension.length; // "endsWith"
0067 });
0068
0069 if (!containsAcceptableDrag) {
0070 event.ignore();
0071 }
0072 }
0073 onDragLeave: containsAcceptableDrag = false
0074
0075 onDrop: {
0076 if (containsAcceptableDrag) {
0077 // Strip file:// prefix, we already verified in onDragEnter that we have only local URLs.
0078 iconDialog.setCustomButtonImage(event.mimeData.url.toString().substr("file://".length));
0079 }
0080 containsAcceptableDrag = false;
0081 }
0082 }
0083
0084 KQuickAddons.IconDialog {
0085 id: iconDialog
0086
0087 function setCustomButtonImage(image) {
0088 cfg_customButtonImage = image || cfg_icon || "start-here-kde"
0089 cfg_useCustomButtonImage = true;
0090 }
0091
0092 onIconNameChanged: setCustomButtonImage(iconName);
0093 }
0094
0095 // just to provide some visual feedback, cannot have checked without checkable enabled
0096 checkable: true
0097 checked: dropArea.containsAcceptableDrag
0098 onClicked: {
0099 checked = Qt.binding(function() { // never actually allow it being checked
0100 return iconMenu.status === PlasmaComponents.DialogStatus.Open || dropArea.containsAcceptableDrag;
0101 })
0102
0103 iconMenu.open(0, height)
0104 }
0105
0106 PlasmaCore.FrameSvgItem {
0107 id: previewFrame
0108 anchors.centerIn: parent
0109 imagePath: plasmoid.location === PlasmaCore.Types.Vertical || plasmoid.location === PlasmaCore.Types.Horizontal
0110 ? "widgets/panel-background" : "widgets/background"
0111 width: units.iconSizes.large + fixedMargins.left + fixedMargins.right
0112 height: units.iconSizes.large + fixedMargins.top + fixedMargins.bottom
0113
0114 PlasmaCore.IconItem {
0115 anchors.centerIn: parent
0116 width: units.iconSizes.large
0117 height: width
0118 source: cfg_useCustomButtonImage ? cfg_customButtonImage : cfg_icon
0119 }
0120 }
0121 }
0122
0123 // QQC Menu can only be opened at cursor position, not a random one
0124 PlasmaComponents.ContextMenu {
0125 id: iconMenu
0126 visualParent: iconButton
0127
0128 PlasmaComponents.MenuItem {
0129 text: i18nc("@item:inmenu Open icon chooser dialog", "Choose...")
0130 icon: "document-open-folder"
0131 onClicked: iconDialog.open()
0132 }
0133 PlasmaComponents.MenuItem {
0134 text: i18nc("@item:inmenu Reset icon to default", "Clear Icon")
0135 icon: "edit-clear"
0136 onClicked: {
0137 cfg_useCustomButtonImage = false;
0138 }
0139 }
0140 }
0141 }
0142
0143 GroupBox {
0144 Layout.fillWidth: true
0145
0146 title: i18n("Behavior")
0147
0148 flat: true
0149
0150 ColumnLayout {
0151 RowLayout {
0152 Label {
0153 text: i18n("Show applications as:")
0154 }
0155
0156 ComboBox {
0157 id: appNameFormat
0158
0159 Layout.fillWidth: true
0160
0161 model: [i18n("Name only"), i18n("Description only"), i18n("Name (Description)"), i18n("Description (Name)")]
0162 }
0163 }
0164
0165 CheckBox {
0166 id: switchCategoriesOnHover
0167
0168 text: i18n("Switch categories on hover")
0169 }
0170 }
0171 }
0172
0173 GroupBox {
0174 Layout.fillWidth: true
0175
0176 title: i18n("Search")
0177
0178 flat: true
0179
0180 ColumnLayout {
0181 CheckBox {
0182 id: useExtraRunners
0183
0184 text: i18n("Expand search to bookmarks, files and emails")
0185 }
0186 }
0187 }
0188 }
0189 }