diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index 16badf5479..f104f709ad 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -129,7 +129,7 @@ diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs index 5e739fe083..8389e353af 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs @@ -25,9 +25,11 @@ using ICSharpCode.AvalonEdit.Rendering; using ICSharpCode.Core; using ICSharpCode.Core.Presentation; using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Editor; +using CommandManager=ICSharpCode.Core.Presentation.CommandManager; namespace ICSharpCode.AvalonEdit.AddIn { @@ -115,18 +117,21 @@ namespace ICSharpCode.AvalonEdit.AddIn } } - public CodeEditor() + static CodeEditor() { - var contextName = this.GetType().FullName; - var commandBindingInfo = new CommandBindingInfo(); - commandBindingInfo.OwnerInstance = this; + commandBindingInfo.OwnerTypeName = CommandManager.DefaultContextName; commandBindingInfo.RoutedCommandName = "SDWindowCommands.SplitView"; commandBindingInfo.ExecutedEventHandler = OnSplitView; - commandBindingInfo.CanExecutedEventHandler = OnCanSplitView; - CommandsRegistry.RegisterCommandBinding(commandBindingInfo); + commandBindingInfo.CanExecuteEventHandler = OnCanSplitView; + commandBindingInfo.Name = "CodeEditorCommandBinding"; + CommandManager.RegisterCommandBinding(commandBindingInfo); + } + + public CodeEditor() + { textMarkerService = new TextMarkerService(this); iconBarManager = new IconBarManager(); @@ -206,33 +211,56 @@ namespace ICSharpCode.AvalonEdit.AddIn primaryTextEditor.Save(stream); } - void OnCanSplitView(object sender, CanExecuteRoutedEventArgs e) + static void OnCanSplitView(object sender, CanExecuteRoutedEventArgs e) { - e.CanExecute = true; + var avalonEditViewContent = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ActiveViewContent as AvalonEditViewContent; + if(avalonEditViewContent == null) { + e.CanExecute = false; + return; + } + + var codeEditor = avalonEditViewContent.CodeEditor as CodeEditor; + if(codeEditor == null) { + e.CanExecute = false; + return; + } + + e.CanExecute = (codeEditor.ActiveTextEditor == codeEditor.PrimaryTextEditor); } - void OnSplitView(object sender, ExecutedRoutedEventArgs e) + + static void OnSplitView(object sender, ExecutedRoutedEventArgs e) { - if (secondaryTextEditor == null) { + var avalonEditViewContent = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ActiveViewContent as AvalonEditViewContent; + if(avalonEditViewContent == null) { + return; + } + + var codeEditor = avalonEditViewContent.CodeEditor as CodeEditor; + if(codeEditor == null) { + return; + } + + if (codeEditor.secondaryTextEditor == null) { // create secondary editor - this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); - secondaryTextEditor = CreateTextEditor(); - secondaryTextEditorAdapter = (CodeEditorAdapter)secondaryTextEditor.TextArea.GetService(typeof(ITextEditor)); - Debug.Assert(primaryTextEditorAdapter != null); + codeEditor.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); + codeEditor.secondaryTextEditor = codeEditor.CreateTextEditor(); + codeEditor.secondaryTextEditorAdapter = (CodeEditorAdapter)codeEditor.secondaryTextEditor.TextArea.GetService(typeof(ITextEditor)); + Debug.Assert(codeEditor.primaryTextEditorAdapter != null); - secondaryTextEditor.SetBinding(TextEditor.DocumentProperty, - new Binding(TextEditor.DocumentProperty.Name) { Source = primaryTextEditor }); - secondaryTextEditor.TextArea.SetBinding(TextArea.IndentationStrategyProperty, - new Binding(TextArea.IndentationStrategyProperty.Name) { Source = primaryTextEditor.TextArea }); - secondaryTextEditor.SyntaxHighlighting = primaryTextEditor.SyntaxHighlighting; + codeEditor.secondaryTextEditor.SetBinding(TextEditor.DocumentProperty, + new Binding(TextEditor.DocumentProperty.Name) { Source = codeEditor.primaryTextEditor }); + codeEditor.secondaryTextEditor.TextArea.SetBinding(TextArea.IndentationStrategyProperty, + new Binding(TextArea.IndentationStrategyProperty.Name) { Source = codeEditor.primaryTextEditor.TextArea }); + codeEditor.secondaryTextEditor.SyntaxHighlighting = codeEditor.primaryTextEditor.SyntaxHighlighting; - SetRow(secondaryTextEditor, 2); - this.Children.Add(secondaryTextEditor); + SetRow(codeEditor.secondaryTextEditor, 2); + codeEditor.Children.Add(codeEditor.secondaryTextEditor); } else { // remove secondary editor - this.Children.Remove(secondaryTextEditor); - secondaryTextEditor = null; - secondaryTextEditorAdapter = null; - this.RowDefinitions.RemoveAt(this.RowDefinitions.Count - 1); + codeEditor.Children.Remove(codeEditor.secondaryTextEditor); + codeEditor.secondaryTextEditor = null; + codeEditor.secondaryTextEditorAdapter = null; + codeEditor.RowDefinitions.RemoveAt(codeEditor.RowDefinitions.Count - 1); } } diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo index ac06e9d1f0..5d074f59e9 100644 Binary files a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo and b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement.suo differ diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Resources/StringResources.resx b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Resources/StringResources.resx index 7f6d85f8ed..e4e997af12 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Resources/StringResources.resx +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Resources/StringResources.resx @@ -118,13 +118,13 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Enter key gesture + Add gesture - Registered gestures + Shortcut gestures - Commands with same gestures assigned + Shortcuts with same gestures _Cancel @@ -167,4 +167,7 @@ Gesture added + + Failed to add a gesture. Such gesture already exists in shortcut gestures collections + \ No newline at end of file diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj index 44f9d76e0a..3e4054d68e 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/ShortcutsManagement.csproj @@ -148,7 +148,6 @@ Settings.settings True - @@ -166,7 +165,6 @@ ShortcutsTreeView.xaml - diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/GesturesCollectionConverter.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/GesturesCollectionConverter.cs index a9439c878f..a2b8ef2d73 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/GesturesCollectionConverter.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/GesturesCollectionConverter.cs @@ -22,8 +22,9 @@ namespace ICSharpCode.ShortcutsManagement.Converters /// String representing collection of gestures public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { + string converterValue = ""; if (value is InputGestureCollection && (targetType == typeof(string) || targetType.IsSubclassOf(typeof(string)))) { - return new InputGestureCollectionConverter().ConvertToInvariantString(value); + converterValue = new InputGestureCollectionConverter().ConvertToInvariantString(value); } if (value is ObservableCollection && (targetType == typeof(string) || targetType.IsSubclassOf(typeof(string)))) { @@ -31,10 +32,10 @@ namespace ICSharpCode.ShortcutsManagement.Converters foreach (var gesture in (ObservableCollection)value) { inputGestureCollection.Add(gesture); } - return new InputGestureCollectionConverter().ConvertToInvariantString(inputGestureCollection); + converterValue = new InputGestureCollectionConverter().ConvertToInvariantString(inputGestureCollection); } - return value.ToString(); + return converterValue.Replace("+", " + ").Replace(",", ", ").Replace(";", "; "); ; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/InputGestureConverter.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/InputGestureConverter.cs index d8431a8f84..9e9d34d65e 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/InputGestureConverter.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Converters/InputGestureConverter.cs @@ -21,19 +21,15 @@ namespace ICSharpCode.ShortcutsManagement.Converters /// public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - if (value is MultiKeyGesture && targetType == typeof(string)) + if (value is KeyGesture && targetType == typeof(string)) { - return new MultiKeyGestureConverter().ConvertToInvariantString(value).Replace("+", " + "); - } - - if(value is KeyGesture && targetType == typeof(string)) - { - return new KeyGestureConverter().ConvertToInvariantString(value).Replace("+", " + "); + var gestures = new InputGestureCollection(new[] {value}); + return new InputGestureCollectionConverter().ConvertToInvariantString(gestures).Replace("+", " + ").Replace(",", ", "); } if(value is MouseGesture && targetType == typeof(string)) { - return new MouseGestureConverter().ConvertToInvariantString(value).Replace("+", " + "); + return new MouseGestureConverter().ConvertToInvariantString(value); } return ""; diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/Shortcut.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/Shortcut.cs index 6be150bf0b..59234a91ee 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/Shortcut.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/Shortcut.cs @@ -12,7 +12,7 @@ namespace ICSharpCode.ShortcutsManagement.Data public class Shortcut : INotifyPropertyChanged, IShortcutTreeEntry { /// - /// List of input gestures which will invoke this action + /// List of input gestures which invoking this action /// public ObservableCollection Gestures { @@ -42,6 +42,11 @@ namespace ICSharpCode.ShortcutsManagement.Data } } + /// + /// Sort shortcut sub-elements. + /// + /// Does nothing. + /// public void SortSubEntries() { diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/ShortcutsFinder.cs b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/ShortcutsFinder.cs index eedca76483..496b9bc8ae 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/ShortcutsFinder.cs +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Data/ShortcutsFinder.cs @@ -99,7 +99,7 @@ namespace ICSharpCode.ShortcutsManagement.Data /// /// Gesture template which should match shortcut gesture partly to make it visible /// Filtering mode - public void FilterGesture(InputGesture inputGestureTemplate, GestureFilterMode mode) + public void FilterGesture(InputGesture inputGestureTemplate, GestureCompareMode mode) { FilterGesture(new InputGestureCollection(new[] { inputGestureTemplate }), mode); } @@ -111,7 +111,7 @@ namespace ICSharpCode.ShortcutsManagement.Data /// /// Collection of gesture templates which (atleast one) should match shortcut gesture partly to make it visible /// Filtering mode - public void FilterGesture(InputGestureCollection inputGestureTemplateCollection, GestureFilterMode mode) + public void FilterGesture(InputGestureCollection inputGestureTemplateCollection, GestureCompareMode mode) { Debug.WriteLine("Changed to" + new InputGestureCollectionConverter().ConvertToInvariantString(inputGestureTemplateCollection)); foreach (var entry in RootEntries) @@ -142,7 +142,7 @@ namespace ICSharpCode.ShortcutsManagement.Data if (rootShortcut != null) { rootShortcut.IsVisible = false; foreach (InputGesture template in inputGestureTemplateCollection) { - if (template.MatchesCollection(new InputGestureCollection(rootShortcut.Gestures), mode)) { + if (template.IsTemplateForAny(new InputGestureCollection(rootShortcut.Gestures), mode)) { rootShortcut.IsVisible = true; break; } @@ -158,7 +158,7 @@ namespace ICSharpCode.ShortcutsManagement.Data /// Collection of gesture templates which (atleast one) should match shortcut gesture partly to make it visible /// Filtering mode /// - private static bool FilterGesture(ShortcutCategory category, InputGestureCollection inputGestureTemplateCollection, GestureFilterMode mode) + private static bool FilterGesture(ShortcutCategory category, InputGestureCollection inputGestureTemplateCollection, GestureCompareMode mode) { // Apply filter to sub-categories var isSubElementVisible = false; @@ -171,21 +171,8 @@ namespace ICSharpCode.ShortcutsManagement.Data // Apply filter to shortcuts foreach (var shortcut in category.Shortcuts) { - var gestureMatched = false; - foreach (InputGesture template in inputGestureTemplateCollection) - { - if (shortcut.Gestures.Count > 0 && ((KeyGesture)shortcut.Gestures[0]).Key == Key.F5) - { - - } - - if (template.MatchesCollection(new InputGestureCollection(shortcut.Gestures), mode)) - { - gestureMatched = true; - break; - } - } - + var gestureMatched = inputGestureTemplateCollection.ContainsTemplateForAny(new InputGestureCollection(shortcut.Gestures), mode); + if (gestureMatched) { shortcut.IsVisible = true; isSubElementVisible = true; diff --git a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/MultiKeyGestureTextBox.xaml b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/MultiKeyGestureTextBox.xaml index 869f1a22b1..7bafb67fcd 100644 --- a/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/MultiKeyGestureTextBox.xaml +++ b/src/AddIns/Misc/ShortcutsManagement/ShortcutsManagement/Src/Dialogs/MultiKeyGestureTextBox.xaml @@ -37,8 +37,8 @@ - - + +