2026-01-22 15:23:57 +08:00
|
|
|
/**
|
|
|
|
|
* 按钮组管理器
|
|
|
|
|
* 负责创建和管理按钮组实例
|
|
|
|
|
*/
|
2025-12-04 15:24:44 +08:00
|
|
|
import { BimButtonGroup } from '../components/button-group';
|
|
|
|
|
import type { ButtonGroupOptions } from '../components/button-group/index.type';
|
|
|
|
|
import type { ThemeConfig } from '../themes/types';
|
2026-01-22 15:23:57 +08:00
|
|
|
import { BaseManager } from '../core/base-manager';
|
2026-02-28 10:08:36 +08:00
|
|
|
import { ManagerRegistry } from '../core/manager-registry';
|
2025-12-04 15:24:44 +08:00
|
|
|
|
|
|
|
|
/**
|
2026-01-22 15:23:57 +08:00
|
|
|
* 按钮组管理器
|
|
|
|
|
* 统一管理多个按钮组的创建、主题更新和销毁
|
2025-12-04 15:24:44 +08:00
|
|
|
*/
|
2026-01-22 15:23:57 +08:00
|
|
|
export class ButtonGroupManager extends BaseManager {
|
|
|
|
|
/** 按钮组映射表 */
|
2025-12-08 10:02:24 +08:00
|
|
|
private groups: Map<string, BimButtonGroup> = new Map();
|
2026-01-22 15:23:57 +08:00
|
|
|
/** 容器元素 */
|
2025-12-04 15:24:44 +08:00
|
|
|
private container: HTMLElement;
|
|
|
|
|
|
2026-02-28 10:08:36 +08:00
|
|
|
constructor(container: HTMLElement, registry: ManagerRegistry) {
|
|
|
|
|
super(registry);
|
2025-12-04 15:24:44 +08:00
|
|
|
this.container = container;
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-22 15:23:57 +08:00
|
|
|
/**
|
|
|
|
|
* 创建按钮组
|
|
|
|
|
* @param id 按钮组 ID
|
|
|
|
|
* @param options 按钮组配置
|
|
|
|
|
* @returns 按钮组实例
|
|
|
|
|
*/
|
2025-12-08 10:02:24 +08:00
|
|
|
public create(id: string, options: Omit<ButtonGroupOptions, 'container'>): BimButtonGroup {
|
2025-12-04 15:24:44 +08:00
|
|
|
const group = new BimButtonGroup({
|
2025-12-08 10:02:24 +08:00
|
|
|
container: this.container,
|
2026-02-28 10:08:36 +08:00
|
|
|
registry: this.registry,
|
2025-12-04 15:24:44 +08:00
|
|
|
...options
|
|
|
|
|
});
|
2025-12-08 10:02:24 +08:00
|
|
|
|
2025-12-04 15:24:44 +08:00
|
|
|
group.init();
|
2025-12-08 10:02:24 +08:00
|
|
|
this.groups.set(id, group);
|
2025-12-04 15:24:44 +08:00
|
|
|
return group;
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-22 15:23:57 +08:00
|
|
|
/**
|
|
|
|
|
* 获取按钮组
|
|
|
|
|
* @param id 按钮组 ID
|
|
|
|
|
* @returns 按钮组实例
|
|
|
|
|
*/
|
2025-12-08 10:02:24 +08:00
|
|
|
public get(id: string): BimButtonGroup | undefined {
|
|
|
|
|
return this.groups.get(id);
|
2025-12-04 15:24:44 +08:00
|
|
|
}
|
|
|
|
|
|
2026-01-22 15:23:57 +08:00
|
|
|
/**
|
|
|
|
|
* 更新所有按钮组的主题
|
|
|
|
|
* @param theme 主题配置
|
|
|
|
|
*/
|
2025-12-08 10:02:24 +08:00
|
|
|
public updateTheme(theme: ThemeConfig) {
|
|
|
|
|
this.groups.forEach(group => group.setTheme(theme));
|
2025-12-04 15:24:44 +08:00
|
|
|
}
|
|
|
|
|
|
2026-01-22 15:23:57 +08:00
|
|
|
/** 销毁管理器和所有按钮组 */
|
2025-12-04 15:24:44 +08:00
|
|
|
public destroy() {
|
2025-12-08 10:02:24 +08:00
|
|
|
this.groups.forEach(group => group.destroy());
|
|
|
|
|
this.groups.clear();
|
2026-01-22 15:23:57 +08:00
|
|
|
super.destroy();
|
2025-12-04 15:24:44 +08:00
|
|
|
}
|
|
|
|
|
}
|