跳转至

工具栏配置以及实现

一、效果预演

后续实现过程中可能与当前有差异,会实时调整工具栏

  • 新建文件
  • 新建文件夹
  • 导入导出
    • 从Word导入
    • 从HTML导入
    • 从JSON导入
    • 从YAML导入
    • 从文本文件导入

    • 导出为Word
    • 导出为HTML
    • 导出为JSON

  • 打开文件
  • 打开文件夹

  • 另存为
  • 保存
  • 从磁盘重新读取

  • 退出
  • 撤销
  • 恢复

  • 拷贝
  • 剪切
  • 黏贴

  • 跳转到行
  • 在文件中查找
  • 在文件中替换
  • 编辑模式
  • 预览模式
  • 编辑/预览模式

  • 显示/隐藏资源管理器
  • 显示/隐藏制表符
  • 显示/隐藏换行符
  • 显示/隐藏行号
  • 显示/隐藏文章大纲

  • 折叠/展开标题
  • 重新用...编码打开
    • 常用编码(UTF-8、GB2312等)
  • 转为...编码
  • 特殊字体
  • 数学公式
  • markdown表格
  • 网页链接

  • 写作模板
    • 力扣题解模块
    • 问题处理模块
    • 文章封面
    • 论文模板
  • 文本
    • 图片链接
    • 折叠代码块
    • 有序链接列表
    • 文章更新日期
  • 来自文件
    • json
    • txt、log
    • ini、csv

  • Material
    • Admonition
  • Mermaid
    • 流程图
    • 序列图
    • 类图
    • 状态图
    • ......
  • PlantUml
    • 序列图
    • 用例图
    • 类图
    • 对象图
    • ........

  • 自定义模板
  • 模板管理
  • 系统设置
  • 主题设置
  • 编辑器设置
  • markdown解析器
  • xxx
  • Mermaid绘图
  • 电子表格
  • 配图创作
  • 绘图工具
  • xxx
  • 加解密插件
  • 各类转换器
  • 网络计算插件
  • 常用对照表
  • 菜鸟工具
  • w3cSchool工具
  • 百宝箱
  • ToolFK
  • ........
  • 菜鸟在线工具
  • 编程狮在线工具
  • 在线编解码工具
  • 在线IDE工具
  • ......
  • 版本发布

  • 键盘快捷方式
  • 使用文档
  • 提交创意/意见

  • 关于
  • 主页
  • 致谢
  • 检查更新
  • 联系我们

二、实现方案

2.1 src/main/menu.ts 新增

创建一个menu的文件夹,再创建一个menu.ts的文件,menu的文件夹专门处理跟菜单相关的东西。

这个网上有很多的教程,使用electron的Menu组件就行。

这里牵扯到menu要跟主进程窗口交互,所以这里需要将主窗口的锚点(没学过electron和js,不知道专业的叫啥)给传进去。

下面的是一部分示例的代码,完整代码参考前面的预览实现菜单栏。

src/main/menu.ts 参考

TypeScript
import { Menu } from 'electron'

const template = [
  {
    label: '文件',
    submenu: [
      {
        label: '新建文件',
        accelerator: 'ctrl+n',
        click: function () {
          alert('ctrl')
        }
      },
      {
        label: '新建窗口',
        accelerator: 'Ctrl+Shift+N',
        click: function () {
          alert('新建窗口')
        }
      }
    ]
  },
  {
    label: '编辑',
    submenu: [
      {
        label: '编辑文件'
      },
      {
        label: '编辑窗口'
      }
    ]
  }
]

export function getApplicationMenu(mainWindow) {
  return template
}

2.2 src/main/index.ts

先导入import { getApplicationMenu } from './menu/menu'

修改创建窗口的函数。参考如下:

src/main/index.ts 参考

TypeScript
function createWindow(): void {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 900,
    height: 670,
    show: false,
    title: 'HemyMarkdownEditor',
    autoHideMenuBar: false,
    ...(process.platform === 'linux' ? { icon } : {}),
    webPreferences: {
      preload: join(__dirname, '../preload/index.js'),
      sandbox: false
    }
  })

  mainWindow.on('ready-to-show', () => {
    mainWindow.show()
  })

  mainWindow.webContents.setWindowOpenHandler((details) => {
    shell.openExternal(details.url)
    return { action: 'deny' }
  })

  // HMR for renderer base on electron-vite cli.
  // Load the remote URL for development or the local html file for production.
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])
  } else {
    mainWindow.loadFile(join(__dirname, '../renderer/index.html'))
  }

  const menu = Menu.buildFromTemplate(getApplicationMenu(mainWindow))
  Menu.setApplicationMenu(menu)
}

这里要注意,修改了两个地方:

  • new BrowserWindow 需要将autoHideMenuBar这个地方修改为false,否则菜单不显示,默认隐藏。前后调试了一天,一直以为是代码什么地方写的有问题。
  • 使用Menu.setApplicationMenu(menu)显示菜单栏

三、成品展示

3.1 文件

3.2 编辑

3.3 视图

3.4 编码

3.5 插入

3.6 设置

3.7 工具

3.8 插件

3.9 在线工具

3.10 链接

3.11 帮助