private void CollectLayoutItemVisibleCaptions <T>(IList <string> captions, IEnumerable <T> layoutInfo, ViewItemsCollection viewItems, bool recursively)
 {
     foreach (T itemInfo in layoutInfo)
     {
         if (itemInfo is IModelLayoutViewItem)
         {
             IModelLayoutViewItem layoutItemModel = (IModelLayoutViewItem)itemInfo;
             ViewItem             viewItem        = FindViewItem(viewItems, layoutItemModel);
             if (viewItem != null && GetIsLayoutItemCaptionVisible(layoutItemModel, viewItem) && GetIsItemForCaptionCalculation(layoutItemModel, viewItem))
             {
                 MarkRequiredFieldCaptionEventArgs args = new MarkRequiredFieldCaptionEventArgs(viewItem, false);
                 OnMarkRequiredFieldCaption(args);
                 captions.Add(BuildItemCaption(viewItem, args.NeedMarkRequiredField, args.RequiredFieldMark));
             }
         }
         else if (recursively)
         {
             if (itemInfo is IEnumerable <IModelViewLayoutElement> )
             {
                 CollectLayoutItemVisibleCaptions <IModelViewLayoutElement>(captions, (IEnumerable <IModelViewLayoutElement>)itemInfo, viewItems, recursively);
             }
             else if (itemInfo is IEnumerable <IModelLayoutGroup> )
             {
                 CollectLayoutItemVisibleCaptions <IModelLayoutGroup>(captions, (IEnumerable <IModelLayoutGroup>)itemInfo, viewItems, recursively);
             }
         }
     }
 }
        protected override LayoutItemTemplateContainer LayoutItem(ViewItemsCollection viewItems, IModelLayoutViewItem layoutItemModel)
        {
            LayoutItemTemplateContainer templateContainer = new LayoutItemTemplateContainer(this, viewItems, layoutItemModel);

            templateContainer.Template = LayoutItemTemplate;
            templateContainer.ID       = WebIdHelper.GetCorrectedLayoutItemId(layoutItemModel);
            ViewItem viewItem = FindViewItem(viewItems, layoutItemModel);

            templateContainer.ViewItem = viewItem;
            if (viewItem != null)
            {
                MarkRequiredFieldCaptionEventArgs args = new MarkRequiredFieldCaptionEventArgs(viewItem, false);
                OnMarkRequiredFieldCaption(args);
                templateContainer.Caption = BuildItemCaption(viewItem, args.NeedMarkRequiredField, args.RequiredFieldMark);
            }
            templateContainer.ShowCaption                = GetIsLayoutItemCaptionVisible(layoutItemModel, viewItem);
            templateContainer.CaptionWidth               = CalculateCaptionWidth(viewItem, viewItems, layoutItemModel);
            templateContainer.CaptionLocation            = GetCaptionLocation(layoutItemModel);
            templateContainer.CaptionHorizontalAlignment = GetCaptionHorizontalAlignment(layoutItemModel);
            templateContainer.CaptionVerticalAlignment   = GetCaptionVerticalAlignment(layoutItemModel);
            OnLayoutItemCreatedNew(templateContainer, layoutItemModel, viewItem);
            return(templateContainer);
        }