Implement editor-scoped menu items
This commit is contained in:
parent
8caee50b50
commit
19e0dfaa90
@ -0,0 +1,74 @@
|
||||
<UniversalEditor Version="5.0">
|
||||
<Editors>
|
||||
<Editor TypeName="UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.PianoRollEditor">
|
||||
<Commands>
|
||||
<Command ID="View">
|
||||
<Items>
|
||||
<CommandReference CommandID="ViewTrackOverlay" InsertBeforeID="ViewPanels" />
|
||||
<Separator InsertBeforeID="ViewPanels" />
|
||||
</Items>
|
||||
</Command>
|
||||
|
||||
<Command ID="JobNormalizeNotes" Title="_Normalize Overlapping Notes..." />
|
||||
<Command ID="JobInsertBars" Title="_Insert Measures..." />
|
||||
<Command ID="JobDeleteBars" Title="_Delete Measures..." />
|
||||
|
||||
<Command ID="JobRandomize" Title="Insert _Random Notes..." />
|
||||
<Command ID="JobConnect" Title="_Connect Notes..." />
|
||||
|
||||
<Command ID="JobInsertLyrics" Title="Insert _Lyrics..." />
|
||||
|
||||
<Command ID="Job" Title="_Job">
|
||||
<Items>
|
||||
<CommandReference CommandID="JobNormalizeNotes" />
|
||||
<Separator />
|
||||
<CommandReference CommandID="JobInsertBars" />
|
||||
<CommandReference CommandID="JobDeleteBars" />
|
||||
<Separator />
|
||||
<CommandReference CommandID="JobRandomize" />
|
||||
<CommandReference CommandID="JobConnect" />
|
||||
<Separator />
|
||||
<CommandReference CommandID="JobInsertLyrics" />
|
||||
</Items>
|
||||
</Command>
|
||||
|
||||
<Command ID="TrackEnable" Title="Enable Trac_k" />
|
||||
|
||||
<Command ID="TrackAdd" Title="_Add Track" />
|
||||
<Command ID="TrackDuplicate" Title="Dupli_cate Track" />
|
||||
<Command ID="TrackRename" Title="_Rename Track" />
|
||||
<Command ID="TrackDelete" Title="_Delete Track" />
|
||||
|
||||
<Command ID="TrackRenderCurrent" Title="Render Current _Track" />
|
||||
<Command ID="TrackRenderAll" Title="Render All Track_s" />
|
||||
|
||||
<Command ID="Track" Title="Trac_k">
|
||||
<Items>
|
||||
<CommandReference CommandID="TrackEnable" />
|
||||
<Separator />
|
||||
<CommandReference CommandID="TrackAdd" />
|
||||
<CommandReference CommandID="TrackDuplicate" />
|
||||
<CommandReference CommandID="TrackRename" />
|
||||
<CommandReference CommandID="TrackDelete" />
|
||||
<Separator />
|
||||
<CommandReference CommandID="TrackRenderCurrent" />
|
||||
<CommandReference CommandID="TrackRenderAll" />
|
||||
</Items>
|
||||
</Command>
|
||||
|
||||
<Command ID="Part" Title="Pa_rt" />
|
||||
<Command ID="Lyrics" Title="_Lyrics" />
|
||||
<Command ID="Transport" Title="Tra_nsport" />
|
||||
</Commands>
|
||||
<MenuBar>
|
||||
<Items>
|
||||
<CommandReference CommandID="Job" InsertAfterID="View" />
|
||||
<CommandReference CommandID="Track" />
|
||||
<CommandReference CommandID="Part" />
|
||||
<CommandReference CommandID="Lyrics" />
|
||||
<CommandReference CommandID="Transport" />
|
||||
</Items>
|
||||
</MenuBar>
|
||||
</Editor>
|
||||
</Editors>
|
||||
</UniversalEditor>
|
||||
@ -642,6 +642,7 @@
|
||||
<Content Include="Extensions\GraphicDesigner\Associations\Picture\PCX.uexml" />
|
||||
<Content Include="Extensions\GraphicDesigner\Associations\Picture\PSD.uexml" />
|
||||
<Content Include="Editors\UniversalEditor.Editors.FileSystem.FileSystemEditor\Commands.uexml" />
|
||||
<Content Include="Editors\Multimedia\Audio\Synthesized\PianoRoll\MenuBar.uexml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Configuration\Application.upl" />
|
||||
@ -658,6 +659,10 @@
|
||||
<Folder Include="Extensions\FileSystem\Associations\Apogee\" />
|
||||
<Folder Include="Accessors\" />
|
||||
<Folder Include="Editors\UniversalEditor.Editors.FileSystem.FileSystemEditor\" />
|
||||
<Folder Include="Editors\Multimedia\" />
|
||||
<Folder Include="Editors\Multimedia\Audio\" />
|
||||
<Folder Include="Editors\Multimedia\Audio\Synthesized\" />
|
||||
<Folder Include="Editors\Multimedia\Audio\Synthesized\PianoRoll\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Extensions\SoftwareDeveloper\Templates\Project\Software Development\Arduino\Images\Blink.xcf" />
|
||||
|
||||
@ -147,7 +147,32 @@ namespace UniversalEditor.UserInterface.Common
|
||||
{
|
||||
string id = tagCommand.Attributes["ID"]?.Value;
|
||||
string title = tagCommand.Attributes["Title"]?.Value;
|
||||
er.Commands.Add(new MBS.Framework.UserInterface.Command(id, title != null ? title : id));
|
||||
|
||||
MBS.Framework.UserInterface.Command cmd = new MBS.Framework.UserInterface.Command(id, title != null ? title : id);
|
||||
MarkupTagElement tagItems = tagCommand.Elements["Items"] as MarkupTagElement;
|
||||
if (tagItems != null)
|
||||
{
|
||||
foreach (MarkupElement elItem in tagItems.Elements)
|
||||
{
|
||||
MarkupTagElement tagItem = (elItem as MarkupTagElement);
|
||||
if (tagItem == null) continue;
|
||||
switch (tagItem.Name)
|
||||
{
|
||||
case "CommandReference":
|
||||
{
|
||||
MBS.Framework.UserInterface.CommandReferenceCommandItem crci = new MBS.Framework.UserInterface.CommandReferenceCommandItem(tagItem.Attributes["CommandID"]?.Value);
|
||||
cmd.Items.Add(crci);
|
||||
break;
|
||||
}
|
||||
case "Separator":
|
||||
{
|
||||
cmd.Items.Add(new MBS.Framework.UserInterface.SeparatorCommandItem());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
er.Commands.Add(cmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -165,7 +190,7 @@ namespace UniversalEditor.UserInterface.Common
|
||||
{
|
||||
case "CommandReference":
|
||||
{
|
||||
MBS.Framework.UserInterface.CommandReferenceCommandItem crci = new MBS.Framework.UserInterface.CommandReferenceCommandItem(tagItem.Attributes["ID"]?.Value);
|
||||
MBS.Framework.UserInterface.CommandReferenceCommandItem crci = new MBS.Framework.UserInterface.CommandReferenceCommandItem(tagItem.Attributes["CommandID"]?.Value);
|
||||
er.MenuBar.Items.Add(crci);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -27,6 +27,7 @@ using MBS.Framework.UserInterface.Printing;
|
||||
using UniversalEditor.UserInterface.Pages;
|
||||
using UniversalEditor.ObjectModels.Binary;
|
||||
using UniversalEditor.DataFormats.Binary;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace UniversalEditor.UserInterface
|
||||
{
|
||||
@ -149,7 +150,7 @@ namespace UniversalEditor.UserInterface
|
||||
|
||||
foreach (CommandItem ci in Engine.CurrentEngine.MainMenu.Items)
|
||||
{
|
||||
MBS.Framework.UserInterface.MenuItem mi = LoadMenuItem(ci);
|
||||
MBS.Framework.UserInterface.MenuItem mi = MBS.Framework.UserInterface.MenuItem.LoadMenuItem(ci, MainWindow_MenuBar_Item_Click);
|
||||
if (mi == null)
|
||||
continue;
|
||||
|
||||
@ -265,6 +266,10 @@ namespace UniversalEditor.UserInterface
|
||||
}
|
||||
}
|
||||
|
||||
private Editor _prevEditor = null;
|
||||
private List<Command> _editorScopedCommands = new List<Command>();
|
||||
private List<MBS.Framework.UserInterface.MenuItem> _editorScopedMenuItems = new List<MBS.Framework.UserInterface.MenuItem>();
|
||||
|
||||
private void dckContainer_SelectionChanged(object sender, EventArgs e)
|
||||
{
|
||||
Editor editor = null;
|
||||
@ -276,11 +281,43 @@ namespace UniversalEditor.UserInterface
|
||||
{
|
||||
}
|
||||
|
||||
if (editor != _prevEditor)
|
||||
{
|
||||
foreach (MBS.Framework.UserInterface.MenuItem mi in _editorScopedMenuItems)
|
||||
{
|
||||
MenuBar.Items.Remove(mi);
|
||||
}
|
||||
_editorScopedMenuItems.Clear();
|
||||
|
||||
foreach (Command cmd in _editorScopedCommands)
|
||||
{
|
||||
Console.WriteLine("unregistering temporary (editor-scoped) command '{0}'", cmd.ID);
|
||||
Application.Commands.Remove(cmd);
|
||||
}
|
||||
_editorScopedCommands.Clear();
|
||||
}
|
||||
|
||||
if (editor == null) {
|
||||
Console.WriteLine ("Editor is null");
|
||||
} else {
|
||||
Console.WriteLine ("Editor is NOT null");
|
||||
|
||||
EditorReference er = editor.MakeReference();
|
||||
foreach (Command cmd in er.Commands)
|
||||
{
|
||||
Console.WriteLine("registering temporary (editor-scoped) command '{0}'", cmd.ID);
|
||||
Application.Commands.Add(cmd);
|
||||
_editorScopedCommands.Add(cmd);
|
||||
}
|
||||
|
||||
foreach (CommandItem ci in er.MenuBar.Items)
|
||||
{
|
||||
MBS.Framework.UserInterface.MenuItem mi = MBS.Framework.UserInterface.MenuItem.LoadMenuItem(ci, MainWindow_MenuBar_Item_Click);
|
||||
MenuBar.Items.Add(mi);
|
||||
_editorScopedMenuItems.Add(mi);
|
||||
}
|
||||
}
|
||||
_prevEditor = editor;
|
||||
}
|
||||
|
||||
public void NewProject(bool combineObjects = false)
|
||||
@ -489,45 +526,6 @@ namespace UniversalEditor.UserInterface
|
||||
}, DragDropEffect.Copy, MouseButtons.Primary | MouseButtons.Secondary, KeyboardModifierKey.None);
|
||||
}
|
||||
|
||||
private MBS.Framework.UserInterface.MenuItem LoadMenuItem(CommandItem ci)
|
||||
{
|
||||
if (ci is CommandReferenceCommandItem)
|
||||
{
|
||||
CommandReferenceCommandItem crci = (ci as CommandReferenceCommandItem);
|
||||
|
||||
Command cmd = Application.Commands[crci.CommandID];
|
||||
if (cmd != null)
|
||||
{
|
||||
CommandMenuItem mi = new CommandMenuItem(cmd.Title);
|
||||
mi.Name = cmd.ID;
|
||||
mi.Shortcut = cmd.Shortcut;
|
||||
if (cmd.Items.Count > 0)
|
||||
{
|
||||
foreach (CommandItem ci1 in cmd.Items)
|
||||
{
|
||||
MBS.Framework.UserInterface.MenuItem mi1 = LoadMenuItem(ci1);
|
||||
mi.Items.Add(mi1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mi.Click += MainWindow_MenuBar_Item_Click;
|
||||
}
|
||||
return mi;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("attempted to load unknown cmd '" + crci.CommandID + "'");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
else if (ci is SeparatorCommandItem)
|
||||
{
|
||||
return new MBS.Framework.UserInterface.SeparatorMenuItem();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
#region IHostApplicationWindow implementation
|
||||
public void OpenFile()
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user