131 Zeilen
3.7 KiB
JavaScript
131 Zeilen
3.7 KiB
JavaScript
const { app, BrowserWindow, Menu, ipcMain, nativeTheme } = require('electron');
|
|
const path = require('path');
|
|
|
|
let mainWindow;
|
|
let isDarkMode = true;
|
|
|
|
function createWindow() {
|
|
mainWindow = new BrowserWindow({
|
|
width: 1400,
|
|
height: 900,
|
|
minWidth: 1000,
|
|
minHeight: 700,
|
|
webPreferences: {
|
|
nodeIntegration: false,
|
|
contextIsolation: true,
|
|
preload: path.join(__dirname, 'preload.js')
|
|
},
|
|
icon: path.join(__dirname, 'assets', 'icon.png'),
|
|
backgroundColor: '#000000',
|
|
resizable: true,
|
|
frame: false
|
|
});
|
|
|
|
mainWindow.loadFile('index.html');
|
|
|
|
const menu = Menu.buildFromTemplate([
|
|
{
|
|
label: 'Datei',
|
|
submenu: [
|
|
{
|
|
label: 'Neue Datei analysieren',
|
|
accelerator: 'CmdOrCtrl+N',
|
|
click: () => mainWindow.webContents.send('new-file')
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
label: 'Beenden',
|
|
accelerator: 'CmdOrCtrl+Q',
|
|
click: () => app.quit()
|
|
}
|
|
]
|
|
},
|
|
{
|
|
label: 'Ansicht',
|
|
submenu: [
|
|
{
|
|
label: 'Dark Mode',
|
|
type: 'checkbox',
|
|
checked: isDarkMode,
|
|
click: (menuItem) => {
|
|
isDarkMode = menuItem.checked;
|
|
mainWindow.webContents.send('toggle-theme', isDarkMode);
|
|
nativeTheme.themeSource = isDarkMode ? 'dark' : 'light';
|
|
}
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
label: 'Vollbild',
|
|
accelerator: 'F11',
|
|
click: () => {
|
|
mainWindow.setFullScreen(!mainWindow.isFullScreen());
|
|
}
|
|
},
|
|
{
|
|
label: 'Entwicklertools',
|
|
accelerator: 'F12',
|
|
click: () => mainWindow.webContents.toggleDevTools()
|
|
}
|
|
]
|
|
},
|
|
{
|
|
label: 'Hilfe',
|
|
submenu: [
|
|
{
|
|
label: 'Über Metadaten-Crawler',
|
|
click: () => {
|
|
const { dialog } = require('electron');
|
|
dialog.showMessageBox(mainWindow, {
|
|
type: 'info',
|
|
title: 'Über Metadaten-Crawler',
|
|
message: 'Metadaten-Crawler (MC)',
|
|
detail: 'Version 1.0.0\n\nEin professionelles Tool zur Extraktion von Metadaten aus Bild- und Videodateien.\n\n© 2025 IntelSight',
|
|
buttons: ['OK']
|
|
});
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]);
|
|
|
|
Menu.setApplicationMenu(menu);
|
|
|
|
mainWindow.on('closed', () => {
|
|
mainWindow = null;
|
|
});
|
|
}
|
|
|
|
app.whenReady().then(() => {
|
|
createWindow();
|
|
|
|
app.on('activate', () => {
|
|
if (BrowserWindow.getAllWindows().length === 0) {
|
|
createWindow();
|
|
}
|
|
});
|
|
});
|
|
|
|
app.on('window-all-closed', () => {
|
|
if (process.platform !== 'darwin') {
|
|
app.quit();
|
|
}
|
|
});
|
|
|
|
// IPC handlers
|
|
ipcMain.handle('get-theme', () => isDarkMode);
|
|
|
|
ipcMain.on('minimize-window', () => {
|
|
mainWindow.minimize();
|
|
});
|
|
|
|
ipcMain.on('maximize-window', () => {
|
|
if (mainWindow.isMaximized()) {
|
|
mainWindow.unmaximize();
|
|
} else {
|
|
mainWindow.maximize();
|
|
}
|
|
});
|
|
|
|
ipcMain.on('close-window', () => {
|
|
mainWindow.close();
|
|
}); |