// Construction public Enumerator(RowCollection tc) { m_collection = tc; m_index = -1; m_version = tc.m_version; }
//Override the OnPrintPage to provide the printing logic for the document protected override void OnPrintPage(PrintPageEventArgs ev) { float lpp = 0; float yPos = 0; int count = 0; float leftMargin = ev.MarginBounds.Left; float rightMargin = ev.MarginBounds.Right; float topMargin = ev.MarginBounds.Top; //ev.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; if (rc == null) { Document.ParseAll(); Document.ParseAll(true); rc = new RowCollection(); foreach (Row r in Document) { bool hasbreak = false; float x = leftMargin; Row newRow = new Row(); rc.Add(newRow); foreach (Word w in r) { Font f = fontNormal; if (w.Style != null) { FontStyle fs = 0; if (w.Style.Bold) fs |= FontStyle.Bold; if (w.Style.Italic) fs |= FontStyle.Italic; if (w.Style.Underline) fs |= FontStyle.Underline; f = new Font("Courier new", 8, fs); } SizeF sf = ev.Graphics.MeasureString(w.Text, f); if (x + sf.Width > rightMargin) { char chr = (char) 0xbf; Word br = new Word(); br.Text = chr + ""; br.InfoTip = "break char"; newRow.Add(br); hasbreak = true; newRow = new Row(); rc.Add(newRow); x = leftMargin; } x += sf.Width; newRow.Add(w); } if (hasbreak) { rc.Add(new Row()); } } } //------------------------------------------------------ base.OnPrintPage(ev); lpp = ev.MarginBounds.Height/fontNormal.GetHeight(ev.Graphics); while (count < lpp && (RowIndex < rc.Count)) { float x = leftMargin; yPos = topMargin + (count*fontNormal.GetHeight(ev.Graphics)); Row r = rc[RowIndex]; foreach (Word w in r) { if (w.InfoTip != null && w.InfoTip == "break char") { ev.Graphics.DrawString(w.Text, fontBreak, Brushes.Black, x, yPos, new StringFormat()); } else { SizeF sf = ev.Graphics.MeasureString(w.Text, fontNormal); if (w.Text != null && (".,:;".IndexOf(w.Text) >= 0)) { sf.Width = 6; x -= 4; } if (w.Text == "\t") { sf.Width = ev.Graphics.MeasureString("...", fontNormal).Width; } Color c = Color.Black; Font f = fontNormal; if (w.Style != null) { c = w.Style.ForeColor; FontStyle fs = 0; if (w.Style.Bold) fs |= FontStyle.Bold; if (w.Style.Italic) fs |= FontStyle.Italic; if (w.Style.Underline) fs |= FontStyle.Underline; f = new Font("Courier new", 8, fs); if (!w.Style.Transparent) { Color bg = w.Style.BackColor; ev.Graphics.FillRectangle(new SolidBrush(bg), x, yPos, sf.Width, fontNormal.GetHeight(ev.Graphics)); } } c = Color.FromArgb(c.R, c.G, c.B); ev.Graphics.DrawString(w.Text, f, new SolidBrush(c), x, yPos, new StringFormat()); x += sf.Width; } } count++; RowIndex++; } //If we have more lines then print another page if (RowIndex < rc.Count) ev.HasMorePages = true; else ev.HasMorePages = false; }
/// <summary> /// /// </summary> /// <param name="collection"></param> public RowCollection(RowCollection collection) { AddRange(collection); }
// Construction public Enumerator(RowCollection tc) { m_collection = tc; m_index = - 1; m_version = tc.m_version; }
// Operations (type-safe ICloneable) /// <summary> /// /// </summary> /// <returns></returns> public RowCollection Clone() { RowCollection tc = new RowCollection(); tc.AddRange(this); tc.Capacity = this.m_array.Length; tc.m_version = this.m_version; return tc; }
/// <summary> /// /// </summary> /// <param name="collection"></param> public void AddRange(RowCollection collection) { // for (int i=0; i < collection.Count; ++i) Add(collection[i]); ++m_version; Capacity += collection.Count; Array.Copy(collection.m_array, 0, this.m_array, m_count, collection.m_count); m_count += collection.Count; }