dazscript-framework 0.1.14 → 0.1.16

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.
Files changed (82) hide show
  1. package/README.md +365 -93
  2. package/babel.config.js +33 -33
  3. package/dist/babel/trace-babel-plugin.js +243 -243
  4. package/dist/babel/trace-log-babel-plugin.js +164 -164
  5. package/dist/scripts/install-generator.js +185 -185
  6. package/package.json +72 -70
  7. package/src/common/dz-dump.ts +120 -120
  8. package/src/common/log.ts +56 -57
  9. package/src/common/trace.ts +26 -26
  10. package/src/core/action-decorator.ts +15 -15
  11. package/src/core/base-script.ts +30 -30
  12. package/src/core/custom-action.ts +11 -11
  13. package/src/core/global.ts +4 -4
  14. package/src/dialog/basic-dialog.ts +40 -32
  15. package/src/dialog/builders/button-builder.ts +52 -52
  16. package/src/dialog/builders/checkbox-builder.ts +29 -29
  17. package/src/dialog/builders/color-picker-builder.ts +36 -0
  18. package/src/dialog/builders/combo-box-builder.ts +38 -35
  19. package/src/dialog/builders/combo-edit-builder.ts +35 -35
  20. package/src/dialog/builders/dialog-builder.ts +49 -49
  21. package/src/dialog/builders/groupbox-builder.ts +121 -73
  22. package/src/dialog/builders/label-builder.ts +33 -29
  23. package/src/dialog/builders/layout-builder.ts +59 -59
  24. package/src/dialog/builders/line-edit-builder.ts +124 -119
  25. package/src/dialog/builders/list-box-builder.ts +103 -0
  26. package/src/dialog/builders/list-view-builder.ts +396 -328
  27. package/src/dialog/builders/node-selection-builder.ts +55 -55
  28. package/src/dialog/builders/path-combo-box-builder.ts +24 -24
  29. package/src/dialog/builders/popup-menu-builder.ts +46 -46
  30. package/src/dialog/builders/radio-builder.ts +42 -42
  31. package/src/dialog/builders/slider-builder.ts +40 -0
  32. package/src/dialog/builders/splitter-builder.ts +88 -88
  33. package/src/dialog/builders/tab-builder.ts +120 -106
  34. package/src/dialog/builders/widget-builder.ts +136 -124
  35. package/src/dialog/builders/widgets-builder.ts +140 -125
  36. package/src/dialog/input-dialog.ts +30 -27
  37. package/src/dialog/input-validator.ts +8 -8
  38. package/src/dialog/selection-dialog.ts +47 -0
  39. package/src/dialog/shared.ts +8 -8
  40. package/src/helpers/action-helper.ts +214 -81
  41. package/src/helpers/array-helper.ts +170 -145
  42. package/src/helpers/camera-helper.ts +12 -12
  43. package/src/helpers/custom-action-helper.ts +176 -176
  44. package/src/helpers/directory-helper.ts +14 -0
  45. package/src/helpers/file-helper.ts +90 -90
  46. package/src/helpers/http-helper.ts +186 -0
  47. package/src/helpers/input-helper.ts +18 -18
  48. package/src/helpers/list-view-helper.ts +105 -89
  49. package/src/helpers/menu-helper.ts +28 -28
  50. package/src/helpers/message-box-helper.ts +25 -15
  51. package/src/helpers/node-helper.ts +461 -236
  52. package/src/helpers/number-helper.ts +10 -10
  53. package/src/helpers/numeric-property-helper.ts +91 -91
  54. package/src/helpers/object-helper.ts +2 -2
  55. package/src/helpers/pane-helper.ts +28 -20
  56. package/src/helpers/progress-helper.ts +51 -33
  57. package/src/helpers/property-helper.ts +61 -52
  58. package/src/helpers/record-helper.ts +16 -16
  59. package/src/helpers/scene-helper.ts +144 -95
  60. package/src/helpers/script-helper.ts +15 -15
  61. package/src/helpers/skeleton-helper.ts +26 -26
  62. package/src/helpers/splitter-helper.ts +8 -8
  63. package/src/helpers/string-helper.ts +39 -31
  64. package/src/helpers/surface-helper.ts +5 -5
  65. package/src/helpers/undo-helper.ts +8 -7
  66. package/src/helpers/viewport-helper.ts +21 -8
  67. package/src/lib/delayed.ts +38 -38
  68. package/src/lib/dictionary.ts +3 -0
  69. package/src/lib/frame-keys.ts +67 -67
  70. package/src/lib/guid.ts +2 -2
  71. package/src/lib/menu-item.ts +10 -9
  72. package/src/lib/observable.ts +147 -94
  73. package/src/lib/set.ts +50 -25
  74. package/src/lib/settings.ts +112 -104
  75. package/src/lib/tree-node.ts +149 -145
  76. package/src/samples/config.ts +2 -2
  77. package/src/samples/hello-world.dsa.ts +12 -12
  78. package/src/samples/sample-dialog.dsa.ts +51 -51
  79. package/src/samples/sample-dialog.ts +48 -48
  80. package/src/shared/set-keyboard-shortcut.ts +146 -102
  81. package/tsconfig.json +116 -116
  82. package/webpack.config.js +70 -70
@@ -1,125 +1,140 @@
1
- import { Observable } from '@dsf/lib/observable'
2
- import { ButtonBuilder } from './button-builder'
3
- import CheckBoxBuilder from './checkbox-builder'
4
- import { ComboBoxBuilder } from './combo-box-builder'
5
- import { ComboEditBuilder } from './combo-edit-builder'
6
- import GroupBoxBuilder from './groupbox-builder'
7
- import LabelBuilder from './label-builder'
8
- import LayoutBuilder, { LayoutOrientation } from './layout-builder'
9
- import LineEditBuilder from './line-edit-builder'
10
- import { ListViewBuilder } from './list-view-builder'
11
- import { NodeSelectionComboBoxBuilder } from './node-selection-builder'
12
- import { PopupMenuBuilder } from './popup-menu-builder'
13
- import RadioButtonBuilder from './radio-builder'
14
- import { SplitterBuilder, SplitterBuilderContext } from './splitter-builder'
15
- import { TabBuilder, TabBuilderContext } from './tab-builder'
16
- import { createWidget } from './widget-builder'
17
-
18
- export class WidgetBuilderContext {
19
- layout: DzLayout | null
20
-
21
- get parent(): DzWidget | DzLayout {
22
- return this.layout ?? this.dialog
23
- }
24
-
25
- constructor(public readonly dialog: DzBasicDialog) {
26
- this.layout = new LayoutBuilder(this).build()
27
- }
28
- }
29
-
30
- export class WidgetsBuilder {
31
- private readonly tabsContext: TabBuilderContext
32
- private readonly splitterContext: SplitterBuilderContext
33
-
34
- constructor(public readonly context: WidgetBuilderContext) {
35
- this.tabsContext = new TabBuilderContext(this.context)
36
- this.splitterContext = new SplitterBuilderContext(this.context)
37
- }
38
-
39
- vertical(then: (layout: DzVBoxLayout) => void, orientation: LayoutOrientation = LayoutOrientation.LeftToRight): DzVBoxLayout {
40
- return LayoutBuilder
41
- .create(this.context)
42
- .orientation(orientation)
43
- .direction('vertical')
44
- .build(then)
45
- }
46
-
47
- horizontal(then: (layout: DzHBoxLayout) => void, orientation: LayoutOrientation = LayoutOrientation.LeftToRight): DzHBoxLayout {
48
- return LayoutBuilder
49
- .create(this.context)
50
- .orientation(orientation)
51
- .direction('horizontal')
52
- .build(then)
53
- }
54
-
55
- widget<T extends DzWidget>(type: { new(p0: any, p1?: any, p2?: any, p3?: any): T }, then?: (widget: T) => void): T {
56
- return createWidget(this.context).build(type, then)
57
- }
58
-
59
- label(text: string): LabelBuilder {
60
- return new LabelBuilder(this.context).text(text)
61
- }
62
-
63
- button(text?: string): ButtonBuilder {
64
- return new ButtonBuilder(this.context).text(text)
65
- }
66
-
67
- edit(): LineEditBuilder {
68
- return new LineEditBuilder(this.context)
69
- }
70
-
71
- checkbox(label?: string): CheckBoxBuilder {
72
- return new CheckBoxBuilder(this.context).label(label)
73
- }
74
-
75
- radio(label?: string): RadioButtonBuilder {
76
- return new RadioButtonBuilder(this.context).label(label)
77
- }
78
-
79
- group(title?: string | Observable<string>): GroupBoxBuilder {
80
- return new GroupBoxBuilder(this.context).title(title)
81
- }
82
-
83
- tab(title?: string): TabBuilder {
84
- return TabBuilder.create(this.tabsContext).title(title)
85
- }
86
-
87
- splitter(...items: DzWidget[]): SplitterBuilder {
88
- return new SplitterBuilder(this.splitterContext).items(...items)
89
- }
90
-
91
- contextMenu(): PopupMenuBuilder {
92
- return new PopupMenuBuilder(this.context)
93
- }
94
-
95
- combo(): ComboBoxBuilder {
96
- return new ComboBoxBuilder(this.context)
97
- }
98
-
99
- comboEdit(): ComboEditBuilder {
100
- return new ComboEditBuilder(this.context)
101
- }
102
-
103
- // pathComboBox(checkBoxes: boolean = false): PathComboBoxBuilder {
104
- // return new PathComboBoxBuilder(this.context, checkBoxes)
105
- // }
106
-
107
- /**
108
- *
109
- * @returns
110
- * @deprecated use list
111
- */
112
- listView<TItem, TData = TItem>(): ListViewBuilder<TItem, TData> {
113
- return new ListViewBuilder(this.context)
114
- }
115
-
116
- get list(): { view: <TItem, TData = TItem>() => ListViewBuilder<TItem, TData> } {
117
- return {
118
- view: <TItem, TData = TItem>() => new ListViewBuilder<TItem, TData>(this.context)
119
- }
120
- }
121
-
122
- nodeSelection(): NodeSelectionComboBoxBuilder {
123
- return new NodeSelectionComboBoxBuilder(this.context)
124
- }
125
- }
1
+ import { Observable } from '@dsf/lib/observable'
2
+ import { ButtonBuilder } from './button-builder'
3
+ import CheckBoxBuilder from './checkbox-builder'
4
+ import ColorPickerBuilder from './color-picker-builder'
5
+ import { ComboBoxBuilder } from './combo-box-builder'
6
+ import { ComboEditBuilder } from './combo-edit-builder'
7
+ import GroupBoxBuilder from './groupbox-builder'
8
+ import LabelBuilder from './label-builder'
9
+ import LayoutBuilder, { LayoutOrientation } from './layout-builder'
10
+ import LineEditBuilder from './line-edit-builder'
11
+ import { ListBoxBuilder } from './list-box-builder'
12
+ import { ListViewBuilder } from './list-view-builder'
13
+ import { NodeSelectionComboBoxBuilder } from './node-selection-builder'
14
+ import { PopupMenuBuilder } from './popup-menu-builder'
15
+ import RadioButtonBuilder from './radio-builder'
16
+ import SliderBuilder from './slider-builder'
17
+ import { SplitterBuilder, SplitterBuilderContext } from './splitter-builder'
18
+ import { TabBuilder, TabBuilderContext } from './tab-builder'
19
+ import { createWidget } from './widget-builder'
20
+
21
+ export class WidgetBuilderContext {
22
+ layout: DzLayout | null
23
+
24
+ get parent(): DzWidget | DzLayout {
25
+ return this.layout ?? this.dialog
26
+ }
27
+
28
+ constructor(public readonly dialog: DzBasicDialog) {
29
+ this.layout = new LayoutBuilder(this).build()
30
+ }
31
+ }
32
+
33
+ export class WidgetsBuilder {
34
+ private readonly tabsContext: TabBuilderContext
35
+ private readonly splitterContext: SplitterBuilderContext
36
+
37
+ constructor(public readonly context: WidgetBuilderContext) {
38
+ this.tabsContext = new TabBuilderContext(this.context)
39
+ this.splitterContext = new SplitterBuilderContext(this.context)
40
+ }
41
+
42
+ vertical(then: (layout: DzVBoxLayout) => void, orientation: LayoutOrientation = LayoutOrientation.LeftToRight): DzVBoxLayout {
43
+ return LayoutBuilder
44
+ .create(this.context)
45
+ .orientation(orientation)
46
+ .direction('vertical')
47
+ .build(then)
48
+ }
49
+
50
+ horizontal(then: (layout: DzHBoxLayout) => void, orientation: LayoutOrientation = LayoutOrientation.LeftToRight): DzHBoxLayout {
51
+ return LayoutBuilder
52
+ .create(this.context)
53
+ .orientation(orientation)
54
+ .direction('horizontal')
55
+ .build(then)
56
+ }
57
+
58
+ widget<T extends DzWidget>(type: { new(p0: any, p1?: any, p2?: any, p3?: any): T }, then?: (widget: T) => void): T {
59
+ return createWidget(this.context).build(type, then)
60
+ }
61
+
62
+ label(text: string): LabelBuilder {
63
+ return new LabelBuilder(this.context).text(text)
64
+ }
65
+
66
+ button(text?: string): ButtonBuilder {
67
+ return new ButtonBuilder(this.context).text(text)
68
+ }
69
+
70
+ edit(): LineEditBuilder {
71
+ return new LineEditBuilder(this.context)
72
+ }
73
+
74
+ checkbox(label?: string): CheckBoxBuilder {
75
+ return new CheckBoxBuilder(this.context).label(label)
76
+ }
77
+
78
+ radio(label?: string): RadioButtonBuilder {
79
+ return new RadioButtonBuilder(this.context).label(label)
80
+ }
81
+
82
+ group(title?: string | Observable<string>): GroupBoxBuilder {
83
+ return new GroupBoxBuilder(this.context).title(title)
84
+ }
85
+
86
+ tab(title?: string): TabBuilder {
87
+ return TabBuilder.create(this.tabsContext).title(title)
88
+ }
89
+
90
+ splitter(...items: DzWidget[]): SplitterBuilder {
91
+ return new SplitterBuilder(this.splitterContext).items(...items)
92
+ }
93
+
94
+ contextMenu(): PopupMenuBuilder {
95
+ return new PopupMenuBuilder(this.context)
96
+ }
97
+
98
+ combo(): ComboBoxBuilder {
99
+ return new ComboBoxBuilder(this.context)
100
+ }
101
+
102
+ comboEdit(): ComboEditBuilder {
103
+ return new ComboEditBuilder(this.context)
104
+ }
105
+
106
+ // pathComboBox(checkBoxes: boolean = false): PathComboBoxBuilder {
107
+ // return new PathComboBoxBuilder(this.context, checkBoxes)
108
+ // }
109
+
110
+ slider(type: 'float' | 'integer' = 'float'): SliderBuilder {
111
+ return new SliderBuilder(this.context, type)
112
+ }
113
+
114
+ color(): ColorPickerBuilder {
115
+ return new ColorPickerBuilder(this.context)
116
+ }
117
+
118
+ /**
119
+ *
120
+ * @returns
121
+ * @deprecated use list
122
+ */
123
+ listView<TItem, TData = TItem>(): ListViewBuilder<TItem, TData> {
124
+ return new ListViewBuilder(this.context)
125
+ }
126
+
127
+ get list(): {
128
+ view: <TItem, TData = TItem>() => ListViewBuilder<TItem, TData>
129
+ box: () => ListBoxBuilder
130
+ } {
131
+ return {
132
+ view: <TItem, TData = TItem>() => new ListViewBuilder<TItem, TData>(this.context),
133
+ box: () => new ListBoxBuilder(this.context)
134
+ }
135
+ }
136
+
137
+ nodeSelection(): NodeSelectionComboBoxBuilder {
138
+ return new NodeSelectionComboBoxBuilder(this.context)
139
+ }
140
+ }
@@ -1,28 +1,31 @@
1
- import { Observable } from '@dsf/lib/observable';
2
- import { BasicDialog } from './basic-dialog';
3
- import { InputValidator } from './input-validator';
4
-
5
- export class InputDialogModel {
6
- value$: Observable<string> = new Observable()
7
- validator: InputValidator | null = null
8
-
9
- getNumericValue(): number {
10
- return parseFloat(this.value$.value).valueOf()
11
- }
12
-
13
- constructor(validator: InputValidator | null = null) {
14
- this.validator = validator
15
- }
16
- }
17
-
18
- export class InputDialog extends BasicDialog {
19
- constructor(title: string, private readonly model: InputDialogModel) {
20
- super(title);
21
- }
22
-
23
- protected build(): void {
24
- let add = this.add
25
-
26
- add.edit().value(this.model.value$).validator(this.model.validator).focus()
27
- }
1
+ import { Observable } from '@dsf/lib/observable';
2
+ import { BasicDialog } from './basic-dialog';
3
+ import { InputValidator } from './input-validator';
4
+
5
+ export class InputDialogModel {
6
+ /**
7
+ * @deprecated use `text$` instead
8
+ */
9
+ value$: Observable<string> = new Observable()
10
+ get text$(): Observable<string> { return this.value$ }
11
+
12
+ validator: InputValidator | null = null
13
+
14
+ getNumericValue(): number {
15
+ return parseFloat(this.value$.value).valueOf()
16
+ }
17
+
18
+ constructor(validator: InputValidator | null = null) {
19
+ this.validator = validator
20
+ }
21
+ }
22
+
23
+ export class InputDialog extends BasicDialog {
24
+ constructor(title: string, private readonly model: InputDialogModel) {
25
+ super(title);
26
+ }
27
+
28
+ protected build(): void {
29
+ this.add.edit().value(this.model.value$).validator(this.model.validator).focus()
30
+ }
28
31
  }
@@ -1,9 +1,9 @@
1
- export enum InputValidator {
2
- float,
3
- int,
4
- regexp,
5
- subpath,
6
- filename,
7
- nodename,
8
- nodelabel
1
+ export enum InputValidator {
2
+ float,
3
+ int,
4
+ regexp,
5
+ subpath,
6
+ filename,
7
+ nodename,
8
+ nodelabel
9
9
  }
@@ -0,0 +1,47 @@
1
+ import { BasicDialog } from './basic-dialog';
2
+ import { Direction } from './shared';
3
+
4
+ export class SelectionDialogModel {
5
+ options: string[] = [];
6
+ selectedOption: string | null = null;
7
+ selectedIndex: number = -1;
8
+ title: string = "Select an Option";
9
+ groupTitle: string = "";
10
+ orientation: Direction = 'horizontal';
11
+ }
12
+
13
+ export class SelectionDialog extends BasicDialog {
14
+ constructor(private readonly model: SelectionDialogModel) {
15
+ super(model.title);
16
+ }
17
+
18
+ protected build(): void {
19
+ this.dialog.showAcceptButton(true);
20
+ this.dialog.showCancelButton(false);
21
+ this.dialog.setAcceptButtonText("Cancel")
22
+
23
+ this.add.group(this.model.groupTitle).orientation(this.model.orientation).build((layout) => {
24
+ layout.spacing = 5;
25
+ this.model.options.forEach(option => {
26
+ this.add.button(option).clicked(() => {
27
+ this.model.selectedOption = option;
28
+ this.model.selectedIndex = this.model.options.indexOf(option);
29
+ this.close();
30
+ });
31
+ });
32
+ })
33
+ }
34
+
35
+ private buildForm(layout: DzLayout): void {
36
+
37
+ }
38
+
39
+ ok(): boolean {
40
+ this.run();
41
+ return this.model.selectedOption !== null;
42
+ }
43
+
44
+ cancel(): boolean {
45
+ return this.ok() === false
46
+ }
47
+ }
@@ -1,8 +1,8 @@
1
-
2
- export type Direction = 'vertical' | 'horizontal';
3
-
4
- export class DialogProperties {
5
- width?: number;
6
- height?: number;
7
- resizable?: boolean;
8
- }
1
+
2
+ export type Direction = 'vertical' | 'horizontal';
3
+
4
+ export class DialogProperties {
5
+ width?: number;
6
+ height?: number;
7
+ resizable?: boolean;
8
+ }