Электрон: Как мне заполнить меню из процесса рендеринга? - PullRequest
0 голосов
/ 08 февраля 2020

Я хотел бы создать меню избранных или недавно открытых документов для приложения Electron. Я могу легко отслеживать эти документы после их открытия, но как я могу динамически добавлять их в меню?

Что я узнал до сих пор:

  • Создать меню в основном процессе:

    menu=[
        {
            label: 'Some Application',
            submenu: [
                {   label: `Open …`, accelerator: 'CmdOrCtrl+O', id:'OPEN', click: send },
                {   label: `Documents …`, id:'DOCUMENTS', click: send, submenu: [] },
                {   type:'separator' },
                {   role: `quit`, accelerator: 'CmdOrCtrl+Q' }
            ]
        },
    ];
    
  • Использование remote в процессе рендеринга:

    const electron=require('electron');
    const { ipcRenderer, shell, remote } = electron;
    const {app,BrowserWindow,dialog,Menu,MenuItem}=remote;
    

У меня есть документы в файл JSON, но я не знаю, что делать дальше, чтобы добавить их в меню Documents выше.

1 Ответ

0 голосов
/ 08 февраля 2020

Я изучал это "недавно"; -).

Это встроенная функция: feat: пункт меню "Последние документы" # 11166

 {
      label: 'Open Recent',
      role: 'recentdocuments',
      submenu: [
        {
          label: 'Clear Recent',
          role: 'clearrecentdocuments'
        }
      ]
    },

И app.addRecentDocument (путь) и app.clearRecentDocuments () . Electron 8 добавляет эту функцию: dontAddToRecent к Windows showOpenDialog

Мне удалось заставить его работать на macOS, хотя я не смог понять, как это сделать Регистрация приложения еще вещь (через electron-builder, я полагаю), которая необходима для того, чтобы она работала на Windows.

Я также видел фрагмент кода ниже от здесь но у меня еще не было возможности проверить это. Кроме того, имейте в виду, что * * * * * * * * * * * * * * * * * * *

function updateRecents(path, clear = false) {
  const currentMenu = Menu.getApplicationMenu();
  if (!currentMenu) return;

  const recents = getItemByKey(currentMenu, 'recents');
  if (!recents) return;

  // Clear menu if requested.
  if (clear) {
    config.set('recentDocuments', []);
    recents.submenu.clear();
    recents.submenu.append(new MenuItem({ key: 'null', label: 'No Recent Documents', enabled: false }));
    Menu.setApplicationMenu(currentMenu);
    return;
  }

  const item = new MenuItem({
    label: require('path').basename(path),
    click: () => this.open(path)
  });

  // If first recent item clear empty placeholder.
  if (recents.submenu.items[0].key == 'null') {
    recents.submenu.clear();
    recents.submenu.append(item);
  }
  // Limit to maximum 10 recents.
  else if (recents.submenu.items.length >= 10) {
    const items = recents.submenu.items;
    recents.submenu.clear();
    items.push(item);
    items.slice(10).forEach((i) => recents.submenu.append(i));
  }
  // Otherwise just add item.
  else recents.submenu.append(item);

  // Update application menu.
  Menu.setApplicationMenu(currentMenu);
}
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1030 ''.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...