Browse Source

fix #285: Method Insight tooltip is invisible and only appears after scrolling

and related bug: Method Insight tooltip is not refreshed after caret moves to different parameter
pull/297/head
Siegfried Pammer 12 years ago
parent
commit
a1aebe8dcd
  1. 15
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpInsightItem.cs
  2. 18
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs
  3. 23
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopInsightWindow.cs
  4. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/InsightWindow.cs
  5. 3
      src/Main/Base/Project/Editor/CodeCompletion/IInsightItem.cs

15
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpInsightItem.cs

@ -2,12 +2,12 @@ @@ -2,12 +2,12 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.ComponentModel;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Xml;
@ -31,6 +31,7 @@ namespace CSharpBinding.Completion @@ -31,6 +31,7 @@ namespace CSharpBinding.Completion
get {
if (header == null) {
header = GenerateHeader();
OnPropertyChanged("Header");
}
return header;
}
@ -45,6 +46,8 @@ namespace CSharpBinding.Completion @@ -45,6 +46,8 @@ namespace CSharpBinding.Completion
this.highlightedParameterIndex = parameterIndex;
if (header != null)
header = GenerateHeader();
OnPropertyChanged("Header");
OnPropertyChanged("Content");
}
FlowDocumentScrollViewer GenerateHeader()
@ -94,6 +97,7 @@ namespace CSharpBinding.Completion @@ -94,6 +97,7 @@ namespace CSharpBinding.Completion
get {
if (content == null) {
GenerateHeader();
OnPropertyChanged("Content");
}
return content;
}
@ -132,5 +136,14 @@ namespace CSharpBinding.Completion @@ -132,5 +136,14 @@ namespace CSharpBinding.Completion
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}

18
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs

@ -210,6 +210,15 @@ namespace ICSharpCode.XamlBinding @@ -210,6 +210,15 @@ namespace ICSharpCode.XamlBinding
public object Content {
get { return ctor.Documentation; }
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs e)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, e);
}
}
class MemberInsightItem : IInsightItem
@ -237,5 +246,14 @@ namespace ICSharpCode.XamlBinding @@ -237,5 +246,14 @@ namespace ICSharpCode.XamlBinding
public object Content {
get { return member.Documentation; }
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs e)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, e);
}
}
}

23
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopInsightWindow.cs

@ -37,6 +37,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -37,6 +37,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
OnPropertyChanged("CurrentHeader");
OnPropertyChanged("CurrentContent");
OnPropertyChanged("CurrentIndexText");
insightWindow.OnSelectedItemChanged(EventArgs.Empty);
}
public event PropertyChangedEventHandler PropertyChanged;
@ -78,7 +79,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -78,7 +79,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
}
void OnPropertyChanged(string propertyName)
internal void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
@ -119,6 +120,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -119,6 +120,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
TextDocument document;
Caret caret;
IInsightItem oldSelectedItem;
void AttachEvents()
{
@ -157,11 +159,30 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -157,11 +159,30 @@ namespace ICSharpCode.AvalonEdit.AddIn
protected virtual void OnSelectedItemChanged(EventArgs e)
{
if (oldSelectedItem != null)
oldSelectedItem.PropertyChanged -= SelectedItemPropertyChanged;
oldSelectedItem = SelectedItem;
if (oldSelectedItem != null)
oldSelectedItem.PropertyChanged += SelectedItemPropertyChanged;
if (SelectedItemChanged != null) {
SelectedItemChanged(this, e);
}
}
void SelectedItemPropertyChanged(object sender, PropertyChangedEventArgs e)
{
var provider = Provider as SDItemProvider;
if (provider == null) return;
switch (e.PropertyName) {
case "Header":
provider.OnPropertyChanged("CurrentHeader");
break;
case "Content":
provider.OnPropertyChanged("CurrentContent");
break;
}
}
public event EventHandler CaretPositionChanged;
protected virtual void OnCaretPositionChanged(EventArgs e)

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/InsightWindow.cs

@ -34,14 +34,14 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion @@ -34,14 +34,14 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
/// <inheritdoc/>
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
Rect caret = this.TextArea.Caret.CalculateCaretRectangle();
Point pointOnScreen = this.TextArea.TextView.PointToScreen(caret.Location - this.TextArea.TextView.ScrollOffset);
Rect workingArea = System.Windows.Forms.Screen.FromPoint(pointOnScreen.ToSystemDrawing()).WorkingArea.ToWpf().TransformFromDevice(this);
MaxHeight = workingArea.Height;
MaxWidth = Math.Min(workingArea.Width, Math.Max(1000, workingArea.Width * 0.6));
base.OnSourceInitialized(e);
}
/// <summary>

3
src/Main/Base/Project/Editor/CodeCompletion/IInsightItem.cs

@ -2,13 +2,14 @@ @@ -2,13 +2,14 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.ComponentModel;
namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
{
/// <summary>
/// An item in the insight window.
/// </summary>
public interface IInsightItem
public interface IInsightItem : INotifyPropertyChanged
{
object Header { get; }
object Content { get; }

Loading…
Cancel
Save