diff --git a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia/Audio/Synthesized/PianoRoll/MenuBar.uexml b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia/Audio/Synthesized/PianoRoll/MenuBar.uexml new file mode 100644 index 00000000..1883b8ed --- /dev/null +++ b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Editors/Multimedia/Audio/Synthesized/PianoRoll/MenuBar.uexml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj index f0d152ac..a9e8ae34 100644 --- a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj +++ b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj @@ -642,6 +642,7 @@ + @@ -658,6 +659,10 @@ + + + + diff --git a/CSharp/Libraries/UniversalEditor.UserInterface/Common/Reflection.cs b/CSharp/Libraries/UniversalEditor.UserInterface/Common/Reflection.cs index ba0fdc28..312a5c1b 100644 --- a/CSharp/Libraries/UniversalEditor.UserInterface/Common/Reflection.cs +++ b/CSharp/Libraries/UniversalEditor.UserInterface/Common/Reflection.cs @@ -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; } diff --git a/CSharp/Libraries/UniversalEditor.UserInterface/MainWindow.cs b/CSharp/Libraries/UniversalEditor.UserInterface/MainWindow.cs index 8d092a94..6dd322a4 100644 --- a/CSharp/Libraries/UniversalEditor.UserInterface/MainWindow.cs +++ b/CSharp/Libraries/UniversalEditor.UserInterface/MainWindow.cs @@ -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 _editorScopedCommands = new List(); + private List _editorScopedMenuItems = new List(); + 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() {