private IEnumerable<UIElement> BuildChildUIList(IEnumerable<IDomObject> objects)
{
List<UIElement> results = new List<UIElement>();
foreach (var item in objects)
{
SnuDomCategoryVisitor categoryVisitor = new SnuDomCategoryVisitor();
if (item is TableColumn)
{
foreach (var contents in ((TableColumn)item).Contents)
{
contents.Accept(categoryVisitor);
}
}
else
{
item.Accept(categoryVisitor);
}
var column = item as TableColumn;
IDomObject columnFirstContent = null;
if (categoryVisitor.Category == MarkdownCategory.PlainText)
{
var plainTextVisitor = new SnuDomPlainTextVisitor();
//this might be a pp
if (column != null)
{
foreach (var contents in column.Contents)
{
contents.Accept(plainTextVisitor);
}
}
else if(item is SnuDomWP8.Paragraph)
{
item.Accept(plainTextVisitor);
}
results.Add(new TextBlock { TextWrapping = System.Windows.TextWrapping.Wrap, Text = plainTextVisitor.Result, Margin = new Thickness(4, 6, 4, 6) });
}
else if (column != null && ((TableColumn)item).Contents.Count() == 1 && (columnFirstContent = ((TableColumn)item).Contents.FirstOrDefault()) != null &&
(columnFirstContent is Text))
{
if (columnFirstContent is Link)
{
var plainTextVisitor = new SnuDomPlainTextVisitor();
var lnk = columnFirstContent as Link;
var firstContent = lnk.Display.FirstOrDefault();
if(firstContent != null)
firstContent.Accept(plainTextVisitor);
results.Add(new MarkdownButton(lnk.Url, plainTextVisitor.Result));
}
else
{
results.Add(new TextBlock { TextWrapping = System.Windows.TextWrapping.Wrap, Text = ((Text)columnFirstContent).Contents, Margin = new Thickness(4, 6, 4, 6) });
}
}
else
{
var fullUIVisitor = new SnuDomFullUIVisitor(_forgroundBrush);
if (column != null)
{
foreach (var contents in column.Contents)
{
contents.Accept(fullUIVisitor);
}
}
else if (item is SnuDomWP8.Paragraph)
{
FlatenVisitParagraph(fullUIVisitor, item as SnuDomWP8.Paragraph);
}
if (fullUIVisitor.ResultGroup != null)
results.Add(fullUIVisitor.ResultGroup);
else
results.Add(fullUIVisitor.Result);
}
if (column != null)
{
switch (column.Alignment)
{
case ColumnAlignment.Center:
results.Last().SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Center);
break;
case ColumnAlignment.Left:
results.Last().SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Left);
break;
case ColumnAlignment.Right:
results.Last().SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Right);
break;
}
results.Last().SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Top);
}
}
return results;
}