Skip to content

Commit d8af2eb

Browse files
committed
fix label renderer not being injected
1 parent 0016e5b commit d8af2eb

5 files changed

Lines changed: 32 additions & 15 deletions

File tree

frontend/webEditor/src/diagram/di.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { FunctionNodeImpl, FunctionNodeView } from "./nodes/DfdFunctionNode";
2222
import { IONodeImpl, IONodeView } from "./nodes/DfdIONode";
2323
import "./style.css";
2424
import { DfdPositionalLabelView } from "./labels/DfdPositionalLabel";
25-
import { DfdNodeLabelRenderer } from "./nodes/DfdNodeLabels";
25+
import { DfdNodeLabelRenderer, DfdNodeLabelSizeCalculator } from "./nodes/DfdNodeLabels";
2626
import { FilledBackgroundLabelView } from "./labels/FilledBackgroundLabel";
2727
import { DfdEditLabelValidatorDecorator } from "./labels/EditLabelDecorator";
2828
import { DfdEditLabelValidator } from "./labels/EditLabelValidator";
@@ -77,5 +77,6 @@ export const diagramModule = new ContainerModule((bind, unbind, isBound, rebind)
7777
enable: [editLabelFeature],
7878
});
7979

80+
bind(DfdNodeLabelSizeCalculator).toSelf().inSingletonScope();
8081
bind(DfdNodeLabelRenderer).toSelf().inSingletonScope();
8182
});

frontend/webEditor/src/diagram/nodes/DfdNodeLabels.tsx

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,16 @@ import { ContainsDfdLabels } from "../../labels/feature";
1010
import { RemoveLabelAssignmentAction } from "../../labels/assignmentCommand";
1111

1212
@injectable()
13-
export class DfdNodeLabelRenderer {
13+
export class DfdNodeLabelSizeCalculator {
1414
static readonly LABEL_HEIGHT = 10;
1515
static readonly LABEL_SPACE_BETWEEN = 2;
16-
static readonly LABEL_SPACING_HEIGHT = DfdNodeLabelRenderer.LABEL_HEIGHT + DfdNodeLabelRenderer.LABEL_SPACE_BETWEEN;
16+
static readonly LABEL_SPACING_HEIGHT =
17+
DfdNodeLabelSizeCalculator.LABEL_HEIGHT + DfdNodeLabelSizeCalculator.LABEL_SPACE_BETWEEN;
1718
static readonly LABEL_TEXT_PADDING = 8;
1819

19-
constructor(
20-
@inject(TYPES.IActionDispatcher) private readonly actionDispatcher: IActionDispatcher,
21-
@inject(LabelTypeRegistry) private readonly labelTypeRegistry: LabelTypeRegistry,
22-
) {}
20+
constructor(@inject(LabelTypeRegistry) private readonly labelTypeRegistry: LabelTypeRegistry) {}
2321

24-
private getLabel(label: LabelAssignment): { type: LabelType; value: LabelTypeValue } | undefined {
22+
protected getLabel(label: LabelAssignment): { type: LabelType; value: LabelTypeValue } | undefined {
2523
const labelType = this.labelTypeRegistry.getLabelType(label.labelTypeId);
2624
const labelTypeValue = labelType?.values.find((value) => value.id === label.labelTypeValueId);
2725
if (!labelType || !labelTypeValue) {
@@ -45,10 +43,20 @@ export class DfdNodeLabelRenderer {
4543
}
4644

4745
const text = `${label.type.name}: ${label.value.text}`;
48-
const width = calculateTextSize(text, "5pt sans-serif").width + DfdNodeLabelRenderer.LABEL_TEXT_PADDING;
46+
const width = calculateTextSize(text, "5pt sans-serif").width + DfdNodeLabelSizeCalculator.LABEL_TEXT_PADDING;
4947

5048
return [text, width];
5149
}
50+
}
51+
52+
@injectable()
53+
export class DfdNodeLabelRenderer extends DfdNodeLabelSizeCalculator {
54+
constructor(
55+
@inject(TYPES.IActionDispatcher) private readonly actionDispatcher: IActionDispatcher,
56+
@inject(LabelTypeRegistry) labelTypeRegistry: LabelTypeRegistry,
57+
) {
58+
super(labelTypeRegistry);
59+
}
5260

5361
renderSingleNodeLabel(node: ContainsDfdLabels & SNodeImpl, label: LabelAssignment, x: number, y: number): VNode {
5462
const [text, width] = this.computeLabelContent(label);

frontend/webEditor/src/diagram/nodes/common.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import { calculateTextSize } from "../../utils/TextSize";
66
import { ArrowEdgeImpl } from "../edges/ArrowEdge";
77
import { VNodeStyle } from "snabbdom";
88
import { DfdInputPortImpl } from "../ports/DfdInputPort";
9-
import { inject } from "inversify";
10-
import { DfdNodeLabelRenderer } from "./DfdNodeLabels";
9+
import { DfdNodeLabelSizeCalculator } from "./DfdNodeLabels";
1110
import { containsDfdLabelFeature } from "../../labels/feature";
1211

1312
export interface DfdNode extends SNode {
@@ -23,7 +22,7 @@ export abstract class DfdNodeImpl extends SNodeImpl implements WithEditableLabel
2322
static readonly WIDTH_PADDING = 12;
2423
static readonly NODE_COLOR = "var(--color-primary)";
2524
static readonly HIGHLIGHTED_COLOR = "var(--color-highlighted)";
26-
@inject(DfdNodeLabelRenderer) private readonly dfdNodeLabelRenderer?: DfdNodeLabelRenderer;
25+
dfdNodeLabelRenderer?: DfdNodeLabelSizeCalculator;
2726
text: string = "";
2827
color?: string;
2928
labels: LabelAssignment[] = [];
@@ -63,8 +62,8 @@ export abstract class DfdNodeImpl extends SNodeImpl implements WithEditableLabel
6362
if (hasLabels && !this.hideLabels) {
6463
return (
6564
this.labelStartHeight() +
66-
this.labels.length * DfdNodeLabelRenderer.LABEL_SPACING_HEIGHT +
67-
DfdNodeLabelRenderer.LABEL_SPACE_BETWEEN
65+
this.labels.length * DfdNodeLabelSizeCalculator.LABEL_SPACING_HEIGHT +
66+
DfdNodeLabelSizeCalculator.LABEL_SPACE_BETWEEN
6867
);
6968
} else {
7069
return this.noLabelHeight();

frontend/webEditor/src/labels/feature.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { SModelElementImpl } from "sprotty";
22
import { LabelAssignment } from "./LabelType";
3+
import { DfdNodeLabelSizeCalculator } from "../diagram/nodes/DfdNodeLabels";
34

45
export const containsDfdLabelFeature = Symbol("dfd-label-feature");
56

67
export interface ContainsDfdLabels extends SModelElementImpl {
78
labels: LabelAssignment[];
9+
dfdNodeLabelRenderer?: DfdNodeLabelSizeCalculator;
810
}
911

1012
export function containsDfdLabels<T extends SModelElementImpl>(element: T): element is T & ContainsDfdLabels {

frontend/webEditor/src/serialize/ModelFactory.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
import { injectable } from "inversify";
1+
import { inject, injectable } from "inversify";
22
import { SChildElementImpl, SModelElementImpl, SModelFactory, SParentElementImpl } from "sprotty";
33
import { DfdNode } from "../diagram/nodes/common";
44
import { getBasicType, SLabel, SModelElement } from "sprotty-protocol";
55
import { ArrowEdge } from "../diagram/edges/ArrowEdge";
6+
import { containsDfdLabels } from "../labels/feature";
7+
import { DfdNodeLabelSizeCalculator } from "../diagram/nodes/DfdNodeLabels";
68

79
@injectable()
810
export class DfdModelFactory extends SModelFactory {
11+
@inject(DfdNodeLabelSizeCalculator) dfdNodeLabelRenderer?: DfdNodeLabelSizeCalculator;
12+
913
override createElement(schema: SModelElement | SModelElementImpl, parent?: SParentElementImpl): SChildElementImpl {
1014
if (schema instanceof SModelElementImpl) {
1115
return super.createElement(schema, parent);
@@ -47,6 +51,9 @@ export class DfdModelFactory extends SModelFactory {
4751
if (element.features === undefined) {
4852
element.features = new Set<symbol>();
4953
}
54+
if (containsDfdLabels(element)) {
55+
element.dfdNodeLabelRenderer = this.dfdNodeLabelRenderer;
56+
}
5057
return element;
5158
}
5259

0 commit comments

Comments
 (0)