summaryrefslogtreecommitdiff
path: root/bar/Power.qml
blob: 289f8e81a9676175cf923586b8b5723d041dd6b1 (plain)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import QtQuick
import QtQuick.Layouts

import qs.services as Services
import qs.components
import qs.config
import qs.components

// TODO: move to a full screen menu
Item {
	id: root

	implicitWidth: container.implicitWidth
	implicitHeight: container.implicitHeight

	property bool collapsed: true

	IRect {
		id: container

		anchors {
			fill: parent
			verticalCenter: parent.verticalCenter
			horizontalCenter: parent.horizontalCenter
		}
		implicitWidth: layout.implicitWidth + General.rectMargin * 2
		implicitHeight: Bar.height - General.rectMargin

		color: Colors.accent
		radius: Style.rounding.large

		RowLayout {
			id: layout

			anchors.fill: parent
			spacing: Bar.resourceIconTextSpacing

			Item {
				Layout.fillWidth: true
			}

			Icon {
				id: powerIcon
				text: Icons.power.shutdown
				font.pixelSize: Style.font.size.large
				color: Colors.red
			}

			Item {
				implicitWidth: root.collapsed ? 0 : loader.width
				visible: root.collapsed ? false : true
				Loader {
					id: loader
					anchors.verticalCenter: parent.verticalCenter
					active: !root.collapsed
					sourceComponent: Component {
						RowLayout {
							spacing: Bar.resourceIconTextSpacing
							Icon {
								text: Icons.power.dpms
								font.pixelSize: Style.font.size.large
							}

							Icon {
								text: Icons.power.lock
								font.pixelSize: Style.font.size.large
							}

							Icon {
								text: Icons.power.suspend
								font.pixelSize: Style.font.size.large
							}

							Icon {
								text: Icons.power.reboot
								font.pixelSize: Style.font.size.large
							}
							SequentialAnimation {
								running: true
								NumberAnimation {
									target: parent
									property: "opacity"
									from: 0
									to: 1
									duration: General.animationDuration / 2
									easing.type: Easing.InOutQuad
								}
							}
						}
					}
				}
				Behavior on implicitWidth {
					NumberAnimation {
						duration: General.animationDuration / 4
						easing.type: Easing.InOutQuad
					}
				}

				// no idea why when collapsing the width animation won't trigger
				Behavior on visible {
					NumberAnimation {
						duration: General.animationDuration / 4
						easing.type: Easing.InOutQuad
					}
				}
			}

			Item {
				Layout.fillWidth: true
			}
		}

		MouseArea {
			anchors.fill: parent
			hoverEnabled: true
			onEntered: {
				root.collapsed = false;
			}
			onExited: {
				root.collapsed = true;
			}
		}
	}
}