Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
 private void AddSelectedRow(DDocRow row)
 {
     if (SelectedRows.Contains(row)) return;
     row.IsSelected = true;
     SelectedRows.Add(row);
 }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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;
        }
Ejemplo n.º 8
0
        /// <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;
            }
        }
Ejemplo n.º 9
0
 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;
 }
Ejemplo n.º 10
0
 public void CutRow(DDocRow fRow, DDocRow sRow)
 {
     fRow.NextDocRow = null;
     sRow.PreDocRow = null;
 }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
 /// <summary>
 /// 递归改变链表成员所属行为指定行
 /// </summary>
 /// <param name="docRow"></param>
 public virtual void RecursiveChangeDocRow(DDocRow docRow)
 {
     OwnerDocRow = docRow;
     if (NextMember == null) return;
     NextMember.RecursiveChangeDocRow(docRow);
 }
Ejemplo n.º 13
0
        /// <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);
            }
        }
Ejemplo n.º 14
0
 /// <summary>
 /// 在制定行前插入行
 /// </summary>
 /// <param name="row"></param>
 /// <returns></returns>
 public virtual DDocRow InsertRowBefore(DDocRow row)
 {
     return null;
 }
Ejemplo n.º 15
0
 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);
 }
Ejemplo n.º 16
0
 public static List<DMember> GetDataMember(DDocRow docRow)
 {
     List<DMember> members = null;
     _rowMapMember.TryGetValue(docRow, out members);
     return members;
 }
Ejemplo n.º 17
0
        /// <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);
            }
        }
Ejemplo n.º 18
0
        /// <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);
            }
        }
Ejemplo n.º 19
0
        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;
        }
Ejemplo n.º 20
0
        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;
        }
Ejemplo n.º 21
0
        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;
        }
Ejemplo n.º 22
0
        /// <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;
            }
        }
Ejemplo n.º 23
0
 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;
 }
Ejemplo n.º 24
0
 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;
     }
 }
Ejemplo n.º 25
0
 private bool IsInRowRange(DDocRow row, int y)
 {
     return y >= row.Y && y < row.Y + row.Height;
 }
Ejemplo n.º 26
0
 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;
         }
     }
 }
Ejemplo n.º 27
0
 private void SetFocus(DDocRow row)
 {
     if (row == null) return;
     CurrentRow = row;
     CurrentRow.CurrentMember = row.CurrentMember;
 }
Ejemplo n.º 28
0
        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;
        }
Ejemplo n.º 29
0
        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;
                }
            }
        }
Ejemplo n.º 30
0
        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;
        }