Exemple #1
0
 public StationRowHeaderView()
 {
     DevAge.Drawing.VisualElements.RowHeader backHeader = new DevAge.Drawing.VisualElements.RowHeader();
     backHeader.BackColor            = Color.FromArgb(248, 248, 248);
     backHeader.BackgroundColorStyle = DevAge.Drawing.BackgroundColorStyle.Solid;
     this.Background    = backHeader;
     this.ForeColor     = Color.Black;
     this.Font          = new Font("微软雅黑", 9);
     this.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
 }
        public virtual void UpdateGrid()
        {
            try
            {
                // remove all existing rows
                gridSolutions.Rows.Clear();
                // *** IViews
                // caption header
                SourceGrid.Cells.Views.RowHeader        captionHeader   = new SourceGrid.Cells.Views.RowHeader();
                DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader()
                {
                    BackColor = Color.SteelBlue,
                    Border    = DevAge.Drawing.RectangleBorder.NoBorder
                };
                captionHeader.Background    = veHeaderCaption;
                captionHeader.ForeColor     = Color.Black;
                captionHeader.Font          = new Font("Arial", GridFontSize, FontStyle.Bold);
                captionHeader.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
                // viewRowHeader
                SourceGrid.Cells.Views.RowHeader        viewRowHeader = new SourceGrid.Cells.Views.RowHeader();
                DevAge.Drawing.VisualElements.RowHeader backHeader    = new DevAge.Drawing.VisualElements.RowHeader()
                {
                    BackColor = Color.LightGray,
                    Border    = DevAge.Drawing.RectangleBorder.NoBorder
                };
                viewRowHeader.Background = backHeader;
                viewRowHeader.ForeColor  = Color.Black;
                viewRowHeader.Font       = new Font("Arial", GridFontSize, FontStyle.Regular);
                // viewNormal
                CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);
                // ***

                SourceGrid.Cells.RowHeader rowHeader;
                int iRow = -1;

                // loading caption
                gridSolutions.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(GridCaption)
                {
                    ColumnSpan = 2,
                    View       = captionHeader
                };
                gridSolutions[iRow, 0] = rowHeader;
            }
            catch (Exception ex)
            {
                _log.Error(ex.ToString());
            }
        }
Exemple #3
0
        public override void FillGrid()
        {
            // clear grid
            gridSolutions.Rows.Clear();
            // border
            gridSolutions.BorderStyle  = BorderStyle.FixedSingle;
            gridSolutions.ColumnsCount = 2;
            gridSolutions.FixedColumns = 1;

            // header
            SourceGrid.Cells.RowHeader rowHeader;

            SourceGrid.Cells.Views.RowHeader        viewRowHeader = new SourceGrid.Cells.Views.RowHeader();
            DevAge.Drawing.VisualElements.RowHeader backHeader    = new DevAge.Drawing.VisualElements.RowHeader();
            backHeader.BackColor     = Color.LightGray;
            backHeader.Border        = DevAge.Drawing.RectangleBorder.NoBorder;
            viewRowHeader.Background = backHeader;
            viewRowHeader.ForeColor  = Color.Black;
            viewRowHeader.Font       = new Font("Arial", 10, FontStyle.Regular);

            int iRow = -1;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader("Layer #");
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader("Interlayer #");
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader("Case #");
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;
        }
        private void FillGrid()
        {
            // remove all existing rows
            gridSolutions.Rows.Clear();
            // *** IViews
            // captionHeader
            SourceGrid.Cells.Views.RowHeader        captionHeader   = new SourceGrid.Cells.Views.RowHeader();
            DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader()
            {
                BackColor = Color.SteelBlue,
                Border    = DevAge.Drawing.RectangleBorder.NoBorder
            };
            captionHeader.Background    = veHeaderCaption;
            captionHeader.ForeColor     = Color.Black;
            captionHeader.Font          = new Font("Arial", GridFontSize, FontStyle.Bold);
            captionHeader.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
            // viewRowHeader
            SourceGrid.Cells.Views.ColumnHeader        viewColumnHeader = new SourceGrid.Cells.Views.ColumnHeader();
            DevAge.Drawing.VisualElements.ColumnHeader backHeader       = new DevAge.Drawing.VisualElements.ColumnHeader()
            {
                BackColor = Color.LightGray,
                Border    = DevAge.Drawing.RectangleBorder.NoBorder
            };
            viewColumnHeader.Background            = backHeader;
            viewColumnHeader.ForeColor             = Color.Black;
            viewColumnHeader.Font                  = new Font("Arial", GridFontSize, FontStyle.Regular);
            viewColumnHeader.ElementSort.SortStyle = DevAge.Drawing.HeaderSortStyle.None;
            // viewNormal
            CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);

            // ***
            // set first row
            gridSolutions.BorderStyle  = BorderStyle.FixedSingle;
            gridSolutions.ColumnsCount = 5;
            gridSolutions.FixedRows    = 1;
            gridSolutions.Rows.Insert(0);
            // header
            int iCol = 0;

            SourceGrid.Cells.ColumnHeader columnHeader;
            // name
            columnHeader = new SourceGrid.Cells.ColumnHeader(Resources.ID_CASENAME)
            {
                AutomaticSortEnabled = false,
                View = viewColumnHeader
            };
            gridSolutions[0, iCol++] = columnHeader;
            // dimensions
            columnHeader = new SourceGrid.Cells.ColumnHeader(string.Format(Resources.ID_DIMENSIONS, UnitsManager.LengthUnitString))
            {
                AutomaticSortEnabled = false,
                View = viewColumnHeader
            };
            gridSolutions[0, iCol++] = columnHeader;
            // #items
            columnHeader = new SourceGrid.Cells.ColumnHeader("#")
            {
                AutomaticSortEnabled = false,
                View = viewColumnHeader
            };
            gridSolutions[0, iCol++] = columnHeader;
            // efficiency
            columnHeader = new SourceGrid.Cells.ColumnHeader(Resources.ID_EFFICIENCYPERCENTAGE)
            {
                AutomaticSortEnabled = false,
                View = viewColumnHeader
            };
            gridSolutions[0, iCol++] = columnHeader;
            // weight
            columnHeader = new SourceGrid.Cells.ColumnHeader(string.Format(Resources.ID_WEIGHT_WU, UnitsManager.MassUnitString))
            {
                AutomaticSortEnabled = false,
                View = viewColumnHeader
            };
            gridSolutions[0, iCol++] = columnHeader;

            int iRow = 0;

            foreach (AnalysisHomo analysis in Analyses)
            {
                AnalysisBoxCase analysisBoxCase = analysis as AnalysisBoxCase;
                BoxProperties   caseProperties  = analysisBoxCase.CaseProperties;

                gridSolutions.Rows.Insert(++iRow);
                iCol = 0;
                gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(analysis.Container.ID.Name);
                gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format("{0} x {1} x {2} / {3} x {4} x {5}",
                                                                                      caseProperties.Length, caseProperties.Width, caseProperties.Height,
                                                                                      caseProperties.InsideLength, caseProperties.InsideWidth, caseProperties.InsideHeight));
                gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(analysis.Solution.ItemCount);
                gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format(CultureInfo.InvariantCulture, "{0:0.#}", analysis.Solution.VolumeEfficiency));
                gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format(CultureInfo.InvariantCulture, "{0:0.#}", analysis.Solution.Weight));
            }

            gridSolutions.AutoStretchColumnsToFitWidth = true;
            gridSolutions.AutoSizeCells();
            gridSolutions.Columns.StretchToFit();

            // select first solution
            if (gridSolutions.RowsCount > 1)
            {
                gridSolutions.Selection.SelectRow(1, true);
            }
            else
            {
                // grid empty -> clear drawing
                graphCtrl.Invalidate();
            }
        }
        private void InitializeGrid()
        {
            // border
            DevAge.Drawing.BorderLine border = new DevAge.Drawing.BorderLine(Color.DarkBlue, 1);
            DevAge.Drawing.RectangleBorder cellBorder = new DevAge.Drawing.RectangleBorder(border, border);

            // views
            CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);
            viewNormal.Border = cellBorder;
            CheckboxBackColorAlternate viewNormalCheck = new CheckboxBackColorAlternate(Color.LightBlue, Color.White);
            viewNormalCheck.Border = cellBorder;

            // column header view
            SourceGrid.Cells.Views.ColumnHeader viewColumnHeader = new SourceGrid.Cells.Views.ColumnHeader();
            DevAge.Drawing.VisualElements.ColumnHeader backHeader = new DevAge.Drawing.VisualElements.ColumnHeader();
            backHeader.BackColor = Color.LightGray;
            backHeader.Border = DevAge.Drawing.RectangleBorder.NoBorder;
            viewColumnHeader.Background = backHeader;
            viewColumnHeader.ForeColor = Color.Black;
            viewColumnHeader.ElementSort.SortStyle = DevAge.Drawing.HeaderSortStyle.None;

            // row header view
            SourceGrid.Cells.Views.RowHeader viewRowHeader = new SourceGrid.Cells.Views.RowHeader();
            DevAge.Drawing.VisualElements.RowHeader backRowHeader = new DevAge.Drawing.VisualElements.RowHeader();
            backRowHeader.BackColor = Color.LightGray;
            backRowHeader.Border = DevAge.Drawing.RectangleBorder.NoBorder;
            viewRowHeader.Background = backRowHeader;
            viewRowHeader.ForeColor = Color.Black;

            // create the grid
            gridDynamicBCT.BorderStyle = BorderStyle.FixedSingle;

            gridDynamicBCT.ColumnsCount = McKeeFormula.HumidityCoefDictionary.Count + 1;
            gridDynamicBCT.RowsCount = McKeeFormula.StockCoefDictionary.Count + 1;

            // column header
            SourceGrid.Cells.ColumnHeader columnHeader;
            int indexCol = 0;

            columnHeader = new SourceGrid.Cells.ColumnHeader("Humidity (%)/Storage");
            columnHeader.AutomaticSortEnabled = false;
            columnHeader.View = viewColumnHeader;
            gridDynamicBCT[0, indexCol++] = columnHeader;

            foreach (string key in McKeeFormula.HumidityCoefDictionary.Keys)
            {
                columnHeader = new SourceGrid.Cells.ColumnHeader(key);
                columnHeader.AutomaticSortEnabled = false;
                columnHeader.View = viewColumnHeader;
                gridDynamicBCT[0, indexCol++] = columnHeader;
            }

            SourceGrid.Cells.RowHeader rowHeader;
            int indexRow = 1;

            foreach (string key in McKeeFormula.StockCoefDictionary.Keys)
            {
                rowHeader = new SourceGrid.Cells.RowHeader(key);
                rowHeader.View = viewRowHeader;
                gridDynamicBCT[indexRow++, 0] = rowHeader;
            }

            gridDynamicBCT.AutoStretchColumnsToFitWidth = true;
            gridDynamicBCT.AutoSizeCells();
            gridDynamicBCT.Columns.StretchToFit();
        }
Exemple #6
0
        private void FillGrid()
        {
            try
            {
                // clear grid
                gridProfile.Rows.Clear();
                // border
                gridProfile.BorderStyle = BorderStyle.FixedSingle;

                gridProfile.SelectionMode = GridSelectionMode.Row;
                gridProfile.ColumnsCount  = 3;
                // *** IViews
                // caption header
                DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader()
                {
                    BackColor = Color.SteelBlue,
                    Border    = DevAge.Drawing.RectangleBorder.NoBorder
                };
                SourceGrid.Cells.Views.RowHeader captionHeader = new SourceGrid.Cells.Views.RowHeader
                {
                    Background    = veHeaderCaption,
                    ForeColor     = Color.Black,
                    Font          = new Font("Arial", GridFontSize + 2, FontStyle.Bold),
                    TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter
                };
                // viewRowHeader
                DevAge.Drawing.VisualElements.RowHeader backHeader = new DevAge.Drawing.VisualElements.RowHeader()
                {
                    BackColor = Color.LightGray,
                    Border    = DevAge.Drawing.RectangleBorder.NoBorder
                };
                SourceGrid.Cells.Views.RowHeader viewRowHeader = new SourceGrid.Cells.Views.RowHeader
                {
                    Background = backHeader,
                    ForeColor  = Color.Black,
                    Font       = new Font("Arial", GridFontSize, FontStyle.Regular)
                };
                // viewNormal
                CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);
                // ***

                int iRow = -1;
                // ### sol items : begin
                gridProfile.Rows.Insert(++iRow);
                gridProfile[iRow, 1] = new SourceGrid.Cells.RowHeader($"{Resources.ID_HEIGHT} ({UnitsManager.LengthUnitString})")
                {
                    View = captionHeader
                };
                gridProfile[iRow, 2] = new SourceGrid.Cells.RowHeader($"{Resources.ID_DIAMETER} ({UnitsManager.LengthUnitString})")
                {
                    View = captionHeader
                };

                decimal inc             = 0.0m;
                int     noDecimalPlaces = 0;
                switch (UnitsManager.CurrentUnitSystem)
                {
                case UnitsManager.UnitSystem.UNIT_METRIC1: inc = 1.0m; noDecimalPlaces = 0; break;

                case UnitsManager.UnitSystem.UNIT_METRIC2: inc = 0.1m; noDecimalPlaces = 1; break;

                case UnitsManager.UnitSystem.UNIT_IMPERIAL:
                case UnitsManager.UnitSystem.UNIT_US: inc = 1.0m / 16.0m; noDecimalPlaces = 2; break;

                default: break;
                }
                foreach (var item in Profile)
                {
                    gridProfile.Rows.Insert(++iRow);

                    gridProfile[iRow, 0] = new SourceGrid.Cells.Cell()
                    {
                        Value = $"{iRow}"
                    };

                    for (int j = 0; j < 2; ++j)
                    {
                        decimal dValue      = (decimal)item[j];
                        var     usedControl = new NumericUpDown()
                        {
                            Minimum       = 0.0m,
                            Maximum       = 1000.0m,
                            Increment     = inc,
                            DecimalPlaces = noDecimalPlaces,
                            Value         = dValue
                        };
                        usedControl.Enter += delegate(object sender, EventArgs e)
                        {
                            IsRechangingSelection = true;
                            foreach (RowInfo rowInfo in gridProfile.Rows)
                            {
                                gridProfile.Selection.SelectRow(rowInfo.Index, false);
                            }
                            foreach (LinkedControlValue lcv in gridProfile.LinkedControls)
                            {
                                if (lcv.Control == usedControl)
                                {
                                    gridProfile.Selection.SelectRow(lcv.Position.Row, true);
                                    break;
                                }
                            }
                            IsRechangingSelection = false;
                        };
                        usedControl.ValueChanged += delegate(object sender, EventArgs e)
                        {
                            foreach (LinkedControlValue lcv in gridProfile.LinkedControls)
                            {
                                if (lcv.Control == usedControl && lcv.Control is NumericUpDown nud)
                                {
                                    Vector2D v = Profile[lcv.Position.Row - 1];
                                    if (lcv.Position.Column == 1)
                                    {
                                        Profile[lcv.Position.Row - 1] = new Vector2D((double)nud.Value, v.Y);
                                    }
                                    else if (lcv.Position.Column == 2)
                                    {
                                        Profile[lcv.Position.Row - 1] = new Vector2D(v.X, (double)nud.Value);
                                    }

                                    OnInputChanged(sender, e);
                                }
                            }
                        };
                        gridProfile[iRow, j + 1] = new SourceGrid.Cells.Cell();
                        gridProfile.LinkedControls.Add(new LinkedControlValue(usedControl, new SourceGrid.Position(iRow, j + 1)));
                    }
                }

                gridProfile.VScrollBar.ValueChanged += delegate(object sender, EventArgs valueChangedEventArgs)
                {
                    // Hide all linked controls above 'new value'
                    // Show all linked controls beyond 'new value'
                    foreach (LinkedControlValue lcv in gridProfile.LinkedControls)
                    {
                        lcv.Control.Visible = lcv.Position.Row > gridProfile.VScrollBar.Value;
                    }

                    // Reselecting works more or less when scrolling down. But what when scrolling up?
                    if (gridProfile.Selection.ActivePosition.Row <= gridProfile.VScrollBar.Value)
                    {
                        IsRechangingSelection = false;

                        foreach (LinkedControlValue lcv in gridProfile.LinkedControls)
                        {
                            gridProfile.Selection.SelectRow(lcv.Position.Row, false);
                        }

                        IsRechangingSelection = true;

                        gridProfile.Selection.SelectRow(gridProfile.VScrollBar.Value + 1, true);
                    }
                };

                gridProfile.Selection.SelectionChanged += delegate(object sender, RangeRegionChangedEventArgs e)
                {
                    if (!IsRechangingSelection && e.AddedRange != null && e.RemovedRange == null)
                    {
                        bool  isFound      = false;
                        int   selectedRow  = -1;
                        int   selectedCol  = -1;
                        int[] selectedRows = e.AddedRange.GetRowsIndex();

                        if (sender is SourceGrid.Selection.SelectionBase)
                        {
                            selectedRow = (sender as SourceGrid.Selection.SelectionBase).ActivePosition.Row;
                            selectedCol = (sender as SourceGrid.Selection.SelectionBase).ActivePosition.Column;
                        }
                        if (selectedRows[0] != -1)
                        {
                            selectedRow = selectedRows[0];
                        }
                        foreach (LinkedControlValue lcv in gridProfile.LinkedControls)
                        {
                            if (lcv.Position.Row == selectedRow)
                            {
                                // Remove focus from control
                                isFound = true;
                                lcv.Control.Focus();
                                break;
                            }
                        }
                        if (!isFound)
                        {
                            IsRechangingSelection = true;
                            gridProfile.Selection.Focus(new SourceGrid.Position(selectedRow, selectedCol), true);
                            IsRechangingSelection = false;
                        }
                    }
                };

                gridProfile.AutoSizeCells();
                gridProfile.AutoStretchColumnsToFitWidth = true;
                gridProfile.Invalidate();
            }
            catch (Exception ex)
            {
                _log.Error(ex.ToString());
            }
        }
Exemple #7
0
        private void FillGrid()
        {
            try
            {
                // remove all existing rows
                gridSolutions.Rows.Clear();
                // *** IViews
                // captionHeader
                SourceGrid.Cells.Views.RowHeader        captionHeader   = new SourceGrid.Cells.Views.RowHeader();
                DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader()
                {
                    BackColor = Color.SteelBlue,
                    Border    = DevAge.Drawing.RectangleBorder.NoBorder
                };
                captionHeader.Background    = veHeaderCaption;
                captionHeader.ForeColor     = Color.Black;
                captionHeader.Font          = new Font("Arial", GridFontSize, FontStyle.Bold);
                captionHeader.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
                // viewRowHeader
                SourceGrid.Cells.Views.ColumnHeader        viewColumnHeader = new SourceGrid.Cells.Views.ColumnHeader();
                DevAge.Drawing.VisualElements.ColumnHeader backHeader       = new DevAge.Drawing.VisualElements.ColumnHeader()
                {
                    BackColor = Color.LightGray,
                    Border    = DevAge.Drawing.RectangleBorder.NoBorder
                };
                viewColumnHeader.Background            = backHeader;
                viewColumnHeader.ForeColor             = Color.Black;
                viewColumnHeader.Font                  = new Font("Arial", GridFontSize, FontStyle.Regular);
                viewColumnHeader.ElementSort.SortStyle = DevAge.Drawing.HeaderSortStyle.None;
                // viewNormal
                CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);
                // ***
                // set first row
                gridSolutions.BorderStyle  = BorderStyle.FixedSingle;
                gridSolutions.ColumnsCount = 7;
                gridSolutions.FixedRows    = 1;
                gridSolutions.Rows.Insert(0);
                // header
                int iCol = 0, iRow = -1;
                gridSolutions.Rows.Insert(++iRow);
                // layer pattern
                gridSolutions[0, iCol++] = new SourceGrid.Cells.ColumnHeader(Resources.ID_LAYERPATTERN)
                {
                    AutomaticSortEnabled = false, View = viewColumnHeader
                };
                // case count
                gridSolutions[0, iCol++] = new SourceGrid.Cells.ColumnHeader(Resources.ID_CASECOUNT)
                {
                    AutomaticSortEnabled = false, View = viewColumnHeader
                };
                // efficiency
                gridSolutions[0, iCol++] = new SourceGrid.Cells.ColumnHeader(Resources.ID_EFFICIENCYPERCENTAGE)
                {
                    AutomaticSortEnabled = false, View = viewColumnHeader
                };
                // pallet weight
                gridSolutions[0, iCol++] = new SourceGrid.Cells.ColumnHeader(string.Format(Resources.ID_PALLETWEIGHT, UnitsManager.MassUnitString))
                {
                    AutomaticSortEnabled = false, View = viewColumnHeader
                };
                // pallet height
                gridSolutions[0, iCol++] = new SourceGrid.Cells.ColumnHeader(string.Format(Resources.ID_PALLETHEIGHT, UnitsManager.LengthUnitString))
                {
                    AutomaticSortEnabled = false, View = viewColumnHeader
                };

                gridSolutions.AutoStretchRowsToFitHeight = true;
                SourceGrid.Cells.Controllers.ToolTipText toolTipController = new SourceGrid.Cells.Controllers.ToolTipText
                {
                    ToolTipTitle = "",
                    ToolTipIcon  = ToolTipIcon.None,
                    IsBalloon    = false
                };

                foreach (Layer2D layer in _layers)
                {
                    gridSolutions.Rows.Insert(++iRow);
                    iCol = 0;
                    // layer pattern
                    gridSolutions[iRow, iCol] = new SourceGrid.Cells.Image(TryGenerateLayerImage(layer))
                    {
                        ToolTipText = layer.Name
                    };
                    gridSolutions[iRow, iCol++].AddController(toolTipController);

                    using (FastEvaluatorLayer2Pallet evaluator = new FastEvaluatorLayer2Pallet(layer, SelectedPackable, SelectedPallet, BuildConstraintSet()))
                    {
                        // case count
                        gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(
                            string.Format(Resources.ID_CASECOUNTFORMATSTRING,
                                          evaluator.ItemCount,
                                          evaluator.NoItemsPerLayer,
                                          evaluator.NoLayers));
                        // volume efficiency
                        gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format(CultureInfo.InvariantCulture, "{0:0.##}", evaluator.VolumeEfficiency));
                        // pallet weight
                        gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format(CultureInfo.InvariantCulture, "{0:0.#}", evaluator.PalletWeight));
                        // pallet height
                        gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format(CultureInfo.InvariantCulture, "{0:0.##}", evaluator.PalletHeight));
                    }
                }
                gridSolutions.AutoStretchColumnsToFitWidth = true;
                gridSolutions.AutoSizeCells();
                gridSolutions.Columns.StretchToFit();

                // select first solution
                if (gridSolutions.RowsCount > 1)
                {
                    gridSolutions.Selection.SelectRow(1, true);
                }
                else
                {
                    graphCtrl.Invalidate();
                }
            }
            catch (Exception ex)
            {
                _log.Error(ex.Message);
            }
        }
        public override void UpdateGrid()
        {
            // remove all existing rows
            gridSolutions.Rows.Clear();
            // *** IViews
            // captionHeader
            SourceGrid.Cells.Views.RowHeader        captionHeader   = new SourceGrid.Cells.Views.RowHeader();
            DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader()
            {
                BackColor = Color.SteelBlue,
                Border    = DevAge.Drawing.RectangleBorder.NoBorder
            };
            captionHeader.Background    = veHeaderCaption;
            captionHeader.ForeColor     = Color.Black;
            captionHeader.Font          = new Font("Arial", GridFontSize, FontStyle.Bold);
            captionHeader.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
            // viewRowHeader
            SourceGrid.Cells.Views.RowHeader        viewRowHeader = new SourceGrid.Cells.Views.RowHeader();
            DevAge.Drawing.VisualElements.RowHeader backHeader    = new DevAge.Drawing.VisualElements.RowHeader()
            {
                BackColor = Color.LightGray,
                Border    = DevAge.Drawing.RectangleBorder.NoBorder
            };
            viewRowHeader.Background = backHeader;
            viewRowHeader.ForeColor  = Color.Black;
            viewRowHeader.Font       = new Font("Arial", GridFontSize, FontStyle.Regular);
            // viewNormal
            CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);

            // ***

            SourceGrid.Cells.RowHeader rowHeader;
            int iRow = -1;

            // case caption
            gridSolutions.Rows.Insert(++iRow);
            rowHeader = new SourceGrid.Cells.RowHeader(Resources.ID_CASECOUNT)
            {
                ColumnSpan = 2,
                View       = captionHeader
            };
            gridSolutions[iRow, 0] = rowHeader;
            // layer #
            gridSolutions.Rows.Insert(++iRow);
            rowHeader = new SourceGrid.Cells.RowHeader(Resources.ID_LAYERCOUNT)
            {
                View = viewRowHeader
            };
            gridSolutions[iRow, 0] = rowHeader;
            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(_solution.LayerCount);
            // interlayer #
            if (_solution.InterlayerCount > 0)
            {
                gridSolutions.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(Resources.ID_INTERLAYERCOUNT)
                {
                    View = viewRowHeader
                };
                gridSolutions[iRow, 0] = rowHeader;
                gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(_solution.InterlayerCount);
            }
            // *** Item # (recursive count)
            Packable content   = _analysis.Content;
            int      itemCount = _solution.ItemCount;
            int      number    = 1;

            do
            {
                itemCount *= number;
                gridSolutions.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(string.Format("{0} #", content.DetailedName))
                {
                    View = viewRowHeader
                };
                gridSolutions[iRow, 0] = rowHeader;
                gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(itemCount);
            }while (null != content && content.InnerContent(ref content, ref number));
            // ***
            // load dimensions
            BBox3D bboxLoad = _solution.BBoxLoad;

            // ---
            gridSolutions.Rows.Insert(++iRow);
            rowHeader = new SourceGrid.Cells.RowHeader(
                string.Format(Resources.ID_LOADDIMENSIONS, UnitsManager.LengthUnitString))
            {
                View = viewRowHeader
            };
            gridSolutions[iRow, 0] = rowHeader;
            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                string.Format(CultureInfo.InvariantCulture, "{0:0.#} x {1:0.#} x {2:0.#}", bboxLoad.Length, bboxLoad.Width, bboxLoad.Height));
            // net weight
            if (_solution.HasNetWeight)
            {
                rowHeader = new SourceGrid.Cells.RowHeader(
                    string.Format(Resources.ID_NETWEIGHT_WU, UnitsManager.MassUnitString))
                {
                    View = viewRowHeader
                };
                gridSolutions[iRow, 0] = rowHeader;
                gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.NetWeight));
            }
            // load weight
            gridSolutions.Rows.Insert(++iRow);
            rowHeader = new SourceGrid.Cells.RowHeader(
                string.Format(Resources.ID_LOADWEIGHT_WU, UnitsManager.MassUnitString))
            {
                View = viewRowHeader
            };
            gridSolutions[iRow, 0] = rowHeader;
            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.LoadWeight));
            // total weight
            gridSolutions.Rows.Insert(++iRow);
            rowHeader = new SourceGrid.Cells.RowHeader(
                string.Format(Resources.ID_TOTALWEIGHT_WU, UnitsManager.MassUnitString))
            {
                View = viewRowHeader
            };
            gridSolutions[iRow, 0] = rowHeader;
            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.Weight));
            // volume efficiency
            gridSolutions.Rows.Insert(++iRow);
            rowHeader = new SourceGrid.Cells.RowHeader(Resources.ID_VOLUMEEFFICIENCY)
            {
                View = viewRowHeader
            };
            gridSolutions[iRow, 0] = rowHeader;
            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.VolumeEfficiency));

            int noLayerTypesUsed = 0;

            for (int i = 0; i < _solution.Layers.Count; ++i)
            {
                noLayerTypesUsed += _solution.Layers[i].BoxCount > 0 ? 1 : 0;
            }

            // ### layers : begin
            for (int i = 0; i < _solution.NoLayerTypesUsed; ++i)
            {
                // layer caption
                gridSolutions.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(_solution.LayerCaption(i))
                {
                    ColumnSpan = 2,
                    View       = captionHeader
                };
                gridSolutions[iRow, 0] = rowHeader;

                // *** Item # (recursive count)
                content   = _analysis.Content;
                itemCount = _solution.LayerBoxCount(i);
                number    = 1;
                do
                {
                    itemCount *= number;

                    gridSolutions.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(
                        string.Format("{0} #", content.DetailedName))
                    {
                        View = viewRowHeader
                    };
                    gridSolutions[iRow, 0] = rowHeader;
                    gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(itemCount);
                }while (null != content && content.InnerContent(ref content, ref number));
                // ***

                // layer weight
                gridSolutions.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(string.Format(Resources.ID_WEIGHT_WU, UnitsManager.MassUnitString))
                {
                    View = viewRowHeader
                };
                gridSolutions[iRow, 0] = rowHeader;
                gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.LayerWeight(i)));
                // layer space
                gridSolutions.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(string.Format(Resources.ID_SPACES_WU, UnitsManager.LengthUnitString))
                {
                    View = viewRowHeader
                };
                gridSolutions[iRow, 0] = rowHeader;
                gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.LayerMaximumSpace(i)));
            }

            gridSolutions.AutoSizeCells();
            gridSolutions.Columns.StretchToFit();
            gridSolutions.AutoStretchColumnsToFitWidth = true;
            gridSolutions.Invalidate();
        }
        private void InitializeGrid()
        {
            // border
            DevAge.Drawing.BorderLine      border     = new DevAge.Drawing.BorderLine(Color.DarkBlue, 1);
            DevAge.Drawing.RectangleBorder cellBorder = new DevAge.Drawing.RectangleBorder(border, border);

            // views
            CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);

            viewNormal.Border = cellBorder;
            CheckboxBackColorAlternate viewNormalCheck = new CheckboxBackColorAlternate(Color.LightBlue, Color.White);

            viewNormalCheck.Border = cellBorder;

            // column header view
            SourceGrid.Cells.Views.ColumnHeader        viewColumnHeader = new SourceGrid.Cells.Views.ColumnHeader();
            DevAge.Drawing.VisualElements.ColumnHeader backHeader       = new DevAge.Drawing.VisualElements.ColumnHeader();
            backHeader.BackColor                   = Color.LightGray;
            backHeader.Border                      = DevAge.Drawing.RectangleBorder.NoBorder;
            viewColumnHeader.Background            = backHeader;
            viewColumnHeader.ForeColor             = Color.Black;
            viewColumnHeader.ElementSort.SortStyle = DevAge.Drawing.HeaderSortStyle.None;

            // row header view
            SourceGrid.Cells.Views.RowHeader        viewRowHeader = new SourceGrid.Cells.Views.RowHeader();
            DevAge.Drawing.VisualElements.RowHeader backRowHeader = new DevAge.Drawing.VisualElements.RowHeader();
            backRowHeader.BackColor  = Color.LightGray;
            backRowHeader.Border     = DevAge.Drawing.RectangleBorder.NoBorder;
            viewRowHeader.Background = backRowHeader;
            viewRowHeader.ForeColor  = Color.Black;

            // create the grid
            gridDynamicBCT.BorderStyle = BorderStyle.FixedSingle;

            gridDynamicBCT.ColumnsCount = McKeeFormula.HumidityCoefDictionary.Count + 1;
            gridDynamicBCT.RowsCount    = McKeeFormula.StockCoefDictionary.Count + 1;

            // column header
            SourceGrid.Cells.ColumnHeader columnHeader;
            int indexCol = 0;

            columnHeader = new SourceGrid.Cells.ColumnHeader("Humidity (%)/Storage");
            columnHeader.AutomaticSortEnabled = false;
            columnHeader.View             = viewColumnHeader;
            gridDynamicBCT[0, indexCol++] = columnHeader;

            foreach (string key in McKeeFormula.HumidityCoefDictionary.Keys)
            {
                columnHeader = new SourceGrid.Cells.ColumnHeader(key);
                columnHeader.AutomaticSortEnabled = false;
                columnHeader.View             = viewColumnHeader;
                gridDynamicBCT[0, indexCol++] = columnHeader;
            }

            SourceGrid.Cells.RowHeader rowHeader;
            int indexRow = 1;

            foreach (string key in McKeeFormula.StockCoefDictionary.Keys)
            {
                rowHeader      = new SourceGrid.Cells.RowHeader(key);
                rowHeader.View = viewRowHeader;
                gridDynamicBCT[indexRow++, 0] = rowHeader;
            }

            gridDynamicBCT.AutoStretchColumnsToFitWidth = true;
            gridDynamicBCT.AutoSizeCells();
            gridDynamicBCT.Columns.StretchToFit();
        }
Exemple #10
0
        private void FillGrid()
        {
            // clear grid
            gridSolutions.Rows.Clear();
            // border
            gridSolutions.BorderStyle  = BorderStyle.FixedSingle;
            gridSolutions.ColumnsCount = 2;
            gridSolutions.FixedColumns = 1;

            // header
            SourceGrid.Cells.RowHeader rowHeader;

            SourceGrid.Cells.Views.RowHeader        viewRowHeader = new SourceGrid.Cells.Views.RowHeader();
            DevAge.Drawing.VisualElements.RowHeader backHeader    = new DevAge.Drawing.VisualElements.RowHeader();
            backHeader.BackColor     = Color.LightGray;
            backHeader.Border        = DevAge.Drawing.RectangleBorder.NoBorder;
            viewRowHeader.Background = backHeader;
            viewRowHeader.ForeColor  = Color.Black;
            viewRowHeader.Font       = new Font("Arial", 10, FontStyle.Regular);

            int iRow = -1;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader("Layer #");
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader("Interlayer #");
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader("Case #");
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader(string.Format("Outer dimensions\n({0} x {0} x {0})", UnitsManager.LengthUnitString));
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader(string.Format("Load dimensions\n({0} x {0} x {0})", UnitsManager.LengthUnitString));
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader(string.Format("Load Weight ({0})", UnitsManager.MassUnitString));
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader(string.Format("Total weight ({0})", UnitsManager.MassUnitString));
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;

            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader("Vol. efficiency (%)");
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;

            gridSolutions.AutoSizeCells();
            gridSolutions.Columns.StretchToFit();

            // select first solution
            gridSolutions.AutoStretchColumnsToFitWidth = true;
            gridSolutions.AutoSizeCells();
            gridSolutions.Invalidate();
        }
Exemple #11
0
        private void UpdateGrid()
        {
            try
            {
                // sanity check
                if (gridSolution.ColumnsCount < 2)
                {
                    return;
                }
                // remove all existing rows
                gridSolution.Rows.Clear();
                // *** IViews
                // captionHeader
                SourceGrid.Cells.Views.RowHeader        captionHeader   = new SourceGrid.Cells.Views.RowHeader();
                DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader();
                veHeaderCaption.BackColor   = Color.SteelBlue;
                veHeaderCaption.Border      = DevAge.Drawing.RectangleBorder.NoBorder;
                captionHeader.Background    = veHeaderCaption;
                captionHeader.ForeColor     = Color.Black;
                captionHeader.Font          = new Font("Arial", GridFontSize, FontStyle.Bold);
                captionHeader.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
                // viewRowHeader
                SourceGrid.Cells.Views.RowHeader        viewRowHeader = new SourceGrid.Cells.Views.RowHeader();
                DevAge.Drawing.VisualElements.RowHeader backHeader    = new DevAge.Drawing.VisualElements.RowHeader();
                backHeader.BackColor     = Color.LightGray;
                backHeader.Border        = DevAge.Drawing.RectangleBorder.NoBorder;
                viewRowHeader.Background = backHeader;
                viewRowHeader.ForeColor  = Color.Black;
                viewRowHeader.Font       = new Font("Arial", GridFontSize, FontStyle.Regular);
                // viewNormal
                CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);
                // ***

                Solution solution = _analysis.Solution;

                SourceGrid.Cells.RowHeader rowHeader;
                int iRow = -1;
                // pallet caption
                gridSolution.Rows.Insert(++iRow);
                rowHeader             = new SourceGrid.Cells.RowHeader(Resources.ID_PALLET);
                rowHeader.ColumnSpan  = 2;
                rowHeader.View        = captionHeader;
                gridSolution[iRow, 0] = rowHeader;
                // layer #
                gridSolution.Rows.Insert(++iRow);
                rowHeader             = new SourceGrid.Cells.RowHeader(Resources.ID_LAYERNUMBER);
                rowHeader.View        = viewRowHeader;
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(solution.LayerCount);
                // interlayer #
                if (solution.InterlayerCount > 0)
                {
                    gridSolution.Rows.Insert(++iRow);
                    rowHeader             = new SourceGrid.Cells.RowHeader(Resources.ID_INTERLAYERNUMBER);
                    rowHeader.View        = viewRowHeader;
                    gridSolution[iRow, 0] = rowHeader;
                    gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(solution.InterlayerCount);
                }
                // *** Item # (Recursive count)
                Packable content   = _analysis.Content;
                int      itemCount = solution.ItemCount;
                int      number    = 1;
                do
                {
                    itemCount *= number;
                    gridSolution.Rows.Insert(++iRow);
                    rowHeader             = new SourceGrid.Cells.RowHeader(string.Format("{0} #", content.DetailedName));
                    rowHeader.View        = viewRowHeader;
                    gridSolution[iRow, 0] = rowHeader;
                    gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(itemCount);
                }while (null != content && content.InnerContent(ref content, ref number));
                // ***
                // outer dimensions
                BBox3D bboxGlobal = solution.BBoxGlobal;
                // ---
                gridSolution.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(
                    string.Format(Resources.ID_OUTERDIMENSIONS, Environment.NewLine, UnitsManager.LengthUnitString));
                rowHeader.View        = viewRowHeader;
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#} x {1:0.#} x {2:0.#}", bboxGlobal.Length, bboxGlobal.Width, bboxGlobal.Height));
                // load dimensions
                BBox3D bboxLoad = solution.BBoxLoad;
                // ---
                gridSolution.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(
                    string.Format(Resources.ID_LOADDIMENSIONS, Environment.NewLine, UnitsManager.LengthUnitString));
                rowHeader.View        = viewRowHeader;
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#} x {1:0.#} x {2:0.#}", bboxLoad.Length, bboxLoad.Width, bboxLoad.Height));
                // net weight
                if (solution.HasNetWeight)
                {
                    gridSolution.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(
                        string.Format(Resources.ID_NETWEIGHT_WU, UnitsManager.MassUnitString));
                    rowHeader.View        = viewRowHeader;
                    gridSolution[iRow, 0] = rowHeader;
                    gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                        string.Format(CultureInfo.InvariantCulture, "{0:0.#}", solution.NetWeight));
                }
                // load weight
                gridSolution.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(
                    string.Format(Resources.ID_LOADWEIGHT_WU, UnitsManager.MassUnitString));
                rowHeader.View        = viewRowHeader;
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", solution.LoadWeight));
                // total weight
                gridSolution.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(
                    string.Format(Resources.ID_TOTALWEIGHT_WU, UnitsManager.MassUnitString));
                rowHeader.View        = viewRowHeader;
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", solution.Weight));
                // volume efficiency
                gridSolution.Rows.Insert(++iRow);
                rowHeader             = new SourceGrid.Cells.RowHeader(Resources.ID_VOLUMEEFFICIENCY);
                rowHeader.View        = viewRowHeader;
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", solution.VolumeEfficiency));

                int noLayerTypesUsed = solution.NoLayerTypesUsed;

                // ### layers : begin
                for (int i = 0; i < solution.Layers.Count; ++i)
                {
                    List <int> layerIndexes = solution.LayerTypeUsed(i);
                    if (0 == layerIndexes.Count)
                    {
                        continue;
                    }

                    // layer caption
                    gridSolution.Rows.Insert(++iRow);
                    rowHeader             = new SourceGrid.Cells.RowHeader(solution.LayerCaption(i));
                    rowHeader.ColumnSpan  = 2;
                    rowHeader.View        = captionHeader;
                    gridSolution[iRow, 0] = rowHeader;

                    // *** Item # (recursive count)
                    content   = _analysis.Content;
                    itemCount = solution.LayerBoxCount(i);
                    number    = 1;
                    do
                    {
                        itemCount *= number;

                        gridSolution.Rows.Insert(++iRow);
                        rowHeader = new SourceGrid.Cells.RowHeader(
                            string.Format("{0} #", content.DetailedName));
                        rowHeader.View        = viewRowHeader;
                        gridSolution[iRow, 0] = rowHeader;
                        gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(itemCount);
                    }while (null != content && content.InnerContent(ref content, ref number));
                    // ***

                    // layer weight
                    gridSolution.Rows.Insert(++iRow);
                    rowHeader             = new SourceGrid.Cells.RowHeader(string.Format(Resources.ID_WEIGHT_WU, UnitsManager.MassUnitString));
                    rowHeader.View        = viewRowHeader;
                    gridSolution[iRow, 0] = rowHeader;
                    gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                        string.Format(CultureInfo.InvariantCulture, "{0:0.#}", solution.LayerWeight(i)));
                    // layer space
                    gridSolution.Rows.Insert(++iRow);
                    rowHeader             = new SourceGrid.Cells.RowHeader("Spaces");
                    rowHeader.View        = viewRowHeader;
                    gridSolution[iRow, 0] = rowHeader;
                    gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                        string.Format(CultureInfo.InvariantCulture, "{0:0.#}", solution.LayerMaximumSpace(i)));
                }
                // ### layers : end

                gridSolution.AutoSizeCells();
                gridSolution.Columns.StretchToFit();
                gridSolution.AutoStretchColumnsToFitWidth = true;
                gridSolution.Invalidate();
            }
            catch (Exception ex)
            {
                _log.Error(ex.ToString());
            }
        }
Exemple #12
0
        public virtual void UpdateGrid()
        {
            try
            {
                // sanity check
                if (gridSolutions.ColumnsCount < 2)
                {
                    return;
                }
                // remove all existing rows
                gridSolutions.Rows.Clear();
                // *** IViews
                // caption header
                DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader()
                {
                    BackColor = Color.SteelBlue,
                    Border    = DevAge.Drawing.RectangleBorder.NoBorder
                };
                SourceGrid.Cells.Views.RowHeader captionHeader = new SourceGrid.Cells.Views.RowHeader
                {
                    Background    = veHeaderCaption,
                    ForeColor     = Color.Black,
                    Font          = new Font("Arial", GridFontSize + 2, FontStyle.Bold),
                    TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter
                };
                SourceGrid.Cells.Views.RowHeader captionHeader2 = new SourceGrid.Cells.Views.RowHeader
                {
                    Background    = veHeaderCaption,
                    ForeColor     = Color.Black,
                    Font          = new Font("Arial", GridFontSize, FontStyle.Regular),
                    TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter
                };
                // viewRowHeader
                DevAge.Drawing.VisualElements.RowHeader backHeader = new DevAge.Drawing.VisualElements.RowHeader()
                {
                    BackColor = Color.LightGray,
                    Border    = DevAge.Drawing.RectangleBorder.NoBorder
                };
                SourceGrid.Cells.Views.RowHeader viewRowHeader = new SourceGrid.Cells.Views.RowHeader
                {
                    Background = backHeader,
                    ForeColor  = Color.Black,
                    Font       = new Font("Arial", GridFontSize, FontStyle.Regular)
                };
                // viewNormal
                CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);
                // ***

                int iRow = -1;
                // ### sol items : begin
                int solItemIndex = 0;
                foreach (var solItem in Solution.SolItems)
                {
                    gridSolutions.Rows.Insert(++iRow);
                    var rowHeader = new SourceGrid.Cells.RowHeader(string.Format(Resources.ID_PALLET_NUMBER, solItemIndex))
                    {
                        ColumnSpan = 2,
                        View       = captionHeader
                    };
                    gridSolutions[iRow, 0] = rowHeader;

                    gridSolutions.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(Resources.ID_ITEMS)
                    {
                        ColumnSpan = 2,
                        View       = captionHeader2
                    };
                    gridSolutions[iRow, 0] = rowHeader;

                    var dictNameCount = solItem.SolutionItems;
                    foreach (int containedItemIndex in dictNameCount.Keys)
                    {
                        // name
                        string name = string.Empty;
                        if (Analysis.ContentTypeByIndex(containedItemIndex) is Packable packable)
                        {
                            name = packable.Name;
                        }
                        // count
                        int count = dictNameCount[containedItemIndex];

                        if (count > 0)
                        {
                            gridSolutions.Rows.Insert(++iRow);
                            var itemHeader = new SourceGrid.Cells.RowHeader(name)
                            {
                                View = viewRowHeader
                            };
                            gridSolutions[iRow, 0] = itemHeader;
                            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell($"{count}");
                        }
                    }
                    // pallet data header
                    gridSolutions.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(Resources.ID_PALLETDATA)
                    {
                        ColumnSpan = 2,
                        View       = captionHeader2
                    };
                    gridSolutions[iRow, 0] = rowHeader;
                    // ***
                    // outer dimensions
                    BBox3D bboxGlobal = Solution.BBoxGlobal(solItemIndex);
                    // ---
                    gridSolutions.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(
                        string.Format(Resources.ID_OUTERDIMENSIONS, UnitsManager.LengthUnitString))
                    {
                        View = viewRowHeader
                    };
                    gridSolutions[iRow, 0] = rowHeader;
                    gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                        string.Format(CultureInfo.InvariantCulture
                                      , "{0:0.#} x {1:0.#} x {2:0.#}"
                                      , bboxGlobal.Length, bboxGlobal.Width, bboxGlobal.Height));
                    // load dimensions
                    BBox3D bboxLoad = Solution.BBoxLoad(solItemIndex);
                    gridSolutions.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(
                        string.Format(Resources.ID_LOADDIMENSIONS, UnitsManager.LengthUnitString))
                    {
                        View = viewRowHeader
                    };
                    gridSolutions[iRow, 0] = rowHeader;
                    gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                        string.Format(CultureInfo.InvariantCulture
                                      , "{0:0.#} x {1:0.#} x {2:0.#}"
                                      , bboxLoad.Length, bboxLoad.Width, bboxLoad.Height));
                    // ***
                    // ***
                    // load weight
                    gridSolutions.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(
                        string.Format(Resources.ID_LOADWEIGHT_WU, UnitsManager.MassUnitString))
                    {
                        View = viewRowHeader
                    };
                    gridSolutions[iRow, 0] = rowHeader;
                    gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                        string.Format(CultureInfo.InvariantCulture, "{0:0.#}", Solution.LoadWeight(solItemIndex)));

                    // total weight
                    gridSolutions.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(
                        string.Format(Resources.ID_PALLETWEIGHT_WU, UnitsManager.MassUnitString))
                    {
                        View = viewRowHeader
                    };
                    gridSolutions[iRow, 0] = rowHeader;
                    gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                        string.Format(CultureInfo.InvariantCulture
                                      , "{0:0.#}"
                                      , Solution.Weight(solItemIndex)));
                    // ***
                    // increment sol item index
                    ++solItemIndex;
                }
                // ### sol items : end
                gridSolutions.AutoSizeCells();
                gridSolutions.AutoStretchColumnsToFitWidth = true;
                gridSolutions.Invalidate();
            }
            catch (Exception ex)
            {
                _log.Error(ex.ToString());
            }
        }
Exemple #13
0
        private void GridInitialize(SourceGrid.Grid grid, List <string> captions)
        {
            // remove all existing rows
            grid.Rows.Clear();
            // *** IViews
            // captionHeader
            SourceGrid.Cells.Views.RowHeader        captionHeader   = new SourceGrid.Cells.Views.RowHeader();
            DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader()
            {
                BackColor = Color.SteelBlue,
                Border    = DevAge.Drawing.RectangleBorder.NoBorder
            };
            captionHeader.Background    = veHeaderCaption;
            captionHeader.ForeColor     = Color.Black;
            captionHeader.Font          = new Font("Arial", 10, FontStyle.Bold);
            captionHeader.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
            // viewColumnHeader
            SourceGrid.Cells.Views.ColumnHeader        viewColumnHeader = new SourceGrid.Cells.Views.ColumnHeader();
            DevAge.Drawing.VisualElements.ColumnHeader backHeader       = new DevAge.Drawing.VisualElements.ColumnHeader()
            {
                BackColor = Color.LightGray,
                Border    = DevAge.Drawing.RectangleBorder.NoBorder
            };
            viewColumnHeader.Background            = backHeader;
            viewColumnHeader.ForeColor             = Color.Black;
            viewColumnHeader.Font                  = new Font("Arial", 10, FontStyle.Regular);
            viewColumnHeader.ElementSort.SortStyle = DevAge.Drawing.HeaderSortStyle.None;
            // viewNormal
            CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);

            // ***
            // set first row
            grid.BorderStyle  = BorderStyle.FixedSingle;
            grid.ColumnsCount = 4 + captions.Count;
            grid.FixedRows    = 1;
            grid.Rows.Insert(0);
            // header
            int iCol = 0;

            SourceGrid.Cells.ColumnHeader columnHeader;
            // name
            columnHeader = new SourceGrid.Cells.ColumnHeader(Properties.Resources.ID_NAME)
            {
                AutomaticSortEnabled = false,
                View = viewColumnHeader
            };
            grid[0, iCol++] = columnHeader;
            // description
            columnHeader = new SourceGrid.Cells.ColumnHeader(Properties.Resources.ID_DESCRIPTION)
            {
                AutomaticSortEnabled = false,
                View = viewColumnHeader
            };
            grid[0, iCol++] = columnHeader;
            // listed captions
            foreach (string s in captions)
            {
                columnHeader = new SourceGrid.Cells.ColumnHeader(s)
                {
                    AutomaticSortEnabled = false,
                    View = viewColumnHeader
                };
                grid[0, iCol++] = columnHeader;
            }
            // delete
            columnHeader = new SourceGrid.Cells.ColumnHeader(Properties.Resources.ID_DELETE)
            {
                AutomaticSortEnabled = false,
                View = viewColumnHeader
            };
            grid[0, iCol++] = columnHeader;
        }
        private void InitializeGrid()
        {
            if (m_IsInitialized)
            {
                return;
            }

            // 設定 grid 預設的欄寬與列高
            brGrid.DefaultWidth  = 30;
            brGrid.DefaultHeight = 20;

            // 設定 grid 列數與行數。
            int maxCol = m_BrDoc.CellsPerLine;              // brDoc.LongestLine.Words.Count;

            brGrid.Redim(m_BrDoc.Lines.Count * 3 + FixedRows, maxCol + FixedColumns);

            // 設定欄寬最小限制,以免呼叫 AutoSizeView 時,欄寬被縮得太小。
            for (int i = 1; i < brGrid.ColumnsCount; i++)
            {
                brGrid.Columns[i].MinimalWidth = 24;
            }
            brGrid.Columns[0].MinimalWidth = 40;                // 第 0 欄要顯示列號,需要寬些.

            // 標題欄
            if (m_HeaderView == null)
            {
                m_HeaderView      = new SourceGrid.Cells.Views.Header();
                m_HeaderView.Font = new Font(brGrid.Font, FontStyle.Regular);
            }

            if (m_HeaderView2 == null)
            {
                m_HeaderView2 = new SourceGrid.Cells.Views.RowHeader();
                DevAge.Drawing.VisualElements.RowHeader backHeader = new DevAge.Drawing.VisualElements.RowHeader();
                backHeader.BackColor     = Color.Blue;
                m_HeaderView2.Background = backHeader;
                m_HeaderView2.Font       = m_HeaderView.Font;
            }

            CreateFixedArea();

            // Font objects

            if (m_PhonFont == null)
            {
                m_PhonFont = new Font("PMingLiU", DualEditForm.DefaultPhoneticFontSize, FontStyle.Regular, GraphicsUnit.Point, 1);
            }

            if (m_MingFont == null)
            {
                m_MingFont = new Font("Arial Unicode MS", DualEditForm.DefaultTextFontSize, FontStyle.Regular, GraphicsUnit.Point, 0);
                // Note: 原本為新細明體,可是為了顯示英文音標等特殊符號,必須使用 Arial Unicode MS 字型。
            }
            if (m_MingFontCJK == null)
            {
                m_MingFontCJK = new Font("PMingLiU", DualEditForm.DefaultTextFontSize, FontStyle.Regular, GraphicsUnit.Point, 1);
            }

            // view for 點字
            if (m_BrView == null)
            {
                m_BrView              = new SourceGrid.Cells.Views.Cell();
                m_BrView.BackColor    = Color.Snow;
                m_BrView.Font         = new Font("SimBraille", DualEditForm.DefaultBrailleFontSize);
                m_BrView.TrimmingMode = SourceGrid.TrimmingMode.None;
            }

            // view for 明眼字
            if (m_MingView == null)
            {
                m_MingView                  = new SourceGrid.Cells.Views.Cell();
                m_MingView.BackColor        = Color.Snow;
                m_MingView.Font             = m_MingFont;
                m_MingView.ElementText.Font = m_MingFont;
            }

            if (m_MingViewCJK == null)
            {
                m_MingViewCJK                  = new SourceGrid.Cells.Views.Cell();
                m_MingViewCJK.BackColor        = Color.Snow;
                m_MingViewCJK.Font             = m_MingFontCJK;
                m_MingViewCJK.ElementText.Font = m_MingFontCJK;
            }

            // view for 注音符號
            if (m_PhonView == null)
            {
                m_PhonView              = new SourceGrid.Cells.Views.Cell();
                m_PhonView.BackColor    = Color.YellowGreen;
                m_PhonView.Font         = m_PhonFont;
                m_PhonView.TrimmingMode = SourceGrid.TrimmingMode.None;
            }

            // view for 破音字的注音符號
            if (m_PhonView2 == null)
            {
                m_PhonView2              = new SourceGrid.Cells.Views.Cell();
                m_PhonView2.BackColor    = Color.Yellow;
                m_PhonView2.Font         = m_PhonFont;
                m_PhonView2.TrimmingMode = SourceGrid.TrimmingMode.None;
            }
            // view for 容易判斷錯誤的破音字注音符號
            if (m_PhonView3 == null)
            {
                m_PhonView3              = new SourceGrid.Cells.Views.Cell();
                m_PhonView3.BackColor    = Color.Red;
                m_PhonView3.Font         = m_PhonFont;
                m_PhonView3.TrimmingMode = SourceGrid.TrimmingMode.None;
            }

            // 設置 controllers
            if (m_MenuController == null)
            {
                m_MenuController = new PopupMenuController();
                m_MenuController.PopupMenuClick += new SourceGrid.CellContextEventHandler(GridMenu_Click);
            }

            if (m_ClickController == null)
            {
                m_ClickController = new CellClickEvent(this);
            }

            m_IsInitialized = true;
        }
        private void UpdateGrid()
        {
            try
            {
                // sanity check
                if (gridSolution.ColumnsCount < 2)
                {
                    return;
                }
                // remove all existing rows
                gridSolution.Rows.Clear();
                // *** IViews
                // captionHeader
                SourceGrid.Cells.Views.RowHeader        captionHeader   = new SourceGrid.Cells.Views.RowHeader();
                DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader()
                {
                    BackColor = Color.SteelBlue,
                    Border    = DevAge.Drawing.RectangleBorder.NoBorder
                };
                captionHeader.Background    = veHeaderCaption;
                captionHeader.ForeColor     = Color.Black;
                captionHeader.Font          = new Font("Arial", GridFontSize, FontStyle.Bold);
                captionHeader.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
                // viewRowHeader
                SourceGrid.Cells.Views.RowHeader        viewRowHeader = new SourceGrid.Cells.Views.RowHeader();
                DevAge.Drawing.VisualElements.RowHeader backHeader    = new DevAge.Drawing.VisualElements.RowHeader()
                {
                    BackColor = Color.LightGray,
                    Border    = DevAge.Drawing.RectangleBorder.NoBorder
                };
                viewRowHeader.Background = backHeader;
                viewRowHeader.ForeColor  = Color.Black;
                viewRowHeader.Font       = new Font("Arial", GridFontSize, FontStyle.Regular);
                // viewNormal
                CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);
                // ***

                SourceGrid.Cells.RowHeader rowHeader;
                int iRow = -1;
                // pallet caption
                gridSolution.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader("Truck")
                {
                    ColumnSpan = 2,
                    View       = captionHeader
                };
                gridSolution[iRow, 0] = rowHeader;
                // layer #
                gridSolution.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader("Layer #")
                {
                    View = viewRowHeader
                };
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(_solution.LayerCount);
                // *** Item # (Recursive count)
                Packable content   = _analysis.Content;
                int      itemCount = _solution.ItemCount;
                int      number    = 1;
                do
                {
                    itemCount *= number;
                    gridSolution.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(string.Format("{0} #", content.DetailedName))
                    {
                        View = viewRowHeader
                    };
                    gridSolution[iRow, 0] = rowHeader;
                    gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(itemCount);
                }while (null != content && content.InnerContent(ref content, ref number));
                // ***
                // load dimensions
                BBox3D bboxLoad = _solution.BBoxLoad;
                // ---
                gridSolution.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(
                    string.Format(Resources.ID_LOADDIMENSIONS, UnitsManager.LengthUnitString))
                {
                    View = viewRowHeader
                };
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#} x {1:0.#} x {2:0.#}", bboxLoad.Length, bboxLoad.Width, bboxLoad.Height));
                // net weight
                if (_solution.HasNetWeight)
                {
                    gridSolution.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(
                        string.Format(Resources.ID_NETWEIGHT_WU, UnitsManager.MassUnitString))
                    {
                        View = viewRowHeader
                    };
                    gridSolution[iRow, 0] = rowHeader;
                    gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                        string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.NetWeight));
                }
                // load weight
                gridSolution.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(
                    string.Format(Resources.ID_LOADWEIGHT_WU, UnitsManager.MassUnitString))
                {
                    View = viewRowHeader
                };
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.LoadWeight));
                // total weight
                gridSolution.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(
                    string.Format(Resources.ID_TOTALWEIGHT_WU, UnitsManager.MassUnitString))
                {
                    View = viewRowHeader
                };
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.Weight));
                // volume efficiency
                gridSolution.Rows.Insert(++iRow);
                rowHeader = new SourceGrid.Cells.RowHeader(Resources.ID_VOLUMEEFFICIENCY)
                {
                    View = viewRowHeader
                };
                gridSolution[iRow, 0] = rowHeader;
                gridSolution[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.VolumeEfficiency));

                // ### layers : begin
                for (int i = 0; i < _solution.Layers.Count; ++i)
                {
                }
                // ### layers : end
                gridSolution.AutoSizeCells();
                gridSolution.Columns.StretchToFit();
                gridSolution.AutoStretchColumnsToFitWidth = true;
                gridSolution.Invalidate();
            }
            catch (Exception ex)
            {
                _log.Error(ex.ToString());
            }
        }
        private void FillGrid()
        {
            try
            {
                // remove all existing rows
                gridSolutions.Rows.Clear();
                // *** IViews
                // captionHeader
                SourceGrid.Cells.Views.RowHeader        captionHeader   = new SourceGrid.Cells.Views.RowHeader();
                DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader();
                veHeaderCaption.BackColor   = Color.SteelBlue;
                veHeaderCaption.Border      = DevAge.Drawing.RectangleBorder.NoBorder;
                captionHeader.Background    = veHeaderCaption;
                captionHeader.ForeColor     = Color.Black;
                captionHeader.Font          = new Font("Arial", GridFontSize, FontStyle.Bold);
                captionHeader.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
                // viewRowHeader
                SourceGrid.Cells.Views.ColumnHeader        viewColumnHeader = new SourceGrid.Cells.Views.ColumnHeader();
                DevAge.Drawing.VisualElements.ColumnHeader backHeader       = new DevAge.Drawing.VisualElements.ColumnHeader();
                backHeader.BackColor                   = Color.LightGray;
                backHeader.Border                      = DevAge.Drawing.RectangleBorder.NoBorder;
                viewColumnHeader.Background            = backHeader;
                viewColumnHeader.ForeColor             = Color.Black;
                viewColumnHeader.Font                  = new Font("Arial", GridFontSize, FontStyle.Regular);
                viewColumnHeader.ElementSort.SortStyle = DevAge.Drawing.HeaderSortStyle.None;
                // viewNormal
                CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);
                // ***
                // set first row
                gridSolutions.BorderStyle  = BorderStyle.FixedSingle;
                gridSolutions.ColumnsCount = 7;
                gridSolutions.FixedRows    = 1;
                gridSolutions.Rows.Insert(0);
                // header
                int iCol = 0;
                SourceGrid.Cells.ColumnHeader columnHeader;
                // A1xA2xA3
                columnHeader = new SourceGrid.Cells.ColumnHeader("A1 x A2 x A3");
                columnHeader.AutomaticSortEnabled = false;
                columnHeader.View        = viewColumnHeader;
                gridSolutions[0, iCol++] = columnHeader;
                // dimensions
                columnHeader = new SourceGrid.Cells.ColumnHeader(
                    string.Format(Properties.Resources.ID_DIMENSIONS, UnitsManager.LengthUnitString));
                columnHeader.AutomaticSortEnabled = false;
                columnHeader.View        = viewColumnHeader;
                gridSolutions[0, iCol++] = columnHeader;
                // weight
                columnHeader = new SourceGrid.Cells.ColumnHeader(string.Format(Properties.Resources.ID_WEIGHT_WU, UnitsManager.MassUnitString));
                columnHeader.AutomaticSortEnabled = false;
                columnHeader.View        = viewColumnHeader;
                gridSolutions[0, iCol++] = columnHeader;
                // #packs
                columnHeader = new SourceGrid.Cells.ColumnHeader("#");
                columnHeader.AutomaticSortEnabled = false;
                columnHeader.View        = viewColumnHeader;
                gridSolutions[0, iCol++] = columnHeader;
                // weight
                columnHeader = new SourceGrid.Cells.ColumnHeader(string.Format(Properties.Resources.ID_PALLETWEIGHT, UnitsManager.MassUnitString));
                columnHeader.AutomaticSortEnabled = false;
                columnHeader.View        = viewColumnHeader;
                gridSolutions[0, iCol++] = columnHeader;
                // efficiency
                columnHeader = new SourceGrid.Cells.ColumnHeader(Properties.Resources.ID_EFFICIENCYPERCENTAGE);
                columnHeader.AutomaticSortEnabled = false;
                columnHeader.View        = viewColumnHeader;
                gridSolutions[0, iCol++] = columnHeader;
                // maximum space
                columnHeader = new SourceGrid.Cells.ColumnHeader(string.Format(Properties.Resources.ID_MAXIMUMSPACE, UnitsManager.LengthUnitString));
                columnHeader.AutomaticSortEnabled = false;
                columnHeader.View        = viewColumnHeader;
                gridSolutions[0, iCol++] = columnHeader;

                int iRow = 0;
                foreach (AnalysisHomo analysis in _analyses)
                {
                    AnalysisCasePallet analysisCasePallet = analysis as AnalysisCasePallet;
                    PackProperties     pack = analysisCasePallet.Content as PackProperties;
                    int layerCount          = analysisCasePallet.Solution.Layers.Count;
                    if (layerCount < 1)
                    {
                        continue;
                    }
                    int    packPerLayerCount = analysisCasePallet.Solution.Layers[0].BoxCount;
                    int    itemCount         = analysisCasePallet.Solution.ItemCount;
                    double palletWeight      = analysisCasePallet.Solution.Weight;
                    double volumeEfficiency  = analysisCasePallet.Solution.VolumeEfficiency;
                    double maximumSpace      = analysisCasePallet.Solution.LayerCount > 0 ? analysisCasePallet.Solution.LayerMaximumSpace(0) : 0;


                    gridSolutions.Rows.Insert(++iRow);
                    iCol = 0;
                    gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format("{0} x {1} x {2}",
                                                                                          pack.Arrangement.Length, pack.Arrangement.Width, pack.Arrangement.Height));
                    gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format("{0:0.#} x {1:0.#} x {2:0.#}",
                                                                                          pack.OuterDimensions.X, pack.OuterDimensions.Y, pack.OuterDimensions.Z));
                    gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format("{0:0.###}",
                                                                                          pack.Weight));
                    gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format("{0} = {1} x {2}", itemCount, packPerLayerCount, layerCount));
                    gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format("{0:0.###}", palletWeight));
                    gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format("{0:0.#}", volumeEfficiency));
                    gridSolutions[iRow, iCol++] = new SourceGrid.Cells.Cell(string.Format("{0:0.#}", maximumSpace));
                }

                gridSolutions.AutoStretchColumnsToFitWidth = true;
                gridSolutions.AutoSizeCells();
                gridSolutions.Columns.StretchToFit();

                // select first solution
                if (gridSolutions.RowsCount > 1)
                {
                    gridSolutions.Selection.SelectRow(1, true);
                }
                else
                {
                    // grid empty -> clear drawing
                    _selectedAnalysis = null;
                    graphCtrlPack.Invalidate();
                    graphCtrlSolution.Invalidate();
                }
            }
            catch (Exception ex)
            {
                _log.Error(ex.Message);
            }
        }
        public override void UpdateGrid()
        {
            // remove all existing rows
            gridSolutions.Rows.Clear();
            // *** IViews
            // captionHeader
            SourceGrid.Cells.Views.RowHeader        captionHeader   = new SourceGrid.Cells.Views.RowHeader();
            DevAge.Drawing.VisualElements.RowHeader veHeaderCaption = new DevAge.Drawing.VisualElements.RowHeader();
            veHeaderCaption.BackColor   = Color.SteelBlue;
            veHeaderCaption.Border      = DevAge.Drawing.RectangleBorder.NoBorder;
            captionHeader.Background    = veHeaderCaption;
            captionHeader.ForeColor     = Color.Black;
            captionHeader.Font          = new Font("Arial", 10, FontStyle.Bold);
            captionHeader.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
            // viewRowHeader
            SourceGrid.Cells.Views.RowHeader        viewRowHeader = new SourceGrid.Cells.Views.RowHeader();
            DevAge.Drawing.VisualElements.RowHeader backHeader    = new DevAge.Drawing.VisualElements.RowHeader();
            backHeader.BackColor     = Color.LightGray;
            backHeader.Border        = DevAge.Drawing.RectangleBorder.NoBorder;
            viewRowHeader.Background = backHeader;
            viewRowHeader.ForeColor  = Color.Black;
            viewRowHeader.Font       = new Font("Arial", 10, FontStyle.Regular);
            // viewNormal
            CellBackColorAlternate viewNormal = new CellBackColorAlternate(Color.LightBlue, Color.White);

            // ***

            SourceGrid.Cells.RowHeader rowHeader;
            int iRow = -1;

            // case caption
            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader("Case");
            rowHeader.ColumnSpan   = 2;
            rowHeader.View         = captionHeader;
            gridSolutions[iRow, 0] = rowHeader;
            // layer #
            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader("Layer #");
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;
            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(_solution.LayerCount);
            // interlayer #
            if (_solution.InterlayerCount > 0)
            {
                gridSolutions.Rows.Insert(++iRow);
                rowHeader              = new SourceGrid.Cells.RowHeader("Interlayer #");
                rowHeader.View         = viewRowHeader;
                gridSolutions[iRow, 0] = rowHeader;
                gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(_solution.InterlayerCount);
            }
            // *** Item # (recursive count)
            Packable content   = _analysis.Content;
            int      itemCount = _solution.ItemCount;
            int      number    = 1;

            do
            {
                itemCount *= number;
                gridSolutions.Rows.Insert(++iRow);
                rowHeader              = new SourceGrid.Cells.RowHeader(string.Format("{0} #", content.DetailedName));
                rowHeader.View         = viewRowHeader;
                gridSolutions[iRow, 0] = rowHeader;
                gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(itemCount);
            }while (null != content && content.InnerContent(ref content, ref number));
            // ***
            // load dimensions
            BBox3D bboxLoad = _solution.BBoxLoad;

            // ---
            gridSolutions.Rows.Insert(++iRow);
            rowHeader = new SourceGrid.Cells.RowHeader(
                string.Format("Load dimensions\n({0} x {0} * {0})", UnitsManager.LengthUnitString));
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;
            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                string.Format(CultureInfo.InvariantCulture, "{0:0.#} x {1:0.#} x {2:0.#}", bboxLoad.Length, bboxLoad.Width, bboxLoad.Height));
            // net weight
            if (_solution.HasNetWeight)
            {
                rowHeader = new SourceGrid.Cells.RowHeader(
                    string.Format("Net weight ({0})", UnitsManager.MassUnitString));
                rowHeader.View         = viewRowHeader;
                gridSolutions[iRow, 0] = rowHeader;
                gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.NetWeight));
            }
            // load weight
            gridSolutions.Rows.Insert(++iRow);
            rowHeader = new SourceGrid.Cells.RowHeader(
                string.Format("Load Weight ({0})", UnitsManager.MassUnitString));
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;
            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.LoadWeight));
            // total weight
            gridSolutions.Rows.Insert(++iRow);
            rowHeader = new SourceGrid.Cells.RowHeader(
                string.Format("Total weight ({0})", UnitsManager.MassUnitString));
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;
            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.Weight));
            // volume efficiency
            gridSolutions.Rows.Insert(++iRow);
            rowHeader              = new SourceGrid.Cells.RowHeader("Vol. efficiency (%)");
            rowHeader.View         = viewRowHeader;
            gridSolutions[iRow, 0] = rowHeader;
            gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.VolumeEfficiency));

            int noLayerTypesUsed = 0;

            for (int i = 0; i < _solution.Layers.Count; ++i)
            {
                noLayerTypesUsed += _solution.Layers[i].BoxCount > 0 ? 1 : 0;
            }

            // ### layers : begin
            for (int i = 0; i < _solution.Layers.Count; ++i)
            {
                List <int> layerIndexes = _solution.LayerTypeUsed(i);
                if (0 == layerIndexes.Count)
                {
                    continue;
                }

                // layer caption
                gridSolutions.Rows.Insert(++iRow);
                rowHeader              = new SourceGrid.Cells.RowHeader((noLayerTypesUsed == 1) ? "Layers : All" : BuildLayerCaption(layerIndexes));
                rowHeader.ColumnSpan   = 2;
                rowHeader.View         = captionHeader;
                gridSolutions[iRow, 0] = rowHeader;

                // *** Item # (recursive count)
                content   = _analysis.Content;
                itemCount = _solution.LayerBoxCount(i);
                number    = 1;
                do
                {
                    itemCount *= number;

                    gridSolutions.Rows.Insert(++iRow);
                    rowHeader = new SourceGrid.Cells.RowHeader(
                        string.Format("{0} #", content.DetailedName));
                    rowHeader.View         = viewRowHeader;
                    gridSolutions[iRow, 0] = rowHeader;
                    gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(itemCount);
                }while (null != content && content.InnerContent(ref content, ref number));
                // ***

                // layer weight
                gridSolutions.Rows.Insert(++iRow);
                rowHeader              = new SourceGrid.Cells.RowHeader("Weight");
                rowHeader.View         = viewRowHeader;
                gridSolutions[iRow, 0] = rowHeader;
                gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.LayerWeight(i)));
                // layer space
                gridSolutions.Rows.Insert(++iRow);
                rowHeader              = new SourceGrid.Cells.RowHeader("Spaces");
                rowHeader.View         = viewRowHeader;
                gridSolutions[iRow, 0] = rowHeader;
                gridSolutions[iRow, 1] = new SourceGrid.Cells.Cell(
                    string.Format(CultureInfo.InvariantCulture, "{0:0.#}", _solution.LayerMaximumSpace(i)));
            }

            gridSolutions.AutoSizeCells();
            gridSolutions.Columns.StretchToFit();
            gridSolutions.AutoStretchColumnsToFitWidth = true;
            gridSolutions.Invalidate();
        }