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 @@
-
-
+
+