UNPKG

smoosic

Version:

<sub>[Github site](https://github.com/Smoosic/smoosic) | [source documentation](https://smoosic.github.io/Smoosic/release/docs/modules.html) | [change notes](https://aarondavidnewman.github.io/Smoosic/changes.html) | [application](https://smoosic.github.i

224 lines (222 loc) 6.73 kB
import { SuiMenuBase, SuiMenuParams, MenuChoiceDefinition, MenuDefinition, SuiConfiguredMenuOption, SuiConfiguredMenu } from './menu'; import { createAndDisplayDialog } from '../dialogs/dialog'; import { SuiScoreViewDialog } from '../dialogs/scoreView'; import { SuiInstrumentDialog } from '../dialogs/instrument'; import { SuiPartInfoDialog } from '../dialogs/partInfo'; import { SuiPageLayoutDialog } from '../dialogs/pageLayout'; import { SuiNewPartDialog } from '../dialogs/newPart'; import { SuiTabStaveDialog } from '../dialogs/tabStave'; declare var $: any; /** * @category SuiMenu */ export const createNotePartMenuOption: SuiConfiguredMenuOption = { menuChoice: { icon: '', text: 'Create New Part/Stave', value: 'createPart' }, display: () => true, handler: async(menu: SuiMenuBase) => { createAndDisplayDialog(SuiNewPartDialog, { completeNotifier: menu.completeNotifier!, view: menu.view, eventSource: menu.eventSource, id: 'newPartDialog', ctor: 'SuiNewPartDialog', tracker: menu.view.tracker, modifier: menu, startPromise: menu.closePromise }); } } /** * @category SuiMenu */ export const removePartMenuOption: SuiConfiguredMenuOption = { menuChoice: { icon: 'cancel-circle', text: 'Remove Selected Parts/Staves', value: 'removePart' }, display: () => true, handler: async (menu: SuiMenuBase) => { await menu.view.removeStaff(); } } /** * @category SuiMenu */ export const partPropertiesMenuOption: SuiConfiguredMenuOption = { menuChoice: { icon: '', text: 'Part Properties', value: 'editPart' }, display: (menu: SuiMenuBase) => menu.view.isPartExposed(), handler: async (menu: SuiMenuBase) => { const selection = menu.view.tracker.selections[0]; if (menu.view.score.staves.length !== selection.staff.partInfo.stavesAfter + selection.staff.partInfo.stavesBefore + 1) { menu.view.exposePart(selection.staff); } await menu.view.renderPromise(); createAndDisplayDialog(SuiPartInfoDialog, { completeNotifier: menu.completeNotifier!, view: menu.view, eventSource: menu.eventSource, id: 'editPart', ctor: 'SuiPartInfoDialog', tracker: menu.view.tracker, modifier: null, startPromise: menu.closePromise } ); } } /** * @category SuiMenu */ export const pageLayoutMenuOption: SuiConfiguredMenuOption = { menuChoice: { icon: '', text: 'Page Layout', value: 'pageLayout' }, display: (menu: SuiMenuBase) => menu.view.isPartExposed(), handler: async (menu: SuiMenuBase) => { createAndDisplayDialog(SuiPageLayoutDialog, { completeNotifier: menu.completeNotifier!, view: menu.view, eventSource: menu.eventSource, id: 'layoutDialog', ctor: 'SuiPageLayoutDialog', tracker: menu.view.tracker, modifier: null, startPromise: menu.closePromise }); } } /** * @category SuiMenu */ export const viewPartialScoreMenuOption: SuiConfiguredMenuOption = { menuChoice: { icon: '', text: 'View Partial Score', value: 'view' }, display: (menu: SuiMenuBase) => !menu.view.isPartExposed(), handler: async (menu: SuiMenuBase) => { createAndDisplayDialog(SuiScoreViewDialog, { completeNotifier: menu.completeNotifier!, view: menu.view, eventSource: menu.eventSource, id: 'scoreViewDialog', ctor: 'SuiScoreViewDialog', tracker: menu.view.tracker, modifier: null, startPromise: menu.closePromise }); } } /** * @category SuiMenu */ export const viewFullScoreMenuOption: SuiConfiguredMenuOption = { menuChoice: { icon: '', text: 'View All', value: 'viewAll' }, display: (menu: SuiMenuBase) => menu.view.score.staves.length < menu.view.storeScore.staves.length, handler: async (menu: SuiMenuBase) => { await menu.view.viewAll(); } } /** * @category SuiMenu */ export const editInstrumentMenuOption: SuiConfiguredMenuOption = { menuChoice: { icon: '', text: 'Instrument Properties', value: 'editInstrument' }, display: (menu: SuiMenuBase) => true, handler: async (menu: SuiMenuBase) => { createAndDisplayDialog(SuiInstrumentDialog, { completeNotifier: menu.completeNotifier!, view: menu.view, eventSource: menu.eventSource, id: 'instrumentModal', ctor: 'SuiInstrumentDialog', tracker: menu.view.tracker, modifier: menu, startPromise: menu.closePromise }); } } /** * @category SuiMenu */ export const tabStaveMenuOption: SuiConfiguredMenuOption = { menuChoice: { icon: '', text: 'Guitar Tablature', value: 'tabStave' }, display: (menu: SuiMenuBase) => true, handler: async (menu: SuiMenuBase) => { createAndDisplayDialog<SuiTabStaveDialog>(SuiTabStaveDialog, { ctor: 'SuiTabStaveDialog', id: 'tabStaveDialog', tracker: menu.view.tracker, completeNotifier: menu.completeNotifier, startPromise: null, view: menu.view, eventSource: menu.eventSource }); } } /** * @category SuiMenu */ export const moveUpMenuOption: SuiConfiguredMenuOption = { menuChoice: { icon: 'icon-smo icon-arrow-up', text: 'Move Part Up', value: 'partUp' }, display: (menu: SuiMenuBase) => { return menu.view.score.staves.length > 1; }, handler: async (menu: SuiMenuBase) => { await menu.view.moveStaffUpDown(-1); } } export const moveDownMenuOption: SuiConfiguredMenuOption = { menuChoice: { icon: 'icon-smo icon-flip icon-arrow-up', text: 'Move Part Down', value: 'partDown' }, display: (menu: SuiMenuBase) => { return menu.view.score.staves.length > 1; }, handler: async (menu: SuiMenuBase) => { await menu.view.moveStaffUpDown(1); } } /** * Stuff you can do with parts. * @category SuiMenu */ export const SuiPartMenuOptions: SuiConfiguredMenuOption[] = [ createNotePartMenuOption, removePartMenuOption, partPropertiesMenuOption, pageLayoutMenuOption, viewPartialScoreMenuOption, editInstrumentMenuOption, viewFullScoreMenuOption, tabStaveMenuOption, moveUpMenuOption, moveDownMenuOption ]; /** * Stuff you can do with parts. * @category SuiMenu */ export class SuiPartMenu extends SuiConfiguredMenu { constructor(params: SuiMenuParams) { super(params, 'Parts', SuiPartMenuOptions); } }