/*SPDX-FileCopyrightText: 2013 David Edmundson <davidedmundson@kde.org>SPDX-FileCopyrightText: 2021 Mikel Johnson <mikel5764@gmail.com>SPDX-FileCopyrightText: 2022 Nate Graham <nate@kde.org>SPDX-FileCopyrightText: 2022 ivan tkachenko <me@ratijas.tk>SPDX-License-Identifier: GPL-2.0-or-later*/pragma ComponentBehavior: Boundimport QtQuickimport QtQuick.Layoutsimport QtQuick.Controls as QQC2import org.kde.plasma.core as PlasmaCoreimport org.kde.ksvg as KSvgimport org.kde.iconthemes as KIconThemesimport org.kde.kirigami as Kirigamiimport org.kde.kcmutils as KCMimport org.kde.config as KConfigimport org.kde.plasma.plasmoidimport "code/tools.js" as ToolsKCM.SimpleKCM {id: rootproperty string cfg_menuLabel: menuLabel.textproperty string cfg_icon: Plasmoid.configuration.iconproperty alias cfg_appNameFormat: appNameFormat.currentIndexproperty bool cfg_paneSwap: Plasmoid.configuration.paneSwapproperty int cfg_favoritesDisplay: Plasmoid.configuration.favoritesDisplayproperty int cfg_applicationsDisplay: Plasmoid.configuration.applicationsDisplayproperty alias cfg_alphaSort: alphaSort.checkedproperty var cfg_systemFavorites: String(Plasmoid.configuration.systemFavorites)property int cfg_primaryActions: Plasmoid.configuration.primaryActionsproperty alias cfg_showActionButtonCaptions: showActionButtonCaptions.checkedproperty alias cfg_compactMode: compactModeCheckbox.checkedproperty alias cfg_highlightNewlyInstalledApps: highlightNewlyInstalledAppsCheckbox.checkedproperty alias cfg_switchCategoryOnHover: switchCategoryOnHoverCheckbox.checkedKirigami.FormLayout {QQC2.Button {id: iconButtonKirigami.FormData.label: i18nc("@label prefix for icon-only button", "Icon:")implicitWidth: previewFrame.width + Kirigami.Units.smallSpacing * 2implicitHeight: previewFrame.height + Kirigami.Units.smallSpacing * 2hoverEnabled: trueAccessible.name: i18nc("@action:button", "Change Application Launcher's icon")Accessible.description: i18nc("@info:whatsthis", "Current icon is %1. Click to open menu to change the current icon or reset to the default icon.", root.cfg_icon)Accessible.role: Accessible.ButtonMenuQQC2.ToolTip.delay: Kirigami.Units.toolTipDelayQQC2.ToolTip.text: i18nc("@info:tooltip", "Icon name is \"%1\"", root.cfg_icon)QQC2.ToolTip.visible: iconButton.hovered && root.cfg_icon.length > 0KIconThemes.IconDialog {id: iconDialogonAccepted: {root.cfg_icon = iconName || Tools.defaultIconName;}}onPressed: iconMenu.opened ? iconMenu.close() : iconMenu.open()KSvg.FrameSvgItem {id: previewFrameanchors.centerIn: parentimagePath: Plasmoid.formFactor === PlasmaCore.Types.Vertical || Plasmoid.formFactor === PlasmaCore.Types.Horizontal? "widgets/panel-background" : "widgets/background"width: Kirigami.Units.iconSizes.large + fixedMargins.left + fixedMargins.rightheight: Kirigami.Units.iconSizes.large + fixedMargins.top + fixedMargins.bottomKirigami.Icon {anchors.centerIn: parentwidth: Kirigami.Units.iconSizes.largeheight: widthsource: Tools.iconOrDefault(Plasmoid.formFactor, root.cfg_icon)}}QQC2.Menu {id: iconMenu// Appear below the buttony: parent.heightQQC2.MenuItem {text: i18nc("@item:inmenu Open icon chooser dialog", "Chooseβ¦")icon.name: "document-open-folder"Accessible.description: i18nc("@info:whatsthis", "Choose an icon for Application Launcher")onClicked: iconDialog.open()}QQC2.MenuItem {text: i18nc("@item:inmenu Reset icon to default", "Reset to default icon")icon.name: "edit-clear"enabled: root.cfg_icon !== Tools.defaultIconNameonClicked: root.cfg_icon = Tools.defaultIconName}QQC2.MenuItem {text: i18nc("@action:inmenu", "Remove icon")icon.name: "delete"enabled: root.cfg_icon !== "" && menuLabel.text && Plasmoid.formFactor !== PlasmaCore.Types.VerticalonClicked: root.cfg_icon = ""}}}Kirigami.ActionTextField {id: menuLabelenabled: Plasmoid.formFactor !== PlasmaCore.Types.VerticalKirigami.FormData.label: i18nc("@label:textbox", "Text label:")text: Plasmoid.configuration.menuLabelplaceholderText: i18nc("@info:placeholder", "Type here to add a text label")onTextEdited: {root.cfg_menuLabel = menuLabel.text// This is to make sure that we always have a icon if there is no text.// If the user remove the icon and remove the text, without this, we'll have no icon and no text.// This is to force the icon to be there.if (!menuLabel.text) {root.cfg_icon = root.cfg_icon || Tools.defaultIconName}}rightActions: QQC2.Action {icon.name: "edit-clear"enabled: menuLabel.text !== ""text: i18nc("@action:button", "Reset menu label")onTriggered: {menuLabel.clear()root.cfg_menuLabel = ""root.cfg_icon = root.cfg_icon || Tools.defaultIconName}}}QQC2.Label {Layout.fillWidth: trueLayout.maximumWidth: Kirigami.Units.gridUnit * 25visible: Plasmoid.formFactor === PlasmaCore.Types.Verticaltext: i18nc("@info", "A text label cannot be set when the Panel is vertical.")wrapMode: Text.Wrapfont: Kirigami.Theme.smallFont}Item {Kirigami.FormData.isSection: true}QQC2.ComboBox {id: appNameFormatKirigami.FormData.label: i18nc("@label:listbox", "Show applications as:")model: [i18nc("@item:inlistbox", "Name only"), i18nc("@item:inlistbox", "Description only"), i18nc("@item:inlistbox", "Name (Description)"), i18nc("@item:inlistbox", "Description (Name)")]}Item {Kirigami.FormData.isSection: true}RowLayout {Kirigami.FormData.label: i18nc("General options", "General:")spacing: Kirigami.Units.smallSpacingQQC2.CheckBox {id: alphaSorttext: i18nc("@option:check", "Sort applications alphabetically")}Kirigami.ContextualHelpButton {toolTipText: i18nc("@info:whatsthis", "This doesn't affect how applications are sorted in either search results or the favorites page.")}}QQC2.CheckBox {id: compactModeCheckboxtext: i18nc("@option:check", "Use compact list item style")checked: Plasmoid.configuration.compactMode}QQC2.CheckBox {id: highlightNewlyInstalledAppsCheckboxtext: i18nc("@option:check", "Highlight newly-installed applications")}QQC2.CheckBox {id: switchCategoryOnHoverCheckboxtext: i18nc("@option:check", "Switch sidebar categories when hovering over them")}QQC2.Button {enabled: KConfig.KAuthorized.authorizeControlModule("kcm_plasmasearch")icon.name: "settings-configure"text: i18nc("@action:button opens plasmasearch kcm", "Configure Search Pluginsβ¦")onClicked: KCM.KCMLauncher.openSystemSettings("kcm_plasmasearch")}Item {Kirigami.FormData.isSection: true}QQC2.RadioButton {id: paneSwapOffKirigami.FormData.label: i18nc("@label:group prefix for radio button group", "Sidebar position:")text: mirrored ? i18nc("@option:radio sidebar position", "Right") : i18nc("option:radio sidebar position", "Left")QQC2.ButtonGroup.group: paneSwapGroupproperty int index: 0checked: !Plasmoid.configuration.paneSwap}QQC2.RadioButton {id: paneSwapOntext: mirrored ? i18nc("@option:radio sidebar position", "Left") : i18nc("@option:radio sidebar position", "Right")QQC2.ButtonGroup.group: paneSwapGroupproperty int index: 1checked: Plasmoid.configuration.paneSwap}QQC2.RadioButton {id: showFavoritesInGridKirigami.FormData.label: i18nc("@title:group prefix for radio button group", "Show favorites:")text: i18nc("@option:radio Part of a sentence: 'Show favorites in a grid'", "In a grid")QQC2.ButtonGroup.group: favoritesDisplayGroupproperty int index: 0checked: Plasmoid.configuration.favoritesDisplay === index}QQC2.RadioButton {id: showFavoritesInListtext: i18nc("@option:radio Part of a sentence: 'Show favorites in a list'", "In a list")QQC2.ButtonGroup.group: favoritesDisplayGroupproperty int index: 1checked: Plasmoid.configuration.favoritesDisplay === index}QQC2.RadioButton {id: showAppsInGridKirigami.FormData.label: i18nc("@title:group prefix for radio button group", "Show other applications:")text: i18nc("@option:radio Part of a sentence: 'Show other applications in a grid'", "In a grid")QQC2.ButtonGroup.group: applicationsDisplayGroupproperty int index: 0checked: Plasmoid.configuration.applicationsDisplay === index}QQC2.RadioButton {id: showAppsInListtext: i18nc("@option:radio Part of a sentence: 'Show other applications in a list'", "In a list")QQC2.ButtonGroup.group: applicationsDisplayGroupproperty int index: 1checked: Plasmoid.configuration.applicationsDisplay === index}Item {Kirigami.FormData.isSection: true}QQC2.RadioButton {id: powerActionsButtonKirigami.FormData.label: i18nc("@title:group prefix for radio button group", "Show buttons for:")text: i18nc("@option:radio Show buttons for", "Power")QQC2.ButtonGroup.group: radioGroupproperty string actions: "suspend,hibernate,reboot,shutdown"property int index: 0checked: Plasmoid.configuration.primaryActions === index}QQC2.RadioButton {id: sessionActionsButtontext: i18nc("@option:radio Show buttons for", "Session")QQC2.ButtonGroup.group: radioGroupproperty string actions: "lock-screen,logout,save-session,switch-user"property int index: 1checked: Plasmoid.configuration.primaryActions === index}QQC2.RadioButton {id: allActionsButtontext: i18nc("@option:radio Show buttons for", "Power and session")QQC2.ButtonGroup.group: radioGroupproperty string actions: "lock-screen,logout,save-session,switch-user,suspend,hibernate,reboot,shutdown"property int index: 3checked: Plasmoid.configuration.primaryActions === index}QQC2.CheckBox {id: showActionButtonCaptionstext: i18nc("@option:check", "Show action button captions")}}QQC2.ButtonGroup {id: paneSwapGrouponCheckedButtonChanged: {if (checkedButton) {root.cfg_paneSwap = checkedButton.index === 1}}}QQC2.ButtonGroup {id: favoritesDisplayGrouponCheckedButtonChanged: {if (checkedButton) {root.cfg_favoritesDisplay = checkedButton.index}}}QQC2.ButtonGroup {id: applicationsDisplayGrouponCheckedButtonChanged: {if (checkedButton) {root.cfg_applicationsDisplay = checkedButton.index}}}QQC2.ButtonGroup {id: radioGrouponCheckedButtonChanged: {if (checkedButton) {root.cfg_primaryActions = checkedButton.indexroot.cfg_systemFavorites = checkedButton.actions}}}}