dazscript-framework 0.1.15 → 0.1.17

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 -56
  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 +35 -35
  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 -82
  22. package/src/dialog/builders/label-builder.ts +33 -28
  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 +39 -22
  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 -135
  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 +190 -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 -94
  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 -8
  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,106 +1,120 @@
1
- import { Observable } from '@dsf/lib/observable';
2
- import { Direction } from '../shared';
3
- import LayoutBuilder from './layout-builder';
4
- import { IWidgetBuilder } from './widget-builder';
5
- import { WidgetBuilderContext } from './widgets-builder';
6
-
7
- export class TabBuilder implements IWidgetBuilder<DzTabWidget> {
8
- private direction: Direction = 'vertical';
9
- private titleText: string;
10
- private tabIndex_: Observable<number>;
11
- private currentChanged: (index: number) => void;
12
-
13
- constructor(private layoutBuilder: LayoutBuilder, private context: TabBuilderContext) {
14
- }
15
-
16
- visible(value: boolean | Observable<boolean>): this {
17
- this.context.visible = typeof value === 'boolean'
18
- ? new Observable(value)
19
- : value
20
- return this
21
- }
22
-
23
- static create(context: TabBuilderContext): TabBuilder {
24
- return new TabBuilder(new LayoutBuilder(context.widgetContext), context)
25
- }
26
-
27
- horizontal(): this {
28
- this.direction = 'horizontal'
29
- return this
30
- }
31
-
32
- vertical(): this {
33
- this.direction = 'vertical'
34
- return this
35
- }
36
-
37
- title(text: string): this {
38
- this.titleText = text;
39
- return this;
40
- }
41
-
42
- bind(tabNumber: Observable<number>): this {
43
- this.tabIndex_ = tabNumber;
44
- return this;
45
- }
46
-
47
- onChanged(then: (index: number) => void): this {
48
- this.currentChanged = then
49
- return this
50
- }
51
-
52
- build(then?: (layout: DzVBoxLayout | DzHBoxLayout, tabWidget: DzTabWidget) => void): DzTabWidget {
53
- return this.context.add((tabWidget) => {
54
- let tab = new DzWidget(this.context.widgetContext.dialog)
55
- tabWidget.addTab(tab, this.titleText)
56
- this.context.widgetContext.layout.addWidget(tabWidget)
57
-
58
- this.layoutBuilder
59
- .parent(tab)
60
- .direction(this.direction)
61
- .build((layout) => {
62
- then?.(layout, tabWidget)
63
- })
64
-
65
- if (this.context.visible) {
66
- if (this.context.visible.value === false)
67
- tab.hide()
68
- this.context.visible.connect((visible) => {
69
- if (visible)
70
- tab.show()
71
- else
72
- tab.hide()
73
- })
74
- }
75
-
76
- tabWidget["currentChanged(int)"].scriptConnect((index: number) => {
77
- if (this.tabIndex_) this.tabIndex_.value = index
78
- this.currentChanged?.(index)
79
- })
80
-
81
- tabWidget.setCurrentPage(this.tabIndex_?.value ?? 0)
82
- });
83
- }
84
- }
85
-
86
- export class TabBuilderContext {
87
- private counter = 1;
88
- private widgets: DzTabWidget[] = [];
89
- visible: Observable<boolean>
90
-
91
- constructor(public readonly widgetContext: WidgetBuilderContext) { }
92
-
93
- add(content: (tabWidget: DzTabWidget) => void): DzTabWidget {
94
- this.counter++
95
- let tabWidget = this.getWidget()
96
- content(tabWidget)
97
- this.counter--
98
- return tabWidget
99
- }
100
-
101
- private getWidget(): DzTabWidget {
102
- if (this.widgets.length === 0 || this.counter >= this.widgets.length)
103
- this.widgets[this.counter] = new DzTabWidget(this.widgetContext.dialog);
104
- return this.widgets[this.counter];
105
- }
106
- }
1
+ import { Observable } from '@dsf/lib/observable';
2
+ import { Direction } from '../shared';
3
+ import LayoutBuilder from './layout-builder';
4
+ import { IWidgetBuilder } from './widget-builder';
5
+ import { WidgetBuilderContext } from './widgets-builder';
6
+
7
+ export class TabBuilder implements IWidgetBuilder<DzTabWidget> {
8
+ private direction: Direction = 'vertical';
9
+ private titleText: string;
10
+ private tabIndex_: Observable<number>;
11
+ private currentChanged: (index: number) => void;
12
+ private height_: number | null = null;
13
+ private minHeight_: number | null = null;
14
+
15
+ constructor(private layoutBuilder: LayoutBuilder, private context: TabBuilderContext) {
16
+ }
17
+
18
+ visible(value: boolean | Observable<boolean>): this {
19
+ this.context.visible = typeof value === 'boolean'
20
+ ? new Observable(value)
21
+ : value
22
+ return this
23
+ }
24
+
25
+ height(value: number): this {
26
+ this.height_ = value
27
+ return this
28
+ }
29
+
30
+ minHeight(value: number): this {
31
+ this.minHeight_ = value
32
+ return this
33
+ }
34
+
35
+ static create(context: TabBuilderContext): TabBuilder {
36
+ return new TabBuilder(new LayoutBuilder(context.widgetContext), context)
37
+ }
38
+
39
+ horizontal(): this {
40
+ this.direction = 'horizontal'
41
+ return this
42
+ }
43
+
44
+ vertical(): this {
45
+ this.direction = 'vertical'
46
+ return this
47
+ }
48
+
49
+ title(text: string): this {
50
+ this.titleText = text;
51
+ return this;
52
+ }
53
+
54
+ bind(tabNumber: Observable<number>): this {
55
+ this.tabIndex_ = tabNumber;
56
+ return this;
57
+ }
58
+
59
+ onChanged(then: (index: number) => void): this {
60
+ this.currentChanged = then
61
+ return this
62
+ }
63
+
64
+ build(then?: (layout: DzVBoxLayout | DzHBoxLayout, tabWidget: DzTabWidget) => void): DzTabWidget {
65
+ return this.context.add((tabWidget) => {
66
+ if (this.height_ !== null) tabWidget.height = this.height_
67
+ if (this.minHeight_ !== null) tabWidget.minHeight = this.minHeight_
68
+ let tab = new DzWidget(this.context.widgetContext.dialog)
69
+ tabWidget.addTab(tab, this.titleText)
70
+ this.context.widgetContext.layout.addWidget(tabWidget)
71
+
72
+ this.layoutBuilder
73
+ .parent(tab)
74
+ .direction(this.direction)
75
+ .build((layout) => {
76
+ then?.(layout, tabWidget)
77
+ })
78
+
79
+ if (this.context.visible) {
80
+ if (this.context.visible.value === false)
81
+ tab.hide()
82
+ this.context.visible.connect((visible) => {
83
+ if (visible)
84
+ tab.show()
85
+ else
86
+ tab.hide()
87
+ })
88
+ }
89
+
90
+ tabWidget["currentChanged(int)"].scriptConnect((index: number) => {
91
+ if (this.tabIndex_) this.tabIndex_.value = index
92
+ this.currentChanged?.(index)
93
+ })
94
+
95
+ tabWidget.setCurrentPage(this.tabIndex_?.value ?? 0)
96
+ });
97
+ }
98
+ }
99
+
100
+ export class TabBuilderContext {
101
+ private counter = 1;
102
+ private widgets: DzTabWidget[] = [];
103
+ visible: Observable<boolean>
104
+
105
+ constructor(public readonly widgetContext: WidgetBuilderContext) { }
106
+
107
+ add(content: (tabWidget: DzTabWidget) => void): DzTabWidget {
108
+ this.counter++
109
+ let tabWidget = this.getWidget()
110
+ content(tabWidget)
111
+ this.counter--
112
+ return tabWidget
113
+ }
114
+
115
+ private getWidget(): DzTabWidget {
116
+ if (this.widgets.length === 0 || this.counter >= this.widgets.length)
117
+ this.widgets[this.counter] = new DzTabWidget(this.widgetContext.dialog);
118
+ return this.widgets[this.counter];
119
+ }
120
+ }
@@ -1,124 +1,136 @@
1
- import { createUID } from '@dsf/lib/guid';
2
- import { Observable } from '@dsf/lib/observable';
3
- import { WidgetBuilderContext } from './widgets-builder';
4
-
5
- export abstract class WidgetBuilderBase<T extends DzWidget> implements IWidgetBuilder<T> {
6
- constructor(protected readonly widget: T) { }
7
-
8
- enabled<T>(when: boolean | Observable<T>): this {
9
- if (typeof when === 'boolean') {
10
- this.widget.enabled = when
11
- }
12
- else {
13
- this.widget.enabled = Boolean(when.value)
14
- when.connect((value) => {
15
- this.widget.enabled = Boolean(value)
16
- })
17
- }
18
- return this
19
- }
20
-
21
- focus(): this {
22
- this.widget.getWidget().setFocus()
23
- return this
24
- }
25
-
26
- clickFocus(): this {
27
- this.widget.getWidget().focusPolicy = QtFocusPolicy.ClickFocus
28
- return this
29
- }
30
-
31
- tabFocus(): this {
32
- this.widget.getWidget().focusPolicy = QtFocusPolicy.TabFocus
33
- return this
34
- }
35
-
36
- noFocus(): this {
37
- this.widget.getWidget().focusPolicy = QtFocusPolicy.NoFocus
38
- return this
39
- }
40
-
41
- toolTip(toolTip: string): this {
42
- this.widget.toolTip = toolTip
43
- this.widget.whatsThis = toolTip
44
- return this
45
- }
46
-
47
- whatsThis(whatsThis: string): this {
48
- this.widget.whatsThis = whatsThis
49
- return this
50
- }
51
-
52
- visible(value: boolean | Observable<boolean>): this {
53
- let observable = typeof value === 'boolean'
54
- ? new Observable(value)
55
- : value
56
-
57
- if (observable.value)
58
- this.widget.show()
59
- else
60
- this.widget.hide()
61
- observable.connect((value) => {
62
- if (value)
63
- this.widget.show()
64
- else
65
- this.widget.hide()
66
- })
67
- return this
68
- }
69
-
70
- build(): T {
71
- return this.widget
72
- }
73
- }
74
-
75
- export interface IWidgetBuilder<T extends DzWidget> {
76
- visible(value: boolean | Observable<boolean>): this
77
- build(): T
78
- }
79
-
80
- export class WidgetBuilder {
81
- private _parent: DzWidget | DzLayout;
82
- private _args: any[] | null;
83
-
84
- constructor(public readonly context: WidgetBuilderContext) { }
85
-
86
- parent(parent: DzWidget | DzLayout): this {
87
- this._parent = parent;
88
- return this;
89
- }
90
-
91
- withArgs(widgetArgs: any[]): this {
92
- this._args = widgetArgs;
93
- return this;
94
- }
95
-
96
- build<T extends DzWidget>(type: { new(p0: any, p1?: any, p2?: any, p3?: any): T; }, then?: (widget: T) => void): T {
97
- let parent = this._parent ?? this.context.parent;
98
- let name = createUID();
99
- let widget: T;
100
-
101
- if (parent.inherits("DzLayout")) {
102
- let args = this._args;
103
- if (!args || args.length === 0) widget = new type(this.context.dialog);
104
- else if (args.length === 1) widget = new type(this.context.dialog, args[0]);
105
- else if (args.length === 2) widget = new type(this.context.dialog, args[0], args[1]);
106
- else if (args.length === 3) widget = new type(this.context.dialog, args[0], args[1], args[2]);
107
- else throw Error("DzWidget Arguments out of range");
108
- (<DzLayout>parent).addWidget(widget);
109
- }
110
- else {
111
- widget = new type(parent);
112
- }
113
-
114
- widget.name = name;
115
- then?.(widget);
116
-
117
- return widget;
118
- }
119
- }
120
-
121
- export const createWidget = (context: WidgetBuilderContext): WidgetBuilder => {
122
- return new WidgetBuilder(context)
123
- }
124
-
1
+ import { createUID } from '@dsf/lib/guid';
2
+ import { Observable } from '@dsf/lib/observable';
3
+ import { WidgetBuilderContext } from './widgets-builder';
4
+
5
+ export abstract class WidgetBuilderBase<T extends DzWidget> implements IWidgetBuilder<T> {
6
+ constructor(protected readonly widget: T) { }
7
+
8
+ enabled<T>(when: boolean | Observable<T>): this {
9
+ if (typeof when === 'boolean') {
10
+ this.widget.enabled = when
11
+ }
12
+ else {
13
+ this.widget.enabled = Boolean(when.value)
14
+ when.connect((value) => {
15
+ this.widget.enabled = Boolean(value)
16
+ })
17
+ }
18
+ return this
19
+ }
20
+
21
+ focus(): this {
22
+ this.widget.getWidget().setFocus()
23
+ return this
24
+ }
25
+
26
+ clickFocus(): this {
27
+ this.widget.getWidget().focusPolicy = QtFocusPolicy.ClickFocus
28
+ return this
29
+ }
30
+
31
+ tabFocus(): this {
32
+ this.widget.getWidget().focusPolicy = QtFocusPolicy.TabFocus
33
+ return this
34
+ }
35
+
36
+ noFocus(): this {
37
+ this.widget.getWidget().focusPolicy = QtFocusPolicy.NoFocus
38
+ return this
39
+ }
40
+
41
+ toolTip(toolTip: string): this {
42
+ this.widget.toolTip = toolTip
43
+ this.widget.whatsThis = toolTip
44
+ return this
45
+ }
46
+
47
+ whatsThis(whatsThis: string): this {
48
+ this.widget.whatsThis = whatsThis
49
+ return this
50
+ }
51
+
52
+ visible(value: boolean | Observable<boolean>): this {
53
+ let observable = typeof value === 'boolean'
54
+ ? new Observable(value)
55
+ : value
56
+
57
+ if (observable.value)
58
+ this.widget.show()
59
+ else
60
+ this.widget.hide()
61
+ observable.connect((value) => {
62
+ if (value)
63
+ this.widget.show()
64
+ else
65
+ this.widget.hide()
66
+ })
67
+ return this
68
+ }
69
+
70
+ height(value: number): this {
71
+ this.widget.height = value
72
+ return this
73
+ }
74
+
75
+ minHeight(value: number): this {
76
+ this.widget.minHeight = value
77
+ return this
78
+ }
79
+
80
+ build(): T {
81
+ return this.widget
82
+ }
83
+ }
84
+
85
+ export interface IWidgetBuilder<T extends DzWidget> {
86
+ visible(value: boolean | Observable<boolean>): this
87
+ height(value: number): this
88
+ minHeight(value: number): this
89
+ build(): T
90
+ }
91
+
92
+ export class WidgetBuilder {
93
+ private _parent: DzWidget | DzLayout | null = null;
94
+ private _args: any[] | null = null;
95
+
96
+ constructor(public readonly context: WidgetBuilderContext) { }
97
+
98
+ parent(parent: DzWidget | DzLayout): this {
99
+ this._parent = parent;
100
+ return this;
101
+ }
102
+
103
+ withArgs(widgetArgs: any[]): this {
104
+ this._args = widgetArgs;
105
+ return this;
106
+ }
107
+
108
+ build<T extends DzWidget>(type: { new(p0: any, p1?: any, p2?: any, p3?: any): T; }, then?: (widget: T) => void): T {
109
+ let parent = this._parent ?? this.context.parent;
110
+ let name = createUID();
111
+ let widget: T;
112
+
113
+ if (parent.inherits("DzLayout")) {
114
+ let args = this._args;
115
+ if (!args || args.length === 0) widget = new type(this.context.dialog);
116
+ else if (args.length === 1) widget = new type(this.context.dialog, args[0]);
117
+ else if (args.length === 2) widget = new type(this.context.dialog, args[0], args[1]);
118
+ else if (args.length === 3) widget = new type(this.context.dialog, args[0], args[1], args[2]);
119
+ else throw Error("DzWidget Arguments out of range");
120
+ (<DzLayout>parent).addWidget(widget);
121
+ }
122
+ else {
123
+ widget = new type(parent);
124
+ }
125
+
126
+ widget.name = name;
127
+ then?.(widget);
128
+
129
+ return widget;
130
+ }
131
+ }
132
+
133
+ export const createWidget = (context: WidgetBuilderContext): WidgetBuilder => {
134
+ return new WidgetBuilder(context)
135
+ }
136
+