コード例 #1
0
        /// <summary>
        /// Checks whether a style component in the style manager is used by a style
        /// </summary>
        /// <param name="component">Component to check</param>
        /// <returns>If true, the component is in use</returns>
        private bool IsUsedByStyle(AbstractStyle component)
        {
            Style s;
            int   hash = component.GetHashCode();
            int   len  = styles.Count;

            for (int i = 0; i < len; i++)
            {
                s = (Style)styles[i];
                if (component.GetType() == typeof(Border))
                {
                    if (s.CurrentBorder.GetHashCode() == hash)
                    {
                        return(true);
                    }
                }
                else if (component.GetType() == typeof(CellXf))
                {
                    if (s.CurrentCellXf.GetHashCode() == hash)
                    {
                        return(true);
                    }
                }
                else if (component.GetType() == typeof(Fill))
                {
                    if (s.CurrentFill.GetHashCode() == hash)
                    {
                        return(true);
                    }
                }
                else if (component.GetType() == typeof(Font))
                {
                    if (s.CurrentFont.GetHashCode() == hash)
                    {
                        return(true);
                    }
                }
                else if (component.GetType() == typeof(NumberFormat))
                {
                    if (s.CurrentNumberFormat.GetHashCode() == hash)
                    {
                        return(true);
                    }
                }
                else
                {
                    throw new StyleException(StyleException.NOT_SUPPORTED, "The component '" + nameof(component) + "' is not implemented yet");
                }
            }
            return(false);
        }
コード例 #2
0
ファイル: Style.cs プロジェクト: wuzzeb/NanoXLSX
 /// <summary>
 /// Appends the specified style parts to the current one. The parts can be instances of sub-classes like Border or CellXf or a Style instance. Only the altered properties of the specified style or style part that differs from a new / untouched style instance will be appended. This enables method chaining
 /// </summary>
 /// <param name="styleToAppend">The style to append or a sub-class of Style</param>
 /// <returns>Current style with appended style parts</returns>
 public Style Append(AbstractStyle styleToAppend)
 {
     if (styleToAppend.GetType() == typeof(Border))
     {
         CurrentBorder.CopyProperties<Border>((Border)styleToAppend, new Border());
     }
     else if (styleToAppend.GetType() == typeof(CellXf))
     {
         CurrentCellXf.CopyProperties<CellXf>((CellXf)styleToAppend, new CellXf());
     }
     else if (styleToAppend.GetType() == typeof(Fill))
     {
         CurrentFill.CopyProperties<Fill>((Fill)styleToAppend, new Fill());
     }
     else if (styleToAppend.GetType() == typeof(Font))
     {
         CurrentFont.CopyProperties<Font>((Font)styleToAppend, new Font());
     }
     else if (styleToAppend.GetType() == typeof(NumberFormat))
     {
         CurrentNumberFormat.CopyProperties<NumberFormat>((NumberFormat)styleToAppend, new NumberFormat());
     }
     else if (styleToAppend.GetType() == typeof(Style))
     {
         CurrentBorder.CopyProperties<Border>(((Style)styleToAppend).CurrentBorder, new Border());
         CurrentCellXf.CopyProperties<CellXf>(((Style)styleToAppend).CurrentCellXf, new CellXf());
         CurrentFill.CopyProperties<Fill>(((Style)styleToAppend).CurrentFill, new Fill());
         CurrentFont.CopyProperties<Font>(((Style)styleToAppend).CurrentFont, new Font());
         CurrentNumberFormat.CopyProperties<NumberFormat>(((Style)styleToAppend).CurrentNumberFormat, new NumberFormat());
     }
     return this;
 }
コード例 #3
0
        /// <summary>
        /// Adds a style component to the manager
        /// </summary>
        /// <param name="style">Component to add</param>
        /// <returns>Hash of the added or determined component</returns>
        private int AddStyleComponent(AbstractStyle style)
        {
            int hash = style.GetHashCode();

            if (style.GetType() == typeof(Border))
            {
                if (GetComponentByHash(ref borders, hash) == null)
                {
                    borders.Add(style);
                }
                Reorganize(ref borders);
            }
            else if (style.GetType() == typeof(CellXf))
            {
                if (GetComponentByHash(ref cellXfs, hash) == null)
                {
                    cellXfs.Add(style);
                }
                Reorganize(ref cellXfs);
            }
            else if (style.GetType() == typeof(Fill))
            {
                if (GetComponentByHash(ref fills, hash) == null)
                {
                    fills.Add(style);
                }
                Reorganize(ref fills);
            }
            else if (style.GetType() == typeof(Font))
            {
                if (GetComponentByHash(ref fonts, hash) == null)
                {
                    fonts.Add(style);
                }
                Reorganize(ref fonts);
            }
            else if (style.GetType() == typeof(NumberFormat))
            {
                if (GetComponentByHash(ref numberFormats, hash) == null)
                {
                    numberFormats.Add(style);
                }
                Reorganize(ref numberFormats);
            }
            else if (style.GetType() == typeof(Style))
            {
                Style s = (Style)style;
                if (styleNames.Contains(s.Name))
                {
                    throw new StyleException("StyleAlreadyExistsException", "The style with the name '" + s.Name + "' already exists");
                }
                if (GetComponentByHash(ref styles, hash) == null)
                {
                    int?id;
                    if (!s.InternalID.HasValue)
                    {
                        id           = int.MaxValue;
                        s.InternalID = id;
                    }
                    else
                    {
                        id = s.InternalID.Value;
                    }
                    int temp = AddStyleComponent(s.CurrentBorder, id);
                    s.CurrentBorder       = (Border)GetComponentByHash(ref borders, temp);
                    temp                  = AddStyleComponent(s.CurrentCellXf, id);
                    s.CurrentCellXf       = (CellXf)GetComponentByHash(ref cellXfs, temp);
                    temp                  = AddStyleComponent(s.CurrentFill, id);
                    s.CurrentFill         = (Fill)GetComponentByHash(ref fills, temp);
                    temp                  = AddStyleComponent(s.CurrentFont, id);
                    s.CurrentFont         = (Font)GetComponentByHash(ref fonts, temp);
                    temp                  = AddStyleComponent(s.CurrentNumberFormat, id);
                    s.CurrentNumberFormat = (NumberFormat)GetComponentByHash(ref numberFormats, temp);
                    styles.Add(s);
                }
                Reorganize(ref styles);
                hash = s.GetHashCode();
            }
            else
            {
                throw new StyleException("UnsupportedComponent", "The component ' " + nameof(style) + "' is not implemented yet");
            }
            return(hash);
        }