2021-07-16 19:33:52 +00:00
|
|
|
/***************************************************************************
|
|
|
|
* Copyright (C) 2014 by Eike Hein <hein@kde.org> *
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
* This program is distributed in the hope that it will be useful, *
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
|
|
* GNU General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU General Public License *
|
|
|
|
* along with this program; if not, write to the *
|
|
|
|
* Free Software Foundation, Inc., *
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
import QtQuick 2.0
|
|
|
|
import QtQuick.Controls 1.0
|
|
|
|
import QtQuick.Dialogs 1.2
|
|
|
|
import QtQuick.Layouts 1.0
|
|
|
|
|
|
|
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
|
|
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
|
|
|
|
|
|
import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons
|
|
|
|
import org.kde.draganddrop 2.0 as DragDrop
|
|
|
|
|
|
|
|
import org.kde.plasma.private.kicker 0.1 as Kicker
|
|
|
|
|
|
|
|
Item {
|
|
|
|
id: configGeneral
|
|
|
|
|
|
|
|
width: childrenRect.width
|
|
|
|
height: childrenRect.height
|
|
|
|
|
|
|
|
property string cfg_icon: plasmoid.configuration.icon
|
|
|
|
property bool cfg_useCustomButtonImage: plasmoid.configuration.useCustomButtonImage
|
|
|
|
property string cfg_customButtonImage: plasmoid.configuration.customButtonImage
|
2021-08-24 13:42:11 +00:00
|
|
|
property string cfg_customButtonImageHover: plasmoid.configuration.customButtonImageHover
|
|
|
|
property string cfg_customButtonImageActive: plasmoid.configuration.customButtonImageActive
|
2021-09-29 17:10:18 +00:00
|
|
|
|
|
|
|
property alias cfg_showRecentsView: showRecentsView.checked
|
2021-07-16 19:33:52 +00:00
|
|
|
|
|
|
|
property alias cfg_appNameFormat: appNameFormat.currentIndex
|
|
|
|
property alias cfg_switchCategoriesOnHover: switchCategoriesOnHover.checked
|
|
|
|
|
|
|
|
property alias cfg_useExtraRunners: useExtraRunners.checked
|
|
|
|
|
|
|
|
property alias cfg_numberRows: numberRows.value
|
|
|
|
|
|
|
|
ColumnLayout {
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
|
|
|
RowLayout {
|
|
|
|
spacing: units.smallSpacing
|
|
|
|
|
|
|
|
Label {
|
|
|
|
text: i18n("Icon:")
|
|
|
|
}
|
|
|
|
|
2021-08-24 13:42:11 +00:00
|
|
|
IconPicker {
|
|
|
|
id: iconPickerNormal
|
|
|
|
currentIcon: cfg_customButtonImage
|
|
|
|
defaultIcon: "start-here-kde"
|
|
|
|
onIconChanged: cfg_customButtonImage = iconName
|
2022-08-28 21:48:51 +00:00
|
|
|
enabled: true
|
2021-08-24 13:42:11 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
Label {
|
|
|
|
text: i18n("Hover Icon:")
|
|
|
|
}
|
|
|
|
IconPicker {
|
|
|
|
id: iconPickerHover
|
|
|
|
currentIcon: cfg_customButtonImageHover
|
|
|
|
defaultIcon: "start-here-kde"
|
|
|
|
onIconChanged: cfg_customButtonImageHover = iconName
|
2022-08-28 21:48:51 +00:00
|
|
|
enabled: true
|
2021-08-24 13:42:11 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
Label {
|
|
|
|
text: i18n("Active Icon:")
|
|
|
|
}
|
|
|
|
IconPicker {
|
|
|
|
id: iconPickerActive
|
|
|
|
currentIcon: cfg_customButtonImageActive
|
|
|
|
defaultIcon: "start-here-kde"
|
|
|
|
onIconChanged: cfg_customButtonImageActive = iconName
|
2022-08-28 21:48:51 +00:00
|
|
|
enabled: true
|
2021-08-24 13:42:11 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
/*Button {
|
2021-07-16 19:33:52 +00:00
|
|
|
id: iconButton
|
|
|
|
Layout.minimumWidth: previewFrame.width + units.smallSpacing * 2
|
|
|
|
Layout.maximumWidth: Layout.minimumWidth
|
|
|
|
Layout.minimumHeight: previewFrame.height + units.smallSpacing * 2
|
|
|
|
Layout.maximumHeight: Layout.minimumWidth
|
|
|
|
|
|
|
|
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) {
|
|
|
|
cfg_customButtonImage = image || cfg_icon || "start-here-kde"
|
|
|
|
cfg_useCustomButtonImage = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
onIconNameChanged: setCustomButtonImage(iconName);
|
|
|
|
}
|
|
|
|
|
|
|
|
// just to provide some visual feedback, cannot have checked without checkable enabled
|
|
|
|
checkable: true
|
|
|
|
checked: dropArea.containsAcceptableDrag
|
|
|
|
onClicked: {
|
|
|
|
checked = Qt.binding(function() { // never actually allow it being checked
|
|
|
|
return iconMenu.status === PlasmaComponents.DialogStatus.Open || dropArea.containsAcceptableDrag;
|
|
|
|
})
|
|
|
|
|
|
|
|
iconMenu.open(0, height)
|
|
|
|
}
|
|
|
|
|
|
|
|
PlasmaCore.FrameSvgItem {
|
|
|
|
id: previewFrame
|
|
|
|
anchors.centerIn: parent
|
|
|
|
imagePath: plasmoid.location === PlasmaCore.Types.Vertical || plasmoid.location === PlasmaCore.Types.Horizontal
|
|
|
|
? "widgets/panel-background" : "widgets/background"
|
|
|
|
width: units.iconSizes.large + fixedMargins.left + fixedMargins.right
|
|
|
|
height: units.iconSizes.large + fixedMargins.top + fixedMargins.bottom
|
|
|
|
|
|
|
|
PlasmaCore.IconItem {
|
|
|
|
anchors.centerIn: parent
|
|
|
|
width: units.iconSizes.large
|
|
|
|
height: width
|
|
|
|
source: cfg_useCustomButtonImage ? cfg_customButtonImage : cfg_icon
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// QQC Menu can only be opened at cursor position, not a random one
|
|
|
|
PlasmaComponents.ContextMenu {
|
|
|
|
id: iconMenu
|
|
|
|
visualParent: iconButton
|
|
|
|
|
|
|
|
PlasmaComponents.MenuItem {
|
|
|
|
text: i18nc("@item:inmenu Open icon chooser dialog", "Choose...")
|
|
|
|
icon: "document-open-folder"
|
|
|
|
onClicked: iconDialog.open()
|
|
|
|
}
|
|
|
|
PlasmaComponents.MenuItem {
|
|
|
|
text: i18nc("@item:inmenu Reset icon to default", "Clear Icon")
|
|
|
|
icon: "edit-clear"
|
|
|
|
onClicked: {
|
|
|
|
cfg_useCustomButtonImage = false;
|
|
|
|
}
|
|
|
|
}
|
2021-08-24 13:42:11 +00:00
|
|
|
}*/
|
2021-07-16 19:33:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
GroupBox {
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
|
|
|
title: i18n("Behavior")
|
|
|
|
|
|
|
|
flat: true
|
|
|
|
|
|
|
|
ColumnLayout {
|
|
|
|
RowLayout {
|
|
|
|
Label {
|
|
|
|
text: i18n("Show applications as:")
|
|
|
|
}
|
|
|
|
|
|
|
|
ComboBox {
|
|
|
|
id: appNameFormat
|
|
|
|
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
|
|
|
model: [i18n("Name only"), i18n("Description only"), i18n("Name (Description)"), i18n("Description (Name)")]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
CheckBox {
|
|
|
|
id: switchCategoriesOnHover
|
|
|
|
|
|
|
|
text: i18n("Switch categories on hover")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
GroupBox {
|
|
|
|
Layout.fillWidth: true
|
|
|
|
title: i18n("Search")
|
|
|
|
flat: true
|
|
|
|
|
|
|
|
ColumnLayout {
|
|
|
|
CheckBox {
|
|
|
|
id: useExtraRunners
|
|
|
|
|
|
|
|
text: i18n("Expand search to bookmarks, files and emails")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
GroupBox {
|
|
|
|
title: i18n("Rows")
|
|
|
|
flat: true
|
|
|
|
ColumnLayout {
|
|
|
|
RowLayout{
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
|
|
|
RowLayout{
|
|
|
|
Layout.fillWidth: true
|
|
|
|
SpinBox{
|
|
|
|
id: numberRows
|
|
|
|
minimumValue: 10
|
|
|
|
maximumValue: 15
|
2021-09-29 17:10:18 +00:00
|
|
|
//onValueChanged: root.recents.model = kicker.rootModel.modelForRow(0);
|
2021-07-16 19:33:52 +00:00
|
|
|
}
|
|
|
|
Label {
|
|
|
|
Layout.leftMargin: units.smallSpacing
|
|
|
|
text: i18n("Number of rows")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-09-29 17:10:18 +00:00
|
|
|
GroupBox {
|
|
|
|
title: i18n("View")
|
|
|
|
flat: true
|
|
|
|
ColumnLayout {
|
|
|
|
RowLayout{
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
|
|
|
RowLayout{
|
|
|
|
Layout.fillWidth: true
|
|
|
|
CheckBox {
|
|
|
|
id: showRecentsView
|
|
|
|
text: i18n("Show recent programs")
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-07-16 19:33:52 +00:00
|
|
|
}
|
|
|
|
}
|