Path: blob/main/replay/backend/managers/OverlayManager.ts
1030 views
import { BrowserWindow } from 'electron';1import BaseOverlay from '../overlays/BaseOverlay';2import MainMenu from '../overlays/MainMenu';3import LocationsMenu from '../overlays/LocationsMenu';4import IRectangle from '~shared/interfaces/IRectangle';5import CommandOverlay from '../overlays/CommandOverlay';6import MessageOverlay from '../overlays/MessageOverlay';7import ListMenu from '~backend/overlays/ListMenu';89export default class OverlayManager {10private overlays: BaseOverlay[] = [];1112public start() {13// this.overlays.push(new FindOverlay());14this.overlays.push(new MainMenu());15this.overlays.push(new ListMenu());16this.overlays.push(new LocationsMenu());17this.overlays.push(new CommandOverlay());18this.overlays.push(new MessageOverlay());19}2021public show(name: string, browserWindow: BrowserWindow, rect: IRectangle, ...args: any[]) {22this.getByName(name).show(browserWindow, { rect }, ...args);23}2425public toggle(name: string, browserWindow: BrowserWindow, rect: IRectangle) {26const overlay = this.getByName(name);27if (overlay.visible) {28overlay.hide();29} else {30overlay.show(browserWindow, { rect });31}32}3334public get browserViews() {35return Array.from(this.overlays).map(x => x.browserView);36}3738public destroy = () => {39this.browserViews.length = 0;40};4142public sendToAll = (channel: string, ...args: any[]) => {43this.browserViews.forEach(x => x?.webContents.send(channel, ...args));44};4546public getByName(name: string) {47return this.overlays.find(x => x.name === name);48}4950public getByWebContentsId(webContentsId: number) {51return this.overlays.find(x => x.id === webContentsId);52}5354public isVisible(name: string) {55return this.getByName(name).visible;56}57}585960