sunrize 1.9.1 → 1.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/package.json +7 -8
- package/src/Application/Application.js +46 -17
- package/src/Application/Dashboard.js +1 -1
- package/src/Application/Document.js +40 -0
- package/src/Application/Registry.js +43 -0
- package/src/Application/Tabs.js +8 -1
- package/src/Application/Template.js +2 -2
- package/src/Controls/RenameNodeInput.js +11 -2
- package/src/Editors/OutlineEditor.js +9 -0
- package/src/Editors/OutlineRouteGraph.js +16 -4
- package/src/Editors/OutlineView.js +7 -7
- package/src/Editors/Panel.js +1 -1
- package/src/Editors/SceneProperties.js +4 -4
- package/src/Editors/ScriptEditor.js +120 -87
- package/src/Undo/Editor.js +3 -3
- package/src/assets/X3D.reg +81 -0
- package/src/assets/html/application-template.html +18 -1
- package/src/assets/html/window-template.html +0 -1
- package/src/assets/images/icon.ico +0 -0
- package/src/assets/images/loading/Higher Jump.ttf +0 -0
- package/src/assets/images/loading/icons.png +0 -0
- package/src/assets/images/loading/loading.png +0 -0
- package/src/assets/images/loading/loading.x3d +170 -0
- package/src/assets/images/loading.gif +0 -0
- package/src/assets/images/logo.svg +58 -0
- package/src/assets/themes/{default-template.css → default.css} +231 -42
- package/src/assets/themes/media-template.css +12 -0
- package/src/assets/themes/system-colors.css +2 -0
- package/src/main.js +4 -0
package/README.md
CHANGED
|
@@ -13,7 +13,11 @@ Sunrize is based on [X_ITE](https://create3000.github.io/x_ite/) and is a basic
|
|
|
13
13
|
* [Website](https://create3000.github.io/sunrize/)
|
|
14
14
|
* [Documentation](https://create3000.github.io/sunrize/documentation/)
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## Installer Packages
|
|
17
|
+
|
|
18
|
+
The latest builds of Sunrize are available as installer packages on the [Sunrize Releases](https://github.com/create3000/sunrize/releases) page on GitHub. From there, you can download precompiled binaries, but currently only for Windows.
|
|
19
|
+
|
|
20
|
+
## Run from Console
|
|
17
21
|
|
|
18
22
|
First you need to install both Node.js and npm on your system. To accomplish this, you can use a [Node installer](https://nodejs.org/en/download/) (Windows), or use [Homebrew](https://brew.sh) to install node (macos), or use your Linux package manager.
|
|
19
23
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sunrize",
|
|
3
3
|
"productName": "Sunrize X3D Editor",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.10.2",
|
|
5
5
|
"description": "A Multi-Platform X3D Editor",
|
|
6
6
|
"main": "src/main.js",
|
|
7
7
|
"bin": {
|
|
@@ -20,16 +20,15 @@
|
|
|
20
20
|
"premake": "npm i -D electron",
|
|
21
21
|
"make": "electron-forge make",
|
|
22
22
|
"postmake": "npm i -P electron",
|
|
23
|
-
"
|
|
24
|
-
"github": "electron-forge publish",
|
|
25
|
-
"postgithub": "npm i -P electron",
|
|
23
|
+
"publish-to-github": "node build/publish-to-github.js",
|
|
26
24
|
"predocs": "rm -f -r docs/_site/",
|
|
27
25
|
"docs": "cd docs && bundle exec jekyll serve --ssl-key ssl/server.key --ssl-cert ssl/server.crt --incremental --host=`ipconfig getifaddr en0`",
|
|
28
26
|
"predocs-install": "cd docs && ln -s -f ../../ssl ./",
|
|
29
27
|
"docs-install": "cd docs && gem install bundler && bundle install",
|
|
30
28
|
"docs-update": "cd docs && bundle update",
|
|
31
29
|
"merge-development": "sh build/merge-development.sh",
|
|
32
|
-
"make-x_ite-for-sunrize": "sh build/make-x_ite-for-sunrize.sh"
|
|
30
|
+
"make-x_ite-for-sunrize": "sh build/make-x_ite-for-sunrize.sh",
|
|
31
|
+
"loading-gif": "node build/loading-gif.js"
|
|
33
32
|
},
|
|
34
33
|
"repository": {
|
|
35
34
|
"type": "git",
|
|
@@ -91,7 +90,7 @@
|
|
|
91
90
|
"dependencies": {
|
|
92
91
|
"capitalize": "^2.0.4",
|
|
93
92
|
"console": "^0.7.2",
|
|
94
|
-
"electron": "^38.
|
|
93
|
+
"electron": "^38.1.2",
|
|
95
94
|
"electron-prompt": "^1.7.0",
|
|
96
95
|
"electron-squirrel-startup": "^1.0.1",
|
|
97
96
|
"electron-tabs": "^1.0.4",
|
|
@@ -103,14 +102,14 @@
|
|
|
103
102
|
"material-symbols": "^0.35.0",
|
|
104
103
|
"md5": "^2.3.0",
|
|
105
104
|
"mime-types": "^3.0.1",
|
|
106
|
-
"monaco-editor": "^0.
|
|
105
|
+
"monaco-editor": "^0.53.0",
|
|
107
106
|
"node-localstorage": "^3.0.5",
|
|
108
107
|
"qtip2": "^3.0.3",
|
|
109
108
|
"spectrum-colorpicker2": "^2.0.10",
|
|
110
109
|
"string-similarity": "^4.0.4",
|
|
111
110
|
"tweakpane": "^3.1.10",
|
|
112
111
|
"update-electron-app": "^3.1.1",
|
|
113
|
-
"x_ite": "^12.0.
|
|
112
|
+
"x_ite": "^12.0.8",
|
|
114
113
|
"x3d-traverse": "^1.0.13"
|
|
115
114
|
}
|
|
116
115
|
}
|
|
@@ -7,6 +7,7 @@ const
|
|
|
7
7
|
path = require ("path"),
|
|
8
8
|
fs = require ("fs"),
|
|
9
9
|
util = require ("util"),
|
|
10
|
+
Registry = require ("./Registry"),
|
|
10
11
|
Template = require ("./Template"),
|
|
11
12
|
LocalStorage = require ("node-localstorage") .LocalStorage,
|
|
12
13
|
DataStorage = require ("../Application/DataStorage"),
|
|
@@ -33,7 +34,9 @@ module .exports = class Application
|
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
if (process .platform === "win32")
|
|
36
|
-
require ("update-electron-app") .updateElectronApp ();
|
|
37
|
+
require ("update-electron-app") .updateElectronApp ({ updateInterval: "1 hour" });
|
|
38
|
+
|
|
39
|
+
Registry .addWindowsFileTypes ();
|
|
37
40
|
|
|
38
41
|
electron .app .commandLine .appendSwitch ("--enable-features", "OverlayScrollbar,ConversionMeasurement,AttributionReportingCrossAppWeb");
|
|
39
42
|
|
|
@@ -75,7 +78,7 @@ module .exports = class Application
|
|
|
75
78
|
|
|
76
79
|
Template .create (path .join (__dirname, "../assets/html/application-template.html"));
|
|
77
80
|
Template .create (path .join (__dirname, "../assets/html/window-template.html"));
|
|
78
|
-
Template .create (path .join (__dirname, "../assets/themes/
|
|
81
|
+
Template .create (path .join (__dirname, "../assets/themes/media-template.css"));
|
|
79
82
|
Template .create (path .join (__dirname, "../assets/themes/prompt-template.css"));
|
|
80
83
|
|
|
81
84
|
this .setup ();
|
|
@@ -384,9 +387,14 @@ module .exports = class Application
|
|
|
384
387
|
},
|
|
385
388
|
{ type: "separator" },
|
|
386
389
|
{
|
|
387
|
-
label: _("Close"),
|
|
390
|
+
label: _("Close Tab"),
|
|
388
391
|
accelerator: "CmdOrCtrl+W",
|
|
389
|
-
click: () => this .mainWindow .webContents .send ("close"),
|
|
392
|
+
click: () => this .mainWindow .webContents .send ("close-tab"),
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
label: _("Close All Tabs"),
|
|
396
|
+
accelerator: "Option+CmdOrCtrl+W",
|
|
397
|
+
click: () => this .mainWindow .webContents .send ("close-all-tabs"),
|
|
390
398
|
},
|
|
391
399
|
... process .platform === "darwin" ?
|
|
392
400
|
[ ]
|
|
@@ -424,22 +432,49 @@ module .exports = class Application
|
|
|
424
432
|
{ type: "separator" },
|
|
425
433
|
{ role: "selectAll" },
|
|
426
434
|
],
|
|
435
|
+
]
|
|
436
|
+
}
|
|
437
|
+
: this .menuOptions .monacoEditor ?
|
|
438
|
+
{
|
|
439
|
+
role: "editMenu",
|
|
440
|
+
submenu: [
|
|
441
|
+
{
|
|
442
|
+
label: _("Undo"),
|
|
443
|
+
accelerator: "CmdOrCtrl+Z",
|
|
444
|
+
click: () => this .mainWindow .webContents .send ("script-editor", "triggerEvent", "keyboard", "undo", null),
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
label: _("Redo"),
|
|
448
|
+
accelerator: "CmdOrCtrl+Shift+Z",
|
|
449
|
+
click: () => this .mainWindow .webContents .send ("script-editor", "triggerEvent", "keyboard", "redo", null),
|
|
450
|
+
},
|
|
451
|
+
{ type: "separator" },
|
|
452
|
+
{
|
|
453
|
+
role: "cut",
|
|
454
|
+
click: () => this .mainWindow .webContents .send ("script-editor", "cutOrCopy", "cut"),
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
role: "copy",
|
|
458
|
+
click: () => this .mainWindow .webContents .send ("script-editor", "cutOrCopy", "copy"),
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
role: "paste",
|
|
462
|
+
click: () => this .mainWindow .webContents .send ("script-editor", "paste"),
|
|
463
|
+
},
|
|
427
464
|
{ type: "separator" },
|
|
428
465
|
{
|
|
429
466
|
label: _("Toggle Line Comment"),
|
|
430
467
|
accelerator: process .platform === "darwin" ? "CmdOrCtrl+Shift+7" : "CmdOrCtrl+#",
|
|
431
|
-
enabled: this .menuOptions .monacoEditor,
|
|
432
468
|
click: () => this .mainWindow .webContents .send ("script-editor", "runAction", "editor.action.commentLine"),
|
|
433
469
|
},
|
|
434
470
|
{
|
|
435
471
|
label: _("Toggle Block Comment"),
|
|
436
472
|
accelerator: "Alt+Shift+A",
|
|
437
|
-
enabled: this .menuOptions .monacoEditor,
|
|
438
473
|
click: () => this .mainWindow .webContents .send ("script-editor", "runAction", "editor.action.blockComment"),
|
|
439
474
|
},
|
|
440
475
|
]
|
|
441
476
|
}
|
|
442
|
-
:
|
|
477
|
+
: // Outline Editor, Browser
|
|
443
478
|
{
|
|
444
479
|
role: "editMenu",
|
|
445
480
|
submenu: [
|
|
@@ -456,15 +491,9 @@ module .exports = class Application
|
|
|
456
491
|
click: () => this .mainWindow .webContents .send ("redo"),
|
|
457
492
|
},
|
|
458
493
|
{ type: "separator" },
|
|
459
|
-
{
|
|
460
|
-
|
|
461
|
-
},
|
|
462
|
-
{
|
|
463
|
-
role: "copy",
|
|
464
|
-
},
|
|
465
|
-
{
|
|
466
|
-
role: "paste",
|
|
467
|
-
},
|
|
494
|
+
{ role: "cut" },
|
|
495
|
+
{ role: "copy" },
|
|
496
|
+
{ role: "paste" },
|
|
468
497
|
{
|
|
469
498
|
label: _("Delete"),
|
|
470
499
|
accelerator: "CmdOrCtrl+Backspace",
|
|
@@ -932,7 +961,7 @@ module .exports = class Application
|
|
|
932
961
|
{
|
|
933
962
|
if (menuItem .submenu)
|
|
934
963
|
this .addMenuItemHandlers (id, menuItem .submenu);
|
|
935
|
-
else
|
|
964
|
+
else if (menuItem .args)
|
|
936
965
|
menuItem .click = () => this .mainWindow .webContents .send (id, ... menuItem .args);
|
|
937
966
|
}
|
|
938
967
|
|
|
@@ -92,7 +92,7 @@ module .exports = class Dashboard extends Interface
|
|
|
92
92
|
|
|
93
93
|
this .showPanelsButton = $("<span></span>")
|
|
94
94
|
.addClass (["material-symbols-outlined"])
|
|
95
|
-
.attr ("title", _("
|
|
95
|
+
.attr ("title", _("Show Node Panel."))
|
|
96
96
|
.text ("edit_note")
|
|
97
97
|
.appendTo (this .toolbar)
|
|
98
98
|
.on ("click", () => this .togglePanel (!this .config .file .panel));
|
|
@@ -272,9 +272,37 @@ module .exports = class Document extends Interface
|
|
|
272
272
|
{
|
|
273
273
|
this .activeElement = document .activeElement ? $(document .activeElement) : null;
|
|
274
274
|
|
|
275
|
+
if (this .activeElement ?.is ("input, textarea"))
|
|
276
|
+
{
|
|
277
|
+
this .activeElement
|
|
278
|
+
.off ("contextmenu.Document")
|
|
279
|
+
.on ("contextmenu.Document", () => this .showContextMenu ());
|
|
280
|
+
}
|
|
281
|
+
|
|
275
282
|
electron .ipcRenderer .send ("update-menu", this .updateEditMenu ({ }));
|
|
276
283
|
}
|
|
277
284
|
|
|
285
|
+
async showContextMenu ()
|
|
286
|
+
{
|
|
287
|
+
await $.sleep ();
|
|
288
|
+
|
|
289
|
+
if (this .activeElementIsMonacoEditor ())
|
|
290
|
+
return;
|
|
291
|
+
|
|
292
|
+
const menu = [
|
|
293
|
+
{ role: "undo", accelerator: "CmdOrCtrl+Z" },
|
|
294
|
+
{ role: "redo", accelerator: "Shift+CmdOrCtrl+Z" },
|
|
295
|
+
{ type: "separator" },
|
|
296
|
+
{ role: "cut", accelerator: "CmdOrCtrl+X" },
|
|
297
|
+
{ role: "copy", accelerator: "CmdOrCtrl+C" },
|
|
298
|
+
{ role: "paste", accelerator: "CmdOrCtrl+P" },
|
|
299
|
+
{ type: "separator" },
|
|
300
|
+
{ role: "selectAll", accelerator: "CmdOrCtrl+A" },
|
|
301
|
+
];
|
|
302
|
+
|
|
303
|
+
electron .ipcRenderer .send ("context-menu", "default-context-menu", menu);
|
|
304
|
+
}
|
|
305
|
+
|
|
278
306
|
updateEditMenu (menu)
|
|
279
307
|
{
|
|
280
308
|
return Object .assign (menu,
|
|
@@ -314,6 +342,9 @@ module .exports = class Document extends Interface
|
|
|
314
342
|
if (!this .activeElement .closest (".monaco-editor") .length)
|
|
315
343
|
return false;
|
|
316
344
|
|
|
345
|
+
if (this .activeElement .closest (".ibwrapper") .length)
|
|
346
|
+
return false;
|
|
347
|
+
|
|
317
348
|
return true;
|
|
318
349
|
}
|
|
319
350
|
|
|
@@ -586,6 +617,9 @@ Viewpoint {
|
|
|
586
617
|
if (this .activeElementIsInputOrOutput ())
|
|
587
618
|
return;
|
|
588
619
|
|
|
620
|
+
if (this .activeElementIsMonacoEditor ())
|
|
621
|
+
return;
|
|
622
|
+
|
|
589
623
|
this .sidebar .outlineEditor .cutNodes ();
|
|
590
624
|
return false;
|
|
591
625
|
}
|
|
@@ -595,6 +629,9 @@ Viewpoint {
|
|
|
595
629
|
if (this .activeElementIsInputOrOutput ())
|
|
596
630
|
return;
|
|
597
631
|
|
|
632
|
+
if (this .activeElementIsMonacoEditor ())
|
|
633
|
+
return;
|
|
634
|
+
|
|
598
635
|
this .sidebar .outlineEditor .copyNodes (true);
|
|
599
636
|
return false;
|
|
600
637
|
}
|
|
@@ -604,6 +641,9 @@ Viewpoint {
|
|
|
604
641
|
if (this .activeElementIsInputOrOutput ())
|
|
605
642
|
return;
|
|
606
643
|
|
|
644
|
+
if (this .activeElementIsMonacoEditor ())
|
|
645
|
+
return;
|
|
646
|
+
|
|
607
647
|
this .sidebar .outlineEditor .pasteNodes ();
|
|
608
648
|
return false;
|
|
609
649
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const
|
|
2
|
+
electron = require ("electron"),
|
|
3
|
+
path = require ("path"),
|
|
4
|
+
fs = require ("fs"),
|
|
5
|
+
child_process = require ("child_process");
|
|
6
|
+
|
|
7
|
+
module .exports = class Registry
|
|
8
|
+
{
|
|
9
|
+
static addWindowsFileTypes ()
|
|
10
|
+
{
|
|
11
|
+
if (process .platform !== "win32")
|
|
12
|
+
return;
|
|
13
|
+
|
|
14
|
+
if (!electron .app .isPackaged)
|
|
15
|
+
return;
|
|
16
|
+
|
|
17
|
+
const
|
|
18
|
+
exe = electron .app .getPath ("exe"),
|
|
19
|
+
reg = fs .readFileSync (path .join (__dirname, "../assets/X3D.reg"), { encoding: "utf-8" }),
|
|
20
|
+
tmp = path .join (__dirname, "../assets/X3D-tmp.reg");
|
|
21
|
+
|
|
22
|
+
const out = reg .replaceAll ("SUNRIZE_EXE", exe .replaceAll ("\\", "\\\\"));
|
|
23
|
+
|
|
24
|
+
fs .writeFileSync (tmp, out);
|
|
25
|
+
|
|
26
|
+
const ls = child_process .spawn ("reg", ["import", tmp]);
|
|
27
|
+
|
|
28
|
+
ls .stdout .on ('data', (data) =>
|
|
29
|
+
{
|
|
30
|
+
// console .log (`stdout: ${data}`);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
ls .stderr .on ('data', (data) =>
|
|
34
|
+
{
|
|
35
|
+
// console .error (`stderr: ${data}`);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
ls .on ("close", (code) =>
|
|
39
|
+
{
|
|
40
|
+
fs .unlinkSync (tmp);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
package/src/Application/Tabs.js
CHANGED
|
@@ -54,7 +54,8 @@ module .exports = new class Tabs
|
|
|
54
54
|
electron .ipcRenderer .on ("save-file", (event) => this .saveFile ());
|
|
55
55
|
electron .ipcRenderer .on ("save-file-as", (event, filePath) => this .saveFileAs (filePath));
|
|
56
56
|
electron .ipcRenderer .on ("save-all-files", (event) => this .saveAllFiles ());
|
|
57
|
-
electron .ipcRenderer .on ("close",
|
|
57
|
+
electron .ipcRenderer .on ("close-tab", (event) => this .tabs .getActiveTab () ?.close (true));
|
|
58
|
+
electron .ipcRenderer .on ("close-all-tabs", (event) => this .closeAllTabs ());
|
|
58
59
|
electron .ipcRenderer .on ("quit", (event) => this .quit ());
|
|
59
60
|
|
|
60
61
|
electron .ipcRenderer .on ("toggle-developer-tools", (event) => this .tabs .getActiveTab () .webview .openDevTools ());
|
|
@@ -336,6 +337,12 @@ module .exports = new class Tabs
|
|
|
336
337
|
tab .webview .send ("save-file");
|
|
337
338
|
}
|
|
338
339
|
|
|
340
|
+
closeAllTabs ()
|
|
341
|
+
{
|
|
342
|
+
for (const tab of this .tabs .getTabs ())
|
|
343
|
+
tab .close (true);
|
|
344
|
+
}
|
|
345
|
+
|
|
339
346
|
close ()
|
|
340
347
|
{
|
|
341
348
|
this .saveTabs ();
|
|
@@ -22,8 +22,8 @@ class Template
|
|
|
22
22
|
|
|
23
23
|
const file = fs .readFileSync (template)
|
|
24
24
|
.toString ()
|
|
25
|
-
.replace (/(url\()(.*?)(\))/sg,
|
|
26
|
-
.replace (/(href=")(.*?)(")/sg,
|
|
25
|
+
.replace (/(url\()(.*?)(\))/sg, (... args) => this .resolve (template, ... args))
|
|
26
|
+
.replace (/(href=")(.*?)(")/sg, (... args) => this .resolve (template, ... args));
|
|
27
27
|
|
|
28
28
|
fs .writeFileSync (filename, file);
|
|
29
29
|
fs .utimesSync (dirname, stats .atime, stats .mtime);
|
|
@@ -12,9 +12,19 @@ require ("../Bits/Validate");
|
|
|
12
12
|
|
|
13
13
|
$.fn.renameNodeInput = function (node)
|
|
14
14
|
{
|
|
15
|
+
this .data ("node") ?.name_changed .removeFieldCallback (this);
|
|
16
|
+
this .data ("node", node);
|
|
17
|
+
|
|
18
|
+
node ?.name_changed .addFieldCallback (this, () => this .val (node .getName ()));
|
|
19
|
+
|
|
20
|
+
if (node)
|
|
21
|
+
this .removeAttr ("disabled");
|
|
22
|
+
else
|
|
23
|
+
this .attr ("disabled", "");
|
|
24
|
+
|
|
15
25
|
this
|
|
16
26
|
.val (node ? node .getName () : "")
|
|
17
|
-
.siblings () .addBack () .off ("keydown.renameNodeInput")
|
|
27
|
+
.siblings () .addBack () .off ("keydown.renameNodeInput");
|
|
18
28
|
|
|
19
29
|
this .validate (Editor .Id, () =>
|
|
20
30
|
{
|
|
@@ -107,4 +117,3 @@ $.fn.renameNodeInput = function (node)
|
|
|
107
117
|
|
|
108
118
|
return this;
|
|
109
119
|
};
|
|
110
|
-
|
|
@@ -151,6 +151,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
|
|
|
151
151
|
{ type: "separator" },
|
|
152
152
|
{
|
|
153
153
|
label: _("Paste"),
|
|
154
|
+
accelerator: "CmdOrCtrl+V",
|
|
154
155
|
visible: field .getType () === X3D .X3DConstants .SFNode || field .getType () === X3D .X3DConstants .MFNode,
|
|
155
156
|
args: ["pasteNodes", element .attr ("id"), executionContext .getId (), node .getId (), field .getId ()],
|
|
156
157
|
},
|
|
@@ -223,18 +224,22 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
|
|
|
223
224
|
{ type: "separator" },
|
|
224
225
|
{
|
|
225
226
|
label: _("Cut"),
|
|
227
|
+
accelerator: "CmdOrCtrl+X",
|
|
226
228
|
args: ["cutNodes"],
|
|
227
229
|
},
|
|
228
230
|
{
|
|
229
231
|
label: _("Copy"),
|
|
232
|
+
accelerator: "CmdOrCtrl+C",
|
|
230
233
|
args: ["copyNodes"],
|
|
231
234
|
},
|
|
232
235
|
{
|
|
233
236
|
label: _("Paste"),
|
|
237
|
+
accelerator: "CmdOrCtrl+V",
|
|
234
238
|
args: ["pasteNodes", element .attr ("id"), executionContext .getId (), node .getId ()],
|
|
235
239
|
},
|
|
236
240
|
{
|
|
237
241
|
label: _("Delete"),
|
|
242
|
+
accelerator: "CmdOrCtrl+Backspace",
|
|
238
243
|
args: ["deleteNodes"],
|
|
239
244
|
},
|
|
240
245
|
{
|
|
@@ -537,14 +542,17 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
|
|
|
537
542
|
var menu = [
|
|
538
543
|
{
|
|
539
544
|
label: _("Cut"),
|
|
545
|
+
accelerator: "CmdOrCtrl+X",
|
|
540
546
|
args: ["cutNodes"],
|
|
541
547
|
},
|
|
542
548
|
{
|
|
543
549
|
label: _("Copy"),
|
|
550
|
+
accelerator: "CmdOrCtrl+C",
|
|
544
551
|
args: ["copyNodes"],
|
|
545
552
|
},
|
|
546
553
|
{
|
|
547
554
|
label: _("Delete"),
|
|
555
|
+
accelerator: "CmdOrCtrl+Backspace",
|
|
548
556
|
args: ["deleteNodes"],
|
|
549
557
|
},
|
|
550
558
|
];
|
|
@@ -670,6 +678,7 @@ module .exports = class OutlineEditor extends OutlineRouteGraph
|
|
|
670
678
|
},
|
|
671
679
|
{
|
|
672
680
|
label: _("Paste"),
|
|
681
|
+
accelerator: "CmdOrCtrl+V",
|
|
673
682
|
args: ["pasteNodes", element .attr ("id"), executionContext .getId ()],
|
|
674
683
|
},
|
|
675
684
|
];
|
|
@@ -5,10 +5,6 @@ const
|
|
|
5
5
|
X3D = require ("../X3D"),
|
|
6
6
|
OutlineView = require ("./OutlineView");
|
|
7
7
|
|
|
8
|
-
const
|
|
9
|
-
routeColor = "#000000",
|
|
10
|
-
routeSelectedColor = "rgb(255, 69, 58)";
|
|
11
|
-
|
|
12
8
|
module .exports = class OutlineRouteGraph extends OutlineView
|
|
13
9
|
{
|
|
14
10
|
constructor (element)
|
|
@@ -18,6 +14,16 @@ module .exports = class OutlineRouteGraph extends OutlineView
|
|
|
18
14
|
this .selectedRoutes = new Set ();
|
|
19
15
|
}
|
|
20
16
|
|
|
17
|
+
colorScheme (shouldUseDarkColors)
|
|
18
|
+
{
|
|
19
|
+
super .colorScheme (shouldUseDarkColors);
|
|
20
|
+
|
|
21
|
+
this .routeColor = window .getComputedStyle ($("body") [0]) .getPropertyValue ("--system-gray1");
|
|
22
|
+
this .routeSelectedColor = window .getComputedStyle ($("body") [0]) .getPropertyValue ("--system-red");
|
|
23
|
+
|
|
24
|
+
this .requestUpdateRouteGraph ();
|
|
25
|
+
}
|
|
26
|
+
|
|
21
27
|
selectRoutes (type, event)
|
|
22
28
|
{
|
|
23
29
|
// Select routes.
|
|
@@ -143,6 +149,8 @@ module .exports = class OutlineRouteGraph extends OutlineView
|
|
|
143
149
|
parent = canvas .parent (),
|
|
144
150
|
context = canvas .get (0) .getContext ("2d");
|
|
145
151
|
|
|
152
|
+
const { routeColor, routeSelectedColor } = this;
|
|
153
|
+
|
|
146
154
|
canvas .height (Math .ceil (parent .height ()));
|
|
147
155
|
|
|
148
156
|
canvas .prop ("width", canvas .width ());
|
|
@@ -221,6 +229,8 @@ module .exports = class OutlineRouteGraph extends OutlineView
|
|
|
221
229
|
parent = canvas .parent (),
|
|
222
230
|
context = canvas .get (0) .getContext ("2d");
|
|
223
231
|
|
|
232
|
+
const { routeColor, routeSelectedColor } = this;
|
|
233
|
+
|
|
224
234
|
canvas .height (Math .ceil (parent .height ()));
|
|
225
235
|
|
|
226
236
|
canvas .prop ("width", canvas .width ());
|
|
@@ -275,6 +285,8 @@ module .exports = class OutlineRouteGraph extends OutlineView
|
|
|
275
285
|
|
|
276
286
|
updateRouteCurves (canvases, fields)
|
|
277
287
|
{
|
|
288
|
+
const { routeColor, routeSelectedColor } = this;
|
|
289
|
+
|
|
278
290
|
// Scale canvases
|
|
279
291
|
|
|
280
292
|
for (let i = 0, length = canvases .length - 1; i < length; ++ i)
|
|
@@ -1716,7 +1716,7 @@ module .exports = class OutlineView extends Interface
|
|
|
1716
1716
|
.addClass ("input-selector") .appendTo (map);
|
|
1717
1717
|
|
|
1718
1718
|
const inputRoutesSelector = $("<area></area>")
|
|
1719
|
-
.attr ("title", _("Select
|
|
1719
|
+
.attr ("title", _("Select route(s)."))
|
|
1720
1720
|
.attr ("shape", "rect")
|
|
1721
1721
|
.attr ("coords", "20,0,28,7")
|
|
1722
1722
|
.addClass ("input-routes-selector") .appendTo (map);
|
|
@@ -1736,7 +1736,7 @@ module .exports = class OutlineView extends Interface
|
|
|
1736
1736
|
.addClass ("output-selector") .appendTo (map);
|
|
1737
1737
|
|
|
1738
1738
|
const outputRoutesSelector = $("<area></area>")
|
|
1739
|
-
.attr ("title", _("Select
|
|
1739
|
+
.attr ("title", _("Select route(s)."))
|
|
1740
1740
|
.attr ("shape", "rect")
|
|
1741
1741
|
.attr ("coords", "20,5,28,12")
|
|
1742
1742
|
.addClass ("output-routes-selector")
|
|
@@ -1765,7 +1765,7 @@ module .exports = class OutlineView extends Interface
|
|
|
1765
1765
|
.appendTo (map);
|
|
1766
1766
|
|
|
1767
1767
|
const inputRoutesSelector = $("<area></area>")
|
|
1768
|
-
.attr ("title", _("Select
|
|
1768
|
+
.attr ("title", _("Select route(s)."))
|
|
1769
1769
|
.attr ("shape", "rect")
|
|
1770
1770
|
.attr ("coords", "34,0,42,7")
|
|
1771
1771
|
.addClass ("input-routes-selector")
|
|
@@ -1775,7 +1775,7 @@ module .exports = class OutlineView extends Interface
|
|
|
1775
1775
|
inputRoutesSelector .attr ("href", "#");
|
|
1776
1776
|
|
|
1777
1777
|
const outputRoutesSelector = $("<area></area>")
|
|
1778
|
-
.attr ("title", _("Select
|
|
1778
|
+
.attr ("title", _("Select route(s)."))
|
|
1779
1779
|
.attr ("shape", "rect")
|
|
1780
1780
|
.addClass ("output-routes-selector")
|
|
1781
1781
|
.appendTo (map);
|
|
@@ -2359,7 +2359,7 @@ module .exports = class OutlineView extends Interface
|
|
|
2359
2359
|
|
|
2360
2360
|
$("<div></div>")
|
|
2361
2361
|
.addClass (type + "-value-container")
|
|
2362
|
-
.append ($("<input></input>") .attr ("type", "text"))
|
|
2362
|
+
.append ($("<input></input>") .attr ("type", "text") .attr ("lang", "en"))
|
|
2363
2363
|
.appendTo (li);
|
|
2364
2364
|
|
|
2365
2365
|
// Make jsTree.
|
|
@@ -2467,7 +2467,7 @@ module .exports = class OutlineView extends Interface
|
|
|
2467
2467
|
|
|
2468
2468
|
$("<div></div>")
|
|
2469
2469
|
.addClass (type + "-value-container")
|
|
2470
|
-
.append ($("<textarea></textarea>"))
|
|
2470
|
+
.append ($("<textarea></textarea>") .attr ("lang", "en"))
|
|
2471
2471
|
.appendTo (li)
|
|
2472
2472
|
|
|
2473
2473
|
// Make jsTree.
|
|
@@ -3827,7 +3827,7 @@ module .exports = class OutlineView extends Interface
|
|
|
3827
3827
|
|
|
3828
3828
|
selectRoutes (type, event)
|
|
3829
3829
|
{
|
|
3830
|
-
// Select
|
|
3830
|
+
// Select route(s).
|
|
3831
3831
|
}
|
|
3832
3832
|
|
|
3833
3833
|
selectSingleRoute (type, event)
|
package/src/Editors/Panel.js
CHANGED
|
@@ -227,9 +227,9 @@ module .exports = new class SceneProperties extends Dialog
|
|
|
227
227
|
|
|
228
228
|
this .executionContext .getWorldInfos () .addInterest ("updateWorldInfo", this);
|
|
229
229
|
|
|
230
|
-
const
|
|
230
|
+
const app = require ("../Application/Window");
|
|
231
231
|
|
|
232
|
-
this .profileAndComponents .inputs .checkbox .prop ("checked",
|
|
232
|
+
this .profileAndComponents .inputs .checkbox .prop ("checked", app .config .file .inferProfileAndComponents);
|
|
233
233
|
|
|
234
234
|
this .toggleInferProfileAndComponents ();
|
|
235
235
|
this .updateProfile ();
|
|
@@ -251,9 +251,9 @@ module .exports = new class SceneProperties extends Dialog
|
|
|
251
251
|
|
|
252
252
|
toggleInferProfileAndComponents ()
|
|
253
253
|
{
|
|
254
|
-
const
|
|
254
|
+
const app = require ("../Application/Window");
|
|
255
255
|
|
|
256
|
-
|
|
256
|
+
app .config .file .inferProfileAndComponents = this .profileAndComponents .inputs .checkbox .prop ("checked");
|
|
257
257
|
|
|
258
258
|
if (this .profileAndComponents .inputs .checkbox .prop ("checked"))
|
|
259
259
|
this .profileAndComponents .checkboxRow .addClass ("disabled");
|