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 @@
</PropertyGroup> </PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
<ItemGroup> <ItemGroup>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="WindowsBase">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="..\GlobalAssemblyInfo.cs"> <Compile Include="..\GlobalAssemblyInfo.cs">

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

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

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

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

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

@ -121,6 +121,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
DockPanel.SetDock(statusBar, Dock.Bottom); DockPanel.SetDock(statusBar, Dock.Bottom);
dockPanel.Children.Insert(dockPanel.Children.Count - 2, statusBar); dockPanel.Children.Insert(dockPanel.Children.Count - 2, statusBar);
Core.WinForms.MenuService.ExecuteCommand = ExecuteCommand;
UpdateMenu(); UpdateMenu();
AddHandler(Hyperlink.RequestNavigateEvent, new RequestNavigateEventHandler(OnRequestNavigate)); AddHandler(Hyperlink.RequestNavigateEvent, new RequestNavigateEventHandler(OnRequestNavigate));
@ -140,6 +141,21 @@ namespace ICSharpCode.SharpDevelop.Workbench
SD.StatusBar.SetMessage("${res:MainWindow.StatusBar.ReadyMessage}"); 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 // keep a reference to the event handler to prevent it from being garbage collected
// (CommandManager.RequerySuggested only keeps weak references to the event handlers) // (CommandManager.RequerySuggested only keeps weak references to the event handlers)
EventHandler requerySuggestedEventHandler; EventHandler requerySuggestedEventHandler;

Loading…
Cancel
Save