Beispiel #1
0
        /// <summary>
        /// Converts Flowchart.NET table into SVG
        /// </summary>
        /// <param name="newTable">Table reference</param>
        /// <returns>TRUE if successfull otherwise FALSE</returns>
        private bool CreateTable(MindFusion.FlowChartX.Table newTable)
        {
            bool      bOk = false;
            float     fX = 0, fY = 0, fW = 0, fH = 0, fLine = 0;
            long      lLine        = 0;
            XmlNode   last_node    = null;
            ArrayList spannedCells = new ArrayList();

            try
            {
                fX    = newTable.BoundingRect.X;
                fY    = newTable.BoundingRect.Y;
                fW    = newTable.BoundingRect.Width;
                fH    = newTable.BoundingRect.Height;
                fLine = newTable.Pen.Width;

                lLine = Unit2Pix(fLine);
                if (lLine == 0)
                {
                    lLine = 1;
                }


                last_node = sMan.AddRect(String.Format("{0}px", Unit2Pix(fX)),
                                         String.Format("{0}px", Unit2Pix(fY)),
                                         String.Format("{0}px", Unit2Pix(fW)),
                                         String.Format("{0}px", Unit2Pix(newTable.CaptionHeight)),
                                         String.Format("{0}px", lLine),
                                         newTable.FillColor,
                                         newTable.FrameColor,
                                         null,
                                         null,
                                         newTable.Image);

                sMan.AddGradient(last_node, newTable.Brush);

                sMan.AddText(null, newTable.Caption,
                             newTable.Font,
                             new RectangleF(fX, fY, fW, newTable.CaptionHeight),
                             newTable.CaptionColor, pChart.TextFormat, newTable.EnableStyledText);


                last_node = sMan.AddRect(String.Format("{0}px", Unit2Pix(fX)),
                                         String.Format("{0}px", Unit2Pix(fY + newTable.CaptionHeight)),
                                         String.Format("{0}px", Unit2Pix(fW)),
                                         String.Format("{0}px", Unit2Pix(fH - newTable.CaptionHeight)),
                                         String.Format("{0}px", lLine),
                                         newTable.FillColor,
                                         newTable.FrameColor,
                                         null,
                                         null,
                                         newTable.Image);

                sMan.AddGradient(last_node, newTable.Brush);

                fW = 0;
                fH = 0;
                int   RowCount = newTable.CurrScrollRow, ColCount = 0, AutoColls = 0;
                float fCellW = 0, fCellH = 0, fCellX = 0, fCellY = 0, rh = 0, fStepW = 0, fSumW = 0;
                bool  CellIsSpanned = false;
                fCellX = fX;
                fCellY = fY + newTable.CaptionHeight;

                AutoColls = 0;
                fSumW     = 0;
                foreach (Table.Column col in newTable.Columns)
                {
                    if (col.ColumnStyle == MindFusion.FlowChartX.ColumnStyle.AutoWidth)
                    {
                        AutoColls++;
                    }
                    else
                    {
                        fSumW += col.Width;
                    }
                }

                while (RowCount < newTable.Rows.Count)
                {
                    if (RowCount != newTable.CurrScrollRow)
                    {
                        rh = newTable.Rows[RowCount - 1].Height;
                    }
                    else
                    {
                        rh = 0;
                    }

                    fCellY += rh;
                    if (fCellY > newTable.BoundingRect.Bottom - rh)
                    {
                        break;
                    }

                    while (ColCount < newTable.Columns.Count)
                    {
                        if (ColCount != 0)
                        {
                            fCellX += newTable.Columns[ColCount - 1].Width;
                        }

                        Table.Cell cell = newTable[ColCount, RowCount];

                        if (!spannedCells.Contains(cell))
                        {
                            fCellH = 0;
                            for (int i = RowCount; i < RowCount + cell.RowSpan; i++)
                            {
                                fCellH += newTable.Rows[i].Height;
                                fCellW  = 0;
                                bool bPass = true;
                                for (int j = ColCount; j < ColCount + cell.ColumnSpan; j++)
                                {
                                    if ((newTable.Columns[ColCount].ColumnStyle == MindFusion.FlowChartX.ColumnStyle.AutoWidth) && bPass)
                                    {
                                        fStepW = (newTable.BoundingRect.Width - fSumW) / AutoColls;
                                        bPass  = false;
                                    }
                                    else
                                    {
                                        fStepW = newTable.Columns[j].Width;
                                    }

                                    fCellW += fStepW;
                                    spannedCells.Add(newTable[j, i]);
                                    //Trace.WriteLine(String.Format("Pos ({0}, {1} ) Spanned ({2},{3})", RowCount, ColCount, i,j));
                                }
                            }


                            if (AutoColls == 0)
                            {
                                if (ColCount == (newTable.Columns.Count - 1))
                                {
                                    fCellW += (newTable.BoundingRect.Width - fSumW);
                                }
                                //fCellW = newTable.BoundingRect.Right - fCellX + ( cell.Text == "" ? 0 : 15) ;
                            }

                            RectangleF cellRect = new RectangleF(fCellX,
                                                                 fCellY,
                                                                 fCellW,
                                                                 fCellH);



                            CellIsSpanned = ((cell.ColumnSpan > 1) || (cell.RowSpan > 1));
                            sMan.AddText(CellIsSpanned ? null : newTable, cell.Text,
                                         newTable.Font,
                                         cellRect,
                                         newTable.TextColor, cell.TextFormat, newTable.EnableStyledText);


                            sMan.AddRect(Unit2PixStr(cellRect.X), Unit2PixStr(cellRect.Y), Unit2PixStr(cellRect.Width), Unit2PixStr(cellRect.Height), "1px", Color.Transparent, Color.Transparent, null, null, cell.Image, newTable.FillColor, cell.ImageAlign, cellRect);
                            if (newTable.CellFrameStyle != CellFrameStyle.None)
                            {
                                sMan.AddRect(Unit2PixStr(cellRect.X), Unit2PixStr(cellRect.Y), Unit2PixStr(cellRect.Width), Unit2PixStr(cellRect.Height), "1px", Color.Transparent, newTable.FrameColor);
                            }
                        }
                        ColCount++;
                    }

                    fCellX   = fX;
                    ColCount = 0;
                    RowCount++;
                }


                bOk = true;
            }
            catch (Exception ex)
            {
                Trace.WriteLine(String.Format("{0} error {1}\n", "CreateTable", ex.Message));
                bOk = false;
            }

            return(bOk);
        }