Beispiel #1
0
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintElementSection
            {
                Margin  = BuildHelper.DefaultMargin,
                Padding = BuildHelper.DefaultPadding
            };

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyBlockProperties(element, elementMetadata);

            // Генерация содержимого элемента

            var contentContext = CreateContentContext(element, buildContext);
            var blocks         = buildContext.ElementBuilder.BuildElements(contentContext, elementMetadata.Blocks);

            if (blocks != null)
            {
                foreach (var block in blocks)
                {
                    element.Blocks.Add(block);
                }
            }

            BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.PostApplyTextProperties(element, elementMetadata);

            return(element);
        }
Beispiel #2
0
        public void ShouldBuildBlocks()
        {
            // Given

            dynamic block1 = new DynamicWrapper();

            block1.Paragraph = new DynamicWrapper();

            dynamic block2 = new DynamicWrapper();

            block2.Paragraph = new DynamicWrapper();

            dynamic elementMetadata = new DynamicWrapper();

            elementMetadata.Blocks = new[] { block1, block2 };

            // When
            PrintElementSection element = BuildTestHelper.BuildSection(elementMetadata);

            // Then
            Assert.IsNotNull(element);
            Assert.IsNotNull(element.Blocks);
            Assert.AreEqual(2, element.Blocks.Count);
            Assert.IsInstanceOf <PrintElementParagraph>(element.Blocks.First());
            Assert.IsInstanceOf <PrintElementParagraph>(element.Blocks.Last());
        }
Beispiel #3
0
        private static PrintElementBuildContext CreateContentContext(PrintElementSection element, PrintElementBuildContext buildContext)
        {
            var contentWidth = (element.Border != null)
                        ? BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, element.Border.Thickness)
                        : BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding);

            return(buildContext.Create(contentWidth));
        }
Beispiel #4
0
        public void ShouldBuildList()
        {
            // Given
            var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext();
            var element = new PrintElementList();
            var result  = new TextWriterWrapper();

            var item1 = new PrintElementRun {
                Text = "Item1"
            };
            var item2 = new PrintElementRun {
                Text = "Item2"
            };
            var item3 = new PrintElementRun {
                Text = "Item3"
            };

            var par1 = new PrintElementParagraph();
            var par2 = new PrintElementParagraph();
            var par3 = new PrintElementParagraph();

            par1.Inlines.Add(item1);
            par2.Inlines.Add(item2);
            par3.Inlines.Add(item3);

            var section1 = new PrintElementSection();
            var section2 = new PrintElementSection();
            var section3 = new PrintElementSection();

            section1.Blocks.Add(par1);
            section2.Blocks.Add(par2);
            section3.Blocks.Add(par3);

            element.Items.Add(section1);
            element.Items.Add(section2);
            element.Items.Add(section3);

            element.MarkerStyle = PrintElementListMarkerStyle.LowerLatin;
            element.StartIndex  = 24;

            // When
            context.Build(element, result.Writer);

            // Then
            Assert.AreEqual(Resources.ResultTestShouldBuildList, result.GetText());
        }
        public void ShouldBuildSectioWithProperties()
        {
            //Given
            var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext();
            var element = new PrintElementSection();
            var result  = new TextWriterWrapper();

            var run = new PrintElementRun();

            run.Text = "Section & Margin & Padding & Border & Background";

            var par = new PrintElementParagraph();

            par.Inlines.Add(run);
            par.TextAlignment = PrintElementTextAlignment.Center;

            var section = new PrintElementSection();

            section.Blocks.Add(par);
            section.Border = new PrintElementBorder
            {
                Color     = "blue",
                Thickness = new PrintElementThickness(5)
            };
            section.Margin     = new PrintElementThickness(20);
            section.Padding    = new PrintElementThickness(20);
            section.Background = "yellow";

            element.Blocks.Add(section);
            element.Border = new PrintElementBorder
            {
                Color     = PrintElementColors.Red,
                Thickness = new PrintElementThickness(5)
            };
            element.Margin     = new PrintElementThickness(20);
            element.Padding    = new PrintElementThickness(20);
            element.Background = PrintElementColors.Green;

            //When
            context.Build(element, result.Writer);

            //Then
            Assert.AreEqual(Resources.ResultTestShouldBuildSectioWithProperties, result.GetText());
        }
Beispiel #6
0
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintElementList
            {
                Margin      = BuildHelper.DefaultMargin,
                Padding     = BuildHelper.DefaultPadding,
                MarkerStyle = PrintElementListMarkerStyle.None
            };

            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyBlockProperties(element, elementMetadata);

            ApplyStartIndex(element, elementMetadata.StartIndex);
            ApplyMarkerStyle(element, elementMetadata.MarkerStyle);
            MarkerOffsetStyle(element, elementMetadata.MarkerOffsetSize, elementMetadata.MarkerOffsetSizeUnit);

            var itemContext = CreateItemContext(element, buildContext);

            // Генерация явно объявленных элементов списка

            var staticItems = buildContext.ElementBuilder.BuildElements(itemContext, elementMetadata.Items);

            if (staticItems != null)
            {
                foreach (var staticItem in staticItems)
                {
                    var listItem = new PrintElementSection();
                    listItem.Blocks.Add(staticItem);
                    element.Items.Add(listItem);
                }
            }

            // Генерация элементов списка по данным источника

            var listItemTemplate = elementMetadata.ItemTemplate;
            var listSource       = buildContext.ElementSourceValue;

            if (listItemTemplate != null)
            {
                if (ConvertHelper.ObjectIsCollection(listSource))
                {
                    foreach (var itemSource in (IEnumerable)listSource)
                    {
                        itemContext.ElementSourceValue = itemSource;

                        var dynamicItem = buildContext.ElementBuilder.BuildElement(itemContext, listItemTemplate);

                        if (dynamicItem is PrintElementBlock)
                        {
                            var listItem = new PrintElementSection();
                            listItem.Blocks.Add(dynamicItem);
                            element.Items.Add(listItem);
                        }
                    }
                }
                else if (buildContext.IsDesignMode)
                {
                    // Отображение шаблона элемента в дизайнере

                    itemContext.ElementSourceValue = null;

                    var dynamicItem = buildContext.ElementBuilder.BuildElement(itemContext, listItemTemplate);

                    if (dynamicItem is PrintElementBlock)
                    {
                        var listItem = new PrintElementSection();
                        listItem.Blocks.Add(dynamicItem);
                        element.Items.Add(listItem);
                    }
                }
            }

            BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.PostApplyTextProperties(element, elementMetadata);

            return(element);
        }