/// <summary> /// Add/Modifiy a ByteModifed in the list of byte have deleted /// </summary> public void AddByteDeleted(long bytePositionInFile, long length) { long position = bytePositionInFile; for (int i = 0; i < length; i++) { if (i % 100 == 0) { Application.Current.DoEvents(); } ByteModified bytemodifiedOriginal = CheckIfIsByteModified(position, ByteAction.All); if (bytemodifiedOriginal != null) { _byteModifiedList.Remove(bytemodifiedOriginal); } ByteModified byteModified = new ByteModified(); byteModified.Byte = new byte(); byteModified.UndoLenght = length; byteModified.BytePositionInFile = position; byteModified.Action = ByteAction.Deleted; _byteModifiedList.Add(byteModified); position++; } }
/// <summary> /// Get if file is open /// </summary> public static bool CheckIsValid(ByteModified byteModified) { if (byteModified != null) { if (byteModified.IsValid) { return(true); } } return(false); }
/// <summary> /// Copy Current instance to another /// </summary> /// <returns></returns> public ByteModified GetCopy() { ByteModified newByteModified = new ByteModified(); object copied = null; newByteModified.Action = Action; newByteModified.Byte = Byte; //.Value; newByteModified.BytePositionInFile = BytePositionInFile; copied = newByteModified; return((ByteModified)copied); }
/// <summary> /// Undo last byteaction /// </summary> public void Undo() { if (CanUndo) { ByteModified last = _byteModifiedList.Last <ByteModified>(); for (int i = 0; i < last.UndoLenght; i++) { _byteModifiedList.RemoveAt(_byteModifiedList.Count - 1); } Undone?.Invoke(this, new EventArgs()); } }
/// <summary> /// Add/Modifiy a ByteModifed in the list of byte have changed /// </summary> public void AddByteModified(byte? @byte, long bytePositionInFile, long undoLenght = 1) { ByteModified bytemodifiedOriginal = CheckIfIsByteModified(bytePositionInFile, ByteAction.Modified); if (bytemodifiedOriginal != null) { _byteModifiedList.Remove(bytemodifiedOriginal); } ByteModified byteModified = new ByteModified(); byteModified.Byte = @byte; byteModified.UndoLenght = undoLenght; byteModified.BytePositionInFile = bytePositionInFile; byteModified.Action = ByteAction.Modified; _byteModifiedList.Add(byteModified); }
/// <summary> /// Copies the current selection in the hex box to the Clipboard. /// </summary> /// <param name="copyChange">Set tu true if you want onclude change in your copy. Set to false to copy directly from source</param> private byte[] GetCopyData(long selectionStart, long selectionStop, bool copyChange) { //Validation if (!CanCopy(selectionStart, selectionStop)) { return(new byte[0]); } if (selectionStop == -1 || selectionStop == -1) { return(new byte[0]); } //Variable long byteStartPosition = -1; List <byte> bufferList = new List <byte>(); //Set start position if (selectionStart == selectionStop) { byteStartPosition = selectionStart; } else if (selectionStart > selectionStop) { byteStartPosition = selectionStop; } else { byteStartPosition = selectionStart; } //set position _stream.Position = byteStartPosition; //Exclude byte deleted from copy if (!copyChange) { byte[] buffer = new byte[GetSelectionLenght(selectionStart, selectionStop)]; _stream.Read(buffer, 0, Convert.ToInt32(GetSelectionLenght(selectionStart, selectionStop))); return(buffer); } else { for (int i = 0; i < GetSelectionLenght(selectionStart, selectionStop); i++) { ByteModified byteModified = CheckIfIsByteModified(_stream.Position, ByteAction.All); if (byteModified == null) { bufferList.Add((byte)_stream.ReadByte()); continue; } else { switch (byteModified.Action) { case ByteAction.Added: //TODO : IMPLEMENTING ADD BYTE break; case ByteAction.Deleted: //NOTHING TODO we dont want to add deleted byte break; case ByteAction.Modified: if (byteModified.IsValid) { bufferList.Add(byteModified.Byte.Value); } break; } } _stream.Position++; } } return(bufferList.ToArray()); }