147 lines · 4.5 KB · JavaScript
RawDownload
////  progressDialog.js//  examples/libraries////  Copyright 2014 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// // This URL will be used not relative to this script, but relative to the QML that handles the Overlay, so we need an absolute URL.var toolIconUrl = Script.resolvePath("../assets/images/tools/"); progressDialog = (function () {    var that = {},        progressBackground,        progressMessage,        cancelButton,        displayed = false,        backgroundWidth = 300,        backgroundHeight = 100,        messageHeight = 32,        cancelWidth = 70,        cancelHeight = 32,        textColor = { red: 255, green: 255, blue: 255 },        textBackground = { red: 52, green: 52, blue: 52 },        backgroundUrl = toolIconUrl + "progress-background.svg",        windowDimensions;     progressBackground = Overlays.addOverlay("image", {        width: backgroundWidth,        height: backgroundHeight,        imageURL: backgroundUrl,        alpha: 0.9,        visible: false    });     progressMessage = Overlays.addOverlay("text", {        width: backgroundWidth - 40,        height: messageHeight,        text: "",        textColor: textColor,        backgroundColor: textBackground,        alpha: 0.9,        backgroundAlpha: 0.9,        visible: false    });     cancelButton = Overlays.addOverlay("text", {        width: cancelWidth,        height: cancelHeight,        text: "Cancel",        textColor: textColor,        backgroundColor: textBackground,        alpha: 0.9,        backgroundAlpha: 0.9,        visible: false    });     function move() {        var progressX,            progressY;         if (displayed) {             if (windowDimensions.x === Window.innerWidth && windowDimensions.y === Window.innerHeight) {                return;            }            windowDimensions.x = Window.innerWidth;            windowDimensions.y = Window.innerHeight;             progressX = (windowDimensions.x - backgroundWidth) / 2;  // Center.            progressY = windowDimensions.y / 2 - backgroundHeight;  // A little up from center.             Overlays.editOverlay(progressBackground, { x: progressX, y: progressY });            Overlays.editOverlay(progressMessage, { x: progressX + 20, y: progressY + 15 });            Overlays.editOverlay(cancelButton, {                x: progressX + backgroundWidth - cancelWidth - 20,                y: progressY + backgroundHeight - cancelHeight - 15            });        }    }    that.move = move;     that.onCancel = undefined;     function open(message) {        if (!displayed) {            windowDimensions = { x: 0, y : 0 };            displayed = true;            move();            Overlays.editOverlay(progressBackground, { visible: true });            Overlays.editOverlay(progressMessage, { visible: true, text: message });            Overlays.editOverlay(cancelButton, { visible: true });        } else {            throw new Error("open() called on progressDialog when already open");        }    }    that.open = open;     function isOpen() {        return displayed;    }    that.isOpen = isOpen;     function update(message) {        if (displayed) {            Overlays.editOverlay(progressMessage, { text: message });        } else {            throw new Error("update() called on progressDialog when not open");        }    }    that.update = update;     function close() {        if (displayed) {            Overlays.editOverlay(cancelButton, { visible: false });            Overlays.editOverlay(progressMessage, { visible: false });            Overlays.editOverlay(progressBackground, { visible: false });            displayed = false;        } else {            throw new Error("close() called on progressDialog when not open");        }    }    that.close = close;     function mousePressEvent(event) {        if (Overlays.getOverlayAtPoint({ x: event.x, y: event.y }) === cancelButton) {            if (typeof this.onCancel === "function") {                close();                this.onCancel();            }            return true;        }        return false;    }    that.mousePressEvent = mousePressEvent;     function cleanup() {        Overlays.deleteOverlay(cancelButton);        Overlays.deleteOverlay(progressMessage);        Overlays.deleteOverlay(progressBackground);    }    that.cleanup = cleanup;     return that;}());