// Version 9 // Forked LibConfig.IconField to use Lib.AppletIcon import QtQuick 2.0 import QtQuick.Controls 2.0 as QQC2 import QtQuick.Layouts 1.0 import org.kde.kirigami 2.0 as Kirigami import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons import "../lib" as Lib RowLayout { id: iconField default property alias _contentChildren: content.data property string configKey: '' property alias value: textField.text readonly property string configValue: configKey ? plasmoid.configuration[configKey] : "" onConfigValueChanged: { if (!textField.focus && value != configValue) { value = configValue } } property int previewIconSize: Kirigami.Units.iconSizes.medium property string defaultValue: "" property alias placeholderValue: textField.placeholderText property var presetValues: [] // Based on org.kde.plasma.kickoff QQC2.Button { id: iconButton padding: Kirigami.Units.smallSpacing Layout.alignment: Qt.AlignTop // KDE QQC2 sets implicitSize to background.implicitSize ignoring padding/inset properties. implicitWidth: leftPadding + contentItem.implicitWidth + rightPadding implicitHeight: topPadding + contentItem.implicitHeight + bottomPadding onPressed: iconMenu.opened ? iconMenu.close() : iconMenu.open() contentItem: PlasmaCore.FrameSvgItem { id: previewFrame imagePath: plasmoid.location === PlasmaCore.Types.Vertical || plasmoid.location === PlasmaCore.Types.Horizontal ? "widgets/panel-background" : "widgets/background" implicitWidth: fixedMargins.left + previewIconSize + fixedMargins.right implicitHeight: fixedMargins.top + previewIconSize + fixedMargins.bottom Lib.AppletIcon { anchors.fill: parent anchors.leftMargin: previewFrame.fixedMargins.left anchors.topMargin: previewFrame.fixedMargins.top anchors.rightMargin: previewFrame.fixedMargins.right anchors.bottomMargin: previewFrame.fixedMargins.bottom source: iconField.value || iconField.placeholderValue active: iconButton.hovered } } QQC2.Menu { id: iconMenu // Appear below the button y: +parent.height QQC2.MenuItem { text: i18ndc("plasma_applet_org.kde.plasma.kickoff", "@item:inmenu Open icon chooser dialog", "Choose...") icon.name: "document-open" onClicked: dialogLoader.active = true } QQC2.MenuItem { text: i18ndc("plasma_applet_org.kde.plasma.kickoff", "@item:inmenu Reset icon to default", "Clear Icon") icon.name: "edit-clear" onClicked: iconField.value = iconField.defaultValue } } } ColumnLayout { id: content Layout.fillWidth: true RowLayout { QQC2.TextField { id: textField Layout.fillWidth: true text: iconField.configValue onTextChanged: serializeTimer.restart() rightPadding: clearButton.width + Kirigami.Units.smallSpacing QQC2.ToolButton { id: clearButton visible: iconField.configValue != iconField.defaultValue icon.name: iconField.defaultValue === "" ? "edit-clear" : "edit-undo" onClicked: iconField.value = iconField.defaultValue anchors.top: parent.top anchors.right: parent.right anchors.bottom: parent.bottom width: height } } QQC2.Button { id: browseButton icon.name: "document-open" onClicked: dialogLoader.active = true } } Flow { Layout.fillWidth: true Layout.maximumWidth: Kirigami.Units.gridUnit * 30 Repeater { model: presetValues QQC2.Button { icon.name: modelData text: modelData onClicked: iconField.value = modelData } } } } Loader { id: dialogLoader active: false sourceComponent: KQuickAddons.IconDialog { id: dialog visible: true modality: Qt.WindowModal onIconNameChanged: { iconField.value = iconName } onVisibleChanged: { if (!visible) { dialogLoader.active = false } } } } Timer { // throttle id: serializeTimer interval: 300 onTriggered: { if (configKey) { plasmoid.configuration[configKey] = iconField.value } } } }