1/* 2 SPDX-FileCopyrightText: 2020 Andrey Butirsky <butirsky@gmail.com> 3 SPDX-License-Identifier: GPL-2.0-or-later 4*/ 5 6import QtQuick 2.12 7import Qt.labs.platform 1.1 8import org.kde.plasma.plasmoid 2.0 9import org.kde.plasma.core 2.0 as PlasmaCore 10import org.kde.plasma.components 3.0 as PlasmaComponents3 11import org.kde.plasma.workspace.components 2.0 12 13Item { 14 id: root 15 16 function iconURL(name) { 17 if (name === "epo") { 18 return StandardPaths.locate(StandardPaths.GenericDataLocation, "kcmkeyboard/pics/epo.png") 19 } 20 return StandardPaths.locate(StandardPaths.GenericDataLocation, 21 "kf5/locale/countries/" + name + "/flag.png") 22 } 23 24 signal layoutSelected(int layout) 25 26 function actionTriggered(selectedLayout) { 27 layoutSelected(selectedLayout) 28 } 29 30 Plasmoid.preferredRepresentation: Plasmoid.compactRepresentation 31 32 Plasmoid.compactRepresentation: KeyboardLayoutSwitcher { 33 Plasmoid.toolTipSubText: layoutNames.longName 34 Plasmoid.status: hasMultipleKeyboardLayouts ? PlasmaCore.Types.ActiveStatus : PlasmaCore.Types.HiddenStatus 35 36 Connections { 37 target: keyboardLayout 38 39 function onLayoutsListChanged() { 40 plasmoid.clearActions() 41 42 keyboardLayout.layoutsList.forEach( 43 function(layout, index) { 44 plasmoid.setAction( 45 index, 46 layout.longName, 47 iconURL(layout.shortName).toString().substring(7) // remove file:// scheme 48 ) 49 } 50 ) 51 } 52 53 function onLayoutChanged() { 54 root.Plasmoid.activated() 55 } 56 } 57 58 Connections { 59 target: root 60 61 function onLayoutSelected(layout) { 62 keyboardLayout.layout = layout 63 } 64 } 65 66 hoverEnabled: true 67 68 PlasmaCore.IconItem { 69 id: icon 70 71 source: iconURL(layoutNames.shortName) 72 visible: plasmoid.configuration.showFlag && source 73 anchors.fill: parent 74 active: containsMouse 75 } 76 77 PlasmaComponents3.Label { 78 text: layoutNames.displayName || layoutNames.shortName 79 visible: !icon.visible 80 anchors.fill: parent 81 horizontalAlignment: Text.AlignHCenter 82 fontSizeMode: Text.Fit 83 font.pointSize: height 84 } 85 } 86} 87