Browse Source

fix context menu commands implemented as ICommand in Windows Forms Designer

pull/45/merge
Siegfried Pammer 12 years ago
parent
commit
a661a68967
  1. 9
      src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj
  2. 6
      src/Main/ICSharpCode.Core.WinForms/Menu/MenuCommand.cs
  3. 2
      src/Main/ICSharpCode.Core.WinForms/Menu/MenuService.cs
  4. 16
      src/Main/SharpDevelop/Workbench/WpfWorkbench.cs

9
src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj

@ -44,10 +44,19 @@ @@ -44,10 +44,19 @@
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
<ItemGroup>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\GlobalAssemblyInfo.cs">

6
src/Main/ICSharpCode.Core.WinForms/Menu/MenuCommand.cs

@ -66,9 +66,9 @@ namespace ICSharpCode.Core.WinForms @@ -66,9 +66,9 @@ namespace ICSharpCode.Core.WinForms
protected override void OnClick(System.EventArgs e)
{
base.OnClick(e);
if (command != null && command.CanExecute(caller)) {
ServiceSingleton.GetRequiredService<IAnalyticsMonitor>().TrackFeature(command.GetType().FullName, "Menu");
command.Execute(caller);
command = CommandWrapper.Unwrap(command);
if (command != null) {
MenuService.ExecuteCommand(command, caller);
}
}

2
src/Main/ICSharpCode.Core.WinForms/Menu/MenuService.cs

@ -12,6 +12,8 @@ namespace ICSharpCode.Core.WinForms @@ -12,6 +12,8 @@ namespace ICSharpCode.Core.WinForms
{
public static class MenuService
{
public static Action<System.Windows.Input.ICommand, object> ExecuteCommand;
public static void AddItemsToMenu(ToolStripItemCollection collection, object owner, string addInTreePath)
{
AddItemsToMenu(collection, AddInTree.BuildItems<MenuItemDescriptor>(addInTreePath, owner, false));

16
src/Main/SharpDevelop/Workbench/WpfWorkbench.cs

@ -121,6 +121,7 @@ namespace ICSharpCode.SharpDevelop.Workbench @@ -121,6 +121,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
DockPanel.SetDock(statusBar, Dock.Bottom);
dockPanel.Children.Insert(dockPanel.Children.Count - 2, statusBar);
Core.WinForms.MenuService.ExecuteCommand = ExecuteCommand;
UpdateMenu();
AddHandler(Hyperlink.RequestNavigateEvent, new RequestNavigateEventHandler(OnRequestNavigate));
@ -140,6 +141,21 @@ namespace ICSharpCode.SharpDevelop.Workbench @@ -140,6 +141,21 @@ namespace ICSharpCode.SharpDevelop.Workbench
SD.StatusBar.SetMessage("${res:MainWindow.StatusBar.ReadyMessage}");
}
void ExecuteCommand(ICommand command, object caller)
{
ServiceSingleton.GetRequiredService<IAnalyticsMonitor>()
.TrackFeature(command.GetType().FullName, "Menu");
var routedCommand = command as System.Windows.Input.RoutedCommand;
if (routedCommand != null) {
var target = System.Windows.Input.FocusManager.GetFocusedElement(this);
if (routedCommand.CanExecute(caller, target))
routedCommand.Execute(caller, target);
} else {
if (command.CanExecute(caller))
command.Execute(caller);
}
}
// keep a reference to the event handler to prevent it from being garbage collected
// (CommandManager.RequerySuggested only keeps weak references to the event handlers)
EventHandler requerySuggestedEventHandler;

Loading…
Cancel
Save