WinChartDesignerSerializer.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT license.
  3. // See the LICENSE file in the project root for more information.
  4. //
  5. // Purpose: Windows forms chart control designer class.
  6. //
  7. #if DESIGNER
  8. using System.ComponentModel.Design.Serialization;
  9. using FastReport.DataVisualization.Charting;
  10. using FastReport.DataVisualization.Charting.Utilities;
  11. namespace FastReport.Design.DataVisualization.Charting
  12. {
  13. /// <summary>
  14. /// Windows forms chart control designer class.
  15. /// </summary>
  16. internal class ChartWinDesignerSerializer : CodeDomSerializer
  17. {
  18. #region Methods
  19. /// <summary>
  20. /// Serializes the specified object into a CodeDOM object.
  21. /// </summary>
  22. /// <param name="manager">A serialization manager interface that is used during the deserialization process.</param>
  23. /// <param name="value">The object to serialize.</param>
  24. /// <returns>A CodeDOM object representing the object that has been serialized.</returns>
  25. public override object Serialize(IDesignerSerializationManager manager, object value)
  26. {
  27. // Set serialization flag
  28. bool oldSerializationFlag = false;
  29. SerializationStatus oldSerializationStatus = SerializationStatus.None;
  30. Chart chart = value as Chart;
  31. if(chart != null)
  32. {
  33. oldSerializationFlag = chart.serializing;
  34. oldSerializationStatus = chart.serializationStatus;
  35. chart.serializing = true;
  36. chart.serializationStatus = SerializationStatus.Saving;
  37. }
  38. // Serialize object using the base class serializer
  39. object result = null;
  40. CodeDomSerializer baseSerializer = (CodeDomSerializer)manager.GetSerializer(typeof(Chart).BaseType, typeof(CodeDomSerializer));
  41. if(baseSerializer != null)
  42. {
  43. result = baseSerializer.Serialize(manager, value);
  44. System.CodeDom.CodeStatementCollection statements = result as System.CodeDom.CodeStatementCollection;
  45. // Sustom serialization of the DataSource property
  46. if (statements != null && chart != null)
  47. {
  48. // Check if DataSource property is set
  49. if(chart.DataSource != null && chart.DataSource is String && ((String)chart.DataSource) != "(none)")
  50. {
  51. // Add assignment statement for the DataSource property
  52. System.CodeDom.CodeExpression targetObject =
  53. base.SerializeToExpression(manager, value);
  54. if (targetObject != null)
  55. {
  56. System.CodeDom.CodeAssignStatement assignStatement = new System.CodeDom.CodeAssignStatement(
  57. new System.CodeDom.CodePropertyReferenceExpression (targetObject, "DataSource"),
  58. new System.CodeDom.CodePropertyReferenceExpression (new System.CodeDom.CodeThisReferenceExpression(), (String)chart.DataSource));
  59. statements.Add(assignStatement);
  60. }
  61. }
  62. }
  63. }
  64. // Clear serialization flag
  65. if(chart != null)
  66. {
  67. chart.serializing = oldSerializationFlag;
  68. chart.serializationStatus = oldSerializationStatus;
  69. }
  70. return result;
  71. }
  72. /// <summary>
  73. /// Deserializes the specified serialized CodeDOM object into an object.
  74. /// </summary>
  75. /// <param name="manager">A serialization manager interface that is used during the deserialization process.</param>
  76. /// <param name="codeObject">A serialized CodeDOM object to deserialize.</param>
  77. /// <returns>The deserialized CodeDOM object.</returns>
  78. public override object Deserialize(IDesignerSerializationManager manager,object codeObject)
  79. {
  80. CodeDomSerializer baseSerializer = (CodeDomSerializer)manager.GetSerializer(typeof(Chart).BaseType, typeof(CodeDomSerializer));
  81. if(baseSerializer != null)
  82. {
  83. return baseSerializer.Deserialize(manager, codeObject);
  84. }
  85. return null;
  86. }
  87. #endregion
  88. }
  89. }
  90. #endif