-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
66a2d29
commit 52dd9a7
Showing
7 changed files
with
381 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,203 @@ | ||
import { SuiMenuBase, SuiMenuParams, MenuDefinition, SuiMenuHandler, SuiMenuShowOption, | ||
SuiConfiguredMenuOption, SuiConfiguredMenu } from './menu'; | ||
|
||
declare var $: any; | ||
export class SuiBeamMenu extends SuiConfiguredMenu { | ||
constructor(params: SuiMenuParams) { | ||
super(params, 'Beams', SuiBeamMenuOptions); | ||
} | ||
} | ||
|
||
const toggleBeamGroupMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.toggleBeamGroup(); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
for (let j = 0; j < mm.voices.length; ++j) { | ||
const vv = mm.voices[j]; | ||
for (let k = 0; k < vv.notes.length; ++k) { | ||
const nn = vv.notes[k]; | ||
if (nn) { | ||
if (nn.noteType === 'n' && nn.tickCount < 4096) { | ||
return true; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: 'icon smo-icon icon-beamBreak', | ||
text: 'Toggle Beam Group', | ||
hotkey: 'x', | ||
value: 'toggleBeamMenuOption' | ||
} | ||
} | ||
const beamSelectionsMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.beamSelections(); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
for (let j = 0; j < mm.voices.length; ++j) { | ||
const vv = mm.voices[j]; | ||
for (let k = 0; k < vv.notes.length; ++k) { | ||
const nn = vv.notes[k]; | ||
if (nn) { | ||
if (nn.noteType === 'n' && nn.tickCount < 4096) { | ||
return true; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: 'icon smo-icon icon-beam', | ||
text: 'Beam Selections', | ||
hotkey: 'Shift-X', | ||
value: 'beamSelectionsMenuOption' | ||
} | ||
} | ||
const toggleBeamDirectionMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.toggleBeamDirection(); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
for (let j = 0; j < mm.voices.length; ++j) { | ||
const vv = mm.voices[j]; | ||
for (let k = 0; k < vv.notes.length; ++k) { | ||
const nn = vv.notes[k]; | ||
if (nn) { | ||
if (nn.noteType === 'n') { | ||
return true; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: 'icon icon-smo icon-flagFlip', | ||
text: 'Toggle Stem Direction (auto, up, down)', | ||
hotkey: 'Shift-B', | ||
value: 'toggleBeamDirection' | ||
} | ||
} | ||
const tripletMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.makeTuplet(3); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
for (let j = 0; j < mm.voices.length; ++j) { | ||
const vv = mm.voices[j]; | ||
for (let k = 0; k < vv.notes.length; ++k) { | ||
const nn = vv.notes[k]; | ||
if (nn) { | ||
if (nn.noteType === 'n') { | ||
return true; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: ' icon icon-smo icon-triplet', | ||
text: 'Make Triplet', | ||
hotkey: 'Ctrl-3', | ||
value: 'tripletMenuOption' | ||
} | ||
} | ||
const quintupletMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.makeTuplet(3); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
for (let j = 0; j < mm.voices.length; ++j) { | ||
const vv = mm.voices[j]; | ||
for (let k = 0; k < vv.notes.length; ++k) { | ||
const nn = vv.notes[k]; | ||
if (nn) { | ||
if (nn.noteType === 'n') { | ||
return true; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: 'icon-smo icon-quint', | ||
text: 'Make 5-tuplet', | ||
hotkey: 'Ctrl-5', | ||
value: 'quintupletMenuOption' | ||
} | ||
} | ||
const sevenTupletMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.makeTuplet(3); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
for (let j = 0; j < mm.voices.length; ++j) { | ||
const vv = mm.voices[j]; | ||
for (let k = 0; k < vv.notes.length; ++k) { | ||
const nn = vv.notes[k]; | ||
if (nn) { | ||
if (nn.noteType === 'n') { | ||
return true; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: 'icon-smo icon icon-septuplet', | ||
hotkey: 'Ctrl-7', | ||
text: 'Make 7-tuplet', | ||
value: 'sevenTupletMenuOption' | ||
} | ||
} | ||
const removeTupletMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.unmakeTuplet(); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
for (let j = 0; j < mm.voices.length; ++j) { | ||
const vv = mm.voices[j]; | ||
for (let k = 0; k < vv.notes.length; ++k) { | ||
const nn = vv.notes[k]; | ||
if (nn) { | ||
if (nn.isTuplet) { | ||
return true; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: 'icon icon-smo icon-no_tuplet', | ||
text: 'Unmake tuplet', | ||
hotkey: 'Ctrl-0', | ||
value: 'unmakeTuplet' | ||
} | ||
} | ||
const SuiBeamMenuOptions: SuiConfiguredMenuOption[] = [toggleBeamGroupMenuOption, | ||
beamSelectionsMenuOption, toggleBeamDirectionMenuOption, tripletMenuOption, quintupletMenuOption, | ||
sevenTupletMenuOption, removeTupletMenuOption | ||
]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
import { SuiMenuBase, SuiMenuParams, MenuDefinition, SuiMenuHandler, SuiMenuShowOption, | ||
SuiConfiguredMenuOption, SuiConfiguredMenu } from './menu'; | ||
import { createAndDisplayDialog } from '../dialogs/dialog'; | ||
|
||
declare var $: any; | ||
export class SuiVoiceMenu extends SuiConfiguredMenu { | ||
constructor(params: SuiMenuParams) { | ||
super(params, 'Voices', SuiVoiceMenuOptions); | ||
} | ||
} | ||
|
||
const selectVoiceOneMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.populateVoice(0); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
if (mm.voices.length > 1) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: '', | ||
text: 'Voice 1', | ||
value: 'voiceOne' | ||
} | ||
} | ||
const selectVoiceTwoMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.populateVoice(1); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
if (mm.voices.length < 4) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: '', | ||
text: 'Voice 2', | ||
value: 'voiceTwo' | ||
} | ||
} | ||
const selectVoiceThreeMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.populateVoice(2); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
if (mm.voices.length < 4 && mm.voices.length > 1) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: '', | ||
text: 'Voice 3', | ||
value: 'voiceThree' | ||
} | ||
} | ||
const selectVoiceFourMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.populateVoice(3); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
if (mm.voices.length < 4 && mm.voices.length > 2) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: '', | ||
text: 'Voice 4', | ||
value: 'voiceFour' | ||
} | ||
} | ||
const removeVoiceMenuOption: SuiConfiguredMenuOption = { | ||
handler: async (menu: SuiMenuBase) => { | ||
menu.view.depopulateVoice(); | ||
}, display: (menu: SuiMenuBase) => { | ||
for (let i = 0; i < menu.view.tracker.selections.length; ++i) { | ||
const mm = menu.view.tracker.selections[i].measure; | ||
if (mm.activeVoice > 0) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
}, | ||
menuChoice: { | ||
icon: '', | ||
text: 'Remove Voice', | ||
value: 'removeVoice' | ||
} | ||
} | ||
const SuiVoiceMenuOptions: SuiConfiguredMenuOption[] = [ | ||
selectVoiceOneMenuOption, selectVoiceTwoMenuOption, selectVoiceThreeMenuOption, selectVoiceFourMenuOption, | ||
removeVoiceMenuOption | ||
]; |
Oops, something went wrong.