public StyleAssignment ReadStyleAssignmentInfo(string styleName)
        {
            StyleAssignment styleAssignment = new StyleAssignment();

            readerIndex += 4; // Unknown bytes
            styleAssignment.StyleIndex         = Utilities.ByteArrayToInt(ReadBytes(4));
            styleAssignment.SplitIndex         = Utilities.ByteArrayToInt(ReadBytes(4));
            styleAssignment.DisplayColumnIndex = Utilities.ByteArrayToInt(ReadBytes(4));
            styleAssignment.NamedStyleIndex    = Utilities.ByteArrayToInt(ReadBytes(4));
            styleAssignment.StyleName          = styleName;
            return(styleAssignment);
        }
        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++;
                    }
                }
            }
        }
        public static XElement GenerateSummarizedStyle(Style[] allStyles, List <NamedStyle> namedStyles, StyleAssignment styleAssignment)
        {
            XElement styleXelement = new XElement(styleAssignment.StyleName);
            int      namedStyleIdx = styleAssignment.NamedStyleIndex;
            int      styleIdx      = styleAssignment.StyleIndex;

            if (allStyles[styleIdx].BackgroundPictureIndex != -1)
            {
                styleXelement.Add(new XAttribute("BackgroundPictureIndex", allStyles[styleIdx].BackgroundPictureIndex));
            }
            else if (namedStyleIdx != -1 && namedStyles[namedStyleIdx - 1].Style.BackgroundPictureIndex != -1)
            {
                styleXelement.Add(new XAttribute("BackgroundPictureIndex", namedStyles[namedStyleIdx - 1].Style.BackgroundPictureIndex));
            }
            if (allStyles[styleIdx].ForegroundPictureIndex != -1)
            {
                styleXelement.Add(new XAttribute("ForegroundPictureIndex", allStyles[styleIdx].ForegroundPictureIndex));
            }
            else if (namedStyleIdx != -1 && namedStyles[namedStyleIdx - 1].Style.ForegroundPictureIndex != -1)
            {
                styleXelement.Add(new XAttribute("ForegroundPictureIndex", namedStyles[namedStyleIdx - 1].Style.ForegroundPictureIndex));
            }
            if (allStyles[styleIdx].FontName != "")
            {
                styleXelement.Add(new XAttribute("FontName", allStyles[styleIdx].FontName));
            }
            else if (namedStyleIdx != -1 && namedStyles[namedStyleIdx - 1].Style.FontName != "")
            {
                styleXelement.Add(new XAttribute("FontName", namedStyles[namedStyleIdx - 1].Style.FontName));
            }
            return(styleXelement);
        }