#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include #include #include #include #include #include "ERWidget.h" #include "AudioRecorder.h" #include "CameraWidget.h" #include "Synchronizer.h" #include "GazeEstimationWidget.h" #include "NetworkStream.h" #include "Reference.h" #include "LogWidget.h" #include "PerformanceMonitorWidget.h" #include "post-processing/PostProcessingWidget.h" #include "CommandManager.h" #include "utils.h" class MainWindowConfig { public: MainWindowConfig() : workingDirectory("./") { } void save(QSettings* settings) { settings->sync(); settings->setValue("workingDirectory", workingDirectory); } void load(QSettings* settings) { settings->sync(); set(settings, "workingDirectory", workingDirectory); } QString workingDirectory; }; namespace Ui { class MainWindow; } class MainWindow : public ERWidget { Q_OBJECT public: explicit MainWindow(QWidget* parent = 0); ~MainWindow(); signals: void startRecording(); void stopRecording(); private: Ui::MainWindow* ui; QSettings* settings; MainWindowConfig cfg; CameraWidget* lEyeWidget; CameraWidget* rEyeWidget; CameraWidget* fieldWidget; AudioRecorder* audioRecorder; Synchronizer* synchronizer; GazeEstimationWidget* gazeEstimationWidget; QThread* journalThread; DataRecorderThread* journal; NetworkStream* networkStream; LogWidget* logWidget; PerformanceMonitorWidget* performanceMonitorWidget; PostProcessingWidget* postProcessingWidget; CommandManager commandManager; QElapsedTimer elapsedTime; int elapsedTimeUpdateTimer; QString previousPwd; QSoundEffect recStartSound, recStopSound; bool setupSubjectDirectory(); void setSubjectName(QString newSubjectName); void widgetButtonReact(QMainWindow* window, bool checked); void createExtraMenus(); void setupWidget(ERWidget* widget, QSettings* settings, QPushButton* button = nullptr); const QString metaDataFile = "meta.tsv"; const QString metaDateFormat = "yyyy-MM-dd HH:mm:ss.zzz"; void storeMetaDataHead(); void storeMetaDataTail(); protected: void closeEvent(QCloseEvent* event) Q_DECL_OVERRIDE; private slots: void setWorkingDirectory(QString dir); void restorePreviousPwd(); void on_changePwdButton_clicked(); void on_changeSubjectButton_clicked(); void on_recordingToggle_clicked(); void timerEvent(QTimerEvent* event); void on_leftEyeCam_clicked(); void on_rightEyeCam_clicked(); void on_fieldCam_clicked(); void on_gazeEstimation_clicked(); void effectiveRecordingStart(); void menuOption(QAction*); void showReferencesDialog(); void showAboutDialog(); void on_log_clicked(); void on_performanceMonitor_clicked(); void toggleRemoteRecording(); void freezeCameraImages(); void unfreezeCameraImages(); void togglePreview(); void on_postProcessing_clicked(); }; #endif // MAINWINDOW_H