178 lines
6.9 KiB
JavaScript
178 lines
6.9 KiB
JavaScript
/**
|
|
* Module for Menu functions.
|
|
*/
|
|
import { app, Menu, MenuItem, dialog } from 'electron';
|
|
import path from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
import settingsService from './settings-service.js';
|
|
import { mainWindow } from '../main.js'; // this is bad practice, however i dont have any other good way of doing it
|
|
let zoom = 1;
|
|
|
|
const menuService = {};
|
|
|
|
menuService.createMenu = (window) => {
|
|
let converse;
|
|
const application = new Menu();
|
|
|
|
application.append(new MenuItem({
|
|
label: 'RS Desktop',
|
|
submenu: (converse = Menu.buildFromTemplate([
|
|
{
|
|
label: 'Reconnect',
|
|
accelerator: 'CmdOrCtrl+R',
|
|
click: () => {
|
|
window.show();
|
|
window.loadFile('index.html').catch((reason) => {
|
|
console.log(reason);
|
|
app.isQuitting = true;
|
|
app.quit();
|
|
});
|
|
}
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
label: 'Minimize on close',
|
|
type: 'checkbox',
|
|
id: 'minimize-on-close',
|
|
checked: settingsService.get('minimizeOnClose'),
|
|
click: () => {
|
|
settingsService.set('minimizeOnClose', converse.getMenuItemById('minimize-on-close').checked);
|
|
}
|
|
},
|
|
{
|
|
label: 'Hide Menubar',
|
|
type: 'checkbox',
|
|
id: 'hide-menubar',
|
|
checked: settingsService.get('hideMenubar'),
|
|
accelerator: 'alt', // just felt like this would be a good addition in case the user accidentally hides the alt bar
|
|
click: () => {
|
|
const menuItem = converse.getMenuItemById('hide-menubar');
|
|
settingsService.set('hideMenubar', menuItem.checked);
|
|
window.setAutoHideMenuBar(menuItem.checked);
|
|
}
|
|
},
|
|
{
|
|
label: 'Encrypt by default',
|
|
type: 'checkbox',
|
|
id: 'encrypt-by-default',
|
|
checked: settingsService.get('omemo_default'),
|
|
click: () => {
|
|
const menuItem = converse.getMenuItemById('encrypt-by-default');
|
|
settingsService.set('omemo_default', menuItem.checked);
|
|
}
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
label: 'Help', // migrate this here
|
|
submenu: Menu.buildFromTemplate([
|
|
{
|
|
label: 'Debug info',
|
|
accelerator: 'F12',
|
|
click: () => {
|
|
window.webContents.openDevTools();
|
|
}
|
|
},
|
|
])},
|
|
|
|
{
|
|
label: 'Navigation', // migrate this here
|
|
submenu: Menu.buildFromTemplate([
|
|
{
|
|
label: '<',
|
|
accelerator: 'Alt+Left', // for this it was alt left arrow key
|
|
click() {
|
|
if (mainWindow.webContents.canGoBack()) {
|
|
mainWindow.webContents.goBack();
|
|
}
|
|
}
|
|
},
|
|
{
|
|
label: '>',
|
|
accelerator: 'Alt+Right', // shortcut for this was alt and right arrow key i think
|
|
click() {
|
|
if (mainWindow.webContents.canGoForward()) {
|
|
mainWindow.webContents.goForward();
|
|
}
|
|
}
|
|
},
|
|
{
|
|
label: '🔄',
|
|
click() {
|
|
mainWindow.reload();
|
|
}
|
|
},
|
|
])},
|
|
{ type: 'separator' },
|
|
{
|
|
label: 'Reset Zoom',
|
|
accelerator: 'Ctrl+0', // shortcut like in chrome/firefox
|
|
click() {
|
|
zoom = 1
|
|
mainWindow.webContents.setZoomFactor(zoom)
|
|
}
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
label: 'Quit',
|
|
accelerator: 'CmdOrCtrl+Q',
|
|
click: () => {
|
|
app.isQuitting = true;
|
|
app.quit();
|
|
},
|
|
},
|
|
]))
|
|
}));
|
|
|
|
application.append(new MenuItem({
|
|
label: 'Edit', // i dont know what the point of this is, we have keyboards and they use the same shortcuts, but i will leave this alone for now
|
|
submenu: Menu.buildFromTemplate([
|
|
{ label: 'Undo', accelerator: 'CmdOrCtrl+Z', role: 'undo' },
|
|
{ label: 'Redo', accelerator: 'Shift+CmdOrCtrl+Z', role: 'redo' },
|
|
{ label: 'Cut', accelerator: 'CmdOrCtrl+X', role: 'cut' },
|
|
{ label: 'Copy', accelerator: 'CmdOrCtrl+C', role: 'copy' },
|
|
{ label: 'Paste', accelerator: 'CmdOrCtrl+V', role: 'paste' },
|
|
{ label: 'Select All', accelerator: 'CmdOrCtrl+A', role: 'selectAll' },
|
|
])
|
|
}));
|
|
|
|
application.append(new MenuItem({
|
|
label: 'Themes',
|
|
submenu: Menu.buildFromTemplate([
|
|
{
|
|
label: 'Coming soon',
|
|
click: () => {
|
|
window.webContents.openDevTools(); // TODO: theme switching
|
|
}
|
|
|
|
// {
|
|
/// label: 'Night',
|
|
// click: () => {
|
|
// window.webContents.openDevTools(); // TODO: proper dark mode
|
|
// }
|
|
// },
|
|
// {
|
|
// label: 'Orange',
|
|
// click: () => {
|
|
// window.webContents.openDevTools(); // Orange & white theme
|
|
// }
|
|
// },
|
|
// {
|
|
//// label: 'Orange + Night',
|
|
// click: () => {
|
|
// window.webContents.openDevTools(); // Orange & dark theme
|
|
// }
|
|
// },
|
|
// {
|
|
// label: 'Fruit Tiger Aero',
|
|
// // click: () => {
|
|
// window.webContents.openDevTools(); // Blue & green theme
|
|
|
|
}
|
|
])
|
|
}));
|
|
|
|
Menu.setApplicationMenu(application);
|
|
};
|
|
|
|
export default menuService;
|