forked from eden-emu/eden
		
	
		
			
	
	
		
			126 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			126 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #ifndef QHEXEDIT_P_H
 | ||
|  | #define QHEXEDIT_P_H
 | ||
|  | 
 | ||
|  | /** \cond docNever */ | ||
|  | 
 | ||
|  | 
 | ||
|  | #include <QtGui>
 | ||
|  | #include "xbytearray.h"
 | ||
|  | 
 | ||
|  | class QHexEditPrivate : public QWidget | ||
|  | { | ||
|  | Q_OBJECT | ||
|  | 
 | ||
|  | public: | ||
|  |     QHexEditPrivate(QScrollArea *parent); | ||
|  | 
 | ||
|  |     void setAddressAreaColor(QColor const &color); | ||
|  |     QColor addressAreaColor(); | ||
|  | 
 | ||
|  |     void setAddressOffset(int offset); | ||
|  |     int addressOffset(); | ||
|  | 
 | ||
|  |     void setCursorPos(int position); | ||
|  |     int cursorPos(); | ||
|  | 
 | ||
|  |     void setData(QByteArray const &data); | ||
|  |     QByteArray data(); | ||
|  | 
 | ||
|  |     void setHighlightingColor(QColor const &color); | ||
|  |     QColor highlightingColor(); | ||
|  | 
 | ||
|  |     void setOverwriteMode(bool overwriteMode); | ||
|  |     bool overwriteMode(); | ||
|  | 
 | ||
|  |     void setReadOnly(bool readOnly); | ||
|  |     bool isReadOnly(); | ||
|  | 
 | ||
|  |     void setSelectionColor(QColor const &color); | ||
|  |     QColor selectionColor(); | ||
|  | 
 | ||
|  |     XByteArray & xData(); | ||
|  | 
 | ||
|  |     int indexOf(const QByteArray & ba, int from = 0); | ||
|  |     void insert(int index, const QByteArray & ba); | ||
|  |     void insert(int index, char ch); | ||
|  |     int lastIndexOf(const QByteArray & ba, int from = 0); | ||
|  |     void remove(int index, int len=1); | ||
|  |     void replace(int index, char ch); | ||
|  |     void replace(int index, const QByteArray & ba); | ||
|  |     void replace(int pos, int len, const QByteArray & after); | ||
|  | 
 | ||
|  |     void setAddressArea(bool addressArea); | ||
|  |     void setAddressWidth(int addressWidth); | ||
|  |     void setAsciiArea(bool asciiArea); | ||
|  |     void setHighlighting(bool mode); | ||
|  |     virtual void setFont(const QFont &font); | ||
|  | 
 | ||
|  |     void undo(); | ||
|  |     void redo(); | ||
|  | 
 | ||
|  |     QString toRedableString(); | ||
|  |     QString selectionToReadableString(); | ||
|  | 
 | ||
|  | signals: | ||
|  |     void currentAddressChanged(int address); | ||
|  |     void currentSizeChanged(int size); | ||
|  |     void dataChanged(); | ||
|  |     void overwriteModeChanged(bool state); | ||
|  | 
 | ||
|  | protected: | ||
|  |     void keyPressEvent(QKeyEvent * event); | ||
|  |     void mouseMoveEvent(QMouseEvent * event); | ||
|  |     void mousePressEvent(QMouseEvent * event); | ||
|  | 
 | ||
|  |     void paintEvent(QPaintEvent *event); | ||
|  | 
 | ||
|  |     int cursorPos(QPoint pos);          // calc cursorpos from graphics position. DOES NOT STORE POSITION
 | ||
|  | 
 | ||
|  |     void resetSelection(int pos);       // set selectionStart and selectionEnd to pos
 | ||
|  |     void resetSelection();              // set selectionEnd to selectionStart
 | ||
|  |     void setSelection(int pos);         // set min (if below init) or max (if greater init)
 | ||
|  |     int getSelectionBegin(); | ||
|  |     int getSelectionEnd(); | ||
|  | 
 | ||
|  | 
 | ||
|  | private slots: | ||
|  |     void updateCursor(); | ||
|  | 
 | ||
|  | private: | ||
|  |     void adjust(); | ||
|  |     void ensureVisible(); | ||
|  | 
 | ||
|  |     QColor _addressAreaColor; | ||
|  |     QColor _highlightingColor; | ||
|  |     QColor _selectionColor; | ||
|  |     QScrollArea *_scrollArea; | ||
|  |     QTimer _cursorTimer; | ||
|  |     QUndoStack *_undoStack; | ||
|  | 
 | ||
|  |     XByteArray _xData;                      // Hält den Inhalt des Hex Editors
 | ||
|  | 
 | ||
|  |     bool _blink;                            // true: then cursor blinks
 | ||
|  |     bool _renderingRequired;                // Flag to store that rendering is necessary
 | ||
|  |     bool _addressArea;                      // left area of QHexEdit
 | ||
|  |     bool _asciiArea;                        // medium area
 | ||
|  |     bool _highlighting;                     // highlighting of changed bytes
 | ||
|  |     bool _overwriteMode; | ||
|  |     bool _readOnly;                         // true: the user can only look and navigate
 | ||
|  | 
 | ||
|  |     int _charWidth, _charHeight;            // char dimensions (dpendend on font)
 | ||
|  |     int _cursorX, _cursorY;                 // graphics position of the cursor
 | ||
|  |     int _cursorPosition;                    // character positioin in stream (on byte ends in to steps)
 | ||
|  |     int _xPosAdr, _xPosHex, _xPosAscii;     // graphics x-position of the areas
 | ||
|  | 
 | ||
|  |     int _selectionBegin;                    // First selected char
 | ||
|  |     int _selectionEnd;                      // Last selected char
 | ||
|  |     int _selectionInit;                     // That's, where we pressed the mouse button
 | ||
|  | 
 | ||
|  |     int _size; | ||
|  | }; | ||
|  | 
 | ||
|  | /** \endcond docNever */ | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 |