AppendChild() публичный Метод

public AppendChild ( CssBox box ) : void
box CssBox
Результат void
Пример #1
0
        internal static LayoutFarm.HtmlBoxes.CssBox CreateCssBox(
            LayoutFarm.WebDom.IHtmlElement domE,
            LayoutFarm.HtmlBoxes.CssBox parentBox,
            LayoutFarm.Css.BoxSpec spec,
            LayoutFarm.HtmlBoxes.HtmlHost htmlhost)
        {


            //create cssbox 
            //test only!           
            var newspec = new BoxSpec();
            BoxSpec.InheritStyles(newspec, spec);
            newspec.BackgroundColor = Color.Blue;
            newspec.Width = new CssLength(50, CssUnitOrNames.Pixels);
            newspec.Height = new CssLength(50, CssUnitOrNames.Pixels);
            newspec.Position = CssPosition.Absolute;
            newspec.Freeze(); //freeze before use

            HtmlElement htmlElement = (HtmlElement)domE;
            var newBox = new CssBox(newspec, parentBox.RootGfx);
            newBox.SetController(domE);
            htmlElement.SetPrincipalBox(newBox);
            //auto set bc of the element

            parentBox.AppendChild(newBox);
            htmlhost.UpdateChildBoxes(htmlElement, true);
            //----------
            return newBox;
        }
Пример #2
0
        public static CssBox CreateTableColumnOrColumnGroup(CssBox parent,
            HtmlElement childElement, bool fixDisplayType, CssDisplay selectedCssDisplayType)
        {
            CssBox col = null;
            if (fixDisplayType)
            {
                col = new CssBox(childElement.Spec, parent.RootGfx, selectedCssDisplayType);
            }
            else
            {
                col = new CssBox(childElement.Spec, parent.RootGfx);
            }
            col.SetController(childElement);
            parent.AppendChild(col);
            string spanValue;
            int spanNum = 1;//default
            if (childElement.TryGetAttribute(WellknownName.Span, out spanValue))
            {
                if (!int.TryParse(spanValue, out spanNum))
                {
                    spanNum = 1;
                }
                if (spanNum < 0)
                {
                    spanNum = -spanNum;
                }
            }

            col.SetRowSpanAndColSpan(1, spanNum);
            return col;
        }
        public static CssBox CreateTableColumnOrColumnGroup(CssBox parent,
                                                            HtmlElement childElement, bool fixDisplayType, CssDisplay selectedCssDisplayType)
        {
            CssBox col = null;

            if (fixDisplayType)
            {
                col = new CssBox(childElement.Spec, parent.RootGfx, selectedCssDisplayType);
            }
            else
            {
                col = new CssBox(childElement.Spec, parent.RootGfx);
            }
            col.SetController(childElement);
            parent.AppendChild(col);
            string spanValue;
            int    spanNum = 1;//default

            if (childElement.TryGetAttribute(WellknownName.Span, out spanValue))
            {
                if (!int.TryParse(spanValue, out spanNum))
                {
                    spanNum = 1;
                }
                if (spanNum < 0)
                {
                    spanNum = -spanNum;
                }
            }

            col.SetRowSpanAndColSpan(1, spanNum);
            return(col);
        }
Пример #4
0
 public static CssBox CreateOtherPredefinedTableElement(CssBox parent,
     HtmlElement childElement, CssDisplay selectedCssDisplayType)
 {
     var newBox = new CssBox(childElement.Spec, parent.RootGfx, selectedCssDisplayType);
     newBox.SetController(childElement);
     parent.AppendChild(newBox);
     return newBox;
 }
        public static CssBox CreateOtherPredefinedTableElement(CssBox parent,
                                                               HtmlElement childElement, CssDisplay selectedCssDisplayType)
        {
            var newBox = new CssBox(childElement.Spec, parent.RootGfx, selectedCssDisplayType);

            newBox.SetController(childElement);
            parent.AppendChild(newBox);
            return(newBox);
        }
Пример #6
0
        //TODO: review here, fixed position can be reference sibling?
#if DEBUG
        ///// <summary>
        ///// ToString override.
        ///// </summary>
        ///// <returns></returns>
        //public override string ToString()
        //{
        //    var tag = HtmlElement != null ? string.Format("<{0}>", HtmlElement.Name) : "anon";

        //    if (IsBlock)
        //    {
        //        return string.Format("{0}{1} Block {2}, Children:{3}", ParentBox == null ? "Root: " : string.Empty, tag, FontSize, Boxes.Count);
        //    }
        //    else if (this.CssDisplay == CssDisplay.None)
        //    {
        //        return string.Format("{0}{1} None", ParentBox == null ? "Root: " : string.Empty, tag);
        //    }
        //    else
        //    {
        //        if (this.MayHasSomeTextContent)
        //        {
        //            return string.Format("{0}{1} {2}: {3}", ParentBox == null ? "Root: " : string.Empty, tag,
        //                this.CssDisplay.ToCssStringValue(), this.dbugCopyTextContent());
        //        }
        //        else
        //        {
        //            return string.Format("{0}{1} {2}: {3}", ParentBox == null ? "Root: " : string.Empty, tag,
        //                this.CssDisplay.ToCssStringValue(), "");
        //        }
        //    }
        //}
#endif


        //-----------------------------------------------------------------
        public static CssBox AddNewAnonInline(CssBox parent)
        {
            BoxSpec spec   = CssBox.UnsafeGetBoxSpec(parent);
            CssBox  newBox = new CssBox(spec.GetAnonVersion(), parent._rootgfx);

            parent.AppendChild(newBox);
            CssBox.ChangeDisplayType(newBox, Css.CssDisplay.Inline);
            return(newBox);
        }
Пример #7
0
        public override LayoutFarm.HtmlBoxes.CssBox CreateCssBox(
            DomElement domE,
            LayoutFarm.HtmlBoxes.CssBox parentBox,
            BoxSpec spec,
            HtmlHost host)
        {
            switch (domE.Name)
            {
            case "input":
            {
                var inputBox = CreateInputBox(domE, parentBox, spec, myHost.RootGfx, host);
                if (inputBox != null)
                {
                    return(inputBox);
                }
            }
            break;

            case "canvas":
            {
                //test only
                //TODO: review here
                var canvas     = new LayoutFarm.CustomWidgets.MiniAggCanvasBox(400, 400);
                var wrapperBox = CreateWrapper(
                    canvas,
                    canvas.GetPrimaryRenderElement(myHost.RootGfx),
                    spec, true);
                parentBox.AppendChild(wrapperBox);
                return(wrapperBox);
            }
            }

            //default unknown
            var simpleBox = new LayoutFarm.CustomWidgets.Box(100, 20);

            simpleBox.BackColor = PixelFarm.Drawing.Color.LightGray;
            var wrapperBox2 = CreateWrapper(
                simpleBox,
                simpleBox.GetPrimaryRenderElement(myHost.RootGfx),
                spec, false);

            parentBox.AppendChild(wrapperBox2);
            return(wrapperBox2);
        }
Пример #8
0
 public static CssBoxSvgRoot CreateSvgBox(CssBox parentBox,
     HtmlElement elementNode,
     Css.BoxSpec spec)
 {
     SvgFragment fragment = new SvgFragment();
     SvgRootEventPortal svgRootController = new SvgRootEventPortal(elementNode);
     CssBoxSvgRoot svgRoot = new CssBoxSvgRoot(
         elementNode.Spec,
         parentBox.RootGfx,
         fragment);
     svgRoot.SetController(svgRootController);
     svgRootController.SvgRoot = svgRoot;
     parentBox.AppendChild(svgRoot);
     CreateSvgBoxContent(fragment, elementNode);
     return svgRoot;
 }
        public static CssBox CreateTableCell(CssBox parent, HtmlElement childElement, bool fixDisplayType)
        {
            CssBox tableCell = null;

            if (fixDisplayType)
            {
                tableCell = new CssBox(childElement.Spec, parent.RootGfx, CssDisplay.TableCell);
            }
            else
            {
                tableCell = new CssBox(childElement.Spec, parent.RootGfx);
            }
            tableCell.SetController(childElement);
            parent.AppendChild(tableCell);
            //----------------------------------------------------------------------------------------------


            //----------------------------------------------------------------------------------------------
            //get rowspan and colspan here
            int    nRowSpan = 1;
            int    nColSpan = 1;
            string rowspan;

            if (childElement.TryGetAttribute(WellknownName.RowSpan, out rowspan))
            {
                if (!int.TryParse(rowspan, out nRowSpan))
                {
                    nRowSpan = 1;
                }
            }
            string colspan;

            if (childElement.TryGetAttribute(WellknownName.ColSpan, out colspan))
            {
                if (!int.TryParse(colspan, out nColSpan))
                {
                    nColSpan = 1;
                }
            }
            //----------------------------------------------------------
            tableCell.SetRowSpanAndColSpan(nRowSpan, nColSpan);
            return(tableCell);
        }
Пример #10
0
        public static CssBox CreateTableCell(CssBox parent, HtmlElement childElement, bool fixDisplayType)
        {
            CssBox tableCell = null;
            if (fixDisplayType)
            {
                tableCell = new CssBox(childElement.Spec, parent.RootGfx, CssDisplay.TableCell);
            }
            else
            {
                tableCell = new CssBox(childElement.Spec, parent.RootGfx);
            }
            tableCell.SetController(childElement);
            parent.AppendChild(tableCell);
            //----------------------------------------------------------------------------------------------


            //----------------------------------------------------------------------------------------------
            //get rowspan and colspan here 
            int nRowSpan = 1;
            int nColSpan = 1;
            string rowspan;
            if (childElement.TryGetAttribute(WellknownName.RowSpan, out rowspan))
            {
                if (!int.TryParse(rowspan, out nRowSpan))
                {
                    nRowSpan = 1;
                }
            }
            string colspan;
            if (childElement.TryGetAttribute(WellknownName.ColSpan, out colspan))
            {
                if (!int.TryParse(colspan, out nColSpan))
                {
                    nColSpan = 1;
                }
            }
            //---------------------------------------------------------- 
            tableCell.SetRowSpanAndColSpan(nRowSpan, nColSpan);
            return tableCell;
        }
Пример #11
0
        CssBox CreateImageBox(CssBox parent, HtmlElement childElement)
        {
            string      imgsrc;
            ImageBinder imgBinder = null;

            if (childElement.TryGetAttribute(WellknownName.Src, out imgsrc))
            {
                var clientImageBinder = new ClientImageBinder(imgsrc);
                imgBinder = clientImageBinder;
                //clientImageBinder.SetOwner(childElement);
            }
            else
            {
                var clientImageBinder = new ClientImageBinder(null);
                imgBinder = clientImageBinder;
                //clientImageBinder.SetOwner(childElement);
            }

            CssBoxImage boxImage = new CssBoxImage(childElement.Spec, parent.RootGfx, imgBinder);

            boxImage.SetController(childElement);
            parent.AppendChild(boxImage);
            return(boxImage);
        }
Пример #12
0
        CssBox CreateImageBox(CssBox parent, HtmlElement childElement)
        {
            string imgsrc;
            ImageBinder imgBinder = null;
            if (childElement.TryGetAttribute(WellknownName.Src, out imgsrc))
            {
                var clientImageBinder = new ClientImageBinder(imgsrc);
                imgBinder = clientImageBinder;
                clientImageBinder.SetOwner(childElement);
            }
            else
            {
                var clientImageBinder = new ClientImageBinder(null);
                imgBinder = clientImageBinder;
                clientImageBinder.SetOwner(childElement);
            }

            CssBoxImage boxImage = new CssBoxImage(childElement.Spec, parent.RootGfx, imgBinder);
            boxImage.SetController(childElement);
            parent.AppendChild(boxImage);
            return boxImage;
        }
Пример #13
0
        internal CssBox CreateBox(CssBox parentBox, HtmlElement childElement, bool fullmode)
        {
            //----------------------------------------- 
            //1. create new box
            //----------------------------------------- 
            //some box has predefined behaviour 
            CssBox newBox = null;
            switch (childElement.WellknownElementName)
            {
                case WellKnownDomNodeName.br:
                    //special treatment for br
                    newBox = new CssBox(childElement.Spec, parentBox.RootGfx);
                    newBox.SetController(childElement);
                    CssBox.SetAsBrBox(newBox);
                    CssBox.ChangeDisplayType(newBox, CssDisplay.Block);
                    parentBox.AppendChild(newBox);
                    childElement.SetPrincipalBox(newBox);
                    return newBox;
                case WellKnownDomNodeName.img:

                    //auto append newBox to parentBox
                    newBox = CreateImageBox(parentBox, childElement);
                    childElement.SetPrincipalBox(newBox);
                    return newBox;
                case WellKnownDomNodeName.hr:
                    newBox = new CssBoxHr(childElement.Spec, parentBox.RootGfx);
                    newBox.SetController(childElement);
                    parentBox.AppendChild(newBox);
                    childElement.SetPrincipalBox(newBox);
                    return newBox;
                //-----------------------------------------------------
                //TODO: simplify this ...
                //table-display elements, fix display type
                case WellKnownDomNodeName.td:
                case WellKnownDomNodeName.th:
                    newBox = TableBoxCreator.CreateTableCell(parentBox, childElement, true);
                    break;
                case WellKnownDomNodeName.col:
                    newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, true, CssDisplay.TableColumn);
                    break;
                case WellKnownDomNodeName.colgroup:
                    newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, true, CssDisplay.TableColumnGroup);
                    break;
                case WellKnownDomNodeName.tr:
                    newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableRow);
                    break;
                case WellKnownDomNodeName.tbody:
                    newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableRowGroup);
                    break;
                case WellKnownDomNodeName.table:
                    newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.Table);
                    break;
                case WellKnownDomNodeName.caption:
                    newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableCaption);
                    break;
                case WellKnownDomNodeName.thead:
                    newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableHeaderGroup);
                    break;
                case WellKnownDomNodeName.tfoot:
                    newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableFooterGroup);
                    break;
                //---------------------------------------------------
                case WellKnownDomNodeName.canvas:
                case WellKnownDomNodeName.input:

                    newBox = this.CreateCustomCssBox(parentBox, childElement, childElement.Spec);
                    if (newBox != null)
                    {
                        childElement.SetPrincipalBox(newBox);
                        return newBox;
                    }
                    goto default; //else goto default *** 
                //---------------------------------------------------
                case WellKnownDomNodeName.svg:
                    {
                        //1. create svg container node 
                        newBox = Svg.SvgCreator.CreateSvgBox(parentBox, childElement, childElement.Spec);
                        childElement.SetPrincipalBox(newBox);
                        return newBox;
                    }
                case WellKnownDomNodeName.NotAssign:
                case WellKnownDomNodeName.Unknown:
                    {
                        //custom tag
                        //check if this is tag is registered as custom element
                        //-----------------------------------------------
                        if (childElement.HasCustomPrincipalBoxGenerator)
                        {
                            var childbox = childElement.GetPrincipalBox(parentBox, this);
                            parentBox.AppendChild(childbox);
                            return childbox;
                        }

                        //----------------------------------------------- 
                        LayoutFarm.Composers.CreateCssBoxDelegate foundBoxGen;
                        if (((HtmlDocument)childElement.OwnerDocument).TryGetCustomBoxGenerator(childElement.Name, out foundBoxGen))
                        {
                            //create custom box 
                            newBox = foundBoxGen(childElement, parentBox, childElement.Spec, this);
                        }
                        if (newBox == null)
                        {
                            goto default;
                        }
                        else
                        {
                            childElement.SetPrincipalBox(newBox);
                            return newBox;
                        }
                    }
                default:
                    {
                        BoxSpec childSpec = childElement.Spec;
                        switch (childSpec.CssDisplay)
                        {
                            //not fixed display type
                            case CssDisplay.TableCell:
                                newBox = TableBoxCreator.CreateTableCell(parentBox, childElement, false);
                                break;
                            case CssDisplay.TableColumn:
                                newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, false, CssDisplay.TableColumn);
                                break;
                            case CssDisplay.TableColumnGroup:
                                newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, false, CssDisplay.TableColumnGroup);
                                break;
                            case CssDisplay.ListItem:
                                newBox = ListItemBoxCreator.CreateListItemBox(parentBox, childElement);
                                break;
                            default:
                                newBox = new CssBox(childSpec, parentBox.RootGfx);
                                newBox.SetController(childElement);
                                parentBox.AppendChild(newBox);
                                break;
                        }
                    }
                    break;
            }

            childElement.SetPrincipalBox(newBox);
            UpdateChildBoxes(childElement, fullmode);
            return newBox;
        }
Пример #14
0
        LayoutFarm.HtmlBoxes.CssBox CreateInputBox(DomElement domE,
                                                   LayoutFarm.HtmlBoxes.CssBox parentBox,
                                                   BoxSpec spec,
                                                   LayoutFarm.RootGraphic rootgfx, HtmlHost host)
        {
            var typeAttr = domE.FindAttribute("type");

            if (typeAttr != null)
            {
                switch (typeAttr.Value)
                {
                case "text":
                {
                    // user can specific width of textbox
                    //var textbox = new LayoutFarm.CustomWidgets.TextBox(100, 17, false);
                    var textbox    = new LayoutFarm.CustomWidgets.TextBoxContainer(100, 20, false);
                    var wrapperBox = CreateWrapper(
                        textbox,
                        textbox.GetPrimaryRenderElement(rootgfx),
                        spec, true);
                    //place holder support
                    var placeHolderAttr = domE.FindAttribute("placeholder");
                    if (placeHolderAttr != null)
                    {
                        textbox.PlaceHolderText = placeHolderAttr.Value;
                    }
                    parentBox.AppendChild(wrapperBox);
                    return(wrapperBox);
                }

                case "button":
                {
                    //use subdom? technique
                    //todo: review the technique here
                    var button       = new HtmlWidgets.Button(60, 30);
                    var ihtmlElement = domE as LayoutFarm.WebDom.IHtmlElement;
                    if (ihtmlElement != null)
                    {
                        button.Text = ihtmlElement.innerHTML;
                    }
                    else
                    {
                        button.Text = "";
                    }
                    button.Text = "testButton";
                    DomElement buttonDom    = button.GetPresentationDomNode((HtmlDocument)domE.OwnerDocument);
                    CssBox     buttonCssBox = host.CreateBox2(parentBox, (WebDom.Impl.HtmlElement)buttonDom, true);     // CreateCssBox(buttonDom, parentBox, spec, host);
                    //var ui = button.GetPrimaryUIElement(this.myHost);

                    //var wrapperBox = CreateWrapper(
                    //    button,
                    //    ui.GetPrimaryRenderElement(rootgfx),
                    //    spec, true);
                    //parentBox.AppendChild(wrapperBox);
                    //return wrapperBox;

                    parentBox.AppendChild(buttonCssBox);
                    return(buttonCssBox);
                }

                case "textbox":
                {
                    var    textbox    = new LayoutFarm.CustomWidgets.TextBox(100, 17, false);
                    CssBox wrapperBox = CreateWrapper(
                        textbox,
                        textbox.GetPrimaryRenderElement(rootgfx),
                        spec, true);
                    parentBox.AppendChild(wrapperBox);
                    return(wrapperBox);
                }

                case "radio":
                {
                    //tempfix -> just copy the Button code,
                    //TODO: review here, use proper radio button
                    var    box        = new LayoutFarm.CustomWidgets.Box(20, 20);
                    CssBox wrapperBox = CreateWrapper(
                        box,
                        box.GetPrimaryRenderElement(rootgfx),
                        spec, true);
                    parentBox.AppendChild(wrapperBox);
                    return(wrapperBox);
                }
                }
            }
            return(null);
        }
        public static CssBox CreateListItemBox(CssBox parent, HtmlElement childElement)
        {
            var spec   = childElement.Spec;
            var newBox = new CssBoxListItem(spec, parent.RootGfx);

            newBox.SetController(childElement);
            parent.AppendChild(newBox);
            if (spec.ListStyleType != CssListStyleType.None)
            {
                //create sub item collection
                var itemBulletBox = new CssBox(spec.GetAnonVersion(), parent.RootGfx);
                newBox.BulletBox = itemBulletBox;
                CssBox.UnsafeSetParent(itemBulletBox, newBox);
                CssBox.ChangeDisplayType(itemBulletBox, CssDisplay.Inline);
                //---------------------------------------------------------------
                //set content of bullet
                char[] text_content = null;
                switch (spec.ListStyleType)
                {
                case CssListStyleType.Disc:
                {
                    text_content = discItem;
                }
                break;

                case CssListStyleType.Circle:
                {
                    text_content = circleItem;
                }
                break;

                case CssListStyleType.Square:
                {
                    text_content = squareItem;
                }
                break;

                case CssListStyleType.Decimal:
                {
                    text_content = (GetIndexForList(newBox, childElement).ToString(CultureInfo.InvariantCulture) + ".").ToCharArray();
                }
                break;

                case CssListStyleType.DecimalLeadingZero:
                {
                    text_content = (GetIndexForList(newBox, childElement).ToString("00", CultureInfo.InvariantCulture) + ".").ToCharArray();
                }
                break;

                default:
                {
                    text_content = (BulletNumberFormatter.ConvertToAlphaNumber(GetIndexForList(newBox, childElement), spec.ListStyleType) + ".").ToCharArray();
                }
                break;
                }
                //---------------------------------------------------------------
                CssBox.UnsafeSetTextBuffer(itemBulletBox, text_content);
                List <CssRun> runlist = new List <CssRun>();
                bool          hasSomeCharacter;
                splitter.ParseWordContent(text_content, spec, itemBulletBox.IsBlock, runlist, out hasSomeCharacter);
                RunListHelper.AddRunList(itemBulletBox, spec, runlist, text_content, false);
            }
            return(newBox);
        }
Пример #16
0
        ///// <summary>
        ///// ToString override.
        ///// </summary>
        ///// <returns></returns>
        //public override string ToString()
        //{
        //    var tag = HtmlElement != null ? string.Format("<{0}>", HtmlElement.Name) : "anon";

        //    if (IsBlock)
        //    {
        //        return string.Format("{0}{1} Block {2}, Children:{3}", ParentBox == null ? "Root: " : string.Empty, tag, FontSize, Boxes.Count);
        //    }
        //    else if (this.CssDisplay == CssDisplay.None)
        //    {
        //        return string.Format("{0}{1} None", ParentBox == null ? "Root: " : string.Empty, tag);
        //    }
        //    else
        //    {
        //        if (this.MayHasSomeTextContent)
        //        {
        //            return string.Format("{0}{1} {2}: {3}", ParentBox == null ? "Root: " : string.Empty, tag,
        //                this.CssDisplay.ToCssStringValue(), this.dbugCopyTextContent());
        //        }
        //        else
        //        {
        //            return string.Format("{0}{1} {2}: {3}", ParentBox == null ? "Root: " : string.Empty, tag,
        //                this.CssDisplay.ToCssStringValue(), "");
        //        }
        //    }
        //}
#endif


        //-----------------------------------------------------------------
        public static CssBox AddNewAnonInline(CssBox parent)
        {
            var spec = CssBox.UnsafeGetBoxSpec(parent);
            var newBox = new CssBox(spec.GetAnonVersion(), parent.rootgfx);
            parent.AppendChild(newBox);
            CssBox.ChangeDisplayType(newBox, Css.CssDisplay.Inline);
            return newBox;
        }
Пример #17
0
 public static CssBox CreateListItemBox(CssBox parent, HtmlElement childElement)
 {
     var spec = childElement.Spec;
     var newBox = new CssBoxListItem(spec, parent.RootGfx);
     newBox.SetController(childElement);
     parent.AppendChild(newBox);
     if (spec.ListStyleType != CssListStyleType.None)
     {
         //create sub item collection 
         var itemBulletBox = new CssBox(spec.GetAnonVersion(), parent.RootGfx);
         newBox.BulletBox = itemBulletBox;
         CssBox.UnsafeSetParent(itemBulletBox, newBox);
         CssBox.ChangeDisplayType(itemBulletBox, CssDisplay.Inline);
         //---------------------------------------------------------------
         //set content of bullet 
         char[] text_content = null;
         switch (spec.ListStyleType)
         {
             case CssListStyleType.Disc:
                 {
                     text_content = discItem;
                 }
                 break;
             case CssListStyleType.Circle:
                 {
                     text_content = circleItem;
                 }
                 break;
             case CssListStyleType.Square:
                 {
                     text_content = squareItem;
                 }
                 break;
             case CssListStyleType.Decimal:
                 {
                     text_content = (GetIndexForList(newBox, childElement).ToString(CultureInfo.InvariantCulture) + ".").ToCharArray();
                 }
                 break;
             case CssListStyleType.DecimalLeadingZero:
                 {
                     text_content = (GetIndexForList(newBox, childElement).ToString("00", CultureInfo.InvariantCulture) + ".").ToCharArray();
                 }
                 break;
             default:
                 {
                     text_content = (BulletNumberFormatter.ConvertToAlphaNumber(GetIndexForList(newBox, childElement), spec.ListStyleType) + ".").ToCharArray();
                 }
                 break;
         }
         //--------------------------------------------------------------- 
         CssBox.UnsafeSetTextBuffer(itemBulletBox, text_content);
         List<CssRun> runlist = new List<CssRun>();
         bool hasSomeCharacter;
         splitter.ParseWordContent(text_content, spec, itemBulletBox.IsBlock, runlist, out hasSomeCharacter);
         RunListHelper.AddRunList(itemBulletBox, spec, runlist, text_content, false);
     }
     return newBox;
 }
Пример #18
0
        /// update some or generate all cssbox
        /// </summary>
        /// <param name="parentElement"></param>
        /// <param name="fullmode">update all nodes (true) or somenode (false)</param>
        internal void UpdateChildBoxes(HtmlElement parentElement, bool fullmode)
        {
            //recursive ***
            //first just generate into primary pricipal box
            //layout process  will correct it later

            switch (parentElement.ChildrenCount)
            {
            case 0: { } break;

            case 1:
            {
                CssBox hostBox = HtmlElement.InternalGetPrincipalBox(parentElement);
                //only one child -- easy
                DomNode child  = parentElement.GetChildNode(0);
                int     newBox = 0;
                switch (child.NodeType)
                {
                case HtmlNodeType.TextNode:
                {
                    HtmlTextNode singleTextNode = (HtmlTextNode)child;
                    RunListHelper.AddRunList(hostBox, parentElement.Spec, singleTextNode);
                }
                break;

                case HtmlNodeType.ShortElement:
                case HtmlNodeType.OpenElement:
                {
                    HtmlElement childElement = (HtmlElement)child;
                    var         spec         = childElement.Spec;
                    if (spec.CssDisplay == CssDisplay.None)
                    {
                        return;
                    }

                    newBox++;
                    //--------------------------------------------------
                    if (fullmode)
                    {
                        CssBox newbox = CreateBox(hostBox, childElement, fullmode);
                        childElement.SetPrincipalBox(newbox);
                    }
                    else
                    {
                        CssBox existing = HtmlElement.InternalGetPrincipalBox(childElement);
                        if (existing == null)
                        {
                            CssBox box = CreateBox(hostBox, childElement, fullmode);
                            childElement.SetPrincipalBox(box);
                        }
                        else
                        {
                            //just insert
                            hostBox.AppendChild(existing);
                            if (!childElement.SkipPrincipalBoxEvalulation)
                            {
                                existing.Clear();
                                UpdateChildBoxes(childElement, fullmode);
                                childElement.SkipPrincipalBoxEvalulation = true;
                            }
                        }
                    }
                }
                break;
                }
            }
            break;

            default:
            {
                CssBox        hostBox    = HtmlElement.InternalGetPrincipalBox(parentElement);
                CssWhiteSpace ws         = parentElement.Spec.WhiteSpace;
                int           childCount = parentElement.ChildrenCount;
                int           newBox     = 0;
                for (int i = 0; i < childCount; ++i)
                {
                    var childNode = parentElement.GetChildNode(i);
                    switch (childNode.NodeType)
                    {
                    case HtmlNodeType.TextNode:
                    {
                        HtmlTextNode textNode = (HtmlTextNode)childNode;
                        switch (ws)
                        {
                        case CssWhiteSpace.Pre:
                        case CssWhiteSpace.PreWrap:
                        {
                            RunListHelper.AddRunList(
                                CssBox.AddNewAnonInline(hostBox),
                                parentElement.Spec, textNode);
                        }
                        break;

                        case CssWhiteSpace.PreLine:
                        {
                            if (newBox == 0 && textNode.IsWhiteSpace)
                            {
                                continue;                        //skip
                            }

                            RunListHelper.AddRunList(
                                CssBox.AddNewAnonInline(hostBox),
                                parentElement.Spec, textNode);
                        }
                        break;

                        default:
                        {
                            if (textNode.IsWhiteSpace)
                            {
                                continue;                        //skip
                            }
                            RunListHelper.AddRunList(
                                CssBox.AddNewAnonInline(hostBox),
                                parentElement.Spec, textNode);
                        }
                        break;
                        }

                        newBox++;
                    }
                    break;

                    case HtmlNodeType.ShortElement:
                    case HtmlNodeType.OpenElement:
                    {
                        HtmlElement childElement = (HtmlElement)childNode;
                        var         spec         = childElement.Spec;
                        if (spec.CssDisplay == CssDisplay.None)
                        {
                            continue;
                        }

                        if (fullmode)
                        {
                            CssBox box = CreateBox(hostBox, childElement, fullmode);
                        }
                        else
                        {
                            CssBox existingCssBox = HtmlElement.InternalGetPrincipalBox(childElement);
                            if (existingCssBox == null)
                            {
                                CssBox box = CreateBox(hostBox, childElement, fullmode);
                            }
                            else
                            {
                                //just insert
                                hostBox.AppendChild(existingCssBox);
                                if (!childElement.SkipPrincipalBoxEvalulation)
                                {
                                    existingCssBox.Clear();
                                    UpdateChildBoxes(childElement, fullmode);
                                    childElement.SkipPrincipalBoxEvalulation = true;
                                }
                            }
                        }
                        newBox++;
                    }
                    break;

                    default:
                    {
                    }
                    break;
                    }
                }
            }
            break;
            }
            //----------------------------------
            //summary formatting context
            //that will be used on layout process
            //----------------------------------
        }
Пример #19
0
        internal CssBox CreateBox(CssBox parentBox, HtmlElement childElement, bool fullmode)
        {
            //-----------------------------------------
            //1. create new box
            //-----------------------------------------
            //some box has predefined behaviour
            CssBox newBox = null;

            switch (childElement.WellknownElementName)
            {
            case WellKnownDomNodeName.br:
                //special treatment for br
                newBox = new CssBox(childElement.Spec, parentBox.RootGfx);
                newBox.SetController(childElement);
                CssBox.SetAsBrBox(newBox);
                CssBox.ChangeDisplayType(newBox, CssDisplay.Block);
                parentBox.AppendChild(newBox);
                childElement.SetPrincipalBox(newBox);
                return(newBox);

            case WellKnownDomNodeName.img:

                //auto append newBox to parentBox
                newBox = CreateImageBox(parentBox, childElement);
                childElement.SetPrincipalBox(newBox);
                return(newBox);

            case WellKnownDomNodeName.hr:
                newBox = new CssBoxHr(childElement.Spec, parentBox.RootGfx);
                newBox.SetController(childElement);
                parentBox.AppendChild(newBox);
                childElement.SetPrincipalBox(newBox);
                return(newBox);

            //-----------------------------------------------------
            //TODO: simplify this ...
            //table-display elements, fix display type
            case WellKnownDomNodeName.td:
            case WellKnownDomNodeName.th:
                newBox = TableBoxCreator.CreateTableCell(parentBox, childElement, true);
                break;

            case WellKnownDomNodeName.col:
                newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, true, CssDisplay.TableColumn);
                break;

            case WellKnownDomNodeName.colgroup:
                newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, true, CssDisplay.TableColumnGroup);
                break;

            case WellKnownDomNodeName.tr:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableRow);
                break;

            case WellKnownDomNodeName.tbody:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableRowGroup);
                break;

            case WellKnownDomNodeName.table:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.Table);
                break;

            case WellKnownDomNodeName.caption:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableCaption);
                break;

            case WellKnownDomNodeName.thead:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableHeaderGroup);
                break;

            case WellKnownDomNodeName.tfoot:
                newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableFooterGroup);
                break;

            //---------------------------------------------------
            case WellKnownDomNodeName.canvas:
            case WellKnownDomNodeName.input:

                newBox = this.CreateCustomCssBox(parentBox, childElement, childElement.Spec);
                if (newBox != null)
                {
                    childElement.SetPrincipalBox(newBox);
                    return(newBox);
                }
                goto default;     //else goto default ***

            //---------------------------------------------------
            case WellKnownDomNodeName.svg:
            {
                //1. create svg container node
                newBox = _svgCreator.CreateSvgBox(parentBox, childElement, childElement.Spec);
                childElement.SetPrincipalBox(newBox);
                return(newBox);
            }

            case WellKnownDomNodeName.NotAssign:
            case WellKnownDomNodeName.Unknown:
            {
                //custom tag
                //check if this is tag is registered as custom element
                //-----------------------------------------------
                if (childElement.HasCustomPrincipalBoxGenerator)
                {
                    var childbox = childElement.GetPrincipalBox(parentBox, this);
                    parentBox.AppendChild(childbox);
                    return(childbox);
                }

                //-----------------------------------------------
                LayoutFarm.Composers.CreateCssBoxDelegate foundBoxGen;
                if (((HtmlDocument)childElement.OwnerDocument).TryGetCustomBoxGenerator(childElement.Name, out foundBoxGen))
                {
                    //create custom box
                    newBox = foundBoxGen(childElement, parentBox, childElement.Spec, this);
                }
                if (newBox == null)
                {
                    goto default;
                }
                else
                {
                    childElement.SetPrincipalBox(newBox);
                    return(newBox);
                }
            }

            default:
            {
                BoxSpec childSpec = childElement.Spec;
                switch (childSpec.CssDisplay)
                {
                //not fixed display type
                case CssDisplay.TableCell:
                    newBox = TableBoxCreator.CreateTableCell(parentBox, childElement, false);
                    break;

                case CssDisplay.TableColumn:
                    newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, false, CssDisplay.TableColumn);
                    break;

                case CssDisplay.TableColumnGroup:
                    newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, false, CssDisplay.TableColumnGroup);
                    break;

                case CssDisplay.ListItem:
                    newBox = ListItemBoxCreator.CreateListItemBox(parentBox, childElement);
                    break;

                default:
                    newBox = new CssBox(childSpec, parentBox.RootGfx);
                    newBox.SetController(childElement);
                    parentBox.AppendChild(newBox);
                    break;
                }
            }
            break;
            }

            childElement.SetPrincipalBox(newBox);
            UpdateChildBoxes(childElement, fullmode);
            return(newBox);
        }