-
Notifications
You must be signed in to change notification settings - Fork 195
/
mainwindow.h
316 lines (289 loc) · 9.9 KB
/
mainwindow.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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
/****************************************************************************
** SASM - simple IDE for assembler development
** Copyright (C) 2013 Dmitriy Manushin
** Contact: site: http://dman95.github.io/SASM/
** e-mail: [email protected]
**
** This file is part of SASM.
**
** SASM is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** SASM is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with SASM. If not, see <http://www.gnu.org/licenses/>.
**
** Этот файл — часть SASM.
**
** SASM - свободная программа: вы можете перераспространять ее и/или
** изменять ее на условиях Стандартной общественной лицензии GNU в том виде,
** в каком она была опубликована Фондом свободного программного обеспечения;
** либо версии 3 лицензии, либо (по вашему выбору) любой более поздней
** версии.
**
** SASM распространяется в надежде, что она будет полезной,
** но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
** или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Стандартной
** общественной лицензии GNU.
**
** Вы должны были получить копию Стандартной общественной лицензии GNU
** вместе с этой программой. Если это не так, см.
** <http://www.gnu.org/licenses/>.)
**
****************************************************************************/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStackedWidget>
#include <QTextBrowser>
#include <QTimer>
#include <QElapsedTimer>
#include <QMenuBar>
#include <QMessageBox>
#include <QFileDialog>
#include <QTime>
#include <QPointer>
#include <QColorDialog>
#include <QSignalMapper>
#include <QMap>
#include <QSplitter>
#include <QToolBar>
#include <QMutex>
#include <QDragEnterEvent>
#include <QMimeData>
#include "tab.h"
#include "highlighter.h"
#include "debugger.h"
#include "finddialog.h"
#include "ruqtextedit.h"
#include "getstartedwidget.h"
#include "ui_settings.h"
#include "debugtablewidget.h"
#include "debuganycommandwidget.h"
#include "assembler.h"
#include "nasm.h"
#include "gas.h"
#include "common.h"
#include "fasm.h"
#include "signallocker.h"
#include "masm.h"
#define SASM_VERSION "3.14.0"
/**
* @file mainwindow.h
* Defines the main user interface.
*/
/*! \brief The MainWindow class defines the actions and behavior of the main user interface.
*
*/
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(const QStringList & args, QWidget *parent = 0);
~MainWindow();
void initUi();
void createMenus();
void createActions();
void createButtons();
void createToolBars();
void writeSettings();
void setupEditor(int i);
bool okToContinue(int index = -1);
void setTabPath(const QString &filePath, int index = -1);
bool removeDirRecuresively(const QString &dirName);
private:
//ui
GetStartedWidget *getStartedWidget;
QStackedWidget *mainWidget;
QSplitter *splitter;
QVBoxLayout *workLayout;
QWidget *workWidget;
RuQTextEdit *compilerOut;
QTabWidget *tabs;
//! Menus and Actions
QMenu *fileMenu;
QMenu *editMenu;
QMenu *debugMenu;
QMenu *buildMenu;
QMenu *settingsMenu;
QMenu *helpMenu;
QAction *newAction;
QAction *openAction;
QAction *closeAction;
QAction *saveAction;
QAction *saveAsAction;
QAction *saveExeAction;
QAction *exitAction;
QAction *findAction;
QAction *commentAction;
QAction *uncommentAction;
QAction *undoAction;
QAction *redoAction;
QAction *cutAction;
QAction *copyAction;
QAction *pasteAction;
QAction *deleteAction;
QAction *selectAllAction;
QAction *putTabAction;
QAction *deleteTabAction;
QAction *buildAction;
QAction *runAction;
QAction *runExeAction;
QAction *stopAction;
QAction *debugAction;
QAction *debugNextAction;
QAction *debugNextNiAction;
QAction *debugToggleBreakpointAction;
QAction *debugShowRegistersAction;
QAction *debugShowMemoryAction;
QAction *settingsAction;
QAction *helpAction;
QAction *aboutAction;
//! Toolbars
QToolBar *fileToolBar;
QToolBar *editToolBar;
QToolBar *buildToolBar;
QToolBar *debugToolBar;
//! Builder and debugger and all that concern to them
QProcess *runProcess;
CodeEditor *prevCodeEditor;
QTimer *timer;
QElapsedTimer programExecutionTime;
Debugger *debugger;
bool programIsBuilded;
QPointer<DebugTableWidget> registersWindow;
QDockWidget *registersDock;
QPointer<DebugTableWidget> memoryWindow;
QDockWidget *memoryDock;
QList<RuQPlainTextEdit::Watch> watches;
DebugAnyCommandWidget *debugAnyCommandWidget;
bool programStopped;
int outputIndex;
Assembler *assembler;
bool debuggerWasStarted;
QString debugKey;
//! Highlighters
Highlighter *highlighter;
Highlighter *settingsHighlighter;
//! Search
QPointer<FindDialog> findDialog;
Qt::CaseSensitivity prevCs;
//! Settings and Help
QPointer<QWidget> settingsWindow;
Ui::SettingsWindow settingsUi;
QString startText;
CodeEditor *settingsStartTextEditor;
//!save and open
QString saveOpenDirectory;
QPointer<QTextBrowser> help;
QSignalMapper *colorSignalMapper;
QSignalMapper *fontsSignalMapper;
QList<QPushButton *> colorButtons;
//! According to colorButtons
QList<QColor> defaultColors;
QMap<QString, QColor> colorsMap;
QList<QCheckBox *> fontCheckBoxes;
QSettings settings;
QString backupAssembler;
QString backupMode;
QString backupAssemblerOptions;
QString backupLinkerOptions;
QString backupObjectFileName;
bool backupDisableLinking;
bool backupCurrentDir;
QString backupAssemblerPath;
QString backupStartText;
QString backupLinkerPath;
//! About close
bool closeFromCloseAll;
void closeEvent(QCloseEvent *e);
public slots:
//! Actions and Menus
void newFile();
void openFile();
void closeFile();
bool saveFile(int index = -1, bool openSaveAs = true);
bool saveAsFile(int index = -1);
void saveExe();
bool closeApp();
void refreshEditMenu();
void changeCurrentSavedState(bool changed);
void openFile(QString path);
//! Build
void buildProgram(bool debugMode = false);
void runProgram();
void runExeProgram();
void stopProgram();
void testStopOfProgram();
void setProgramBuildedFlagToFalse();
void changeCurrentTab(int index);
void printLog(const QString & message, const QColor &color);
void printLogWithTime(const QString & message, const QColor &color);
void startCountProgramTime();
//! Debug
void debug();
void enableDebugActions();
void disableDebugActions(bool start = false);
void debugNext();
void debugNextNi();
void debugExit();
void debugToggleBreakpoint();
void debugShowRegisters();
void debugShowMemory();
void debugRunCommand(QString command, bool print);
void saveWatches(DebugTableWidget *table);
void setShowRegistersToUnchecked();
void setShowMemoryToUnchecked();
void setShowMemoryToChecked(const RuQPlainTextEdit::Watch &variable);
void showAnyCommandWidget();
void closeAnyCommandWidget();
void printOutput(QString msg, int index = -1);
void getOutput();
void changeDebugActionToStart();
//! Search
void find();
void findNext(const QString &pattern, Qt::CaseSensitivity cs, bool all, bool replace,
const QString &replaceText = 0);
void findNextAfterTextChange();
//! Settings
void restorePrevSession(bool notNotify = false);
void openSettings();
void initColorButtons(bool dark, bool ignoreSettings);
void changeColorButtonsLight();
void changeColorButtonsDark();
void changeMode(bool x86);
void changeAssembler();
void changeStartText();
void saveSettings();
void exitSettings();
void changeActionsState(int widgetIndex);
void resetAllSettings();
void pickColor(QWidget *colorButton, bool init = false, bool ignoreSettings = false);
void changeHighlightingFont(QWidget *box, bool init = false);
void changeHighlightingLineMode(int mode);
void recreateHighlighter();
void recreateAssembler(bool start = false);
void initAssemblerSettings(bool firstOpening);
void backupSettings();
void restoreSettingsAndExit();
void printMasmInfo();
void enableOrDisableLinkingEdit(int disableLinkingCheckboxState);
//! Closing
bool deleteTab(int index, bool saveFileName = false);
void closeAllChildWindows();
//! Help and About
void openHelp();
void openAbout();
//! Single Application message
void onMessageReceived(const QString &message);
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
};
#endif // MAINWINDOW_H