-
-
Notifications
You must be signed in to change notification settings - Fork 128
/
mainwindow.hpp
138 lines (115 loc) · 3.72 KB
/
mainwindow.hpp
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
/*
* Copyright (C) 2019 Ashar Khan <ashar786khan@gmail.com>
*
* This file is part of CPEditor.
*
* CPEditor 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.
*
* I will not be responsible if CPEditor behaves in unexpected way and
* causes your ratings to go down and or loose any important contest.
*
* Believe Software is "Software" and it isn't not immune to bugs.
*
*/
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include <CompanionServer.hpp>
#include <Core.hpp>
#include <Formatter.hpp>
#include <IO.hpp>
#include <QCodeEditor>
#include <QFile>
#include <QLabel>
#include <QMainWindow>
#include <QShortcut>
#include <QSplitter>
#include <Runner.hpp>
#include <SettingsManager.hpp>
#include <UpdateNotifier.hpp>
#include <cftools.hpp>
#include <generated/version.hpp>
QT_BEGIN_NAMESPACE
namespace Ui
{
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(int index, QString fileOpen, QWidget *parent = nullptr);
~MainWindow() override;
QString fileName() const;
QString filePath() const;
QString problemURL() const;
void save(bool force);
void saveAs();
bool closeConfirm();
void killProcesses();
void detachedExecution();
void compile();
void run();
void runAndCompile();
void formatSource();
void applyCompanion(Network::CompanionData data);
void maybeLoadTemplate();
void setLanguage(QString lang);
void setSettingsData(Settings::SettingsData data, bool);
MessageLogger *getLogger();
QFile *getOpenFile();
QSplitter *getSplitter();
private slots:
void onTextChangedTriggered();
void on_compile_clicked();
void on_run_clicked();
void on_runOnly_clicked();
void executionFinished(int, int, QString);
void on_in1_customContextMenuRequested(const QPoint &pos);
void on_in2_customContextMenuRequested(const QPoint &pos);
void on_in3_customContextMenuRequested(const QPoint &pos);
void on_compiler_edit_customContextMenuRequested(const QPoint &pos);
void on_out3_customContextMenuRequested(const QPoint &pos);
void on_out2_customContextMenuRequested(const QPoint &pos);
void on_out1_customContextMenuRequested(const QPoint &pos);
void on_out1_diff_clicked();
void on_out2_diff_clicked();
void on_out3_diff_clicked();
void on_changeLanguageButoon_clicked();
signals:
void editorTextChanged(bool isUnsaved, MainWindow *widget);
void confirmTriggered(MainWindow *widget);
private:
const int windowIndex;
Ui::MainWindow *ui;
QCodeEditor *editor;
QString language;
QFile *openFile = nullptr;
Settings::SettingsData data;
bool isLanguageSet = false;
Core::Formatter *formatter = nullptr;
Core::IO::InputReader *inputReader = nullptr;
Core::Compiler *compiler = nullptr;
Core::Runner *runner = nullptr;
MessageLogger log;
QVector<QPlainTextEdit *> input = QVector<QPlainTextEdit *>(3, nullptr);
QVector<QPlainTextEdit *> output = QVector<QPlainTextEdit *>(3, nullptr);
QVector<QLabel *> verdict = QVector<QLabel *>(3, nullptr);
QVector<QString *> expected = QVector<QString *>(3, nullptr);
Network::CompanionData companionData;
void setEditor();
void setupCore();
void clearTests(bool outputOnly = false);
void loadTests();
void saveTests();
void setCFToolsUI();
void updateVerdict(Core::Verdict, int);
bool isTextChanged();
bool isVerdictPass(QString, QString);
bool saveFile(bool, std::string);
void performCoreDiagonistics();
};
#endif // MAINWINDOW_HPP