-
Notifications
You must be signed in to change notification settings - Fork 2
/
ToolInformation.ts
58 lines (51 loc) · 2.01 KB
/
ToolInformation.ts
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
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
/** @packageDocumentation
* @module Item
*/
import { UiError } from "@itwin/appui-abstract";
import { ConfigurableUiControlType } from "../configurableui/ConfigurableUiControl";
import { UiFramework } from "../UiFramework";
import type { ToolUiProvider } from "./ToolUiProvider";
/** Provides information about a tool with a given id, including the ToolUiProvider.
* @public
*/
export class ToolInformation {
private _toolUiProvider: ToolUiProvider | undefined;
constructor(public toolId: string) {}
/** Get the ToolUiProvider registered for this tool */
public get toolUiProvider(): ToolUiProvider | undefined {
if (!this._toolUiProvider) {
let provider: ToolUiProvider | undefined;
if (UiFramework.controls.isRegistered(this.toolId)) {
provider = UiFramework.controls.create(
this.toolId,
this.toolId
) as ToolUiProvider;
} else {
if (
UiFramework.toolSettings.useDefaultToolSettingsProvider &&
this.toolId === UiFramework.toolSettings.toolIdForToolSettings
)
provider = UiFramework.controls.create(
"DefaultToolSettings",
this.toolId
) as ToolUiProvider;
}
// istanbul ignore else
if (provider) {
if (provider.getType() !== ConfigurableUiControlType.ToolUiProvider) {
// eslint-disable-next-line deprecation/deprecation
throw new UiError(
UiFramework.loggerCategory(this),
`toolUiProvider: toolId '${this.toolId}' is registered to a control that is NOT a ToolUiProvider`
);
}
this._toolUiProvider = provider;
}
}
return this._toolUiProvider;
}
}