melawy-plasma-plasmoid-pres.../com.github.zren.presentwindows/contents/ui/lib/ConfigIcon.qml

188 lines
4.7 KiB
QML

// Version 3
// Forked to use AppletIcon
import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0
import QtQuick.Dialogs 1.2
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 ".."
RowLayout {
id: configIcon
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: units.iconSizes.medium
property string defaultValue: "start-here-kde"
property var presetValues: []
onPresetValuesChanged: iconMenu.refresh()
// Used for binding in presetValue menu loop
function setValue(val) {
configIcon.value = val
}
// org.kde.plasma.kickoff
Button {
id: iconButton
Layout.minimumWidth: previewFrame.width + units.smallSpacing * 2
Layout.maximumWidth: Layout.minimumWidth
Layout.minimumHeight: previewFrame.height + units.smallSpacing * 2
Layout.maximumHeight: Layout.minimumWidth
// just to provide some visual feedback, cannot have checked without checkable enabled
checkable: true
onClicked: {
checked = Qt.binding(function() { // never actually allow it being checked
return iconMenu.status === PlasmaComponents.DialogStatus.Open
})
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: previewIconSize + fixedMargins.left + fixedMargins.right
height: previewIconSize + fixedMargins.top + fixedMargins.bottom
AppletIcon {
anchors.centerIn: parent
width: previewIconSize
height: previewIconSize
source: configIcon.value
}
}
// QQC Menu can only be opened at cursor position, not a random one
PlasmaComponents.ContextMenu {
id: iconMenu
visualParent: iconButton
function newMenuItem(parent) {
return Qt.createQmlObject(
"import org.kde.plasma.components 2.0 as PlasmaComponents;" +
"PlasmaComponents.MenuItem {}",
parent);
}
function newSeparator(parent) {
return Qt.createQmlObject(
"import org.kde.plasma.components 2.0 as PlasmaComponents;" +
"PlasmaComponents.MenuItem { separator: true }",
parent);
}
function refresh() {
clearMenuItems()
// Choose...
var menuItem = newMenuItem(iconMenu)
menuItem.text = i18ndc("plasma_applet_org.kde.plasma.kickoff", "@item:inmenu Open icon chooser dialog", "Choose...")
menuItem.icon = "document-open"
menuItem.clicked.connect(function(){
iconDialog.open()
})
iconMenu.addMenuItem(menuItem)
// Clear
var menuItem = newMenuItem(iconMenu)
menuItem.text = i18ndc("plasma_applet_org.kde.plasma.kickoff", "@item:inmenu Reset icon to default", "Clear Icon")
menuItem.icon = "edit-clear"
menuItem.clicked.connect(function(){
configIcon.value = defaultValue
})
iconMenu.addMenuItem(menuItem)
// Preset Values
if (configIcon.presetValues.length > 0) {
menuItem = newSeparator(iconMenu)
iconMenu.addMenuItem(menuItem)
for (var i = 0; i < configIcon.presetValues.length; i++) {
var presetValue = configIcon.presetValues[i]
menuItem = newMenuItem(iconMenu)
menuItem.text = presetValue
menuItem.icon = presetValue
menuItem.clicked.connect(configIcon.setValue.bind(this, presetValue))
iconMenu.addMenuItem(menuItem)
}
}
}
Component.onCompleted: {
refresh()
}
}
}
ColumnLayout {
id: content
Layout.fillWidth: true
RowLayout {
TextField {
id: textField
Layout.fillWidth: true
text: configIcon.configValue
onTextChanged: serializeTimer.restart()
ToolButton {
iconName: "edit-clear"
onClicked: configIcon.value = defaultValue
anchors.top: parent.top
anchors.right: parent.right
anchors.bottom: parent.bottom
width: height
}
}
Button {
iconName: "document-open"
onClicked: iconDialog.open()
}
}
// Workaround for crash when using default on a Layout.
// https://bugreports.qt.io/browse/QTBUG-52490
// Still affecting Qt 5.7.0
Component.onDestruction: {
while (children.length > 0) {
children[children.length - 1].parent = configIcon;
}
}
}
KQuickAddons.IconDialog {
id: iconDialog
onIconNameChanged: configIcon.value = iconName
}
Timer { // throttle
id: serializeTimer
interval: 300
onTriggered: plasmoid.configuration[configKey] = configIcon.value
}
}