diff --git a/data/resources/StringResources.resx b/data/resources/StringResources.resx
index c6d41f1639..0be935f412 100644
--- a/data/resources/StringResources.resx
+++ b/data/resources/StringResources.resx
@@ -3789,6 +3789,10 @@ Please configure the NAnt executable's location in the SharpDevelop Options.Could not find type definition at the cursor position.
Error message when using Search>Find Base Classes when the cursor is not on a type reference.
+
+ Could not find type definition or type member at the cursor position.
+ Error message when using Search>Find Base Classes when the cursor is not on a type reference or type member.
+
Send Line to Ruby Console
@@ -6473,6 +6477,9 @@ Removed the end part of the original message ", reason '${Message}'" since this
Base classes of ${Name}
+
+ Base members of ${Name}
+
The operation cannot be performed because your source code contains errors:
@@ -6525,6 +6532,9 @@ Removed the end part of the original message ", reason '${Message}'" since this
Find base classes
+
+ Find base symbols
+
Find &derived classes
@@ -8182,4 +8192,13 @@ Error while starting:
This resource is not being used. Its purpose is to test the translation database and has
a line break
+
+ Tooltip settings
+
+
+ Insert selected code completion entry by typing the following characters:
+
+
+ Only insert selected code completion entry by typing <Tab> or <Enter>.
+
\ No newline at end of file
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
index 8921e09daf..1139a8a51d 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
@@ -74,7 +74,7 @@ namespace CSharpBinding
return "";
var builder = new TypeSystemAstBuilder();
MethodDeclaration decl;
- if (member is IMethod) {
+ if (member.SymbolKind == SymbolKind.Method) {
// If it's a method, convert it directly (including parameters + type parameters)
decl = (MethodDeclaration)builder.ConvertEntity(member);
} else {
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs
index 11bbd494da..69cba35ecd 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs
@@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using ICSharpCode.Core;
@@ -115,6 +116,7 @@ namespace CSharpBinding.Completion
} else {
startPos = caretOffset;
if (char.IsLetterOrDigit (completionChar) || completionChar == '_') {
+ if (!CodeCompletionOptions.CompleteWhenTyping) return false;
if (startPos > 1 && char.IsLetterOrDigit (completionContext.Document.GetCharAt (startPos - 2)))
return false;
completionData = cce.GetCompletionData(startPos, false);
@@ -137,7 +139,7 @@ namespace CSharpBinding.Completion
return true;
}
- if (!ctrlSpace) {
+ if (CodeCompletionOptions.InsightEnabled && !ctrlSpace) {
// Method Insight
var pce = new CSharpParameterCompletionEngine(
completionContext.Document,
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CompletionData.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CompletionData.cs
index 7c04f56b9f..d717ebaf7b 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CompletionData.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CompletionData.cs
@@ -78,13 +78,14 @@ namespace CSharpBinding.Completion
public IImage Image { get; set; }
public virtual double Priority {
- get { return 0; }
+ get { return CodeCompletionDataUsageCache.GetPriority(DisplayText, true); }
}
public virtual void Complete(CompletionContext context)
{
context.Editor.Document.Replace(context.StartOffset, context.Length, this.CompletionText);
context.EndOffset = context.StartOffset + this.CompletionText.Length;
+ CodeCompletionDataUsageCache.IncrementUsage(DisplayText);
}
object fancyContent;
diff --git a/src/AddIns/BackendBindings/WixBinding/Test/DirectoryImport/AddDirectoryTestFixture.cs b/src/AddIns/BackendBindings/WixBinding/Test/DirectoryImport/AddDirectoryTestFixture.cs
index 1f009ae3cf..a80adaa451 100644
--- a/src/AddIns/BackendBindings/WixBinding/Test/DirectoryImport/AddDirectoryTestFixture.cs
+++ b/src/AddIns/BackendBindings/WixBinding/Test/DirectoryImport/AddDirectoryTestFixture.cs
@@ -16,16 +16,11 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
-using ICSharpCode.SharpDevelop.Project;
+using System;
+using ICSharpCode.SharpDevelop;
using ICSharpCode.WixBinding;
using NUnit.Framework;
-using System;
-using System.Collections;
-using System.Collections.Specialized;
-using System.IO;
-using System.Xml;
using WixBinding.Tests.PackageFiles;
-using WixBinding.Tests.Utils;
namespace WixBinding.Tests.DirectoryImport
{
diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeInsertionTests.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeInsertionTests.cs
index 03a15dbee2..604353a77f 100644
--- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeInsertionTests.cs
+++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeInsertionTests.cs
@@ -21,6 +21,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
+using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using NUnit.Framework;
diff --git a/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs b/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs
index 6ea6bb3a16..893eb203ae 100644
--- a/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs
+++ b/src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs
@@ -152,6 +152,10 @@ namespace Debugger.AddIn.Breakpoints
return string.Format("{0} @{1}", this.FileName, this.LineNumber);
}
+ public override bool DisplaysTooltip {
+ get { return true; }
+ }
+
public override object CreateTooltipContent()
{
return new BreakpointEditorPopup(this) {
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin
index 9fb440f6b1..b74dd89bc2 100755
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin
@@ -149,20 +149,20 @@
icon="Icons.16x16.Class"
class = "ICSharpCode.AvalonEdit.AddIn.ContextActions.FindDerivedClassesOrOverrides"/>
-
+ class = "ICSharpCode.AvalonEdit.AddIn.ContextActions.FindBaseClassesOrMembers"/>
-
+
-
+ item="/SharpDevelop/Workbench/MainMenu/Search/FindBaseClassesOrMembers" />
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
index 0c14792c7c..df011392f8 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
@@ -569,6 +569,10 @@ namespace ICSharpCode.AvalonEdit.AddIn
SD.ParserService.ParseAsync(this.FileName, this.Document.CreateSnapshot()).FireAndForget();
} else {
if (e.Text.Length == 1) {
+ // disable all code completion bindings when CC is disabled
+ if (!CodeCompletionOptions.EnableCodeCompletion)
+ return;
+
foreach (ICodeCompletionBinding cc in CodeCompletionBindings) {
if (cc.HandleKeyPressed(adapter, c))
break;
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/FindBaseClasses.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/FindBaseClasses.cs
index 690d0b0b88..9194c1ca97 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/FindBaseClasses.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/FindBaseClasses.cs
@@ -31,16 +31,20 @@ using ICSharpCode.SharpDevelop.Editor.ContextActions;
namespace ICSharpCode.AvalonEdit.AddIn.ContextActions
{
- public class FindBaseClasses : ResolveResultMenuCommand
+ public class FindBaseClassesOrMembers : ResolveResultMenuCommand
{
public override void Run(ResolveResult symbol)
{
IEntity entityUnderCaret = GetSymbol(symbol) as IEntity;
if (entityUnderCaret is ITypeDefinition) {
MakePopupWithBaseClasses((ITypeDefinition)entityUnderCaret).OpenAtCaretAndFocus();
- } else {
- MessageService.ShowError("${res:ICSharpCode.Refactoring.NoClassUnderCursorError}");
+ return;
}
+ if (entityUnderCaret is IMember) {
+ MakePopupWithBaseMembers((IMember)entityUnderCaret).OpenAtCaretAndFocus();
+ return;
+ }
+ MessageService.ShowError("${res:ICSharpCode.Refactoring.NoClassOrMemberUnderCursorError}");
}
static ContextActionsPopup MakePopupWithBaseClasses(ITypeDefinition @class)
@@ -49,14 +53,54 @@ namespace ICSharpCode.AvalonEdit.AddIn.ContextActions
var popupViewModel = new ContextActionsPopupViewModel();
popupViewModel.Title = MenuService.ConvertLabel(StringParser.Parse(
"${res:SharpDevelop.Refactoring.BaseClassesOf}", new StringTagPair("Name", @class.Name)));
- popupViewModel.Actions = BuildListViewModel(baseClassList);
+ popupViewModel.Actions = BuildBaseClassListViewModel(baseClassList);
return new ContextActionsPopup { Actions = popupViewModel };
}
- static ObservableCollection BuildListViewModel(IEnumerable classList)
+ static ObservableCollection BuildBaseClassListViewModel(IEnumerable classList)
{
return new ObservableCollection(
classList.Select(@class => GoToEntityAction.MakeViewModel(@class, null)));
}
+
+ #region Base (overridden) members
+ static ContextActionsPopup MakePopupWithBaseMembers(IMember member)
+ {
+ var baseClassList = member.DeclaringTypeDefinition.GetAllBaseTypeDefinitions().Where(
+ baseClass => baseClass != member.DeclaringTypeDefinition).ToList();
+ var popupViewModel = new ContextActionsPopupViewModel {
+ Title = MenuService.ConvertLabel(StringParser.Parse(
+ "${res:SharpDevelop.Refactoring.BaseMembersOf}",
+ new StringTagPair("Name", member.FullName))
+ )};
+ popupViewModel.Actions = BuildBaseMemberListViewModel(member);
+ return new ContextActionsPopup { Actions = popupViewModel };
+ }
+
+ static ObservableCollection BuildBaseMemberListViewModel(IMember member)
+ {
+ var c = new ObservableCollection();
+ ObservableCollection lastBase = c;
+
+ IMember thisMember = member;
+ while (thisMember != null) {
+ IMember baseMember = InheritanceHelper.GetBaseMembers(thisMember, true).FirstOrDefault();
+ if (baseMember != null) {
+ // Only allow this base member, if overriding a virtual/abstract member of a class
+ // or implementing a member of an interface.
+ if ((baseMember.DeclaringTypeDefinition.Kind == TypeKind.Interface) || (baseMember.IsOverridable && thisMember.IsOverride)) {
+ var newChild = new ObservableCollection();
+ lastBase.Add(GoToEntityAction.MakeViewModel(baseMember, newChild));
+ lastBase = newChild;
+ } else {
+ thisMember = null;
+ }
+ }
+ thisMember = baseMember;
+ }
+
+ return c;
+ }
+ #endregion
}
}
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs
index 24f8b416da..ec63f87575 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs
@@ -19,6 +19,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
@@ -286,7 +287,10 @@ namespace ICSharpCode.AvalonEdit.AddIn
int line = GetLineFromMousePosition(e);
if (line < 1) return;
- IBookmark bm = GetBookmarkFromLine(line);
+ IBookmark bm = manager.Bookmarks
+ .Where(m => m.LineNumber == line && m.DisplaysTooltip)
+ .OrderBy(m => m.ZOrder)
+ .FirstOrDefault();
if (bm == null) return;
object content = bm.CreateTooltipContent();
popupToolTip = content as Popup;
@@ -301,7 +305,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
e.Handled = true;
popupToolTip.IsOpen = true;
distanceToPopupLimit = double.PositiveInfinity; // reset limit; we'll re-calculate it on the next mouse movement
- } else {
+ } else if (content != null) {
if (toolTip == null) {
toolTip = new ToolTip();
toolTip.Closed += ToolTipClosed;
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetCompletionItem.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetCompletionItem.cs
index d2882c81f7..4b58cbfdc4 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetCompletionItem.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetCompletionItem.cs
@@ -49,8 +49,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
if (textArea == null)
throw new ArgumentException("textEditor must be an AvalonEdit text editor");
this.codeSnippet = codeSnippet;
-
- //this.Priority = CodeCompletionDataUsageCache.GetPriority("snippet" + codeSnippet.Name, true);
+ this.Priority = CodeCompletionDataUsageCache.GetPriority("snippet" + codeSnippet.Name, true);
}
public bool AlwaysInsertSnippet { get; set; }
diff --git a/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs b/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs
index bfe4d78981..cfeb86cb19 100644
--- a/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs
+++ b/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs
@@ -136,12 +136,12 @@ namespace HexEditor.View
void DocumentChanged(object sender, EventArgs e)
{
if (PrimaryFile != null) PrimaryFile.MakeDirty();
- CommandManager.InvalidateRequerySuggested();
+ SD.WinForms.InvalidateCommands();
}
void SelectionChanged(object sender, System.EventArgs e)
{
- CommandManager.InvalidateRequerySuggested();
+ SD.WinForms.InvalidateCommands();
}
}
}
diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj
index 6b2f2acc10..58b4161739 100644
--- a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj
+++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj
@@ -54,7 +54,7 @@
-
+
Component
diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs
index ff5ceefb46..b81caa748d 100644
--- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs
+++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs
@@ -21,6 +21,7 @@ using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core;
+using ICSharpCode.SharpDevelop.WinForms;
namespace ResourceEditor
{
@@ -39,7 +40,7 @@ namespace ResourceEditor
protected ListViewViewState internalState = ListViewViewState.Nothing;
- public System.Enum InternalState {
+ public Enum InternalState {
get {
return internalState;
}
@@ -55,14 +56,14 @@ namespace ResourceEditor
public ResourceEditorControl()
{
InitializeComponent();
- resourceList.SelectedIndexChanged += new EventHandler(resourceListSelectionChanged);
+ resourceList.SelectedIndexChanged += ResourceListSelectionChanged;
}
- void resourceListSelectionChanged(object sender, EventArgs e)
+ void ResourceListSelectionChanged(object sender, EventArgs e)
{
if(resourceList.SelectedItems.Count == 0) {
internalState = ListViewViewState.Nothing;
- showResource(null);
+ ShowResource(null);
} else {
internalState = ListViewViewState.ItemsSelected;
}
@@ -72,7 +73,7 @@ namespace ResourceEditor
}
object key = resourceList.SelectedItems[0].Text;
ResourceItem item = (ResourceItem)resourceList.Resources[key.ToString()];
- showResource(item);
+ ShowResource(item);
}
void InitializeComponent()
@@ -92,17 +93,17 @@ namespace ResourceEditor
Controls.Add(splitter);
Controls.Add(resourceList);
- this.Resize += new EventHandler(initializeLayout);
+ this.Resize += InitializeLayout;
}
- void initializeLayout(object sender, EventArgs e)
+ void InitializeLayout(object sender, EventArgs e)
{
resourceList.Height = Convert.ToInt32(0.75 * Height);
}
- void showView(Control viewer)
+ void ShowView(Control viewer)
{
- // remvoe old view if there is one
+ // remove old view if there is one
if(panel.Controls.Count == 1) {
Control control = panel.Controls[0];
panel.Controls.Remove(control);
@@ -114,41 +115,41 @@ namespace ResourceEditor
panel.Controls.Add(viewer);
currentView = (IResourceView)viewer;
currentView.WriteProtected = resourceList.WriteProtected;
- currentView.ResourceChanged += new ResourceChangedEventHandler(viewResourceChanged);
+ currentView.ResourceChanged += ViewResourceChanged;
}
}
- void viewResourceChanged(object sender, ResourceEventArgs e)
+ void ViewResourceChanged(object sender, ResourceEventArgs e)
{
resourceList.SetResourceValue(e.ResourceName, e.ResourceValue);
}
- void showResource(ResourceItem item)
+ void ShowResource(ResourceItem item)
{
if(item == null) {
- showView(null);
+ ShowView(null);
return;
}
if (item.ResourceValue is Icon) {
IconView iv = new IconView(item);
- showView(iv);
+ ShowView(iv);
} else if(item.ResourceValue is Bitmap) {
BitmapView bv = new BitmapView(item);
- showView(bv);
+ ShowView(bv);
} else if(item.ResourceValue is Cursor) {
CursorView cv = new CursorView(item);
- showView(cv);
+ ShowView(cv);
} else if(item.ResourceValue is string) {
TextView tv = new TextView(item);
- showView(tv);
+ ShowView(tv);
} else if(item.ResourceValue is byte[]) {
BinaryView bv = new BinaryView(item);
- showView(bv);
+ ShowView(bv);
} else if(item.ResourceValue is bool) {
BooleanView bv = new BooleanView(item);
- showView(bv);
+ ShowView(bv);
} else {
- showView(null);
+ ShowView(null);
}
}
diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs
similarity index 79%
rename from src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs
rename to src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs
index 28ad9149da..6fc0f754c0 100644
--- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs
+++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs
@@ -32,7 +32,6 @@ namespace ResourceEditor
{
public class ResourceEditorDisplayBinding : IDisplayBinding
{
- // IDisplayBinding interface
public bool CanCreateContentForFile(FileName fileName)
{
return true; // definition in .addin does extension-based filtering
@@ -54,9 +53,6 @@ namespace ResourceEditor
}
}
- ///
- /// This class describes the main functionality of a language codon
- ///
public class ResourceEditWrapper : AbstractViewContentHandlingLoadErrors, IClipboardHandler
{
ResourceEditorControl resourceEditor = new ResourceEditorControl();
@@ -73,14 +69,16 @@ namespace ResourceEditor
void SetDirty(object sender, EventArgs e)
{
- this.PrimaryFile.MakeDirty();
+ PrimaryFile.MakeDirty();
+ SD.WinForms.InvalidateCommands();
}
public ResourceEditWrapper(OpenedFile file)
{
this.TabPageText = "Resource editor";
- base.UserContent = resourceEditor;
- resourceEditor.ResourceList.Changed += new EventHandler(SetDirty);
+ UserContent = resourceEditor;
+ resourceEditor.ResourceList.Changed += SetDirty;
+ resourceEditor.ResourceList.ItemSelectionChanged += (sender, e) => SD.WinForms.InvalidateCommands();
this.Files.Add(file);
}
@@ -104,7 +102,7 @@ namespace ResourceEditor
public bool EnableCut
{
get {
- if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) {
+ if (resourceEditor.ResourceList.IsEditing) {
return false;
}
return resourceEditor.ResourceList.SelectedItems.Count > 0;
@@ -114,7 +112,7 @@ namespace ResourceEditor
public bool EnableCopy
{
get {
- if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) {
+ if (resourceEditor.ResourceList.IsEditing) {
return false;
}
return resourceEditor.ResourceList.SelectedItems.Count > 0;
@@ -124,7 +122,7 @@ namespace ResourceEditor
public bool EnablePaste
{
get {
- if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) {
+ if (resourceEditor.ResourceList.IsEditing) {
return false;
}
return true;
@@ -134,7 +132,7 @@ namespace ResourceEditor
public bool EnableDelete
{
get {
- if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) {
+ if (resourceEditor.ResourceList.IsEditing) {
return false;
}
return resourceEditor.ResourceList.SelectedItems.Count > 0;
@@ -144,7 +142,7 @@ namespace ResourceEditor
public bool EnableSelectAll
{
get {
- if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) {
+ if (resourceEditor.ResourceList.IsEditing) {
return false;
}
return true;
@@ -241,33 +239,17 @@ namespace ResourceEditor
public void Delete()
{
- if (resourceEditor.ResourceList.WriteProtected) {
+ var resourceList = resourceEditor.ResourceList;
+ if (resourceList.WriteProtected || resourceList.SelectedItems.Count == 0)
return;
- }
-
- if (resourceEditor.ResourceList.SelectedItems.Count==0) return; // nothing to do
- DialogResult rc;
-
- try {
-
- rc=MessageBox.Show(ResourceService.GetString("ResourceEditor.DeleteEntry.Confirm"),ResourceService.GetString("ResourceEditor.DeleteEntry.Title"),MessageBoxButtons.OKCancel);
- }
- catch {
- // when something happens - like resource is missing - try to use default message
- rc = MessageBox.Show("Do you really want to delete?","Delete-Warning!",MessageBoxButtons.OKCancel);
- }
-
- if (rc != DialogResult.OK) {
+ if (!SD.MessageService.AskQuestion("${res:ResourceEditor.DeleteEntry.Confirm}", "${res:ResourceEditor.DeleteEntry.Title}"))
return;
- }
- foreach (ListViewItem item in resourceEditor.ResourceList.SelectedItems) {
- //// not clear why this check is present here - seems to be extra
- ////if (item.Text != null) {
- resourceEditor.ResourceList.Resources.Remove(item.Text);
- resourceEditor.ResourceList.Items.Remove(item);
+ foreach (ListViewItem item in resourceList.SelectedItems) {
+ resourceList.Resources.Remove(item.Text);
+ resourceList.Items.Remove(item);
// and set dirty flag
- resourceEditor.ResourceList.OnChanged();
+ resourceList.OnChanged();
}
}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs
index bc1a88fefd..bf4e38bc32 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs
@@ -200,6 +200,7 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
if (listBox == null && value != null)
ApplyTemplate();
listBox.SelectedItem = value;
+ listBox.ScrollIntoView(value);
}
}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs
index 1810c94e0e..3a81b86a0f 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs
@@ -17,13 +17,10 @@
// DEALINGS IN THE SOFTWARE.
using System;
-using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
-using System.Windows.Data;
using System.Windows.Input;
-using System.Windows.Threading;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Editing;
@@ -67,6 +64,8 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
}
#region ToolTip handling
+ public bool ShowDocumentationTooltips { get; set; }
+
void toolTip_Closed(object sender, RoutedEventArgs e)
{
// Clear content after tooltip is closed.
@@ -78,6 +77,11 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
void completionList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
+ if (!ShowDocumentationTooltips) {
+ toolTip.IsOpen = false;
+ return;
+ }
+
var item = completionList.SelectedItem;
if (item == null)
return;
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs
index f63b49f172..30aa5b8cb3 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs
@@ -180,7 +180,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
return;
var returnTypeRR = ctx.Resolve(varDecl.Type);
- if (returnTypeRR.Type.IsReferenceType.HasValue && returnTypeRR.Type.IsReferenceType.Value)
+ if (!IsValidConstType(returnTypeRR.Type))
return;
var variable = varDecl.Variables.First();
diff --git a/src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs b/src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs
index 1f060e0787..e1fbb0accf 100644
--- a/src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs
+++ b/src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs
@@ -195,6 +195,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks
{
}
+ public virtual bool DisplaysTooltip {
+ get { return false; }
+ }
+
public virtual object CreateTooltipContent()
{
return null;
diff --git a/src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs b/src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs
index 1c077f4d45..26825bd7c7 100644
--- a/src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs
+++ b/src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs
@@ -98,6 +98,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks
throw new NotSupportedException();
}
+ bool IBookmark.DisplaysTooltip {
+ get { return false; }
+ }
+
object IBookmark.CreateTooltipContent()
{
return null;
diff --git a/src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs b/src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs
index c80366c656..07efd13911 100644
--- a/src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs
+++ b/src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs
@@ -61,6 +61,11 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks
///
void Drop(int lineNumber);
+ ///
+ /// Gets whether this bookmark might want to display a tooltip.
+ ///
+ bool DisplaysTooltip { get; }
+
///
/// Creates the tooltip content for the bookmark.
///
diff --git a/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml b/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml
new file mode 100644
index 0000000000..d2bca2d28d
--- /dev/null
+++ b/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs b/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs
new file mode 100644
index 0000000000..4734199deb
--- /dev/null
+++ b/src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs
@@ -0,0 +1,41 @@
+// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this
+// software and associated documentation files (the "Software"), to deal in the Software
+// without restriction, including without limitation the rights to use, copy, modify, merge,
+// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+using System;
+using System.Windows;
+using ICSharpCode.SharpDevelop.Gui;
+
+namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
+{
+ ///
+ /// Interaction logic for CodeCompletionOptionPanel.xaml
+ ///
+ public partial class CodeCompletionOptionPanel : OptionPanel
+ {
+ public CodeCompletionOptionPanel()
+ {
+ InitializeComponent();
+ this.DataContext = this;
+ }
+
+ void Button_Click(object sender, RoutedEventArgs e)
+ {
+ CodeCompletionDataUsageCache.ResetCache();
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItem.cs b/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItem.cs
index d81880c64e..1db9c66aca 100644
--- a/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItem.cs
+++ b/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItem.cs
@@ -61,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
public virtual string Description { get; set; }
public virtual IImage Image { get; set; }
- public virtual double Priority { get { return 0; } }
+ public virtual double Priority { get; protected set; }
public DefaultCompletionItem(string text)
{
diff --git a/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs b/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs
index faefa1a8aa..031d1abb6a 100644
--- a/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs
+++ b/src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs
@@ -138,16 +138,20 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
///
public virtual CompletionItemListKeyResult ProcessInput(char key)
{
- if (key == ' ' && this.InsertSpace) {
- this.InsertSpace = false; // insert space only once
- return CompletionItemListKeyResult.BeforeStartKey;
- } else if (char.IsLetterOrDigit(key) || key == '_') {
- this.InsertSpace = false; // don't insert space if user types normally
+ if (char.IsLetterOrDigit(key) || key == '_') {
+ InsertSpace = false; // don't insert space if user types normally
return CompletionItemListKeyResult.NormalKey;
- } else {
- // do not reset insertSpace when doing an insertion!
- return CompletionItemListKeyResult.InsertionKey;
}
+ if (key == ' ' && InsertSpace) {
+ InsertSpace = false;
+ // insert space only once
+ return CompletionItemListKeyResult.BeforeStartKey;
+ }
+ if (CodeCompletionOptions.CommitOnTabEnterOnly || !CodeCompletionOptions.CommitOnChar(key)) {
+ return CompletionItemListKeyResult.Cancel;
+ }
+ // do not reset insertSpace when doing an insertion!
+ return CompletionItemListKeyResult.InsertionKey;
}
///
diff --git a/src/Main/Base/Project/Editor/ToolTipService.cs b/src/Main/Base/Project/Editor/ToolTipService.cs
index 912765c35e..aa98e2bf6d 100644
--- a/src/Main/Base/Project/Editor/ToolTipService.cs
+++ b/src/Main/Base/Project/Editor/ToolTipService.cs
@@ -41,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Editor
if (e == null)
throw new ArgumentNullException("e");
- if (!CodeCompletionOptions.EnableCodeCompletion || !CodeCompletionOptions.TooltipsEnabled) {
+ if (!CodeCompletionOptions.TooltipsEnabled) {
e.Handled = true;
return;
}
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
index c590200465..f56c9d0d50 100755
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
@@ -2178,7 +2178,7 @@
+ class = "ICSharpCode.SharpDevelop.Editor.CodeCompletion.CodeCompletionOptionPanel"/>
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index 8013c235ff..1b58b2e940 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -140,6 +140,9 @@
+
+ CodeCompletionOptionPanel.xaml
+
@@ -228,7 +231,6 @@
-
@@ -890,7 +892,7 @@
-
+
diff --git a/src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml b/src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml
deleted file mode 100644
index d450b86852..0000000000
--- a/src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml.cs b/src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml.cs
deleted file mode 100644
index 906da07b7d..0000000000
--- a/src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy of this
-// software and associated documentation files (the "Software"), to deal in the Software
-// without restriction, including without limitation the rights to use, copy, modify, merge,
-// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
-// to whom the Software is furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in all copies or
-// substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-using System;
-using System.Windows;
-using ICSharpCode.Core;
-using ICSharpCode.SharpDevelop.Gui;
-
-namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
-{
- ///
- /// Interaction logic for CodeCompletionPanelXaml.xaml
- ///
- public partial class CodeCompletionPanel : OptionPanel
- {
- public CodeCompletionPanel()
- {
- InitializeComponent();
- this.DataContext = this;
- }
-
- #region overrides
-
- public override void LoadOptions()
- {
- base.LoadOptions();
- this.EnableCodeCompletion = CodeCompletionOptions.EnableCodeCompletion;
- this.UseDataUsageCache = CodeCompletionOptions.DataUsageCacheEnabled;
- DataUsageCacheItemCount = CodeCompletionOptions.DataUsageCacheItemCount;
- UseTooltips = CodeCompletionOptions.TooltipsEnabled;
- useDebugTooltipsOnly.IsChecked = CodeCompletionOptions.TooltipsOnlyWhenDebugging;
- completeWhenTyping.IsChecked = CodeCompletionOptions.CompleteWhenTyping;
- useKeywordCompletionCheckBox.IsChecked = CodeCompletionOptions.KeywordCompletionEnabled;
- UseInsight = CodeCompletionOptions.InsightEnabled;
- refreshInsightOnComma.IsChecked = CodeCompletionOptions.InsightRefreshOnComma;
- }
-
-
- public override bool SaveOptions()
- {
- CodeCompletionOptions.EnableCodeCompletion = this.EnableCodeCompletion;
- CodeCompletionOptions.DataUsageCacheEnabled = this.UseDataUsageCache;
- CodeCompletionOptions.DataUsageCacheItemCount = DataUsageCacheItemCount;
- CodeCompletionOptions.TooltipsEnabled = UseTooltips;
- CodeCompletionOptions.TooltipsOnlyWhenDebugging = (bool)useDebugTooltipsOnly.IsChecked;
- CodeCompletionOptions.CompleteWhenTyping = (bool)completeWhenTyping.IsChecked;
- CodeCompletionOptions.KeywordCompletionEnabled = (bool)useKeywordCompletionCheckBox.IsChecked;
- CodeCompletionOptions.InsightEnabled = UseInsight;
- CodeCompletionOptions.InsightRefreshOnComma = (bool)refreshInsightOnComma.IsChecked;
- return base.SaveOptions();
- }
-
- #endregion
-
- #region Properties
-
- private bool enableCodeCompletion;
-
- public bool EnableCodeCompletion {
- get { return enableCodeCompletion; }
- set { enableCodeCompletion = value;
- base.RaisePropertyChanged(() => EnableCodeCompletion);}
- }
-
-
- private bool useDataUsageCache;
-
- public bool UseDataUsageCache {
- get { return useDataUsageCache; }
- set { useDataUsageCache = value;
- base.RaisePropertyChanged(() => UseDataUsageCache);}
- }
-
- private int dataUsageCacheItemCount;
-
- public int DataUsageCacheItemCount {
- get { return dataUsageCacheItemCount; }
- set { dataUsageCacheItemCount = value;
- base.RaisePropertyChanged(() => DataUsageCacheItemCount);}
- }
-
-
- private bool useTooltips;
-
- public bool UseTooltips {
- get { return useTooltips; }
- set { useTooltips = value;
- base.RaisePropertyChanged(() => UseTooltips);}
- }
-
- private bool useInsight;
-
- public bool UseInsight {
- get { return useInsight; }
- set { useInsight = value;
- base.RaisePropertyChanged(() => UseInsight);}
- }
-
- #endregion
-
-
- void Button_Click(object sender, RoutedEventArgs e)
- {
- CodeCompletionDataUsageCache.ResetCache();
- }
- }
-}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilCommandLine.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilCommandLine.cs
index 5cc6c8780a..3e1762be87 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilCommandLine.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilCommandLine.cs
@@ -24,7 +24,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class SvcUtilCommandLine
{
- StringBuilder argumentBuilder = new StringBuilder();
+ List arguments = new List();
public SvcUtilCommandLine(ServiceReferenceGeneratorOptions options)
{
@@ -32,7 +32,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
}
public string Command { get; set; }
- public string Arguments { get; private set; }
+
+ public string[] GetArguments()
+ {
+ return arguments.ToArray();
+ }
void GenerateCommandLine(ServiceReferenceGeneratorOptions options)
{
@@ -48,8 +52,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
AppendIfNotEmpty("/ct:", options.GetDictionaryCollectionTypeDescription());
AppendAssemblyReferences(options.Assemblies);
AppendIfNotEmpty(options.Url);
-
- this.Arguments = argumentBuilder.ToString();
}
void AppendIfTrue(string argument, bool flag)
@@ -62,7 +64,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
void AppendIfNotEmpty(string argumentName, string argumentValue)
{
if (!String.IsNullOrEmpty(argumentValue)) {
- Append(argumentName + GetQuotedArgument(argumentValue));
+ Append(argumentName + argumentValue);
}
}
@@ -75,29 +77,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
void Append(string argument)
{
- argumentBuilder.Append(argument);
- argumentBuilder.Append(' ');
- }
-
- public override string ToString()
- {
- return String.Format(
- "{0} {1}",
- GetQuotedCommand(),
- Arguments);
- }
-
- string GetQuotedCommand()
- {
- return GetQuotedArgument(Command);
- }
-
- string GetQuotedArgument(string argument)
- {
- if (ContainsSpaceCharacter(argument)) {
- return String.Format("\"{0}\"", argument);
- }
- return argument;
+ arguments.Add(argument);
}
bool ContainsSpaceCharacter(string text)
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilRunner.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilRunner.cs
index ad54add75e..c18949da6d 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilRunner.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilRunner.cs
@@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
var commandLine = new SvcUtilCommandLine(Options);
commandLine.Command = GetSvcUtilPath();
using (ProcessRunner processRunner = new ProcessRunner()) {
- this.ExitCode = await processRunner.RunInOutputPadAsync(SvcUtilMessageView.Category, commandLine.Command, ProcessRunner.CommandLineToArgumentArray(commandLine.Arguments));
+ this.ExitCode = await processRunner.RunInOutputPadAsync(SvcUtilMessageView.Category, commandLine.Command, commandLine.GetArguments());
}
if (ProcessExited != null) {
ProcessExited(this, new EventArgs());
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReferenceHelper.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReferenceHelper.cs
index fdde3ea3f4..e88a1aa5d1 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReferenceHelper.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReferenceHelper.cs
@@ -24,12 +24,12 @@ using System.Web.Services.Discovery;
namespace ICSharpCode.SharpDevelop.Gui
{
internal static class ServiceReferenceHelper
- {
+ {
public static string GetServiceName(ServiceDescription description)
{
if (description.Name != null) {
return description.Name;
- } else if (description.RetrievalUrl != null) {
+ } else if (!String.IsNullOrEmpty(description.RetrievalUrl)) {
Uri uri = new Uri(description.RetrievalUrl);
if (uri.Segments.Length > 0) {
return uri.Segments[uri.Segments.Length - 1];
diff --git a/src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs b/src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs
index 02f9110143..defd05dddb 100644
--- a/src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs
+++ b/src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs
@@ -44,7 +44,7 @@ namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators
string typesList = condition.Properties["type"];
if (typesList != null) {
foreach (string type in typesList.Split(',')) {
- switch (type) {
+ switch (type.Trim()) {
case "*":
// Wildcard -> allow any type
return true;
diff --git a/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs b/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs
index 29344d06c9..fb84cba889 100644
--- a/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs
+++ b/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs
@@ -172,27 +172,36 @@ namespace ICSharpCode.SharpDevelop.Project
static void MainFormActivated()
{
- if (wasChangedExternally && !showingMessageBox) {
-
- if (ProjectService.OpenSolution != null) {
- // Set wasChangedExternally=false only after the dialog is closed,
- // so that additional changes to the project while the dialog is open
- // don't cause it to appear twice.
-
- // The MainFormActivated event occurs when the dialog is closed before
- // we get a change to set wasChangedExternally=false, so we use 'showingMessageBox'
- // to prevent the dialog from appearing infititely.
- showingMessageBox = true;
- int result = MessageService.ShowCustomDialog(MessageService.DefaultMessageBoxTitle, "${res:ICSharpCode.SharpDevelop.Project.SolutionAlteredExternallyMessage}", 0, 1, "${res:ICSharpCode.SharpDevelop.Project.ReloadSolution}", "${res:ICSharpCode.SharpDevelop.Project.KeepOldSolution}", "${res:ICSharpCode.SharpDevelop.Project.CloseSolution}");
- showingMessageBox = false;
- wasChangedExternally = false;
- if (result == 0)
- SD.ProjectService.OpenSolutionOrProject(ProjectService.OpenSolution.FileName);
- else if (result == 2)
- new CloseSolution().Run();
- } else {
- wasChangedExternally = false;
+ if (wasChangedExternally) {
+ if (!showingMessageBox) {
+ if (ProjectService.OpenSolution != null) {
+ // Set wasChangedExternally=false only after the dialog is closed,
+ // so that additional changes to the project while the dialog is open
+ // don't cause it to appear twice.
+
+ // The MainFormActivated event occurs when the dialog is closed before
+ // we get a change to set wasChangedExternally=false, so we use 'showingMessageBox'
+ // to prevent the dialog from appearing infititely.
+ showingMessageBox = true;
+ int result = MessageService.ShowCustomDialog(MessageService.DefaultMessageBoxTitle, "${res:ICSharpCode.SharpDevelop.Project.SolutionAlteredExternallyMessage}", 0, 1, "${res:ICSharpCode.SharpDevelop.Project.ReloadSolution}", "${res:ICSharpCode.SharpDevelop.Project.KeepOldSolution}", "${res:ICSharpCode.SharpDevelop.Project.CloseSolution}");
+ showingMessageBox = false;
+ wasChangedExternally = false;
+ if (result == 1) {
+ FileChangeWatcher.AskForReload();
+ } else {
+ FileChangeWatcher.CancelReloadQueue();
+ if (result == 0) {
+ SD.ProjectService.OpenSolutionOrProject(ProjectService.OpenSolution.FileName);
+ } else {
+ new CloseSolution().Run();
+ }
+ }
+ } else {
+ wasChangedExternally = false;
+ }
}
+ } else {
+ FileChangeWatcher.AskForReload();
}
}
diff --git a/src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs b/src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs
index b82f1bb429..730bb2ac95 100644
--- a/src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs
+++ b/src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs
@@ -63,30 +63,35 @@ namespace ICSharpCode.SharpDevelop
set { properties.Set("TooltipsOnlyWhenDebugging", value); }
}
- public static bool KeywordCompletionEnabled {
- get { return properties.Get("KeywordCompletionEnabled", true); }
- set { properties.Set("KeywordCompletionEnabled", value); }
- }
-
public static bool CompleteWhenTyping {
get { return properties.Get("CompleteWhenTyping", true); }
set { properties.Set("CompleteWhenTyping", value); }
}
+ public static bool CommitOnTabEnterOnly {
+ get { return properties.Get("CommitOnTabEnterOnly", false); }
+ set { properties.Set("CommitOnTabEnterOnly", value); }
+ }
+
public static bool InsightEnabled {
get { return properties.Get("InsightEnabled", true); }
set { properties.Set("InsightEnabled", value); }
}
- public static bool InsightRefreshOnComma {
- get { return properties.Get("InsightRefreshOnComma", true); }
- set { properties.Set("InsightRefreshOnComma", value); }
- }
-
public static TooltipLinkTarget TooltipLinkTarget {
get { return properties.Get("TooltipLinkTarget", TooltipLinkTarget.Documentation); }
set { properties.Set("TooltipLinkTarget", value); }
}
+
+ public static string CompletionCharList {
+ get { return properties.Get("CompletionCharList", @"{}[]().,:;+-*/%&|^!~=<>?@#'""\"); }
+ set { properties.Set("CompletionCharList", value); }
+ }
+
+ public static bool CommitOnChar(char key)
+ {
+ return CompletionCharList.IndexOf(key) >= 0;
+ }
}
public enum TooltipLinkTarget {
diff --git a/src/Main/Base/Project/WinForms/IWinFormsService.cs b/src/Main/Base/Project/WinForms/IWinFormsService.cs
index 4af46757f2..1eb510550c 100644
--- a/src/Main/Base/Project/WinForms/IWinFormsService.cs
+++ b/src/Main/Base/Project/WinForms/IWinFormsService.cs
@@ -142,5 +142,10 @@ namespace ICSharpCode.SharpDevelop.WinForms
///
/// SDWindowsFormsHost instance
CustomWindowsFormsHost CreateWindowsFormsHost(IServiceProvider serviceProvider = null, bool processShortcutsInWPF = false);
+
+ ///
+ /// Provides access to from Windows Forms-based AddIns.
+ ///
+ void InvalidateCommands();
}
}
diff --git a/src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs b/src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs
index 37e20e3b2e..582fe34d29 100644
--- a/src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs
+++ b/src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs
@@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
///
public abstract class AbstractViewContentHandlingLoadErrors : AbstractViewContent
{
- ContentPresenter contentControl = new ContentPresenter();
+ readonly ContentPresenter contentControl = new ContentPresenter();
object userContent;
protected AbstractViewContentHandlingLoadErrors()
diff --git a/src/Main/Base/Project/Workbench/FileChangeWatcher.cs b/src/Main/Base/Project/Workbench/FileChangeWatcher.cs
index c0c85e1859..5702fa56bc 100644
--- a/src/Main/Base/Project/Workbench/FileChangeWatcher.cs
+++ b/src/Main/Base/Project/Workbench/FileChangeWatcher.cs
@@ -18,10 +18,7 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.IO;
-using System.Windows.Forms;
-using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Workbench
@@ -206,21 +203,65 @@ namespace ICSharpCode.SharpDevelop.Workbench
string fileName = file.FileName;
if (!File.Exists(fileName))
return;
-
- string message = StringParser.Parse(
- "${res:ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.TextEditorDisplayBinding.FileAlteredMessage}",
- new StringTagPair("File", Path.GetFullPath(fileName))
- );
- if ((AutoLoadExternalChangesOption && file.IsDirty == false)
- || MessageService.AskQuestion(message, StringParser.Parse("${res:MainWindow.DialogName}")))
- {
+
+ if (AutoLoadExternalChangesOption && !file.IsDirty) {
if (File.Exists(fileName)) {
file.ReloadFromDisk();
}
} else {
- file.MakeDirty();
+ QueueFileForReloadDialog(file);
+ }
+ }
+ }
+
+ #region Reload Queue
+ static readonly HashSet queue = new HashSet();
+ static volatile bool currentlyReloading;
+
+ static void QueueFileForReloadDialog(OpenedFile file)
+ {
+ if (file == null)
+ throw new ArgumentNullException("file");
+ lock (queue) {
+ queue.Add(file);
+ }
+ }
+
+ public static void AskForReload()
+ {
+ if (currentlyReloading) return;
+ currentlyReloading = true;
+ try {
+ lock (queue) {
+ foreach (var file in queue) {
+ string fileName = file.FileName;
+ if (!File.Exists(fileName))
+ continue;
+ string message = StringParser.Parse(
+ "${res:ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.TextEditorDisplayBinding.FileAlteredMessage}",
+ new StringTagPair("File", Path.GetFullPath(fileName))
+ );
+ if (SD.MessageService.AskQuestion(message, StringParser.Parse("${res:MainWindow.DialogName}"))) {
+ if (File.Exists(fileName)) {
+ file.ReloadFromDisk();
+ }
+ } else {
+ file.MakeDirty();
+ }
+ }
+ queue.Clear();
}
+ } finally {
+ currentlyReloading = false;
+ }
+ }
+
+ public static void CancelReloadQueue()
+ {
+ lock (queue) {
+ queue.Clear();
}
}
+ #endregion
}
}
diff --git a/src/Main/SharpDevelop/SharpDevelop.csproj b/src/Main/SharpDevelop/SharpDevelop.csproj
index abc1ba0b2e..c28c87fe62 100644
--- a/src/Main/SharpDevelop/SharpDevelop.csproj
+++ b/src/Main/SharpDevelop/SharpDevelop.csproj
@@ -241,6 +241,9 @@
Resources\StringResources.resx
+
+ StringResources.resx
+
Configuration\GlobalAssemblyInfo.cs.template
diff --git a/src/Main/SharpDevelop/WinForms/WinFormsService.cs b/src/Main/SharpDevelop/WinForms/WinFormsService.cs
index 03be27db7c..5500fea972 100644
--- a/src/Main/SharpDevelop/WinForms/WinFormsService.cs
+++ b/src/Main/SharpDevelop/WinForms/WinFormsService.cs
@@ -22,7 +22,6 @@ using System.Drawing.Printing;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
-using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Widgets;
using ICSharpCode.SharpDevelop.Workbench;
@@ -195,5 +194,10 @@ namespace ICSharpCode.SharpDevelop.WinForms
DisposeChild = false
};
}
+
+ public void InvalidateCommands()
+ {
+ System.Windows.Input.CommandManager.InvalidateRequerySuggested();
+ }
}
}