forked from IENT/YUView
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmainwindow.h
290 lines (206 loc) · 7.44 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
/* YUView - YUV player with advanced analytics toolset
* Copyright (C) 2015 Institut für Nachrichtentechnik
* RWTH Aachen University, GERMANY
*
* YUView 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 2 of the License, or
* (at your option) any later version.
*
* YUView 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 YUView. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QListWidget>
#include <QList>
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QString>
#include <QMessageBox>
#include <QSettings>
#include <QTime>
#include <QTreeWidget>
#include <QMouseEvent>
#include <QTreeWidgetItem>
#include <QTimer>
#include <QDesktopWidget>
#include <QKeyEvent>
#include "settingswindow.h"
#include "edittextdialog.h"
#include "playlisttreewidget.h"
class PlaylistItem;
#include "displaywidget.h"
typedef enum {
RepeatModeOff,
RepeatModeOne,
RepeatModeAll
} RepeatMode;
typedef enum {
WindowModeSingle,
WindowModeSeparate
} WindowMode;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void keyPressEvent( QKeyEvent * event );
//void moveEvent ( QMoveEvent * event );
void closeEvent(QCloseEvent *event);
//void resizeEvent(QResizeEvent *event);
private:
PlaylistTreeWidget *p_playlistWidget;
Ui::MainWindow *ui;
QTimer *p_playTimer;
int p_currentFrame;
QTimer *p_heartbeatTimer;
QIcon p_playIcon;
QIcon p_pauseIcon;
QIcon p_repeatOffIcon;
QIcon p_repeatAllIcon;
QIcon p_repeatOneIcon;
RepeatMode p_repeatMode;
WindowMode p_windowMode;
QMessageBox *p_msg;
QTime p_lastHeartbeatTime;
int p_FPSCounter;
bool p_ClearFrame;
public:
//! loads a list of yuv/csv files
void loadFiles(QStringList files);
void loadPlaylistFile(QString filePath);
bool isPlaylistItemSelected() { return selectedPrimaryPlaylistItem() != NULL; }
public slots:
void enableSingleWindowMode();
void enableSeparateWindowsMode();
//! Toggle fullscreen playback
void toggleFullscreen();
//! Shows the file open dialog and loads all selected Files
void openFile();
//! Adds a new text frame
void addTextFrame();
void addDifferenceSequence();
void savePlaylistToFile();
//! Starts playback of selected video file
void play();
//! Pauses playback of selected video file
void pause();
//! Toggles playback of selected video file
void togglePlayback();
//! Stops playback of selected video file
void stop();
//! Toggle playback in endless loop
void toggleRepeat();
//! Deletes a group from playlist
void deleteItem();
//! update parameters of regular overlay grid
void updateGrid();
void updateSelectedItems();
//! Select a Stats Type and update GUI
void setSelectedStats();
//! Slot for updating the opacity of the current selected stats type (via items model)
void updateStatsOpacity(int val);
//! Slot for updating the grid visibility of the current selected stats type (via items model)
void updateStatsGrid(bool val);
//! set current frame for playback
void setCurrentFrame( int frame, bool forceRefresh = false );
//! enables the playback controls
void setControlsEnabled(bool flag);
//! updates the YUV information GUI elements from the current Renderobject
void updateMetaInfo();
//! The display objects information changed. Update.
void currentSelectionInformationChanged();
//! updates the Playback controls to fit the current YUV settings
void refreshPlaybackWidgets();
//! update selection of frame size ComboBox
void updateFrameSizeComboBoxSelection();
//! update selection of color format ComboBox
void updatePixelFormatComboBoxSelection(PlaylistItem *selectedItem);
//! this event is called when the playback-timer is triggered. It will paint the next frame
void frameTimerEvent();
void heartbeatTimerEvent();
void showAbout();
void openProjectWebsite();
void saveScreenshot();
void updateSettings();
void editTextFrame();
private slots:
//! Timeout function for playback timer
//void newFrameTimeout();
void setRepeatMode(RepeatMode newMode);
void statsTypesChanged();
void on_interpolationComboBox_currentIndexChanged(int index);
void on_pixelFormatComboBox_currentIndexChanged(int index);
void on_framesizeComboBox_currentIndexChanged(int index);
void onCustomContextMenu(const QPoint &point);
void onItemDoubleClicked(QTreeWidgetItem* item, int);
void openRecentFile();
void on_LumaScaleSpinBox_valueChanged(int index);
void on_ChromaScaleSpinBox_valueChanged(int index);
void on_LumaOffsetSpinBox_valueChanged(int arg1);
void on_ChromaOffsetSpinBox_valueChanged(int arg1);
void on_LumaInvertCheckBox_toggled(bool checked);
void on_ChromaInvertCheckBox_toggled(bool checked);
void on_ColorComponentsComboBox_currentIndexChanged(int index);
void selectNextItem();
void selectPreviousItem();
void nextFrame() { setCurrentFrame( p_currentFrame + selectedPrimaryPlaylistItem()->displayObject()->sampling() ); }
void previousFrame() { setCurrentFrame( p_currentFrame - selectedPrimaryPlaylistItem()->displayObject()->sampling() ); }
void on_viewComboBox_currentIndexChanged(int index);
void on_zoomBoxCheckBox_toggled(bool checked);
void on_SplitViewgroupBox_toggled(bool arg1);
void on_colorConversionComboBox_currentIndexChanged(int index);
private:
PlaylistItem* selectedPrimaryPlaylistItem();
PlaylistItem* selectedSecondaryPlaylistItem();
SettingsWindow p_settingswindow;
void createMenusAndActions();
void updateRecentFileActions();
// variables related to alternative window mode (YUV Checker)
QMainWindow p_inspectorWindow;
QMainWindow p_playlistWindow;
QAction* openYUVFileAction;
QAction* savePlaylistAction;
QAction* addTextAction;
QAction* addDifferenceAction;
QAction* saveScreenshotAction;
QAction* showSettingsAction;
QAction* deleteItemAction;
QAction* zoomToStandardAction;
QAction* zoomToFitAction;
QAction* zoomInAction;
QAction* zoomOutAction;
QAction* togglePlaylistAction;
QAction* toggleStatisticsAction;
QAction* toggleFileOptionsAction;
QAction* toggleDisplayOptionsActions;
QAction* toggleYUVMathActions;
QAction* toggleControlsAction;
QAction* toggleFullscreenAction;
QAction* enableSingleWindowModeAction;
QAction* enableSeparateWindowModeAction;
QAction* playPauseAction;
QAction* nextItemAction;
QAction* previousItemAction;
QAction* nextFrameAction;
QAction* previousFrameAction;
QAction *aboutAction;
QAction *bugReportAction;
QAction *featureRequestAction;
enum { MaxRecentFiles = 5 };
QAction *recentFileActs[MaxRecentFiles];
QString strippedName(const QString &fullFileName);
};
#endif // MAINWINDOW_H