internal void OpenCodeSegmentEditor ()
{
if (!IsCodeSegmentPreviewWindowShown)
throw new InvalidOperationException ("CodeSegment preview window isn't shown.");
var previewSegment = previewWindow.Segment;
int x = 0, y = 0;
this.previewWindow.GdkWindow.GetOrigin (out x, out y);
int w = previewWindow.Allocation.Width;
int h = previewWindow.Allocation.Height;
if (!previewWindow.HideCodeSegmentPreviewInformString)
h -= previewWindow.PreviewInformStringHeight;
CodeSegmentEditorWindow codeSegmentEditorWindow = new CodeSegmentEditorWindow (textEditor);
codeSegmentEditorWindow.Move (x, y);
codeSegmentEditorWindow.Resize (w, h);
int indentLength = SyntaxMode.GetIndentLength (Document, previewSegment.Offset, previewSegment.Length, false);
StringBuilder textBuilder = new StringBuilder ();
int curOffset = previewSegment.Offset;
while (curOffset >= 0 && curOffset < previewSegment.EndOffset && curOffset < Document.TextLength) {
DocumentLine line = Document.GetLineByOffset (curOffset);
string lineText = Document.GetTextAt (curOffset, line.Offset + line.Length - curOffset);
textBuilder.Append (lineText);
textBuilder.AppendLine ();
curOffset = line.EndOffsetIncludingDelimiter + indentLength;
}
codeSegmentEditorWindow.Text = textBuilder.ToString ();
HideCodeSegmentPreviewWindow ();
codeSegmentEditorWindow.ShowAll ();
codeSegmentEditorWindow.GrabFocus ();
}