Ejemplo n.º 1
0
        /// <summary>
        /// Проходит рекурсивно по всем узлам дерева, отыскивает табличные секции верхнего уровня, подцепляет к ним данные по нижележащим параметрам
        /// </summary>
        private void AddDataTable(FlexNodeReport parentNode, long idfObservation)
        {
            //если была создана табличная секция и она верхнего уровня (т.е. над ней нет других табличных секций), то
            //именно она будет нести пользовательские данные
            if (parentNode == null)
            {
                return;
            }
            var flexTableItem = parentNode.DataItem as FlexTableItem;

            if (flexTableItem != null && !(parentNode.ParentNode.DataItem is FlexTableItem))
            {
                //собираем рекурсивно все нижележащие параметры, которые уже отсортированы по порядку следования
                var parameters = new List <Tuple <long, string> >();
                CollectParametersUnderSection(parentNode, parameters);
                flexTableItem.BodyData = GetDataTableForTemplate(idfObservation, parameters);
                //вычисляем актуальную ширину этой секции как совокупность ширин входящих в неё объектов
                flexTableItem.Width = CalculateWidthTotal(parentNode);
            }
            //рекурсивно по всем потомкам
            foreach (var childNode in parentNode.ChildList)
            {
                AddDataTable((FlexNodeReport)childNode, idfObservation);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Добавляет лейбл с простым текстовым полем
        /// </summary>
        /// <param name="caption"></param>
        public FlexNodeReport Add(string caption)
        {
            var labelItem = new FlexLabelItem(caption, new Size(50, 50));
            var result    = new FlexNodeReport(this, labelItem);
            //выставляем размеры и положение для контейнера дин. параметров
            //отыщем среди них самый нижний (вложенные не учитываем)
            int top;
            int height;

            GetCorrectSize(ChildList, out top, out height);
            labelItem.Top = top + height;

            ChildList.Add(result);
            return(result);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Расчёт совокупной ширины объекта, исходя из ширин, входящих в него объектов
        /// </summary>
        /// <param name="parentNode"></param>
        /// <returns></returns>
        private int CalculateWidthTotal(FlexNodeReport parentNode)
        {
            var result = 0;

            if (parentNode.ChildListCount > 0)
            {
                result += parentNode.ChildList.Sum(node => CalculateWidthTotal((FlexNodeReport)node));
                parentNode.DataItem.Width = result;
            }
            else
            {
                result = parentNode.DataItem.Width;
            }
            return(result);
        }
Ejemplo n.º 4
0
        public FlexNodeReport Add(ParametersDeletedFromTemplate rowParameter, bool isParameterInSection)
        {
            var rowParameterItem = new FlexLabelItem(rowParameter, isParameterInSection);
            //пересчитываем правильно его координаты
            //отыщем среди них самый нижний (вложенные не учитываем)
            int top;
            int height;

            GetCorrectSize(ChildList, out top, out height);
            rowParameterItem.Top = top + height + 10;
            var result = new FlexNodeReport(this, rowParameterItem);

            ChildList.Add(result);
            return(result);
        }
Ejemplo n.º 5
0
        public void Add
            (ParametersDeletedFromTemplate rowParameter,
            ActivityParameter activityParametersRow, out Size size)
        {
            var node = Add(rowParameter, false);

            var parametersItem = new FlexLabelItem(rowParameter, activityParametersRow)
            {
                IsParameterValue = true,
                Top = node.DataItem.Top
            };
            var nodeAp = new FlexNodeReport(this, parametersItem);

            ChildList.Add(nodeAp);
            //нод, который отвечает за контрол, выводится с фиксированной высотой
            nodeAp.DataItem.Height = DefaultControlHeight;
            size = new Size(rowParameter.intWidth, rowParameter.intHeight);
        }
Ejemplo n.º 6
0
        internal static int CompareNodesByOrder(FlexNodeReport x, FlexNodeReport y)
        {
            int result;

            if (TryCompareNullNodes(x, y, out result))
            {
                return(result);
            }

            if (x.DataItem.Order < y.DataItem.Order)
            {
                result = -1;
            }
            else if (x.DataItem.Order > y.DataItem.Order)
            {
                result = 1;
            }
            return(result);
        }
Ejemplo n.º 7
0
        public void Add
            (ParameterTemplate parameterTemplateRow,
            ActivityParameter activityParametersRow)
        {
            Add(parameterTemplateRow, false);

            var parametersItem = new FlexLabelItem(parameterTemplateRow, activityParametersRow)
            {
                IsParameterValue = true
            };
            var nodeAp = new FlexNodeReport(this, parametersItem);

            //нод, который отвечает за контрол, выводится с фиксированной высотой
            nodeAp.DataItem.Height = DefaultControlHeight;
            if (nodeAp.DataItem.Height > parametersItem.Height)
            {
                nodeAp.DataItem.Height = parametersItem.Height;
            }
            ChildList.Add(nodeAp);
        }
Ejemplo n.º 8
0
        /*
         * /// <summary>
         * /// Перегоняет шаблон с Summary в древовидную форму (шаблон уже должен быть загружен)
         * /// </summary>
         * /// <returns></returns>
         * public FlexNode GetFlexNodeFromTemplateSummary()
         * {
         *  var rootNode = FlexNode.CreateRoot();
         *  FillFlexNodeForSection(rootNode, null, IdfObservationSummary, IdfsFormTemplateSummary); //начинаем с корня шаблона и внутрь
         *  //для каждой табличной секции верхнего уровня, входящей в шаблон, подцепим таблицу с данными
         *  AddDataTable(rootNode, IdfObservationSummary);
         *
         *  return rootNode;
         * }
         */

        /// <summary>
        /// Собирает рекурсивно все нижележащие параметры, которые уже отсортированы по порядку следования
        /// </summary>
        /// <param name="parentNode"></param>
        /// <param name="parameters"></param>
        private void CollectParametersUnderSection(FlexNodeReport parentNode, List <Tuple <long, string> > parameters)
        {
            if (parentNode.DataItem != null)
            {
                var parameterTemplateRow = parentNode.DataItem.LinkedObject as ParameterTemplate;
                if (parameterTemplateRow != null)
                {
                    parameters.Add(new Tuple <long, string>(parameterTemplateRow.idfsParameter, parameterTemplateRow.NationalName));
                }
                else
                {
                    var ps = parentNode.DataItem.LinkedObject as PredefinedStub;
                    if (ps != null && ps.idfsParameter.HasValue)
                    {
                        parameters.Add(new Tuple <long, string>(ps.idfsParameter.Value, ps.strNameValue));
                    }
                }
            }
            //рекурсивно по всем потомкам
            foreach (var childNode in parentNode.ChildList)
            {
                CollectParametersUnderSection((FlexNodeReport)childNode, parameters);
            }
        }
Ejemplo n.º 9
0
 public abstract void Visit(FlexNodeReport node);