Exemplo n.º 1
0
		public static void RequestToolTip(ToolTipRequestEventArgs e)
		{
			if (e == null)
				throw new ArgumentNullException("e");
			
			if (!CodeCompletionOptions.EnableCodeCompletion || !CodeCompletionOptions.TooltipsEnabled) {
				e.Handled = true;
				return;
			}
			
			if (CodeCompletionOptions.TooltipsOnlyWhenDebugging) {
				if (!DebuggerService.IsDebuggerLoaded || !DebuggerService.CurrentDebugger.IsDebugging) {
					e.Handled = true;
					return;
				}
			}
			
			// Query all registered tooltip providers using the AddInTree.
			// The first one that does not return null will be used.
			foreach (ITextAreaToolTipProvider toolTipProvider in AddInTree.BuildItems<ITextAreaToolTipProvider>(ToolTipProviderAddInTreePath, null, false)) {
				toolTipProvider.HandleToolTipRequest(e);
				if (e.Handled)
					break;
			}
			
			EventHandler<ToolTipRequestEventArgs> eh = ToolTipRequested;
			if (eh != null)
				eh(null, e);
		}
		public void HandleToolTipRequest(ToolTipRequestEventArgs args)
		{
			if (args.InDocument) {
				int offset = args.Editor.Document.GetOffset(args.LogicalPosition);
				
				FoldingManager foldings = args.Editor.GetService(typeof(FoldingManager)) as FoldingManager;
				if (foldings != null) {
					var foldingsAtOffset = foldings.GetFoldingsAt(offset);
					FoldingSection collapsedSection = foldingsAtOffset.FirstOrDefault(section => section.IsFolded);
					
					if (collapsedSection != null) {
						args.SetToolTip(GetTooltipTextForCollapsedSection(args, collapsedSection));
					}
				}
				
				TextMarkerService textMarkerService = args.Editor.GetService(typeof(ITextMarkerService)) as TextMarkerService;
				if (textMarkerService != null) {
					var markersAtOffset = textMarkerService.GetMarkersAtOffset(offset);
					ITextMarker markerWithToolTip = markersAtOffset.FirstOrDefault(marker => marker.ToolTip != null);
					
					if (markerWithToolTip != null) {
						args.SetToolTip(markerWithToolTip.ToolTip);
					}
				}
			}
		}
		public void HandleToolTipRequest(ToolTipRequestEventArgs e)
		{
			if (e.ResolveResult == null)
				return;
			TypeResolveResult trr = e.ResolveResult as TypeResolveResult;
			MemberResolveResult mrr = e.ResolveResult as MemberResolveResult;
			LocalResolveResult lrr = e.ResolveResult as LocalResolveResult;
			if (trr != null && trr.Type.GetDefinition() != null) {
				e.SetToolTip(CreateTooltip(trr.Type));
			} else if (mrr != null) {
				e.SetToolTip(CreateTooltip(mrr.Member));
			} else if (lrr != null) {
				e.SetToolTip(new FlowDocumentTooltip(XmlDocFormatter.CreateTooltip(lrr.Variable)));
			}
		}
		public void HandleToolTipRequest(ToolTipRequestEventArgs e)
		{
			if (e.ResolveResult == null)
				return;
			TypeResolveResult trr = e.ResolveResult as TypeResolveResult;
			MemberResolveResult mrr = e.ResolveResult as MemberResolveResult;
			LocalResolveResult lrr = e.ResolveResult as LocalResolveResult;
			if (trr != null && trr.Type.GetDefinition() != null) {
				e.SetToolTip(CreateTooltip(trr.Type));
			} else if (mrr != null) {
				e.SetToolTip(CreateTooltip(mrr.Member));
			} else if (lrr != null) {
				var ambience = AmbienceService.GetCurrentAmbience();
				e.SetToolTip(ambience.ConvertVariable(lrr.Variable));
			}
		}
		public void HandleToolTipRequest(ToolTipRequestEventArgs e)
		{
			if (!e.InDocument)
				return;
			
			Location logicPos = e.LogicalPosition;
			IDocument doc = e.Editor.Document;
			if (logicPos.X > doc.GetLine(logicPos.Y).Length) {
				return;
			}
			
			ResourceResolveResult result = ResourceResolverService.Resolve(e.Editor.FileName, doc, logicPos.Y - 1, logicPos.X - 1, null);
			
			if (result != null && result.ResourceFileContent != null) {
				e.SetToolTip(ResourceResolverService.FormatResourceDescription(result.ResourceFileContent, result.Key));
			}
		}
Exemplo n.º 6
0
        public static void RequestToolTip(ToolTipRequestEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }

            if (!CodeCompletionOptions.EnableCodeCompletion)
            {
                return;
            }
            if (!CodeCompletionOptions.TooltipsEnabled)
            {
                return;
            }

            if (CodeCompletionOptions.TooltipsOnlyWhenDebugging)
            {
                if (!DebuggerService.IsDebuggerLoaded)
                {
                    return;
                }
                if (!DebuggerService.CurrentDebugger.IsDebugging)
                {
                    return;
                }
            }

            // Query all registered tooltip providers using the AddInTree.
            // The first one that does not return null will be used.
            foreach (ITextAreaToolTipProvider toolTipProvider in AddInTree.BuildItems <ITextAreaToolTipProvider>(ToolTipProviderAddInTreePath, null, false))
            {
                toolTipProvider.HandleToolTipRequest(e);
                if (e.Handled)
                {
                    break;
                }
            }

            EventHandler <ToolTipRequestEventArgs> eh = ToolTipRequested;

            if (eh != null)
            {
                eh(null, e);
            }
        }
Exemplo n.º 7
0
 public override void HandleToolTipRequest(ToolTipRequestEventArgs e)
 {
 }
Exemplo n.º 8
0
 public void HandleToolTipRequest(ToolTipRequestEventArgs e)
 {
     if (SD.Debugger.IsDebuggerLoaded)
         SD.Debugger.HandleToolTipRequest(e);
 }
		string GetTooltipTextForCollapsedSection(ToolTipRequestEventArgs args, FoldingSection foldingSection)
		{
			// This fixes SD-1394:
			// Each line is checked for leading indentation whitespaces. If
			// a line has the same or more indentation than the first line,
			// it is reduced. If a line is less indented than the first line
			// the indentation is removed completely.
			//
			// See the following example:
			// 	line 1
			// 		line 2
			// 			line 3
			//  line 4
			//
			// is reduced to:
			// line 1
			// 	line 2
			// 		line 3
			// line 4
			
			const int maxLineCount = 15;
			
			TextDocument document = (TextDocument)args.Editor.Document;
			int startOffset = foldingSection.StartOffset;
			int endOffset = foldingSection.EndOffset;
			
			DocumentLine startLine = document.GetLineByOffset(startOffset);
			DocumentLine endLine = document.GetLineByOffset(endOffset);
			StringBuilder builder = new StringBuilder();
			
			DocumentLine current = startLine;
			ISegment startIndent = TextUtilities.GetLeadingWhitespace(document, startLine);
			int lineCount = 0;
			while (current != endLine.NextLine && lineCount < maxLineCount) {
				ISegment currentIndent = TextUtilities.GetLeadingWhitespace(document, current);
				
				if (current == startLine && current == endLine)
					builder.Append(document.GetText(startOffset, endOffset - startOffset));
				else if (current == startLine) {
					if (current.EndOffset - startOffset > 0)
						builder.AppendLine(document.GetText(startOffset, current.EndOffset - startOffset).TrimStart());
				} else if (current == endLine) {
					if (startIndent.Length <= currentIndent.Length)
						builder.Append(document.GetText(current.Offset + startIndent.Length, endOffset - current.Offset - startIndent.Length));
					else
						builder.Append(document.GetText(current.Offset + currentIndent.Length, endOffset - current.Offset - currentIndent.Length));
				} else {
					if (startIndent.Length <= currentIndent.Length)
						builder.AppendLine(document.GetText(current.Offset + startIndent.Length, current.Length - startIndent.Length));
					else
						builder.AppendLine(document.GetText(current.Offset + currentIndent.Length, current.Length - currentIndent.Length));
				}
				
				current = current.NextLine;
				lineCount++;
			}
			if (current != endLine.NextLine)
				builder.Append("...");
			
			return builder.ToString();
		}
Exemplo n.º 10
0
		void TextEditorMouseHover(object sender, MouseEventArgs e)
		{
			Debug.Assert(sender == this);
			
			if (!TryCloseExistingPopup(false)) {
				return;
			}
			
			ToolTipRequestEventArgs args = new ToolTipRequestEventArgs(this.Adapter);
			var pos = this.TextArea.TextView.GetPositionFloor(e.GetPosition(this.TextArea.TextView) + this.TextArea.TextView.ScrollOffset);
			args.InDocument = pos.HasValue;
			if (pos.HasValue) {
				args.LogicalPosition = pos.Value.Location;
			}
			
			if (!args.Handled) {
				// if request wasn't handled by a marker, pass it to the ToolTipRequestService
				ToolTipRequestService.RequestToolTip(args);
			}
			
			if (args.ContentToShow != null) {
				popupToolTip = args.ContentToShow as Popup;
				
				if (popupToolTip != null) {
					var popupPosition = GetPopupPosition(e);
					popupToolTip.Closed += ToolTipClosed;
					popupToolTip.HorizontalOffset = popupPosition.X;
					popupToolTip.VerticalOffset = popupPosition.Y;
					popupToolTip.StaysOpen = true;  // We will close it ourselves
					
					e.Handled = true;
					popupToolTip.IsOpen = true;
					distanceToPopupLimit = double.PositiveInfinity; // reset limit; we'll re-calculate it on the next mouse movement
				} else {
					if (toolTip == null) {
						toolTip = new ToolTip();
						toolTip.Closed += ToolTipClosed;
					}
					toolTip.PlacementTarget = this; // required for property inheritance
					
					if(args.ContentToShow is string) {
						toolTip.Content = new TextBlock
						{
							Text = args.ContentToShow as string,
							TextWrapping = TextWrapping.Wrap
						};
					}
					else
						toolTip.Content = args.ContentToShow;
					
					e.Handled = true;
					toolTip.IsOpen = true;
				}
			}
		}
Exemplo n.º 11
0
		public void HandleToolTipRequest(ToolTipRequestEventArgs e)
		{
			if (!(IsDebugging && CurrentProcess.IsPaused))
				return;
			var resolveResult = e.ResolveResult;
			if (resolveResult == null)
				return;
			if (resolveResult is LocalResolveResult || resolveResult is MemberResolveResult) {
				string text = string.Empty;
				try {
					text = new ResolveResultPrettyPrinter().Print(resolveResult);
				} catch (NotImplementedException ex) {
					SD.Log.Warn(ex);
				}
				Func<Value> getValue = delegate {
					ExpressionEvaluationVisitor eval = new ExpressionEvaluationVisitor(CurrentStackFrame, EvalThread, CurrentStackFrame.AppDomain.Compilation);
					return eval.Convert(resolveResult);
				};
				try {
					var rootNode = new ValueNode(ClassBrowserIconService.LocalVariable, text, getValue);
					e.SetToolTip(new DebuggerTooltipControl(rootNode));
				} catch (InvalidOperationException ex) {
					SD.Log.Warn(ex);
				}
			}
		}
Exemplo n.º 12
0
		public void HandleToolTipRequest(ToolTipRequestEventArgs e)
		{
			if (DebuggerService.IsDebuggerLoaded)
				DebuggerService.CurrentDebugger.HandleToolTipRequest(e);
		}
Exemplo n.º 13
0
		public void HandleToolTipRequest(ToolTipRequestEventArgs e)
		{
		}
Exemplo n.º 14
0
		void TextEditorMouseHover(object sender, MouseEventArgs e)
		{
			ToolTipRequestEventArgs args = new ToolTipRequestEventArgs(this.adapter);
			var pos = adapter.TextEditor.GetPositionFromPoint(e.GetPosition(this));
			args.InDocument = pos.HasValue;
			if (pos.HasValue) {
				args.LogicalPosition = AvalonEditDocumentAdapter.ToLocation(pos.Value.Location);
			}
			
			if (!args.Handled) {
				// if request wasn't handled by a marker, pass it to the ToolTipRequestService
				ToolTipRequestService.RequestToolTip(args);
			}
			
			if (args.ContentToShow != null) {
				var contentToShowITooltip = args.ContentToShow as ITooltip;
				
				if (contentToShowITooltip != null && contentToShowITooltip.ShowAsPopup) {
					if (!(args.ContentToShow is UIElement)) {
						throw new NotSupportedException("Content to show in Popup must be UIElement: " + args.ContentToShow);
					}
					if (popup == null) {
						popup = CreatePopup();
					}
					if (TryCloseExistingPopup(false)) {
						// when popup content decides to close, close the popup
						contentToShowITooltip.Closed += (closedSender, closedArgs) => { popup.IsOpen = false; };
						popup.Child = (UIElement)args.ContentToShow;
						//ICSharpCode.SharpDevelop.Debugging.DebuggerService.CurrentDebugger.IsProcessRunningChanged
						SetPopupPosition(popup, e);
						popup.IsOpen = true;
					}
					e.Handled = true;
				} else {
					if (toolTip == null) {
						toolTip = new ToolTip();
						toolTip.Closed += delegate { toolTip = null; };
					}
					toolTip.PlacementTarget = this.adapter.TextEditor; // required for property inheritance
					
					if(args.ContentToShow is string) {
						toolTip.Content = new TextBlock
						{
							Text = args.ContentToShow as string,
							TextWrapping = TextWrapping.Wrap
						};
					}
					else
						toolTip.Content = args.ContentToShow;
					
					toolTip.IsOpen = true;
					e.Handled = true;
				}
			} else {
				// close popup if mouse hovered over empty area
				if (popup != null) {
					e.Handled = true;
				}
				TryCloseExistingPopup(false);
			}
		}
Exemplo n.º 15
0
 public abstract void HandleToolTipRequest(ToolTipRequestEventArgs e);
 public void HandleToolTipRequest(ToolTipRequestEventArgs e)
 {
     if(!e.InDocument)
         return;
 }
Exemplo n.º 17
0
		public void HandleToolTipRequest(ToolTipRequestEventArgs e)
		{
			DebuggerService.HandleToolTipRequest(e);
		}
Exemplo n.º 18
0
		/// <summary>
		/// Gets debugger tooltip information for the specified position.
		/// A descriptive string for the element or a DebuggerTooltipControl
		/// showing its current value (when in debugging mode) can be returned
		/// through the ToolTipRequestEventArgs.SetTooltip() method.
		/// </summary>
		internal static void HandleToolTipRequest(ToolTipRequestEventArgs e)
		{
			if (!e.InDocument)
				return;
			Location logicPos = e.LogicalPosition;
			var doc = e.Editor.Document;
			FileName fileName = e.Editor.FileName;
			
			IExpressionFinder expressionFinder = ParserService.GetExpressionFinder(fileName);
			if (expressionFinder == null)
				return;
			
			var currentLine = doc.GetLine(logicPos.Y);
			if (logicPos.X > currentLine.Length)
				return;
			string textContent = doc.Text;
			ExpressionResult expressionResult = expressionFinder.FindFullExpression(textContent, doc.PositionToOffset(logicPos.Line, logicPos.Column));
			string expression = (expressionResult.Expression ?? "").Trim();
			if (expression.Length > 0) {
				// Look if it is variable
				ResolveResult result = ParserService.Resolve(expressionResult, logicPos.Y, logicPos.X, fileName, textContent);
				bool debuggerCanShowValue;
				string toolTipText = GetText(result, expression, out debuggerCanShowValue);
				if (Control.ModifierKeys == Keys.Control) {
					toolTipText = "expr: " + expressionResult.ToString() + "\n" + toolTipText;
					debuggerCanShowValue = false;
				}
				if (toolTipText != null) {
					if (debuggerCanShowValue && currentDebugger != null) {
						object toolTip = currentDebugger.GetTooltipControl(e.LogicalPosition, expressionResult.Expression);
						if (toolTip != null)
							e.SetToolTip(toolTip);
						else
							e.SetToolTip(toolTipText);
					} else {
						e.SetToolTip(toolTipText);
					}
				}
			} else {
				#if DEBUG
				if (Control.ModifierKeys == Keys.Control) {
					e.SetToolTip("no expr: " + expressionResult.ToString());
				}
				#endif
			}
		}
Exemplo n.º 19
0
		void TextEditorMouseHover(object sender, MouseEventArgs e)
		{
			Debug.Assert(sender == this);
			ToolTipRequestEventArgs args = new ToolTipRequestEventArgs(this.Adapter);
			var pos = GetPositionFromPoint(e.GetPosition(this));
			args.InDocument = pos.HasValue;
			if (pos.HasValue) {
				args.LogicalPosition = AvalonEditDocumentAdapter.ToLocation(pos.Value);
			}
			
			if (args.InDocument) {
				int offset = args.Editor.Document.PositionToOffset(args.LogicalPosition.Line, args.LogicalPosition.Column);
				
				FoldingManager foldings = this.Adapter.GetService(typeof(FoldingManager)) as FoldingManager;
				if (foldings != null) {
					var foldingsAtOffset = foldings.GetFoldingsContaining(offset);
					FoldingSection collapsedSection = foldingsAtOffset.FirstOrDefault(section => section.IsFolded);
					
					if (collapsedSection != null) {
						args.SetToolTip(collapsedSection.TooltipText);
					}
				}
				
				TextMarkerService textMarkerService = this.Adapter.GetService(typeof(ITextMarkerService)) as TextMarkerService;
				if (textMarkerService != null) {
					var markersAtOffset = textMarkerService.GetMarkersAtOffset(offset);
					ITextMarker markerWithToolTip = markersAtOffset.FirstOrDefault(marker => marker.ToolTip != null);
					
					if (markerWithToolTip != null) {
						args.SetToolTip(markerWithToolTip.ToolTip);
					}
				}
			}
			
			if (!args.Handled) {
				// if request wasn't handled by a marker, pass it to the ToolTipRequestService
				ToolTipRequestService.RequestToolTip(args);
			}
			
			if (args.ContentToShow != null) {
				var contentToShowITooltip = args.ContentToShow as ITooltip;
				
				if (contentToShowITooltip != null && contentToShowITooltip.ShowAsPopup) {
					if (!(args.ContentToShow is UIElement)) {
						throw new NotSupportedException("Content to show in Popup must be UIElement: " + args.ContentToShow);
					}
					if (popup == null) {
						popup = CreatePopup();
					}
					// if popup was only first level, hovering somewhere else closes it
					if (TryCloseExistingPopup(false)) {
						
						// when popup content decides to close, close the popup
						contentToShowITooltip.Closed += (closedSender, closedArgs) => { popup.IsOpen = false; };
						popup.Child = (UIElement)args.ContentToShow;
						//ICSharpCode.SharpDevelop.Debugging.DebuggerService.CurrentDebugger.IsProcessRunningChanged
						SetPopupPosition(popup, e);
						popup.IsOpen = true;
					}
					e.Handled = true;
				} else {
					if (toolTip == null) {
						toolTip = new ToolTip();
						toolTip.Closed += ToolTipClosed;
					}
					toolTip.PlacementTarget = this; // required for property inheritance
					
					if(args.ContentToShow is string) {
						toolTip.Content = new TextBlock
						{
							Text = args.ContentToShow as string,
							TextWrapping = TextWrapping.Wrap
						};
					}
					else
						toolTip.Content = args.ContentToShow;
					
					toolTip.IsOpen = true;
					e.Handled = true;
				}
			} else {
				// close popup if mouse hovered over empty area
				if (popup != null) {
					e.Handled = true;
				}
				TryCloseExistingPopup(false);
			}
		}
		string GetTooltipTextForCollapsedSection(ToolTipRequestEventArgs args, FoldingSection foldingSection)
		{
			return ToolTipUtils.GetAlignedText(args.Editor.Document, foldingSection.StartOffset, foldingSection.EndOffset);
		}