Skip to content
Snippets Groups Projects
StatusBox.qml 4 KiB
Newer Older
  • Learn to ignore specific revisions
  • import QtQuick 2.15
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    import QtQuick.Controls 2.12
    import QtGraphicalEffects 1.14
    import QtQuick.Layouts 1.14
    
    import QtQuick.Templates 2.12 as T
    import QtQuick.Controls.impl 2.12
    import QtQuick.Controls.Material 2.12
    import QtQuick.Controls.Material.impl 2.12
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    import "../themes/themes.js" as Theme
    
    Item {
        id: statusbox
        anchors.fill: parent
    
        VPNState {
            id: vpn
        }
    
    
        Rectangle {
            color: Theme.bgColor
            anchors.fill: parent
        }
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        Rectangle {
            id: statusBoxBackground
    
            color: Theme.fgColor
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            height: 300
            radius: 10
            antialiasing: true
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            anchors {
                fill: parent
                margins: 20
                bottomMargin: 30
            }
            border {
                color: Theme.accentOff
                width: 2
            }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        }
    
        ToolButton {
            id: settingsButton
            objectName: "settingsButton"
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            font.pixelSize: Qt.application.font.pixelSize * 1.6
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            opacity: 1
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            anchors {
                top: parent.top
                left: parent.left
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                topMargin: Theme.windowMargin + 5
                leftMargin: Theme.windowMargin + 5
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            }
    
            HoverHandler {
                cursorShape: Qt.PointingHandCursor
            }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            onClicked: {
                if (stackView.depth > 1) {
                    stackView.pop()
                } else {
                    settingsDrawer.open()
                }
            }
    
            Icon {
                id: settingsImage
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                width: 16
                height: 16
                anchors.centerIn: settingsButton
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                source: stackView.depth
                        > 1 ? "../resources/arrow-left.svg" : "../resources/gear-fill.svg"
            }
        }
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        Rectangle {
            id: statusLabelWrapper
            height: 45
            anchors {
                top: statusBoxBackground.top
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                topMargin: 25
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                horizontalCenter: parent.horizontalCenter
            }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            BoldLabel {
                id: connectionState
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                anchors.top: parent.top
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                anchors.horizontalCenter: parent.horizontalCenter
                horizontalAlignment: Text.AlignHCenter
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                text: ""
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        }
    
        Column {
            id: col
            width: parent.width * 0.8
            anchors.horizontalCenter: parent.horizontalCenter
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
            VerticalSpacer {
                id: spacerPreImg
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                visible: true
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                height: 120
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            }
    
    
            AnimatedImage {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                id: connectionImage
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                height: 160
    
                speed: 0.8
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                source: "../resources/icon-noshield.svg"
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                anchors.horizontalCenter: parent.horizontalCenter
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                fillMode: Image.PreserveAspectFit
    
                onStatusChanged: playing = (status == AnimatedImage.Ready)
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            }
    
            // TODO this can be synced with opacity serial animation, see
            // https://doc.qt.io/qt-5/qml-qtquick-animatedimage.html#example-usage
            // If you want to customize your asset, here's how:
            // convert -delay 50 -loop 0 ravens2_*.png ravens.gif
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
            VerticalSpacer {
                id: spacerPostImg
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                visible: true
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                height: 20
                Layout.alignment: Qt.AlignBottom
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            }
    
            MaterialButton {
                id: toggleVPN
    
                // FIXME - this is a workaround. It will BREAK with i18n
                width: 100
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                spacing: 8
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                anchors.horizontalCenter: parent.horizontalCenter
                Layout.alignment: Qt.AlignBottom
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                font {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    pixelSize: Theme.buttonFontSize
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    capitalization: Font.Capitalize
                    family: lightFont.name
                    bold: false
                }
    
                HoverHandler {
                    cursorShape: Qt.PointingHandCursor
                }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    
                onClicked: {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    if (vpn.state === "on" | vpn.state === "starting") {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                        backend.switchOff()
                    } else if (vpn.state === "off") {
    
                        vpn.startingUI = true
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                        backend.switchOn()
                    } else {
                        console.debug("unknown state")
                    }
                }
            }
        }
    }