mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-02 22:32:27 +08:00
79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
|
|
import path from "node:path"
|
||
|
|
import { app, BrowserWindow, ipcMain } from "electron"
|
||
|
|
|
||
|
|
let settingsWindow: BrowserWindow | null = null
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create and show the settings window
|
||
|
|
*/
|
||
|
|
export function showSettingsWindow(parentWindow?: BrowserWindow): void {
|
||
|
|
// If settings window already exists, focus it
|
||
|
|
if (settingsWindow && !settingsWindow.isDestroyed()) {
|
||
|
|
settingsWindow.focus()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// Determine path to settings preload script
|
||
|
|
// In compiled output: dist-electron/preload/settings.js
|
||
|
|
const preloadPath = path.join(__dirname, "..", "preload", "settings.js")
|
||
|
|
|
||
|
|
// Determine path to settings HTML
|
||
|
|
// In packaged app: app.asar/dist-electron/settings/index.html
|
||
|
|
// In development: electron/settings/index.html
|
||
|
|
const settingsHtmlPath = app.isPackaged
|
||
|
|
? path.join(__dirname, "..", "settings", "index.html")
|
||
|
|
: path.join(__dirname, "..", "..", "electron", "settings", "index.html")
|
||
|
|
|
||
|
|
settingsWindow = new BrowserWindow({
|
||
|
|
width: 600,
|
||
|
|
height: 700,
|
||
|
|
minWidth: 500,
|
||
|
|
minHeight: 500,
|
||
|
|
parent: parentWindow,
|
||
|
|
modal: false,
|
||
|
|
show: false,
|
||
|
|
title: "Settings - Next AI Draw.io",
|
||
|
|
webPreferences: {
|
||
|
|
preload: preloadPath,
|
||
|
|
contextIsolation: true,
|
||
|
|
nodeIntegration: false,
|
||
|
|
sandbox: true,
|
||
|
|
},
|
||
|
|
})
|
||
|
|
settingsWindow.loadFile(settingsHtmlPath)
|
||
|
|
|
||
|
|
settingsWindow.once("ready-to-show", () => {
|
||
|
|
settingsWindow?.show()
|
||
|
|
})
|
||
|
|
|
||
|
|
settingsWindow.on("closed", () => {
|
||
|
|
settingsWindow = null
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Close the settings window if it exists
|
||
|
|
*/
|
||
|
|
export function closeSettingsWindow(): void {
|
||
|
|
if (settingsWindow && !settingsWindow.isDestroyed()) {
|
||
|
|
settingsWindow.close()
|
||
|
|
settingsWindow = null
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Check if settings window is open
|
||
|
|
*/
|
||
|
|
export function isSettingsWindowOpen(): boolean {
|
||
|
|
return settingsWindow !== null && !settingsWindow.isDestroyed()
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Register settings window IPC handlers
|
||
|
|
*/
|
||
|
|
export function registerSettingsWindowHandlers(): void {
|
||
|
|
ipcMain.on("settings:close", () => {
|
||
|
|
closeSettingsWindow()
|
||
|
|
})
|
||
|
|
}
|