worklog-reminder

Форк
0
92 строки · 2.3 Кб
1
import path from 'path';
2
import { app, Menu, Tray } from 'electron';
3
import os from 'os';
4
import About from 'electron-about';
5
import config from '../../app.config.main';
6
import OpenInShellHandler from '../Event/RendererHandler/OpenInShellHandler';
7
import pkg from '../../../package.json';
8

9
class AppTray {
10
  /**
11
   * @param {WindowManager} windowManager
12
   */
13
  constructor(windowManager) {
14
    this.windowManager = windowManager;
15
    this.tray = new Tray(this._resolveIcon());
16
    this.tray.setContextMenu(this._createContextMenu());
17
    this.tray.closeContextMenu();
18
  }
19

20
  setHandlers() {
21
    this.tray.on('double-click', this._toggleWindow.bind(this));
22
    this.tray.on('click', (event) => {
23
      if (process.platform === 'darwin') {
24
        this.tray.setContextMenu(null);
25
      }
26

27
      this._showMainWindow(event);
28
    });
29

30
    this.tray.on('right-click', () => {
31
      if (process.platform === 'darwin') {
32
        this.tray.setContextMenu(this._createContextMenu());
33
      }
34
      this.tray.popUpContextMenu();
35
    });
36
  }
37

38
  _showMainWindow(event) {
39
    const mainWindow = this.windowManager.getMainWindow();
40

41
    this._toggleWindow();
42

43
    if (mainWindow.isVisible() && process.defaultApp && event.metaKey) {
44
      mainWindow.openDevTools({ mode: 'detach' });
45
    }
46
  }
47

48
  _createContextMenu() {
49
    const menuItems = [
50
      About.makeMenuItem('', {
51
        icon: 'https://github.com/Doka-NT/worklog-reminder/raw/main/static/appIconColored.png',
52
        appName: pkg.productName,
53
        version: `Version ${pkg.version}`,
54
        copyright: `© ${pkg.author.name}`,
55
      }),
56
      {
57
        label: 'Help',
58
        click: () => {
59
          new OpenInShellHandler().handle({ payload: 'https://github.com/Doka-NT/worklog-reminder' });
60
        },
61
      },
62
      { label: 'Quit', click: () => app.quit() },
63
    ];
64

65
    if (process.platform === 'linux') {
66
      menuItems.unshift({
67
        label: 'Toggle Window',
68
        click: (event) => {
69
          this._showMainWindow(event);
70
        },
71
      });
72
    }
73

74
    return Menu.buildFromTemplate(menuItems);
75
  }
76

77
  _resolveIcon() {
78
    let iconPath = 'appIcon.png';
79

80
    if (os.platform() === 'darwin') {
81
      iconPath = 'appIconTemplate.png';
82
    }
83

84
    return path.join(config.assetsDir, iconPath);
85
  }
86

87
  _toggleWindow() {
88
    this.windowManager.getMainWindow().toggle();
89
  }
90
}
91

92
export default AppTray;
93

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.