@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
65 lines (54 loc) • 1.64 kB
text/typescript
import { Menu } from 'electron';
import { IMenuPlatform, MenuOptions, createMenuImpl } from '@/menus';
import { createLogger } from '@/utils/logger';
import type { App } from './App';
// Create logger
const logger = createLogger('core:MenuManager');
export default class MenuManager {
app: App;
private platformImpl: IMenuPlatform;
constructor(app: App) {
logger.debug('Initializing MenuManager');
this.app = app;
this.platformImpl = createMenuImpl(app);
}
/**
* Initialize menus (mainly application menu)
*/
initialize(options?: MenuOptions) {
logger.info('Initializing application menu');
this.platformImpl.buildAndSetAppMenu(options);
}
/**
* Build and show context menu
*/
showContextMenu(type: string, data?: any) {
logger.debug(`Showing context menu of type: ${type}`);
const menu = this.platformImpl.buildContextMenu(type, data);
menu.popup(); // popup must be called in main process
return { success: true };
}
/**
* Build tray menu (usually called by tray manager)
*/
buildTrayMenu(): Menu {
logger.debug('Building tray menu');
return this.platformImpl.buildTrayMenu();
}
/**
* Refresh menus
*/
refreshMenus(options?: MenuOptions) {
logger.debug('Refreshing all menus');
this.platformImpl.refresh(options);
return { success: true };
}
/**
* Rebuild and set application menu (e.g., when toggling dev menu visibility)
*/
rebuildAppMenu(options?: MenuOptions) {
logger.debug('Rebuilding application menu');
this.platformImpl.buildAndSetAppMenu(options);
return { success: true };
}
}