移动代码
This commit is contained in:
93
src/main/code-launchpad/code-launchpad.ts
Normal file
93
src/main/code-launchpad/code-launchpad.ts
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
import { BrowserWindow, screen, shell, Tray } from 'electron'
|
||||||
|
import { settingsManager } from '../settings'
|
||||||
|
import { codeLaunchpadIcon } from '../resources'
|
||||||
|
import path from 'path'
|
||||||
|
import { is } from '@electron-toolkit/utils'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建代码启动台窗口。
|
||||||
|
* @return 布尔值,表明创建是否成功
|
||||||
|
*/
|
||||||
|
export function createCodeLaunchpadWindow(closeOnBlur: boolean): boolean {
|
||||||
|
// 不允许重复创建
|
||||||
|
if (global.codeLaunchpadWindow !== null) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
const windowWidth = settingsManager._settings?.codeLaunchpadWidth
|
||||||
|
? settingsManager._settings?.codeLaunchpadWidth
|
||||||
|
: 460
|
||||||
|
const windowHeight = settingsManager._settings?.codeLaunchpadHeight
|
||||||
|
? settingsManager._settings?.codeLaunchpadHeight
|
||||||
|
: 760
|
||||||
|
const position = settingsManager._settings?.codeLaunchpadPosition
|
||||||
|
? settingsManager._settings.codeLaunchpadPosition
|
||||||
|
: 'left top'
|
||||||
|
|
||||||
|
const codeLaunchpadWindow = new BrowserWindow({
|
||||||
|
width: windowWidth,
|
||||||
|
height: windowHeight,
|
||||||
|
x:
|
||||||
|
position === 'left top' || position === 'left bottom'
|
||||||
|
? 0
|
||||||
|
: screen.getPrimaryDisplay().workArea.width - windowWidth,
|
||||||
|
y:
|
||||||
|
position === 'left top' || position === 'right top'
|
||||||
|
? 0
|
||||||
|
: screen.getPrimaryDisplay().workArea.height - windowHeight,
|
||||||
|
frame: false,
|
||||||
|
show: false,
|
||||||
|
autoHideMenuBar: true,
|
||||||
|
// 代码启动台需要置顶
|
||||||
|
alwaysOnTop: true,
|
||||||
|
resizable: false,
|
||||||
|
backgroundColor: '#1f1f1f',
|
||||||
|
icon: codeLaunchpadIcon,
|
||||||
|
webPreferences: {
|
||||||
|
preload: path.join(__dirname, '../preload/index.mjs'),
|
||||||
|
sandbox: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
codeLaunchpadWindow.on('ready-to-show', () => {
|
||||||
|
codeLaunchpadWindow.show()
|
||||||
|
})
|
||||||
|
|
||||||
|
// 如有必要,失去焦点时自动关闭
|
||||||
|
if (closeOnBlur) {
|
||||||
|
codeLaunchpadWindow.on('blur', () => {
|
||||||
|
codeLaunchpadWindow.close()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭代码启动台时
|
||||||
|
codeLaunchpadWindow.on('close', () => {
|
||||||
|
global.codeLaunchpadWindow = null
|
||||||
|
})
|
||||||
|
|
||||||
|
codeLaunchpadWindow.webContents.setWindowOpenHandler((details) => {
|
||||||
|
shell.openExternal(details.url)
|
||||||
|
return { action: 'deny' }
|
||||||
|
})
|
||||||
|
|
||||||
|
// 开发和生产环境的各自设置
|
||||||
|
if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
|
||||||
|
codeLaunchpadWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] + '#/codeLaunchpad/IDEs')
|
||||||
|
} else {
|
||||||
|
codeLaunchpadWindow.loadFile(path.join(__dirname, '../renderer/index.html'), {
|
||||||
|
hash: '/codeLaunchpad/IDEs'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
global.codeLaunchpadWindow = codeLaunchpadWindow
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createCodeLaunchpadTray(): Tray {
|
||||||
|
const tray = new Tray(codeLaunchpadIcon)
|
||||||
|
|
||||||
|
tray.on('click', () => createCodeLaunchpadWindow(true))
|
||||||
|
|
||||||
|
return tray
|
||||||
|
}
|
||||||
@@ -6,8 +6,6 @@ import type {
|
|||||||
IDECode
|
IDECode
|
||||||
} from '@my-type/settings'
|
} from '@my-type/settings'
|
||||||
import { execSync } from 'node:child_process'
|
import { execSync } from 'node:child_process'
|
||||||
import { BrowserWindow, screen, shell, Tray } from 'electron'
|
|
||||||
import { is } from '@electron-toolkit/utils'
|
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import { loadJsonFile } from 'load-json-file'
|
import { loadJsonFile } from 'load-json-file'
|
||||||
import os from 'os'
|
import os from 'os'
|
||||||
@@ -17,7 +15,6 @@ import {
|
|||||||
JetBrainsStateDto
|
JetBrainsStateDto
|
||||||
} from '@my-type/jetbrains-state-tools'
|
} from '@my-type/jetbrains-state-tools'
|
||||||
import { settingsManager } from '../settings'
|
import { settingsManager } from '../settings'
|
||||||
import { codeLaunchpadIcon } from '../resources'
|
|
||||||
import { isNodeError } from '@my-type/node-error'
|
import { isNodeError } from '@my-type/node-error'
|
||||||
import { JetBrainsDataProductDto } from '@my-type/jetbrains-data-products'
|
import { JetBrainsDataProductDto } from '@my-type/jetbrains-data-products'
|
||||||
|
|
||||||
@@ -233,91 +230,3 @@ export async function checkIDEsVersion(): Promise<checkIDEsVersionDto> {
|
|||||||
global.installedIDEsVersion = result
|
global.installedIDEsVersion = result
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建代码启动台窗口。
|
|
||||||
* @return 布尔值,表明创建是否成功
|
|
||||||
*/
|
|
||||||
export function createCodeLaunchpadWindow(closeOnBlur: boolean): boolean {
|
|
||||||
// 不允许重复创建
|
|
||||||
if (global.codeLaunchpadWindow !== null) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
const windowWidth = settingsManager._settings?.codeLaunchpadWidth
|
|
||||||
? settingsManager._settings?.codeLaunchpadWidth
|
|
||||||
: 460
|
|
||||||
const windowHeight = settingsManager._settings?.codeLaunchpadHeight
|
|
||||||
? settingsManager._settings?.codeLaunchpadHeight
|
|
||||||
: 760
|
|
||||||
const position = settingsManager._settings?.codeLaunchpadPosition
|
|
||||||
? settingsManager._settings.codeLaunchpadPosition
|
|
||||||
: 'left top'
|
|
||||||
|
|
||||||
const codeLaunchpadWindow = new BrowserWindow({
|
|
||||||
width: windowWidth,
|
|
||||||
height: windowHeight,
|
|
||||||
x:
|
|
||||||
position === 'left top' || position === 'left bottom'
|
|
||||||
? 0
|
|
||||||
: screen.getPrimaryDisplay().workArea.width - windowWidth,
|
|
||||||
y:
|
|
||||||
position === 'left top' || position === 'right top'
|
|
||||||
? 0
|
|
||||||
: screen.getPrimaryDisplay().workArea.height - windowHeight,
|
|
||||||
frame: false,
|
|
||||||
show: false,
|
|
||||||
autoHideMenuBar: true,
|
|
||||||
// 代码启动台需要置顶
|
|
||||||
alwaysOnTop: true,
|
|
||||||
resizable: false,
|
|
||||||
backgroundColor: '#1f1f1f',
|
|
||||||
icon: codeLaunchpadIcon,
|
|
||||||
webPreferences: {
|
|
||||||
preload: path.join(__dirname, '../preload/index.mjs'),
|
|
||||||
sandbox: false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
codeLaunchpadWindow.on('ready-to-show', () => {
|
|
||||||
codeLaunchpadWindow.show()
|
|
||||||
})
|
|
||||||
|
|
||||||
// 如有必要,失去焦点时自动关闭
|
|
||||||
if (closeOnBlur) {
|
|
||||||
codeLaunchpadWindow.on('blur', () => {
|
|
||||||
codeLaunchpadWindow.close()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 关闭代码启动台时
|
|
||||||
codeLaunchpadWindow.on('close', () => {
|
|
||||||
global.codeLaunchpadWindow = null
|
|
||||||
})
|
|
||||||
|
|
||||||
codeLaunchpadWindow.webContents.setWindowOpenHandler((details) => {
|
|
||||||
shell.openExternal(details.url)
|
|
||||||
return { action: 'deny' }
|
|
||||||
})
|
|
||||||
|
|
||||||
// 开发和生产环境的各自设置
|
|
||||||
if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
|
|
||||||
codeLaunchpadWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] + '#/codeLaunchpad/IDEs')
|
|
||||||
} else {
|
|
||||||
codeLaunchpadWindow.loadFile(path.join(__dirname, '../renderer/index.html'), {
|
|
||||||
hash: '/codeLaunchpad/IDEs'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
global.codeLaunchpadWindow = codeLaunchpadWindow
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
export function createCodeLaunchpadTray(): Tray {
|
|
||||||
const tray = new Tray(codeLaunchpadIcon)
|
|
||||||
|
|
||||||
tray.on('click', () => createCodeLaunchpadWindow(true))
|
|
||||||
|
|
||||||
return tray
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -4,14 +4,14 @@ import { saveSettingsToLocal, updateSettingsFromLocal } from './settings'
|
|||||||
import {
|
import {
|
||||||
checkIDEs,
|
checkIDEs,
|
||||||
checkIDEsVersion,
|
checkIDEsVersion,
|
||||||
createCodeLaunchpadTray,
|
|
||||||
createCodeLaunchpadWindow,
|
|
||||||
getIDEs,
|
getIDEs,
|
||||||
getIDEsVersion
|
getIDEsVersion
|
||||||
} from './code-launchpad/ide-versions-check'
|
} from './code-launchpad/ide-versions-check'
|
||||||
import { fanToolsIcon } from './resources'
|
import { fanToolsIcon } from './resources'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import { getJetBrainsProjects, getVscodeProjects, openProject } from './code-launchpad/ide-projects'
|
import { getJetBrainsProjects, getVscodeProjects, openProject } from './code-launchpad/ide-projects'
|
||||||
|
import { createCodeLaunchpadTray, createCodeLaunchpadWindow } from './code-launchpad/code-launchpad'
|
||||||
|
import type { IDECode } from '@my-type/settings'
|
||||||
|
|
||||||
let mainWindow: BrowserWindow | null = null
|
let mainWindow: BrowserWindow | null = null
|
||||||
// @ts-ignore 保存引用,禁用报错
|
// @ts-ignore 保存引用,禁用报错
|
||||||
@@ -131,7 +131,7 @@ app.whenReady().then(async () => {
|
|||||||
ipcMain.handle('codeLaunchpad:checkIDEsVersion', checkIDEsVersion)
|
ipcMain.handle('codeLaunchpad:checkIDEsVersion', checkIDEsVersion)
|
||||||
ipcMain.handle('codeLaunchpad:getVSCodeProjects', getVscodeProjects)
|
ipcMain.handle('codeLaunchpad:getVSCodeProjects', getVscodeProjects)
|
||||||
ipcMain.handle('codeLaunchpad:getJetBrainsProjects', getJetBrainsProjects)
|
ipcMain.handle('codeLaunchpad:getJetBrainsProjects', getJetBrainsProjects)
|
||||||
ipcMain.handle('codeLaunchpad:openProject', (_, ide: string, path: string) => {
|
ipcMain.handle('codeLaunchpad:openProject', (_, ide: IDECode, path: string) => {
|
||||||
return openProject(ide, path)
|
return openProject(ide, path)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user