/// <summary>
        /// Sets the commands, column order and event handlers.
        /// After this the VM is ready for operation
        /// </summary>
        /// <param name="column"></param>
        private void InitializeColumn(ColumnDefinitionVM column)
        {
            int nonZeroOrderColumns = ColumnDefinitions.Count(c => c.ColumnOrder > 0);

            if (column.ColumnOrder == 0)
            {
                column.ColumnOrder = nonZeroOrderColumns + 1;
            }

            column.RemoveCommand = new DelegateCommand((parameter) =>
            {
                int order = (int)parameter;

                List <ColumnDefinitionVM> higherOrder = ColumnDefinitions.Where(cd => cd.ColumnOrder > order).ToList();
                List <ColumnDefinitionVM> lowerOrder  = ColumnDefinitions.Where(cd => cd.ColumnOrder < order).ToList();

                foreach (ColumnDefinitionVM cdVM in higherOrder)
                {
                    cdVM.ColumnOrder--;
                }

                ColumnDefinitions = lowerOrder.Concat(higherOrder).ToArray();
            });

            column.MoveLeft  = MoveColumnLeft;
            column.MoveRight = MoveColumnRight;
            MoveColumnLeft.RaiseCanExecuteChanged();
            MoveColumnRight.RaiseCanExecuteChanged();
        }
Exemple #2
0
    protected override System.Windows.Size MeasureOverride(System.Windows.Size constraint)
    {
        //I assume Grid.MeasureOverride return the minimum size as desired size
        Size MinimumDesiredSize = base.MeasureOverride(constraint);
        //The remaining available space provided by the container
        double ConstraintWidthRemaining = constraint.Width - MinimumDesiredSize.Width;
        //The supposed remaining space if we assume than star columns width equals 0, will be calculated later
        double WidthRemaining = ConstraintWidthRemaining;
        //The width used in the remaining available space
        double WidthUsed = 0;
        //The number of column which are star sized
        double StarSum = 0;

        foreach (ColumnDefinition column in ColumnDefinitions.Where(c => c.Width.IsStar))
        {
            StarSum        += column.Width.Value;
            WidthRemaining += column.MinWidth;
        }
        foreach (ColumnDefinition column in ColumnDefinitions.Where(c => c.Width.IsStar))
        {
            double Ratio       = column.Width.Value / StarSum;
            double ColumnWidth = WidthRemaining * Ratio;
            if (column.MaxWidth != 0.0)
            {
                if (ColumnWidth > column.MinWidth)
                {
                    if (ColumnWidth <= column.MaxWidth)
                    {
                        WidthUsed += ColumnWidth - column.MinWidth;
                    }
                    else
                    {
                        WidthUsed += column.MaxWidth - column.MinWidth;
                    }
                }
            }
            else
            {
                WidthUsed += ColumnWidth - column.MinWidth;
            }
        }
        MinimumDesiredSize.Width += WidthUsed;
        return(MinimumDesiredSize);
    }
        protected virtual void Initialize()
        {
            AddDepthCommand = new DelegateCommand(() =>
            {
                List <ColumnDefinitionVM> result = new List <ColumnDefinitionVM>(ColumnDefinitions);
                ColumnDefinitionVM column        = new DepthColumnDefinitionVM();
                InitializeColumn(column);
                result.Add(column);
                ColumnDefinitions = result.ToArray();
            });

            AddLayerLengthCommand = new DelegateCommand(() =>
            {
                List <ColumnDefinitionVM> result = new List <ColumnDefinitionVM>(ColumnDefinitions);
                ColumnDefinitionVM column        = new LayerLengthColumnDefinitionVM();
                InitializeColumn(column);
                result.Add(column);
                ColumnDefinitions = result.ToArray();
            });

            AddPhotoCommand = new DelegateCommand(() =>
            {
                List <ColumnDefinitionVM> result = new List <ColumnDefinitionVM>(ColumnDefinitions);
                ColumnDefinitionVM column        = new PhotoColumnDefinitionVM();
                InitializeColumn(column);
                result.Add(column);
                ColumnDefinitions = result.ToArray();
            });

            AddLayerPropCommand = new DelegateCommand(() =>
            {
                List <ColumnDefinitionVM> result = new List <ColumnDefinitionVM>(ColumnDefinitions);
                ColumnDefinitionVM column        = new LayeredTextColumnDefinitionVM(layersTemplateSource);
                InitializeColumn(column);
                result.Add(column);
                ColumnDefinitions = result.ToArray();
            });

            AddLayerBoundsCommand = new DelegateCommand(() => {
                List <ColumnDefinitionVM> result = new List <ColumnDefinitionVM>(ColumnDefinitions);
                ColumnDefinitionVM column        = new LayerEditColumnDefinitionVM(layerRankNameSource);
                InitializeColumn(column);
                result.Add(column);
                ColumnDefinitions = result.ToArray();
            });

            AddLayerSamplesCommand = new DelegateCommand(() => {
                List <ColumnDefinitionVM> result = new List <ColumnDefinitionVM>(ColumnDefinitions);
                ColumnDefinitionVM column        = new LayerSamplesDefinitionVM();
                InitializeColumn(column);
                result.Add(column);
                ColumnDefinitions = result.ToArray();
            });

            AddVisualCommand = new DelegateCommand(() => {
                List <ColumnDefinitionVM> result = new List <ColumnDefinitionVM>(ColumnDefinitions);
                ColumnDefinitionVM column        = new VisualColumnDefinitionVM(layersTemplateSource);
                InitializeColumn(column);
                result.Add(column);
                ColumnDefinitions = result.ToArray();
            });

            AddIconsCommand = new DelegateCommand(() => {
                List <ColumnDefinitionVM> result = new List <ColumnDefinitionVM>(ColumnDefinitions);
                ColumnDefinitionVM column        = new IconsColumnDefinitionVM(layersTemplateSource);
                InitializeColumn(column);
                result.Add(column);
                ColumnDefinitions = result.ToArray();
            });

            MoveColumnLeft = new DelegateCommand((parameter) =>
            {
                int order = (int)parameter;

                ColumnDefinitionVM target = ColumnDefinitions.Where(cd => cd.ColumnOrder == order).Single();
                ColumnDefinitionVM toSwap = ColumnDefinitions.Where(cd => cd.ColumnOrder == order - 1).Single();
                target.ColumnOrder        = order - 1;
                toSwap.ColumnOrder        = order;
                RaisePropertyChanged(nameof(ColumnDefinitions));
                RaisePropertyChanged(nameof(OrderedColumnDefinitions));
                MoveColumnLeft.RaiseCanExecuteChanged();
                MoveColumnRight.RaiseCanExecuteChanged();
            }, (parameter) =>
            {
                if (parameter != null)
                {
                    int order = (int)parameter;
                    if (order > 1)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            });

            MoveColumnRight = new DelegateCommand((parameter) =>
            {
                int order = (int)parameter;

                ColumnDefinitionVM target = ColumnDefinitions.Where(cd => cd.ColumnOrder == order).Single();
                ColumnDefinitionVM toSwap = ColumnDefinitions.Where(cd => cd.ColumnOrder == order + 1).Single();
                target.ColumnOrder        = order + 1;
                toSwap.ColumnOrder        = order;
                RaisePropertyChanged(nameof(ColumnDefinitions));
                RaisePropertyChanged(nameof(OrderedColumnDefinitions));
                MoveColumnLeft.RaiseCanExecuteChanged();
                MoveColumnRight.RaiseCanExecuteChanged();
            }, (parameter) =>
            {
                if (parameter != null)
                {
                    int order = (int)parameter;
                    if (order < ColumnDefinitions.Length)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            });
            ImportFromFileCommnad = new DelegateCommand(() =>
            {
                ColumnDefinitionVM[] settings;
                if (colSettingPersistence.Load(out settings))
                {
                    ColumnDefinitions = settings;
                    foreach (var col in ColumnDefinitions)
                    {
                        InitializeColumn(col);
                    }
                }
            });
            ExportToFileCommand = new DelegateCommand(() => {
                colSettingPersistence.Persist(OrderedColumnDefinitions);
            });
        }
Exemple #4
0
        /// <summary>
        /// Delete compoenent from the rung
        /// </summary>
        /// <param name="component">Component to be deleted</param>
        public RungUI Remove(ComponentUIBase component)
        {
            ComponentGridPosition _component = _Components.Where(x => x.Component == component).First();


            if (_LogicalRung.Components.Where(x => x.LeftLide == component.LogicComponent.LeftLide && x.RightLide == component.LogicComponent.RightLide).Count() > 1)
            {
                foreach (ComponentGridPosition item in GetAllBetween(component.LogicComponent.LeftLide, component.LogicComponent.RightLide).Where(x => x.Row > _component.Row))
                {
                    item.SetPossition(item.Row - 1, item.Column);
                }
            }
            else
            {
                IEnumerable <ComponentGridPosition> RR = _Components.Where(x => x.Component.LogicComponent.RightLide == component.LogicComponent.RightLide && x != _component);

                if (RR.Count() > 0)
                {
                    IEnumerable <ComponentGridPosition> column_components = _Components.Where(x => x.Column == _component.Column);

                    if (column_components.Count() == 1)
                    {
                        foreach (ComponentGridPosition item in _Components.Where(x => x.Column > _component.Column))
                        {
                            item.SetPossition(item.Row, item.Column - 1);
                        }
                    }
                    else
                    {
                        foreach (ComponentGridPosition item in GetAllBetween(component.LogicComponent.LeftLide, component.LogicComponent.RightLide).Where(x => x.Row > _component.Row))
                        {
                            item.SetPossition(item.Row - 1, item.Column);
                        }
                    }
                }
                else
                {
                    foreach (ComponentGridPosition item in _Components.Where(x => x.Component.LogicComponent.LeftLide == component.LogicComponent.RightLide))
                    {
                        item.SetPossition(item.Row, item.Column - 1);
                    }
                }
            }

            _Components.Remove(_component);
            _LogicalRung.Remove(component.LogicComponent);
            Children.Remove(component);

            var row = RowDefinitions.Where(x => _Components.Where(y => (y.Row == RowDefinitions.IndexOf(x))).Count() == 0);

            if (row.Count() != 0)
            {
                int row_index = RowDefinitions.IndexOf(row.First());
                foreach (ComponentGridPosition item in _Components.Where(x => x.Row > row_index))
                {
                    item.SetPossition(item.Row - 1, item.Column);
                }
                RowDefinitions.RemoveAt(row_index);
            }

            var column = ColumnDefinitions.Where(x => _Components.Where(y => (y.Column == ColumnDefinitions.IndexOf(x))).Count() == 0);

            if (column.Count() != 0)
            {
                int column_index = ColumnDefinitions.IndexOf(column.First());
                if (_component.Column >= ColumnDefinitions.Count - _OutputBlockLegth)
                {
                    _OutputBlockLegth--;
                }
                foreach (ComponentGridPosition item in _Components.Where(x => x.Column > column_index))
                {
                    item.SetPossition(item.Row, item.Column - 1);
                }
                ColumnDefinitions.RemoveAt(column_index);
            }

            return(this);
        }
Exemple #5
0
        public virtual void EndInit()
        {
            //==============================================
            //              创建过滤条件
            //==============================================
            AllFilters = new List <FilterControlBase>();

            foreach (FilterDefinition fd in FilterDefinitions)
            {
                FilterControlBase fc = (FilterControlBase)Activator.CreateInstance(fd.FilterControlType, true);
                fc.DataPropertyName = fd.DataPropertyName;
                fc.Title            = fd.Title;
                if (!fd.FilterOperator.IsNullOrWhiteSpace())
                {
                    fc.FilterOperator = fd.FilterOperator;
                }
                fc.Parent = pFilters;
                AllFilters.Add(fc);
            }
            //==============================================
            //                  创建表格
            //==============================================

            //空白组默认设置为页面标题
            ColumnDefinitions.ForEach(c => { if (c.GroupName.IsNullOrWhiteSpace())
                                             {
                                                 c.GroupName = Text;
                                             }
                                      });

            //创建Tab页
            tabContainer.TabPages.Clear();
            var queryGroups = ColumnDefinitions.Select(c => c.GroupName).Distinct().ToArray();

            foreach (string g in queryGroups)
            {
                tabContainer.TabPages.Add(g);
                //创建表格
                GridViewer dgv = new GridViewer();

                //添加列
                foreach (var col in ColumnDefinitions.Where(c => c.GroupName == g))
                {
                    dgv.CreateColumn(col.ColumnType, col.Title, col.DataPropertyName, col.Name, col.Width, col.SortMode, col.SortOrder, col.Visible, col.Index, col.Frozen);
                }
                dgv.Dock   = DockStyle.Fill;
                dgv.Parent = tabContainer.TabPages[tabContainer.TabCount - 1];

                //TODO: 暂不支持排序
            }

            //只有一个表格则不显示TabControl
            if (tabContainer.TabPages.Count == 1)
            {
                Control dgv = tabContainer.TabPages[0].Controls[0];
                dgv.Parent = this;
                Controls.Remove(tabContainer);
                tabContainer = null; //dispose
                dgv.BringToFront();
            }

            //所有表格
            AllGridView = this.FindChildControl(c => c is DataGridView).OfType <DataGridView>().ToList();

            //==============================================
            //               生成Select语句
            //==============================================
            var query = from dgv in AllGridView
                        from col in dgv.Columns.OfType <DataGridViewColumn>()
                        where !col.DataPropertyName.IsNullOrWhiteSpace()
                        select col.DataPropertyName;

            List <string> fields = new List <string>();

            foreach (string col in query.Distinct())
            {
                fields.Add("[{0}] AS '{1}'".FormatWith(col.Replace(".", "].["), col));
            }

            Sentence_Select = string.Join(", ", fields.ToArray());

            //==============================================
            //          关联表格的选择及滚动
            //==============================================
            if (AllGridView.Count > 1)
            {
                DataGridView dgv = AllGridView[0];

                for (int i = 1; i < AllGridView.Count; i++)
                {
                    DataGridView tmp = AllGridView[i];
                    dgv.SyncSelectedRowIndex(tmp);
                    dgv.SyncRowHeight(tmp);
                    dgv.SyncVerticalScroll(tmp);
                }
            }

            //==============================================
            //                  注册表格事件
            //==============================================
            //注册事件
            AllGridView.ForEach(d =>
            {
                d.ColumnHeaderMouseClick += ColumnHeaderMouseClick;
                d.SelectionChanged       += SelectionChanged;
                d.CellDoubleClick        += CellDoubleClick;
            });
        }
Exemple #6
0
        // Do measurement when in horizontal orientation
        private void MeasureHorizontal(nfloat parentWidth, nfloat parentHeight)
        {
            // Work out our height
            nfloat layoutWidth  = LayoutParameters.TryResolveWidth(this, parentWidth, parentHeight);
            nfloat layoutHeight = LayoutParameters.TryResolveHeight(this, parentWidth, parentHeight);

            // Work out the total fixed size
            var paddings = Padding.TotalWidth();

            _goneViews     = new List <View>();
            _arrangedViews = new View[RowDefinitions.Count, ColumnDefinitions.Count];
            var columnWidthFillParentSubviews = new List <View>();

            //calculating columns
            var minWidth = (nfloat)ColumnDefinitions.Sum(x => x.MinWidth);

            foreach (var v in SubViews.Where(x => !x.Gone))
            {
                _arrangedViews[v.Row, v.Column] = v;
                var columnDefinition = ColumnDefinitions[v.Column];
                var rowDefinition    = RowDefinitions[v.Column];

                nfloat width;
                if (columnDefinition.Width > 0)
                {
                    width = columnDefinition.Width;
                }
                else if (columnDefinition.MaxWidth > 0)
                {
                    width = columnDefinition.MaxWidth;
                }
                else
                {
                    width = parentWidth - paddings;
                }

                nfloat height;
                if (rowDefinition.Height > 0)
                {
                    height = rowDefinition.Height;
                }
                else
                {
                    height = adjustLayoutHeight(layoutHeight, v);
                }

                if (v.LayoutParameters.WidthUnits != Units.ParentRatio)
                {
                    v.Measure(width - v.LayoutParameters.Margins.TotalWidth(), height);
                }
                else
                {
                    v._measuredSize      = new CGSize(0, 0);
                    v._measuredSizeValid = true;
                    columnWidthFillParentSubviews.Add(v);
                }
            }

            {
                nfloat totalWeight = 0;
                nfloat totalWidth  = 0;
                var    columnId    = -1;
                foreach (var column in ColumnDefinitions)
                {
                    columnId++;
                    column.CalculatedWidth = 0;

                    if (column.Width > 0)
                    {
                        column.CalculatedWidth = column.Width;
                    }
                    else if (column.Width == AutoSize.WrapContent)
                    {
                        for (int rowId = 0; rowId < RowDefinitions.Count; rowId++)
                        {
                            var v = _arrangedViews[rowId, columnId];

                            if (v != null)
                            {
                                column.CalculatedWidth = NMath.Max(column.CalculatedWidth, v.GetMeasuredSize().Width + v.LayoutParameters.Margins.TotalWidth());
                            }
                        }
                    }
                    else if (column.Width == AutoSize.FillParent)
                    {
                        totalWeight += column.Weight;
                    }
                    totalWidth += column.CalculatedWidth;
                }

                var room = layoutWidth - totalWidth;
                foreach (var column in ColumnDefinitions.Where(x => x.Width == AutoSize.FillParent))
                {
                    columnId++;

                    column.CalculatedWidth = room * column.Weight / totalWeight;
                }
            }

            {
                var totalWeight = 0;
                var totalHeight = 0;
                var rowId       = -1;
                foreach (var row in RowDefinitions)
                {
                    rowId++;

                    if (row.Height > 0)
                    {
                        row.CalculatedHeight = row.Height;
                        continue;
                    }


                    if (row.Height == AutoSize.WrapContent)
                    {
                        row.CalculatedHeight = 0;
                        for (int columnId = 0; columnId < ColumnDefinitions.Count; columnId++)
                        {
                            var v = _arrangedViews[rowId, columnId];

                            if (v != null)
                            {
                                row.CalculatedHeight = NMath.Max(row.CalculatedHeight, v.GetMeasuredSize().Height);
                            }
                        }
                    }
                }


                var room = layoutHeight - totalHeight;
                foreach (var row in RowDefinitions.Where(x => x.Height == AutoSize.FillParent))
                {
                    row.CalculatedHeight = room * row.Weight / totalWeight;
                }
            }

            CGSize sizeMeasured = CGSize.Empty;

            foreach (var item in ColumnDefinitions)
            {
                sizeMeasured.Width += item.CalculatedWidth;
            }
            sizeMeasured.Width += ColSpacing * (ColumnDefinitions.Count - 1);
            foreach (var item in RowDefinitions)
            {
                sizeMeasured.Height += item.CalculatedHeight;
            }
            sizeMeasured.Height += RowSpacing * (RowDefinitions.Count - 1);

            foreach (var v in columnWidthFillParentSubviews)
            {
                v.Measure(ColumnDefinitions[v.Column].CalculatedWidth, RowDefinitions[v.Row].CalculatedHeight);
            }

            // And finally, set our measure dimensions
            SetMeasuredSize(LayoutParameters.ResolveSize(new CGSize(layoutWidth, layoutHeight), sizeMeasured));
        }