1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
RowLayout {
id: control
enum Style {
Windows,
MacOS,
Linux
}
signal minimizeRequested
signal closeRequested
property bool closeEnabled: true
property string controlPath
readonly property int style: {
// TODO: additional Linux style?
if(Qt.platform.os === "osx") {
return WindowControls.Style.MacOS
} else {
return WindowControls.Style.Windows
}
}
readonly property string iconPath: {
const p = controlPath + "/%1";
switch(style) {
case WindowControls.Style.MacOS:
return p.arg("mac");
case WindowControls.Style.Windows: default:
return p.arg("windows");
}
}
layoutDirection: {
switch(style) {
case WindowControls.Style.MacOS:
return Qt.RightToLeft;
case WindowControls.Style.Windows: default:
return Qt.LeftToRight;
}
}
spacing: {
switch(style) {
case WindowControls.Style.MacOS:
return 8;
case WindowControls.Style.Windows: default:
return 12;
}
}
DragHandler {
target: null
onActiveChanged: if(active) control.Window.window.startSystemMove();
}
Item {
id: spacer
Layout.fillWidth: true
}
ImageButton {
id: minimizeButton
iconPath: control.iconPath
iconName: "minimize"
onClicked: minimizeRequested()
}
ImageButton {
id: closeButton
enabled: control.closeEnabled
iconPath: control.iconPath
iconName: "close"
onClicked: closeRequested()
}
}
|