Browse Source

Expand all menu builders in main menu once at startup to ensure that all shortcuts get registered. Fixed issue "Properties window not brought to front using keyboard shortcut"

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6314 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 16 years ago
parent
commit
08dd0f5144
  1. 2
      src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs
  2. 33
      src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs
  3. 10
      src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarService.cs

2
src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs

@ -95,7 +95,7 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
mainMenu.ItemsSource = MenuService.CreateMenuItems(this, this, mainMenuPath, "MainMenu"); mainMenu.ItemsSource = MenuService.CreateMenuItems(this, this, mainMenuPath, activationMethod: "MainMenu", immediatelyExpandMenuBuildersForShortcuts: true);
toolBars = ToolBarService.CreateToolBars(this, "/SharpDevelop/Workbench/ToolBar"); toolBars = ToolBarService.CreateToolBars(this, "/SharpDevelop/Workbench/ToolBar");
foreach (ToolBar tb in toolBars) { foreach (ToolBar tb in toolBars) {

33
src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs

@ -21,6 +21,13 @@ namespace ICSharpCode.Core.Presentation
/// </summary> /// </summary>
public static class MenuService public static class MenuService
{ {
internal sealed class MenuCreateContext
{
public UIElement InputBindingOwner;
public string ActivationMethod;
public bool ImmediatelyExpandMenuBuildersForShortcuts;
}
static Dictionary<string, System.Windows.Input.ICommand> knownCommands = LoadDefaultKnownCommands(); static Dictionary<string, System.Windows.Input.ICommand> knownCommands = LoadDefaultKnownCommands();
static Dictionary<string, System.Windows.Input.ICommand> LoadDefaultKnownCommands() static Dictionary<string, System.Windows.Input.ICommand> LoadDefaultKnownCommands()
@ -106,7 +113,9 @@ namespace ICSharpCode.Core.Presentation
public static ContextMenu CreateContextMenu(object owner, string addInTreePath) public static ContextMenu CreateContextMenu(object owner, string addInTreePath)
{ {
IList items = CreateUnexpandedMenuItems(null, AddInTree.BuildItems<MenuItemDescriptor>(addInTreePath, owner, false), "ContextMenu"); IList items = CreateUnexpandedMenuItems(
new MenuCreateContext { ActivationMethod = "ContextMenu" },
AddInTree.BuildItems<MenuItemDescriptor>(addInTreePath, owner, false));
return CreateContextMenu(items); return CreateContextMenu(items);
} }
@ -131,9 +140,15 @@ namespace ICSharpCode.Core.Presentation
return contextMenu; return contextMenu;
} }
public static IList CreateMenuItems(UIElement inputBindingOwner, object owner, string addInTreePath, string activationMethod = null) public static IList CreateMenuItems(UIElement inputBindingOwner, object owner, string addInTreePath, string activationMethod = null, bool immediatelyExpandMenuBuildersForShortcuts = false)
{ {
IList items = CreateUnexpandedMenuItems(inputBindingOwner, AddInTree.BuildItems<MenuItemDescriptor>(addInTreePath, owner, false), activationMethod); IList items = CreateUnexpandedMenuItems(
new MenuCreateContext {
InputBindingOwner = inputBindingOwner,
ActivationMethod = activationMethod,
ImmediatelyExpandMenuBuildersForShortcuts =immediatelyExpandMenuBuildersForShortcuts
},
AddInTree.BuildItems<MenuItemDescriptor>(addInTreePath, owner, false));
return ExpandMenuBuilders(items, false); return ExpandMenuBuilders(items, false);
} }
@ -156,12 +171,12 @@ namespace ICSharpCode.Core.Presentation
} }
} }
internal static IList CreateUnexpandedMenuItems(UIElement inputBindingOwner, IEnumerable descriptors, string activationMethod) internal static IList CreateUnexpandedMenuItems(MenuCreateContext context, IEnumerable descriptors)
{ {
ArrayList result = new ArrayList(); ArrayList result = new ArrayList();
if (descriptors != null) { if (descriptors != null) {
foreach (MenuItemDescriptor descriptor in descriptors) { foreach (MenuItemDescriptor descriptor in descriptors) {
result.Add(CreateMenuItemFromDescriptor(inputBindingOwner, descriptor, activationMethod)); result.Add(CreateMenuItemFromDescriptor(context, descriptor));
} }
} }
return result; return result;
@ -191,7 +206,7 @@ namespace ICSharpCode.Core.Presentation
return result; return result;
} }
static object CreateMenuItemFromDescriptor(UIElement inputBindingOwner, MenuItemDescriptor descriptor, string activationMethod) static object CreateMenuItemFromDescriptor(MenuCreateContext context, MenuItemDescriptor descriptor)
{ {
Codon codon = descriptor.Codon; Codon codon = descriptor.Codon;
string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Command"; string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Command";
@ -205,17 +220,19 @@ namespace ICSharpCode.Core.Presentation
//return new MenuCheckBox(codon, descriptor.Caller); //return new MenuCheckBox(codon, descriptor.Caller);
case "Item": case "Item":
case "Command": case "Command":
return new MenuCommand(inputBindingOwner, codon, descriptor.Caller, createCommand, activationMethod); return new MenuCommand(context.InputBindingOwner, codon, descriptor.Caller, createCommand, context.ActivationMethod);
case "Menu": case "Menu":
var item = new CoreMenuItem(codon, descriptor.Caller) { var item = new CoreMenuItem(codon, descriptor.Caller) {
ItemsSource = new object[1], ItemsSource = new object[1],
SetEnabled = true SetEnabled = true
}; };
var subItems = CreateUnexpandedMenuItems(inputBindingOwner, descriptor.SubItems, activationMethod); var subItems = CreateUnexpandedMenuItems(context, descriptor.SubItems);
item.SubmenuOpened += (sender, args) => { item.SubmenuOpened += (sender, args) => {
item.ItemsSource = ExpandMenuBuilders(subItems, true); item.ItemsSource = ExpandMenuBuilders(subItems, true);
args.Handled = true; args.Handled = true;
}; };
if (context.ImmediatelyExpandMenuBuildersForShortcuts)
ExpandMenuBuilders(subItems, false);
return item; return item;
case "Builder": case "Builder":
IMenuItemBuilder builder = codon.AddIn.CreateObject(codon.Properties["class"]) as IMenuItemBuilder; IMenuItemBuilder builder = codon.AddIn.CreateObject(codon.Properties["class"]) as IMenuItemBuilder;

10
src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarService.cs

@ -72,9 +72,15 @@ namespace ICSharpCode.Core.Presentation
return "Label"; return "Label";
//return new ToolBarLabel(codon, caller); //return new ToolBarLabel(codon, caller);
case "DropDownButton": case "DropDownButton":
return new ToolBarDropDownButton(codon, caller, MenuService.CreateUnexpandedMenuItems(null, descriptor.SubItems, "ToolbarDropDownMenu")); return new ToolBarDropDownButton(
codon, caller, MenuService.CreateUnexpandedMenuItems(
new MenuService.MenuCreateContext { ActivationMethod = "ToolbarDropDownMenu" },
descriptor.SubItems));
case "SplitButton": case "SplitButton":
return new ToolBarSplitButton(codon, caller, MenuService.CreateUnexpandedMenuItems(null, descriptor.SubItems, "ToolbarDropDownMenu")); return new ToolBarSplitButton(
codon, caller, MenuService.CreateUnexpandedMenuItems(
new MenuService.MenuCreateContext { ActivationMethod = "ToolbarDropDownMenu" },
descriptor.SubItems));
case "Builder": case "Builder":
return codon.AddIn.CreateObject(codon.Properties["class"]); return codon.AddIn.CreateObject(codon.Properties["class"]);
default: default:

Loading…
Cancel
Save