Elaztek Developer Hub
Blamite Game Engine - Keystone  00390.07.02.23.1947.blamite
A library that enables the use of Qt in Blamite's editing tools.
qhexdocument.h
Go to the documentation of this file.
1 #ifndef QHEXDOCUMENT_H
2 #define QHEXDOCUMENT_H
3 
4 #include <QUndoStack>
5 #include <QFile>
6 #include "buffer/qhexbuffer.h"
7 #include "buffer/qfilebuffer.h"
8 #include "qhexmetadata.h"
9 #include "qhexcursor.h"
10 
11 class QHexDocument: public QObject
12 {
13  Q_OBJECT
14 
15  private:
16  explicit QHexDocument(QHexBuffer* buffer, QObject *parent = nullptr);
17 
18  public:
19  bool isEmpty() const;
20  bool atEnd() const;
21  bool canUndo() const;
22  bool canRedo() const;
23  qint64 length() const;
24  quint64 baseAddress() const;
25  QHexCursor* cursor() const;
26  QHexMetadata* metadata() const;
27  int areaIndent() const;
28  void setAreaIndent(quint8 value);
29  int hexLineWidth() const;
30  void setHexLineWidth(quint8 value);
31 
32  public:
33  void removeSelection();
34  QByteArray read(qint64 offset, int len = 0);
35  QByteArray selectedBytes() const;
36  char at(int offset) const;
37  void setBaseAddress(quint64 baseaddress);
38  void sync();
39 
40  public slots:
41  void undo();
42  void redo();
43  void cut(bool hex = false);
44  void copy(bool hex = false);
45  void paste(bool hex = false);
46  void insert(qint64 offset, uchar b);
47  void replace(qint64 offset, uchar b);
48  void insert(qint64 offset, const QByteArray& data);
49  void replace(qint64 offset, const QByteArray& data);
50  void remove(qint64 offset, int len);
51  QByteArray read(qint64 offset, int len) const;
52  bool saveTo(QIODevice* device);
53 
54  qint64 searchForward(const QByteArray &ba);
55  qint64 searchBackward(const QByteArray &ba);
56 
57  public:
58  template<typename T> static QHexDocument* fromDevice(QIODevice* iodevice, QObject* parent = nullptr);
59  template<typename T> static QHexDocument* fromFile(QString filename, QObject* parent = nullptr);
60  template<typename T> static QHexDocument* fromMemory(char *data, int size, QObject* parent = nullptr);
61  template<typename T> static QHexDocument* fromMemory(const QByteArray& ba, QObject* parent = nullptr);
62  static QHexDocument* fromLargeFile(QString filename, QObject *parent = nullptr);
63 
64  signals:
65  void canUndoChanged(bool canUndo);
66  void canRedoChanged(bool canRedo);
67  void documentChanged();
68  void lineChanged(quint64 line);
69 
70  private:
71  QHexBuffer* m_buffer;
72  QHexMetadata* m_metadata;
73  QUndoStack m_undostack;
74  QHexCursor* m_cursor;
75  quint64 m_baseaddress;
76  quint8 m_areaindent;
77  quint8 m_hexlinewidth;
78 };
79 
80 template<typename T> QHexDocument* QHexDocument::fromDevice(QIODevice* iodevice, QObject *parent)
81 {
82  bool needsclose = false;
83 
84  if(!iodevice->isOpen())
85  {
86  needsclose = true;
87  iodevice->open(QIODevice::ReadWrite);
88  }
89 
90  QHexBuffer* hexbuffer = new T();
91  if (hexbuffer->read(iodevice))
92  {
93  if(needsclose)
94  iodevice->close();
95 
96  return new QHexDocument(hexbuffer, parent);
97  } else {
98  delete hexbuffer;
99  }
100 
101  return nullptr;
102 }
103 
104 template<typename T> QHexDocument* QHexDocument::fromFile(QString filename, QObject *parent)
105 {
106  QFile f(filename);
107  f.open(QFile::ReadOnly);
108 
109  QHexDocument* doc = QHexDocument::fromDevice<T>(&f, parent);
110  f.close();
111  return doc;
112 }
113 
114 template<typename T> QHexDocument* QHexDocument::fromMemory(char *data, int size, QObject *parent)
115 {
116  QHexBuffer* hexbuffer = new T();
117  hexbuffer->read(data, size);
118  return new QHexDocument(hexbuffer, parent);
119 }
120 
121 template<typename T> QHexDocument* QHexDocument::fromMemory(const QByteArray& ba, QObject *parent)
122 {
123  QHexBuffer* hexbuffer = new T();
124  hexbuffer->read(ba);
125  return new QHexDocument(hexbuffer, parent);
126 }
127 
128 #endif // QHEXEDITDATA_H
QHexDocument::canRedo
bool canRedo() const
Definition: qhexdocument.cpp:32
DEFAULT_HEX_LINE_LENGTH
#define DEFAULT_HEX_LINE_LENGTH
Definition: qhexcursor.h:6
QHexMetadata::setLineWidth
void setLineWidth(quint8 width)
Definition: qhexmetadata.cpp:94
QHexBuffer::at
virtual uchar at(qint64 idx)
Definition: qhexbuffer.cpp:6
QHexCursor::moveTo
void moveTo(const QHexPosition &pos)
Definition: qhexcursor.cpp:76
QHexDocument::fromLargeFile
static QHexDocument * fromLargeFile(QString filename, QObject *parent=nullptr)
Definition: qhexdocument.cpp:200
QHexDocument::sync
void sync()
Definition: qhexdocument.cpp:78
QHexDocument::read
QByteArray read(qint64 offset, int len=0)
Definition: qhexdocument.cpp:48
QHexDocument::fromFile
static QHexDocument * fromFile(QString filename, QObject *parent=nullptr)
Definition: qhexdocument.h:104
QHexDocument::cut
void cut(bool hex=false)
Definition: qhexdocument.cpp:92
QHexCursor::position
const QHexPosition & position() const
Definition: qhexcursor.cpp:44
QHexDocument::hexLineWidth
int hexLineWidth() const
Definition: qhexdocument.cpp:39
QHexBuffer
Definition: qhexbuffer.h:7
QHexDocument::canUndo
bool canUndo() const
Definition: qhexdocument.cpp:31
QHexDocument
Definition: qhexdocument.h:11
QHexCursor::insertionMode
InsertionMode insertionMode() const
Definition: qhexcursor.cpp:45
QHexDocument::atEnd
bool atEnd() const
Definition: qhexdocument.cpp:30
QHexBuffer::length
virtual qint64 length() const =0
QHexPosition::offset
qint64 offset() const
Definition: qhexcursor.h:16
QHexCursor::clearSelection
void clearSelection()
Definition: qhexcursor.cpp:70
QHexCursor::QHexCursor
QHexCursor(QObject *parent=nullptr)
Definition: qhexcursor.cpp:4
ReplaceCommand
Definition: replacecommand.h:6
QHexDocument::canUndoChanged
void canUndoChanged(bool canUndo)
QHexBuffer::indexOf
virtual qint64 indexOf(const QByteArray &ba, qint64 from)=0
QHexDocument::searchBackward
qint64 searchBackward(const QByteArray &ba)
Definition: qhexdocument.cpp:185
QHexDocument::length
qint64 length() const
Definition: qhexdocument.cpp:33
QHexMetadata::metadataCleared
void metadataCleared()
QHexDocument::searchForward
qint64 searchForward(const QByteArray &ba)
Definition: qhexdocument.cpp:173
replacecommand.h
QHexDocument::lineChanged
void lineChanged(quint64 line)
InsertCommand
Definition: insertcommand.h:6
QHexDocument::paste
void paste(bool hex=false)
Definition: qhexdocument.cpp:115
QHexDocument::fromMemory
static QHexDocument * fromMemory(char *data, int size, QObject *parent=nullptr)
Definition: qhexdocument.h:114
QHexCursor::selectionStart
const QHexPosition & selectionStart() const
Definition: qhexcursor.cpp:16
QHexDocument::metadata
QHexMetadata * metadata() const
Definition: qhexdocument.cpp:47
QHexCursor
Definition: qhexcursor.h:22
QHexDocument::saveTo
bool saveTo(QIODevice *device)
Definition: qhexdocument.cpp:164
QHexCursor::selectionLength
int selectionLength() const
Definition: qhexcursor.cpp:46
QHexDocument::removeSelection
void removeSelection()
Definition: qhexdocument.cpp:50
QHexDocument::replace
void replace(qint64 offset, uchar b)
Definition: qhexdocument.cpp:139
QFileBuffer
Definition: qfilebuffer.h:7
QHexDocument::setHexLineWidth
void setHexLineWidth(quint8 value)
Definition: qhexdocument.cpp:40
qhexmetadata.h
QHexDocument::fromDevice
static QHexDocument * fromDevice(QIODevice *iodevice, QObject *parent=nullptr)
Definition: qhexdocument.h:80
QHexCursor::setLineWidth
void setLineWidth(quint8 width)
Definition: qhexcursor.cpp:120
QHexDocument::baseAddress
quint64 baseAddress() const
Definition: qhexdocument.cpp:34
QHexDocument::setBaseAddress
void setBaseAddress(quint64 baseaddress)
Definition: qhexdocument.cpp:69
qhexbuffer.h
QHexDocument::documentChanged
void documentChanged()
QHexBuffer::read
virtual void read(char *data, int size)
Definition: qhexbuffer.cpp:15
QHexDocument::redo
void redo()
Definition: qhexdocument.cpp:86
QHexDocument::at
char at(int offset) const
Definition: qhexdocument.cpp:67
QHexDocument::areaIndent
int areaIndent() const
Definition: qhexdocument.cpp:37
QHexMetadata::metadataChanged
void metadataChanged(quint64 line)
qhexdocument.h
qfilebuffer.h
QHexDocument::setAreaIndent
void setAreaIndent(quint8 value)
Definition: qhexdocument.cpp:38
QHexBuffer::lastIndexOf
virtual qint64 lastIndexOf(const QByteArray &ba, qint64 from)=0
insertcommand.h
RemoveCommand
Definition: removecommand.h:6
QHexDocument::copy
void copy(bool hex=false)
Definition: qhexdocument.cpp:101
QHexBuffer::write
virtual void write(QIODevice *iodevice)=0
DEFAULT_AREA_IDENTATION
#define DEFAULT_AREA_IDENTATION
Definition: qhexcursor.h:7
QHexDocument::isEmpty
bool isEmpty() const
Definition: qhexdocument.cpp:29
qhexcursor.h
removecommand.h
QHexDocument::cursor
QHexCursor * cursor() const
Definition: qhexdocument.cpp:35
QHexCursor::select
void select(const QHexPosition &pos)
Definition: qhexcursor.cpp:77
QHexDocument::undo
void undo()
Definition: qhexdocument.cpp:80
QHexBuffer::isEmpty
bool isEmpty() const
Definition: qhexbuffer.cpp:7
QHexDocument::canRedoChanged
void canRedoChanged(bool canRedo)
QHexDocument::selectedBytes
QByteArray selectedBytes() const
Definition: qhexdocument.cpp:59
QHexCursor::InsertMode
@ InsertMode
Definition: qhexcursor.h:27
QHexMetadata
Definition: qhexmetadata.h:37
QHexCursor::hasSelection
bool hasSelection() const
Definition: qhexcursor.cpp:68
QHexDocument::remove
void remove(qint64 offset, int len)
Definition: qhexdocument.cpp:156
QHexDocument::insert
void insert(qint64 offset, uchar b)
Definition: qhexdocument.cpp:134