public bool RowContainsFormats(Row row) { foreach (FormatRange frang in this) { if (frang.Bounds.FirstRow <= row.Index && frang.Bounds.LastRow >= row.Index) return true; } return false; }
/// <summary> /// Implementation of the IPainter MeasureRow method. /// </summary> /// <param name="xtr">Row to measure</param> /// <param name="Count">Last char index</param> /// <returns>The size of the row in pixels</returns> public Size MeasureRow(Row xtr, int Count) { int width = 0; int taborig = -Control.View.FirstVisibleColumn*Control.View.CharWidth + Control.View.TextMargin; int xpos = Control.View.TextMargin - Control.View.ClientAreaStart; if (xtr.InQueue) { SetStringFont(false, false, false); int Padd = Math.Max(Count - xtr.Text.Length, 0); var PaddStr = new String(' ', Padd); string TotStr = xtr.Text + PaddStr; width = GFX.StringBuffer.MeasureTabbedString(TotStr.Substring(0, Count), Control.PixelTabSize).Width; } else { int CharNo = 0; int TotWidth = 0; foreach (Word w in xtr.FormattedWords) { if (w.Type == WordType.Word && w.Style != null) SetStringFont(w.Style.Bold, w.Style.Italic, w.Style.Underline); else SetStringFont(false, false, false); if (w.Text.Length + CharNo >= Count || w == xtr.FormattedWords[xtr.FormattedWords.Count - 1]) { int CharPos = Count - CharNo; int MaxChars = Math.Min(CharPos, w.Text.Length); TotWidth += GFX.StringBuffer.DrawTabbedString(w.Text.Substring(0, MaxChars), xpos + TotWidth, 0, taborig, Control.PixelTabSize).Width; width = TotWidth; break; } TotWidth += GFX.StringBuffer.DrawTabbedString(w.Text, xpos + TotWidth, 0, taborig, Control.PixelTabSize).Width; CharNo += w.Text.Length; } SetStringFont(false, false, false); int Padd = Math.Max(Count - xtr.Text.Length, 0); var PaddStr = new String(' ', Padd); width += GFX.StringBuffer.DrawTabbedString(PaddStr, xpos + TotWidth, 0, taborig, Control.PixelTabSize).Width; } return new Size(width, 0); // return GFX.BackBuffer.MeasureTabbedString (xtr.Text.Substring (0,Count),Control.PixelTabSize); }
//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="row"></param> public RowEventArgs(Row row) { Row = row; }
/// <summary> /// Implementation of the IPainter MeasureRow method. /// </summary> /// <param name="xtr">Row to measure</param> /// <param name="Count">Last char index</param> /// <returns>The size of the row in pixels</returns> public Size MeasureRow(Row xtr, int Count) { return MeasureRow(xtr, Count, 0); }
/// <summary> /// /// </summary> /// <param name="row"></param> public RowEventArgs(Row row) { this.Row = row; }