// ext may be null, but then parameter completion don't work public static bool ShowWindow (CompletionTextEditorExtension ext, char firstChar, ICompletionDataList list, ICompletionWidget completionWidget, CodeCompletionContext completionContext) { try { if (ext != null) { int inserted = ext.document.Editor.EnsureCaretIsNotVirtual (); if (inserted > 0) completionContext.TriggerOffset = ext.document.Editor.Caret.Offset; } if (wnd == null) { wnd = new CompletionListWindow (); wnd.WordCompleted += HandleWndWordCompleted; } wnd.Extension = ext; try { if (!wnd.ShowListWindow (firstChar, list, completionWidget, completionContext)) { if (list is IDisposable) ((IDisposable)list).Dispose (); HideWindow (); return false; } if (ForceSuggestionMode) wnd.AutoSelect = false; wnd.Show (); DesktopService.RemoveWindowShadow (wnd); OnWindowShown (EventArgs.Empty); return true; } catch (Exception ex) { LoggingService.LogError (ex.ToString ()); return false; } } finally { ParameterInformationWindowManager.UpdateWindow (ext, completionWidget); } }
// Called when a key is pressed in the editor. // Returns false if the key press has to continue normal processing. public static bool ProcessKeyEvent (CompletionTextEditorExtension ext, ICompletionWidget widget, Gdk.Key key, Gdk.ModifierType modifier) { if (methods.Count == 0) return false; MethodData cmd = methods [methods.Count - 1]; if (key == Gdk.Key.Down) { if (cmd.MethodProvider.Count <= 1) return false; if (cmd.CurrentOverload < cmd.MethodProvider.Count - 1) cmd.CurrentOverload ++; else cmd.CurrentOverload = 0; window.ChangeOverload (); UpdateWindow (ext, widget); return true; } else if (key == Gdk.Key.Up) { if (cmd.MethodProvider.Count <= 1) return false; if (cmd.CurrentOverload > 0) cmd.CurrentOverload --; else cmd.CurrentOverload = cmd.MethodProvider.Count - 1; window.ChangeOverload (); UpdateWindow (ext, widget); return true; } else if (key == Gdk.Key.Escape) { HideWindow (ext, widget); return true; } return false; }
// ext may be null, but then parameter completion don't work public static bool ShowWindow (CompletionTextEditorExtension ext, char firstChar, ICompletionDataList list, ICompletionWidget completionWidget, CodeCompletionContext completionContext) { try { if (wnd == null) { wnd = new CompletionListWindow (); wnd.WordCompleted += HandleWndWordCompleted; } wnd.Extension = ext; try { if (!wnd.ShowListWindow (firstChar, list, completionWidget, completionContext)) { if (list is IDisposable) ((IDisposable)list).Dispose (); HideWindow (); return false; } if (ForceSuggestionMode) wnd.AutoSelect = false; wnd.Show (); OnWindowShown (EventArgs.Empty); return true; } catch (Exception ex) { LoggingService.LogError (ex.ToString ()); return false; } } finally { ParameterInformationWindowManager.UpdateWindow (ext, completionWidget); } }
public static void PostProcessKeyEvent (CompletionTextEditorExtension ext, ICompletionWidget widget, Gdk.Key key, Gdk.ModifierType modifier) { // Called after the key has been processed by the editor if (methods.Count == 0) return; for (int n=0; n< methods.Count; n++) { // If the cursor is outside of any of the methods parameter list, discard the // information window for that method. MethodData md = methods [n]; int pos = ext.GetCurrentParameterIndex (md.MethodProvider.StartOffset); if (pos == -1) { methods.RemoveAt (n); n--; } } // If the user enters more parameters than the current overload has, // look for another overload with more parameters. UpdateOverload (ext, widget); // Refresh. UpdateWindow (ext, widget); }
internal static void UpdateWindow (CompletionTextEditorExtension textEditorExtension, ICompletionWidget completionWidget) { // Updates the parameter information window from the information // of the current method overload if (methods.Count > 0) { if (window == null) { window = new ParameterInformationWindow (); window.Ext = textEditorExtension; window.Widget = completionWidget; window.SizeAllocated += delegate(object o, SizeAllocatedArgs args) { if (args.Allocation.Width == lastW && args.Allocation.Height == lastH && wasVisi == CompletionWindowManager.IsVisible) return; PositionParameterInfoWindow (args.Allocation); }; window.Hidden += delegate { lastW = -1; lastH = -1; }; } else { window.Ext = textEditorExtension; window.Widget = completionWidget; } wasAbove = false; var lastMethod = methods [methods.Count - 1]; int curParam = window.Ext != null ? window.Ext.GetCurrentParameterIndex (lastMethod.MethodProvider.StartOffset) : 0; var geometry2 = DesktopService.GetUsableMonitorGeometry (window.Screen, window.Screen.GetMonitorAtPoint (X, Y)); window.ShowParameterInfo (lastMethod.MethodProvider, lastMethod.CurrentOverload, curParam - 1, geometry2.Width); window.ChangeOverload (); PositionParameterInfoWindow (window.Allocation); window.Show (); } if (methods.Count == 0) { if (window != null) { // window.HideParameterInfo (); DestroyWindow (); wasAbove = false; wasVisi = false; lastW = -1; lastH = -1; } return; } }
public static void HideWindow (CompletionTextEditorExtension ext, ICompletionWidget widget) { methods.Clear (); UpdateWindow (ext, widget); }
static void UpdateOverload (CompletionTextEditorExtension ext, ICompletionWidget widget) { if (methods.Count == 0) return; // If the user enters more parameters than the current overload has, // look for another overload with more parameters. MethodData md = methods [methods.Count - 1]; int cparam = ext.GetCurrentParameterIndex (md.MethodProvider.StartOffset); if (cparam > md.MethodProvider.GetParameterCount (md.CurrentOverload) && !md.MethodProvider.AllowParameterList (md.CurrentOverload)) { // Look for an overload which has more parameters int bestOverload = -1; int bestParamCount = int.MaxValue; for (int n=0; n<md.MethodProvider.Count; n++) { int pc = md.MethodProvider.GetParameterCount (n); if (pc < bestParamCount && pc >= cparam) { bestOverload = n; bestParamCount = pc; } } if (bestOverload == -1) { for (int n=0; n<md.MethodProvider.Count; n++) { if (md.MethodProvider.AllowParameterList (n)) { bestOverload = n; break; } } } if (bestOverload != -1) md.CurrentOverload = bestOverload; } }
public static void ShowWindow (CompletionTextEditorExtension ext, ICompletionWidget widget, CodeCompletionContext ctx, IParameterDataProvider provider) { if (provider.Count == 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 = ctx; methods.Add (md); UpdateOverload (ext, widget); UpdateWindow (ext, widget); }
public static void PostProcessKeyEvent (CompletionTextEditorExtension ext, ICompletionWidget widget, Gdk.Key key, Gdk.ModifierType modifier) { }
static void UpdateOverload (CompletionTextEditorExtension ext, ICompletionWidget widget) { if (methods.Count == 0 || window == null) return; // If the user enters more parameters than the current overload has, // look for another overload with more parameters. MethodData md = methods [methods.Count - 1]; int bestOverload = ext.GuessBestMethodOverload (md.MethodProvider, md.CurrentOverload); if (bestOverload != -1) { md.CurrentOverload = bestOverload; window.ChangeOverload (); UpdateWindow (ext, widget); } }
public static void HideWindow (CompletionTextEditorExtension ext, ICompletionWidget widget) { methods.Clear (); if (window != null) window.ChangeOverload (); UpdateWindow (ext, widget); }
public static void RepositionWindow (CompletionTextEditorExtension ext, ICompletionWidget widget) { UpdateWindow (ext, widget); }