mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 02:56:01 +00:00
save from electron menu
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
const electron = require('electron');
|
const electron = require('electron');
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
const { Menu } = require('electron');
|
const { Menu, ipcMain } = require('electron');
|
||||||
const { fork } = require('child_process');
|
const { fork } = require('child_process');
|
||||||
const { autoUpdater } = require('electron-updater');
|
const { autoUpdater } = require('electron-updater');
|
||||||
const Store = require('electron-store');
|
const Store = require('electron-store');
|
||||||
@@ -20,6 +20,7 @@ const store = new Store();
|
|||||||
// be closed automatically when the JavaScript object is garbage collected.
|
// be closed automatically when the JavaScript object is garbage collected.
|
||||||
let mainWindow;
|
let mainWindow;
|
||||||
let splashWindow;
|
let splashWindow;
|
||||||
|
let mainMenu;
|
||||||
|
|
||||||
log.transports.file.level = 'debug';
|
log.transports.file.level = 'debug';
|
||||||
autoUpdater.logger = log;
|
autoUpdater.logger = log;
|
||||||
@@ -51,6 +52,22 @@ function buildMenu() {
|
|||||||
mainWindow.webContents.executeJavaScript(`dbgate_openFile()`);
|
mainWindow.webContents.executeJavaScript(`dbgate_openFile()`);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: 'Save',
|
||||||
|
click() {
|
||||||
|
mainWindow.webContents.executeJavaScript(`dbgate_tabCommand('save')`);
|
||||||
|
},
|
||||||
|
accelerator: 'Ctrl+S',
|
||||||
|
id: 'save',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Save As',
|
||||||
|
click() {
|
||||||
|
mainWindow.webContents.executeJavaScript(`dbgate_tabCommand('saveAs')`);
|
||||||
|
},
|
||||||
|
accelerator: 'Ctrl+Shift+S',
|
||||||
|
id: 'saveAs',
|
||||||
|
},
|
||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
{ role: 'close' },
|
{ role: 'close' },
|
||||||
],
|
],
|
||||||
@@ -134,6 +151,13 @@ function buildMenu() {
|
|||||||
return Menu.buildFromTemplate(template);
|
return Menu.buildFromTemplate(template);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ipcMain.on('update-menu', async (event, arg) => {
|
||||||
|
const commands = await mainWindow.webContents.executeJavaScript(`getCurrentTabCommands()`);
|
||||||
|
console.log('getCurrentTabCommands', commands);
|
||||||
|
mainMenu.getMenuItemById('save').enabled = !!commands.save;
|
||||||
|
mainMenu.getMenuItemById('saveAs').enabled = !!commands.saveAs;
|
||||||
|
});
|
||||||
|
|
||||||
function createWindow() {
|
function createWindow() {
|
||||||
const bounds = store.get('winBounds');
|
const bounds = store.get('winBounds');
|
||||||
|
|
||||||
@@ -150,7 +174,8 @@ function createWindow() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
mainWindow.setMenu(buildMenu());
|
mainMenu = buildMenu();
|
||||||
|
mainWindow.setMenu(mainMenu);
|
||||||
|
|
||||||
function loadMainWindow() {
|
function loadMainWindow() {
|
||||||
const startUrl =
|
const startUrl =
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import useTheme from './theme/useTheme';
|
|||||||
import usePropsCompare from './utility/usePropsCompare';
|
import usePropsCompare from './utility/usePropsCompare';
|
||||||
import { useShowMenu } from './modals/showMenu';
|
import { useShowMenu } from './modals/showMenu';
|
||||||
import { setSelectedTabFunc } from './utility/common';
|
import { setSelectedTabFunc } from './utility/common';
|
||||||
|
import getElectron from './utility/getElectron';
|
||||||
|
|
||||||
// const files = [
|
// const files = [
|
||||||
// { name: 'app.js' },
|
// { name: 'app.js' },
|
||||||
@@ -219,6 +220,16 @@ export default function TabsPanel() {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
const electron = getElectron();
|
||||||
|
if (electron) {
|
||||||
|
const { ipcRenderer } = electron;
|
||||||
|
const activeTab = tabs.find(x => x.selected);
|
||||||
|
window['activeTabId'] = activeTab ? activeTab.tabid : null;
|
||||||
|
ipcRenderer.send('update-menu');
|
||||||
|
}
|
||||||
|
}, [tabs]);
|
||||||
|
|
||||||
// console.log(
|
// console.log(
|
||||||
// 't',
|
// 't',
|
||||||
// tabs.map(x => x.tooltip)
|
// tabs.map(x => x.tooltip)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
|
import _ from 'lodash';
|
||||||
import './index.css';
|
import './index.css';
|
||||||
import '@mdi/font/css/materialdesignicons.css';
|
import '@mdi/font/css/materialdesignicons.css';
|
||||||
import App from './App';
|
import App from './App';
|
||||||
@@ -22,6 +23,17 @@ import localStorageGarbageCollector from './utility/localStorageGarbageCollector
|
|||||||
// import 'ace-builds/src-noconflict/snippets/mysql';
|
// import 'ace-builds/src-noconflict/snippets/mysql';
|
||||||
|
|
||||||
localStorageGarbageCollector();
|
localStorageGarbageCollector();
|
||||||
|
window['tabExports'] = {};
|
||||||
|
window['getCurrentTabCommands'] = () => {
|
||||||
|
const tabid = window['activeTabId'];
|
||||||
|
return _.mapValues(window['tabExports'][tabid] || {}, v => !!v);
|
||||||
|
};
|
||||||
|
window['dbgate_tabCommand'] = cmd => {
|
||||||
|
const tabid = window['activeTabId'];
|
||||||
|
const commands = window['tabExports'][tabid];
|
||||||
|
const func = (commands || {})[cmd];
|
||||||
|
if (func) func();
|
||||||
|
};
|
||||||
|
|
||||||
ReactDOM.render(<App />, document.getElementById('root'));
|
ReactDOM.render(<App />, document.getElementById('root'));
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import axios from '../utility/axios';
|
import axios from '../utility/axios';
|
||||||
import { changeTab } from '../utility/common';
|
import { changeTab } from '../utility/common';
|
||||||
|
import getElectron from '../utility/getElectron';
|
||||||
import { useOpenedTabs, useSetOpenedTabs } from '../utility/globalState';
|
import { useOpenedTabs, useSetOpenedTabs } from '../utility/globalState';
|
||||||
import keycodes from '../utility/keycodes';
|
import keycodes from '../utility/keycodes';
|
||||||
import SaveFileToolbarButton from '../utility/SaveFileToolbarButton';
|
import SaveFileToolbarButton from '../utility/SaveFileToolbarButton';
|
||||||
@@ -72,6 +73,23 @@ export default function SaveTabModal({
|
|||||||
}
|
}
|
||||||
}, [tabVisible, handleKeyboard, canSave]);
|
}, [tabVisible, handleKeyboard, canSave]);
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
const electron = getElectron();
|
||||||
|
if (electron) {
|
||||||
|
const { ipcRenderer } = electron;
|
||||||
|
window['tabExports'][tabid] = {
|
||||||
|
save: handleSaveRef.current,
|
||||||
|
saveAs: saveFileModalState.open,
|
||||||
|
};
|
||||||
|
ipcRenderer.send('update-menu');
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
delete window['tabExports'][tabid];
|
||||||
|
ipcRenderer.send('update-menu');
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<SaveFileModal
|
<SaveFileModal
|
||||||
|
|||||||
Reference in New Issue
Block a user