implement context menu in UEXML instead of code

This commit is contained in:
Michael Becker 2019-11-05 22:55:05 -05:00
parent 5f4b25d121
commit a8c5906a9b
No known key found for this signature in database
GPG Key ID: 389DFF5D73781A12
2 changed files with 127 additions and 64 deletions

View File

@ -75,6 +75,111 @@
</Command>
<Command ID="Transport" Title="Tra_nsport" />
<!-- Context Menu -->
<Command ID="PianoRollEditor_ContextMenu_Arrow" Title="_Arrow" />
<Command ID="PianoRollEditor_ContextMenu_Draw" Title="Dra_w" />
<Command ID="PianoRollEditor_ContextMenu_Erase" Title="_Erase" />
<!-- Note Fixed Length : disables drawing note length, forcing to specified length -->
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength_1" Title="1/1 [1920]" />
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength_2" Title="1/2 [968]" />
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength_4" Title="1/4 [480]" />
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength_8" Title="1/8 [240]" />
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength_16" Title="1/16 [120]" />
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength_32" Title="1/32 [60]" />
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength_64" Title="1/64 [30]" />
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength_Off" Title="Off" />
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength_Triplet" Title="Triplet" />
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength_Dot" Title="Dot" />
<Command ID="PianoRollEditor_ContextMenu_NoteFixedLength" Title="_Note Fixed Length">
<Items>
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength_1" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength_2" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength_4" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength_8" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength_16" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength_32" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength_64" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength_Off" />
<Separator />
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength_Triplet" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength_Dot" />
</Items>
</Command>
<!-- Quantize : controls the quantize of position when drawing a new note -->
<Command ID="PianoRollEditor_ContextMenu_Quantize_4" Title="1/4 [480]" />
<Command ID="PianoRollEditor_ContextMenu_Quantize_8" Title="1/8 [240]" />
<Command ID="PianoRollEditor_ContextMenu_Quantize_16" Title="1/16 [120]" />
<Command ID="PianoRollEditor_ContextMenu_Quantize_32" Title="1/32 [60]" />
<Command ID="PianoRollEditor_ContextMenu_Quantize_64" Title="1/64 [30]" />
<Command ID="PianoRollEditor_ContextMenu_Quantize_Off" Title="Off" />
<Command ID="PianoRollEditor_ContextMenu_Quantize_Triplet" Title="Triplet" />
<Command ID="PianoRollEditor_ContextMenu_Quantize" Title="_Quantize">
<Items>
<CommandReference CommandID="PianoRollEditor_ContextMenu_Quantize_4" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Quantize_8" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Quantize_16" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Quantize_32" /> <!-- default -->
<CommandReference CommandID="PianoRollEditor_ContextMenu_Quantize_64" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Quantize_Off" />
<Separator />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Quantize_Triplet" />
</Items>
</Command>
<!-- Length : controls the quantize of length when drawing a new note -->
<Command ID="PianoRollEditor_ContextMenu_Length_4" Title="1/4 [480]" />
<Command ID="PianoRollEditor_ContextMenu_Length_8" Title="1/8 [240]" />
<Command ID="PianoRollEditor_ContextMenu_Length_16" Title="1/16 [120]" />
<Command ID="PianoRollEditor_ContextMenu_Length_32" Title="1/32 [60]" />
<Command ID="PianoRollEditor_ContextMenu_Length_64" Title="1/64 [30]" />
<Command ID="PianoRollEditor_ContextMenu_Length_Off" Title="Off" />
<Command ID="PianoRollEditor_ContextMenu_Length_Triplet" Title="Triplet" />
<Command ID="PianoRollEditor_ContextMenu_Length" Title="_Length">
<Items>
<CommandReference CommandID="PianoRollEditor_ContextMenu_Length_4" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Length_8" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Length_16" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Length_32" /> <!-- default -->
<CommandReference CommandID="PianoRollEditor_ContextMenu_Length_64" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Length_Off" />
<Separator />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Length_Triplet" />
</Items>
</Command>
<Command ID="PianoRollEditor_ContextMenu_ShowGridLines" Title="_Show Grid Lines" />
<Command ID="PianoRollEditor_ContextMenu_SelectAllEvents" Title="Select All _Events" />
<Command ID="PianoRollEditor_ContextMenu_InsertLyrics" Title="Insert _Lyrics..." />
<Command ID="PianoRollEditor_ContextMenu_Properties" Title="P_roperties..." />
<Command ID="PianoRollEditor_ContextMenu">
<Items>
<CommandReference CommandID="PianoRollEditor_ContextMenu_Arrow" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Draw" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Erase" />
<Separator />
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Quantize" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Length" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_ShowGridLines" />
<Separator />
<CommandReference CommandID="EditUndo" />
<CommandReference CommandID="EditCut" />
<CommandReference CommandID="EditCopy" />
<CommandReference CommandID="EditPaste" />
<CommandReference CommandID="EditDelete" />
<Separator />
<CommandReference CommandID="EditSelectAll" />
<CommandReference CommandID="PianoRollEditor_ContextMenu_SelectAllEvents" />
<Separator />
<CommandReference CommandID="PianoRollEditor_ContextMenu_InsertLyrics" />
<Separator />
<CommandReference CommandID="PianoRollEditor_ContextMenu_Properties" />
</Items>
</Command>
</Commands>
<MenuBar>
<Items>

View File

@ -32,68 +32,27 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control
{
public class PianoRollView : /*View*/ CustomControl
{
private Menu contextMenu = null;
public PianoRollView()
{
this.contextMenu = new Menu();
this.contextMenu.Items.AddRange(new MenuItem[]
{
new CommandMenuItem("_Arrow", null, ContextMenuArrow_Click),
new CommandMenuItem("Dra_w", null, ContextMenuPencil_Click),
new CommandMenuItem("_Erase", null, ContextMenuErase_Click),
new SeparatorMenuItem(),
new CommandMenuItem("_Note Fixed Length", new MenuItem[] // disables drawing note length, forcing to specified length
{
new CommandMenuItem("ContextMenu_NoteFixedLength_1", "1/1 [1920]", null, ContextMenu_NoteFixedLength_Click),
new CommandMenuItem("ContextMenu_NoteFixedLength_2", "1/2 [960]", null, ContextMenu_NoteFixedLength_Click),
new CommandMenuItem("ContextMenu_NoteFixedLength_4", "1/4 [480]", null, ContextMenu_NoteFixedLength_Click),
new CommandMenuItem("ContextMenu_NoteFixedLength_8", "1/8 [240]", null, ContextMenu_NoteFixedLength_Click),
new CommandMenuItem("ContextMenu_NoteFixedLength_16", "1/16 [120]", null, ContextMenu_NoteFixedLength_Click),
new CommandMenuItem("ContextMenu_NoteFixedLength_32", "1/32 [60]", null, ContextMenu_NoteFixedLength_Click),
new CommandMenuItem("ContextMenu_NoteFixedLength_64", "1/64 [30]", null, ContextMenu_NoteFixedLength_Click),
new CommandMenuItem("ContextMenu_NoteFixedLength_Off", "Off", null, ContextMenu_NoteFixedLength_Click),
new SeparatorMenuItem(),
new CommandMenuItem("Triplet"),
new CommandMenuItem("Dot")
}),
new CommandMenuItem("_Quantize", new MenuItem[] // controls the quantize of position when drawing a new note
{
new CommandMenuItem("1/4"),
new CommandMenuItem("1/8"),
new CommandMenuItem("1/16"),
new CommandMenuItem("1/32"), // default
new CommandMenuItem("1/64"),
new CommandMenuItem("Off"),
new SeparatorMenuItem(),
new CommandMenuItem("Triplet")
}),
new CommandMenuItem("_Length", new MenuItem[] // controls the quantize of length when drawing a new note
{
new CommandMenuItem("1/4"),
new CommandMenuItem("1/8"),
new CommandMenuItem("1/16"),
new CommandMenuItem("1/32"), // default
new CommandMenuItem("1/64"),
new CommandMenuItem("Off"),
new SeparatorMenuItem(),
new CommandMenuItem("Triplet")
}),
new CommandMenuItem("_Show Grid Lines", null, ContextMenuToggleGridLines_Click), // toggles grid lines for quantized positions
new SeparatorMenuItem(),
new CommandMenuItem("_Undo"), // should be CommandReferenceCommandItem for EditUndo application-global command
new CommandMenuItem("Cu_t"),
new CommandMenuItem("_Copy"),
new CommandMenuItem("_Paste"),
new CommandMenuItem("_Delete"),
new SeparatorMenuItem(),
new CommandMenuItem("Select _All"),
new CommandMenuItem("Select All _Events"),
new SeparatorMenuItem(),
new CommandMenuItem("Insert _Lyrics..."),
new SeparatorMenuItem(),
new CommandMenuItem("P_roperties...", null, ContextMenuProperties_Click) // displays Note Property dialog
});
this.ContextMenu = contextMenu;
this.ContextMenuCommandID = "PianoRollEditor_ContextMenu";
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Arrow", ContextMenuArrow_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Draw", ContextMenuPencil_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Erase", ContextMenuErase_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_1", ContextMenu_NoteFixedLength_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_2", ContextMenu_NoteFixedLength_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_4", ContextMenu_NoteFixedLength_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_8", ContextMenu_NoteFixedLength_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_16", ContextMenu_NoteFixedLength_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_32", ContextMenu_NoteFixedLength_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_64", ContextMenu_NoteFixedLength_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_Off", ContextMenu_NoteFixedLength_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_Triplet", ContextMenu_NoteFixedLength_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_Dot", ContextMenu_NoteFixedLength_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_ShowGridLines", ContextMenuToggleGridLines_Click);
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Properties", ContextMenuProperties_Click);
}
/// <summary>
@ -128,10 +87,9 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control
{
base.OnBeforeContextMenu(e);
contextMenu.Items[10].Visible = (SelectedCommands.Count > 0);
contextMenu.Items[11].Visible = (SelectedCommands.Count > 0);
contextMenu.Items[12].Visible = (SelectedCommands.Count > 0);
contextMenu.Items[13].Visible = (SelectedCommands.Count > 0);
this.ContextMenu.Items["EditCut"].Visible = (SelectedCommands.Count > 0);
this.ContextMenu.Items["EditCopy"].Visible = (SelectedCommands.Count > 0);
this.ContextMenu.Items["EditDelete"].Visible = (SelectedCommands.Count > 0);
}
private void ContextMenuArrow_Click(object sender, EventArgs e)