/// <summary> /// return a copy of myself. /// </summary> /// <returns></returns> public PresenterDataItem Copy() { PresenterDataItem pdi = new PresenterDataItem(new TimeSpan(this.timestamp.Ticks), "NOOP", null); pdi.opcode = this.opcode; pdi.slide = this.slide; pdi.type = this.type; pdi.url = this.url; pdi.timestamp = this.timestamp; pdi.data = new byte[this.data.Length]; Array.Copy(this.data, 0, pdi.data, 0, this.data.Length); return(pdi); }
/// <summary> /// Deserialize CXP3 data and set opcodes and slide numbers. /// </summary> public static void DeserializeRTNav(PresenterDataItem pdi) { if (pdi.Type == "CXP3") { pdi.RTNav = Helpers.ByteArrayToObject(pdi.Data); if (pdi.RTNav == null) { return; } if (pdi.RTNav is ArchiveRTNav.RTDeleteStroke) //delete one stroke { pdi.Opcode = PacketType.ScribbleDelete; pdi.Slide = ((ArchiveRTNav.RTDeleteStroke)pdi.RTNav).SlideIndex; pdi.DeckGuid = ((ArchiveRTNav.RTDeleteStroke)pdi.RTNav).DeckGuid; } else if (pdi.RTNav is ArchiveRTNav.RTEraseLayer) //delete strokes on current slide { pdi.Opcode = PacketType.ClearScribble; pdi.Slide = ((ArchiveRTNav.RTEraseLayer)pdi.RTNav).SlideIndex; pdi.DeckGuid = ((ArchiveRTNav.RTEraseLayer)pdi.RTNav).DeckGuid; } else if (pdi.RTNav is ArchiveRTNav.RTEraseAllLayers) //delete all strokes on all slides { pdi.Opcode = PacketType.ClearAnnotations; pdi.DeckGuid = ((ArchiveRTNav.RTEraseAllLayers)pdi.RTNav).DeckGuid; } else if (pdi.RTNav is ArchiveRTNav.RTUpdate) { pdi.Opcode = PacketType.RTUpdate; pdi.Slide = ((ArchiveRTNav.RTUpdate)pdi.RTNav).SlideIndex; pdi.DeckGuid = ((ArchiveRTNav.RTUpdate)pdi.RTNav).DeckGuid; } else if (pdi.RTNav is ArchiveRTNav.RTDrawStroke) { pdi.Opcode = PacketType.Scribble; pdi.Slide = ((ArchiveRTNav.RTDrawStroke)pdi.RTNav).SlideIndex; pdi.DeckGuid = ((ArchiveRTNav.RTDrawStroke)pdi.RTNav).DeckGuid; } else if (pdi.RTNav is ArchiveRTNav.RTScrollLayer) { pdi.Opcode = PacketType.Scroll; pdi.Slide = ((ArchiveRTNav.RTScrollLayer)pdi.RTNav).SlideIndex; pdi.DeckGuid = ((ArchiveRTNav.RTScrollLayer)pdi.RTNav).DeckGuid; } else if (pdi.RTNav is ArchiveRTNav.RTTextAnnotation) { pdi.Opcode = PacketType.RTText; pdi.Slide = ((ArchiveRTNav.RTTextAnnotation)pdi.RTNav).SlideIndex; pdi.DeckGuid = ((ArchiveRTNav.RTTextAnnotation)pdi.RTNav).DeckGuid; } else if (pdi.RTNav is ArchiveRTNav.RTImageAnnotation) { pdi.Opcode = PacketType.RTImageAnnotation; pdi.Slide = ((ArchiveRTNav.RTImageAnnotation)pdi.RTNav).SlideIndex; pdi.DeckGuid = ((ArchiveRTNav.RTImageAnnotation)pdi.RTNav).DeckGuid; } else if (pdi.RTNav is ArchiveRTNav.RTDeleteTextAnnotation) { pdi.Opcode = PacketType.RTDeleteText; pdi.Slide = ((ArchiveRTNav.RTDeleteTextAnnotation)pdi.RTNav).SlideIndex; pdi.DeckGuid = ((ArchiveRTNav.RTDeleteTextAnnotation)pdi.RTNav).DeckGuid; } else if (pdi.RTNav is ArchiveRTNav.RTDeleteAnnotation) { //TODO: this might delete a text or an image. pdi.Opcode = PacketType.RTDeleteText; pdi.Slide = ((ArchiveRTNav.RTDeleteAnnotation)pdi.RTNav).SlideIndex; pdi.DeckGuid = ((ArchiveRTNav.RTDeleteAnnotation)pdi.RTNav).DeckGuid; } else if (pdi.RTNav is ArchiveRTNav.RTQuickPoll) { pdi.Opcode = PacketType.RTQuickPoll; pdi.Slide = ((ArchiveRTNav.RTQuickPoll)pdi.RTNav).SlideIndex; pdi.DeckGuid = ((ArchiveRTNav.RTQuickPoll)pdi.RTNav).DeckGuid; } else { //Type t = rtobj.GetType(); //parent.LoggerWriteInvoke("**Unhandled RTObject Type:" + t.ToString()); } } }