public void ProcessFrx()
 {
     try
     {
         while (readerIndex < FrxFile.Length)
         {
             MoveIndexNextStartStylesImage();
             TrueDBGrid grid = new TrueDBGrid();
             totalImageBatches++;
             grid.Images    = ProcessImagesBatch();
             grid.AllStyles = ProcessStylesBatch();
             ProcessStyleAssignmentsBatch(grid);
             ReadNamedStyleInfoBatch(grid);
             if (grid.Images.Count > 0)
             {
                 totalGridWithImages++;
             }
             MoveIndexNextStartGridName();
             grid.Name = ProcessGridName();
             Grids.Add(grid);
             Console.WriteLine($"This images are from the grid {grid.Name}");
         }
     } catch (ArgumentException ex)
     {
         Console.WriteLine(ex.Message);
     }
 }
        public void ReadNamedStyleInfoBatch(TrueDBGrid grid)
        {
            int totalNamedStyles = Utilities.ByteArrayToInt(ReadBytes(4));

            for (int i = 0; i < totalNamedStyles; i++)
            {
                ReadNamedStyleInfo(grid, i + 1);
            }
        }
        public void ReadNamedStyleInfo(TrueDBGrid grid, int idx)
        {
            NamedStyle namedStyle = new NamedStyle();

            namedStyle.Name  = Utilities.ByteArrayToString(ReadBytes(26));
            readerIndex     += 6;
            namedStyle.Style = grid.AllStyles[Utilities.ByteArrayToInt(ReadBytes(4))];
            namedStyle.Index = idx;
            grid.NamedStyles.Add(namedStyle);
        }
        public void ProcessStyleAssignmentsBatch(TrueDBGrid grid)
        {
            int totalAssignments = Utilities.ByteArrayToInt(ReadBytes(4));

            readerIndex += 20; // ignore the first batch. It's always empty
            int i = 1;

            foreach (string styleName in Constants.GridSplitStyleAssignmentOrder)
            {
                StyleAssignment styleAssignment = ReadStyleAssignmentInfo(styleName);
                grid.StylesAssignments.Add(styleAssignment);
                if (styleAssignment.SplitIndex != 0 || styleAssignment.DisplayColumnIndex != 0)
                {
                    throw new ArgumentException("Unexpected index found");
                }
                i++;
            }
            while (i < totalAssignments)
            {
                StyleAssignment styleAssignmentInfo = ReadStyleAssignmentInfo(Constants.GridSplitStyleAssignmentOrder[0]);
                i++;
                if (styleAssignmentInfo.DisplayColumnIndex == 0)
                {
                    grid.getSplitAt(styleAssignmentInfo.SplitIndex - 1).StylesAssignments.Add(styleAssignmentInfo);
                    for (int j = 1; j < Constants.GridSplitStyleAssignmentOrder.Length; j++)
                    {
                        StyleAssignment splitStyleAsg = ReadStyleAssignmentInfo(Constants.GridSplitStyleAssignmentOrder[j]);
                        grid.getSplitAt(splitStyleAsg.SplitIndex - 1).StylesAssignments.Add(splitStyleAsg);
                        i++;
                    }
                }
                else
                {
                    styleAssignmentInfo.StyleName = Constants.DisplayColumnsStyleAssignmentOrder[0];
                    grid.getSplitAt(styleAssignmentInfo.SplitIndex - 1).getColumnAt(styleAssignmentInfo.DisplayColumnIndex - 1).StylesAssignments.Add(styleAssignmentInfo);
                    for (int j = 1; j < Constants.DisplayColumnsStyleAssignmentOrder.Length; j++)
                    {
                        StyleAssignment colStyleAsg = ReadStyleAssignmentInfo(Constants.DisplayColumnsStyleAssignmentOrder[j]);
                        grid.getSplitAt(colStyleAsg.SplitIndex - 1).getColumnAt(colStyleAsg.DisplayColumnIndex - 1).StylesAssignments.Add(colStyleAsg);
                        i++;
                    }
                }
            }
        }