2020-11-05 18:58:23 +02:00
import KeymapService from '../../KeymapService' ;
2020-10-13 13:57:03 +02:00
import { MenuItem , MenuItemLocation } from './types' ;
import MenuController from '../MenuController' ;
import Plugin from '../Plugin' ;
import createViewHandle from '../utils/createViewHandle' ;
/ * *
* Allows creating menus .
*
2020-11-05 18:58:23 +02:00
* [ View the demo plugin ] ( https : //github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/menu)
2020-10-13 13:57:03 +02:00
* /
export default class JoplinViewsMenus {
private store : any ;
private plugin : Plugin ;
constructor ( plugin : Plugin , store : any ) {
this . store = store ;
this . plugin = plugin ;
}
2020-11-12 21:13:28 +02:00
private registerCommandAccelerators ( menuItems : MenuItem [ ] ) {
2020-10-13 13:57:03 +02:00
for ( const menuItem of menuItems ) {
if ( menuItem . accelerator ) {
KeymapService . instance ( ) . registerCommandAccelerator ( menuItem . commandName , menuItem . accelerator ) ;
}
if ( menuItem . submenu ) {
this . registerCommandAccelerators ( menuItem . submenu ) ;
}
}
}
/ * *
* Creates a new menu from the provided menu items and place it at the given location . As of now , it is only possible to place the
* menu as a sub - menu of the application build - in menus .
* /
2020-11-13 19:09:28 +02:00
public async create ( id : string , label : string , menuItems : MenuItem [ ] , location : MenuItemLocation = MenuItemLocation . Tools ) {
if ( ! Array . isArray ( menuItems ) ) {
this . plugin . deprecationNotice ( '1.5' , 'Creating a view without an ID is deprecated. To fix it, change your call to `joplin.views.menus.create("my-unique-id", ...)`' ) ;
location = menuItems as any || MenuItemLocation . Tools ;
menuItems = label as any ;
label = id as any ;
id = ` ${ this . plugin . viewCount } ` ;
}
const handle = createViewHandle ( this . plugin , id ) ;
2020-10-13 13:57:03 +02:00
const controller = new MenuController ( handle , this . plugin . id , this . store , label , menuItems , location ) ;
this . plugin . addViewController ( controller ) ;
this . registerCommandAccelerators ( menuItems ) ;
}
}