private void ExecuteDocRowPaint(DDocRow docRow) { if (!_footerDocument.OwnerPfooter.IsEdit) return; //行号 if (EditorSetting.IsShowRowIndex) { _graphics.DrawString(Convert.ToString(docRow.Index), _mFont, _brush2, docRow.X - 40, docRow.Y); } var member = docRow.GetShortestMember(MemberType.Unknown); var offset = member == null ? docRow.Height / 2 : (member.Height + _enterArrow.Height) / 2; //回车符 if (docRow.FirstMember == null) { _graphics.DrawImage(_enterArrow, docRow.X, docRow.Y + docRow.Height - offset); } else if (!docRow.IsContinue) { if (docRow.LastMember != null) { _graphics.DrawImage(_enterArrow, docRow.LastMember.X + docRow.LastMember.Width, docRow.Y + docRow.Height - offset); } else { _graphics.DrawImage(_enterArrow, docRow.FirstMember.X + docRow.FirstMember.Width, docRow.Y + docRow.Height - offset); } } else if (docRow.FirstMember.IsBreakTail) { _graphics.DrawImage(_enterArrow, docRow.FirstMember.X + docRow.FirstMember.Width, docRow.Y + docRow.Height - offset); } else if (docRow.LastMember != null && docRow.LastMember.IsBreakTail) { _graphics.DrawImage(_enterArrow, docRow.LastMember.X + docRow.LastMember.Width, docRow.Y + docRow.Height - offset); } //空行选择区域 if (docRow.IsSelected && docRow.FirstMember == null) _graphics.FillRectangle(_brush1, docRow.X, docRow.Y, _enterArrow.Width, docRow.Height); }
private void ExecuteDocRowPaint(DDocRow docRow) { _enterArrow = _view.GetImageList8().Images[0]; //网格线 if (EditorSetting.IsShowGridLine) { _graphics.DrawLine(new Pen(Color.Gray), docRow.X, docRow.Y + docRow.Height, docRow.X + docRow.Width, docRow.Y + docRow.Height); } //行号 if (EditorSetting.IsShowRowIndex) { _graphics.DrawString(Convert.ToString(docRow.Index), _mFont, _brush2, docRow.X - 40, docRow.Y); } var member = docRow.GetShortestMember(MemberType.Unknown); var offset = member == null ? docRow.Height / 2 : (member.Height + _enterArrow.Height) / 2; //回车符 if (docRow.FirstMember == null) { _graphics.DrawImage(_enterArrow, docRow.X, docRow.Y + docRow.Height - offset); } else if (docRow.LastMember == null) { _graphics.DrawImage(_enterArrow, docRow.FirstMember.X + docRow.FirstMember.Width, docRow.Y + docRow.Height - offset); } else if (!docRow.IsContinue) { _graphics.DrawImage(_enterArrow, docRow.LastMember.X + docRow.LastMember.Width, docRow.Y + docRow.Height - offset); } else if (docRow.LastMember.IsBreakTail) { _graphics.DrawImage(_enterArrow, docRow.LastMember.X + docRow.LastMember.Width, docRow.Y + docRow.Height - offset); } //空行选择区域 if (docRow.IsSelected && docRow.FirstMember == null) _graphics.FillRectangle(_brush1, docRow.X, docRow.Y, _enterArrow.Width, docRow.Height); }
private void ExecuteDocRowPaint(DDocRow docRow) { var member = docRow.GetShortestMember(MemberType.Unknown); var offset = member == null ? docRow.Height / 2 : (member.Height + _enterArrow.Height) / 2; //回车符 if (docRow.FirstMember == null) { _graphics.DrawImage(_enterArrow, docRow.X, docRow.Y + docRow.Height - offset); } else if (!docRow.IsContinue) { if (docRow.LastMember != null) { _graphics.DrawImage(_enterArrow, docRow.LastMember.X + docRow.LastMember.Width, docRow.Y + docRow.Height - offset); } else { _graphics.DrawImage(_enterArrow, docRow.FirstMember.X + docRow.FirstMember.Width, docRow.Y + docRow.Height - offset); } } else if (docRow.FirstMember.IsBreakTail) { _graphics.DrawImage(_enterArrow, docRow.FirstMember.X + docRow.FirstMember.Width, docRow.Y + docRow.Height - offset); } else if (docRow.LastMember != null && docRow.LastMember.IsBreakTail) { _graphics.DrawImage(_enterArrow, docRow.LastMember.X + docRow.LastMember.Width, docRow.Y + docRow.Height - offset); } //空行选择区域 if (docRow.IsSelected && docRow.FirstMember == null) _graphics.FillRectangle(_brush1, docRow.X, docRow.Y, _enterArrow.Width, docRow.Height); }
public override DDocRow InsertRowBefore(DDocRow row) { var newDocRow = new DDocRow() { OwnerDocument = this, Height = EditorSetting.DefaultDocRowHeight, Width = EditorSetting.DefaultDocRowWidth }; if (row == null && FirstRow == null) { FirstRow = newDocRow; newDocRow.IsPageFirst = true; CurrentPage.PageBody.Data = newDocRow; return newDocRow; } if (row == null) return null; if (row.PreDocRow == null) { newDocRow.X = row.X; newDocRow.Y = row.Y; newDocRow.Index = 1; row.PreDocRow = newDocRow; newDocRow.NextDocRow = row; FirstRow = newDocRow; row.IsPageFirst = false; newDocRow.IsPageFirst = true; CurrentPage.PageBody.Data = newDocRow; } else if (row.IsPageFirst) { newDocRow.X = row.X; newDocRow.Y = row.Y; newDocRow.Index = 1; newDocRow.PreDocRow = row.PreDocRow; newDocRow.NextDocRow = row; row.PreDocRow.NextDocRow = newDocRow; row.PreDocRow = newDocRow; row.IsPageFirst = false; newDocRow.IsPageFirst = true; var page = GetPage(row); if (page != null) { page.PageBody.Data = newDocRow; } } else { newDocRow.PreDocRow = row.PreDocRow; newDocRow.NextDocRow = row; row.PreDocRow.NextDocRow = newDocRow; row.PreDocRow = newDocRow; } if (LastRow == null) { LastRow = row; } else if (LastRow.Y < row.Y) { LastRow = row; } newDocRow.Paragraph = newDocRow.NextDocRow.Paragraph; return newDocRow; }
private void AddSelectedRow(DDocRow row) { if (SelectedRows.Contains(row)) return; row.IsSelected = true; SelectedRows.Add(row); }
private static void ExportRow(XmlDocument xmlDocument, XmlElement docElement, DDocRow row) { var rowElement = xmlDocument.CreateElement("row"); if (row.FirstMember == null) { docElement.AppendChild(rowElement); return; } var membersElement = xmlDocument.CreateElement("members"); rowElement.AppendChild(membersElement); var textCharElements = new List<XmlElement>(); var member = row.FirstMember; while (member != null) { switch (member.MType) { case MemberType.TextChar: if (PropertyEquals(member, member.PreMember)) { var textCharElement = textCharElements[textCharElements.Count - 1]; textCharElement.InnerText += member.Value; } else { var textCharElement = xmlDocument.CreateElement("textChar"); textCharElements.Add(textCharElement); membersElement.AppendChild(textCharElement); textCharElement.InnerText = member.Value; textCharElement.SetAttribute("fontName", member.WFont.Name); textCharElement.SetAttribute("fontSize", Convert.ToString(member.WFont.Size)); textCharElement.SetAttribute("fontColor", System.Drawing.ColorTranslator.ToHtml(member.FontColor)); textCharElement.SetAttribute("fontStyle", Convert.ToString(member.WFont.Style)); } break; case MemberType.TextInput: var textInput = (DTextInput) member; membersElement.AppendChild(textInput.Convert2Xml(xmlDocument)); break; case MemberType.Table: break; case MemberType.CheckBox: var checkBox = (DCheckBox) member; var checkBoxElement = xmlDocument.CreateElement("checkBox"); membersElement.AppendChild(checkBoxElement); checkBoxElement.SetAttribute("isChecked", Convert.ToString(checkBox.IsChecked)); checkBoxElement.InnerText = checkBox.Value; break; case MemberType.ComboBox: var comboBox = (DComboBox) member; membersElement.AppendChild(comboBox.Convert2Xml(xmlDocument)); break; case MemberType.Image: var imageElement = xmlDocument.CreateElement("image"); membersElement.AppendChild(imageElement); imageElement.InnerText = ConvertToString(((DImage)member).MImage); break; case MemberType.HorizonLine: var hLineElement = xmlDocument.CreateElement("horizonLine"); membersElement.AppendChild(hLineElement); hLineElement.SetAttribute("width", Convert.ToString(member.Width)); hLineElement.SetAttribute("height", Convert.ToString(member.Height)); break; } member = member.NextMember; } docElement.AppendChild(rowElement); }
public DDocRow CopyData() { var row = new DDocRow(); var tempMember = FirstMember; while (tempMember != null) { var copyMember = (DRowMember)tempMember.Copy(); copyMember.OwnerDocRow = row; if (row.FirstMember == null) { row.FirstMember = copyMember; } else if (row.LastMember == null) { row.LastMember = copyMember; row.FirstMember.NextMember = row.LastMember; row.LastMember.PreMember = row.FirstMember; } else { row.LastMember.NextMember = copyMember; copyMember.PreMember = row.LastMember; row.LastMember = copyMember; } tempMember = tempMember.NextMember; } return row; }
/// <summary> /// 删除时后面成员跟进处理 /// </summary> /// <param name="startRow">开始行</param> /// <param name="nextRow">下一行</param> /// <param name="isDelTailMember">是否对开始行的末尾成员进行删除操作</param> private void FollowUp(DDocRow startRow, DDocRow nextRow, bool isDelTailMember = true) { if (startRow == null || nextRow == null) return; //定义三个活动指针 var sRowPointer = startRow; var nRowPointer = nextRow; var mPointer = nRowPointer.FirstMember; while (true) { if (sRowPointer.ConcatMemberForDelete(mPointer, isDelTailMember)) { if (isDelTailMember) { isDelTailMember = false; CurrentRow = startRow; CurrentRow.CurrentMember = mPointer.PreMember ?? (mPointer.Equals(sRowPointer.FirstMember) ? null : mPointer); } //连接成功,则指针下移且断开与之前已被连接成员 mPointer = mPointer.NextMember; if (mPointer != null) { mPointer.PreMember.NextMember = null; mPointer.PreMember = null; } continue; } if (isDelTailMember) { isDelTailMember = false; CurrentRow = startRow; CurrentRow.CurrentMember = startRow.LastMember ?? startRow.FirstMember; } //成员前移置顶 if (mPointer != null) { nRowPointer.FirstMember = mPointer; var tailMember = mPointer.GetTailMember(); nRowPointer.LastMember = tailMember.Equals(mPointer) ? null : tailMember; } else { CutRow(sRowPointer, nRowPointer); JoinRow(sRowPointer, nRowPointer.NextDocRow); if (LastRow != null && LastRow.Equals(nRowPointer)) { LastRow = nRowPointer.NextDocRow ?? sRowPointer; } break; } //到断点循环结束 var tempMember1 = sRowPointer.LastMember ?? sRowPointer.FirstMember; var tempMember2 = nRowPointer.LastMember ?? nRowPointer.FirstMember; var isEnd = (tempMember1 == null || tempMember1.IsBreakTail) || (tempMember2 == null || tempMember2.IsBreakTail); if (isEnd) break; //行指针下移 sRowPointer = nRowPointer; nRowPointer = nRowPointer.NextDocRow; if (nRowPointer == null) break; //成员指针指向下一行第一个元素 mPointer = nRowPointer.FirstMember; } }
private int RowCompose(DDocRow row, List<DMember> allMembers, int index) { var tempIndex = 0; var firstMember = allMembers[index] as DRowMember; for (var i = index; i < allMembers.Count; i++) { var member = allMembers[i] as DRowMember; if (member == null) continue; tempIndex = i; //表示首个写入成员是空成员,则独立于一行 if (firstMember != null && firstMember.OwnerDocRow == null) { tempIndex = index + 1; break; } //表示首个写入成员是断点,连接后退出 else if (firstMember != null && firstMember.IsBreakTail) { firstMember.OwnerDocRow = row; row.FirstMember = firstMember; firstMember.NextMember = null; tempIndex = index + 1; break; } else if (row.FirstMember == null) { member.OwnerDocRow = row; row.FirstMember = member; member.PreMember = null; member.NextMember = null; //如果最后一个成员已写入,将序号加1,使得compseContent循环退出 if (i == allMembers.Count - 1) tempIndex = i + 1; } else if (row.LastMember == null) { if (row.FirstMember.IsBreakTail) { member.PreMember = null; break; } else if(row.FirstMember.X + row.FirstMember.Width + allMembers[i].Width > row.X + row.Width) { row.IsContinue = true; member.PreMember = null; break; } else { member.OwnerDocRow = row; row.LastMember = member; member.PreMember = row.FirstMember; row.FirstMember.NextMember = member; member.NextMember = null; //如果最后一个成员已写入,将序号加1,使得compseContent循环退出 if (i == allMembers.Count - 1) tempIndex = i + 1; } } else { if (row.LastMember.IsBreakTail) { member.PreMember = null; break; } else if(row.LastMember.X + row.LastMember.Width + allMembers[i].Width > row.X + row.Width) { row.IsContinue = true; member.PreMember = null; break; } else { member.OwnerDocRow = row; row.LastMember.NextMember = member; member.PreMember = row.LastMember; member.NextMember = null; row.LastMember = member; //如果最后一个成员已写入,将序号加1,使得compseContent循环退出 if (i == allMembers.Count - 1) tempIndex = i + 1; } } } return tempIndex; }
public void CutRow(DDocRow fRow, DDocRow sRow) { fRow.NextDocRow = null; sRow.PreDocRow = null; }
public override DDocRow InsertRowBefore(DDocRow row) { var newDocRow = new DDocRow() { OwnerDocument = this, IsHold = true, IsContinue = false, Height = EditorSetting.DefaultDocRowHeight }; if (row == null && FirstRow == null) { FirstRow = newDocRow; return newDocRow; } if (row == null) return null; newDocRow.Width = row.Width; if (row.PreDocRow == null) { newDocRow.X = row.X; newDocRow.Y = row.Y; newDocRow.Index = 1; row.PreDocRow = newDocRow; newDocRow.NextDocRow = row; FirstRow = newDocRow; } else if (row.IsPageFirst) { newDocRow.X = row.X; newDocRow.Y = row.Y; newDocRow.Index = 1; newDocRow.PreDocRow = row.PreDocRow; newDocRow.NextDocRow = row; row.PreDocRow.NextDocRow = newDocRow; row.PreDocRow = newDocRow; } else { newDocRow.PreDocRow = row.PreDocRow; newDocRow.NextDocRow = row; row.PreDocRow.NextDocRow = newDocRow; row.PreDocRow = newDocRow; } if (LastRow == null) { LastRow = row; } else if (LastRow.Y < row.Y) { LastRow = row; } return newDocRow; }
/// <summary> /// 递归改变链表成员所属行为指定行 /// </summary> /// <param name="docRow"></param> public virtual void RecursiveChangeDocRow(DDocRow docRow) { OwnerDocRow = docRow; if (NextMember == null) return; NextMember.RecursiveChangeDocRow(docRow); }
/// <summary> /// 从指定成员开始重新排版 /// </summary> public void ReComposing(DRowMember member) { if (member == null) return; var leftPointer = member; var rightPointer = member.NextMember; DRowMember linkedListHead = null; while (true) { if (rightPointer == null) break; //超出界限 if (rightPointer.X + rightPointer.Width > this.X + this.Width) { leftPointer.NextMember = null; rightPointer.PreMember = null; linkedListHead = rightPointer; LastMember = leftPointer; IsContinue = true; } leftPointer = rightPointer; rightPointer = rightPointer.NextMember; } if (linkedListHead == null) return; if (NextDocRow == null) { NextDocRow = OwnerDocument.CreateRow(); NextDocRow.WriteHead(linkedListHead); } else if (linkedListHead.GetTailMember().IsBreakTail) { NextDocRow = OwnerDocument.InsertRowBefore(NextDocRow); NextDocRow.WriteHead(linkedListHead); } else { NextDocRow.WriteHead(linkedListHead); } }
/// <summary> /// 在制定行前插入行 /// </summary> /// <param name="row"></param> /// <returns></returns> public virtual DDocRow InsertRowBefore(DDocRow row) { return null; }
public override void RecursiveChangeDocRow(DDocRow docRow) { OwnerDocRow = docRow; _firstMember.X = this.X + LeftMargin; _firstMember.Y = this.Y; _lastMember.Y = this.Y; if (NextMember == null) return; NextMember.RecursiveChangeDocRow(docRow); }
public static List<DMember> GetDataMember(DDocRow docRow) { List<DMember> members = null; _rowMapMember.TryGetValue(docRow, out members); return members; }
/// <summary> /// 将传入的成员链头与该行末成员进行连接,超出的 /// 尾部链自动向下一行遍历连接 /// </summary> public void WriteTail(DRowMember linkedListHead) { if (linkedListHead == null) return; linkedListHead.RecursiveChangeDocRow(this); linkedListHead.PreMember = this.LastMember; this.LastMember.NextMember = linkedListHead; //定义两个活动指针 var leftPointer = this.LastMember; var rightPointer = linkedListHead; DRowMember oLinkedListHeader = null; var isOutRange = false; while (true) { //此处断链子 if (GetRangeResult(rightPointer) == 1) { rightPointer.GetTailMember().IsBreakTail = leftPointer.IsBreakTail; leftPointer.IsBreakTail = false; leftPointer.NextMember = null; rightPointer.PreMember = null; oLinkedListHeader = rightPointer; IsContinue = true; isOutRange = true; break; } else if (GetRangeResult(rightPointer) == 0) { IsContinue = true; } else { IsContinue = false; } rightPointer.AfterChangeRow(); //断点属性传递 rightPointer.IsBreakTail = leftPointer.IsBreakTail; leftPointer.IsBreakTail = false; leftPointer = rightPointer; rightPointer = rightPointer.NextMember; if (rightPointer == null) break; } this.LastMember = leftPointer; //如果该行未越界则返回 if (!isOutRange) return; if (NextDocRow == null) { NextDocRow = OwnerDocument.CreateRow(); NextDocRow.WriteHead(oLinkedListHeader); } else if (oLinkedListHeader.GetTailMember().IsBreakTail) { NextDocRow = OwnerDocument.InsertRowBefore(NextDocRow); NextDocRow.WriteHead(oLinkedListHeader); } else { NextDocRow.WriteHead(oLinkedListHeader); } }
/// <summary> /// 将传入的成员链末尾与该行首成员进行连接,超出的 /// 尾部链自动向下一行遍历连接 /// </summary> public void WriteHead(DRowMember linkedListHead) { if (linkedListHead == null) return; linkedListHead.RecursiveChangeDocRow(this); linkedListHead.PreMember = null; var lastMember = linkedListHead.GetTailMember(); lastMember.NextMember = this.FirstMember; if (this.FirstMember != null) { this.FirstMember.PreMember = lastMember; } //定义两个活动指针 var leftPointer = lastMember; var rightPointer = this.FirstMember; DRowMember oLinkedListHeader = null; this.FirstMember = linkedListHead; var isOutRange = false; while (true) { leftPointer.AfterChangeRow(); if (rightPointer == null) break; //此处断链子 if (GetRangeResult(rightPointer) == 1) { if (Paragraph == RowParagraph.Right || Paragraph == RowParagraph.Middle) { rightPointer = GetOutRangeMember(); leftPointer = rightPointer.PreMember; } leftPointer.NextMember = null; rightPointer.PreMember = null; oLinkedListHeader = rightPointer; IsContinue = true; isOutRange = true; break; } else if (GetRangeResult(rightPointer) == 0) { IsContinue = true; } else { IsContinue = false; } leftPointer.IsBreakTail = false; leftPointer = rightPointer; rightPointer = rightPointer.NextMember; } this.LastMember = leftPointer.Equals(linkedListHead) ? null : leftPointer; //如果该行未越界则返回 if (!isOutRange) return; if (NextDocRow == null) { NextDocRow = OwnerDocument.CreateRow(); NextDocRow.WriteHead(oLinkedListHeader); } else if (oLinkedListHeader.GetTailMember().IsBreakTail) { NextDocRow = OwnerDocument.InsertRowBefore(NextDocRow); NextDocRow.WriteHead(oLinkedListHeader); } else { NextDocRow.WriteHead(oLinkedListHeader); } }
public override DDocRow CreateRow() { var row = new DDocRow() { OwnerDocument = this, IsHold = true, IsContinue = false }; CurrentRow = row; if (FirstRow == null) { FirstRow = row; row.Index = 1; ResetPosition(); return FirstRow; } if (LastRow == null) { row.PreDocRow = FirstRow; FirstRow.NextDocRow = row; } else { row.PreDocRow = LastRow; LastRow.NextDocRow = row; } row.Width = row.PreDocRow.Width; row.Height = EditorSetting.DefaultDocRowHeight; LastRow = row; return row; }
public override DDocRow CreateRow() { if (OwnerCell == null) return null; var row = new DDocRow() { OwnerDocument = this, IsHold = true, IsContinue = false }; CurrentRow = row; if (FirstRow == null) { FirstRow = row; row.Index = 1; row.X = OwnerCell.X + OwnerCell.PaddingLeft; row.Y = OwnerCell.Y + OwnerCell.PaddingTop; row.Height = OwnerCell.Height - OwnerCell.PaddingTop - OwnerCell.PaddingBottom; row.Width = OwnerCell.Width - OwnerCell.PaddingLeft - OwnerCell.PaddingRight; return FirstRow; } if (LastRow == null) { row.PreDocRow = FirstRow; FirstRow.NextDocRow = row; } else { row.PreDocRow = LastRow; LastRow.NextDocRow = row; } row.Width = row.PreDocRow.Width; row.Height = EditorSetting.DefaultDocRowHeight; LastRow = row; return row; }
public DDocRow InsertRowAfter(DDocRow row) { if (row == null) return null; var newDocRow = new DDocRow() { OwnerDocument = this, IsHold = true, IsContinue = false, Height = EditorSetting.DefaultDocRowHeight, Width = row.Width }; if (row.NextDocRow != null) { newDocRow.PreDocRow = row; newDocRow.NextDocRow = row.NextDocRow; row.NextDocRow.PreDocRow = newDocRow; row.NextDocRow = newDocRow; } else { newDocRow.PreDocRow = row; row.NextDocRow = newDocRow; LastRow = newDocRow; } return newDocRow; }
/// <summary> /// 移动行 /// </summary> private void MoveRow(DDocRow row, DPage currentPage) { if (row == null) return; //该行超出所在页面范围,则移至下一页 var rowPointer = row; var pagePointer = currentPage; var maxHeight = pagePointer.Y + pagePointer.Height - pagePointer.PaddingBottom; while (rowPointer != null) { //第一行肯定是页首行,所以不能更改页首行标志 if (!rowPointer.Equals(FirstRow)) { rowPointer.IsPageFirst = false; } //如果该行超出该页高度,则与下一页合并成为首行 if (rowPointer.Y >= maxHeight || rowPointer.Y + rowPointer.Height > maxHeight) { //下一页为空或者行的高度等于或超过页的高度,则创建新页 if (pagePointer.NextPage == null || rowPointer.Height >= pagePointer.Height) { var page = InsertPageAfter(pagePointer); rowPointer.IsPageFirst = true; page.PageBody.Data = rowPointer; page.Resize(); Context.AutoScrollPosition = new Point(0, row.Y + row.Height - Context.Height); Context.ForceShowCursor(); MoveRow(rowPointer, page); return; } //将指针指向下一页 pagePointer = pagePointer.NextPage; //将该行设置为下一页行首 rowPointer.IsPageFirst = true; pagePointer.PageBody.Data = rowPointer; pagePointer.Resize(); //行指针下移 rowPointer = rowPointer.NextDocRow; if (rowPointer == null) break; rowPointer.IsPageFirst = false; MoveRow(rowPointer, pagePointer); return; } var prePage = pagePointer.PrePage; //如果超出上一页则放置在当前页 if (prePage != null) { var maxHeight2 = prePage.Y + prePage.Height - prePage.PaddingBottom; if (rowPointer.Y >= maxHeight2 || rowPointer.Y + rowPointer.Height > maxHeight2) { if (rowPointer.Equals(pagePointer.PageBody.Data)) { rowPointer.IsPageFirst = true; } else if (rowPointer.PreDocRow != null && rowPointer.PreDocRow.Y + rowPointer.PreDocRow.Height <= maxHeight2) { rowPointer.IsPageFirst = true; pagePointer.PageBody.Data = rowPointer; pagePointer.Resize(); } } } //如果已经遍历到最后一行,对最后一行所在页之后的空页进行删除 if (rowPointer.NextDocRow == null) { var page = GetPage(rowPointer.X, rowPointer.Y); DeleteAfterAllPage(pagePointer.NextPage); } rowPointer = rowPointer.NextDocRow; } }
public void JoinRow(DDocRow fRow, DDocRow sRow, DDocRow tRow) { if (fRow == null || sRow == null || tRow == null) return; fRow.NextDocRow = sRow; sRow.PreDocRow = fRow; sRow.NextDocRow = tRow; tRow.PreDocRow = sRow; }
private void RemoveRow(DDocRow row) { if (row == null) return; var ownerDoc = row.OwnerDocument; if (row.Equals(ownerDoc.FirstRow)) { if (row.NextDocRow == null) { ownerDoc.FirstRow = null; return; } else if (row.NextDocRow.Equals(ownerDoc.LastRow)) { ownerDoc.FirstRow = row.NextDocRow; ownerDoc.LastRow = null; row.NextDocRow.PreDocRow = null; row.NextDocRow = null; return; } ownerDoc.FirstRow = row.NextDocRow; row.NextDocRow.PreDocRow = null; row.NextDocRow = null; } else if (row.Equals(ownerDoc.LastRow)) { if (row.PreDocRow.Equals(ownerDoc.FirstRow)) { row.PreDocRow.NextDocRow = null; row.PreDocRow = null; ownerDoc.LastRow = null; return; } ownerDoc.LastRow = row.PreDocRow; row.PreDocRow.NextDocRow = null; row.PreDocRow = null; } else { if (row.PreDocRow != null) row.PreDocRow.NextDocRow = row.NextDocRow; if (row.NextDocRow != null) row.NextDocRow.PreDocRow = row.PreDocRow; row.PreDocRow = null; row.NextDocRow = null; } }
private bool IsInRowRange(DDocRow row, int y) { return y >= row.Y && y < row.Y + row.Height; }
private void SelDelOfSingleRow(DDocRow row) { if (row.SelectedMembers.Count == row.MemberCount()) { if (row.Equals(FirstRow)) { row.FirstMember = null; row.LastMember = null; CurrentRow = row; CurrentRow.CurrentMember = null; } else { RemoveRow(row); CurrentRow = row.PreDocRow ?? FirstRow; CurrentRow.CurrentMember = CurrentRow.LastMember ?? CurrentRow.FirstMember; } } else { CurrentRow = row; if (row.SelectedMembers.Count == 0) return; var beginMember = row.SelectedMembers[0]; var endMember = row.SelectedMembers[row.SelectedMembers.Count - 1]; if (beginMember.PreMember != null) { beginMember.PreMember.NextMember = endMember.NextMember; if (endMember.NextMember != null) { endMember.NextMember.PreMember = beginMember.PreMember; } else { CurrentRow.LastMember = beginMember.PreMember.Equals(CurrentRow.FirstMember) ? null : beginMember.PreMember; } CurrentRow.CurrentMember = beginMember.PreMember; } else if (endMember.NextMember != null) { CurrentRow.FirstMember = endMember.NextMember; var tailMember = endMember.GetTailMember(); CurrentRow.LastMember = tailMember.Equals(endMember.NextMember) ? null : tailMember; CurrentRow.CurrentMember = null; endMember.NextMember.PreMember = null; } } }
private void SetFocus(DDocRow row) { if (row == null) return; CurrentRow = row; CurrentRow.CurrentMember = row.CurrentMember; }
public override DDocRow CreateRow() { var row = new DDocRow() { OwnerDocument = this, Height = EditorSetting.DefaultDocRowHeight, Width = EditorSetting.DefaultDocRowWidth }; CurrentRow = row; if (FirstRow == null) { FirstRow = row; row.Index = 1; row.IsPageFirst = true; //标记为真表示是某一分页的首行 CurrentPage.PageBody.Data = row; //将首行加入到分页中 CurrentPage.Resize(); return FirstRow; } if (LastRow == null) { row.PreDocRow = FirstRow; FirstRow.NextDocRow = row; } else { row.PreDocRow = LastRow; LastRow.NextDocRow = row; } LastRow = row; row.Paragraph = row.PreDocRow.Paragraph; return row; }
private static void ImportMember(XmlNodeList memberElements, DDocRow row) { foreach (XmlElement memberElement in memberElements) { switch (memberElement.Name) { case "textChar": var color = memberElement.GetAttribute("fontColor"); var fontColor = Color.Black; if (!string.IsNullOrEmpty(color)) { fontColor = System.Drawing.ColorTranslator.FromHtml(color); } var fontName = memberElement.GetAttribute("fontName"); var fontSize = Convert.ToSingle(memberElement.GetAttribute("fontSize")); var fontStyle = memberElement.GetAttribute("fontStyle"); var text = memberElement.InnerText; var singleTexts = text.ToCharArray(); foreach (var singleText in singleTexts) { var textChar = MDocument.CreateTextChar(Convert.ToString(singleText), fontName, fontSize, fontColor, GetFontStyle(fontStyle)); row.AddMember(textChar); } break; case "textInput": var textInput = new DTextInput(); row.AddMember(textInput.Xml2Object(memberElement, MDocument)); break; case "table": break; case "image": var content = memberElement.InnerText; var image = new DImage(ConvertToImage(content)); row.AddMember(image); break; case "checkBox": var checkBox = new DCheckBox { IsChecked = "True".Equals(memberElement.GetAttribute("isChecked")) ? true : false, Value = memberElement.InnerText }; row.AddMember(checkBox); break; case "comboBox": var comboBox = new DComboBox(); row.AddMember(comboBox.Xml2Object(memberElement, MDocument)); break; case "horizonLine": var hLine = new DHorizonLine { Width = Convert.ToInt32(memberElement.GetAttribute("width")), Height = Convert.ToInt32(memberElement.GetAttribute("height")) }; break; } } }
public DDocRow InsertRowAfter(DDocRow row) { if (row == null) return null; var newDocRow = new DDocRow() { OwnerDocument = this, Height = EditorSetting.DefaultDocRowHeight, Width = EditorSetting.DefaultDocRowWidth }; if (row.NextDocRow != null) { newDocRow.PreDocRow = row; newDocRow.NextDocRow = row.NextDocRow; row.NextDocRow.PreDocRow = newDocRow; row.NextDocRow = newDocRow; } else { newDocRow.PreDocRow = row; row.NextDocRow = newDocRow; LastRow = newDocRow; } newDocRow.Paragraph = newDocRow.PreDocRow.Paragraph; return newDocRow; }