public void WriteXml(XmlWriter w, SerializationFilter filter)
 {
     foreach (Spotlight spot in spotlights)
     {
         DrawingSerializer.Serialize(w, spot as IKvaSerializable, filter);
     }
 }
예제 #2
0
        private void ParseDrawings(XmlReader r, PointF scale)
        {
            // Note:
            // We do not do a metadata.AddDrawing at this point, only add the drawing internally to the keyframe without side-effects.
            // We wait for the complete keyframe to be parsed and ready, and then merge-insert it into the existing collection.
            // The drawing post-initialization will only be done at that point.
            // This prevents doing post-initializations too early when the keyframe is not yet added to the metadata collection.

            bool isEmpty = r.IsEmptyElement;

            r.ReadStartElement();

            if (isEmpty)
            {
                return;
            }

            while (r.NodeType == XmlNodeType.Element)
            {
                AbstractDrawing drawing = DrawingSerializer.Deserialize(r, scale, TimeHelper.IdentityTimestampMapper, metadata);
                if (drawing == null || !drawing.IsValid)
                {
                    continue;
                }

                AddDrawing(drawing);
                drawing.InfosFading.ReferenceTimestamp        = this.Position;
                drawing.InfosFading.AverageTimeStampsPerFrame = metadata.AverageTimeStampsPerFrame;
            }

            r.ReadEndElement();
        }
        public override HistoryMemento PerformUndo()
        {
            HistoryMemento redoMemento = new HistoryMementoModifyDrawing(metadata, managerId, drawingId, drawingName, filter);

            DrawingSerializer.DeserializeModifyMemento(managerId, drawingId, data, metadata);
            metadata.ModifiedDrawing(managerId, drawingId);
            return(redoMemento);
        }
        public override HistoryMemento PerformUndo()
        {
            HistoryMemento redoMemento = new HistoryMementoAddDrawing(metadata, managerId, drawingId, drawingName);

            redoMemento.CommandName = commandName;

            AbstractDrawing drawing = DrawingSerializer.DeserializeMemento(data, metadata);

            metadata.AddDrawing(managerId, drawing);
            return(redoMemento);
        }
예제 #5
0
        private void ParseTracks(XmlReader r, PointF scale)
        {
            // TODO: catch empty tag <Tracks/>.

            r.ReadStartElement();

            while (r.NodeType == XmlNodeType.Element)
            {
                AbstractDrawing drawing = DrawingSerializer.Deserialize(r, scale, RemapTimestamp, metadata);
                metadata.AddDrawing(metadata.TrackManager.Id, drawing);
            }

            r.ReadEndElement();
        }
예제 #6
0
        private void ParseChronos(XmlReader r, PointF scale)
        {
            // TODO: catch empty tag <Chronos/>.

            r.ReadStartElement();

            while (r.NodeType == XmlNodeType.Element)
            {
                AbstractDrawing drawing = DrawingSerializer.Deserialize(r, scale, TimeHelper.IdentityTimestampMapper, metadata);
                metadata.AddDrawing(metadata.ChronoManager.Id, drawing);
            }

            r.ReadEndElement();
        }
예제 #7
0
        public void WriteXml(XmlWriter w, SerializationFilter filter)
        {
            foreach (AutoNumber number in autoNumbers)
            {
                DrawingSerializer.Serialize(w, number as IKvaSerializable, filter);
            }

            if ((filter & SerializationFilter.Style) == SerializationFilter.Style)
            {
                w.WriteStartElement("DrawingStyle");
                style.WriteXml(w);
                w.WriteEndElement();
            }
        }
        public HistoryMementoDeleteDrawing(Metadata metadata, Guid managerId, Guid drawingId, string drawingName)
        {
            this.metadata    = metadata;
            this.managerId   = managerId;
            this.drawingId   = drawingId;
            this.drawingName = drawingName;

            commandName = string.Format("{0} ({1})", ScreenManagerLang.CommandDeleteDrawing_FriendlyName, drawingName);

            AbstractDrawingManager manager = metadata.GetDrawingManager(managerId);

            if (manager != null)
            {
                data = DrawingSerializer.SerializeMemento(metadata, manager.GetDrawing(drawingId), SerializationFilter.All, true);
            }
        }
        public HistoryMementoModifyDrawing(Metadata metadata, Guid managerId, Guid drawingId, string drawingName, SerializationFilter filter)
        {
            this.metadata    = metadata;
            this.managerId   = managerId;
            this.drawingId   = drawingId;
            this.drawingName = drawingName;
            this.filter      = filter;

            UpdateCommandName(drawingName);

            AbstractDrawingManager manager = metadata.GetDrawingManager(managerId);

            if (manager != null)
            {
                data = DrawingSerializer.SerializeMemento(metadata, manager.GetDrawing(drawingId), filter, false);
            }
        }
예제 #10
0
파일: Keyframe.cs 프로젝트: weblate/Kinovea
        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 string SerializeMemento(Metadata metadata, AbstractMultiDrawing manager, AbstractMultiDrawingItem item, SerializationFilter filter)
        {
            IKvaSerializable kvaDrawing = item 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");

                DrawingSerializer.Serialize(w, kvaDrawing, filter);

                if (item is ITrackable)
                {
                    metadata.TrackabilityManager.WriteTracker(w, item.Id);
                }

                w.WriteEndElement();

                w.Flush();
                result = builder.ToString();
            }

            return(result);
        }