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()
{