danteruizadd ui to kick api5f3e31b7 years agoHistory
248 lines · 9.3 KB · Text
RawDownload
////  MessageDialog.qml////  Created by Bradley Austin Davis on 15 Jan 2016//  Copyright 2016 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// import QtQuick 2.5import QtQuick.Dialogs 1.2 as OriginalDialogs import controlsUit 1.0import stylesUit 1.0import "../windows" import "messageDialog" TabletModalWindow {    id: root    HifiConstants { id: hifi }    visible: true     signal selected(int button);     MouseArea {        id: mouse;        anchors.fill: parent    }     function click(button) {        clickedButton = button;        selected(button);        destroy();    }     function exec() {        return OffscreenUi.waitForMessageBoxResult(root);    }     property alias detailedText: detailedText.text    property alias text: mainTextContainer.text    property alias informativeText: informativeTextContainer.text    property int buttons: OriginalDialogs.StandardButton.Ok    property int icon: OriginalDialogs.StandardIcon.NoIcon    property string iconText: ""    property int iconSize: 50    onIconChanged: updateIcon();    property int defaultButton: OriginalDialogs.StandardButton.NoButton;    property int clickedButton: OriginalDialogs.StandardButton.NoButton;    focus: defaultButton === OriginalDialogs.StandardButton.NoButton     property int titleWidth: 0    onTitleWidthChanged: d.resize();     function updateIcon() {        if (!root) {            return;        }        iconText = hifi.glyphForIcon(root.icon);    }     TabletModalFrame {        id: messageBox        clip: true        anchors.verticalCenter: parent.verticalCenter        anchors.horizontalCenter: parent.horizontalCenter        width: parent.width - 6        height: 300         QtObject {            id: d            readonly property int minWidth: 200            readonly property int maxWidth: 1280            readonly property int minHeight: 120            readonly property int maxHeight: 720             function resize() {                var targetWidth = Math.max(titleWidth, mainTextContainer.contentWidth)                var targetHeight = mainTextContainer.height + 3 * hifi.dimensions.contentSpacing.y                        + (informativeTextContainer.text != "" ? informativeTextContainer.contentHeight + 3 * hifi.dimensions.contentSpacing.y : 0)                        + buttons.height                        + (details.implicitHeight + hifi.dimensions.contentSpacing.y) + messageBox.frameMarginTop                messageBox.height = (targetHeight < d.minHeight) ? d.minHeight: ((targetHeight > d.maxHeight) ? d.maxHeight : targetHeight)            }        }         RalewaySemiBold {            id: mainTextContainer            onTextChanged: d.resize();            wrapMode: Text.WordWrap            size: hifi.fontSizes.sectionName            color: hifi.colors.baseGrayHighlight            width: parent.width - 6            anchors {                top: parent.top                horizontalCenter: parent.horizontalCenter                margins: 0                topMargin: hifi.dimensions.contentSpacing.y + messageBox.frameMarginTop            }            maximumLineCount: 30            elide: Text.ElideLeft            lineHeight: 2            lineHeightMode: Text.ProportionalHeight            horizontalAlignment: Text.AlignHCenter            verticalAlignment: Text.AlignVCenter        }         RalewaySemiBold {            id: informativeTextContainer            onTextChanged: d.resize();            wrapMode: Text.WordWrap            size: hifi.fontSizes.sectionName            color: hifi.colors.baseGrayHighlight            anchors {                top: mainTextContainer.bottom                left: parent.left                right: parent.right                margins: 0                topMargin: text != "" ? hifi.dimensions.contentSpacing.y : 0            }        }         Flow {            id: buttons            focus: true            spacing: hifi.dimensions.contentSpacing.x            onHeightChanged: d.resize(); onWidthChanged: d.resize();            layoutDirection: Qt.RightToLeft            anchors {                top: informativeTextContainer.text == "" ? mainTextContainer.bottom : informativeTextContainer.bottom                horizontalCenter: parent.horizontalCenter                margins: 0                topMargin: 2 * hifi.dimensions.contentSpacing.y            }            MessageDialogButton { dialog: root; text: qsTr("Close"); button: OriginalDialogs.StandardButton.Close; }            MessageDialogButton { dialog: root; text: qsTr("Abort"); button: OriginalDialogs.StandardButton.Abort; }            MessageDialogButton { dialog: root; text: qsTr("Cancel"); button: OriginalDialogs.StandardButton.Cancel; }            MessageDialogButton { dialog: root; text: qsTr("Restore Defaults"); button: OriginalDialogs.StandardButton.RestoreDefaults; }            MessageDialogButton { dialog: root; text: qsTr("Reset"); button: OriginalDialogs.StandardButton.Reset; }            MessageDialogButton { dialog: root; text: qsTr("Discard"); button: OriginalDialogs.StandardButton.Discard; }            MessageDialogButton { dialog: root; text: qsTr("No to All"); button: OriginalDialogs.StandardButton.NoToAll; }            MessageDialogButton { dialog: root; text: qsTr("No"); button: OriginalDialogs.StandardButton.No; }            MessageDialogButton { dialog: root; text: qsTr("Yes to All"); button: OriginalDialogs.StandardButton.YesToAll; }            MessageDialogButton { dialog: root; text: qsTr("Yes"); button: OriginalDialogs.StandardButton.Yes; }            MessageDialogButton { dialog: root; text: qsTr("Apply"); button: OriginalDialogs.StandardButton.Apply; }            MessageDialogButton { dialog: root; text: qsTr("Ignore"); button: OriginalDialogs.StandardButton.Ignore; }            MessageDialogButton { dialog: root; text: qsTr("Retry"); button: OriginalDialogs.StandardButton.Retry; }            MessageDialogButton { dialog: root; text: qsTr("Save All"); button: OriginalDialogs.StandardButton.SaveAll; }            MessageDialogButton { dialog: root; text: qsTr("Save"); button: OriginalDialogs.StandardButton.Save; }            MessageDialogButton { dialog: root; text: qsTr("Open"); button: OriginalDialogs.StandardButton.Open; }            MessageDialogButton { dialog: root; text: qsTr("OK"); button: OriginalDialogs.StandardButton.Ok; }             Button {                id: moreButton                text: qsTr("Show Details...")                width: 160                onClicked: { content.state = (content.state === "" ? "expanded" : "") }                visible: detailedText && detailedText.length > 0            }            MessageDialogButton { dialog: root; text: qsTr("Help"); button: OriginalDialogs.StandardButton.Help; }        }         Item {            id: details            width: parent.width            implicitHeight: detailedText.implicitHeight            height: 0            clip: true            anchors {                top: buttons.bottom                left: parent.left;                right: parent.right;                margins: 0                topMargin: hifi.dimensions.contentSpacing.y            }            Flickable {                id: flickable                contentHeight: detailedText.height                anchors.fill: parent                anchors.topMargin: hifi.dimensions.contentSpacing.x                anchors.bottomMargin: hifi.dimensions.contentSpacing.y                TextEdit {                    id: detailedText                    size: hifi.fontSizes.menuItem                    color: hifi.colors.baseGrayHighlight                    width: details.width                    wrapMode: Text.WordWrap                    readOnly: true                    selectByMouse: true                    anchors.margins: 0                }            }        }         states: [            State {                name: "expanded"                PropertyChanges { target: root; anchors.fill: undefined }                PropertyChanges { target: details; height: 120 }                PropertyChanges { target: moreButton; text: qsTr("Hide Details") }            }        ]         Component.onCompleted: {            updateIcon();            d.resize();        }        onStateChanged: d.resize()    }     Keys.onPressed: {        if (!visible) {            return        }         if (event.modifiers === Qt.ControlModifier)            switch (event.key) {            case Qt.Key_A:                event.accepted = true                detailedText.selectAll()                break            case Qt.Key_C:                event.accepted = true                detailedText.copy()                break            case Qt.Key_Period:                if (Qt.platform.os === "osx") {                    event.accepted = true                    content.reject()                }                break        } else switch (event.key) {            case Qt.Key_Escape:            case Qt.Key_Back:                event.accepted = true                root.click(OriginalDialogs.StandardButton.Cancel)                break             case Qt.Key_Enter:            case Qt.Key_Return:                event.accepted = true                root.click(root.defaultButton)                break        }    }}