-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMainWindow.h
193 lines (163 loc) · 9.57 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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTreeWidgetItem>
#include <QToolBar>
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include <QPrinter>
#include <QPrintDialog>
#include <QVector>
#include "Utilities/WindowHelper.h"
#include "Utilities/VersionControl.h"
#include "Utilities/CommitDialog.h"
#include "WorkspaceArea.h"
#include "FilterTransform/AbstractImageFilterTransform.h"
#include "Palette/Histogram.h"
#include "Palette/Brush.h"
#include "Palette/ColorControls.h"
#include "Palette/BasicControls.h"
#include "Palette/Effects.h"
#include "AboutUs.h"
#include "Faq.h"
#include "ServerRoom.h"
#include "Server/Server.h"
#include "Server/Client.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
protected:
void closeEvent(QCloseEvent* event) override;
virtual bool eventFilter(QObject *obj, QEvent *event) override;
private slots:
void on_actionNew_triggered();
void on_actionOpen_triggered();
void on_actionPrint_triggered();
void on_actionAbout_Us_triggered();
void on_actionExit_triggered();
void on_actionUndo_triggered();
void on_actionRedo_triggered();
void on_actionRevert_to_Last_Commit_triggered();
void on_actionSave_triggered();
void on_actionFAQs_triggered();
// Saving, workspace related slots.
void saveAs();
void onImageDrawn();
void clearImage();
void onZoom(const QString&);
void onCrossCursorChanged(WorkspaceArea::CursorMode, int data);
void rerenderWorkspaceArea(const QImage&, int width, int height);
void applyFilterTransform(AbstractImageFilterTransform* filterTransform, int size, double strength, bool fromServer = false);
void applyFilterTransformOnPreview(AbstractImageFilterTransform* filterTransform, int size, double strength);
void onUpdateImagePreview();
// Server related slots.
void on_actionCreate_Room_triggered();
void on_actionJoin_Room_triggered();
void on_actionView_Room_triggered();
void onCreateRoom(QString);
void onJoinRoom(QString, QString, quint16);
void sendUsername();
void clientJsonReceived(const QJsonObject&);
void onConnectionFailed();
void onConnectionStopped();
void onDisconnect();
void onSendResize(int, int);
void onSendCrop(int, int, int, int);
void onSendCropWithMagicWand(int, int);
void onSendMoveScribble(double, double, QString, int);
void onSendReleaseScribble();
// Version control related slots.
void on_actionCommit_Changes_triggered();
void onCommitChanges(QString changes);
private:
// Workspace transformation related member functions.
void resizeGraphicsViewBoundaries(int newWidth, int newHeight);
void reconnectConnection();
void reconstructWorkspaceArea(int imageWidth, int imageHeight);
void handleWheelEvent(QGraphicsSceneWheelEvent* event);
void resetGraphicsViewScale();
// Menu bar related member functions.
void addRoot(QTreeWidgetItem* parent, QString name);
void customAddChild(QTreeWidgetItem* parent, QWidget* widget);
void createActions();
void createMenus();
// Version control related member functions.
void generateHistoryMenu();
void checkoutCommit(int masterNodeNumber, int sideNodeNumber, bool fromActionMenu = false);
void commitChanges(QImage changedImage, QString changes);
void redo();
void undo();
void revertToLastCommit();
void commitBranch();
// Saving related member functions.
bool maybeSave();
bool saveAsFile(const QByteArray &fileFormat);
void fitImageToScreen(int, int);
// Server related member functions.
void joinRoom();
void sendInitialImage();
void destroyConnection();
void sendFilter(const QString&, int, double);
void sendFilterWithMask(const QString&, int, double, const QImage&);
void sendVersion(const QString&);
void sendVersion(const QString&, int, int);
void handleFilterBroadcast(const QString&, int, double);
void handleFilterBroadcast(const QString&, int, double, const QImage&);
void handleVersionControlBroadcast(const QString&);
void handleVersionControlBroadcast(const QString&, int, int);
void goToServerRoom(bool onEnter = false);
void sendClearScreen();
private:
Ui::MainWindow* ui;
WorkspaceArea* workspaceArea; //!< Main workspace, where the image lives.
WorkspaceArea* temporaryArea = nullptr; //!< Temporary workspaceArea, used in case a second workspaceArea is needed.
QGraphicsView* graphicsView; //!< Store the workspaceArea(graphicsScene) on a graphicsView.
VersionControl imageHistory; //!< Version Control data structure, commits and merges, image history.
QVector<QMenu*> imageHistoryMenu; //!< Stores the QMenus used for displaying the imageHistory.
int masterNodeNumber = 0; //!< Saves current checkout master node number (0: latest, 1: previous, etc).
int sideNodeNumber = 0; //!< Saves current checkout node number in a master node.
QMenu* optionMenu; //!< optionMenu is generated during runtime.
QList<QAction*> saveAsActs; //!< all possible image format that can be used to save the image.
QAction* clearScreenAct; //!< an action to clear the workspaceArea.
QTreeWidgetItem* histogram; //!< The parent wrapper of the histogram widget.
QTreeWidgetItem* basicControls; //!< The parent wrapper of the basicControls widget.
QTreeWidgetItem* colorControls; //!< The parent wrapper of the colorControls widget.
QTreeWidgetItem* brushControls; //!< The parent wrapper of the brushControls widget.
QTreeWidgetItem* effects; //!< The parent wrapper of the effects widget.
Histogram* histo; //!< Histogram widget.
Brush* brush; //!< Brush widget.
ColorControls* colors; //!< ColorControls widget.
BasicControls* basics; //!< BasicControls widget.
Effects* effect; //!< Effects widget.
QString fileName = ""; //!< filename of the loaded image.
QByteArray fileFormat; //!< the file format of our loaded image.
bool fileSaved = false; //!< the state that saves whether our current project been saved.
double currentZoom = 1.0; //!< Saves the current zoom level.
QComboBox* comboBox; //!< comboBox to store zoom level options.
double resizedImageHeight = WorkspaceArea::SCENE_HEIGHT;
double resizedImageWidth = WorkspaceArea::SCENE_WIDTH;
ServerRoom* room = nullptr; //!< ServerRoom instance.
QString username; //!< Username name.
Server* server = nullptr; //!< Server instance.
Client* client = nullptr; //!< Client instance.
QString ip; //!< Server IP.
quint16 port; //!< Server port.
bool isHost = false; //!< Current instance is a hos.
bool isConnected = false; //!< Connected to server.
};
/**
* @brief Close Application slot.
* @details Closes the application when actionExit is triggered.
*/
inline void MainWindow::on_actionExit_triggered()
{
MainWindow::close();
}
#endif // MAINWINDOW_H