2024-01-20 02:08:06 +00:00
|
|
|
import QtQuick 2.4
|
|
|
|
import QtQuick.Controls 2.15
|
|
|
|
import QtQuick.Layouts 1.1
|
|
|
|
import QtQuick.Window 2.1
|
2024-08-09 01:20:25 +00:00
|
|
|
import Qt5Compat.GraphicalEffects
|
2024-01-20 02:08:06 +00:00
|
|
|
|
2024-08-09 01:20:25 +00:00
|
|
|
import org.kde.kirigami 2.20 as Kirigami
|
|
|
|
import org.kde.ksvg as KSvg
|
2024-01-20 02:08:06 +00:00
|
|
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
2024-08-09 01:20:25 +00:00
|
|
|
import org.kde.plasma.components 3.0 as PlasmaComponents
|
2024-01-20 02:08:06 +00:00
|
|
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
|
|
|
|
|
|
|
Control {
|
|
|
|
id: genericButton
|
|
|
|
signal clicked
|
|
|
|
|
|
|
|
property string text: "";
|
|
|
|
property var iconSource: "";
|
2024-08-09 01:20:25 +00:00
|
|
|
property int iconSize: Kirigami.Units.iconSizes.smallMedium;
|
2024-01-20 02:08:06 +00:00
|
|
|
property alias label: btnLabel
|
|
|
|
|
|
|
|
Keys.priority: Keys.AfterItem
|
2024-08-09 01:20:25 +00:00
|
|
|
Keys.onPressed: (event) => {
|
2024-01-20 02:08:06 +00:00
|
|
|
if(event.key == Qt.Key_Return) {
|
|
|
|
genericButton.clicked();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-08-09 01:20:25 +00:00
|
|
|
KSvg.FrameSvgItem {
|
2024-01-20 02:08:06 +00:00
|
|
|
id: texture
|
|
|
|
z: -1
|
|
|
|
anchors.fill: parent
|
|
|
|
imagePath: Qt.resolvedUrl("../images/button.svg");
|
|
|
|
prefix: {
|
|
|
|
var result = "";
|
|
|
|
if(genericButton.focus) result = "focus-";
|
|
|
|
if(buttonMA.containsPress) result = "pressed";
|
|
|
|
else if(buttonMA.containsMouse) result += "hover";
|
|
|
|
else result += "normal";
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
MouseArea {
|
|
|
|
id: buttonMA
|
|
|
|
z: 99
|
|
|
|
anchors.fill: parent
|
|
|
|
hoverEnabled: true
|
|
|
|
acceptedButtons: Qt.LeftButton;
|
|
|
|
onClicked: {
|
|
|
|
genericButton.clicked();
|
|
|
|
}
|
|
|
|
}
|
2024-08-09 01:20:25 +00:00
|
|
|
Kirigami.Icon {
|
2024-01-20 02:08:06 +00:00
|
|
|
id: btnIcon
|
|
|
|
z: 0
|
|
|
|
anchors.centerIn: genericButton
|
|
|
|
width: genericButton.iconSize
|
|
|
|
height: width
|
|
|
|
animated: false
|
2024-08-09 01:20:25 +00:00
|
|
|
//usesPlasmaTheme: false
|
2024-01-20 02:08:06 +00:00
|
|
|
source: genericButton.iconSource
|
|
|
|
visible: genericButton.iconSource !== ""
|
|
|
|
}
|
|
|
|
PlasmaComponents.Label {
|
|
|
|
id: btnLabel
|
|
|
|
z: 0
|
|
|
|
anchors.fill: parent
|
|
|
|
text: genericButton.text
|
|
|
|
visible: genericButton.text !== ""
|
|
|
|
verticalAlignment: Text.AlignVCenter
|
|
|
|
horizontalAlignment: Text.AlignHCenter
|
|
|
|
elide: Text.ElideRight
|
2024-08-09 01:20:25 +00:00
|
|
|
renderType: Text.NativeRendering
|
|
|
|
font.hintingPreference: Font.PreferFullHinting
|
|
|
|
font.kerning: false
|
2024-01-20 02:08:06 +00:00
|
|
|
layer.enabled: genericButton.text !== ""
|
|
|
|
layer.effect: DropShadow {
|
|
|
|
//visible: !softwareRendering
|
|
|
|
horizontalOffset: 0
|
|
|
|
verticalOffset: 1
|
|
|
|
radius: 6
|
|
|
|
samples: 14
|
|
|
|
spread: 0.0001
|
|
|
|
color: "#bf000000"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|