// 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