// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. // // Purpose: Windows forms chart control designer class. // #if DESIGNER using System.ComponentModel.Design.Serialization; using FastReport.DataVisualization.Charting; using FastReport.DataVisualization.Charting.Utilities; namespace FastReport.Design.DataVisualization.Charting { /// /// Windows forms chart control designer class. /// internal class ChartWinDesignerSerializer : CodeDomSerializer { #region Methods /// /// Serializes the specified object into a CodeDOM object. /// /// A serialization manager interface that is used during the deserialization process. /// The object to serialize. /// A CodeDOM object representing the object that has been serialized. public override object Serialize(IDesignerSerializationManager manager, object value) { // Set serialization flag bool oldSerializationFlag = false; SerializationStatus oldSerializationStatus = SerializationStatus.None; Chart chart = value as Chart; if(chart != null) { oldSerializationFlag = chart.serializing; oldSerializationStatus = chart.serializationStatus; chart.serializing = true; chart.serializationStatus = SerializationStatus.Saving; } // Serialize object using the base class serializer object result = null; CodeDomSerializer baseSerializer = (CodeDomSerializer)manager.GetSerializer(typeof(Chart).BaseType, typeof(CodeDomSerializer)); if(baseSerializer != null) { result = baseSerializer.Serialize(manager, value); System.CodeDom.CodeStatementCollection statements = result as System.CodeDom.CodeStatementCollection; // Sustom serialization of the DataSource property if (statements != null && chart != null) { // Check if DataSource property is set if(chart.DataSource != null && chart.DataSource is String && ((String)chart.DataSource) != "(none)") { // Add assignment statement for the DataSource property System.CodeDom.CodeExpression targetObject = base.SerializeToExpression(manager, value); if (targetObject != null) { System.CodeDom.CodeAssignStatement assignStatement = new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodePropertyReferenceExpression (targetObject, "DataSource"), new System.CodeDom.CodePropertyReferenceExpression (new System.CodeDom.CodeThisReferenceExpression(), (String)chart.DataSource)); statements.Add(assignStatement); } } } } // Clear serialization flag if(chart != null) { chart.serializing = oldSerializationFlag; chart.serializationStatus = oldSerializationStatus; } return result; } /// /// Deserializes the specified serialized CodeDOM object into an object. /// /// A serialization manager interface that is used during the deserialization process. /// A serialized CodeDOM object to deserialize. /// The deserialized CodeDOM object. public override object Deserialize(IDesignerSerializationManager manager,object codeObject) { CodeDomSerializer baseSerializer = (CodeDomSerializer)manager.GetSerializer(typeof(Chart).BaseType, typeof(CodeDomSerializer)); if(baseSerializer != null) { return baseSerializer.Deserialize(manager, codeObject); } return null; } #endregion } } #endif