summaryrefslogtreecommitdiff
path: root/bar/Power.qml
blob: a29bc4a61fef8ac365bfd3d957ee36d6a0082b8f (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;
            }
        }
    }
}