Browse Source

Merge branch 'master' of github.com:icsharpcode/SharpDevelop

pull/505/merge
Peter Forstmeier 11 years ago
parent
commit
1fbd20047b
  1. 19
      data/resources/StringResources.resx
  2. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
  3. 4
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs
  4. 3
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CompletionData.cs
  5. 9
      src/AddIns/BackendBindings/WixBinding/Test/DirectoryImport/AddDirectoryTestFixture.cs
  6. 1
      src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeInsertionTests.cs
  7. 4
      src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs
  8. 12
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin
  9. 4
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  10. 54
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/FindBaseClasses.cs
  11. 8
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs
  12. 3
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetCompletionItem.cs
  13. 4
      src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs
  14. 2
      src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj
  15. 41
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs
  16. 52
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs
  17. 1
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs
  18. 10
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs
  19. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs
  20. 4
      src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs
  21. 4
      src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs
  22. 5
      src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs
  23. 92
      src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml
  24. 41
      src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs
  25. 2
      src/Main/Base/Project/Editor/CodeCompletion/ICompletionItem.cs
  26. 20
      src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs
  27. 2
      src/Main/Base/Project/Editor/ToolTipService.cs
  28. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  29. 6
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  30. 110
      src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml
  31. 122
      src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml.cs
  32. 36
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilCommandLine.cs
  33. 2
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilRunner.cs
  34. 4
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReferenceHelper.cs
  35. 2
      src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs
  36. 49
      src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs
  37. 25
      src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs
  38. 5
      src/Main/Base/Project/WinForms/IWinFormsService.cs
  39. 2
      src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs
  40. 65
      src/Main/Base/Project/Workbench/FileChangeWatcher.cs
  41. 3
      src/Main/SharpDevelop/SharpDevelop.csproj
  42. 6
      src/Main/SharpDevelop/WinForms/WinFormsService.cs

19
data/resources/StringResources.resx

@ -3789,6 +3789,10 @@ Please configure the NAnt executable's location in the SharpDevelop Options.</va @@ -3789,6 +3789,10 @@ Please configure the NAnt executable's location in the SharpDevelop Options.</va
<value>Could not find type definition at the cursor position.</value>
<comment>Error message when using Search&gt;Find Base Classes when the cursor is not on a type reference.</comment>
</data>
<data name="ICSharpCode.Refactoring.NoClassOrMemberUnderCursorError" xml:space="preserve">
<value>Could not find type definition or type member at the cursor position.</value>
<comment>Error message when using Search&gt;Find Base Classes when the cursor is not on a type reference or type member.</comment>
</data>
<data name="ICSharpCode.RubyBinding.SendLineToRubyConsole" xml:space="preserve">
<value>Send Line to Ruby Console</value>
</data>
@ -6473,6 +6477,9 @@ Removed the end part of the original message ", reason '${Message}'" since this @@ -6473,6 +6477,9 @@ Removed the end part of the original message ", reason '${Message}'" since this
<data name="SharpDevelop.Refactoring.BaseClassesOf" xml:space="preserve">
<value>Base classes of ${Name}</value>
</data>
<data name="SharpDevelop.Refactoring.BaseMembersOf" xml:space="preserve">
<value>Base members of ${Name}</value>
</data>
<data name="SharpDevelop.Refactoring.CannotPerformOperationBecauseOfSyntaxErrors" xml:space="preserve">
<value>The operation cannot be performed because your source code contains errors:</value>
</data>
@ -6525,6 +6532,9 @@ Removed the end part of the original message ", reason '${Message}'" since this @@ -6525,6 +6532,9 @@ Removed the end part of the original message ", reason '${Message}'" since this
<data name="SharpDevelop.Refactoring.FindBaseClassesCommand" xml:space="preserve">
<value>Find base classes</value>
</data>
<data name="SharpDevelop.Refactoring.FindBaseClassesOrMembersCommand" xml:space="preserve">
<value>Find base symbols</value>
</data>
<data name="SharpDevelop.Refactoring.FindDerivedClassesCommand" xml:space="preserve">
<value>Find &amp;derived classes</value>
</data>
@ -8182,4 +8192,13 @@ Error while starting: @@ -8182,4 +8192,13 @@ Error while starting:
<value>This resource is not being used. Its purpose is to test the translation database and has
a line break</value>
</data>
<data name="Dialog.Options.IDEOptions.CodeCompletion.TooltipLabel" xml:space="preserve">
<value>Tooltip settings</value>
</data>
<data name="Dialog.Options.IDEOptions.CodeCompletion.CommitOnCharacters" xml:space="preserve">
<value>Insert selected code completion entry by typing the following characters:</value>
</data>
<data name="Dialog.Options.IDEOptions.CodeCompletion.CommitOnTabEnterOnly" xml:space="preserve">
<value>Only insert selected code completion entry by typing &lt;Tab&gt; or &lt;Enter&gt;.</value>
</data>
</root>

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs

@ -74,7 +74,7 @@ namespace CSharpBinding @@ -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 {

4
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs

@ -18,6 +18,7 @@ @@ -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 @@ -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 @@ -137,7 +139,7 @@ namespace CSharpBinding.Completion
return true;
}
if (!ctrlSpace) {
if (CodeCompletionOptions.InsightEnabled && !ctrlSpace) {
// Method Insight
var pce = new CSharpParameterCompletionEngine(
completionContext.Document,

3
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CompletionData.cs

@ -78,13 +78,14 @@ namespace CSharpBinding.Completion @@ -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;

9
src/AddIns/BackendBindings/WixBinding/Test/DirectoryImport/AddDirectoryTestFixture.cs

@ -16,16 +16,11 @@ @@ -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
{

1
src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeInsertionTests.cs

@ -21,6 +21,7 @@ using System.Collections.Generic; @@ -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;

4
src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs

@ -152,6 +152,10 @@ namespace Debugger.AddIn.Breakpoints @@ -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) {

12
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin

@ -149,20 +149,20 @@ @@ -149,20 +149,20 @@
icon="Icons.16x16.Class"
class = "ICSharpCode.AvalonEdit.AddIn.ContextActions.FindDerivedClassesOrOverrides"/>
<MenuItem id = "FindBaseClasses"
label = "${res:SharpDevelop.Refactoring.FindBaseClassesCommand}"
<MenuItem id = "FindBaseClassesOrMembers"
label = "${res:SharpDevelop.Refactoring.FindBaseClassesOrMembersCommand}"
icon="Icons.16x16.Interface"
class = "ICSharpCode.AvalonEdit.AddIn.ContextActions.FindBaseClasses"/>
class = "ICSharpCode.AvalonEdit.AddIn.ContextActions.FindBaseClassesOrMembers"/>
</Path>
<Path name = "/SharpDevelop/EntityContextMenu">
<Condition name="SymbolTypeAtCaret" type="type" action="Exclude">
<Condition name="SymbolTypeAtCaret" type="type,member" action="Exclude">
<Include id="FindDerivedOrOverridesClasses"
insertafter="FindReferences"
item="/SharpDevelop/Workbench/MainMenu/Search/FindDerivedOrOverridesClasses" />
<Include id="FindBaseClasses"
<Include id="FindBaseClassesOrMembers"
insertafter="FindDerivedOrOverridesClasses"
item="/SharpDevelop/Workbench/MainMenu/Search/FindBaseClasses" />
item="/SharpDevelop/Workbench/MainMenu/Search/FindBaseClassesOrMembers" />
</Condition>
</Path>

4
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs

@ -569,6 +569,10 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -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;

54
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/FindBaseClasses.cs

@ -31,16 +31,20 @@ using ICSharpCode.SharpDevelop.Editor.ContextActions; @@ -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 @@ -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<ContextActionViewModel> BuildListViewModel(IEnumerable<ITypeDefinition> classList)
static ObservableCollection<ContextActionViewModel> BuildBaseClassListViewModel(IEnumerable<ITypeDefinition> classList)
{
return new ObservableCollection<ContextActionViewModel>(
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<ContextActionViewModel> BuildBaseMemberListViewModel(IMember member)
{
var c = new ObservableCollection<ContextActionViewModel>();
ObservableCollection<ContextActionViewModel> 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<ContextActionViewModel>();
lastBase.Add(GoToEntityAction.MakeViewModel(baseMember, newChild));
lastBase = newChild;
} else {
thisMember = null;
}
}
thisMember = baseMember;
}
return c;
}
#endregion
}
}

8
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs

@ -19,6 +19,7 @@ @@ -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 @@ -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 @@ -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;

3
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetCompletionItem.cs

@ -49,8 +49,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -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; }

4
src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs

@ -136,12 +136,12 @@ namespace HexEditor.View @@ -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();
}
}
}

2
src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj

@ -54,7 +54,7 @@ @@ -54,7 +54,7 @@
<Compile Include="Src\Commands\EditCommentCommand.cs" />
<Compile Include="Src\Commands\RenameEntryCommand.cs" />
<Compile Include="Src\Commands\SaveEntryAsCommand.cs" />
<Compile Include="Src\DisplayDefinition.cs" />
<Compile Include="Src\ResourceEditorDisplayBinding.cs" />
<Compile Include="Src\ResourceEdit\AbstractImageView.cs">
<SubType>Component</SubType>
</Compile>

41
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs

@ -21,6 +21,7 @@ using System.Drawing; @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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);
}
}

52
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs → src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs

@ -32,7 +32,6 @@ namespace ResourceEditor @@ -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 @@ -54,9 +53,6 @@ namespace ResourceEditor
}
}
/// <summary>
/// This class describes the main functionality of a language codon
/// </summary>
public class ResourceEditWrapper : AbstractViewContentHandlingLoadErrors, IClipboardHandler
{
ResourceEditorControl resourceEditor = new ResourceEditorControl();
@ -73,14 +69,16 @@ namespace ResourceEditor @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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();
}
}

1
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionList.cs

@ -200,6 +200,7 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion @@ -200,6 +200,7 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
if (listBox == null && value != null)
ApplyTemplate();
listBox.SelectedItem = value;
listBox.ScrollIntoView(value);
}
}

10
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs

@ -17,13 +17,10 @@ @@ -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 @@ -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 @@ -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;

2
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs

@ -180,7 +180,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -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();

4
src/Main/Base/Project/Editor/Bookmarks/BookmarkBase.cs

@ -195,6 +195,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks @@ -195,6 +195,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks
{
}
public virtual bool DisplaysTooltip {
get { return false; }
}
public virtual object CreateTooltipContent()
{
return null;

4
src/Main/Base/Project/Editor/Bookmarks/EntityBookmark.cs

@ -98,6 +98,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks @@ -98,6 +98,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks
throw new NotSupportedException();
}
bool IBookmark.DisplaysTooltip {
get { return false; }
}
object IBookmark.CreateTooltipContent()
{
return null;

5
src/Main/Base/Project/Editor/Bookmarks/IBookmark.cs

@ -61,6 +61,11 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks @@ -61,6 +61,11 @@ namespace ICSharpCode.SharpDevelop.Editor.Bookmarks
/// </summary>
void Drop(int lineNumber);
/// <summary>
/// Gets whether this bookmark might want to display a tooltip.
/// </summary>
bool DisplaysTooltip { get; }
/// <summary>
/// Creates the tooltip content for the bookmark.
/// </summary>

92
src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml

@ -0,0 +1,92 @@ @@ -0,0 +1,92 @@
<gui:OptionPanel x:Class="ICSharpCode.SharpDevelop.Editor.CodeCompletion.CodeCompletionOptionPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
xmlns:gui="clr-namespace:ICSharpCode.SharpDevelop.Gui"
xmlns:sd="clr-namespace:ICSharpCode.SharpDevelop"
xmlns:widgets="clr-namespace:ICSharpCode.SharpDevelop.Widgets;assembly=ICSharpCode.SharpDevelop.Widgets">
<widgets:StackPanelWithSpacing SpaceBetweenItems="5">
<GroupBox
Margin="5">
<GroupBox.Header>
<CheckBox
VerticalAlignment="Center"
Content="{core:Localize Dialog.Options.IDEOptions.TextEditor.General.CodeCompletionCheckBox}"
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.EnableCodeCompletion}"
x:Name="checkEnableCodeCompletion" />
</GroupBox.Header>
<widgets:StackPanelWithSpacing SpaceBetweenItems="10" IsEnabled="{Binding IsChecked, ElementName=checkEnableCodeCompletion}">
<TextBlock
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.LanguageDependend}"
TextWrapping="Wrap"/>
<CheckBox
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.CompleteWhenTyping}"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.CompleteWhenTyping}"/>
<CheckBox
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.CommitOnTabEnterOnly}"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.CommitOnTabEnterOnly}"/>
<TextBlock
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.CommitOnCharacters}"
TextWrapping="Wrap"/>
<TextBox
Text="{core:OptionBinding sd:CodeCompletionOptions.CompletionCharList}"/>
<CheckBox Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDataUsageCache}"
x:Name="checkUseDataUsageCache"
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.DataUsageCacheEnabled}"/>
<widgets:StackPanelWithSpacing SpaceBetweenItems="4" Margin="30,0,0,0"
Orientation="Horizontal" IsEnabled="{Binding IsChecked, ElementName=checkUseDataUsageCache}">
<Label Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.SaveItemCountBeforeNumber}"/>
<widgets:NumericUpDown MinWidth="50"
Minimum="50" Maximum="10000" SmallChange="50"
Value="{core:OptionBinding sd:CodeCompletionOptions.DataUsageCacheItemCount}"/>
<Label Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.SaveItemCountAfterNumber}"/>
<Button
Style="{x:Static core:GlobalStyles.ButtonStyle}"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.ClearCache}"
Click="Button_Click"/>
</widgets:StackPanelWithSpacing>
</widgets:StackPanelWithSpacing>
</GroupBox>
<GroupBox Header="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.TooltipLabel}" Margin="5">
<widgets:StackPanelWithSpacing SpaceBetweenItems="10">
<CheckBox
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseTooltips}"
x:Name="checkUseTooltips"
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.TooltipsEnabled}" />
<CheckBox
Margin="30,0,0,0"
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.TooltipsOnlyWhenDebugging}"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDebugTooltipsOnly}"
IsEnabled="{Binding IsChecked, ElementName=checkUseTooltips}" />
<CheckBox
VerticalAlignment="Center"
x:Name="checkUseInsight"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseInsight}"
IsChecked="{core:OptionBinding sd:CodeCompletionOptions.InsightEnabled}" />
<StackPanel Grid.Row="9" Orientation="Horizontal" Margin="0,10">
<TextBlock Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.TooltipLinkTarget}" Margin="0,2,5,0" />
<ComboBox
sd:EnumBinding.EnumType="{x:Type sd:TooltipLinkTarget}"
SelectedValue="{core:OptionBinding sd:CodeCompletionOptions.TooltipLinkTarget}" />
</StackPanel>
</widgets:StackPanelWithSpacing>
</GroupBox>
</widgets:StackPanelWithSpacing>
</gui:OptionPanel>

41
src/Main/Base/Project/Editor/CodeCompletion/CodeCompletionOptionPanel.xaml.cs

@ -0,0 +1,41 @@ @@ -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
{
/// <summary>
/// Interaction logic for CodeCompletionOptionPanel.xaml
/// </summary>
public partial class CodeCompletionOptionPanel : OptionPanel
{
public CodeCompletionOptionPanel()
{
InitializeComponent();
this.DataContext = this;
}
void Button_Click(object sender, RoutedEventArgs e)
{
CodeCompletionDataUsageCache.ResetCache();
}
}
}

2
src/Main/Base/Project/Editor/CodeCompletion/ICompletionItem.cs

@ -61,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -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)
{

20
src/Main/Base/Project/Editor/CodeCompletion/ICompletionItemList.cs

@ -138,16 +138,20 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -138,16 +138,20 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
/// <inheritdoc/>
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;
}
/// <inheritdoc/>

2
src/Main/Base/Project/Editor/ToolTipService.cs

@ -41,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -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;
}

2
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -2178,7 +2178,7 @@ @@ -2178,7 +2178,7 @@
<OptionPanel id = "CodeCompletion"
insertafter="Behavior"
label = "${res:Dialog.Options.IDEOptions.TextEditor.CodeCompletion.PanelName}"
class = "ICSharpCode.SharpDevelop.Editor.CodeCompletion.CodeCompletionPanel"/>
class = "ICSharpCode.SharpDevelop.Editor.CodeCompletion.CodeCompletionOptionPanel"/>
</Path>
<Path name = "/SharpDevelop/Pads/BookmarkPad/Toolbar">

6
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -140,6 +140,9 @@ @@ -140,6 +140,9 @@
<Compile Include="Editor\Bookmarks\IBookmarkMargin.cs" />
<Compile Include="Editor\Bookmarks\SDBookmark.cs" />
<Compile Include="Editor\Bookmarks\SDMarkerBookmark.cs" />
<Compile Include="Editor\CodeCompletion\CodeCompletionOptionPanel.xaml.cs">
<DependentUpon>CodeCompletionOptionPanel.xaml</DependentUpon>
</Compile>
<Compile Include="Editor\CodeCompletion\Images\CompletionImage.cs" />
<Compile Include="Editor\CodeCompletion\SnippetCompletionData.cs" />
<Compile Include="Editor\ContextActions\ContextActionsPopupViewModel.cs" />
@ -228,7 +231,6 @@ @@ -228,7 +231,6 @@
<Compile Include="Src\Commands\SharpDevelopRoutedCommands.cs" />
<Compile Include="Src\Commands\ViewInBrowser.cs" />
<Compile Include="Src\Editor\AvalonEdit\IndentationStrategyAdapter.cs" />
<Compile Include="Src\Editor\CodeCompletion\CodeCompletionPanelXaml.xaml.cs" />
<Compile Include="Src\Editor\Commands\ClassBookmarkSubmenuBuilder.cs" />
<Compile Include="Src\Editor\Commands\ClassMemberMenuBuilder.cs" />
<Compile Include="Src\Editor\Commands\DeclaringTypeSubMenuBuilder.cs" />
@ -890,7 +892,7 @@ @@ -890,7 +892,7 @@
<Folder Include="Project\Configuration" />
<Folder Include="Workbench\DisplayBinding" />
<Page Include="Editor\Bookmarks\BookmarkPadContent.xaml" />
<Page Include="Src\Editor\CodeCompletion\CodeCompletionPanelXaml.xaml" />
<Page Include="Editor\CodeCompletion\CodeCompletionOptionPanel.xaml" />
<Page Include="Src\Editor\Dialogs\RenameSymbolDialog.xaml" />
<Page Include="Src\Gui\Components\FontSelector.xaml" />
<Page Include="Src\Gui\Components\StringListEditorDialog.xaml" />

110
src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml

@ -1,110 +0,0 @@ @@ -1,110 +0,0 @@
<gui:OptionPanel x:Class="ICSharpCode.SharpDevelop.Editor.CodeCompletion.CodeCompletionPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
xmlns:gui="clr-namespace:ICSharpCode.SharpDevelop.Gui"
xmlns:sd="clr-namespace:ICSharpCode.SharpDevelop"
xmlns:widgets="clr-namespace:ICSharpCode.SharpDevelop.Widgets;assembly=ICSharpCode.SharpDevelop.Widgets">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock
Margin="0,0,0,5"
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.MainOption}"
TextWrapping="Wrap"
VerticalAlignment="Center"/>
<CheckBox Grid.Row="1" VerticalAlignment="Center"
Content="{core:Localize Dialog.Options.IDEOptions.TextEditor.General.CodeCompletionCheckBox}"
IsChecked="{Binding EnableCodeCompletion}">
</CheckBox>
<GroupBox Grid.Row="2" Margin="0,8,0,0"
Header="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.DetailSettings}"
IsEnabled="{Binding EnableCodeCompletion}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<CheckBox Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDataUsageCache}"
IsChecked="{Binding UseDataUsageCache}">
</CheckBox>
<widgets:StackPanelWithSpacing Grid.Row="1" SpaceBetweenItems="4" Margin="30,0,0,0"
Orientation="Horizontal" IsEnabled="{Binding UseDataUsageCache}">
<Label Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.SaveItemCountBeforeNumber}"></Label>
<widgets:NumericUpDown MinWidth="50"
Minimum="50" Maximum="10000" SmallChange="50" IsEnabled="{Binding UseDataUsageCache}"
Value="{Binding DataUsageCacheItemCount}">
</widgets:NumericUpDown>
<Label Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.SaveItemCountAfterNumber}"></Label>
<Button Style="{x:Static core:GlobalStyles.ButtonStyle}"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.ClearCache}"
Click="Button_Click">
</Button>
</widgets:StackPanelWithSpacing>
<CheckBox Grid.Row="2"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseTooltips}"
IsChecked="{Binding UseTooltips}">
</CheckBox>
<CheckBox x:Name="useDebugTooltipsOnly" Grid.Row="3" Margin="30,0,0,0"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseDebugTooltipsOnly}"
IsEnabled="{Binding UseTooltips}">
</CheckBox>
<TextBlock Grid.Row="4" Margin="0,3,0,13"
Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.LanguageDependend}"
TextWrapping="Wrap">
</TextBlock>
<CheckBox x:Name="completeWhenTyping" Grid.Row="5"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.CompleteWhenTyping}">
</CheckBox>
<CheckBox x:Name="useKeywordCompletionCheckBox" Grid.Row="6"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseKeywordCompletion}">
</CheckBox>
<CheckBox Grid.Row="7" VerticalAlignment="Center"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.UseInsight}"
IsChecked="{Binding UseInsight}" >
</CheckBox>
<CheckBox x:Name="refreshInsightOnComma" Grid.Row="8" Margin="30,0,0,0"
Content="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.RefreshInsightOnComma}"
IsEnabled="{Binding UseInsight}">
</CheckBox>
<StackPanel Grid.Row="9" Orientation="Horizontal" Margin="0,10">
<TextBlock Text="{core:Localize Dialog.Options.IDEOptions.CodeCompletion.TooltipLinkTarget}" Margin="0,2,2,0" />
<ComboBox sd:EnumBinding.EnumType="{x:Type sd:TooltipLinkTarget}"
SelectedValue="{core:OptionBinding sd:CodeCompletionOptions.TooltipLinkTarget}" />
</StackPanel>
</Grid>
</GroupBox>
</Grid>
</gui:OptionPanel>

122
src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionPanelXaml.xaml.cs

@ -1,122 +0,0 @@ @@ -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
{
/// <summary>
/// Interaction logic for CodeCompletionPanelXaml.xaml
/// </summary>
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();
}
}
}

36
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilCommandLine.cs

@ -24,7 +24,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -24,7 +24,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class SvcUtilCommandLine
{
StringBuilder argumentBuilder = new StringBuilder();
List<string> arguments = new List<string>();
public SvcUtilCommandLine(ServiceReferenceGeneratorOptions options)
{
@ -32,7 +32,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -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 @@ -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 @@ -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 @@ -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)

2
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilRunner.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -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());

4
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReferenceHelper.cs

@ -24,12 +24,12 @@ using System.Web.Services.Discovery; @@ -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];

2
src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators @@ -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;

49
src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs

@ -172,27 +172,36 @@ namespace ICSharpCode.SharpDevelop.Project @@ -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();
}
}

25
src/Main/Base/Project/Src/Services/ParserService/CodeCompletionOptions.cs

@ -63,30 +63,35 @@ namespace ICSharpCode.SharpDevelop @@ -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 {

5
src/Main/Base/Project/WinForms/IWinFormsService.cs

@ -142,5 +142,10 @@ namespace ICSharpCode.SharpDevelop.WinForms @@ -142,5 +142,10 @@ namespace ICSharpCode.SharpDevelop.WinForms
/// </param>
/// <returns>SDWindowsFormsHost instance</returns>
CustomWindowsFormsHost CreateWindowsFormsHost(IServiceProvider serviceProvider = null, bool processShortcutsInWPF = false);
/// <summary>
/// Provides access to <see cref="System.Windows.Input.CommandManager.RequerySuggested"/> from Windows Forms-based AddIns.
/// </summary>
void InvalidateCommands();
}
}

2
src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Workbench @@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
/// </summary>
public abstract class AbstractViewContentHandlingLoadErrors : AbstractViewContent
{
ContentPresenter contentControl = new ContentPresenter();
readonly ContentPresenter contentControl = new ContentPresenter();
object userContent;
protected AbstractViewContentHandlingLoadErrors()

65
src/Main/Base/Project/Workbench/FileChangeWatcher.cs

@ -18,10 +18,7 @@ @@ -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 @@ -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<OpenedFile> queue = new HashSet<OpenedFile>();
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
}
}

3
src/Main/SharpDevelop/SharpDevelop.csproj

@ -241,6 +241,9 @@ @@ -241,6 +241,9 @@
<EmbeddedResource Include="..\..\..\data\resources\StringResources.resx">
<Link>Resources\StringResources.resx</Link>
</EmbeddedResource>
<None Include="..\..\..\data\resources\StringResources.resx">
<Link>StringResources.resx</Link>
</None>
<EmbeddedResource Include="Resources\BitmapResources.resources" />
<None Include="..\GlobalAssemblyInfo.cs.template">
<Link>Configuration\GlobalAssemblyInfo.cs.template</Link>

6
src/Main/SharpDevelop/WinForms/WinFormsService.cs

@ -22,7 +22,6 @@ using System.Drawing.Printing; @@ -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 @@ -195,5 +194,10 @@ namespace ICSharpCode.SharpDevelop.WinForms
DisposeChild = false
};
}
public void InvalidateCommands()
{
System.Windows.Input.CommandManager.InvalidateRequerySuggested();
}
}
}

Loading…
Cancel
Save