lossless-cut/public/menu.js

391 wiersze
11 KiB
JavaScript
Czysty Zwykły widok Historia

2022-11-23 09:00:00 +00:00
const electron = require('electron');
const i18n = require('i18next');
2016-10-30 10:57:12 +00:00
2018-09-30 20:08:36 +00:00
const { Menu } = electron;
2016-10-30 10:57:12 +00:00
const { homepage, getReleaseUrl, licensesPage } = require('./constants');
2016-10-30 10:57:12 +00:00
2018-02-17 14:15:30 +00:00
module.exports = (app, mainWindow, newVersion) => {
const menu = [
...(process.platform === 'darwin' ? [{ role: 'appMenu' }] : []),
2016-10-30 10:57:12 +00:00
{
label: i18n.t('File'),
submenu: [
{
label: i18n.t('Open'),
accelerator: 'CmdOrCtrl+O',
async click() {
mainWindow.webContents.send('openFilesDialog');
},
},
{
label: i18n.t('Close'),
accelerator: 'CmdOrCtrl+W',
async click() {
2022-02-23 11:43:19 +00:00
mainWindow.webContents.send('closeCurrentFile');
},
},
2021-08-28 14:47:43 +00:00
{
label: i18n.t('Close batch'),
async click() {
2022-02-23 11:43:19 +00:00
mainWindow.webContents.send('closeBatchFiles');
2021-08-28 14:47:43 +00:00
},
},
{ type: 'separator' },
{
label: i18n.t('Import project (LLC)...'),
click() {
mainWindow.webContents.send('importEdlFile', 'llc');
},
},
2020-12-11 15:15:35 +00:00
{
label: i18n.t('Export project (LLC)...'),
2020-12-11 15:15:35 +00:00
click() {
mainWindow.webContents.send('exportEdlFile', 'llc');
2020-12-11 15:15:35 +00:00
},
},
2020-11-18 20:24:20 +00:00
{
label: i18n.t('Import project'),
2020-11-18 20:24:20 +00:00
submenu: [
{
label: i18n.t('Times in seconds (CSV)'),
click() {
mainWindow.webContents.send('importEdlFile', 'csv');
},
},
{
label: i18n.t('Frame numbers (CSV)'),
click() {
mainWindow.webContents.send('importEdlFile', 'csv-frames');
},
},
{
label: i18n.t('EDL (MPlayer)'),
click() {
mainWindow.webContents.send('importEdlFile', 'mplayer');
},
},
{
label: i18n.t('Text chapters / YouTube'),
click() {
mainWindow.webContents.send('importEdlFile', 'youtube');
},
},
2020-11-18 20:24:20 +00:00
{
label: i18n.t('DaVinci Resolve / Final Cut Pro XML'),
2020-11-18 20:24:20 +00:00
click() {
mainWindow.webContents.send('importEdlFile', 'xmeml');
},
},
2022-07-17 21:36:57 +00:00
{
label: i18n.t('Final Cut Pro FCPX / FCPXML'),
click() {
mainWindow.webContents.send('importEdlFile', 'fcpxml');
},
},
{
label: i18n.t('CUE sheet file'),
click() {
mainWindow.webContents.send('importEdlFile', 'cue');
},
},
{
label: i18n.t('PotPlayer Bookmarks (.pbf)'),
click() {
mainWindow.webContents.send('importEdlFile', 'pbf');
},
},
2020-11-18 20:24:20 +00:00
],
},
{
label: i18n.t('Export project'),
submenu: [
{
label: i18n.t('Times in seconds (CSV)'),
click() {
mainWindow.webContents.send('exportEdlFile', 'csv');
},
},
{
label: i18n.t('Timestamps (CSV)'),
click() {
2020-12-14 23:49:08 +00:00
mainWindow.webContents.send('exportEdlFile', 'csv-human');
},
},
{
label: i18n.t('Frame numbers (CSV)'),
click() {
mainWindow.webContents.send('exportEdlFile', 'csv-frames');
},
},
2020-12-14 23:49:08 +00:00
{
label: i18n.t('Timestamps (TSV/TXT)'),
2020-12-14 23:49:08 +00:00
click() {
mainWindow.webContents.send('exportEdlFile', 'tsv-human');
},
},
{
label: i18n.t('Start times as YouTube Chapters'),
click() {
mainWindow.webContents.send('exportEdlYouTube');
},
},
],
},
{ type: 'separator' },
{
label: i18n.t('Convert to supported format'),
click() {
mainWindow.webContents.send('html5ify');
},
},
2020-11-22 22:53:04 +00:00
{
label: i18n.t('Fix incorrect duration'),
2020-11-22 22:53:04 +00:00
click() {
mainWindow.webContents.send('fixInvalidDuration');
},
},
{ type: 'separator' },
2020-12-11 15:15:35 +00:00
{ type: 'separator' },
{
label: i18n.t('Settings'),
accelerator: 'CmdOrCtrl+,',
click() {
2022-02-23 11:43:19 +00:00
mainWindow.webContents.send('toggleSettings');
},
},
2022-08-12 09:37:39 +00:00
// Due to Apple Review Guidelines, we cannot include an Exit menu item here
// Apple has their own Quit from the app menu
...(process.platform !== 'darwin' ? [
{ type: 'separator' },
{
label: i18n.t('Exit'),
click() {
app.quit();
},
},
2022-08-12 09:37:39 +00:00
] : []),
],
2020-02-20 10:41:01 +00:00
},
{
label: i18n.t('Edit'),
submenu: [
// https://github.com/mifi/lossless-cut/issues/610
// https://github.com/mifi/lossless-cut/issues/1183
{ role: 'undo', label: i18n.t('Undo') },
{ role: 'redo', label: i18n.t('Redo') },
{ type: 'separator' },
2021-08-13 16:20:29 +00:00
{ role: 'cut', label: i18n.t('Cut') },
{ role: 'copy', label: i18n.t('Copy') },
{ role: 'paste', label: i18n.t('Paste') },
{ role: 'selectall', label: i18n.t('Select All') },
{ type: 'separator' },
{
label: i18n.t('Segments'),
submenu: [
2020-12-14 11:29:17 +00:00
{
label: i18n.t('Clear all segments'),
2020-12-14 11:29:17 +00:00
click() {
mainWindow.webContents.send('clearSegments');
},
},
{
label: i18n.t('Reorder segments by start time'),
click() {
mainWindow.webContents.send('reorderSegsByStartTime');
},
},
{
label: i18n.t('Create num segments'),
click() {
mainWindow.webContents.send('createNumSegments');
},
},
{
label: i18n.t('Create fixed duration segments'),
click() {
mainWindow.webContents.send('createFixedDurationSegments');
},
},
2022-05-24 05:31:48 +00:00
{
label: i18n.t('Create random segments'),
click() {
mainWindow.webContents.send('createRandomSegments');
},
},
{
label: i18n.t('Invert all segments on timeline'),
click() {
mainWindow.webContents.send('invertAllSegments');
},
},
{
label: i18n.t('Fill gaps between segments'),
click() {
mainWindow.webContents.send('fillSegmentsGaps');
},
},
{
label: i18n.t('Combine overlapping segments'),
click() {
mainWindow.webContents.send('combineOverlappingSegments');
},
},
2022-02-18 06:34:20 +00:00
{
label: i18n.t('Shuffle segments order'),
click() {
mainWindow.webContents.send('shuffleSegments');
},
},
2022-03-01 15:10:25 +00:00
{
label: i18n.t('Shift all segments on timeline'),
click() {
mainWindow.webContents.send('shiftAllSegmentTimes');
},
},
],
},
2020-12-11 15:15:35 +00:00
{
label: i18n.t('Tracks'),
2020-12-11 15:15:35 +00:00
submenu: [
{
label: i18n.t('Extract all tracks'),
2020-12-11 15:15:35 +00:00
click() {
2022-02-23 11:43:19 +00:00
mainWindow.webContents.send('extractAllStreams');
2020-12-11 15:15:35 +00:00
},
},
{
label: i18n.t('Edit tracks / metadata tags'),
2020-12-11 15:15:35 +00:00
click() {
mainWindow.webContents.send('showStreamsSelector');
},
},
],
},
],
2020-02-20 10:41:01 +00:00
},
{
label: i18n.t('View'),
submenu: [
2021-08-13 16:20:29 +00:00
{ role: 'togglefullscreen', label: i18n.t('Toggle Full Screen') },
],
},
2020-02-20 10:41:01 +00:00
2020-03-26 13:31:11 +00:00
// On Windows the windowMenu has a close Ctrl+W which clashes with File->Close shortcut
...(process.platform === 'darwin'
2021-08-13 16:20:29 +00:00
? [{ role: 'windowMenu', label: i18n.t('Window') }]
2020-03-26 13:31:11 +00:00
: [{
label: i18n.t('Window'),
2021-08-13 16:20:29 +00:00
submenu: [{ role: 'minimize', label: i18n.t('Minimize') }],
2020-03-26 13:31:11 +00:00
}]
),
2016-10-30 10:57:12 +00:00
{
label: i18n.t('Tools'),
submenu: [
2022-02-23 13:16:02 +00:00
{
label: i18n.t('Merge/concatenate files'),
click() {
mainWindow.webContents.send('concatCurrentBatch');
},
},
{
label: i18n.t('Set custom start offset/timecode'),
click() {
2022-02-23 13:16:02 +00:00
mainWindow.webContents.send('askSetStartTimeOffset');
},
},
{
label: i18n.t('Detect black scenes'),
click() {
mainWindow.webContents.send('detectBlackScenes');
},
},
{
label: i18n.t('Detect silent scenes'),
click() {
mainWindow.webContents.send('detectSilentScenes');
},
},
{
label: i18n.t('Detect scene changes'),
click() {
mainWindow.webContents.send('detectSceneChanges');
},
},
{
label: i18n.t('Create segments from keyframes'),
click() {
mainWindow.webContents.send('createSegmentsFromKeyframes');
},
},
{
label: i18n.t('Last ffmpeg commands'),
click() { mainWindow.webContents.send('toggleLastCommands'); },
},
{ type: 'separator' },
2021-08-13 16:20:29 +00:00
{ role: 'toggleDevTools', label: i18n.t('Toggle Developer Tools') },
],
},
{
role: 'help',
2021-08-13 16:20:29 +00:00
label: i18n.t('Help'),
submenu: [
{
label: i18n.t('How to use'),
click() { electron.shell.openExternal('https://mifi.no/losslesscut/usage'); },
},
{
label: i18n.t('FAQ'),
click() { electron.shell.openExternal('https://mifi.no/losslesscut/faq'); },
},
2021-11-15 07:32:27 +00:00
{
label: i18n.t('Troubleshooting'),
click() { electron.shell.openExternal('https://mifi.no/losslesscut/troubleshooting'); },
2021-11-15 07:32:27 +00:00
},
{
label: i18n.t('Learn More'),
click() { electron.shell.openExternal(homepage); },
},
{
label: i18n.t('Licenses'),
click() { electron.shell.openExternal(licensesPage); },
},
{ type: 'separator' },
{
label: i18n.t('Keyboard & mouse shortcuts'.replace(/&/g, '&&')),
click() {
mainWindow.webContents.send('toggleKeyboardShortcuts');
},
},
{
label: i18n.t('Report an error'),
click() { mainWindow.webContents.send('openSendReportDialog'); },
},
{
label: i18n.t('Version'),
click() { mainWindow.webContents.send('openAbout'); },
},
],
},
];
2016-10-30 10:57:12 +00:00
2018-02-17 14:15:30 +00:00
if (newVersion) {
menu.push({
label: i18n.t('New version!'),
2018-02-17 14:15:30 +00:00
submenu: [
{
label: i18n.t('Download {{version}}', { version: newVersion }),
click() { electron.shell.openExternal(getReleaseUrl(newVersion)); },
2018-02-17 14:15:30 +00:00
},
],
});
}
2016-10-30 10:57:12 +00:00
Menu.setApplicationMenu(Menu.buildFromTemplate(menu));
};