Skip to content
Snippets Groups Projects
StatusBox.qml 4.85 KiB
Newer Older
  • Learn to ignore specific revisions
  • import QtQuick
    import QtQuick.Controls
    import QtQuick.Effects
    import QtQuick.Layouts
    import QtQuick.Templates as T
    import QtQuick.Controls.impl
    import QtQuick.Controls.Material
    import QtQuick.Controls.Material.impl
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    import "../themes/themes.js" as Theme
    
    Item {
        id: statusbox
        anchors.fill: parent
    
    
        Rectangle {
    
            id: statusBoxBackground
    
            anchors.fill: parent
    
            Image {
                id: backgroundImage
                anchors.fill: parent
                source: customTheme.bgDisconnected
            }
    
    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: {
    
                settingsDrawer.toggle()
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            }
    
            Icon {
                id: settingsImage
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                width: 16
                height: 16
                anchors.centerIn: settingsButton
    
                source: "../resources/gear-fill.svg"
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            }
        }
    
    
    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
    
                FadeBehavior on text {
                }
    
    Kali Kaneko's avatar
    Kali Kaneko committed
            }
    
            Label {
                id: snowflakeTip
                anchors.top: connectionState.bottom
                anchors.horizontalCenter: parent.horizontalCenter
                anchors.topMargin: 20
                horizontalAlignment: Text.AlignHCenter
                text: qsTr("This can take several minutes")
                font.pixelSize: Theme.fontSize * 0.8
                visible: isSnowflakeOn()
            }
            ProgressBar {
                id: snowflakeProgressBar
                anchors.top: snowflakeTip.bottom
                anchors.horizontalCenter: parent.horizontalCenter
                visible: isSnowflakeOn()
                value: 0
            }
            Label {
                id: snowflakeTag
                anchors.top: snowflakeProgressBar.bottom
                anchors.horizontalCenter: parent.horizontalCenter
                horizontalAlignment: Text.AlignHCenter
                visible: isSnowflakeOn()
            }
    
    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
            }
    
    
    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
    
    
            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: customTheme.iconOff
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                anchors.horizontalCenter: parent.horizontalCenter
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                fillMode: Image.PreserveAspectFit
    
                OpacityAnimator on opacity {
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    id: fadeIn
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    duration: 1000
                }
                onStatusChanged: {
    
                    playing = (status == AnimatedImage.Ready);
                    fadeIn.start();
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                }
    
    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") {
    
                        backend.switchOff();
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    } else if (vpn.state === "off") {
    
                        vpn.startingUI = true;
                        backend.switchOn();
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                    } else {
    
                        console.debug("unknown state");
    
    
        function isSnowflakeOn() {
    
            return ctx != undefined && ctx.snowflake == "true" && ctx.snowflakeProgress != "100";
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    }