コード例 #1
0
        /// <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++;
            }
        }
コード例 #2
0
        /// <summary>
        /// Get if file is open
        /// </summary>
        public static bool CheckIsValid(ByteModified byteModified)
        {
            if (byteModified != null)
            {
                if (byteModified.IsValid)
                {
                    return(true);
                }
            }

            return(false);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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());
            }
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        /// <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());
        }