async Task <string> Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return)
        {
            var s = await Setup(input);

            var             ext     = s.Item1;
            TestViewContent content = s.Item2;

            var listWindow = new CompletionListWindow();
            var widget     = new TestCompletionWidget(ext.Editor, ext.DocumentContext);

            listWindow.CompletionWidget      = widget;
            listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext;
            var sm = ext.DocumentContext.ParsedDocument.GetAst <SemanticModel> ();

            var t           = sm.Compilation.GetTypeByMetadataName(type);
            var foundMember = t.GetMembers().First(m => m.Name == member);
            var factory     = new RoslynCodeCompletionFactory(ext, sm);
            var data        = new RoslynSymbolCompletionData(null, factory, foundMember);

            data.DisplayFlags |= DisplayFlags.NamedArgument;
            KeyActions ka = KeyActions.Process;

            data.InsertCompletionText(listWindow, ref ka, KeyDescriptor.FromGtk(key, (char)key, Gdk.ModifierType.None));

            return(widget.CompletedWord);
        }
 bool ProcessKey(
     KeyDescriptor descriptor,
     out KeyActions keyAction)
 {
     keyAction = KeyActions.None;
     return(descriptor.KeyChar == '-');
 }
예제 #3
0
        public void AddKeyframe(KeyActions ka, Key k, long time)
        {
            var kf = new KeyframeK(ka, k, time, this);

            addKeyframe(kf);
            //return kf;
        }
예제 #4
0
 public void PostProcessKeyEvent(KeyActions ka, Gdk.Key key, char keyChar, Gdk.ModifierType modifier)
 {
     if ((ka & KeyActions.Complete) != 0)
     {
         CompleteWord(ref ka, key, keyChar, modifier);
     }
 }
        public override void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
        {
            MonoDevelop.Ide.Gui.Content.IEditableTextBuffer buf = window.CompletionWidget as MonoDevelop.Ide.Gui.Content.IEditableTextBuffer;
            if (buf != null)
            {
                using (var undo = buf.OpenUndoGroup()) {
                    int deleteStartOffset = window.CodeCompletionContext.TriggerOffset;
                    if (text.StartsWith(docTypeStart))
                    {
                        int start = window.CodeCompletionContext.TriggerOffset - docTypeStart.Length;
                        if (start >= 0)
                        {
                            string readback = buf.GetText(start, window.CodeCompletionContext.TriggerOffset);
                            if (string.Compare(readback, docTypeStart, StringComparison.OrdinalIgnoreCase) == 0)
                            {
                                deleteStartOffset -= docTypeStart.Length;
                            }
                        }
                    }

                    buf.DeleteText(deleteStartOffset, buf.CursorPosition - deleteStartOffset);
                    buf.InsertText(buf.CursorPosition, text);
                }
            }
        }
        public override void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
        {
            // insert add/remove event handler code after +=/-=
            editor.Replace(initialOffset, editor.Caret.Offset - initialOffset, this.DisplayText + (AddSemicolon ? ";" : ""));

            // Search opening bracket of member
            int pos = callingMember != null?editor.Document.LocationToOffset(callingMember.BodyRegion.Start.Line, callingMember.BodyRegion.Start.Column) : initialOffset;

            while (pos < editor.Document.Length && editor.Document.GetCharAt(pos) != '{')
            {
                pos++;
            }

            // Search closing bracket of member
            pos = editor.Document.GetMatchingBracketOffset(pos) + 1;

            pos = Math.Max(0, Math.Min(pos, editor.Document.Length - 1));

            // Insert new event handler after closing bracket
            string indent = editor.Document.GetLine(callingMember.Location.Line).GetIndentation(editor.Document);

            StringBuilder sb = new StringBuilder();

            sb.Append(editor.EolMarker);
            sb.Append(editor.EolMarker);
            sb.Append(indent);
            if (callingMember.IsStatic)
            {
                sb.Append("static ");
            }
            sb.Append("void ");
            int pos2 = sb.Length;

            sb.Append(this.DisplayText); sb.Append(' '); sb.Append(this.parameterList); sb.Append(editor.EolMarker);
            sb.Append(indent); sb.Append("{"); sb.Append(editor.EolMarker);
            sb.Append(indent); sb.Append(TextEditorProperties.IndentString);
            int cursorPos = pos + sb.Length;

            sb.Append(editor.EolMarker);
            sb.Append(indent); sb.Append("}");
            editor.Insert(pos, sb.ToString());
            editor.Caret.Offset = cursorPos;

            // start text link mode after insert
            List <TextLink> links = new List <TextLink> ();
            TextLink        link  = new TextLink("name");

            link.AddLink(new Segment(0, this.DisplayText.Length));
            link.AddLink(new Segment(pos - initialOffset + pos2, this.DisplayText.Length));
            links.Add(link);

            CompletionTextLinkMode tle = new CompletionTextLinkMode(editor.Parent, initialOffset, links);

            tle.TriggerCodeCompletion = false;
            tle.SetCaretPosition      = true;
            tle.SelectPrimaryLink     = true;
            tle.OldMode = editor.CurrentMode;
            tle.StartMode();
            editor.CurrentMode = tle;
        }
        public override void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
        {
            var ext       = engine.Ext;
            var editor    = ext.TextEditorData;
            var generator = CodeGenerator.CreateGenerator(ext.Document);

            if (ext.Project != null)
            {
                generator.PolicyParent = ext.Project.Policies;
            }
            var builder = engine.MDRefactoringCtx.CreateTypeSystemAstBuilder();

            string sb = BaseExportCodeGenerator.GenerateMemberCode(engine.MDRefactoringCtx, builder, member);

            sb = sb.TrimEnd();

            string indent = editor.GetIndentationString(editor.Caret.Location);

            sb = sb.Replace(editor.EolMarker, editor.EolMarker + indent);

            int targetCaretPosition  = sb.LastIndexOf("throw", StringComparison.Ordinal);
            int selectionEndPosition = sb.LastIndexOf(";", StringComparison.Ordinal);

            editor.Replace(declarationBegin, editor.Caret.Offset - declarationBegin, sb);
            if (selectionEndPosition > 0)
            {
                targetCaretPosition  += declarationBegin;
                selectionEndPosition += declarationBegin;
                editor.Caret.Offset   = selectionEndPosition;
                editor.SetSelection(targetCaretPosition, selectionEndPosition);
            }
        }
예제 #8
0
        public override void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, KeyDescriptor descriptor)
        {
            var document = IdeApp.Workbench.ActiveDocument;
            var editor   = document?.Editor;

            if (editor == null || completionService == null)
            {
                base.InsertCompletionText(window, ref ka, descriptor);
                return;
            }
            var completionChange = completionService.GetChangeAsync(doc, CompletionItem, null, default(CancellationToken)).WaitAndGetResult(default(CancellationToken));

            var currentBuffer = editor.GetPlatformTextBuffer();
            var textChange    = completionChange.TextChange;

            var triggerSnapshotSpan = new SnapshotSpan(triggerSnapshot, new Span(textChange.Span.Start, textChange.Span.Length));

            var mappedSpan = triggerSnapshotSpan.TranslateTo(triggerSnapshot.TextBuffer.CurrentSnapshot, SpanTrackingMode.EdgeInclusive);

            triggerSnapshot.TextBuffer.Replace(mappedSpan, completionChange.TextChange.NewText);
//			editor.ReplaceText (mappedSpan.Start, mappedSpan.Length, completionChange.TextChange.NewText);

            if (completionChange.NewPosition.HasValue)
            {
                editor.CaretOffset = completionChange.NewPosition.Value;
            }

            if (CompletionItem.Rules.FormatOnCommit)
            {
                var endOffset = mappedSpan.Start + completionChange.TextChange.NewText.Length;
                Format(editor, document, mappedSpan.Start, endOffset);
            }
        }
예제 #9
0
        public void DoAction(KeyActions ka, Key k)
        {
            if (k == Key.None)
            {
                return;
            }
            //Console.WriteLine(k);
            VirtualKeyCode code = (VirtualKeyCode)KeyInterop.VirtualKeyFromKey(k);

            switch (ka)
            {
            case KeyActions.DOWN:
                ks.KeyDown(code);
                break;

            case KeyActions.UP:
                ks.KeyUp(code);
                break;

            case KeyActions.PRESS:
                ks.KeyDown(code);
                ks.KeyUp(code);
                break;
            }
        }
예제 #10
0
        private void Awake()
        {
            _keyActions = new KeyActions();

            ChangeCursorState(CursorLockMode.Locked);
            Cursor.visible = false;
        }
        async Task <string> Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return, bool isDelegateExpected = false)
        {
            var s = await Setup(input);

            var             ext     = s.Item1;
            TestViewContent content = s.Item2;

            var listWindow = new CompletionListWindow();
            var widget     = new TestCompletionWidget(ext.Editor, ext.DocumentContext);

            listWindow.CompletionWidget      = widget;
            listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext;
            var model = ext.DocumentContext.ParsedDocument.GetAst <SemanticModel> ();

            Ide.IdeApp.Preferences.AddParenthesesAfterCompletion.Set(true);
            Ide.IdeApp.Preferences.AddOpeningOnly.Set(false);

            var t      = model.Compilation.GetTypeByMetadataName(type);
            var method = member != null?t.GetMembers().First(m => m.Name == member) : t.GetMembers().OfType <IMethodSymbol> ().First(m => m.MethodKind == MethodKind.Constructor);

            var factory = new RoslynCodeCompletionFactory(ext, model);
            var data    = new RoslynSymbolCompletionData(null, factory, method);

            data.IsDelegateExpected = isDelegateExpected;
            KeyActions ka = KeyActions.Process;

            data.InsertCompletionText(listWindow, ref ka, KeyDescriptor.FromGtk(key, (char)key, Gdk.ModifierType.None));

            return(widget.CompletedWord);
        }
예제 #12
0
        public override void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, KeyDescriptor descriptor)
        {
            if (completionItem?.textEdit?.range != null)
            {
                var range               = completionItem.textEdit.range;
                int insertStartOffset   = editor.LocationToOffset(range.start.line + 1, range.start.character + 1);
                int charactersToReplace = editor.CaretOffset - insertStartOffset;
                editor.ReplaceText(insertStartOffset, charactersToReplace, CompletionText);

                int caretOffset = completionItem.insertText.IndexOf("{{");
                if (caretOffset >= 0)
                {
                    int selectionLength = completionItem.insertText.IndexOf("}}", caretOffset) - caretOffset - 2;
                    caretOffset       += insertStartOffset;
                    editor.CaretOffset = caretOffset;
                    if (selectionLength > 0)
                    {
                        editor.SetSelection(editor.CaretOffset, editor.CaretOffset + selectionLength);
                    }
                }
            }
            else
            {
                base.InsertCompletionText(window, ref ka, descriptor);
            }
        }
예제 #13
0
        public override void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
        {
            Initialize();
            using (var undo = doc.Editor.OpenUndoGroup()) {
                string text = insertNamespace ? type.Namespace + "." + type.Name : type.Name;
                if (text != GetCurrentWord(window))
                {
                    if (window.WasShiftPressed && generateUsing)
                    {
                        text = type.Namespace + "." + text;
                    }
                    window.CompletionWidget.SetCompletionText(window.CodeCompletionContext, GetCurrentWord(window), text);
                }

                if (!window.WasShiftPressed && generateUsing)
                {
                    var generator = CodeGenerator.CreateGenerator(doc);
                    if (generator != null)
                    {
                        generator.AddGlobalNamespaceImport(doc, type.Namespace);
                        // reparse
                        doc.UpdateParseDocument();
                    }
                }
            }
            ka |= KeyActions.Ignore;
        }
예제 #14
0
        public void PostProcessKeyEvent(Gdk.Key key, char keyChar, Gdk.ModifierType modifier)
        {
            KeyActions ka         = KeyActions.None;
            bool       keyHandled = false;

            foreach (var handler in CompletionDataList.KeyHandler)
            {
                if (handler.PostProcessKey(this, key, keyChar, modifier, out ka))
                {
                    keyHandled = true;
                    break;
                }
            }

            if (!keyHandled)
            {
                ka = PostProcessKey(key, keyChar, modifier);
            }
            if ((ka & KeyActions.Complete) != 0)
            {
                CompleteWord(ref ka, key, keyChar, modifier);
            }
            if ((ka & KeyActions.CloseWindow) != 0)
            {
                CompletionWindowManager.HideWindow();
            }
        }
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
		{
			// insert add/remove event handler code after +=/-=
			editor.Replace (initialOffset, editor.Caret.Offset - initialOffset, this.DisplayText + (AddSemicolon ? ";" : ""));
			
			// Search opening bracket of member
			int pos = callingMember != null ? editor.Document.LocationToOffset (callingMember.BodyRegion.BeginLine, callingMember.BodyRegion.BeginColumn) : initialOffset;
			while (pos < editor.Document.TextLength && editor.Document.GetCharAt (pos) != '{') {
				pos++;
			}
			
			// Search closing bracket of member
			pos = editor.Document.GetMatchingBracketOffset (pos) + 1;
			
			pos = Math.Max (0, Math.Min (pos, editor.Document.TextLength - 1));
			
			// Insert new event handler after closing bracket
			var line = callingMember != null ? editor.Document.GetLine (callingMember.Region.BeginLine) : editor.Document.GetLineByOffset (initialOffset);
			string indent = line.GetIndentation (editor.Document);
			
			StringBuilder sb = new StringBuilder ();
			sb.Append (editor.EolMarker);
			sb.Append (editor.EolMarker);
			sb.Append (indent);
			if (callingMember != null && callingMember.IsStatic)
				sb.Append ("static ");
			sb.Append ("void ");
			int pos2 = sb.Length;
			sb.Append (this.DisplayText);
			sb.Append (' ');
			sb.Append (this.parameterList);
			sb.Append (editor.EolMarker);
			sb.Append (indent);
			sb.Append ("{");
			sb.Append (editor.EolMarker);
			sb.Append (indent);
			sb.Append (editor.Options.IndentationString);
			int cursorPos = pos + sb.Length;
			sb.Append (editor.EolMarker);
			sb.Append (indent);
			sb.Append ("}");
			editor.Insert (pos, sb.ToString ());
			editor.Caret.Offset = cursorPos;
			
			// start text link mode after insert
			List<TextLink> links = new List<TextLink> ();
			TextLink link = new TextLink ("name");
			
			link.AddLink (new TextSegment (0, this.DisplayText.Length));
			link.AddLink (new TextSegment (pos - initialOffset + pos2, this.DisplayText.Length));
			links.Add (link);
			
			var tle = new TextLinkEditMode (editor.Parent, initialOffset, links);
			tle.TextLinkMode = TextLinkMode.EditIdentifier;
			tle.SetCaretPosition = true;
			tle.SelectPrimaryLink = true;
			tle.OldMode = editor.CurrentMode;
			tle.StartMode ();
			editor.CurrentMode = tle;
		}
예제 #16
0
        public void PostProcessKeyEvent(KeyDescriptor descriptor)
        {
            if (this.CompletionDataList == null)
            {
                return;
            }
            KeyActions ka         = KeyActions.None;
            bool       keyHandled = false;

            if (CompletionDataList != null)
            {
                foreach (var handler in CompletionDataList.KeyHandler)
                {
                    if (handler.PostProcessKey(facade, descriptor, out ka))
                    {
                        keyHandled = true;
                        break;
                    }
                }
            }
            if (!keyHandled)
            {
                ka = PostProcessKey(descriptor);
            }
            if ((ka & KeyActions.Complete) != 0)
            {
                CompleteWord(ref ka, descriptor);
            }
            UpdateLastWordChar();
            if ((ka & KeyActions.CloseWindow) != 0)
            {
                CompletionWindowManager.HideWindow();
                OnWindowClosed(EventArgs.Empty);
            }
        }
예제 #17
0
        public async Task PostProcessKeyEvent(KeyDescriptor descriptor)
        {
            KeyActions ka         = KeyActions.None;
            bool       keyHandled = false;

            if (CompletionDataList != null)
            {
                foreach (var handler in CompletionDataList.KeyHandler)
                {
                    if (handler.PostProcessKey(this, descriptor, out ka))
                    {
                        keyHandled = true;
                        break;
                    }
                }
            }

            if (!keyHandled)
            {
                ka = PostProcessKey(descriptor);
            }
            if ((ka & KeyActions.Complete) != 0)
            {
                var res = await CompleteWord(ka, descriptor);

                ka = res.Item1;
            }
            if ((ka & KeyActions.CloseWindow) != 0)
            {
                CompletionWindowManager.HideWindow();
                OnWindowClosed(EventArgs.Empty);
            }
        }
예제 #18
0
 public void PostProcessKeyEvent(KeyActions ka)
 {
     if ((ka & KeyActions.Complete) != 0)
     {
         CompleteWord();
     }
 }
 public bool PostProcessKey(
     CompletionListWindow listWindow,
     KeyDescriptor descriptor,
     out KeyActions keyAction)
 {
     return(ProcessKey(descriptor, out keyAction));
 }
예제 #20
0
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
		{
			var ext = engine.Ext;
			var editor = ext.TextEditorData;
			var generator = CodeGenerator.CreateGenerator (ext.Document);
			if (ext.Project != null)
				generator.PolicyParent = ext.Project.Policies;
			var builder = engine.MDRefactoringCtx.CreateTypeSystemAstBuilder ();

			string sb = BaseExportCodeGenerator.GenerateMemberCode (engine.MDRefactoringCtx, builder, member);
			sb = sb.TrimEnd ();

			string indent = editor.GetIndentationString (editor.Caret.Location); 
			sb = sb.Replace (editor.EolMarker, editor.EolMarker + indent);

			int targetCaretPosition = sb.LastIndexOf ("throw", StringComparison.Ordinal);
			int selectionEndPosition = sb.LastIndexOf (";", StringComparison.Ordinal);

			editor.Replace (declarationBegin, editor.Caret.Offset - declarationBegin, sb);
			if (selectionEndPosition > 0) {
				targetCaretPosition += declarationBegin;
				selectionEndPosition += declarationBegin;
				editor.Caret.Offset = selectionEndPosition;
				editor.SetSelection (targetCaretPosition, selectionEndPosition);
			}
		}
        async Task <string> Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return, bool isDelegateExpected = false)
        {
            var s = await Setup(input);

            var             ext     = s.Item1;
            TestViewContent content = s.Item2;

            var listWindow = new CompletionListWindow();
            var widget     = new TestCompletionWidget(ext.Editor, ext.DocumentContext);

            listWindow.CompletionWidget      = widget;
            listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext;
            var model = await ext.DocumentContext.AnalysisDocument.GetSemanticModelAsync();

            DefaultSourceEditorOptions.Instance.AutoInsertMatchingBracket = true;

            var t = model.Compilation.GetTypeByMetadataName(type);

            var method = member != null?model.LookupSymbols(s.Item1.Editor.CaretOffset).OfType <IMethodSymbol> ().First(m => m.Name == member) : t.GetMembers().OfType <IMethodSymbol> ().First(m => m.MethodKind == MethodKind.Constructor);

            var factory = new RoslynCodeCompletionFactory(ext, model);
            var data    = new RoslynSymbolCompletionData(null, factory, method);

            data.IsDelegateExpected = isDelegateExpected;
            KeyActions ka = KeyActions.Process;

            data.InsertCompletionText(listWindow, ref ka, KeyDescriptor.FromGtk(key, (char)key, Gdk.ModifierType.None));

            return(widget.CompletedWord);
        }
예제 #22
0
 public virtual void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
 {
     if (CompletionText == GetCurrentWord(window))
     {
         return;
     }
     window.CompletionWidget.SetCompletionText(window.CodeCompletionContext, GetCurrentWord(window), CompletionText);
 }
 public static void PostProcessKeyEvent(KeyActions ka)
 {
     if (wnd == null)
     {
         return;
     }
     wnd.PostProcessKeyEvent(ka);
 }
예제 #24
0
 public static void PostProcessKeyEvent(KeyActions ka, Gdk.Key key, char keyChar, Gdk.ModifierType modifier)
 {
     if (wnd == null)
     {
         return;
     }
     wnd.PostProcessKeyEvent(ka, key, keyChar, modifier);
 }
예제 #25
0
 public static bool GetKeyUp(int player, KeyActions action)
 {
     if (Input.GetKeyUp(playerKeys[player][(int)action]))
     {
         return(true);
     }
     return(false);
 }
            public override void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, MonoDevelop.Ide.Editor.Extension.KeyDescriptor descriptor)
            {
                if (this.CompletionText == "sizeof" || this.CompletionText == "nameof" || this.CompletionText == "typeof")
                {
                    string partialWord = GetCurrentWord(window, descriptor);
                    int    skipChars   = 0;
                    bool   runCompletionCompletionCommand = false;
                    var    method = Symbol as IMethodSymbol;

                    bool   addParens      = IdeApp.Preferences.AddParenthesesAfterCompletion;
                    bool   addOpeningOnly = IdeApp.Preferences.AddOpeningOnly;
                    var    Editor         = ext.Editor;
                    var    Policy         = ext.FormattingPolicy;
                    string insertionText  = this.CompletionText;

                    if (addParens && !IsBracketAlreadyInserted(ext))
                    {
                        var line = Editor.GetLine(Editor.CaretLine);
                        //var start = window.CodeCompletionContext.TriggerOffset + partialWord.Length + 2;
                        //var end = line.Offset + line.Length;
                        //string textToEnd = start < end ? Editor.GetTextBetween (start, end) : "";
                        bool addSpace = Policy.SpaceAfterMethodCallName && MonoDevelop.Ide.Editor.DefaultSourceEditorOptions.Instance.OnTheFlyFormatting;

                        var keys = new [] { SpecialKey.Return, SpecialKey.Tab, SpecialKey.Space };
                        if (keys.Contains(descriptor.SpecialKey) || descriptor.KeyChar == ' ')
                        {
                            if (addOpeningOnly)
                            {
                                insertionText += addSpace ? " (|" : "(|";
                            }
                            else
                            {
                                insertionText += addSpace ? " (|)" : "(|)";
                            }
                        }
                        ka |= KeyActions.Ignore;
                    }

                    window.CompletionWidget.SetCompletionText(window.CodeCompletionContext, partialWord, insertionText);
                    int offset = Editor.CaretOffset;
                    for (int i = skipChars - 1; i-- > 0;)
                    {
                        Editor.StartSession(new SkipCharSession(Editor.GetCharAt(offset)));
                        offset++;
                    }

                    if (runCompletionCompletionCommand && IdeApp.Workbench != null)
                    {
                        Application.Invoke(delegate {
                            ext.RunCompletionCommand();
                        });
                    }
                }
                else
                {
                    base.InsertCompletionText(window, ref ka, descriptor);
                }
            }
 public async Task TestVSTS611923()
 {
     await TestCompletion(@"using $", (doc, list) => {
         var item           = (RoslynCompletionData)list.FirstOrDefault(d => d.CompletionText == "System");
         KeyActions actions = KeyActions.Complete;
         item.InsertCompletionText(doc.Editor, doc, ref actions, KeyDescriptor.Return);
         Assert.AreEqual("using System", doc.Editor.Text);
     });
 }
예제 #28
0
 public void CycleKeyActions()
 {
     ka++;
     if ((int)ka >= Enum.GetNames(typeof(KeyActions)).Length)
     {
         ka = (KeyActions)1;
     }
     updateKA(ka);
 }
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Ide.Editor.Extension.KeyDescriptor descriptor)
		{
			base.InsertCompletionText (window, ref ka, descriptor);
			factory.Ext.Editor.GetContent<CSharpTextEditorIndentation> ().DoReSmartIndent ();
			if (this.CompletionText.Contains ("\n")) {
				
				factory.Ext.Editor.GetContent<CSharpTextEditorIndentation> ().DoReSmartIndent (factory.Ext.Editor.GetLine (factory.Ext.Editor.CaretLine).NextLine.Offset);
			}
		}
예제 #30
0
 internal KeyframeK(KeyActions ka, Key k, long timestamp, Recording parent)
     : base(timestamp, parent, KFType.KEY)
 {
     this.k  = k;
     this.ka = ka;
     //Info = k.ToString();
     //Description = isDown ? "DOWN" : "UP";
     init();
 }
 public override void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, Ide.Editor.Extension.KeyDescriptor descriptor)
 {
     base.InsertCompletionText(window, ref ka, descriptor);
     factory.Ext.Editor.GetContent <CSharpTextEditorIndentation> ().DoReSmartIndent();
     if (this.CompletionText.Contains("\n"))
     {
         factory.Ext.Editor.GetContent <CSharpTextEditorIndentation> ().DoReSmartIndent(factory.Ext.Editor.GetLine(factory.Ext.Editor.CaretLine).NextLine.Offset);
     }
 }
        public IKeyboardSimulator KeyPress(VirtualKeyCode keyCode)
        {
            KeyActions.Add(new KeyActionChange(keyCode, KeyAction.Press));
            if (keyCode == VirtualKeyCode.CAPITAL)
            {
                isCapsLockOn = !isCapsLockOn;
            }

            return(this);
        }
 public override void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, KeyDescriptor descriptor)
 {
     if (codeTemplate != null)
     {
         codeTemplate.Insert(textEditorExtension.Editor, textEditorExtension.DocumentContext);
     }
     else
     {
         base.InsertCompletionText(window, ref ka, descriptor);
     }
 }
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, KeyDescriptor descriptor)
		{
			var editor = factory.Ext.Editor;
			var offset = window.CodeCompletionContext.TriggerOffset;
			using (var undo = editor.OpenUndoGroup ()) {
				base.InsertCompletionText (window, ref ka, descriptor);
				var span = nodeToCast.Span;
				var type = SafeMinimalDisplayString (targetType, semanticModel, nodeToCast.SpanStart, Ambience.LabelFormat);
				editor.ReplaceText (span.Start, span.Length, "((" + type + ")" + nodeToCast + ")");
			}
		}
예제 #35
0
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
		{
			IEditableTextBuffer buf = window.CompletionWidget as IEditableTextBuffer;
			if (buf != null) {
				using (var undo = buf.OpenUndoGroup ()) {
					buf.InsertText (buf.CursorPosition, element);
					
					// Move caret into the middle of the tags
					buf.CursorPosition = window.CodeCompletionContext.TriggerOffset + cursorOffset;
					buf.Select (buf.CursorPosition, buf.CursorPosition);
				}
			}
		}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, KeyDescriptor descriptor)
		{
			var buf = window.CompletionWidget;
			if (buf != null) {
				//completion context gets nulled from window as soon as we alter the buffer
				var codeCompletionContext = window.CodeCompletionContext;

				buf.Replace (buf.CaretOffset, 0, element);
					
				// Move caret into the middle of the tags
				buf.CaretOffset = codeCompletionContext.TriggerOffset + cursorOffset;
			}
		}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
		{
			var editor = ext.TextEditorData;
			var generator = CodeGenerator.CreateGenerator (ext.Document);
			bool isExplicit = false;
			if (member.DeclaringTypeDefinition.Kind == TypeKind.Interface) {
				foreach (var m in type.Members) {
					if (m.Name == member.Name && !m.ReturnType.Equals (member.ReturnType)) {
						isExplicit = true;
						break;
					}
				}
			}
			var resolvedType = type.Resolve (ext.ParsedDocument.GetTypeResolveContext (ext.Compilation, editor.Caret.Location)).GetDefinition ();
			if (ext.Project != null)
				generator.PolicyParent = ext.Project.Policies;
			var result = generator.CreateMemberImplementation (resolvedType, type, member, isExplicit);
			string sb = result.Code.TrimStart ();
			int trimStart = result.Code.Length - sb.Length;
			sb = sb.TrimEnd ();
			
			var lastRegion = result.BodyRegions.LastOrDefault ();
			var region = lastRegion == null? null
				: new CodeGeneratorBodyRegion (lastRegion.StartOffset - trimStart, lastRegion.EndOffset - trimStart);
			
			int targetCaretPosition;
			int selectionEndPosition = -1;
			if (region != null && region.IsValid) {
				targetCaretPosition = declarationBegin + region.StartOffset;
				if (region.Length > 0) {
					if (GenerateBody) {
						selectionEndPosition = declarationBegin + region.EndOffset;
					} else {
						//FIXME: if there are multiple regions, remove all of them
						sb = sb.Substring (0, region.StartOffset) + sb.Substring (region.EndOffset); 
					}
				}
			} else {
				targetCaretPosition = declarationBegin + sb.Length;
			}
			
			editor.Replace (declarationBegin, editor.Caret.Offset - declarationBegin, sb);
			if (selectionEndPosition > 0) {
				editor.Caret.Offset = selectionEndPosition;
				editor.SetSelection (targetCaretPosition, selectionEndPosition);
			} else {
				editor.Caret.Offset = targetCaretPosition;
			}
		}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, KeyDescriptor descriptor)
		{
			//insert the method name
			var buf = window.CompletionWidget;
			if (buf != null) {
				buf.Replace (window.CodeCompletionContext.TriggerOffset, buf.CaretOffset - window.CodeCompletionContext.TriggerOffset, methodInfo.Name);
			}
			
			//generate the codebehind method

			// TODO: Roslyn port.
//			if (codeBehindClassLocation != null && project != null)
//				BindingService.AddMemberToClass (project, codeBehindClass, codeBehindClassLocation, methodInfo, false);
//			else
//				BindingService.AddMemberToClass (project, codeBehindClass, codeBehindClass.Locations.First (), methodInfo, false);
		}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, KeyDescriptor descriptor)
		{
			var buf = window.CompletionWidget;
			if (buf != null) {
				int deleteStartOffset = window.CodeCompletionContext.TriggerOffset;
				if (text.StartsWith (docTypeStart)) {
					int start = window.CodeCompletionContext.TriggerOffset - docTypeStart.Length;
					if (start >= 0) {
						string readback = buf.GetText (start, window.CodeCompletionContext.TriggerOffset);
						if (string.Compare (readback, docTypeStart, StringComparison.OrdinalIgnoreCase) == 0)
							deleteStartOffset -= docTypeStart.Length;
					}
				}
				
				buf.Replace (deleteStartOffset, buf.CaretOffset - deleteStartOffset, text);
			}
		}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
		{
			//insert the method name
			MonoDevelop.Ide.Gui.Content.IEditableTextBuffer buf = window.CompletionWidget as MonoDevelop.Ide.Gui.Content.IEditableTextBuffer;
			if (buf != null) {
				using (var undo = buf.OpenUndoGroup ()) {
					buf.DeleteText (window.CodeCompletionContext.TriggerOffset, buf.CursorPosition - window.CodeCompletionContext.TriggerOffset);
					buf.InsertText (buf.CursorPosition, methodInfo.Name);
				}
			}
			
			//generate the codebehind method
			if (codeBehindClassPart != null && project != null)
				BindingService.AddMemberToClass (project, codeBehindClass.GetDefinition (), codeBehindClassPart, methodInfo, false);
			else
				BindingService.AddMemberToClass (project, codeBehindClass.GetDefinition (), codeBehindClass.GetDefinition ().Parts.First (), methodInfo, false);
		}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
		{
			CodeGenerator generator = CodeGenerator.CreateGenerator (editor.Document.MimeType, editor.Options.TabsToSpaces, editor.Options.TabSize, editor.EolMarker);
			bool isExplicit = false;
			if (member.DeclaringType.ClassType == ClassType.Interface) {
				foreach (var m in type.Members) {
					if (m.Name == member.Name && m.ReturnType.ToInvariantString () != member.ReturnType.ToInvariantString ()) {
						isExplicit = true;
						break;
					}
				}
			}
			var result = generator.CreateMemberImplementation (type, member, isExplicit);
			string sb = result.Code.TrimStart ();
			int trimStart = result.Code.Length - sb.Length;
			sb = sb.TrimEnd ();
			
			var lastRegion = result.BodyRegions.LastOrDefault ();
			var region = lastRegion == null? null
				: new CodeGeneratorBodyRegion (lastRegion.StartOffset - trimStart, lastRegion.EndOffset - trimStart);
			
			int targetCaretPosition;
			int selectionEndPosition = -1;
			if (region != null && region.IsValid) {
				targetCaretPosition = declarationBegin + region.StartOffset;
				if (region.Length > 0) {
					if (GenerateBody) {
						selectionEndPosition = declarationBegin + region.EndOffset;
					} else {
						//FIXME: if there are multiple regions, remove all of them
						sb = sb.Substring (0, region.StartOffset) + sb.Substring (region.EndOffset); 
					}
				}
			} else {
				targetCaretPosition = declarationBegin + sb.Length;
			}
			
			editor.Replace (declarationBegin, editor.Caret.Offset - declarationBegin, sb);
			if (selectionEndPosition > 0) {
				editor.Caret.Offset = selectionEndPosition;
				editor.SetSelection (targetCaretPosition, selectionEndPosition);
			} else {
				editor.Caret.Offset = targetCaretPosition;
			}
		}
예제 #42
0
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
		{
			MonoDevelop.Ide.Gui.Content.IEditableTextBuffer buf = window.CompletionWidget as MonoDevelop.Ide.Gui.Content.IEditableTextBuffer;
			if (buf != null) {
				using (var undo = buf.OpenUndoGroup ()) {
					int deleteStartOffset = window.CodeCompletionContext.TriggerOffset;
					if (text.StartsWith (docTypeStart)) {
						int start = window.CodeCompletionContext.TriggerOffset - docTypeStart.Length;
						if (start >= 0) {
							string readback = buf.GetText (start, window.CodeCompletionContext.TriggerOffset);
							if (string.Compare (readback, docTypeStart, StringComparison.OrdinalIgnoreCase) == 0)
								deleteStartOffset -= docTypeStart.Length;
						}
					}
					
					buf.DeleteText (deleteStartOffset, buf.CursorPosition - deleteStartOffset);
					buf.InsertText (buf.CursorPosition, text);
				}
			}
		}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, KeyDescriptor descriptor)
		{
			var editor = ext.Editor;
			bool isExplicit = false;
			//			if (member.DeclaringTypeDefinition.Kind == TypeKind.Interface) {
			//				foreach (var m in type.Members) {
			//					if (m.Name == member.Name && !m.ReturnType.Equals (member.ReturnType)) {
			//						isExplicit = true;
			//						break;
			//					}
			//				}
			//			}
			//			var resolvedType = type.Resolve (ext.Project).GetDefinition ();
			//			if (ext.Project != null)
			//				generator.PolicyParent = ext.Project.Policies;

			var result = CSharpCodeGenerator.CreatePartialMemberImplementation (ext.DocumentContext, ext.Editor, currentType, currentType.Locations.First (), Symbol, isExplicit, factory.SemanticModel);
			string sb = result.Code.TrimStart ();
			int trimStart = result.Code.Length - sb.Length;
			sb = sb.TrimEnd ();

			var lastRegion = result.BodyRegions.LastOrDefault ();
			var region = lastRegion == null? null
				: new CodeGeneratorBodyRegion (lastRegion.StartOffset - trimStart, lastRegion.EndOffset - trimStart);

			int targetCaretPosition;
			int selectionEndPosition = -1;
			if (region != null && region.IsValid) {
				targetCaretPosition = declarationBegin + region.EndOffset;

			} else {
				targetCaretPosition = declarationBegin + sb.Length;
			}

			editor.ReplaceText (declarationBegin, editor.CaretOffset - declarationBegin, sb);
			if (selectionEndPosition > 0) {
				editor.CaretOffset = selectionEndPosition;
				editor.SetSelection (targetCaretPosition, selectionEndPosition);
			} else {
				editor.CaretOffset = targetCaretPosition;
			}

			OnTheFlyFormatter.Format (editor, ext.DocumentContext, declarationBegin, declarationBegin + sb.Length);
			editor.CaretLine--;
		}
		public static void PostProcessKeyEvent (KeyActions ka, Gdk.Key key, char keyChar, Gdk.ModifierType modifier)
		{
			if (wnd == null)
				return;
			wnd.PostProcessKeyEvent (ka, key, keyChar, modifier);
		}
예제 #45
0
 public bool PreProcessKey(CompletionListWindow listWindow, Gdk.Key key, char keyChar, Gdk.ModifierType modifier, out KeyActions keyAction)
 {
     keyAction = KeyActions.None;
     return false;
 }
예제 #46
0
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, KeyDescriptor descriptor)
		{
			if (XmlEditorOptions.AutoInsertFragments && dataType == DataType.XmlAttribute) {
				//This temporary variable is needed because
				//base.InsertCompletionText sets window.CompletionWidget to null
				var completionWidget = window.CompletionWidget;
				base.InsertCompletionText (window, ref ka, descriptor);
				if (completionWidget is ITextEditorImpl) {
					((ITextEditorImpl)completionWidget).StartSession (new SkipCharSession ('"'));
				}

				//Even if we are on UI thread call Application.Invoke to postpone calling command
				//otherwise code calling InsertCompletionText will close completion window created by this command
				Application.Invoke ((s,e) => IdeApp.CommandService.DispatchCommand (TextEditorCommands.ShowCompletionWindow));
				ka &= ~KeyActions.CloseWindow;
			} else {
				base.InsertCompletionText (window, ref ka, descriptor);
			}
		}
			public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, MonoDevelop.Ide.Editor.Extension.KeyDescriptor descriptor)
			{
				if (kind == SyntaxKind.SizeOfKeyword || kind == SyntaxKind.NameOfKeyword || kind == SyntaxKind.TypeOfKeyword) {
					string partialWord = GetCurrentWord (window, descriptor);
					int skipChars = 0;
					bool runCompletionCompletionCommand = false;
					var method = Symbol as IMethodSymbol;

					bool addParens = IdeApp.Preferences.AddParenthesesAfterCompletion;
					bool addOpeningOnly = IdeApp.Preferences.AddOpeningOnly;
					var Editor = ext.Editor;
					var Policy = ext.FormattingPolicy;
					string insertionText = this.CompletionText;

					if (addParens && !IsBracketAlreadyInserted (ext)) {
						var line = Editor.GetLine (Editor.CaretLine);
						//var start = window.CodeCompletionContext.TriggerOffset + partialWord.Length + 2;
						//var end = line.Offset + line.Length;
						//string textToEnd = start < end ? Editor.GetTextBetween (start, end) : "";
						bool addSpace = Policy.SpaceAfterMethodCallName && MonoDevelop.Ide.Editor.DefaultSourceEditorOptions.Instance.OnTheFlyFormatting;

						var keys = new [] { SpecialKey.Return, SpecialKey.Tab, SpecialKey.Space };
						if (keys.Contains (descriptor.SpecialKey) || descriptor.KeyChar == ' ') {
							if (addOpeningOnly) {
								insertionText += addSpace ? " (|" : "(|";
							} else {
								insertionText += addSpace ? " (|)" : "(|)";
							}
						}
						ka |= KeyActions.Ignore;
					}

					window.CompletionWidget.SetCompletionText (window.CodeCompletionContext, partialWord, insertionText);
					int offset = Editor.CaretOffset;
					for (int i = skipChars - 1; i-- > 0;) {
						Editor.StartSession (new SkipCharSession (Editor.GetCharAt (offset)));
						offset++;
					}

					if (runCompletionCompletionCommand && IdeApp.Workbench != null) {
						Application.Invoke (delegate {
							ext.RunCompletionCommand ();
						});
					}
				} else {
					base.InsertCompletionText (window, ref ka, descriptor);
				}
			}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, MonoDevelop.Ide.Editor.Extension.KeyDescriptor descriptor)
		{
			Initialize ();
			var doc = completionExt.DocumentContext;
			var offset = completionExt.CurrentCompletionContext.TriggerOffset;
			base.InsertCompletionText (window, ref ka, descriptor);

			using (var undo = completionExt.Editor.OpenUndoGroup ()) {
				if (!window.WasShiftPressed && generateUsing) {
					AddGlobalNamespaceImport (completionExt.Editor, doc, type.ContainingNamespace.ToDisplayString (SymbolDisplayFormat.CSharpErrorMessageFormat));
				} else {
					doc.AnalysisDocument.GetSemanticModelAsync ().ContinueWith (t => {
						Runtime.RunInMainThread (delegate {
							completionExt.Editor.InsertText (offset, type.ContainingNamespace.ToMinimalDisplayString (t.Result, offset, SymbolDisplayFormat.CSharpErrorMessageFormat) + ".");
						});
					});
				}
			}
			ka |= KeyActions.Ignore;
		}
		public static bool PreProcessKeyEvent (Gdk.Key key, char keyChar, Gdk.ModifierType modifier, out KeyActions ka)
		{
			if (wnd == null /*|| !wnd.Visible*/) {
				ka = KeyActions.None;
				return false;
			}
			return wnd.PreProcessKeyEvent (key, keyChar, modifier, out ka);
		}
		public static void PostProcessKeyEvent (KeyActions ka)
		{
			if (wnd == null)
				return;
			wnd.PostProcessKeyEvent (ka);
		}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, MonoDevelop.Ide.Editor.Extension.KeyDescriptor descriptor)
		{
			string partialWord = GetCurrentWord (window, descriptor);
			int skipChars = 0;
			bool runParameterCompletionCommand = false;
			bool runCompletionCompletionCommand = false;
			var method = Symbol as IMethodSymbol;

			bool addParens = IdeApp.Preferences.AddParenthesesAfterCompletion;
			bool addOpeningOnly = IdeApp.Preferences.AddOpeningOnly;
			var Editor = ext.Editor;
			var Policy = ext.FormattingPolicy;
			string insertionText = this.GetInsertionText();

			if (addParens && !IsDelegateExpected && method != null && !HasNonMethodMembersWithSameName (window, Symbol) && !IsBracketAlreadyInserted (ext, method)) {
				var line = Editor.GetLine (Editor.CaretLine);
				//var start = window.CodeCompletionContext.TriggerOffset + partialWord.Length + 2;
				//var end = line.Offset + line.Length;
				//string textToEnd = start < end ? Editor.GetTextBetween (start, end) : "";
				bool addSpace = Policy.SpaceAfterMethodCallName && MonoDevelop.Ide.Editor.DefaultSourceEditorOptions.Instance.OnTheFlyFormatting;

				int exprStart = window.CodeCompletionContext.TriggerOffset - 1;
				while (exprStart > line.Offset) {
					char ch = Editor.GetCharAt (exprStart);
					if (ch != '.' && ch != '_' && !char.IsLetterOrDigit (ch))
						break;
					exprStart--;
				}
				bool insertSemicolon = InsertSemicolon(ext, exprStart);
				if (Symbol is IMethodSymbol && ((IMethodSymbol)Symbol).MethodKind == MethodKind.Constructor)
					insertSemicolon = false;
				//int pos;

				var keys = new [] { SpecialKey.Return, SpecialKey.Tab, SpecialKey.Space };
				if (keys.Contains (descriptor.SpecialKey) || descriptor.KeyChar == '.') {
					if (HasAnyOverloadWithParameters (method)) {
						if (addOpeningOnly) {
							insertionText += RequireGenerics (method) ? "<|" : (addSpace ? " (|" : "(|");
							skipChars = 0;
						} else {
							if (descriptor.KeyChar == '.') {
								if (RequireGenerics (method)) {
									insertionText += addSpace ? "<> ()" : "<>()";
								} else {
									insertionText += addSpace ? " ()" : "()";
								}
								skipChars = 0;
							} else {
								if (insertSemicolon) {
									if (RequireGenerics (method)) {
										insertionText += addSpace ? "<|> ();" : "<|>();";
										skipChars = addSpace ? 5 : 4;
									} else {
										insertionText += addSpace ? " (|);" : "(|);";
										skipChars = 2;
									}
								} else {
									if (RequireGenerics (method)) {
										insertionText += addSpace ? "<|> ()" :  "<|>()";
										skipChars = addSpace ? 4 : 3;
									} else {
										insertionText += addSpace ? " (|)" : "(|)";
										skipChars = 1;
									}
								}
							}
						}
						runParameterCompletionCommand = true;
					} else {
						if (addOpeningOnly) {
							insertionText += RequireGenerics (method) ? "<|" : (addSpace ? " (|" : "(|");
							skipChars = 0;
						} else {
							if (descriptor.KeyChar == '.') {
								if (RequireGenerics (method)) {
									insertionText += addSpace ? "<> ()" : "<>()";
								} else {
									insertionText += addSpace ? " ()" : "()";
								}
								skipChars = 0;
							} else {
								if (insertSemicolon) {
									if (RequireGenerics (method)) {
										insertionText += addSpace ? "<|> ();" : "<|>();";
									} else {
										insertionText += addSpace ? " ();|" : "();|";
									}

								} else {
									if (RequireGenerics (method)) {
										insertionText += addSpace ? "<|> ()" : "<|>()";
									} else {
										insertionText += addSpace ? " ()|" : "()|";
									}

								}
							}
						}
					}
				}
				if (descriptor.KeyChar == ';') {
					insertionText += addSpace ? " ()" : "()";

				}
				ka |= KeyActions.Ignore;
			}
			if ((DisplayFlags & DisplayFlags.NamedArgument) == DisplayFlags.NamedArgument &&
				IdeApp.Preferences.AddParenthesesAfterCompletion &&
				(descriptor.SpecialKey == SpecialKey.Tab ||
					descriptor.SpecialKey == SpecialKey.Return ||
					descriptor.SpecialKey == SpecialKey.Space)) {
				if (true/*Policy.AroundAssignmentParentheses */)
					insertionText += " ";
				insertionText += "=";
				if (/*Policy.AroundAssignmentParentheses && */descriptor.SpecialKey != SpecialKey.Space)
					insertionText += " ";
				runCompletionCompletionCommand = true;
			}
			window.CompletionWidget.SetCompletionText (window.CodeCompletionContext, partialWord, insertionText);
			int offset = Editor.CaretOffset;
			for (int i = skipChars; i --> 0;) {
				Editor.StartSession (new SkipCharSession (Editor.GetCharAt (offset + i)));
			}

			if (runParameterCompletionCommand && IdeApp.Workbench != null) {
				Application.Invoke (delegate {
					ext.RunParameterCompletionCommand ();
				});
			}

			if (runCompletionCompletionCommand && IdeApp.Workbench != null) {
				Application.Invoke (delegate {
					ext.RunCompletionCommand ();
				});
			}
		}
예제 #52
0
            public bool PostProcessKey(CompletionListWindow listWindow, Gdk.Key key, char keyChar, Gdk.ModifierType modifier, out KeyActions keyAction)
            {
                if (key == Gdk.Key.Return)
                    keyAction = KeyActions.Complete;
                else if (key == Gdk.Key.BackSpace)
                {
                    keyAction = KeyActions.None;
                    return false;
                }
                else if (!D_Parser.Parser.Lexer.IsIdentifierPart(keyChar))
                    keyAction = KeyActions.CloseWindow;
                else
                    keyAction = KeyActions.None;

                listWindow.PostProcessKey(key, keyChar, modifier);
                return true;
            }
예제 #53
0
				public bool ProcessKey (CompletionListWindow window, Gdk.Key key, char keyChar, Gdk.ModifierType modifier, out KeyActions keyAction)
				{
					if (keyChar != '!') {
						keyAction = KeyActions.None;
						return false;
					}
					
					keyAction = KeyActions.CloseWindow;
					
					CodeCompletionContext ctx = window.CodeCompletionContext;
					int offset = ctx.TriggerOffset;
					
					while (offset > 0) {
						char ch = window.CompletionWidget.GetChar (offset - 1);
						if (ch != '.') 
							break;
						offset--;
						while (offset > 0) {
							ch = window.CompletionWidget.GetChar (offset - 1);
							if (ch != '_' && !Char.IsLetterOrDigit (ch))
								break;
							offset--;
						}
					}
					
					keyAction = KeyActions.CloseWindow | KeyActions.Ignore | KeyActions.Complete;
					window.CompletionWidget.Replace (offset, 0, "!");
					
					ctx.TriggerOffset++;
					ctx.TriggerLineOffset++;
					
					return true;
				}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
		{
			Initialize ();
			string text = insertNamespace ? type.Namespace + "." + type.Name : type.Name;
			if (text != GetCurrentWord (window)) {
				if (window.WasShiftPressed && generateUsing) 
					text = type.Namespace + "." + text;
				window.CompletionWidget.SetCompletionText (window.CodeCompletionContext, GetCurrentWord (window), text);
			}
			
			if (!window.WasShiftPressed && generateUsing) {
				var generator = CodeGenerator.CreateGenerator (doc);
				if (generator != null) {
					generator.AddGlobalNamespaceImport (doc, type.Namespace);
					// reparse
					doc.UpdateParseDocument ();
				}
			}
		}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, KeyDescriptor descriptor)
		{
			// insert add/remove event handler code after +=/-=
			var editor = factory.Ext.Editor;


			bool AddSemicolon = true;
			var position = window.CodeCompletionContext.TriggerOffset;
			editor.ReplaceText (position, editor.CaretOffset - position, this.DisplayText + (AddSemicolon ? ";" : ""));


			var document = IdeApp.Workbench.ActiveDocument;
			var parsedDocument = document.UpdateParseDocument ().Result;
			var semanticModel = parsedDocument.GetAst<SemanticModel> ();

			var declaringType = semanticModel.GetEnclosingSymbol<INamedTypeSymbol> (position, default(CancellationToken));
			var enclosingSymbol = semanticModel.GetEnclosingSymbol<ISymbol> (position, default(CancellationToken));

			var insertionPoints = InsertionPointService.GetInsertionPoints (
				document.Editor,
				parsedDocument,
				declaringType,
				editor.CaretOffset
			);
			var options = new InsertionModeOptions (
				GettextCatalog.GetString ("Create new method"),
				insertionPoints,
				point => {
					if (!point.Success) 
						return;
					var indent = "\t";
					var sb = new StringBuilder ();
					if (enclosingSymbol != null && enclosingSymbol.IsStatic)
						sb.Append ("static ");
					sb.Append ("void ");
					int pos2 = sb.Length;
					sb.Append (this.DisplayText);
					sb.Append (' ');
					sb.Append("(");

					var delegateMethod = delegateType.GetDelegateInvokeMethod();
					for (int k = 0; k < delegateMethod.Parameters.Length; k++) {
						if (k > 0) {
							sb.Append(", ");
						}
						sb.Append (RoslynCompletionData.SafeMinimalDisplayString (delegateMethod.Parameters [k], semanticModel, position, MonoDevelop.Ide.TypeSystem.Ambience.LabelFormat)); 
					}
					sb.Append(")");

					sb.Append (editor.EolMarker);
					sb.Append (indent);
					sb.Append ("{");
					sb.Append (editor.EolMarker);
					sb.Append (indent);
					sb.Append (editor.Options.GetIndentationString ());
					//int cursorPos = pos + sb.Length;
					sb.Append (editor.EolMarker);
					sb.Append (indent);
					sb.Append ("}");
					point.InsertionPoint.Insert (document.Editor, document, sb.ToString ());
					//			// start text link mode after insert
					//			var links = new List<TextLink> ();
					//			var link = new TextLink ("name");
					//			
					//			link.AddLink (new TextSegment (initialOffset, this.DisplayText.Length));
					//			link.AddLink (new TextSegment (initialOffset + pos + pos2, this.DisplayText.Length));
					//			links.Add (link);
					//			editor.StartTextLinkMode (new TextLinkModeOptions (links));
				}
			);

			editor.StartInsertionMode (options);

		}
//			public override TooltipInformation CreateTooltipInformation (bool smartWrap)
//			{
//				var sig = new SignatureMarkupCreator (ext.Editor, ext.DocumentContext, ext.Editor.CaretOffset);
//				sig.BreakLineAfterReturnType = smartWrap;
//				return sig.GetKeywordTooltip (title, null);
//			}

			public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, MonoDevelop.Ide.Editor.Extension.KeyDescriptor descriptor)
			{
				var currentWord = GetCurrentWord (window);
				var text = CompletionText;
				if (descriptor.KeyChar == '>' && text.EndsWith (">", StringComparison.Ordinal))
					text = text.Substring (0, text.Length - 1);
				if (text.StartsWith ("<", StringComparison.Ordinal))
					text = text.Substring (1);
				
				window.CompletionWidget.SetCompletionText (window.CodeCompletionContext, currentWord, text);
			}
			public bool PostProcessKey (CompletionListWindow listWindow, KeyDescriptor descriptor, out KeyActions keyAction)
			{
				keyAction = KeyActions.None;
				if (descriptor.KeyChar == '.') {
					return true;
				}
				return false;
			}
예제 #58
0
            public bool PreProcessKey(CompletionListWindow listWindow, Gdk.Key key, char keyChar, Gdk.ModifierType modifier, out KeyActions keyAction)
            {
                keyAction = KeyActions.None;
                if (keyChar == '_')
                {
                    listWindow.PreProcessKey(key, keyChar, modifier);
                    return true;
                }

                return false;
            }
		public virtual void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
		{
			var currentWord = GetCurrentWord (window);
			window.CompletionWidget.SetCompletionText (window.CodeCompletionContext, currentWord, CompletionText);
		}
		public override void InsertCompletionText (CompletionListWindow window, ref KeyActions ka, MonoDevelop.Ide.Editor.Extension.KeyDescriptor descriptor)
		{
			Initialize ();
			var doc = ext.DocumentContext;
			using (var undo = ext.Editor.OpenUndoGroup ()) {
				string text = insertNamespace ? type.ContainingNamespace.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat) + "." + type.Name : type.Name;
				if (text != GetCurrentWord (window)) {
					if (window.WasShiftPressed && generateUsing) 
						text = type.ContainingNamespace.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat) + "." + text;
					window.CompletionWidget.SetCompletionText (window.CodeCompletionContext, GetCurrentWord (window), text);
				}

				if (!window.WasShiftPressed && generateUsing) {
					AddGlobalNamespaceImport (ext.Editor, doc, type.ContainingNamespace.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat));
				}
			}
			ka |= KeyActions.Ignore;
		}