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.
- package/README.md +365 -93
- package/babel.config.js +33 -33
- package/dist/babel/trace-babel-plugin.js +243 -243
- package/dist/babel/trace-log-babel-plugin.js +164 -164
- package/dist/scripts/install-generator.js +185 -185
- package/package.json +72 -70
- package/src/common/dz-dump.ts +120 -120
- package/src/common/log.ts +56 -57
- package/src/common/trace.ts +26 -26
- package/src/core/action-decorator.ts +15 -15
- package/src/core/base-script.ts +30 -30
- package/src/core/custom-action.ts +11 -11
- package/src/core/global.ts +4 -4
- package/src/dialog/basic-dialog.ts +40 -32
- package/src/dialog/builders/button-builder.ts +52 -52
- package/src/dialog/builders/checkbox-builder.ts +29 -29
- package/src/dialog/builders/color-picker-builder.ts +36 -0
- package/src/dialog/builders/combo-box-builder.ts +38 -35
- package/src/dialog/builders/combo-edit-builder.ts +35 -35
- package/src/dialog/builders/dialog-builder.ts +49 -49
- package/src/dialog/builders/groupbox-builder.ts +121 -73
- package/src/dialog/builders/label-builder.ts +33 -29
- package/src/dialog/builders/layout-builder.ts +59 -59
- package/src/dialog/builders/line-edit-builder.ts +124 -119
- package/src/dialog/builders/list-box-builder.ts +103 -0
- package/src/dialog/builders/list-view-builder.ts +396 -328
- package/src/dialog/builders/node-selection-builder.ts +55 -55
- package/src/dialog/builders/path-combo-box-builder.ts +24 -24
- package/src/dialog/builders/popup-menu-builder.ts +46 -46
- package/src/dialog/builders/radio-builder.ts +42 -42
- package/src/dialog/builders/slider-builder.ts +40 -0
- package/src/dialog/builders/splitter-builder.ts +88 -88
- package/src/dialog/builders/tab-builder.ts +120 -106
- package/src/dialog/builders/widget-builder.ts +136 -124
- package/src/dialog/builders/widgets-builder.ts +140 -125
- package/src/dialog/input-dialog.ts +30 -27
- package/src/dialog/input-validator.ts +8 -8
- package/src/dialog/selection-dialog.ts +47 -0
- package/src/dialog/shared.ts +8 -8
- package/src/helpers/action-helper.ts +214 -81
- package/src/helpers/array-helper.ts +170 -145
- package/src/helpers/camera-helper.ts +12 -12
- package/src/helpers/custom-action-helper.ts +176 -176
- package/src/helpers/directory-helper.ts +14 -0
- package/src/helpers/file-helper.ts +90 -90
- package/src/helpers/http-helper.ts +186 -0
- package/src/helpers/input-helper.ts +18 -18
- package/src/helpers/list-view-helper.ts +105 -89
- package/src/helpers/menu-helper.ts +28 -28
- package/src/helpers/message-box-helper.ts +25 -15
- package/src/helpers/node-helper.ts +461 -236
- package/src/helpers/number-helper.ts +10 -10
- package/src/helpers/numeric-property-helper.ts +91 -91
- package/src/helpers/object-helper.ts +2 -2
- package/src/helpers/pane-helper.ts +28 -20
- package/src/helpers/progress-helper.ts +51 -33
- package/src/helpers/property-helper.ts +61 -52
- package/src/helpers/record-helper.ts +16 -16
- package/src/helpers/scene-helper.ts +144 -95
- package/src/helpers/script-helper.ts +15 -15
- package/src/helpers/skeleton-helper.ts +26 -26
- package/src/helpers/splitter-helper.ts +8 -8
- package/src/helpers/string-helper.ts +39 -31
- package/src/helpers/surface-helper.ts +5 -5
- package/src/helpers/undo-helper.ts +8 -7
- package/src/helpers/viewport-helper.ts +21 -8
- package/src/lib/delayed.ts +38 -38
- package/src/lib/dictionary.ts +3 -0
- package/src/lib/frame-keys.ts +67 -67
- package/src/lib/guid.ts +2 -2
- package/src/lib/menu-item.ts +10 -9
- package/src/lib/observable.ts +147 -94
- package/src/lib/set.ts +50 -25
- package/src/lib/settings.ts +112 -104
- package/src/lib/tree-node.ts +149 -145
- package/src/samples/config.ts +2 -2
- package/src/samples/hello-world.dsa.ts +12 -12
- package/src/samples/sample-dialog.dsa.ts +51 -51
- package/src/samples/sample-dialog.ts +48 -48
- package/src/shared/set-keyboard-shortcut.ts +146 -102
- package/tsconfig.json +116 -116
- 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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
private
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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 =
|
|
28
|
-
return this
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
tabFocus(): this {
|
|
32
|
-
this.widget.getWidget().focusPolicy =
|
|
33
|
-
return this
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
noFocus(): this {
|
|
37
|
-
this.widget.getWidget().focusPolicy =
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
+
|