mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-25 20:35:17 +02:00
151 lines
4.5 KiB
JavaScript
151 lines
4.5 KiB
JavaScript
"use strict";
|
|
|
|
// createWindow.js
|
|
//
|
|
// Created by Thijs Wenker on 6/1/18
|
|
//
|
|
// Copyright 2018 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
|
|
//
|
|
|
|
var getWindowRect = function(settingsKey, defaultRect) {
|
|
var windowRect = Settings.getValue(settingsKey, defaultRect);
|
|
return windowRect;
|
|
};
|
|
|
|
var setWindowRect = function(settingsKey, position, size) {
|
|
Settings.setValue(settingsKey, {
|
|
position: position,
|
|
size: size
|
|
});
|
|
};
|
|
|
|
var CallableEvent = (function() {
|
|
function CallableEvent() {
|
|
this.callbacks = [];
|
|
}
|
|
|
|
CallableEvent.prototype = {
|
|
callbacks: null,
|
|
call: function () {
|
|
var callArguments = arguments;
|
|
this.callbacks.forEach(function(callbackObject) {
|
|
try {
|
|
callbackObject.callback.apply(callbackObject.context ? callbackObject.context : this, callArguments);
|
|
} catch (e) {
|
|
console.error('Call to CallableEvent callback failed!');
|
|
}
|
|
});
|
|
},
|
|
addListener: function(contextOrCallback, callback) {
|
|
if (callback) {
|
|
this.callbacks.push({
|
|
context: contextOrCallback,
|
|
callback: callback
|
|
});
|
|
} else {
|
|
this.callbacks.push({
|
|
callback: contextOrCallback
|
|
});
|
|
}
|
|
},
|
|
removeListener: function(callback) {
|
|
var foundIndex = -1;
|
|
this.callbacks.forEach(function (callbackObject, index) {
|
|
if (callbackObject.callback === callback) {
|
|
foundIndex = index;
|
|
}
|
|
});
|
|
|
|
if (foundIndex !== -1) {
|
|
this.callbacks.splice(foundIndex, 1);
|
|
}
|
|
}
|
|
};
|
|
|
|
return CallableEvent;
|
|
})();
|
|
|
|
module.exports = (function() {
|
|
function CreateWindow(qmlPath, title, settingsKey, defaultRect, createOnStartup) {
|
|
this.qmlPath = qmlPath;
|
|
this.title = title;
|
|
this.settingsKey = settingsKey;
|
|
this.defaultRect = defaultRect;
|
|
this.webEventReceived = new CallableEvent();
|
|
this.fromQml = new CallableEvent();
|
|
if (createOnStartup) {
|
|
this.createWindow();
|
|
}
|
|
}
|
|
|
|
CreateWindow.prototype = {
|
|
window: null,
|
|
createWindow: function() {
|
|
var defaultRect = this.defaultRect;
|
|
if (typeof this.defaultRect === "function") {
|
|
defaultRect = this.defaultRect();
|
|
}
|
|
|
|
var windowRect = getWindowRect(this.settingsKey, defaultRect);
|
|
this.window = Desktop.createWindow(this.qmlPath, {
|
|
title: this.title,
|
|
flags: Desktop.ALWAYS_ON_TOP | Desktop.CLOSE_BUTTON_HIDES,
|
|
presentationMode: Desktop.PresentationMode.NATIVE,
|
|
size: windowRect.size,
|
|
visible: true,
|
|
position: windowRect.position
|
|
});
|
|
|
|
var windowRectChanged = function () {
|
|
if (this.window.visible) {
|
|
setWindowRect(this.settingsKey, this.window.position, this.window.size);
|
|
}
|
|
};
|
|
|
|
this.window.sizeChanged.connect(this, windowRectChanged);
|
|
this.window.positionChanged.connect(this, windowRectChanged);
|
|
|
|
this.window.webEventReceived.connect(this, function (data) {
|
|
this.webEventReceived.call(data);
|
|
});
|
|
|
|
this.window.fromQml.connect(this, function (data) {
|
|
this.fromQml.call(data);
|
|
});
|
|
|
|
Script.scriptEnding.connect(this, function() {
|
|
this.window.close();
|
|
});
|
|
},
|
|
setVisible: function(visible) {
|
|
if (visible && !this.window) {
|
|
this.createWindow();
|
|
}
|
|
|
|
if (this.window) {
|
|
if (visible) {
|
|
this.window.show();
|
|
} else {
|
|
this.window.visible = false;
|
|
}
|
|
}
|
|
},
|
|
emitScriptEvent: function(data) {
|
|
if (this.window) {
|
|
this.window.emitScriptEvent(data);
|
|
}
|
|
},
|
|
sendToQml: function(data) {
|
|
if (this.window) {
|
|
this.window.sendToQml(data);
|
|
}
|
|
},
|
|
webEventReceived: null,
|
|
fromQml: null
|
|
};
|
|
|
|
return CreateWindow;
|
|
})();
|