private void View_ClipboardUpdated(object sender, CopyEventArgs e) { OnClipboardUpdated(e); }
protected virtual void OnClipboardUpdated(CopyEventArgs e) { if (ClipboardUpdated != null) ClipboardUpdated(this, e); }
private void OnClipboardUpdated(CopyEventArgs e) { if (ClipboardUpdated != null) ClipboardUpdated(this, e); }
protected void CopyAsRTF() { TextStyle[] styles = Document.Parser.SyntaxDefinition.Styles; Document.ParseAll(true); int r1 = Selection.LogicalBounds.FirstRow; int r2 = Selection.LogicalBounds.LastRow; int c1 = Selection.LogicalBounds.FirstColumn; int c2 = Selection.LogicalBounds.LastColumn; var sb = new StringBuilder(); sb.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1053{\fonttbl{\f0\fmodern\fprq1\fcharset0 " + FontName + @";}}"); sb.Append(@"{\colortbl ;"); foreach (TextStyle ts in styles) { sb.AppendFormat("\\red{0}\\green{1}\\blue{2};", ts.ForeColor.R, ts.ForeColor.G, ts.ForeColor.B); sb.AppendFormat("\\red{0}\\green{1}\\blue{2};", ts.BackColor.R, ts.BackColor.G, ts.BackColor.B); } sb.Append(@";}"); sb.Append(@"\viewkind4\uc1\pard\f0\fs20"); bool Done = false; for (int i = r1; i <= r2; i++) { Row row = Document[i]; foreach (Word w in row) { if (i == r1 && w.Column + w.Text.Length < c1) continue; bool IsFirst = (i == r1 && w.Column <= c1 && w.Column + w.Text.Length > c1); bool IsLast = (i == r2 && w.Column < c2 && w.Column + w.Text.Length > c2); if (w.Type == WordType.Word && w.Style != null) { int clrindex = Array.IndexOf(styles, w.Style); clrindex *= 2; clrindex++; sb.Append("{\\cf" + clrindex.ToString (CultureInfo.InvariantCulture)); if (!w.Style.Transparent) { sb.Append("\\highlight" + (clrindex + 1).ToString (CultureInfo.InvariantCulture)); } sb.Append(" "); } if (w.Style != null) { if (w.Style.Bold) sb.Append(@"\b "); if (w.Style.Underline) sb.Append(@"\ul "); if (w.Style.Italic) sb.Append(@"\i "); } string wordtext = w.Text; if (IsLast) wordtext = wordtext.Substring(0, c2 - w.Column); if (IsFirst) wordtext = wordtext.Substring(c1 - w.Column); wordtext = wordtext.Replace(@"\", @" \ \ ").Replace(@" } ", @" \ } "). Replace(@" { ", @" \ { "); sb.Append(wordtext); if (w.Style != null) { if (w.Style.Bold) sb.Append(@"\b0 "); if (w.Style.Underline) sb.Append(@"\ul0 "); if (w.Style.Italic) sb.Append(@"\i0 "); } if (w.Type == WordType.Word && w.Style != null) { sb.Append("}"); } if (IsLast) { Done = true; break; } } if (Done) break; sb.Append(@"\par"); } var da = new DataObject(); da.SetData(DataFormats.Rtf, sb.ToString()); string s = Selection.Text; da.SetData(DataFormats.Text, s); Clipboard.SetDataObject(da); var ea = new CopyEventArgs {Text = s}; OnClipboardUpdated(ea); }
private void CopyText() { //no freaking vs.net copy empty selection if (!Selection.IsValid) return; if (_SyntaxBox.CopyAsRTF) { CopyAsRTF(); } else { try { string t = Selection.Text; Clipboard.SetDataObject(t, true); var ea = new CopyEventArgs {Text = t}; OnClipboardUpdated(ea); } catch { try { string t = Selection.Text; Clipboard.SetDataObject(t, true); var ea = new CopyEventArgs {Text = t}; OnClipboardUpdated(ea); } catch {} } } }