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
@@ -0,0 +1,103 @@
1
+ import { Dictionary } from '@dsf/lib/dictionary';
2
+ import { Observable } from '@dsf/lib/observable';
3
+ import { createWidget, WidgetBuilderBase } from './widget-builder';
4
+ import { WidgetBuilderContext } from './widgets-builder';
5
+
6
+ export class ListBoxBuilder extends WidgetBuilderBase<DzListBox> {
7
+ private _items: Dictionary<number, string> | null = null
8
+ private _mode: 'single' | 'multi' | 'extended' = 'single'
9
+
10
+ constructor(context: WidgetBuilderContext) {
11
+ super(createWidget(context).build(DzListBox))
12
+ }
13
+
14
+ items(items$: string[] | Observable<string[]>): this {
15
+ this.widget.clear()
16
+ if (items$ instanceof Observable) {
17
+ this._items = {}
18
+ items$.value.forEach((item, idx) => {
19
+ this._items[idx] = item
20
+ })
21
+
22
+ const setItems = (items: string[]) => {
23
+ this.widget.clear()
24
+ items.forEach((item, idx) => {
25
+ this.widget.insertItem(item)
26
+ })
27
+ }
28
+
29
+ setItems(items$.value)
30
+ items$.connect(value => {
31
+ this.widget.clear()
32
+ setItems(value)
33
+ })
34
+ }
35
+ else {
36
+ this._items = {}
37
+ items$.forEach((item, idx) => {
38
+ this._items[idx] = item
39
+ this.widget.insertItem(item)
40
+ })
41
+ }
42
+
43
+ return this
44
+ }
45
+
46
+ mode(mode: 'single' | 'multi' | 'extended'): this {
47
+ this._mode = mode
48
+ switch (mode) {
49
+ case 'single':
50
+ this.widget.selectionMode = DzListBox.Single
51
+ break
52
+ case 'multi':
53
+ this.widget.selectionMode = DzListBox.Multi
54
+ break
55
+ case 'extended':
56
+ this.widget.selectionMode = DzListBox.Extended
57
+ break
58
+ }
59
+ return this
60
+ }
61
+
62
+ selected(selected$: Observable<string[]>): this {
63
+ const setSelected = (selected: string[] | null) => {
64
+ this.widget.clearSelection()
65
+ if (selected$.value?.length > 0 && this._items) {
66
+ selected.forEach(sel => {
67
+ const idx = Object.keys(this._items)
68
+ .map(key => this._items[Number(key)])
69
+ .indexOf(sel)
70
+ if (idx >= 0) {
71
+ this.widget.setSelected(idx, true)
72
+ }
73
+ })
74
+ }
75
+ }
76
+
77
+ this.widget.currentChanged.scriptConnect((idx) => {
78
+ if (!selected$ || !this._items) return
79
+ if (this._mode === 'single') {
80
+ const item = this._items[idx]
81
+ selected$.value = item ? [item] : []
82
+ }
83
+ else {
84
+ selected$.value = Object.keys(this._items)
85
+ .map(key => this.widget.isSelected(Number(key)) ? this._items[Number(key)] : null)
86
+ .filter((item): item is string => item !== null)
87
+ }
88
+ })
89
+
90
+ if (selected$.value?.length === 0) {
91
+ return this
92
+ }
93
+
94
+ setSelected(selected$.value)
95
+
96
+ return this
97
+ }
98
+
99
+ build(then?: (listBox: DzListBox) => void) {
100
+ then?.(this.widget)
101
+ return this.widget
102
+ }
103
+ }