forked from alibaba/lowcode-engine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcanvas.ts
More file actions
82 lines (70 loc) · 2.35 KB
/
canvas.ts
File metadata and controls
82 lines (70 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
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
import {
IPublicApiCanvas,
IPublicModelDropLocation,
IPublicModelScrollTarget,
IPublicTypeScrollable,
IPublicModelScroller,
IPublicTypeLocationData,
IPublicModelEditor,
IPublicModelDragon,
IPublicModelActiveTracker,
IPublicModelClipboard,
} from '@alilc/lowcode-types';
import {
ScrollTarget as InnerScrollTarget,
IDesigner,
} from '@alilc/lowcode-designer';
import { editorSymbol, designerSymbol, nodeSymbol } from '../symbols';
import {
Dragon as ShellDragon,
DropLocation as ShellDropLocation,
ActiveTracker as ShellActiveTracker,
Clipboard as ShellClipboard,
DropLocation,
} from '../model';
const clipboardInstanceSymbol = Symbol('clipboardInstace');
export class Canvas implements IPublicApiCanvas {
private readonly [editorSymbol]: IPublicModelEditor;
private readonly [clipboardInstanceSymbol]: IPublicModelClipboard;
private get [designerSymbol](): IDesigner {
return this[editorSymbol].get('designer') as IDesigner;
}
get dragon(): IPublicModelDragon | null {
return ShellDragon.create(this[designerSymbol].dragon, this.workspaceMode);
}
get activeTracker(): IPublicModelActiveTracker | null {
const activeTracker = new ShellActiveTracker(this[designerSymbol].activeTracker);
return activeTracker;
}
get isInLiveEditing(): boolean {
return Boolean(this[editorSymbol].get('designer')?.project?.simulator?.liveEditing?.editing);
}
get clipboard(): IPublicModelClipboard {
return this[clipboardInstanceSymbol];
}
constructor(editor: IPublicModelEditor, readonly workspaceMode: boolean = false) {
this[editorSymbol] = editor;
this[clipboardInstanceSymbol] = new ShellClipboard();
}
createScrollTarget(shell: HTMLDivElement): IPublicModelScrollTarget {
return new InnerScrollTarget(shell);
}
createScroller(scrollable: IPublicTypeScrollable): IPublicModelScroller {
return this[designerSymbol].createScroller(scrollable);
}
/**
* 创建插入位置,考虑放到 dragon 中
*/
createLocation(locationData: IPublicTypeLocationData): IPublicModelDropLocation {
return new DropLocation(this[designerSymbol].createLocation({
...locationData,
target: (locationData.target as any)[nodeSymbol],
}));
}
/**
* @deprecated
*/
get dropLocation() {
return ShellDropLocation.create((this[designerSymbol] as any).dropLocation || null);
}
}