QortalOS Brooklyn for Raspberry Pi 4
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

238 lines
7.1 KiB

/*
SPDX-FileCopyrightText: 2014 Eike Hein <[email protected]>
SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick 2.15
import QtQuick.Controls 2.15
import org.kde.draganddrop 2.0 as DragDrop
import org.kde.kirigami 2.5 as Kirigami
import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.private.kicker 0.1 as Kicker
Kirigami.FormLayout {
id: configGeneral
anchors.left: parent.left
anchors.right: parent.right
property bool isDash: (plasmoid.pluginName === "org.kde.plasma.kickerdash")
property string cfg_icon: plasmoid.configuration.icon
property bool cfg_useCustomButtonImage: plasmoid.configuration.useCustomButtonImage
property string cfg_customButtonImage: plasmoid.configuration.customButtonImage
property alias cfg_appNameFormat: appNameFormat.currentIndex
property alias cfg_limitDepth: limitDepth.checked
property alias cfg_alphaSort: alphaSort.checked
property alias cfg_showIconsRootLevel: showIconsRootLevel.checked
property alias cfg_recentOrdering: recentOrdering.currentIndex
property alias cfg_showRecentApps: showRecentApps.checked
property alias cfg_showRecentDocs: showRecentDocs.checked
property alias cfg_showRecentContacts: showRecentContacts.checked
property alias cfg_useExtraRunners: useExtraRunners.checked
property alias cfg_alignResultsToBottom: alignResultsToBottom.checked
Button {
id: iconButton
Kirigami.FormData.label: i18n("Icon:")
implicitWidth: previewFrame.width + PlasmaCore.Units.smallSpacing * 2
implicitHeight: previewFrame.height + PlasmaCore.Units.smallSpacing * 2
// Just to provide some visual feedback when dragging;
// cannot have checked without checkable enabled
checkable: true
checked: dropArea.containsAcceptableDrag
onPressed: iconMenu.opened ? iconMenu.close() : iconMenu.open()
DragDrop.DropArea {
id: dropArea
property bool containsAcceptableDrag: false
anchors.fill: parent
onDragEnter: {
// Cannot use string operations (e.g. indexOf()) on "url" basic type.
var urlString = event.mimeData.url.toString();
// This list is also hardcoded in KIconDialog.
var extensions = [".png", ".xpm", ".svg", ".svgz"];
containsAcceptableDrag = urlString.indexOf("file:///") === 0 && extensions.some(function (extension) {
return urlString.indexOf(extension) === urlString.length - extension.length; // "endsWith"
});
if (!containsAcceptableDrag) {
event.ignore();
}
}
onDragLeave: containsAcceptableDrag = false
onDrop: {
if (containsAcceptableDrag) {
// Strip file:// prefix, we already verified in onDragEnter that we have only local URLs.
iconDialog.setCustomButtonImage(event.mimeData.url.toString().substr("file://".length));
}
containsAcceptableDrag = false;
}
}
KQuickAddons.IconDialog {
id: iconDialog
function setCustomButtonImage(image) {
configGeneral.cfg_customButtonImage = image || configGeneral.cfg_icon || "start-here-kde"
configGeneral.cfg_useCustomButtonImage = true;
}
onIconNameChanged: setCustomButtonImage(iconName);
}
PlasmaCore.FrameSvgItem {
id: previewFrame
anchors.centerIn: parent
imagePath: plasmoid.location === PlasmaCore.Types.Vertical || plasmoid.location === PlasmaCore.Types.Horizontal
? "widgets/panel-background" : "widgets/background"
width: PlasmaCore.Units.iconSizes.large + fixedMargins.left + fixedMargins.right
height: PlasmaCore.Units.iconSizes.large + fixedMargins.top + fixedMargins.bottom
PlasmaCore.IconItem {
anchors.centerIn: parent
width: PlasmaCore.Units.iconSizes.large
height: width
source: configGeneral.cfg_useCustomButtonImage ? configGeneral.cfg_customButtonImage : configGeneral.cfg_icon
}
}
Menu {
id: iconMenu
// Appear below the button
y: +parent.height
onClosed: iconButton.checked = false;
MenuItem {
text: i18nc("@item:inmenu Open icon chooser dialog", "Choose…")
icon.name: "document-open-folder"
onClicked: iconDialog.open()
}
MenuItem {
text: i18nc("@item:inmenu Reset icon to default", "Clear Icon")
icon.name: "edit-clear"
onClicked: {
configGeneral.cfg_icon = "start-here-kde"
configGeneral.cfg_useCustomButtonImage = false
}
}
}
}
Item {
Kirigami.FormData.isSection: true
}
ComboBox {
id: appNameFormat
Kirigami.FormData.label: i18n("Show applications as:")
model: [i18n("Name only"), i18n("Description only"), i18n("Name (Description)"), i18n("Description (Name)")]
}
Item {
Kirigami.FormData.isSection: true
}
CheckBox {
id: alphaSort
Kirigami.FormData.label: i18n("Behavior:")
text: i18n("Sort applications alphabetically")
}
CheckBox {
id: limitDepth
visible: !isDash
text: i18n("Flatten sub-menus to a single level")
}
CheckBox {
id: showIconsRootLevel
visible: !configGeneral.isDash
text: i18n("Show icons on the root level of the menu")
}
Item {
Kirigami.FormData.isSection: true
}
CheckBox {
id: showRecentApps
Kirigami.FormData.label: i18n("Show categories:")
text: recentOrdering.currentIndex == 0
? i18n("Recent applications")
: i18n("Often used applications")
}
CheckBox {
id: showRecentDocs
text: recentOrdering.currentIndex == 0
? i18n("Recent files")
: i18n("Often used files")
}
CheckBox {
id: showRecentContacts
text: recentOrdering.currentIndex == 0
? i18n("Recent contacts")
: i18n("Often used contacts")
}
ComboBox {
id: recentOrdering
Kirigami.FormData.label: i18n("Sort items in categories by:")
model: [i18nc("@item:inlistbox Sort items in categories by [Recently used | Often used]", "Recently used"), i18nc("@item:inlistbox Sort items in categories by [Recently used | Ofetn used]", "Often used")]
}
Item {
Kirigami.FormData.isSection: true
}
CheckBox {
id: useExtraRunners
Kirigami.FormData.label: i18n("Search:")
text: i18n("Expand search to bookmarks, files and emails")
}
CheckBox {
id: alignResultsToBottom
visible: !configGeneral.isDash
text: i18n("Align search results to bottom")
}
}