public void InsertTemplate(object obj, EventArgs args) { ICompletionDataList completionList = new CompletionDataList(); completionList = ShowCodeTemplatesCommand(); currentCompletionContext = widget.CreateCodeCompletionContext(); //this.editor.Caret.Offset CompletionWindowManager.IsTemplateModes = true; CompletionWindowManager.ShowWindow((char)0, completionList, widget, currentCompletionContext, OnCompletionWindowClosed); editor.GrabFocus(); }
CodeCompletionContext ICompletionWidget.CreateCodeCompletionContext(int triggerOffset) { var originalTriggerOffset = ConvertOffset(triggerOffset); var completionContext = completionWidget.CreateCodeCompletionContext(originalTriggerOffset); return(ConvertContext(completionContext, projection)); }
// Returns the index of the parameter where the cursor is currently positioned. // -1 means the cursor is outside the method parameter list // 0 means no parameter entered // > 0 is the index of the parameter (1-based) public int GetCurrentParameterIndex(ICompletionWidget widget, CodeCompletionContext ctx) { int cursor = widget.CreateCodeCompletionContext().TriggerOffset; int i = ctx.TriggerOffset; //if (i < 0 || i >= editor.Length || editor.GetCharAt (i) == ')') // return -1; if (i > cursor) return -1; else if (i == cursor) return 0; int parameterIndex = 1; while (i++ < cursor) { if (i >= widget.TextLength) break; char ch = widget.GetChar (i); if (ch == ',') parameterIndex++; else if (ch == ')') return -1; } return parameterIndex; }
protected override void Run(RefactoringOptions options) { Gtk.Menu menu = new Gtk.Menu(); bool resolveDirect; List <string> namespaces = GetResolveableNamespaces(options, out resolveDirect); foreach (string ns in namespaces) { // remove used namespaces for conflict resolving. if (options.Document.CompilationUnit.IsNamespaceUsedAt(ns, options.ResolveResult.ResolvedExpression.Region.Start)) { continue; } Gtk.MenuItem menuItem = new Gtk.MenuItem(string.Format(GettextCatalog.GetString("Add using '{0}'"), ns)); CurrentRefactoryOperationsHandler.ResolveNameOperation resolveNameOperation = new CurrentRefactoryOperationsHandler.ResolveNameOperation(options.Dom, options.Document, options.ResolveResult, ns); menuItem.Activated += delegate { resolveNameOperation.AddImport(); }; menu.Add(menuItem); } if (resolveDirect) { foreach (string ns in namespaces) { Gtk.MenuItem menuItem = new Gtk.MenuItem(string.Format(GettextCatalog.GetString("Add '{0}'"), ns)); CurrentRefactoryOperationsHandler.ResolveNameOperation resolveNameOperation = new CurrentRefactoryOperationsHandler.ResolveNameOperation(options.Dom, options.Document, options.ResolveResult, ns); menuItem.Activated += delegate { resolveNameOperation.ResolveName(); }; menu.Add(menuItem); } } if (menu.Children != null && menu.Children.Length > 0) { menu.ShowAll(); ICompletionWidget widget = options.Document.GetContent <ICompletionWidget> (); CodeCompletionContext codeCompletionContext = widget.CreateCodeCompletionContext(options.GetTextEditorData().Caret.Offset); menu.Popup(null, null, delegate(Gtk.Menu menu2, out int x, out int y, out bool pushIn) { x = codeCompletionContext.TriggerXCoord; y = codeCompletionContext.TriggerYCoord; pushIn = false; }, 0, Gtk.Global.CurrentEventTime); menu.SelectFirst(true); } }
public void ShowCompletion (ICompletionDataList completionList) { completionWidget = Document.GetContent <ICompletionWidget> (); currentCompletionContext = completionWidget.CreateCodeCompletionContext (Document.TextEditorData.Caret.Offset); int cpos, wlen; if (!GetCompletionCommandOffset (out cpos, out wlen)) { cpos = Document.TextEditorData.Caret.Offset; wlen = 0; } currentCompletionContext.TriggerOffset = cpos; currentCompletionContext.TriggerWordLength = wlen; CompletionWindowManager.ShowWindow ('\0', completionList, completionWidget, currentCompletionContext, OnCompletionWindowClosed); }
public void ShowCompletion(ICompletionDataList completionList) { completionWidget = Document.GetContent <ICompletionWidget> (); currentCompletionContext = completionWidget.CreateCodeCompletionContext(Document.TextEditorData.Caret.Offset); int cpos, wlen; if (!GetCompletionCommandOffset(out cpos, out wlen)) { cpos = Document.TextEditorData.Caret.Offset; wlen = 0; } currentCompletionContext.TriggerOffset = cpos; currentCompletionContext.TriggerWordLength = wlen; CompletionWindowManager.ShowWindow('\0', completionList, completionWidget, currentCompletionContext, OnCompletionWindowClosed); }
public static void ShowWindow(ICompletionWidget widget, IParameterDataProvider provider) //, CodeCompletionContext ctx, IParameterDataProvider provider) { if (provider.OverloadCount == 0) { return; } // There can be several method parameter lists open at the same time, so // they have to be queued. The last one of queue is the one being shown // in the information window. MethodData md = new MethodData(); md.MethodProvider = provider; md.CurrentOverload = 0; md.CompletionContext = widget.CreateCodeCompletionContext(); //ctx; methods.Add(md); UpdateWindow(widget); }
// Returns the index of the parameter where the cursor is currently positioned. // -1 means the cursor is outside the method parameter list // 0 means no parameter entered // > 0 is the index of the parameter (1-based) public int GetCurrentParameterIndex(ICompletionWidget widget, CodeCompletionContext ctx) { int cursor = widget.CreateCodeCompletionContext().TriggerOffset; int i = ctx.TriggerOffset; //if (i < 0 || i >= editor.Length || editor.GetCharAt (i) == ')') // return -1; if (i > cursor) { return(-1); } else if (i == cursor) { return(0); } int parameterIndex = 1; while (i++ < cursor) { if (i >= widget.TextLength) { break; } char ch = widget.GetChar(i); if (ch == ',') { parameterIndex++; } else if (ch == ')') { return(-1); } } return(parameterIndex); }
internal static void UpdateWindow(ICompletionWidget widget) { // Updates the parameter information window from the information // of the current method overload if (window == null && methods.Count > 0) { window = new ParameterInformationWindow(); wasAbove = false; } if (methods.Count == 0) { if (window != null) { window.Hide(); wasAbove = false; } return; } var ctx = widget.CreateCodeCompletionContext(); MethodData md = methods[methods.Count - 1]; int cparam = md.MethodProvider.GetCurrentParameterIndex(widget, md.CompletionContext); Gtk.Requisition reqSize = window.ShowParameterInfo(md.MethodProvider, md.CurrentOverload, cparam - 1); X = md.CompletionContext.TriggerXCoord; if (CompletionWindowManager.IsVisible) { // place above Y = ctx.TriggerYCoord - ctx.TriggerTextHeight - reqSize.Height - 10; } else { // place below Y = ctx.TriggerYCoord; } Gdk.Rectangle geometry = window.Screen.GetMonitorGeometry(window.Screen.GetMonitorAtPoint(X, Y)); if (X + reqSize.Width > geometry.Right) { X = geometry.Right - reqSize.Width; } if (Y < geometry.Top) { Y = ctx.TriggerYCoord; } if (wasAbove || Y + reqSize.Height > geometry.Bottom) { Y = Y - ctx.TriggerTextHeight - reqSize.Height - 4; wasAbove = true; } if (CompletionWindowManager.IsVisible) { Rectangle completionWindow = new Rectangle(CompletionWindowManager.X, CompletionWindowManager.Y, CompletionWindowManager.Wnd.Allocation.Width, CompletionWindowManager.Wnd.Allocation.Height); if (completionWindow.IntersectsWith(new Rectangle(X, Y, reqSize.Width, reqSize.Height))) { X = completionWindow.X; Y = completionWindow.Y - reqSize.Height - 6; if (Y < 0) { Y = completionWindow.Bottom + 6; } } } window.Move(X, Y); window.Show(); }
internal static void UpdateWindow(ICompletionWidget widget) { // Updates the parameter information window from the information // of the current method overload if (window == null && methods.Count > 0) { window = new ParameterInformationWindow (); wasAbove = false; } if (methods.Count == 0) { if (window != null) { window.Hide (); wasAbove = false; } return; } var ctx = widget.CreateCodeCompletionContext(); MethodData md = methods[methods.Count - 1]; int cparam = md.MethodProvider.GetCurrentParameterIndex (widget, md.CompletionContext); Gtk.Requisition reqSize = window.ShowParameterInfo (md.MethodProvider, md.CurrentOverload, cparam - 1); X = md.CompletionContext.TriggerXCoord; if (CompletionWindowManager.IsVisible) { // place above Y = ctx.TriggerYCoord - ctx.TriggerTextHeight - reqSize.Height - 10; } else { // place below Y = ctx.TriggerYCoord; } Gdk.Rectangle geometry = window.Screen.GetMonitorGeometry (window.Screen.GetMonitorAtPoint (X, Y)); if (X + reqSize.Width > geometry.Right) X = geometry.Right - reqSize.Width; if (Y < geometry.Top) Y = ctx.TriggerYCoord; if (wasAbove || Y + reqSize.Height > geometry.Bottom) { Y = Y - ctx.TriggerTextHeight - reqSize.Height - 4; wasAbove = true; } if (CompletionWindowManager.IsVisible) { Rectangle completionWindow = new Rectangle (CompletionWindowManager.X, CompletionWindowManager.Y, CompletionWindowManager.Wnd.Allocation.Width, CompletionWindowManager.Wnd.Allocation.Height); if (completionWindow.IntersectsWith (new Rectangle (X, Y, reqSize.Width, reqSize.Height))) { X = completionWindow.X; Y = completionWindow.Y - reqSize.Height - 6; if (Y < 0) Y = completionWindow.Bottom + 6; } } window.Move (X, Y); window.Show (); }
//, CodeCompletionContext ctx, IParameterDataProvider provider) public static void ShowWindow(ICompletionWidget widget, IParameterDataProvider provider) { if (provider.OverloadCount == 0) return; // There can be several method parameter lists open at the same time, so // they have to be queued. The last one of queue is the one being shown // in the information window. MethodData md = new MethodData (); md.MethodProvider = provider; md.CurrentOverload = 0; md.CompletionContext = widget.CreateCodeCompletionContext(); //ctx; methods.Add (md); UpdateWindow (widget); }
// When a key is pressed, and before the key is processed by the editor, this method will be invoked. // Return true if the key press should be processed by the editor. public override bool KeyPress(Gdk.Key key, char keyChar, Gdk.ModifierType modifier) { bool res; KeyActions ka = KeyActions.None; if (currentCompletionContext != null) { autoHideCompletionWindow = false; if (CompletionWindowManager.PreProcessKeyEvent(key, keyChar, modifier, out ka)) { CompletionWindowManager.PostProcessKeyEvent(ka); autoHideCompletionWindow = true; return(false); } autoHideCompletionWindow = false; } if (ParameterInformationWindowManager.IsWindowVisible) { if (ParameterInformationWindowManager.ProcessKeyEvent(key, modifier)) { return(false); } autoHideCompletionWindow = false; } // int oldPos = Editor.CursorPosition; // int oldLen = Editor.TextLength; res = base.KeyPress(key, keyChar, modifier); CompletionWindowManager.PostProcessKeyEvent(ka); var ignoreMods = Gdk.ModifierType.ControlMask | Gdk.ModifierType.MetaMask | Gdk.ModifierType.Mod1Mask | Gdk.ModifierType.SuperMask; // Handle parameter completion if (ParameterInformationWindowManager.IsWindowVisible) { ParameterInformationWindowManager.CurrentCodeCompletionContext = Editor.CurrentCodeCompletionContext; ParameterInformationWindowManager.PostProcessKeyEvent(key, modifier); } if ((modifier & ignoreMods) != 0) { return(res); } /* * if (Document.TextEditorData == null || Document.TextEditorData.IsSomethingSelected && Document.TextEditorData.SelectionMode != Mono.TextEditor.SelectionMode.Block) { * int posChange = Editor.CursorPosition - oldPos; * if (currentCompletionContext != null && (Math.Abs (posChange) > 1 || (Editor.TextLength - oldLen) != posChange)) { * currentCompletionContext = null; * CompletionWindowManager.HideWindow (); * ParameterInformationWindowManager.HideWindow (); * return res; * } * }*/ if (!enableCodeCompletion) { return(res); } // Handle code completion if (keyChar != '\0' && completionWidget != null && currentCompletionContext == null) { currentCompletionContext = completionWidget.CreateCodeCompletionContext(Editor.CursorPosition); int triggerWordLength = currentCompletionContext.TriggerWordLength; ICompletionDataList completionList = HandleCodeCompletion(currentCompletionContext, keyChar, ref triggerWordLength); if (triggerWordLength > 0 && (triggerWordLength < Editor.CursorPosition || (triggerWordLength == 1 && Editor.CursorPosition == 1))) { currentCompletionContext = completionWidget.CreateCodeCompletionContext(Editor.CursorPosition - triggerWordLength); currentCompletionContext.TriggerWordLength = triggerWordLength; } if (completionList != null) { if (!CompletionWindowManager.ShowWindow(keyChar, completionList, completionWidget, currentCompletionContext, OnCompletionWindowClosed)) { currentCompletionContext = null; } } else { currentCompletionContext = null; } } if (enableParameterInsight && completionWidget != null) { CodeCompletionContext ctx = completionWidget.CreateCodeCompletionContext(Editor.CursorPosition); IParameterDataProvider paramProvider = HandleParameterCompletion(ctx, keyChar); if (paramProvider != null) { ParameterInformationWindowManager.ShowWindow(ctx, paramProvider); } } autoHideCompletionWindow = true; return(res); }