-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQHexWindow.h
147 lines (128 loc) · 3.23 KB
/
QHexWindow.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#ifndef Q_DOWNLOAD_WIDGET
#define Q_DOWNLOAD_WIDGET
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QToolButton>
#include <QPropertyAnimation>
#include <QParallelAnimationGroup>
#include <QFont>
#include <QFontInfo>
#include <QFontDatabase>
#include <QFile>
#include <QApplication>
#include <QMessageBox>
#include <QSlider>
#include <QFileDialog>
#include <QDateTime>
#include <QTextEdit>
#include <QStyleOption>
#include <QPainter>
#include <QScrollBar>
#include <QToolButton>
#include <QMouseEvent>
#include <QTimer>
#include <QLineEdit>
#include <QAction>
class QHexWindow : public QWidget
{
Q_OBJECT
public:
explicit QHexWindow(QWidget *parent = nullptr);
~QHexWindow();
protected:
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
signals:
void onFileSelected(QString);
void fileOpenError(void);
void updateFirmwareSize(int);
public slots:
void displayHex();
void refreshDisplay();
void showSearchBox();
private slots:
void selectHexFile();
void highlightString();
void minimize();
void close();
void handleScroll(int i);
private:
QSize sizeHint() const;
QSize minimumSizeHint() const;
private:
QString mHexFilename;
QColor mThemeColor;
QTextEdit *mHexArea;
QTextEdit *mASCIIArea;
QTextEdit *mAddressAreaTop;
QTextEdit *mAddressAreaLeft;
QLabel *mFileStatistics;
QLabel *mTitleBar;
QPushButton *mSelectButton;
QPushButton *mRefreshButton;
QScrollBar *mRightScrollBar;
QPushButton *mButtonMinimize;
QPushButton *mButtonClose;
QWidget *mSearchBar;
QLineEdit *mSearchBox,*mSearchResult;
QPushButton *mSearchNext, *mSearchPrev, *mSearchClose;
int mXo, mYo;
QPoint mStartPos;
bool isMousePressed;
bool isSearchBoxShown;
QString mDocumentText;
QTextCharFormat mTextFormat,mTextAlternateFormat;
QTextCharFormat mSearchHighlightFormat;
enum RecordType
{
DATA_RECORD,
END_OF_FILE_RECORD,
EXTENDED_SEGMENT_ADDRESS,
START_SEGMENT_ADDRESS,
EXTENDED_LINEAR_ADDRESS,
START_LINEAR_ADDRESS,
NO_OF_RECORD_TYPES
};
enum ErrorType
{
SOF_RECORD_NOT_FOUND,
ODD_NO_OF_CHARACTERS,
CHKSUM_MISMATCH,
LENGTH_MISMATCH,
DATA_OVERWRITE,
MULTIPLE_EOF,
EXT_SEG_LEN_ERROR,
START_SEG_LEN_ERROR,
EXT_LINER_LEN_ERROR,
START_LINEAR_LEN_ERROR,
MULTIPLE_START_SEG,
MULTIPLE_START_LINEAR,
NON_HEX_CHAR,
UNKNOWN_TYPE
};
QFile *mIntelHexFile;
QMultiMap<qint32,ErrorType> mFileErrors;
QByteArray mIntelHexData;
QList<qint32> mIntelHexAddress;
struct
{
int CS;
int IP;
bool exists;
} SegmentAddress;
struct
{
int EIP;
bool exists;
} LinearAddress;
bool foundEOF;
qint32 mTotalBytes;
private:
void addError(qint32 LineNumber, ErrorType ErrorInfo);
void processFile(const QString &Filename);
void listErrors(void);
};
#endif // Q_DOWNLOAD_WIDGET