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.
qhexrenderer.h
Go to the documentation of this file.
1 #ifndef QHEXRENDERER_H
2 #define QHEXRENDERER_H
3 
4 /*
5  * Nibble encoding:
6  * AB -> [A][B]
7  * Nibble Index: 1 0
8  */
9 
10 #include <QTextDocument>
11 #include <QPainter>
12 #include "qhexdocument.h"
13 
14 class QHexRenderer : public QObject
15 {
16  Q_OBJECT
17 
18  public:
20 
21  public:
22  explicit QHexRenderer(QHexDocument* document, const QFontMetricsF& fontmetrics, QObject *parent = nullptr);
23  void renderFrame(QPainter* painter);
24  void render(QPainter* painter, quint64 start, quint64 end, quint64 firstline); // begin included, end excluded
25  void updateMetrics(const QFontMetricsF& fm);
26  void enableCursor(bool b = true);
27  void selectArea(const QPoint& pt);
28 
29  public:
30  void blinkCursor();
31  bool hitTest(const QPoint& pt, QHexPosition* position, quint64 firstline) const;
32  int hitTestArea(const QPoint& pt) const;
33  int selectedArea() const;
34  bool editableArea(int area) const;
35  quint64 documentLastLine() const;
36  int documentLastColumn() const;
37  quint64 documentLines() const;
38  int documentWidth() const;
39  int lineHeight() const;
40  QRect getLineRect(quint64 line, quint64 firstline) const;
41  int headerLineCount() const;
42  int borderSize() const;
43  int hexLineWidth() const;
44 
45  private:
46  QString hexString(quint64 line, QByteArray *rawline = nullptr) const;
47  QString asciiString(quint64 line, QByteArray *rawline = nullptr) const;
48  QByteArray getLine(quint64 line) const;
49  qint64 rendererLength() const;
50  int getAddressWidth() const;
51  int getHexColumnX() const;
52  int getAsciiColumnX() const;
53  int getEndColumnX() const;
54  qreal getCellWidth() const;
55  int getNCellsWidth(int n) const;
56  void unprintableChars(QByteArray &ascii) const;
57 
58  private:
59  enum Factor {Ascii = 1, Hex = 3};
60 
61  void applyDocumentStyles(QPainter* painter, QTextDocument *textdocument) const;
62  void applyBasicStyle(QTextCursor& textcursor, const QByteArray& rawline, Factor factor) const;
63  void applyMetadata(QTextCursor& textcursor, quint64 line, Factor factor) const;
64  void applySelection(QTextCursor& textcursor, quint64 line, Factor factor) const;
65  void applyCursorAscii(QTextCursor& textcursor, quint64 line) const;
66  void applyCursorHex(QTextCursor& textcursor, quint64 line) const;
67  void drawAddress(QPainter *painter, const QPalette &palette, const QRect &linerect, quint64 line);
68  void drawHex(QPainter *painter, const QPalette &palette, const QRect &linerect, quint64 line);
69  void drawAscii(QPainter *painter, const QPalette &palette, const QRect &linerect, quint64 line);
70  void drawHeader(QPainter *painter, const QPalette &palette);
71 
72  private:
73  QHexDocument* m_document;
74  QFontMetricsF m_fontmetrics;
75  int m_selectedarea;
76  bool m_cursorenabled;
77 };
78 
79 #endif // QHEXRENDERER_H
QHexRenderer::blinkCursor
void blinkCursor()
Definition: qhexrenderer.cpp:170
QHexCursor::isLineSelected
bool isLineSelected(quint64 line) const
Definition: qhexcursor.cpp:54
DEFAULT_HEX_LINE_LENGTH
#define DEFAULT_HEX_LINE_LENGTH
Definition: qhexcursor.h:6
QHexCursor::currentColumn
int currentColumn() const
Definition: qhexcursor.cpp:48
QHexRenderer::getLineRect
QRect getLineRect(quint64 line, quint64 firstline) const
Definition: qhexrenderer.cpp:136
QHexRenderer::headerLineCount
int headerLineCount() const
Definition: qhexrenderer.cpp:137
QHexMetadata::hasMetadata
bool hasMetadata(quint64 line) const
Definition: qhexmetadata.cpp:36
QHexDocument::read
QByteArray read(qint64 offset, int len=0)
Definition: qhexdocument.cpp:48
QHexPosition
Definition: qhexcursor.h:9
QHexRenderer::AddressArea
@ AddressArea
Definition: qhexrenderer.h:19
QHexPosition::lineWidth
quint8 lineWidth
Definition: qhexcursor.h:12
QHexDocument::hexLineWidth
int hexLineWidth() const
Definition: qhexdocument.cpp:39
QHexRenderer::AsciiArea
@ AsciiArea
Definition: qhexrenderer.h:19
QHexDocument
Definition: qhexdocument.h:11
QHexCursor::insertionMode
InsertionMode insertionMode() const
Definition: qhexcursor.cpp:45
QHexRenderer::documentLastColumn
int documentLastColumn() const
Definition: qhexrenderer.cpp:132
QHexRenderer::renderFrame
void renderFrame(QPainter *painter)
Definition: qhexrenderer.cpp:16
QHexRenderer::HexArea
@ HexArea
Definition: qhexrenderer.h:19
QHexMetadataItem
Definition: qhexmetadata.h:23
QHexRenderer::ExtraArea
@ ExtraArea
Definition: qhexrenderer.h:19
qhexrenderer.h
QHexPosition::column
int column
Definition: qhexcursor.h:11
QHexPosition::nibbleindex
int nibbleindex
Definition: qhexcursor.h:13
QHexCursor::clearSelection
void clearSelection()
Definition: qhexcursor.cpp:70
QHexCursor::selectionEnd
const QHexPosition & selectionEnd() const
Definition: qhexcursor.cpp:30
QHexRenderer::hitTest
bool hitTest(const QPoint &pt, QHexPosition *position, quint64 firstline) const
Definition: qhexrenderer.cpp:78
QHexDocument::length
qint64 length() const
Definition: qhexdocument.cpp:33
QHexRenderer::documentWidth
int documentWidth() const
Definition: qhexrenderer.cpp:134
QHexRenderer::render
void render(QPainter *painter, quint64 start, quint64 end, quint64 firstline)
Definition: qhexrenderer.cpp:48
QHexRenderer::editableArea
bool editableArea(int area) const
Definition: qhexrenderer.cpp:130
QHexMetadata::get
const QHexLineMetadata & get(quint64 line) const
Definition: qhexmetadata.cpp:5
QHexCursor::selectionStart
const QHexPosition & selectionStart() const
Definition: qhexcursor.cpp:16
QHexRenderer::borderSize
int borderSize() const
Definition: qhexrenderer.cpp:139
QHexDocument::metadata
QHexMetadata * metadata() const
Definition: qhexdocument.cpp:47
QHexRenderer::hitTestArea
int hitTestArea(const QPoint &pt) const
Definition: qhexrenderer.cpp:112
QHexCursor
Definition: qhexcursor.h:22
QHexRenderer::lineHeight
int lineHeight() const
Definition: qhexrenderer.cpp:135
QHexRenderer::selectedArea
int selectedArea() const
Definition: qhexrenderer.cpp:129
QHexRenderer::hexLineWidth
int hexLineWidth() const
Definition: qhexrenderer.cpp:145
QHexRenderer::enableCursor
void enableCursor(bool b=true)
Definition: qhexrenderer.cpp:68
QHexCursor::currentNibble
int currentNibble() const
Definition: qhexcursor.cpp:49
QHexDocument::baseAddress
quint64 baseAddress() const
Definition: qhexdocument.cpp:34
QHexRenderer::HeaderArea
@ HeaderArea
Definition: qhexrenderer.h:19
QHexDocument::areaIndent
int areaIndent() const
Definition: qhexdocument.cpp:37
qhexdocument.h
QHexRenderer::QHexRenderer
QHexRenderer(QHexDocument *document, const QFontMetricsF &fontmetrics, QObject *parent=nullptr)
Definition: qhexrenderer.cpp:10
QHexRenderer::selectArea
void selectArea(const QPoint &pt)
Definition: qhexrenderer.cpp:70
QHexPosition::line
quint64 line
Definition: qhexcursor.h:10
QHexRenderer::updateMetrics
void updateMetrics(const QFontMetricsF &fm)
Definition: qhexrenderer.cpp:67
QHexRenderer
Definition: qhexrenderer.h:14
DEFAULT_AREA_IDENTATION
#define DEFAULT_AREA_IDENTATION
Definition: qhexcursor.h:7
QHexLineMetadata
std::list< QHexMetadataItem > QHexLineMetadata
Definition: qhexmetadata.h:34
HEX_UNPRINTABLE_CHAR
#define HEX_UNPRINTABLE_CHAR
Definition: qhexrenderer.cpp:8
QHexCursor::currentLine
quint64 currentLine() const
Definition: qhexcursor.cpp:47
QHexDocument::cursor
QHexCursor * cursor() const
Definition: qhexdocument.cpp:35
QHexRenderer::documentLastLine
quint64 documentLastLine() const
Definition: qhexrenderer.cpp:131
QHexMetadata
Definition: qhexmetadata.h:37
QHexRenderer::documentLines
quint64 documentLines() const
Definition: qhexrenderer.cpp:133
QHexCursor::OverwriteMode
@ OverwriteMode
Definition: qhexcursor.h:27