summaryrefslogtreecommitdiffstats
path: root/externals/qhexedit/qhexedit.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--externals/qhexedit/qhexedit.h240
1 files changed, 240 insertions, 0 deletions
diff --git a/externals/qhexedit/qhexedit.h b/externals/qhexedit/qhexedit.h
new file mode 100644
index 000000000..15b6d7603
--- /dev/null
+++ b/externals/qhexedit/qhexedit.h
@@ -0,0 +1,240 @@
+// Original author: Winfried Simon
+// See http://code.google.com/p/qhexedit2/
+// Huge thanks!
+
+#ifndef QHEXEDIT_H
+#define QHEXEDIT_H
+
+#include <QtGui>
+#include "qhexedit_p.h"
+
+/** \mainpage
+QHexEdit is a binary editor widget for Qt.
+
+\version Version 0.6.3
+\image html hexedit.png
+*/
+
+
+/*! QHexEdit is a hex editor widget written in C++ for the Qt (Qt4) framework.
+It is a simple editor for binary data, just like QPlainTextEdit is for text
+data. There are sip configuration files included, so it is easy to create
+bindings for PyQt and you can use this widget also in python.
+
+QHexEdit takes the data of a QByteArray (setData()) and shows it. You can use
+the mouse or the keyboard to navigate inside the widget. If you hit the keys
+(0..9, a..f) you will change the data. Changed data is highlighted and can be
+accessed via data().
+
+Normaly QHexEdit works in the overwrite Mode. You can set overwriteMode(false)
+and insert data. In this case the size of data() increases. It is also possible
+to delete bytes (del or backspace), here the size of data decreases.
+
+You can select data with keyboard hits or mouse movements. The copy-key will
+copy the selected data into the clipboard. The cut-key copies also but delets
+it afterwards. In overwrite mode, the paste function overwrites the content of
+the (does not change the length) data. In insert mode, clipboard data will be
+inserted. The clipboard content is expected in ASCII Hex notation. Unknown
+characters will be ignored.
+
+QHexEdit comes with undo/redo functionality. All changes can be undone, by
+pressing the undo-key (usually ctr-z). They can also be redone afterwards.
+The undo/redo framework is cleared, when setData() sets up a new
+content for the editor. You can search data inside the content with indexOf()
+and lastIndexOf(). The replace() function is to change located subdata. This
+'replaced' data can also be undone by the undo/redo framework.
+
+This widget can only handle small amounts of data. The size has to be below 10
+megabytes, otherwise the scroll sliders ard not shown and you can't scroll any
+more.
+*/
+ class QHexEdit : public QScrollArea
+{
+ Q_OBJECT
+ /*! Property data holds the content of QHexEdit. Call setData() to set the
+ content of QHexEdit, data() returns the actual content.
+ */
+ Q_PROPERTY(QByteArray data READ data WRITE setData)
+
+ /*! Property addressOffset is added to the Numbers of the Address Area.
+ A offset in the address area (left side) is sometimes usefull, whe you show
+ only a segment of a complete memory picture. With setAddressOffset() you set
+ this property - with addressOffset() you get the actual value.
+ */
+ Q_PROPERTY(int addressOffset READ addressOffset WRITE setAddressOffset)
+
+ /*! Property address area color sets (setAddressAreaColor()) the backgorund
+ color of address areas. You can also read the color (addressaAreaColor()).
+ */
+ Q_PROPERTY(QColor addressAreaColor READ addressAreaColor WRITE setAddressAreaColor)
+
+ /*! Porperty cursorPosition sets or gets the position of the editor cursor
+ in QHexEdit.
+ */
+ Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition)
+
+ /*! Property highlighting color sets (setHighlightingColor()) the backgorund
+ color of highlighted text areas. You can also read the color
+ (highlightingColor()).
+ */
+ Q_PROPERTY(QColor highlightingColor READ highlightingColor WRITE setHighlightingColor)
+
+ /*! Property selection color sets (setSelectionColor()) the backgorund
+ color of selected text areas. You can also read the color
+ (selectionColor()).
+ */
+ Q_PROPERTY(QColor selectionColor READ selectionColor WRITE setSelectionColor)
+
+ /*! Porperty overwrite mode sets (setOverwriteMode()) or gets (overwriteMode()) the mode
+ in which the editor works. In overwrite mode the user will overwrite existing data. The
+ size of data will be constant. In insert mode the size will grow, when inserting
+ new data.
+ */
+ Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
+
+ /*! Porperty readOnly sets (setReadOnly()) or gets (isReadOnly) the mode
+ in which the editor works. In readonly mode the the user can only navigate
+ through the data and select data; modifying is not possible. This
+ property's default is false.
+ */
+ Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
+
+ /*! Set the font of the widget. Please use fixed width fonts like Mono or Courier.*/
+ Q_PROPERTY(QFont font READ font WRITE setFont)
+
+
+public:
+ /*! Creates an instance of QHexEdit.
+ \param parent Parent widget of QHexEdit.
+ */
+ QHexEdit(QWidget *parent = 0);
+
+ /*! Returns the index position of the first occurrence
+ of the byte array ba in this byte array, searching forward from index position
+ from. Returns -1 if ba could not be found. In addition to this functionality
+ of QByteArray the cursorposition is set to the end of found bytearray and
+ it will be selected.
+
+ */
+ int indexOf(const QByteArray & ba, int from = 0) const;
+
+ /*! Inserts a byte array.
+ \param i Index position, where to insert
+ \param ba byte array, which is to insert
+ In overwrite mode, the existing data will be overwritten, in insertmode ba will be
+ inserted and size of data grows.
+ */
+ void insert(int i, const QByteArray & ba);
+
+ /*! Inserts a char.
+ \param i Index position, where to insert
+ \param ch Char, which is to insert
+ In overwrite mode, the existing data will be overwritten, in insertmode ba will be
+ inserted and size of data grows.
+ */
+ void insert(int i, char ch);
+
+ /*! Returns the index position of the last occurrence
+ of the byte array ba in this byte array, searching backwards from index position
+ from. Returns -1 if ba could not be found. In addition to this functionality
+ of QByteArray the cursorposition is set to the beginning of found bytearray and
+ it will be selected.
+
+ */
+ int lastIndexOf(const QByteArray & ba, int from = 0) const;
+
+ /*! Removes len bytes from the content.
+ \param pos Index position, where to remove
+ \param len Amount of bytes to remove
+ In overwrite mode, the existing bytes will be overwriten with 0x00.
+ */
+ void remove(int pos, int len=1);
+
+ /*! Replaces len bytes from index position pos with the byte array after.
+ */
+ void replace( int pos, int len, const QByteArray & after);
+
+ /*! Gives back a formatted image of the content of QHexEdit
+ */
+ QString toReadableString();
+
+ /*! Gives back a formatted image of the selected content of QHexEdit
+ */
+ QString selectionToReadableString();
+
+ /*! \cond docNever */
+ void setAddressOffset(int offset);
+ int addressOffset();
+ void setCursorPosition(int cusorPos);
+ int cursorPosition();
+ void setData(QByteArray const &data);
+ QByteArray data();
+ void setAddressAreaColor(QColor const &color);
+ QColor addressAreaColor();
+ void setHighlightingColor(QColor const &color);
+ QColor highlightingColor();
+ void setSelectionColor(QColor const &color);
+ QColor selectionColor();
+ void setOverwriteMode(bool);
+ bool overwriteMode();
+ void setReadOnly(bool);
+ bool isReadOnly();
+ const QFont &font() const;
+ void setFont(const QFont &);
+ /*! \endcond docNever */
+
+public slots:
+ /*! Redoes the last operation. If there is no operation to redo, i.e.
+ there is no redo step in the undo/redo history, nothing happens.
+ */
+ void redo();
+
+ /*! Set the minimum width of the address area.
+ \param addressWidth Width in characters.
+ */
+ void setAddressWidth(int addressWidth);
+
+ /*! Switch the address area on or off.
+ \param addressArea true (show it), false (hide it).
+ */
+ void setAddressArea(bool addressArea);
+
+ /*! Switch the ascii area on or off.
+ \param asciiArea true (show it), false (hide it).
+ */
+ void setAsciiArea(bool asciiArea);
+
+ /*! Switch the highlighting feature on or of.
+ \param mode true (show it), false (hide it).
+ */
+ void setHighlighting(bool mode);
+
+ /*! Undoes the last operation. If there is no operation to undo, i.e.
+ there is no undo step in the undo/redo history, nothing happens.
+ */
+ void undo();
+
+signals:
+
+ /*! Contains the address, where the cursor is located. */
+ void currentAddressChanged(int address);
+
+ /*! Contains the size of the data to edit. */
+ void currentSizeChanged(int size);
+
+ /*! The signal is emited every time, the data is changed. */
+ void dataChanged();
+
+ /*! The signal is emited every time, the overwrite mode is changed. */
+ void overwriteModeChanged(bool state);
+
+private:
+ /*! \cond docNever */
+ QHexEditPrivate *qHexEdit_p;
+ QHBoxLayout *layout;
+ QScrollArea *scrollArea;
+ /*! \endcond docNever */
+};
+
+#endif
+