mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 12:17:45 +02:00
Merge pull request #9684 from Menithal/parent-hotkey
WL#20856 Added Parenting Hotkeys to Edit.js Among Visual tweaks
This commit is contained in:
commit
10cb7aab06
10 changed files with 188 additions and 51 deletions
|
@ -2918,10 +2918,12 @@ void Application::keyPressEvent(QKeyEvent* event) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Qt::Key_P: {
|
case Qt::Key_P: {
|
||||||
|
if (!(isShifted || isMeta || isOption)) {
|
||||||
bool isFirstPersonChecked = Menu::getInstance()->isOptionChecked(MenuOption::FirstPerson);
|
bool isFirstPersonChecked = Menu::getInstance()->isOptionChecked(MenuOption::FirstPerson);
|
||||||
Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, !isFirstPersonChecked);
|
Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, !isFirstPersonChecked);
|
||||||
Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, isFirstPersonChecked);
|
Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, isFirstPersonChecked);
|
||||||
cameraMenuChanged();
|
cameraMenuChanged();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -628,9 +628,9 @@ Menu::Menu() {
|
||||||
|
|
||||||
auto scope = DependencyManager::get<AudioScope>();
|
auto scope = DependencyManager::get<AudioScope>();
|
||||||
MenuWrapper* audioScopeMenu = audioDebugMenu->addMenu("Audio Scope");
|
MenuWrapper* audioScopeMenu = audioDebugMenu->addMenu("Audio Scope");
|
||||||
addCheckableActionToQMenuAndActionHash(audioScopeMenu, MenuOption::AudioScope, Qt::CTRL | Qt::Key_P, false,
|
addCheckableActionToQMenuAndActionHash(audioScopeMenu, MenuOption::AudioScope, Qt::CTRL | Qt::Key_F2, false,
|
||||||
scope.data(), SLOT(toggle()));
|
scope.data(), SLOT(toggle()));
|
||||||
addCheckableActionToQMenuAndActionHash(audioScopeMenu, MenuOption::AudioScopePause, Qt::CTRL | Qt::SHIFT | Qt::Key_P, false,
|
addCheckableActionToQMenuAndActionHash(audioScopeMenu, MenuOption::AudioScopePause, Qt::CTRL | Qt::SHIFT | Qt::Key_F2, false,
|
||||||
scope.data(), SLOT(togglePause()));
|
scope.data(), SLOT(togglePause()));
|
||||||
|
|
||||||
addDisabledActionAndSeparator(audioScopeMenu, "Display Frames");
|
addDisabledActionAndSeparator(audioScopeMenu, "Display Frames");
|
||||||
|
|
|
@ -56,6 +56,7 @@ selectionManager.addEventListener(function () {
|
||||||
lightOverlayManager.updatePositions();
|
lightOverlayManager.updatePositions();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const KEY_P = 80; //Key code for letter p used for Parenting hotkey.
|
||||||
var DEGREES_TO_RADIANS = Math.PI / 180.0;
|
var DEGREES_TO_RADIANS = Math.PI / 180.0;
|
||||||
var RADIANS_TO_DEGREES = 180.0 / Math.PI;
|
var RADIANS_TO_DEGREES = 180.0 / Math.PI;
|
||||||
var epsilon = 0.001;
|
var epsilon = 0.001;
|
||||||
|
@ -843,7 +844,6 @@ function setupModelMenus() {
|
||||||
});
|
});
|
||||||
modelMenuAddedDelete = true;
|
modelMenuAddedDelete = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu.addMenuItem({
|
Menu.addMenuItem({
|
||||||
menuName: "Edit",
|
menuName: "Edit",
|
||||||
menuItemName: "Entity List...",
|
menuItemName: "Entity List...",
|
||||||
|
@ -851,11 +851,25 @@ function setupModelMenus() {
|
||||||
afterItem: "Entities",
|
afterItem: "Entities",
|
||||||
grouping: "Advanced"
|
grouping: "Advanced"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Menu.addMenuItem({
|
||||||
|
menuName: "Edit",
|
||||||
|
menuItemName: "Parent Entity to Last",
|
||||||
|
afterItem: "Entity List...",
|
||||||
|
grouping: "Advanced"
|
||||||
|
});
|
||||||
|
|
||||||
|
Menu.addMenuItem({
|
||||||
|
menuName: "Edit",
|
||||||
|
menuItemName: "Unparent Entity",
|
||||||
|
afterItem: "Parent Entity to Last",
|
||||||
|
grouping: "Advanced"
|
||||||
|
});
|
||||||
Menu.addMenuItem({
|
Menu.addMenuItem({
|
||||||
menuName: "Edit",
|
menuName: "Edit",
|
||||||
menuItemName: "Allow Selecting of Large Models",
|
menuItemName: "Allow Selecting of Large Models",
|
||||||
shortcutKey: "CTRL+META+L",
|
shortcutKey: "CTRL+META+L",
|
||||||
afterItem: "Entity List...",
|
afterItem: "Unparent Entity",
|
||||||
isCheckable: true,
|
isCheckable: true,
|
||||||
isChecked: true,
|
isChecked: true,
|
||||||
grouping: "Advanced"
|
grouping: "Advanced"
|
||||||
|
@ -958,6 +972,8 @@ function cleanupModelMenus() {
|
||||||
Menu.removeMenuItem("Edit", "Delete");
|
Menu.removeMenuItem("Edit", "Delete");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Menu.removeMenuItem("Edit", "Parent Entity to Last");
|
||||||
|
Menu.removeMenuItem("Edit", "Unparent Entity");
|
||||||
Menu.removeMenuItem("Edit", "Entity List...");
|
Menu.removeMenuItem("Edit", "Entity List...");
|
||||||
Menu.removeMenuItem("Edit", "Allow Selecting of Large Models");
|
Menu.removeMenuItem("Edit", "Allow Selecting of Large Models");
|
||||||
Menu.removeMenuItem("Edit", "Allow Selecting of Small Models");
|
Menu.removeMenuItem("Edit", "Allow Selecting of Small Models");
|
||||||
|
@ -990,6 +1006,9 @@ Script.scriptEnding.connect(function () {
|
||||||
|
|
||||||
Overlays.deleteOverlay(importingSVOImageOverlay);
|
Overlays.deleteOverlay(importingSVOImageOverlay);
|
||||||
Overlays.deleteOverlay(importingSVOTextOverlay);
|
Overlays.deleteOverlay(importingSVOTextOverlay);
|
||||||
|
|
||||||
|
Controller.keyReleaseEvent.disconnect(keyReleaseEvent);
|
||||||
|
Controller.keyPressEvent.disconnect(keyPressEvent);
|
||||||
});
|
});
|
||||||
|
|
||||||
var lastOrientation = null;
|
var lastOrientation = null;
|
||||||
|
@ -1101,7 +1120,68 @@ function recursiveDelete(entities, childrenList) {
|
||||||
Entities.deleteEntity(entityID);
|
Entities.deleteEntity(entityID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function unparentSelectedEntities() {
|
||||||
|
if (SelectionManager.hasSelection()) {
|
||||||
|
var selectedEntities = selectionManager.selections;
|
||||||
|
var parentCheck = false;
|
||||||
|
|
||||||
|
if (selectedEntities.length < 1) {
|
||||||
|
Window.notifyEditError("You must have an entity selected inorder to unparent it.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
selectedEntities.forEach(function (id, index) {
|
||||||
|
var parentId = Entities.getEntityProperties(id, ["parentID"]).parentID;
|
||||||
|
if (parentId !== null && parentId.length > 0 && parentId !== "{00000000-0000-0000-0000-000000000000}") {
|
||||||
|
parentCheck = true;
|
||||||
|
}
|
||||||
|
Entities.editEntity(id, {parentID: null})
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
if (parentCheck) {
|
||||||
|
if (selectedEntities.length > 1) {
|
||||||
|
Window.notify("Entities unparented");
|
||||||
|
} else {
|
||||||
|
Window.notify("Entity unparented");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (selectedEntities.length > 1) {
|
||||||
|
Window.notify("Selected Entities have no parents");
|
||||||
|
} else {
|
||||||
|
Window.notify("Selected Entity does not have a parent");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Window.notifyEditError("You have nothing selected to unparent");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function parentSelectedEntities() {
|
||||||
|
if (SelectionManager.hasSelection()) {
|
||||||
|
var selectedEntities = selectionManager.selections;
|
||||||
|
if (selectedEntities.length <= 1) {
|
||||||
|
Window.notifyEditError("You must have multiple entities selected in order to parent them");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var parentCheck = false;
|
||||||
|
var lastEntityId = selectedEntities[selectedEntities.length-1];
|
||||||
|
selectedEntities.forEach(function (id, index) {
|
||||||
|
if (lastEntityId !== id) {
|
||||||
|
var parentId = Entities.getEntityProperties(id, ["parentID"]).parentID;
|
||||||
|
if (parentId !== lastEntityId) {
|
||||||
|
parentCheck = true;
|
||||||
|
}
|
||||||
|
Entities.editEntity(id, {parentID: lastEntityId})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if(parentCheck) {
|
||||||
|
Window.notify("Entities parented");
|
||||||
|
}else {
|
||||||
|
Window.notify("Entities are already parented to last");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Window.notifyEditError("You have nothing selected to parent");
|
||||||
|
}
|
||||||
|
}
|
||||||
function deleteSelectedEntities() {
|
function deleteSelectedEntities() {
|
||||||
if (SelectionManager.hasSelection()) {
|
if (SelectionManager.hasSelection()) {
|
||||||
selectedParticleEntity = 0;
|
selectedParticleEntity = 0;
|
||||||
|
@ -1164,6 +1244,10 @@ function handeMenuEvent(menuItem) {
|
||||||
Entities.setLightsArePickable(Menu.isOptionChecked("Allow Selecting of Lights"));
|
Entities.setLightsArePickable(Menu.isOptionChecked("Allow Selecting of Lights"));
|
||||||
} else if (menuItem === "Delete") {
|
} else if (menuItem === "Delete") {
|
||||||
deleteSelectedEntities();
|
deleteSelectedEntities();
|
||||||
|
} else if (menuItem === "Parent Entity to Last") {
|
||||||
|
parentSelectedEntities();
|
||||||
|
} else if (menuItem === "Unparent Entity") {
|
||||||
|
unparentSelectedEntities();
|
||||||
} else if (menuItem === "Export Entities") {
|
} else if (menuItem === "Export Entities") {
|
||||||
if (!selectionManager.hasSelection()) {
|
if (!selectionManager.hasSelection()) {
|
||||||
Window.notifyEditError("No entities have been selected.");
|
Window.notifyEditError("No entities have been selected.");
|
||||||
|
@ -1289,13 +1373,12 @@ Window.svoImportRequested.connect(importSVO);
|
||||||
|
|
||||||
Menu.menuItemEvent.connect(handeMenuEvent);
|
Menu.menuItemEvent.connect(handeMenuEvent);
|
||||||
|
|
||||||
Controller.keyPressEvent.connect(function (event) {
|
var keyPressEvent = function (event) {
|
||||||
if (isActive) {
|
if (isActive) {
|
||||||
cameraManager.keyPressEvent(event);
|
cameraManager.keyPressEvent(event);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
var keyReleaseEvent = function (event) {
|
||||||
Controller.keyReleaseEvent.connect(function (event) {
|
|
||||||
if (isActive) {
|
if (isActive) {
|
||||||
cameraManager.keyReleaseEvent(event);
|
cameraManager.keyReleaseEvent(event);
|
||||||
}
|
}
|
||||||
|
@ -1329,8 +1412,16 @@ Controller.keyReleaseEvent.connect(function (event) {
|
||||||
});
|
});
|
||||||
grid.setPosition(newPosition);
|
grid.setPosition(newPosition);
|
||||||
}
|
}
|
||||||
|
} else if (event.key === KEY_P && event.isControl && !event.isAutoRepeat ) {
|
||||||
|
if (event.isShifted) {
|
||||||
|
unparentSelectedEntities();
|
||||||
|
} else {
|
||||||
|
parentSelectedEntities();
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
};
|
||||||
|
Controller.keyReleaseEvent.connect(keyReleaseEvent);
|
||||||
|
Controller.keyPressEvent.connect(keyPressEvent);
|
||||||
|
|
||||||
function recursiveAdd(newParentID, parentData) {
|
function recursiveAdd(newParentID, parentData) {
|
||||||
var children = parentData.children;
|
var children = parentData.children;
|
||||||
|
@ -1580,6 +1671,10 @@ var PropertiesTool = function (opts) {
|
||||||
}
|
}
|
||||||
pushCommandForSelections();
|
pushCommandForSelections();
|
||||||
selectionManager._update();
|
selectionManager._update();
|
||||||
|
} else if(data.type === 'parent') {
|
||||||
|
parentSelectedEntities();
|
||||||
|
} else if(data.type === 'unparent') {
|
||||||
|
unparentSelectedEntities();
|
||||||
} else if(data.type === 'saveUserData'){
|
} else if(data.type === 'saveUserData'){
|
||||||
//the event bridge and json parsing handle our avatar id string differently.
|
//the event bridge and json parsing handle our avatar id string differently.
|
||||||
var actualID = data.id.split('"')[1];
|
var actualID = data.id.split('"')[1];
|
||||||
|
@ -1837,6 +1932,9 @@ var PopupMenu = function () {
|
||||||
for (var i = 0; i < overlays.length; i++) {
|
for (var i = 0; i < overlays.length; i++) {
|
||||||
Overlays.deleteOverlay(overlays[i]);
|
Overlays.deleteOverlay(overlays[i]);
|
||||||
}
|
}
|
||||||
|
Controller.mousePressEvent.disconnect(self.mousePressEvent);
|
||||||
|
Controller.mouseMoveEvent.disconnect(self.mouseMoveEvent);
|
||||||
|
Controller.mouseReleaseEvent.disconnect(self.mouseReleaseEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
Controller.mousePressEvent.connect(self.mousePressEvent);
|
Controller.mousePressEvent.connect(self.mousePressEvent);
|
||||||
|
@ -1864,7 +1962,11 @@ var particleExplorerTool = new ParticleExplorerTool();
|
||||||
var selectedParticleEntity = 0;
|
var selectedParticleEntity = 0;
|
||||||
entityListTool.webView.webEventReceived.connect(function (data) {
|
entityListTool.webView.webEventReceived.connect(function (data) {
|
||||||
data = JSON.parse(data);
|
data = JSON.parse(data);
|
||||||
if (data.type === "selectionUpdate") {
|
if(data.type === 'parent') {
|
||||||
|
parentSelectedEntities();
|
||||||
|
} else if(data.type === 'unparent') {
|
||||||
|
unparentSelectedEntities();
|
||||||
|
} else if (data.type === "selectionUpdate") {
|
||||||
var ids = data.entityIds;
|
var ids = data.entityIds;
|
||||||
if (ids.length === 1) {
|
if (ids.length === 1) {
|
||||||
if (Entities.getEntityProperties(ids[0], "type").type === "ParticleEffect") {
|
if (Entities.getEntityProperties(ids[0], "type").type === "ParticleEffect") {
|
||||||
|
|
|
@ -89,6 +89,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div id="no-entities">
|
<div id="no-entities">
|
||||||
No entities found <span id="no-entities-in-view">in view</span> within a <span id="no-entities-radius">100</span> meter radius. Try moving to a different location and refreshing.
|
No entities found <span id="no-entities-in-view">in view</span> within a <span id="no-entities-radius">100</span> meter radius. Try moving to a different location and refreshing.
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -19,6 +19,7 @@ const VISIBLE_GLYPH = "";
|
||||||
const TRANSPARENCY_GLYPH = "";
|
const TRANSPARENCY_GLYPH = "";
|
||||||
const SCRIPT_GLYPH = "k";
|
const SCRIPT_GLYPH = "k";
|
||||||
const DELETE = 46; // Key code for the delete key.
|
const DELETE = 46; // Key code for the delete key.
|
||||||
|
const KEY_P = 80; // Key code for letter p used for Parenting hotkey.
|
||||||
const MAX_ITEMS = Number.MAX_VALUE; // Used to set the max length of the list of discovered entities.
|
const MAX_ITEMS = Number.MAX_VALUE; // Used to set the max length of the list of discovered entities.
|
||||||
|
|
||||||
debugPrint = function (message) {
|
debugPrint = function (message) {
|
||||||
|
@ -292,6 +293,13 @@ function loaded() {
|
||||||
EventBridge.emitWebEvent(JSON.stringify({ type: 'delete' }));
|
EventBridge.emitWebEvent(JSON.stringify({ type: 'delete' }));
|
||||||
refreshEntities();
|
refreshEntities();
|
||||||
}
|
}
|
||||||
|
if (keyDownEvent.keyCode === KEY_P && keyDownEvent.ctrlKey) {
|
||||||
|
if (keyDownEvent.shiftKey) {
|
||||||
|
EventBridge.emitWebEvent(JSON.stringify({ type: 'unparent' }));
|
||||||
|
} else {
|
||||||
|
EventBridge.emitWebEvent(JSON.stringify({ type: 'parent' }));
|
||||||
|
}
|
||||||
|
}
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
var isFilterInView = false;
|
var isFilterInView = false;
|
||||||
|
@ -426,4 +434,3 @@ function loaded() {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}, false);
|
}, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ var ICON_FOR_TYPE = {
|
||||||
}
|
}
|
||||||
|
|
||||||
var EDITOR_TIMEOUT_DURATION = 1500;
|
var EDITOR_TIMEOUT_DURATION = 1500;
|
||||||
|
const KEY_P = 80; //Key code for letter p used for Parenting hotkey.
|
||||||
var colorPickers = [];
|
var colorPickers = [];
|
||||||
var lastEntityID = null;
|
var lastEntityID = null;
|
||||||
debugPrint = function(message) {
|
debugPrint = function(message) {
|
||||||
|
@ -1441,7 +1441,15 @@ function loaded() {
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.addEventListener("keydown", function (keyDown) {
|
||||||
|
if (keyDown.keyCode === KEY_P && keyDown.ctrlKey) {
|
||||||
|
if (keyDown.shiftKey) {
|
||||||
|
EventBridge.emitWebEvent(JSON.stringify({ type: 'unparent' }));
|
||||||
|
} else {
|
||||||
|
EventBridge.emitWebEvent(JSON.stringify({ type: 'parent' }));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
window.onblur = function() {
|
window.onblur = function() {
|
||||||
// Fake a change event
|
// Fake a change event
|
||||||
var ev = document.createEvent("HTMLEvents");
|
var ev = document.createEvent("HTMLEvents");
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
// Distributed under the Apache License, Version 2.0.
|
// Distributed under the Apache License, Version 2.0.
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
|
||||||
|
const KEY_P = 80; //Key code for letter p used for Parenting hotkey.
|
||||||
|
|
||||||
function loaded() {
|
function loaded() {
|
||||||
openEventBridge(function() {
|
openEventBridge(function() {
|
||||||
elPosY = document.getElementById("horiz-y");
|
elPosY = document.getElementById("horiz-y");
|
||||||
|
@ -131,10 +133,17 @@ function loaded() {
|
||||||
|
|
||||||
EventBridge.emitWebEvent(JSON.stringify({ type: 'init' }));
|
EventBridge.emitWebEvent(JSON.stringify({ type: 'init' }));
|
||||||
});
|
});
|
||||||
|
document.addEventListener("keydown", function (keyDown) {
|
||||||
|
if (keyDown.keyCode === KEY_P && keyDown.ctrlKey) {
|
||||||
|
if (keyDown.shiftKey) {
|
||||||
|
EventBridge.emitWebEvent(JSON.stringify({ type: 'unparent' }));
|
||||||
|
} else {
|
||||||
|
EventBridge.emitWebEvent(JSON.stringify({ type: 'parent' }));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
// Disable right-click context menu which is not visible in the HMD and makes it seem like the app has locked
|
// Disable right-click context menu which is not visible in the HMD and makes it seem like the app has locked
|
||||||
document.addEventListener("contextmenu", function (event) {
|
document.addEventListener("contextmenu", function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}, false);
|
}, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2189,8 +2189,12 @@ SelectionDisplay = (function() {
|
||||||
offset = Vec3.multiplyQbyV(properties.rotation, offset);
|
offset = Vec3.multiplyQbyV(properties.rotation, offset);
|
||||||
var boxPosition = Vec3.sum(properties.position, offset);
|
var boxPosition = Vec3.sum(properties.position, offset);
|
||||||
|
|
||||||
|
var color = {red: 255, green: 128, blue: 0};
|
||||||
|
if (i >= selectionManager.selections.length - 1) color = {red: 255, green: 255, blue: 64};
|
||||||
|
|
||||||
Overlays.editOverlay(selectionBoxes[i], {
|
Overlays.editOverlay(selectionBoxes[i], {
|
||||||
position: boxPosition,
|
position: boxPosition,
|
||||||
|
color: color,
|
||||||
rotation: properties.rotation,
|
rotation: properties.rotation,
|
||||||
dimensions: properties.dimensions,
|
dimensions: properties.dimensions,
|
||||||
visible: true,
|
visible: true,
|
||||||
|
|
|
@ -521,6 +521,9 @@ function onEditError(msg) {
|
||||||
createNotification(wordWrap(msg), NotificationType.EDIT_ERROR);
|
createNotification(wordWrap(msg), NotificationType.EDIT_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onNotify(msg) {
|
||||||
|
createNotification(wordWrap(msg), NotificationType.UNKNOWN); // Needs a generic notification system for user feedback, thus using this
|
||||||
|
}
|
||||||
|
|
||||||
function onSnapshotTaken(pathStillSnapshot, pathAnimatedSnapshot, notify) {
|
function onSnapshotTaken(pathStillSnapshot, pathAnimatedSnapshot, notify) {
|
||||||
if (notify) {
|
if (notify) {
|
||||||
|
@ -637,6 +640,7 @@ Window.domainConnectionRefused.connect(onDomainConnectionRefused);
|
||||||
Window.snapshotTaken.connect(onSnapshotTaken);
|
Window.snapshotTaken.connect(onSnapshotTaken);
|
||||||
Window.processingGif.connect(processingGif);
|
Window.processingGif.connect(processingGif);
|
||||||
Window.notifyEditError = onEditError;
|
Window.notifyEditError = onEditError;
|
||||||
|
Window.notify = onNotify;
|
||||||
|
|
||||||
setup();
|
setup();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue