- Add createWindow IPC for creating secondary windows - Add PopoutPage for content-only rendering in new windows - Add multi-window management to electron state - Add '在新窗口中打开' context menu to tabs - Fix: Use standard URL path instead of hash for React Router routing
69 lines
1.3 KiB
TypeScript
69 lines
1.3 KiB
TypeScript
import { BrowserWindow } from 'electron'
|
|
|
|
interface ElectronAppState {
|
|
mainWindow: BrowserWindow | null
|
|
serverPort: number
|
|
isDev: boolean
|
|
}
|
|
|
|
class ElectronState {
|
|
private state: ElectronAppState = {
|
|
mainWindow: null,
|
|
serverPort: 3001,
|
|
isDev: false,
|
|
}
|
|
|
|
private windows = new Map<number, BrowserWindow>()
|
|
|
|
getMainWindow(): BrowserWindow | null {
|
|
return this.state.mainWindow
|
|
}
|
|
|
|
setMainWindow(window: BrowserWindow | null): void {
|
|
this.state.mainWindow = window
|
|
}
|
|
|
|
getServerPort(): number {
|
|
return this.state.serverPort
|
|
}
|
|
|
|
setServerPort(port: number): void {
|
|
this.state.serverPort = port
|
|
}
|
|
|
|
isDevelopment(): boolean {
|
|
return this.state.isDev
|
|
}
|
|
|
|
setDevelopment(isDev: boolean): void {
|
|
this.state.isDev = isDev
|
|
}
|
|
|
|
addWindow(window: BrowserWindow): void {
|
|
this.windows.set(window.id, window)
|
|
}
|
|
|
|
removeWindow(id: number): void {
|
|
this.windows.delete(id)
|
|
}
|
|
|
|
getWindow(id: number): BrowserWindow | undefined {
|
|
return this.windows.get(id)
|
|
}
|
|
|
|
getAllWindows(): BrowserWindow[] {
|
|
return Array.from(this.windows.values())
|
|
}
|
|
|
|
reset(): void {
|
|
this.windows.clear()
|
|
this.state = {
|
|
mainWindow: null,
|
|
serverPort: 3001,
|
|
isDev: false,
|
|
}
|
|
}
|
|
}
|
|
|
|
export const electronState = new ElectronState()
|