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 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.ComponentModel;
using System.IO; using System.IO;
using System.Text; using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Xml; using ICSharpCode.NRefactory.Xml;
@ -31,6 +31,7 @@ namespace CSharpBinding.Completion
get { get {
if (header == null) { if (header == null) {
header = GenerateHeader(); header = GenerateHeader();
OnPropertyChanged("Header");
} }
return header; return header;
} }
@ -45,6 +46,8 @@ namespace CSharpBinding.Completion
this.highlightedParameterIndex = parameterIndex; this.highlightedParameterIndex = parameterIndex;
if (header != null) if (header != null)
header = GenerateHeader(); header = GenerateHeader();
OnPropertyChanged("Header");
OnPropertyChanged("Content");
} }
FlowDocumentScrollViewer GenerateHeader() FlowDocumentScrollViewer GenerateHeader()
@ -94,6 +97,7 @@ namespace CSharpBinding.Completion
get { get {
if (content == null) { if (content == null) {
GenerateHeader(); GenerateHeader();
OnPropertyChanged("Content");
} }
return content; return content;
} }
@ -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
public object Content { public object Content {
get { return ctor.Documentation; } 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 class MemberInsightItem : IInsightItem
@ -237,5 +246,14 @@ namespace ICSharpCode.XamlBinding
public object Content { public object Content {
get { return member.Documentation; } 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
OnPropertyChanged("CurrentHeader"); OnPropertyChanged("CurrentHeader");
OnPropertyChanged("CurrentContent"); OnPropertyChanged("CurrentContent");
OnPropertyChanged("CurrentIndexText"); OnPropertyChanged("CurrentIndexText");
insightWindow.OnSelectedItemChanged(EventArgs.Empty);
} }
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
@ -78,7 +79,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
} }
} }
void OnPropertyChanged(string propertyName) internal void OnPropertyChanged(string propertyName)
{ {
if (PropertyChanged != null) { if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
@ -119,6 +120,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
TextDocument document; TextDocument document;
Caret caret; Caret caret;
IInsightItem oldSelectedItem;
void AttachEvents() void AttachEvents()
{ {
@ -157,11 +159,30 @@ namespace ICSharpCode.AvalonEdit.AddIn
protected virtual void OnSelectedItemChanged(EventArgs e) protected virtual void OnSelectedItemChanged(EventArgs e)
{ {
if (oldSelectedItem != null)
oldSelectedItem.PropertyChanged -= SelectedItemPropertyChanged;
oldSelectedItem = SelectedItem;
if (oldSelectedItem != null)
oldSelectedItem.PropertyChanged += SelectedItemPropertyChanged;
if (SelectedItemChanged != null) { if (SelectedItemChanged != null) {
SelectedItemChanged(this, e); 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; public event EventHandler CaretPositionChanged;
protected virtual void OnCaretPositionChanged(EventArgs e) protected virtual void OnCaretPositionChanged(EventArgs e)

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

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

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

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

Loading…
Cancel
Save