diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/Commands/ParallelStacksViewCommands.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/Commands/ParallelStacksViewCommands.cs index 84192784bf..c6b85ebf0c 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/Commands/ParallelStacksViewCommands.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/Commands/ParallelStacksViewCommands.cs @@ -25,11 +25,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads get { return pad.IsZoomControlVisible; } set { pad.IsZoomControlVisible = value; } } - - public override void Run() - { - IsChecked = !IsChecked; - } } public sealed class ToggleMethodViewCommand : AbstractCheckableMenuCommand @@ -50,11 +45,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads get { return pad.IsMethodView; } set { pad.IsMethodView = value; } } - - public override void Run() - { - IsChecked = !IsChecked; - } } public sealed class ParallelStacksViewCommand : AbstractComboBoxCommand diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Commands/FormsCommands.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Commands/FormsCommands.cs index 84c91f9139..79c0fc1b43 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Commands/FormsCommands.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Commands/FormsCommands.cs @@ -428,9 +428,6 @@ namespace ICSharpCode.FormsDesigner.Commands } } - public override void Run() - { - } } #endregion diff --git a/src/Main/Base/Project/Src/Gui/Pads/AbstractConsolePad.cs b/src/Main/Base/Project/Src/Gui/Pads/AbstractConsolePad.cs index 97b4ba5b48..1e446e3596 100755 --- a/src/Main/Base/Project/Src/Gui/Pads/AbstractConsolePad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/AbstractConsolePad.cs @@ -458,10 +458,5 @@ namespace ICSharpCode.SharpDevelop.Gui get { return pad.WordWrap; } set { pad.WordWrap = value; } } - - public override void Run() - { - IsChecked = !IsChecked; - } } } diff --git a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageViewToolbarCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageViewToolbarCommands.cs index 28f95aff41..874fb5edee 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageViewToolbarCommands.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageViewToolbarCommands.cs @@ -83,10 +83,5 @@ namespace ICSharpCode.SharpDevelop.Gui checkBox = (ToolBarCheckBox)Owner; } } - - public override void Run() - { - IsChecked = !IsChecked; - } } } diff --git a/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPadCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPadCommands.cs index a091a1fb49..7b02284a80 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPadCommands.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPadCommands.cs @@ -29,10 +29,5 @@ namespace ICSharpCode.SharpDevelop.Gui PropertyPad.Grid.HelpVisible = value; } } - - public override void Run() - { - PropertyPad.Grid.HelpVisible = !PropertyPad.Grid.HelpVisible; - } } } diff --git a/src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj b/src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj index 8f77b7f2c1..5b90e44f28 100644 --- a/src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj +++ b/src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj @@ -72,6 +72,7 @@ + diff --git a/src/Main/ICSharpCode.Core.Presentation/Menu/MenuCheckBox.cs b/src/Main/ICSharpCode.Core.Presentation/Menu/MenuCheckBox.cs new file mode 100644 index 0000000000..f005c0245a --- /dev/null +++ b/src/Main/ICSharpCode.Core.Presentation/Menu/MenuCheckBox.cs @@ -0,0 +1,55 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Threading; +using System.Windows; +using System.Windows.Data; +using System.Windows.Input; +using System.Windows.Threading; + +namespace ICSharpCode.Core.Presentation +{ + sealed class MenuCheckBox : CoreMenuItem + { + BindingExpressionBase isCheckedBinding; + + public MenuCheckBox(UIElement inputBindingOwner, Codon codon, object caller) + : base(codon, caller) + { + this.Command = CommandWrapper.GetCommand(codon, caller, true); + CommandWrapper wrapper = this.Command as CommandWrapper; + if (wrapper != null) { + ICheckableMenuCommand cmd = wrapper.GetAddInCommand() as ICheckableMenuCommand; + if (cmd != null) { + isCheckedBinding = SetBinding(IsCheckedProperty, new Binding("IsChecked") { Source = cmd, Mode = BindingMode.OneWay }); + } + } + + if (!string.IsNullOrEmpty(codon.Properties["shortcut"])) { + KeyGesture kg = MenuService.ParseShortcut(codon.Properties["shortcut"]); + MenuCommand.AddGestureToInputBindingOwner(inputBindingOwner, kg, this.Command, null); + this.InputGestureText = kg.GetDisplayStringForCulture(Thread.CurrentThread.CurrentUICulture); + } + } + + public override void UpdateStatus() + { + base.UpdateStatus(); + if (isCheckedBinding != null) + isCheckedBinding.UpdateTarget(); + } + + protected override void OnClick() + { + base.OnClick(); + Dispatcher.BeginInvoke( + DispatcherPriority.DataBind, + new Action( + delegate { + if (isCheckedBinding != null) + isCheckedBinding.UpdateTarget(); + })); + } + } +} diff --git a/src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs b/src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs index 11c3efc788..1a22b7184f 100644 --- a/src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs +++ b/src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs @@ -214,8 +214,7 @@ namespace ICSharpCode.Core.Presentation case "Separator": return new ConditionalSeparator(codon, descriptor.Caller, false); case "CheckBox": - return "CheckBox"; - //return new MenuCheckBox(codon, descriptor.Caller); + return new MenuCheckBox(context.InputBindingOwner, codon, descriptor.Caller); case "Item": case "Command": return new MenuCommand(context.InputBindingOwner, codon, descriptor.Caller, createCommand, context.ActivationMethod); diff --git a/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarCheckBox.cs b/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarCheckBox.cs index 19651dc479..ef8ee86f2f 100644 --- a/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarCheckBox.cs +++ b/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarCheckBox.cs @@ -6,6 +6,7 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Media; +using System.Windows.Threading; namespace ICSharpCode.Core.Presentation { @@ -52,12 +53,20 @@ namespace ICSharpCode.Core.Presentation this.Visibility = Visibility.Collapsed; else this.Visibility = Visibility.Visible; + if (isCheckedBinding != null) + isCheckedBinding.UpdateTarget(); } protected override void OnClick() { base.OnClick(); - isCheckedBinding.UpdateTarget(); + Dispatcher.BeginInvoke( + DispatcherPriority.DataBind, + new Action( + delegate { + if (isCheckedBinding != null) + isCheckedBinding.UpdateTarget(); + })); } } }