@flexem/fc-gui 3.0.0-alpha.11 → 3.0.0-alpha.111
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/CHANGELOG.md +445 -0
- package/assets/img/black_first_page.png +0 -0
- package/assets/img/black_last_page.png +0 -0
- package/assets/img/black_next_page.png +0 -0
- package/assets/img/black_previous_page.png +0 -0
- package/bundles/@flexem/fc-gui.umd.js +19414 -17248
- package/bundles/@flexem/fc-gui.umd.js.map +1 -1
- package/bundles/@flexem/fc-gui.umd.min.js +5 -5
- package/bundles/@flexem/fc-gui.umd.min.js.map +1 -1
- package/communication/variable/variable-communicator.d.ts +1 -0
- package/config/alarm/alarm.store.d.ts +6 -0
- package/config/alarm/alarm.store.js +0 -0
- package/config/alarm/alarm.store.metadata.json +1 -0
- package/config/alarm/get-alarms-args.d.ts +9 -0
- package/config/alarm/get-alarms-args.js +9 -0
- package/config/alarm/get-alarms-args.metadata.json +1 -0
- package/config/alarm/index.d.ts +2 -0
- package/config/alarm/index.js +1 -0
- package/config/alarm/index.metadata.json +1 -0
- package/config/config-store.d.ts +2 -0
- package/config/index.d.ts +1 -0
- package/config/index.js +1 -0
- package/config/index.metadata.json +1 -1
- package/elements/air-quality/air-quality-element.d.ts +31 -0
- package/elements/air-quality/air-quality-element.js +194 -0
- package/elements/air-quality/air-quality-element.metadata.json +1 -0
- package/elements/alarm/alarm-element.d.ts +44 -0
- package/elements/alarm/alarm-element.js +386 -0
- package/elements/alarm/alarm-element.metadata.json +1 -0
- package/elements/bar-graph-element.d.ts +10 -2
- package/elements/bar-graph-element.js +135 -5
- package/elements/bar-graph-element.metadata.json +1 -1
- package/elements/base/readable-element.d.ts +6 -1
- package/elements/base/readable-element.js +31 -2
- package/elements/base/readable-element.metadata.json +1 -1
- package/elements/datetime-display/datetime-display-element.d.ts +1 -0
- package/elements/datetime-display/datetime-display-element.js +10 -2
- package/elements/datetime-display/datetime-display-element.metadata.json +1 -1
- package/elements/datetime-display/time-zone-select-json.d.ts +8 -0
- package/elements/datetime-display/time-zone-select-json.js +558 -0
- package/elements/historical-curve/historical-curve.element.d.ts +8 -0
- package/elements/historical-curve/historical-curve.element.js +224 -19
- package/elements/historical-curve/historical-curve.element.metadata.json +1 -1
- package/elements/main-element.js +25 -4
- package/elements/main-element.metadata.json +1 -1
- package/elements/meter-element.d.ts +7 -1
- package/elements/meter-element.js +76 -7
- package/elements/meter-element.metadata.json +1 -1
- package/elements/numerical-display/numerical-display-element.d.ts +8 -2
- package/elements/numerical-display/numerical-display-element.js +55 -11
- package/elements/numerical-display/numerical-display-element.metadata.json +1 -1
- package/elements/per-view-variable-communicator.d.ts +2 -0
- package/elements/per-view-variable-communicator.js +8 -0
- package/elements/per-view-variable-communicator.metadata.json +1 -1
- package/elements/ring-graph/ring-graph-element.d.ts +13 -1
- package/elements/ring-graph/ring-graph-element.js +164 -3
- package/elements/ring-graph/ring-graph-element.metadata.json +1 -1
- package/elements/shared/graph/graph-state-element.js +0 -3
- package/elements/shared/text/text-element.js +13 -2
- package/elements/shared/text/text-state-element.js +1 -1
- package/elements/switch-indicator-light/bit-switch-operator.d.ts +1 -0
- package/elements/switch-indicator-light/bit-switch-operator.js +19 -0
- package/elements/switch-indicator-light/bit-switch-operator.metadata.json +1 -1
- package/elements/switch-indicator-light/switch-indicator-light-element.d.ts +8 -0
- package/elements/switch-indicator-light/switch-indicator-light-element.js +93 -23
- package/elements/switch-indicator-light/switch-indicator-light-element.metadata.json +1 -1
- package/elements/switch-indicator-light/switch-operator.d.ts +1 -0
- package/elements/switch-indicator-light/word-switch-operator.d.ts +1 -0
- package/elements/switch-indicator-light/word-switch-operator.js +6 -0
- package/elements/switch-indicator-light/word-switch-operator.metadata.json +1 -1
- package/elements/video/video-element.d.ts +4 -0
- package/elements/video/video-element.js +74 -20
- package/elements/video/video-element.metadata.json +1 -1
- package/elements/view-operation/view-operation.element.js +8 -0
- package/elements/weather/weater-element.js +0 -1
- package/gui/gui-context.d.ts +2 -1
- package/gui/gui-host.d.ts +1 -1
- package/gui/gui.component.d.ts +3 -0
- package/gui/gui.component.js +15 -2
- package/gui/gui.component.metadata.json +1 -1
- package/localization/localization.service.d.ts +7 -0
- package/localization/localization.service.js +10 -3
- package/localization/localization.service.metadata.json +1 -1
- package/localization/localization.service.zh_CN.js +8 -1
- package/localization/localization.service.zh_CN.metadata.json +1 -1
- package/modal/write-value/write-value-modal-args.d.ts +3 -1
- package/modal/write-value/write-value-modal-args.js +2 -1
- package/modal/write-value/write-value-modal-args.metadata.json +1 -1
- package/modal/write-value/write-value-modal.component.d.ts +8 -7
- package/modal/write-value/write-value-modal.component.html +9 -4
- package/modal/write-value/write-value-modal.component.js +42 -15
- package/modal/write-value/write-value-modal.component.metadata.json +1 -1
- package/model/air-quality/air-quality-info.d.ts +23 -0
- package/model/air-quality/air-quality-info.js +4 -0
- package/model/air-quality/air-quality-info.metadata.json +1 -0
- package/model/air-quality/air-quality.model.d.ts +7 -0
- package/model/air-quality/air-quality.model.js +0 -0
- package/model/air-quality/air-quality.model.metadata.json +1 -0
- package/model/alarm/alarm.model.d.ts +13 -0
- package/model/alarm/alarm.model.js +0 -0
- package/model/alarm/alarm.model.metadata.json +1 -0
- package/model/bar-graph/bar-graph.d.ts +4 -0
- package/model/base/readable-model.d.ts +4 -0
- package/model/datetime-display/datetime-display.d.ts +1 -0
- package/model/historical-curve/historical-curve-axis-settings.d.ts +11 -0
- package/model/historical-curve/historical-curve-axis-settings.js +5 -0
- package/model/historical-curve/historical-curve-axis-settings.metadata.json +1 -1
- package/model/historical-curve/historical-curve-chanel.model.d.ts +8 -0
- package/model/meter/meter.d.ts +4 -0
- package/model/ring-graph/ring-graph.model.d.ts +8 -0
- package/model/switch-indicator-light/bit-switch-operation.d.ts +2 -1
- package/model/switch-indicator-light/bit-switch-operation.js +1 -0
- package/model/switch-indicator-light/bit-switch-operation.metadata.json +1 -1
- package/package.json +1 -1
- package/remote/communication/variable/remote-variable-communicator.d.ts +4 -0
- package/remote/communication/variable/remote-variable-communicator.js +23 -1
- package/remote/communication/variable/remote-variable-communicator.metadata.json +1 -1
- package/remote/communication/variable/remote-variable-protocol.d.ts +3 -0
- package/service/index.d.ts +1 -0
- package/service/index.metadata.json +1 -1
- package/service/released-variable/index.d.ts +1 -0
- package/service/released-variable/index.js +0 -0
- package/service/released-variable/index.metadata.json +1 -0
- package/service/released-variable/released-variable.service.d.ts +4 -0
- package/service/released-variable/released-variable.service.js +0 -0
- package/service/released-variable/released-variable.service.metadata.json +1 -0
- package/service/weather.service.d.ts +1 -0
- package/shared/gui-consts.d.ts +2 -0
- package/shared/gui-consts.js +2 -0
- package/shared/gui-consts.metadata.json +1 -1
- package/utils/data-type/fbox-data-type.service.js +40 -0
|
@@ -3,7 +3,7 @@ import { BsModalService } from 'ngx-bootstrap/modal';
|
|
|
3
3
|
import { GraphStore, VariableStore } from '../../config';
|
|
4
4
|
import { Localization } from '../../localization';
|
|
5
5
|
import { NumericalDisplay } from '../../model';
|
|
6
|
-
import { PermissionChecker, OperationRecordService } from '../../service';
|
|
6
|
+
import { PermissionChecker, OperationRecordService, ReleasedVariableService } from '../../service';
|
|
7
7
|
import { VariableCommunicator } from '../../communication';
|
|
8
8
|
import { ReadableElement } from '../base/readable-element';
|
|
9
9
|
import { SecurityChecker } from '../../security';
|
|
@@ -11,6 +11,7 @@ export declare class NumericalDisplayElement extends ReadableElement {
|
|
|
11
11
|
private readonly modalService;
|
|
12
12
|
private readonly graphStore;
|
|
13
13
|
private readonly operationRecordService;
|
|
14
|
+
private readonly releasedVariableService;
|
|
14
15
|
private readonly securityChecker;
|
|
15
16
|
private readonly dataTypeService;
|
|
16
17
|
private readonly fractionDigitService;
|
|
@@ -21,8 +22,13 @@ export declare class NumericalDisplayElement extends ReadableElement {
|
|
|
21
22
|
private readonly logger;
|
|
22
23
|
private displayForeignObject;
|
|
23
24
|
private enableDataParsed;
|
|
25
|
+
private writeValueMmodalRef;
|
|
26
|
+
private recordValue;
|
|
27
|
+
private showValue;
|
|
28
|
+
private numericalOperation;
|
|
29
|
+
private restorationTimer;
|
|
24
30
|
get writeVariableName(): string;
|
|
25
|
-
constructor(element: HTMLElement, injector: Injector, modalService: BsModalService, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, graphStore: GraphStore, operationRecordService: OperationRecordService, securityChecker: SecurityChecker, variableStore: VariableStore, localization: Localization, signalRAppId: string);
|
|
31
|
+
constructor(element: HTMLElement, injector: Injector, modalService: BsModalService, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, graphStore: GraphStore, operationRecordService: OperationRecordService, releasedVariableService: ReleasedVariableService, securityChecker: SecurityChecker, variableStore: VariableStore, localization: Localization, signalRAppId: string);
|
|
26
32
|
dispose(): void;
|
|
27
33
|
initElement(): any;
|
|
28
34
|
private checkElementPassword;
|
|
@@ -11,12 +11,19 @@ import { ConfirmOperationModalComponent } from '../../modal/confirm-operation/co
|
|
|
11
11
|
import { VerifyPasswordModalComponent } from '../../modal/verify-password/verify-password-modal.component';
|
|
12
12
|
import { isNil } from 'lodash';
|
|
13
13
|
import { FCloudDataType } from '../../model/shared/data-type/fcloud-data-Type';
|
|
14
|
+
var variableRwTypeEnum;
|
|
15
|
+
(function (variableRwTypeEnum) {
|
|
16
|
+
variableRwTypeEnum[variableRwTypeEnum["read"] = 4] = "read";
|
|
17
|
+
variableRwTypeEnum[variableRwTypeEnum["witer"] = 2] = "witer";
|
|
18
|
+
variableRwTypeEnum[variableRwTypeEnum["readWiter"] = 6] = "readWiter";
|
|
19
|
+
})(variableRwTypeEnum || (variableRwTypeEnum = {}));
|
|
14
20
|
export class NumericalDisplayElement extends ReadableElement {
|
|
15
|
-
constructor(element, injector, modalService, permissionChecker, variableCommunicator, graphStore, operationRecordService, securityChecker, variableStore, localization, signalRAppId) {
|
|
21
|
+
constructor(element, injector, modalService, permissionChecker, variableCommunicator, graphStore, operationRecordService, releasedVariableService, securityChecker, variableStore, localization, signalRAppId) {
|
|
16
22
|
super(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId);
|
|
17
23
|
this.modalService = modalService;
|
|
18
24
|
this.graphStore = graphStore;
|
|
19
25
|
this.operationRecordService = operationRecordService;
|
|
26
|
+
this.releasedVariableService = releasedVariableService;
|
|
20
27
|
this.securityChecker = securityChecker;
|
|
21
28
|
this.displayText = '';
|
|
22
29
|
this.enableDataParsed = false;
|
|
@@ -173,19 +180,42 @@ export class NumericalDisplayElement extends ReadableElement {
|
|
|
173
180
|
if (null == this.writeVariableName) {
|
|
174
181
|
return;
|
|
175
182
|
}
|
|
176
|
-
const args = new WriteValueModalArgs(this.writeVariableName, this.model.dataType, this.model.fBoxDataType, this.model.integerDigits, this.model.fractionDigits, this.numericalOperationService.getNumericalOperations(this.model), this.model.version, this.enableDataParsed);
|
|
177
|
-
|
|
183
|
+
const args = new WriteValueModalArgs(this.writeVariableName, this.model.dataType, this.model.fBoxDataType, this.model.integerDigits, this.model.fractionDigits, this.numericalOperationService.getNumericalOperations(this.model), this.model.version, this.enableDataParsed, this.releasedVariableService);
|
|
184
|
+
this.writeValueMmodalRef = this.modalService.show(WriteValueModalComponent, {
|
|
178
185
|
initialState: { args: args }, backdrop: 'static', class: 'gui-modal-dialog-position', animated: false
|
|
179
186
|
});
|
|
180
|
-
|
|
181
|
-
modalRef.hide();
|
|
182
|
-
onClosedSub.unsubscribe();
|
|
187
|
+
this.writeValueMmodalRef.content.onClosed = (result) => {
|
|
183
188
|
if (result) {
|
|
189
|
+
if (this.restorationTimer) {
|
|
190
|
+
clearTimeout(this.restorationTimer);
|
|
191
|
+
this.restorationTimer = undefined;
|
|
192
|
+
}
|
|
193
|
+
this.recordValue = result.value;
|
|
184
194
|
const writeValue = this.dataTypeService.formatToDecimal(this.model.version, result.value, this.model.dataType);
|
|
185
|
-
this.
|
|
186
|
-
this.
|
|
195
|
+
this.showValue = result.showValue;
|
|
196
|
+
if (this.displayText !== this.showValue || result.variableRwType === variableRwTypeEnum.witer) {
|
|
197
|
+
if (this.numericalOperation || result.enableNumericalOperation || result.isNumericalOperation || result.variableRwType === variableRwTypeEnum.witer) {
|
|
198
|
+
this.recordOperation(result.value);
|
|
199
|
+
this.writeValueMmodalRef.hide();
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
this.restorationTimer = setTimeout(() => {
|
|
203
|
+
const isEquation = this.model.fractionDigits ?
|
|
204
|
+
parseFloat(this.displayText) === parseFloat(this.showValue) :
|
|
205
|
+
parseInt(this.displayText, 16) === parseInt(this.showValue, 16);
|
|
206
|
+
if (!isEquation) {
|
|
207
|
+
this.writeValueMmodalRef.content.isSubmitting = false;
|
|
208
|
+
this.writeValueMmodalRef.content.showValidationErrorInfo(this.localization.writeValueTimeout);
|
|
209
|
+
}
|
|
210
|
+
}, 30000);
|
|
211
|
+
}
|
|
212
|
+
this.variableCommunicator.write(this.writeVariableName, writeValue).subscribe();
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.writeValueMmodalRef.hide();
|
|
216
|
+
}
|
|
187
217
|
}
|
|
188
|
-
}
|
|
218
|
+
};
|
|
189
219
|
}
|
|
190
220
|
recordOperation(newValue) {
|
|
191
221
|
if (this.model.isRecordOperation || this.model.isRecordOperation === undefined) {
|
|
@@ -211,7 +241,21 @@ export class NumericalDisplayElement extends ReadableElement {
|
|
|
211
241
|
}
|
|
212
242
|
}
|
|
213
243
|
updateVariableValue(value) {
|
|
214
|
-
|
|
244
|
+
var _a;
|
|
245
|
+
const displayText = this.formatNumericalDisplayText(this.model.dataType, this.model.fractionDigits, value);
|
|
246
|
+
const isEquation = this.model.fractionDigits ?
|
|
247
|
+
parseFloat(displayText) === parseFloat(this.showValue) :
|
|
248
|
+
parseInt(displayText, 16) === parseInt(this.showValue, 16);
|
|
249
|
+
if (((_a = this.writeValueMmodalRef) === null || _a === void 0 ? void 0 : _a.content) && isEquation) {
|
|
250
|
+
if (this.restorationTimer) {
|
|
251
|
+
clearTimeout(this.restorationTimer);
|
|
252
|
+
this.restorationTimer = undefined;
|
|
253
|
+
this.recordOperation(this.recordValue);
|
|
254
|
+
}
|
|
255
|
+
this.writeValueMmodalRef.hide();
|
|
256
|
+
this.writeValueMmodalRef.content.hideValidationErrorInfo();
|
|
257
|
+
}
|
|
258
|
+
this.displayText = displayText;
|
|
215
259
|
this.updateDisplayText(this.formatDisplayTextUnit(this.displayText));
|
|
216
260
|
}
|
|
217
261
|
updateDisplayText(text) {
|
|
@@ -354,7 +398,7 @@ export class NumericalDisplayElement extends ReadableElement {
|
|
|
354
398
|
}
|
|
355
399
|
formatDisplayTextUnit(displayText) {
|
|
356
400
|
if (this.model.showUnit !== false && this.model.unit) {
|
|
357
|
-
return `${displayText} ${this.model.unit}`;
|
|
401
|
+
return `${displayText || 0} ${this.model.unit}`;
|
|
358
402
|
}
|
|
359
403
|
return displayText;
|
|
360
404
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"NumericalDisplayElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"NumericalDisplayElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":28,"character":45},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":50,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":51,"character":18},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":52,"character":39},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":53,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":54,"character":30},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":55,"character":37},{"__symbolic":"reference","module":"../../service","name":"OperationRecordService","line":56,"character":49},{"__symbolic":"reference","module":"../../service","name":"ReleasedVariableService","line":57,"character":50},{"__symbolic":"reference","module":"../../security","name":"SecurityChecker","line":58,"character":42},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":59,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":60,"character":22},{"__symbolic":"reference","name":"string"}]}],"dispose":[{"__symbolic":"method"}],"initElement":[{"__symbolic":"method"}],"checkElementPassword":[{"__symbolic":"method"}],"initVariableText":[{"__symbolic":"method"}],"initGraphAndText":[{"__symbolic":"method"}],"doWriteValue":[{"__symbolic":"method"}],"recordOperation":[{"__symbolic":"method"}],"changeStates":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}],"updateDisplayText":[{"__symbolic":"method"}],"rebuildTextElement":[{"__symbolic":"method"}],"formatNumericalDisplayText":[{"__symbolic":"method"}],"formatFloatDisplayText":[{"__symbolic":"method"}],"isNumeric":[{"__symbolic":"method"}],"formatDisplayTextUnit":[{"__symbolic":"method"}]}}}}]
|
|
@@ -6,6 +6,7 @@ export declare class PerViewVariableCommunicator implements VariableCommunicator
|
|
|
6
6
|
private observers;
|
|
7
7
|
private variableValuesChangedSubscriptions;
|
|
8
8
|
private variableStatesChangedSubscription;
|
|
9
|
+
private alarmSubscription;
|
|
9
10
|
constructor(variableCommunicator: VariableCommunicator);
|
|
10
11
|
openVariable(variableName: string, appId: string): Observable<VariableValue>;
|
|
11
12
|
openVariables(variableNames: Array<string>, appId?: string): Observable<Array<VariableValue>>;
|
|
@@ -13,5 +14,6 @@ export declare class PerViewVariableCommunicator implements VariableCommunicator
|
|
|
13
14
|
writeWordByBit(variableName: string, index: number, value: number): Observable<VariableValue>;
|
|
14
15
|
subscribeVariableState(variableName: string): Observable<VariableState>;
|
|
15
16
|
subscribeVariableStates(variableNames: string[]): Observable<Array<VariableState>>;
|
|
17
|
+
subscribeUserDeviceAlarms(appId?: string): Observable<VariableState[]>;
|
|
16
18
|
dispose(): void;
|
|
17
19
|
}
|
|
@@ -6,6 +6,7 @@ export class PerViewVariableCommunicator {
|
|
|
6
6
|
this.observers = new Map();
|
|
7
7
|
this.variableValuesChangedSubscriptions = new Array();
|
|
8
8
|
this.variableStatesChangedSubscription = new Array();
|
|
9
|
+
this.alarmSubscription = new Array();
|
|
9
10
|
this._rawVariableCommunicator = variableCommunicator;
|
|
10
11
|
}
|
|
11
12
|
openVariable(variableName, appId) {
|
|
@@ -38,8 +39,15 @@ export class PerViewVariableCommunicator {
|
|
|
38
39
|
this.variableStatesChangedSubscription.push(subscription);
|
|
39
40
|
});
|
|
40
41
|
}
|
|
42
|
+
subscribeUserDeviceAlarms(appId = '') {
|
|
43
|
+
return new Observable(subscriber => {
|
|
44
|
+
const subscription = this._rawVariableCommunicator.subscribeUserDeviceAlarms(appId).subscribe(values => subscriber.next(values), error => subscriber.error(error), () => subscriber.complete());
|
|
45
|
+
this.alarmSubscription.push(subscription);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
41
48
|
dispose() {
|
|
42
49
|
forEach(this.variableValuesChangedSubscriptions, s => s.unsubscribe());
|
|
43
50
|
forEach(this.variableStatesChangedSubscription, s => s.unsubscribe());
|
|
51
|
+
forEach(this.alarmSubscription, s => s.unsubscribe());
|
|
44
52
|
}
|
|
45
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"PerViewVariableCommunicator":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"PerViewVariableCommunicator":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":15,"character":38}]}],"openVariable":[{"__symbolic":"method"}],"openVariables":[{"__symbolic":"method"}],"write":[{"__symbolic":"method"}],"writeWordByBit":[{"__symbolic":"method"}],"subscribeVariableState":[{"__symbolic":"method"}],"subscribeVariableStates":[{"__symbolic":"method"}],"subscribeUserDeviceAlarms":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}]}}}}]
|
|
@@ -5,13 +5,25 @@ import { ReadableElement } from '../base/readable-element';
|
|
|
5
5
|
import { VariableStore } from '../../config';
|
|
6
6
|
import { PermissionChecker } from '../../service';
|
|
7
7
|
export declare class RingGraphElement extends ReadableElement {
|
|
8
|
+
private static DEFAULT_MIN_VALUE;
|
|
9
|
+
private static DEFAULT_MAX_VALUE;
|
|
8
10
|
protected readonly model: RingGraphModel;
|
|
9
11
|
private _barElement$;
|
|
10
12
|
private _textElement$;
|
|
13
|
+
private valueObj;
|
|
14
|
+
private isNeedUpdateScale;
|
|
15
|
+
private initTransform;
|
|
16
|
+
private needAddNumber;
|
|
11
17
|
get readVariableName(): string;
|
|
18
|
+
get minVariableName(): string;
|
|
19
|
+
get maxVariableName(): string;
|
|
12
20
|
constructor(element: HTMLElement, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, localization: Localization, signalRAppId: string);
|
|
21
|
+
private initTransformFun;
|
|
13
22
|
private initFrameNode;
|
|
14
|
-
|
|
23
|
+
init(variableName: string): void;
|
|
24
|
+
private updateValueObj;
|
|
25
|
+
private updateScale;
|
|
26
|
+
protected updateVariableValue(value: number, variableName: any): void;
|
|
15
27
|
private updateBar;
|
|
16
28
|
private getBarColor;
|
|
17
29
|
private drawClockWiseArc;
|
|
@@ -4,31 +4,190 @@ import { RotationDirectionType } from '../../model/shared/rotation/rotation-dire
|
|
|
4
4
|
import { calculatePercent, degreesToRadians } from '../shared/math-utils';
|
|
5
5
|
import { VariableUtil } from '../../utils/variable-util';
|
|
6
6
|
import { VariableDefinition } from '../../communication/variable/variable-definition';
|
|
7
|
+
import { forEach } from 'lodash';
|
|
8
|
+
import { VariableState } from '../../communication';
|
|
9
|
+
import { VariableValueType } from '../../model/shared/condition/variable-value-type';
|
|
7
10
|
export class RingGraphElement extends ReadableElement {
|
|
8
11
|
constructor(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId) {
|
|
9
12
|
super(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId);
|
|
13
|
+
this.valueObj = {};
|
|
14
|
+
this.isNeedUpdateScale = false;
|
|
15
|
+
this.initTransform = false;
|
|
16
|
+
this.needAddNumber = 0;
|
|
17
|
+
if ((this.model.minValueType === VariableValueType.Constant && this.model.maxValueType === VariableValueType.Variable)
|
|
18
|
+
|| this.model.maxValueType === VariableValueType.Constant && this.model.minValueType === VariableValueType.Variable) {
|
|
19
|
+
this.isNeedUpdateScale = true;
|
|
20
|
+
this.updateScale();
|
|
21
|
+
this.isNeedUpdateScale = false;
|
|
22
|
+
}
|
|
10
23
|
const el$ = $(element);
|
|
11
24
|
this._barElement$ = el$.find('path[data-id="barArc"]');
|
|
12
25
|
this._textElement$ = el$.find('text[data-id="pText"]');
|
|
13
26
|
setTimeout(() => {
|
|
14
27
|
this.initFrameNode();
|
|
15
28
|
this.changeStates();
|
|
16
|
-
}
|
|
29
|
+
});
|
|
17
30
|
}
|
|
18
31
|
get readVariableName() {
|
|
19
32
|
if (!this.model.variableId) {
|
|
20
33
|
return '';
|
|
21
34
|
}
|
|
35
|
+
if (!this.model.variableId.variableName || !this.model.variableId.variableName.name) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
22
38
|
const variable = new VariableDefinition(this.model.variableId.variableName.name, this.model.variableId.variableName.groupName, this.model.variableId.dataSourceCode, this.model.variableId.variableName.variableVersion);
|
|
23
39
|
return VariableUtil.getConvertedVariableName(this.variableStore, variable);
|
|
24
40
|
}
|
|
41
|
+
get minVariableName() {
|
|
42
|
+
if (!this.model.minValueType) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
if (!this.model.minVariable || !this.model.minVariable.name) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const variable = new VariableDefinition(this.model.minVariable.name, this.model.minVariable.groupName, this.model.minVariable.dataSourceCode, this.model.minVariable.variableVersion);
|
|
49
|
+
return VariableUtil.getConvertedVariableName(this.variableStore, variable);
|
|
50
|
+
}
|
|
51
|
+
get maxVariableName() {
|
|
52
|
+
if (!this.model.maxValueType) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
if (!this.model.maxVariable || !this.model.maxVariable.name) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const variable = new VariableDefinition(this.model.maxVariable.name, this.model.maxVariable.groupName, this.model.maxVariable.dataSourceCode, this.model.maxVariable.variableVersion);
|
|
59
|
+
return VariableUtil.getConvertedVariableName(this.variableStore, variable);
|
|
60
|
+
}
|
|
61
|
+
initTransformFun(len) {
|
|
62
|
+
this.$element[0].childNodes.forEach((node) => {
|
|
63
|
+
if (!node.transform.baseVal[0])
|
|
64
|
+
return;
|
|
65
|
+
// const matrixE = node.transform.baseVal[0].matrix.e;
|
|
66
|
+
// node.transform.baseVal[0].matrix.e = matrixE + len * 5;
|
|
67
|
+
if (node.nodeName === 'g') {
|
|
68
|
+
const nodeValue = node.attributes['clip-path'].value.replace('url(#', '').replace(')', '');
|
|
69
|
+
const rootNode = node.parentNode.parentNode.parentElement;
|
|
70
|
+
const clipPath = $(rootNode).find(`clipPath[id="${nodeValue}"]`);
|
|
71
|
+
const demoPath = clipPath.find('path');
|
|
72
|
+
const dValues = demoPath.attr('d').split(',');
|
|
73
|
+
const retValues = [];
|
|
74
|
+
dValues.forEach((line, index) => {
|
|
75
|
+
const values = [];
|
|
76
|
+
line.split(' ').forEach((item) => {
|
|
77
|
+
const nItem = Number(item);
|
|
78
|
+
if (!isNaN(nItem) && (index === 1 || index === 2 || nItem === -1)) {
|
|
79
|
+
item = nItem > 0 ? (index === 1 || index === 2 ? nItem + (len + 2) * 8 : nItem + len * 8) : nItem - len * 8;
|
|
80
|
+
}
|
|
81
|
+
values.push(item);
|
|
82
|
+
});
|
|
83
|
+
retValues.push(values.join(' '));
|
|
84
|
+
});
|
|
85
|
+
demoPath.attr('d', retValues.join(','));
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
25
89
|
initFrameNode() {
|
|
26
90
|
const arcPath = Snap(this.$element[0]);
|
|
27
91
|
const b = arcPath.getBBox(true);
|
|
28
92
|
this.rootElement.append('rect').attr('id', 'StateFrame').attr('width', b.width).attr('height', b.height).attr('fill', 'transparent');
|
|
29
93
|
}
|
|
30
|
-
|
|
31
|
-
|
|
94
|
+
init(variableName) {
|
|
95
|
+
if (variableName) {
|
|
96
|
+
let hasVariable = false;
|
|
97
|
+
forEach(this.elementStates, elementState => {
|
|
98
|
+
if (elementState.variableName === variableName) {
|
|
99
|
+
hasVariable = true;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
if (!hasVariable && variableName === this.readVariableName) {
|
|
103
|
+
this.elementStates.push(new VariableState(variableName, undefined));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
updateValueObj(value, variableName) {
|
|
108
|
+
var _a, _b, _c;
|
|
109
|
+
if (((_a = this.model.variableId) === null || _a === void 0 ? void 0 : _a.variableName.name) === variableName) {
|
|
110
|
+
this.isNeedUpdateScale = false;
|
|
111
|
+
this.valueObj.value = value;
|
|
112
|
+
}
|
|
113
|
+
if (((_b = this.model.minVariable) === null || _b === void 0 ? void 0 : _b.name) === variableName) {
|
|
114
|
+
this.isNeedUpdateScale = true;
|
|
115
|
+
this.valueObj.min = value;
|
|
116
|
+
}
|
|
117
|
+
if (((_c = this.model.maxVariable) === null || _c === void 0 ? void 0 : _c.name) === variableName) {
|
|
118
|
+
this.isNeedUpdateScale = true;
|
|
119
|
+
this.valueObj.max = value;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
updateScale() {
|
|
123
|
+
// 刻度模糊问题
|
|
124
|
+
const matrix = this.$element[0].transform.baseVal[0].matrix;
|
|
125
|
+
if (!this.$element[0].style.transform) {
|
|
126
|
+
this.$element[0].style.transform = `translate3d(${matrix.e}px, ${matrix.f}px, 0)`;
|
|
127
|
+
}
|
|
128
|
+
if (!this.isNeedUpdateScale) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const textElements = this.$element.find('g:first > text');
|
|
132
|
+
let min = this.model.minValueType ? this.valueObj.min : this.model.min;
|
|
133
|
+
let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
|
|
134
|
+
min = Number(min);
|
|
135
|
+
max = Number(max);
|
|
136
|
+
if (isNaN(min) || isNaN(max)) {
|
|
137
|
+
min = RingGraphElement.DEFAULT_MIN_VALUE;
|
|
138
|
+
max = RingGraphElement.DEFAULT_MAX_VALUE;
|
|
139
|
+
}
|
|
140
|
+
if (this.model.minValueType === VariableValueType.Variable || this.model.maxValueType === VariableValueType.Variable) {
|
|
141
|
+
const len = max.toString().length > min.toString().length ? max.toString().length : min.toString().length;
|
|
142
|
+
if (Math.abs(len - this.needAddNumber) > 2) {
|
|
143
|
+
const width = this.$element.find('rect').attr('width');
|
|
144
|
+
this.$element.find('rect').attr('width', Number(width) + (len - this.needAddNumber) * 8);
|
|
145
|
+
this.initTransformFun(Math.abs(len - this.needAddNumber));
|
|
146
|
+
this.needAddNumber = len;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const avgSacle = ((max - min) / this.model.masterDivisionNumber).toFixed(5);
|
|
150
|
+
for (let i = 0; i < textElements.length; i++) {
|
|
151
|
+
const text = textElements[i];
|
|
152
|
+
if (!text.innerHTML) {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
let sacleValue = ((Number(avgSacle) * i) + min).toFixed(0);
|
|
156
|
+
// 整数位和小数位格式化;
|
|
157
|
+
if (this.model.fractionDigits > 0) {
|
|
158
|
+
sacleValue = (sacleValue / Math.pow(10, this.model.fractionDigits)).toFixed(this.model.fractionDigits);
|
|
159
|
+
}
|
|
160
|
+
if (!isNaN(sacleValue)) {
|
|
161
|
+
const oriValue = text.innerHTML;
|
|
162
|
+
text.innerHTML = sacleValue;
|
|
163
|
+
if (this.model.minValueType !== VariableValueType.Constant || this.model.maxValueType !== VariableValueType.Constant) {
|
|
164
|
+
// FLEXCLOUD-2619 刻度显示不全问题
|
|
165
|
+
const order = (i + 1) / textElements.length;
|
|
166
|
+
const len = oriValue.toString().length - sacleValue.toString().length;
|
|
167
|
+
if (order <= 0.7 && len > 1 && !this.initTransform) {
|
|
168
|
+
text.transform.baseVal[0].matrix.e += (len - 1) * 5;
|
|
169
|
+
}
|
|
170
|
+
if (order > 0.7 && Math.abs(len) > 0) {
|
|
171
|
+
text.transform.baseVal[0].matrix.e += len > 1 ? (len - 1) * 5 : len < -1 ? (len + 1) * 5 : len * 5;
|
|
172
|
+
text.transform.baseVal[0].matrix.e += len === -2 ? -3 : 0;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
this.initTransform = true;
|
|
178
|
+
}
|
|
179
|
+
updateVariableValue(value, variableName) {
|
|
180
|
+
this.updateValueObj(value, variableName);
|
|
181
|
+
this.updateScale();
|
|
182
|
+
let min = this.model.minValueType ? this.valueObj.min : this.model.min;
|
|
183
|
+
let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
|
|
184
|
+
min = Number(min);
|
|
185
|
+
max = Number(max);
|
|
186
|
+
if (isNaN(min) || isNaN(max)) {
|
|
187
|
+
min = RingGraphElement.DEFAULT_MIN_VALUE;
|
|
188
|
+
max = RingGraphElement.DEFAULT_MAX_VALUE;
|
|
189
|
+
}
|
|
190
|
+
const percent = calculatePercent(min, max, this.valueObj.value || 0);
|
|
32
191
|
this.updateBar(percent);
|
|
33
192
|
this._barElement$.attr('fill', this.getBarColor(value));
|
|
34
193
|
if (this.model.showPercentage) {
|
|
@@ -87,3 +246,5 @@ export class RingGraphElement extends ReadableElement {
|
|
|
87
246
|
arcPath.arc(outer, outer, inner, endRadians, startRadians);
|
|
88
247
|
}
|
|
89
248
|
}
|
|
249
|
+
RingGraphElement.DEFAULT_MIN_VALUE = 0;
|
|
250
|
+
RingGraphElement.DEFAULT_MAX_VALUE = 100;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"RingGraphElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"RingGraphElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":16,"character":38},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":62,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":62,"character":57},{"__symbolic":"reference","module":"../../communication/variable/variable-communicator","name":"VariableCommunicator","line":63,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":64,"character":23},{"__symbolic":"reference","module":"../../localization/localization.service","name":"Localization","line":65,"character":22},{"__symbolic":"reference","name":"string"}]}],"initTransformFun":[{"__symbolic":"method"}],"initFrameNode":[{"__symbolic":"method"}],"init":[{"__symbolic":"method"}],"updateValueObj":[{"__symbolic":"method"}],"updateScale":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}],"updateBar":[{"__symbolic":"method"}],"getBarColor":[{"__symbolic":"method"}],"drawClockWiseArc":[{"__symbolic":"method"}],"drawAntiClockWiseArc":[{"__symbolic":"method"}]},"statics":{"DEFAULT_MIN_VALUE":0,"DEFAULT_MAX_VALUE":100}}}}]
|
|
@@ -62,9 +62,6 @@ export class GraphStateElement {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
getImageElement() {
|
|
65
|
-
if (this.imageElement && /iPhone|iPod/i.test(navigator.userAgent)) {
|
|
66
|
-
this.removeImageElement();
|
|
67
|
-
}
|
|
68
65
|
if (!this.imageElement) {
|
|
69
66
|
this.imageElement = document.createElementNS('http://www.w3.org/2000/svg', 'image');
|
|
70
67
|
this.imageElement.setAttribute('width', this.width + '');
|
|
@@ -19,7 +19,7 @@ export class TextElementModal {
|
|
|
19
19
|
return textElement;
|
|
20
20
|
}
|
|
21
21
|
createNewForeignObjectText(content, font, width, height, isVariableText) {
|
|
22
|
-
if (font) {
|
|
22
|
+
if (font && !font.fontFamily.includes(',msyh')) {
|
|
23
23
|
font.fontFamily += ',msyh';
|
|
24
24
|
}
|
|
25
25
|
const bodyDiv = document.createElement('div');
|
|
@@ -36,7 +36,7 @@ export class TextElementModal {
|
|
|
36
36
|
for (let index = 0; index < textArray.length; index++) {
|
|
37
37
|
const textDiv = document.createElement('div');
|
|
38
38
|
textDiv.className = 'text-list';
|
|
39
|
-
|
|
39
|
+
const innerHTML = textArray[index] ? textArray[index] : ' ';
|
|
40
40
|
let fontString = '';
|
|
41
41
|
if (font.isItalic) {
|
|
42
42
|
fontString += 'italic ';
|
|
@@ -45,12 +45,23 @@ export class TextElementModal {
|
|
|
45
45
|
fontString += 'bold ';
|
|
46
46
|
}
|
|
47
47
|
let lineHeight = 0;
|
|
48
|
+
// chrome支持可显示最小字体大小为12px, 更小字体通过缩放实现
|
|
49
|
+
const minFontSize = 12;
|
|
48
50
|
lineHeight = parseInt(font.fontSize, 10) + 5;
|
|
49
51
|
fontString += font.fontSize + '/' + lineHeight.toString() + 'px ' + font.fontFamily;
|
|
50
52
|
textDiv.style.cssText = `color: ${font.color};word-break: break-all;font: ${fontString};`;
|
|
51
53
|
if (font.isUnderline) {
|
|
52
54
|
textDiv.style.textDecoration = 'underline';
|
|
53
55
|
}
|
|
56
|
+
const spanText = document.createElement('span');
|
|
57
|
+
spanText.style.cssText = `
|
|
58
|
+
display: contents;
|
|
59
|
+
transform: scale(${parseInt(font.fontSize, 10) > minFontSize ? 1 : parseInt(font.fontSize, 10) / minFontSize});
|
|
60
|
+
width: 100%;
|
|
61
|
+
height: 100%;
|
|
62
|
+
`;
|
|
63
|
+
spanText.innerHTML = innerHTML;
|
|
64
|
+
textDiv.appendChild(spanText);
|
|
54
65
|
fragment.appendChild(textDiv);
|
|
55
66
|
}
|
|
56
67
|
bodyDiv.appendChild(fragment);
|
|
@@ -49,7 +49,7 @@ export class TextStateElement {
|
|
|
49
49
|
return this.textElement;
|
|
50
50
|
}
|
|
51
51
|
createNewForeignObjectText(content, font) {
|
|
52
|
-
if (font) {
|
|
52
|
+
if (font && !font.fontFamily.includes(',msyh')) {
|
|
53
53
|
font.fontFamily += ',msyh';
|
|
54
54
|
}
|
|
55
55
|
const bodyDiv = document.createElement('div');
|
|
@@ -15,4 +15,5 @@ export declare class BitSwitchOperator implements SwitchOperator {
|
|
|
15
15
|
constructor(settings: BitSwitchSettings, variableCommunicator: VariableCommunicator, variableStore: VariableStore, signalRAppId: string);
|
|
16
16
|
canExecute(): boolean;
|
|
17
17
|
execute(): Promise<VariableOptionModel>;
|
|
18
|
+
writeValue(value: any): Promise<VariableOptionModel>;
|
|
18
19
|
}
|
|
@@ -72,6 +72,8 @@ export class BitSwitchOperator {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
break;
|
|
75
|
+
case BitSwitchOperation.Restoration:
|
|
76
|
+
break;
|
|
75
77
|
default:
|
|
76
78
|
throw new Error(`Unknown BitSwitchOperation:${settings.operation}`);
|
|
77
79
|
}
|
|
@@ -85,4 +87,21 @@ export class BitSwitchOperator {
|
|
|
85
87
|
newValue: newValue
|
|
86
88
|
});
|
|
87
89
|
}
|
|
90
|
+
writeValue(value) {
|
|
91
|
+
if (this.settings.isBitwiseIndex) {
|
|
92
|
+
this.variableCommunicator.writeWordByBit(this.variableName, this.settings.bitIndex, value).subscribe();
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.variableCommunicator.write(this.variableName, value).subscribe();
|
|
96
|
+
}
|
|
97
|
+
let originValue;
|
|
98
|
+
if (this.currentValue && this.currentValue.value !== undefined) {
|
|
99
|
+
originValue = this.currentValue.value;
|
|
100
|
+
}
|
|
101
|
+
return Promise.resolve({
|
|
102
|
+
variableName: this.variableName,
|
|
103
|
+
originValue: originValue,
|
|
104
|
+
newValue: value
|
|
105
|
+
});
|
|
106
|
+
}
|
|
88
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"BitSwitchOperator":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../../model","name":"BitSwitchSettings","line":21,"character":43},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":21,"character":101},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":22,"character":40},{"__symbolic":"reference","name":"string"}]}],"canExecute":[{"__symbolic":"method"}],"execute":[{"__symbolic":"method"}]}}}}]
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"BitSwitchOperator":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../../model","name":"BitSwitchSettings","line":21,"character":43},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":21,"character":101},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":22,"character":40},{"__symbolic":"reference","name":"string"}]}],"canExecute":[{"__symbolic":"method"}],"execute":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}]}}}}]
|
|
@@ -19,9 +19,17 @@ export declare class SwitchIndicatorLightElement extends ConditionalEnableElemen
|
|
|
19
19
|
private graphStateElement?;
|
|
20
20
|
private textStateElement;
|
|
21
21
|
private isMobileMode;
|
|
22
|
+
private isBitRestoration;
|
|
23
|
+
private isVerifiedForRestoration;
|
|
24
|
+
private restorationTimer;
|
|
25
|
+
private isWriteRestorationDownValue;
|
|
26
|
+
private onDocMouseUp;
|
|
22
27
|
constructor(element: HTMLElement, injector: Injector, modalService: BsModalService, variableCommunicator: VariableCommunicator, graphStore: GraphStore, permissionChecker: PermissionChecker, operationRecordService: OperationRecordService, securityChecker: SecurityChecker, variableStore: VariableStore, localization: Localization, signalRAppId: string);
|
|
28
|
+
handleMouseUp(): void;
|
|
29
|
+
private initOnDocMouseUpEvent;
|
|
23
30
|
private checkElementPassword;
|
|
24
31
|
private doSwitchOperator;
|
|
32
|
+
private writeValue;
|
|
25
33
|
private initSwitchOperator;
|
|
26
34
|
private initIndictorLightOperator;
|
|
27
35
|
private currentStateIdChange;
|