public static void Serialize(XmlWriter w, IKvaSerializable drawing, SerializationFilter filter) { if (drawing.Id == Guid.Empty) { return; } // The XML name for this drawing should be stored in its [XMLType] C# attribute. Type t = drawing.GetType(); object[] attributes = t.GetCustomAttributes(typeof(XmlTypeAttribute), false); if (attributes.Length == 0) { return; } string xmlName = ((XmlTypeAttribute)attributes[0]).TypeName; w.WriteStartElement(xmlName); w.WriteAttributeString("id", drawing.Id.ToString()); w.WriteAttributeString("name", drawing.Name); drawing.WriteXml(w, filter); w.WriteEndElement(); }
public void WriteXml(XmlWriter w) { w.WriteStartElement("Position"); string userTime = m_ParentMetadata.TimeStampsToTimecode(m_Position, TimeCodeFormat.Unknown, false); w.WriteAttributeString("UserTime", userTime); w.WriteString(m_Position.ToString()); w.WriteEndElement(); if (!string.IsNullOrEmpty(Title)) { w.WriteElementString("Title", Title); } if (!string.IsNullOrEmpty(m_CommentRtf)) { w.WriteElementString("Comment", m_CommentRtf); } if (m_Drawings.Count > 0) { w.WriteStartElement("Drawings"); foreach (AbstractDrawing drawing in m_Drawings) { IKvaSerializable serializableDrawing = drawing as IKvaSerializable; if (serializableDrawing != null) { // The XML name for this drawing should be stored in its [XMLType] C# attribute. Type t = serializableDrawing.GetType(); object[] attributes = t.GetCustomAttributes(typeof(XmlTypeAttribute), false); if (attributes.Length > 0) { string xmlName = ((XmlTypeAttribute)attributes[0]).TypeName; w.WriteStartElement(xmlName); serializableDrawing.WriteXml(w); w.WriteEndElement(); } } } w.WriteEndElement(); } }
public void WriteXml(XmlWriter w) { w.WriteStartElement("Position"); if (metadata.TimeCodeBuilder != null) { string userTime = metadata.TimeCodeBuilder(position, TimeType.UserOrigin, TimecodeFormat.Unknown, false); w.WriteAttributeString("UserTime", userTime); } w.WriteString(position.ToString()); w.WriteEndElement(); if (!string.IsNullOrEmpty(Title)) { w.WriteElementString("Title", Title); } if (!string.IsNullOrEmpty(comments)) { w.WriteElementString("Comment", comments); } if (drawings.Count == 0) { return; } // Drawings are written in reverse order to match order of addition. w.WriteStartElement("Drawings"); for (int i = drawings.Count - 1; i >= 0; i--) { IKvaSerializable serializableDrawing = drawings[i] as IKvaSerializable; if (serializableDrawing == null) { continue; } DrawingSerializer.Serialize(w, serializableDrawing, SerializationFilter.All); } w.WriteEndElement(); }
public static void DeserializeModifyMemento(Guid managerId, Guid drawingId, string data, Metadata metadata) { AbstractDrawingManager manager = metadata.GetDrawingManager(managerId); IKvaSerializable drawing = manager.GetDrawing(drawingId) as IKvaSerializable; if (drawing == null) { return; } PointF identityScale = new PointF(1, 1); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; settings.IgnoreProcessingInstructions = true; settings.IgnoreWhitespace = true; settings.CloseInput = true; using (XmlReader r = XmlReader.Create(new StringReader(data), settings)) { r.MoveToContent(); if (!(r.Name == "DrawingMemento")) { return; } r.ReadStartElement(); drawing.ReadXml(r, identityScale, TimeHelper.IdentityTimestampMapper); if (drawing is ITrackable) { metadata.TrackabilityManager.ReadTracker(r, identityScale, TimeHelper.IdentityTimestampMapper); metadata.TrackabilityManager.Assign(drawing as ITrackable); } } }
public static string SerializeMemento(Metadata metadata, AbstractDrawing drawing, SerializationFilter filter, bool saveTrackability) { IKvaSerializable kvaDrawing = drawing as IKvaSerializable; if (kvaDrawing == null) { return(""); } string result = ""; XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = false; settings.CloseOutput = true; StringBuilder builder = new StringBuilder(); using (XmlWriter w = XmlWriter.Create(builder, settings)) { w.WriteStartElement("DrawingMemento"); Serialize(w, kvaDrawing, filter); if (saveTrackability && drawing is ITrackable) { metadata.TrackabilityManager.WriteTracker(w, drawing.Id); } w.WriteEndElement(); w.Flush(); result = builder.ToString(); } return(result); }