///// <summary>
        ///// Layer properties plot style name.
        ///// </summary>
        //public string PlotStyleName
        //{
        //    get { return this.plotStyle; }
        //    set { this.plotStyle = value; }
        //}

        #endregion

        #region public methods

        /// <summary>
        /// Copy the layer to the current layer state properties.
        /// </summary>
        /// <param name="layer">Layer from which copy the properties.</param>
        /// <param name="options">Layer properties to copy.</param>
        public void CopyFrom(Layer layer, LayerPropertiesRestoreFlags options)
        {
            if (!string.Equals(this.name, layer.Name, StringComparison.OrdinalIgnoreCase))
            {
                throw new ArgumentException("Only a layer with the same name can be copied.", nameof(layer));
            }

            this.flags = LayerPropertiesFlags.None;

            if (options.HasFlag(LayerPropertiesRestoreFlags.Hidden))
            {
                if (!layer.IsVisible)
                {
                    this.flags |= LayerPropertiesFlags.Hidden;
                }
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Frozen))
            {
                if (layer.IsFrozen)
                {
                    this.flags |= LayerPropertiesFlags.Frozen;
                }
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Locked))
            {
                if (layer.IsLocked)
                {
                    this.flags |= LayerPropertiesFlags.Locked;
                }
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Plot))
            {
                if (layer.Plot)
                {
                    this.flags |= LayerPropertiesFlags.Plot;
                }
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Linetype))
            {
                this.linetype = layer.Linetype.Name;
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Color))
            {
                this.color = (AciColor)layer.Color.Clone();
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Lineweight))
            {
                this.lineweight = layer.Lineweight;
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Transparency))
            {
                this.transparency = (Transparency)layer.Transparency.Clone();
            }
        }
        /// <summary>
        /// Copy the current layer state properties to a layer.
        /// </summary>
        /// <param name="layer">Layer to which copy the properties.</param>
        /// <param name="options">Layer properties to copy.</param>
        public void CopyTo(Layer layer, LayerPropertiesRestoreFlags options)
        {
            if (!string.Equals(this.name, layer.Name, StringComparison.OrdinalIgnoreCase))
            {
                throw new ArgumentException("Only a layer with the same name can be copied.", nameof(layer));
            }

            if (options.HasFlag(LayerPropertiesRestoreFlags.Hidden))
            {
                layer.IsVisible = !this.flags.HasFlag(LayerPropertiesFlags.Hidden);
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Frozen))
            {
                layer.IsFrozen = this.flags.HasFlag(LayerPropertiesFlags.Frozen);
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Locked))
            {
                layer.IsLocked = this.flags.HasFlag(LayerPropertiesFlags.Locked);
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Plot))
            {
                layer.Plot = this.flags.HasFlag(LayerPropertiesFlags.Plot);
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Linetype))
            {
                Linetype line = null;
                if (layer.Owner != null)
                {
                    DxfDocument doc = layer.Owner.Owner;
                    line = doc.Linetypes[this.LinetypeName];
                }
                if (line == null)
                {
                    line = new Linetype(this.LinetypeName);
                }
                layer.Linetype = line;
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Color))
            {
                layer.Color = (AciColor)this.Color.Clone();
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Lineweight))
            {
                layer.Lineweight = this.Lineweight;
            }
            if (options.HasFlag(LayerPropertiesRestoreFlags.Transparency))
            {
                layer.Transparency = (Transparency)this.Transparency.Clone();
            }
        }
 internal LayerStateManager(DxfDocument document, string handle)
     : base(document, DxfObjectCode.LayerStates, handle)
 {
     this.options = LayerPropertiesRestoreFlags.All;
 }