refactor(toolbar): pass registry to all button factories

Toolbar component now receives registry from ButtonGroupManager options
and passes it to all 16 toolbar button factory functions.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
yuding
2026-02-28 10:08:52 +08:00
parent eb0f52ecb5
commit bb1d18a4e7
17 changed files with 52 additions and 52 deletions

View File

@@ -1,9 +1,9 @@
import type { ButtonConfig } from '../../../index.type';
import { getIcon } from '../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../core/manager-registry';
export const createAiChatButton = (registry: ManagerRegistry): ButtonConfig => {
export const createAiChatButton = (): ButtonConfig => {
const registry = ManagerRegistry.getInstance();
registry.on('aiChat:opened', () => {
registry.toolbar?.setBtnActive('aiChat', true);

View File

@@ -1,7 +1,8 @@
import type { ButtonConfig } from '../../../index.type';
import { getIcon } from '../../../../../utils/icon-manager';
import type { ManagerRegistry } from '../../../../../core/manager-registry';
export const createFullscreenButton = (): ButtonConfig => {
export const createFullscreenButton = (_registry?: ManagerRegistry): ButtonConfig => {
return {
id: 'fullscreen',
groupId: 'group-2',

View File

@@ -1,8 +1,8 @@
import type { ButtonConfig } from '../../../index.type';
import { getIcon } from '../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../core/manager-registry';
export const createHomeButton = (): ButtonConfig => {
export const createHomeButton = (registry: ManagerRegistry): ButtonConfig => {
return {
id: 'home',
groupId: 'group-1',
@@ -12,7 +12,6 @@ export const createHomeButton = (): ButtonConfig => {
keepActive: false,
onClick: (button) => {
console.log('首页按钮被点击:', button.id);
const registry = ManagerRegistry.getInstance();
registry.engine3d?.CameraGoHome();
}
};

View File

@@ -1,9 +1,9 @@
import type { ButtonConfig } from '../../../index.type';
import { getIcon } from '../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../core/manager-registry';
export const createInfoButton = (registry: ManagerRegistry): ButtonConfig => {
export const createInfoButton = (): ButtonConfig => {
const registry = ManagerRegistry.getInstance();
return {
id: 'info',

View File

@@ -1,9 +1,9 @@
import type { ButtonConfig } from '../../../index.type';
import { getIcon } from '../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../core/manager-registry';
export const createMapButton = (registry: ManagerRegistry): ButtonConfig => {
export const createMapButton = (): ButtonConfig => {
const registry = ManagerRegistry.getInstance();
return {
id: 'map',

View File

@@ -1,8 +1,8 @@
import type { ButtonConfig } from '../../../index.type';
import { getIcon } from '../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../core/manager-registry';
export const createMeasureButton = (): ButtonConfig => {
export const createMeasureButton = (registry: ManagerRegistry): ButtonConfig => {
return {
id: 'measure',
groupId: 'group-1',
@@ -11,7 +11,6 @@ export const createMeasureButton = (): ButtonConfig => {
icon: getIcon('测量'),
keepActive: true,
onClick: (button) => {
const registry = ManagerRegistry.getInstance();
if (button.isActive) {
registry.measure?.show();
} else {

View File

@@ -1,8 +1,8 @@
import type { ButtonConfig } from '../../../index.type';
import { getIcon } from '../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../core/manager-registry';
export const createPropertyButton = (): ButtonConfig => {
export const createPropertyButton = (registry: ManagerRegistry): ButtonConfig => {
return {
id: 'property',
groupId: 'group-1',
@@ -12,7 +12,6 @@ export const createPropertyButton = (): ButtonConfig => {
icon: getIcon('文档'),
onClick: () => {
console.log('构件详情按钮被点击');
const registry = ManagerRegistry.getInstance();
registry.componentDetail?.show();
}
};

View File

@@ -1,8 +1,8 @@
import type { ButtonConfig } from '../../../../index.type';
import { getIcon } from '../../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../../core/manager-registry';
export const createSectionAxisButton = (): ButtonConfig => {
export const createSectionAxisButton = (registry: ManagerRegistry): ButtonConfig => {
return {
id: 'section-axis',
groupId: 'group-1',
@@ -14,7 +14,6 @@ export const createSectionAxisButton = (): ButtonConfig => {
label: 'toolbar.sectionAxis',
icon: getIcon('轴向剖切'),
onClick: (button) => {
const registry = ManagerRegistry.getInstance();
if (button.isActive) {
registry.sectionAxis?.show();
} else {

View File

@@ -1,8 +1,8 @@
import type { ButtonConfig } from '../../../../index.type';
import { getIcon } from '../../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../../core/manager-registry';
export const createSectionBoxButton = (): ButtonConfig => {
export const createSectionBoxButton = (registry: ManagerRegistry): ButtonConfig => {
return {
id: 'section-box',
groupId: 'group-1',
@@ -15,7 +15,6 @@ export const createSectionBoxButton = (): ButtonConfig => {
icon: getIcon('剖切盒'),
onClick: (button) => {
console.log('剖切盒被点击:', button.id, '激活状态:', button.isActive);
const registry = ManagerRegistry.getInstance();
if (button.isActive) {
registry.sectionBox?.show();
} else {

View File

@@ -1,7 +1,8 @@
import type { ButtonConfig } from '../../../../index.type';
import { getIcon } from '../../../../../../utils/icon-manager';
import type { ManagerRegistry } from '../../../../../../core/manager-registry';
export const createSectionMenuButton = (): ButtonConfig => {
export const createSectionMenuButton = (_registry?: ManagerRegistry): ButtonConfig => {
return {
id: 'section',
groupId: 'group-1',

View File

@@ -1,8 +1,8 @@
import type { ButtonConfig } from '../../../../index.type';
import { getIcon } from '../../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../../core/manager-registry';
export const createSectionPlaneButton = (): ButtonConfig => {
export const createSectionPlaneButton = (registry: ManagerRegistry): ButtonConfig => {
return {
id: 'section-plane',
groupId: 'group-1',
@@ -15,7 +15,6 @@ export const createSectionPlaneButton = (): ButtonConfig => {
icon: getIcon('拾曲面剖切'),
onClick: (button) => {
console.log('拾取面剖切被点击:', button.id, '激活状态:', button.isActive);
const registry = ManagerRegistry.getInstance();
if (button.isActive) {
registry.sectionPlane?.show();
} else {

View File

@@ -1,7 +1,8 @@
import type { ButtonConfig } from '../../../index.type';
import { getIcon } from '../../../../../utils/icon-manager';
import type { ManagerRegistry } from '../../../../../core/manager-registry';
export const createSettingButton = (): ButtonConfig => {
export const createSettingButton = (_registry?: ManagerRegistry): ButtonConfig => {
return {
id: 'setting',
groupId: 'group-2',

View File

@@ -1,7 +1,8 @@
import type { ButtonConfig } from '../../../../index.type';
import { getIcon } from '../../../../../../utils/icon-manager';
import type { ManagerRegistry } from '../../../../../../core/manager-registry';
export const createWalkBirdButton = (): ButtonConfig => {
export const createWalkBirdButton = (_registry?: ManagerRegistry): ButtonConfig => {
return {
id: 'walk-bird',
groupId: 'group-1',

View File

@@ -1,8 +1,8 @@
import type { ButtonConfig } from '../../../../index.type';
import { getIcon } from '../../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../../core/manager-registry';
export const createWalkMenuButton = (): ButtonConfig => {
export const createWalkMenuButton = (registry: ManagerRegistry): ButtonConfig => {
return {
id: 'walk',
groupId: 'group-1',
@@ -12,7 +12,6 @@ export const createWalkMenuButton = (): ButtonConfig => {
icon: getIcon('漫游'),
onClick: () => {
console.log('漫游按钮被点击');
const registry = ManagerRegistry.getInstance();
registry.walkControl?.show();
}
};

View File

@@ -1,7 +1,8 @@
import type { ButtonConfig } from '../../../../index.type';
import { getIcon } from '../../../../../../utils/icon-manager';
import type { ManagerRegistry } from '../../../../../../core/manager-registry';
export const createWalkPersonButton = (): ButtonConfig => {
export const createWalkPersonButton = (_registry?: ManagerRegistry): ButtonConfig => {
return {
id: 'walk-person',
groupId: 'group-1',

View File

@@ -1,8 +1,8 @@
import type { ButtonConfig } from '../../../index.type';
import { getIcon } from '../../../../../utils/icon-manager';
import { ManagerRegistry } from '../../../../../core/manager-registry';
import type { ManagerRegistry } from '../../../../../core/manager-registry';
export const createZoomBoxButton = (): ButtonConfig => {
export const createZoomBoxButton = (registry: ManagerRegistry): ButtonConfig => {
return {
id: 'zoom-box',
groupId: 'group-1',
@@ -11,7 +11,6 @@ export const createZoomBoxButton = (): ButtonConfig => {
label: 'toolbar.zoomBox',
icon: getIcon('框选放大'),
onClick: () => {
const registry = ManagerRegistry.getInstance();
registry.engine3d?.activateZoomBox();
}
};

View File

@@ -1,9 +1,12 @@
import { BimButtonGroup } from '../index';
import type { ManagerRegistry } from '../../../core/manager-registry';
export class Toolbar extends BimButtonGroup {
public async init(): Promise<void> {
await super.init();
const registry = this.options.registry as ManagerRegistry;
const { createHomeButton } = await import('./buttons/home');
const { createZoomBoxButton } = await import('./buttons/zoom-box');
const { createWalkMenuButton } = await import('./buttons/walk/walk-menu');
@@ -21,21 +24,21 @@ export class Toolbar extends BimButtonGroup {
this.addGroup('group-1');
this.addButton(createHomeButton());
this.addButton(createZoomBoxButton());
this.addButton(createMeasureButton());
this.addButton(createSectionMenuButton());
this.addButton(createSectionPlaneButton());
this.addButton(createSectionAxisButton());
this.addButton(createSectionBoxButton());
this.addButton(createWalkMenuButton());
this.addButton(createMapButton());
this.addButton(createPropertyButton());
this.addButton(createHomeButton(registry));
this.addButton(createZoomBoxButton(registry));
this.addButton(createMeasureButton(registry));
this.addButton(createSectionMenuButton(registry));
this.addButton(createSectionPlaneButton(registry));
this.addButton(createSectionAxisButton(registry));
this.addButton(createSectionBoxButton(registry));
this.addButton(createWalkMenuButton(registry));
this.addButton(createMapButton(registry));
this.addButton(createPropertyButton(registry));
this.addGroup('group-2');
this.addButton(createAiChatButton());
this.addButton(createSettingButton());
this.addButton(createInfoButton());
this.addButton(createFullscreenButton());
this.addButton(createAiChatButton(registry));
this.addButton(createSettingButton(registry));
this.addButton(createInfoButton(registry));
this.addButton(createFullscreenButton(registry));
this.render();
}