private void btnRun_Click(object sender, EventArgs e) { //入参判断是否json //var thread = new Thread(() => ThreadProc(this.txtCode.Text, BreakPoints)); //CurrentDebugStatus = 0; //thread.Start(); if (db.IsRunning) { //db.StepOut(); } else { //将document中的breakpoint转成breakPointList IList <EditorBreakPoint> BreakPoints = new List <EditorBreakPoint>(); foreach (var item in this.txtCode.Document.BookmarkManager.Marks) { if (item.GetType().Name == "BreakPointMark") { BreakPointMark breakPointMark = (BreakPointMark)item; BreakPoints.Add(new EditorBreakPoint(breakPointMark.Location.Line + 1, breakPointMark.Location.Column)); } } var instance = new JintDebugInstance() { Script = this.txtCode.Text, BreakPoints = BreakPoints, InputJson = this.txtInput.Text.Trim() }; db.Run(instance); } }
private void IconBarMargin_MouseDown(AbstractMargin sender, Point mousepos, MouseButtons mouseButtons) { if (mouseButtons != MouseButtons.Left) { return; } var textArea = this.txtCode.ActiveTextAreaControl.TextArea; int yPos = mousepos.Y; int lineHeight = textArea.TextView.FontHeight; int lineNumber = (yPos + textArea.VirtualTop.Y) / lineHeight; //是否已经存在该断点 //if(this.txtCode.Document.BookmarkManager.Marks) //if (BreakPoints.Any(p => p.Line == lineNumber + 1) || lineNumber >= textArea.Document.TotalNumberOfLines) // return; string text = textArea.Document.GetText(textArea.Document.GetLineSegment(lineNumber)); int offset = -1; for (int i = 0; i < text.Length; i++) { if ( !Char.IsWhiteSpace(text[i]) && text[i] != '/' ) { offset = i; break; } } if (offset == -1) { return; } var breakPoint = new EditorBreakPoint(lineNumber + 1, offset); db.AddBreakPoint(breakPoint); var document = this.txtCode.Document; var mark = new BreakPointMark( document, new TextLocation( offset, lineNumber ) ); mark.Removed += (s, e) => { db.RemoveBreakPoint(breakPoint); }; document.BookmarkManager.AddMark(mark); this.txtCode.Refresh(); }
void IconBarMargin_MouseDown(AbstractMargin sender, Point mousepos, MouseButtons mouseButtons) { if (mouseButtons != MouseButtons.Left) { return; } var textArea = _textEditor.ActiveTextAreaControl.TextArea; int yPos = mousepos.Y; int lineHeight = textArea.TextView.FontHeight; int lineNumber = (yPos + textArea.VirtualTop.Y) / lineHeight; if (BreakPoints.Any(p => p.Line == lineNumber + 1) || lineNumber >= textArea.Document.TotalNumberOfLines) { return; } string text = textArea.Document.GetText(textArea.Document.GetLineSegment(lineNumber)); int offset = -1; for (int i = 0; i < text.Length; i++) { if ( !Char.IsWhiteSpace(text[i]) && text[i] != '/' ) { offset = i; break; } } if (offset == -1) { return; } var breakPoint = new EditorBreakPoint(lineNumber + 1, offset); BreakPoints.Add(breakPoint); if (_script != null) { breakPoint.BreakPoint = new BreakPoint(Script.Script, lineNumber + 1, offset); _script.Engine.BreakPoints.Add(breakPoint.BreakPoint); } var document = _textEditor.Document; var mark = new BreakPointMark( document, new TextLocation( offset, lineNumber ) ); mark.Removed += (s, e) => { BreakPoints.Remove(breakPoint); _script?.Engine.BreakPoints.Remove(breakPoint.BreakPoint); }; document.BookmarkManager.AddMark(mark); _textEditor.Refresh(); }