|
|
|
@ -146,7 +146,7 @@ namespace ICSharpCode.ILSpy
@@ -146,7 +146,7 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
filterSettings = dock.ActiveTabPage.FilterSettings; |
|
|
|
|
filterSettings.PropertyChanged += filterSettings_PropertyChanged; |
|
|
|
|
|
|
|
|
|
var windowMenuItem = mainMenu.Items.OfType<MenuItem>().First(m => GetResourceString(m.Header as string) == Properties.Resources._Window); |
|
|
|
|
var windowMenuItem = mainMenu.Items.OfType<MenuItem>().First(m => (string)m.Tag == Properties.Resources._Window); |
|
|
|
|
foreach (MenuItem menuItem in windowMenuItem.Items.OfType<MenuItem>()) |
|
|
|
|
{ |
|
|
|
|
if (menuItem.IsCheckable && menuItem.Tag is TabPageModel) |
|
|
|
@ -241,48 +241,93 @@ namespace ICSharpCode.ILSpy
@@ -241,48 +241,93 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
void InitMainMenu() |
|
|
|
|
{ |
|
|
|
|
var mainMenuCommands = App.ExportProvider.GetExports<ICommand, IMainMenuCommandMetadata>("MainMenuCommand"); |
|
|
|
|
foreach (var topLevelMenu in mainMenuCommands.OrderBy(c => c.Metadata.MenuOrder).GroupBy(c => GetResourceString(c.Metadata.Menu))) |
|
|
|
|
{ |
|
|
|
|
var topLevelMenuItem = mainMenu.Items.OfType<MenuItem>().FirstOrDefault(m => GetResourceString(m.Header as string) == topLevelMenu.Key); |
|
|
|
|
foreach (var category in topLevelMenu.GroupBy(c => GetResourceString(c.Metadata.MenuCategory))) |
|
|
|
|
// Start by constructing the individual flat menus
|
|
|
|
|
var parentMenuItems = new Dictionary<string, MenuItem>(); |
|
|
|
|
var menuGroups = mainMenuCommands.OrderBy(c => c.Metadata.MenuOrder).GroupBy(c => c.Metadata.ParentMenuID); |
|
|
|
|
foreach (var menu in menuGroups) |
|
|
|
|
{ |
|
|
|
|
// Get or add the target menu item and add all items grouped by menu category
|
|
|
|
|
var parentMenuItem = GetOrAddParentMenuItem(menu.Key, menu.Key); |
|
|
|
|
foreach (var category in menu.GroupBy(c => c.Metadata.MenuCategory)) |
|
|
|
|
{ |
|
|
|
|
if (topLevelMenuItem == null) |
|
|
|
|
{ |
|
|
|
|
topLevelMenuItem = new MenuItem(); |
|
|
|
|
topLevelMenuItem.Header = GetResourceString(topLevelMenu.Key); |
|
|
|
|
mainMenu.Items.Add(topLevelMenuItem); |
|
|
|
|
} |
|
|
|
|
else if (topLevelMenuItem.Items.Count > 0) |
|
|
|
|
if (parentMenuItem.Items.Count > 0) |
|
|
|
|
{ |
|
|
|
|
topLevelMenuItem.Items.Add(new Separator()); |
|
|
|
|
parentMenuItem.Items.Add(new Separator() { Tag = category.Key }); |
|
|
|
|
} |
|
|
|
|
foreach (var entry in category) |
|
|
|
|
{ |
|
|
|
|
MenuItem menuItem = new MenuItem(); |
|
|
|
|
menuItem.Command = CommandWrapper.Unwrap(entry.Value); |
|
|
|
|
if (!string.IsNullOrEmpty(GetResourceString(entry.Metadata.Header))) |
|
|
|
|
if (menuGroups.Any(g => g.Key == entry.Metadata.MenuID)) |
|
|
|
|
{ |
|
|
|
|
var menuItem = GetOrAddParentMenuItem(entry.Metadata.MenuID, entry.Metadata.Header); |
|
|
|
|
// replace potential dummy text with real name
|
|
|
|
|
menuItem.Header = GetResourceString(entry.Metadata.Header); |
|
|
|
|
if (!string.IsNullOrEmpty(entry.Metadata.MenuIcon)) |
|
|
|
|
parentMenuItem.Items.Add(menuItem); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
menuItem.Icon = new Image { |
|
|
|
|
Width = 16, |
|
|
|
|
Height = 16, |
|
|
|
|
Source = Images.Load(entry.Value, entry.Metadata.MenuIcon) |
|
|
|
|
}; |
|
|
|
|
MenuItem menuItem = new MenuItem(); |
|
|
|
|
menuItem.Command = CommandWrapper.Unwrap(entry.Value); |
|
|
|
|
menuItem.Tag = entry.Metadata.MenuID; |
|
|
|
|
menuItem.Header = GetResourceString(entry.Metadata.Header); |
|
|
|
|
if (!string.IsNullOrEmpty(entry.Metadata.MenuIcon)) |
|
|
|
|
{ |
|
|
|
|
menuItem.Icon = new Image { |
|
|
|
|
Width = 16, |
|
|
|
|
Height = 16, |
|
|
|
|
Source = Images.Load(entry.Value, entry.Metadata.MenuIcon) |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
menuItem.IsEnabled = entry.Metadata.IsEnabled; |
|
|
|
|
menuItem.InputGestureText = entry.Metadata.InputGestureText; |
|
|
|
|
parentMenuItem.Items.Add(menuItem); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (var (key, item) in parentMenuItems) |
|
|
|
|
{ |
|
|
|
|
if (item.Parent == null) |
|
|
|
|
{ |
|
|
|
|
mainMenu.Items.Add(item); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
menuItem.IsEnabled = entry.Metadata.IsEnabled; |
|
|
|
|
menuItem.InputGestureText = entry.Metadata.InputGestureText; |
|
|
|
|
topLevelMenuItem.Items.Add(menuItem); |
|
|
|
|
MenuItem GetOrAddParentMenuItem(string menuID, string resourceKey) |
|
|
|
|
{ |
|
|
|
|
if (!parentMenuItems.TryGetValue(menuID, out var parentMenuItem)) |
|
|
|
|
{ |
|
|
|
|
var topLevelMenuItem = mainMenu.Items.OfType<MenuItem>().FirstOrDefault(m => (string)m.Tag == menuID); |
|
|
|
|
if (topLevelMenuItem == null) |
|
|
|
|
{ |
|
|
|
|
parentMenuItem = new MenuItem(); |
|
|
|
|
parentMenuItem.Header = GetResourceString(resourceKey); |
|
|
|
|
parentMenuItem.Tag = menuID; |
|
|
|
|
parentMenuItems.Add(menuID, parentMenuItem); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
parentMenuItems.Add(menuID, topLevelMenuItem); |
|
|
|
|
parentMenuItem = topLevelMenuItem; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return parentMenuItem; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
internal static string GetResourceString(string key) |
|
|
|
|
{ |
|
|
|
|
var str = !string.IsNullOrEmpty(key) ? Properties.Resources.ResourceManager.GetString(key) : null; |
|
|
|
|
return string.IsNullOrEmpty(key) || string.IsNullOrEmpty(str) ? key : str; |
|
|
|
|
if (string.IsNullOrEmpty(key)) |
|
|
|
|
{ |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
string value = Properties.Resources.ResourceManager.GetString(key); |
|
|
|
|
if (!string.IsNullOrEmpty(value)) |
|
|
|
|
{ |
|
|
|
|
return value; |
|
|
|
|
} |
|
|
|
|
return key; |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
@ -310,7 +355,7 @@ namespace ICSharpCode.ILSpy
@@ -310,7 +355,7 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
|
|
|
|
|
private void InitWindowMenu() |
|
|
|
|
{ |
|
|
|
|
var windowMenuItem = mainMenu.Items.OfType<MenuItem>().First(m => GetResourceString(m.Header as string) == Properties.Resources._Window); |
|
|
|
|
var windowMenuItem = mainMenu.Items.OfType<MenuItem>().First(m => (string)m.Tag == Properties.Resources._Window); |
|
|
|
|
Separator separatorBeforeTools, separatorBeforeDocuments; |
|
|
|
|
windowMenuItem.Items.Add(separatorBeforeTools = new Separator()); |
|
|
|
|
windowMenuItem.Items.Add(separatorBeforeDocuments = new Separator()); |
|
|
|
@ -472,7 +517,7 @@ namespace ICSharpCode.ILSpy
@@ -472,7 +517,7 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
|
|
|
|
|
static void TabPageChanged(object sender, PropertyChangedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
var windowMenuItem = Instance.mainMenu.Items.OfType<MenuItem>().First(m => GetResourceString(m.Header as string) == Properties.Resources._Window); |
|
|
|
|
var windowMenuItem = Instance.mainMenu.Items.OfType<MenuItem>().First(m => (string)m.Tag == nameof(Properties.Resources._Window)); |
|
|
|
|
foreach (MenuItem menuItem in windowMenuItem.Items.OfType<MenuItem>()) |
|
|
|
|
{ |
|
|
|
|
if (menuItem.IsCheckable && menuItem.Tag == sender) |
|
|
|
|