mitsuba/src/qtgui/mainwindow.h

165 lines
5.0 KiB
C++

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "common.h"
#include <QtNetwork>
#include <mitsuba/render/renderjob.h>
#define MAX_RECENT_FILES 10
namespace Ui {
class MainWindow;
}
class QConsoleAppender;
class ServerWidget;
class GLWidget;
class PreviewSettingsDlg;
/**
* Captures progress notifications from mitsuba and helps to transfer
* them to the Qt event loop.
*/
class QRenderListener : public QObject, public RenderListener {
Q_OBJECT
public:
/// Called when work has begun in a rectangular image region
inline void workBeginEvent(const RenderJob *job, const RectangularWorkUnit *wu, int worker) {
emit workBegin(job, wu, worker);
}
/// Called when work has finished in a rectangular image region
inline void workEndEvent(const RenderJob *job, const ImageBlock *wr) {
emit workEnd(job, wr);
}
/// Called when the whole target image has been altered in some way
inline void refreshEvent(const RenderJob *job) {
emit refresh(job);
}
/// Called when a render job has completed successfully or unsuccessfully
inline void finishJobEvent(const RenderJob *job, bool cancelled) {
emit jobFinished(job, cancelled);
}
MTS_DECLARE_CLASS()
signals:
void workBegin(const RenderJob *job, const RectangularWorkUnit *wu, int worker);
void workEnd(const RenderJob *job, const ImageBlock *wr);
void refresh(const RenderJob *job);
void jobFinished(const RenderJob *job, bool cancelled);
protected:
virtual ~QRenderListener() { }
};
class PreviewSettingsDialog;
class LogWidget;
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void loadFile(QString filename);
void adjustSize();
bool isActive();
void initWorkers();
protected:
SceneContext *loadScene(const QString &filename);
void resizeEvent(QResizeEvent *event);
void changeEvent(QEvent *e);
void updateRecentFileActions();
void addRecentFile(QString fileName);
void closeEvent(QCloseEvent *event);
SceneContext *getContext(const RenderJob *job, bool failIfNotFound = true);
void drawHLine(SceneContext *ctx, int x1, int y, int x2, const float *color);
void drawVLine(SceneContext *ctx, int x, int y1, int y2, const float *color);
void checkForUpdates(bool notifyIfNone = false);
void saveAs(SceneContext *ctx, const QString &targetFile);
QSize sizeHint() const;
signals:
void updateView();
private slots:
void on_actionRenderSettings_triggered();
void on_actionPreviewSettings_triggered();
void on_actionOpen_triggered();
void on_actionExit_triggered();
void on_actionAbout_triggered();
void on_actionRefresh_triggered();
void on_actionRender_triggered();
void on_actionClose_triggered();
void on_actionStop_triggered();
void on_actionShowLog_triggered();
void on_actionSettings_triggered();
void on_actionUpdateCheck_triggered();
void on_actionStartServer_triggered();
void on_actionSave_triggered();
void on_actionSaveAs_triggered();
void on_actionExportImage_triggered();
void on_actionNavigationControls_triggered();
void on_actionReferenceManual_triggered();
void on_actionImport_triggered();
void on_actionDuplicateTab_triggered();
void on_actionAdjustSize_triggered();
void on_tabBar_currentChanged(int index);
bool on_tabBar_tabCloseRequested(int index);
void on_tabBar_tabMoved(int from, int to);
void on_tabBar_customContextMenuRequested(const QPoint &pt);
void on_glView_loadFileRequest(const QString &string);
void onOpenRecent();
void onClearRecent();
void onWorkBegin(const RenderJob *job, const RectangularWorkUnit *wu, int worker);
void onWorkEnd(const RenderJob *job, const ImageBlock *wr);
void onRefresh(const RenderJob *job);
void onJobFinished(const RenderJob *job, bool cancelled);
void onProgressMessage(const RenderJob *job, const QString &name,
float progress, const QString &eta);
void onStatusMessage(const QString &status);
void onNetworkFinished(QNetworkReply *reply);
void onServerClosed();
void onBugReportError();
void onBugReportSubmitted();
void updateUI();
void updateStatus();
void onPreviewSettingsClose();
void onOpenDialogClose(int reason);
void onSaveAsDialogClose(int reason);
void onRenderSettingsClose(int reason);
private:
Ui::MainWindow *ui;
QAction *m_actRecent[MAX_RECENT_FILES];
QAction *m_clearRecent;
QList<SceneContext *> m_context;
ref<RenderQueue> m_renderQueue;
ref<QRenderListener> m_renderListener;
QList<ServerConnection> m_connections;
QMutex m_contextMutex;
PreviewSettingsDialog *m_previewSettingsDialog;
LogWidget *m_logWidget;
ServerWidget *m_serverWidget;
ref<QConsoleAppender> m_consoleAppender;
QNetworkAccessManager *m_networkManager;
QProgressBar *m_progress;
QLabel *m_progressLabel;
QWidget *m_progressWidget;
QString m_statusMessage;
QStringList m_searchPaths;
QString m_nodeName;
int m_blockSize, m_listenPort;
bool m_checkForUpdates, m_notifyIfNoUpdates;
bool m_activeWindowHack;
int m_bugStatus, m_contextIndex;
SceneContext *m_lastTab;
#if defined(__OSX__)
PreviewSettingsDlg *m_previewSettings;
#endif
QWidget *m_currentChild;
};
#endif // MAINWINDOW_H