#pragma once
#include "ui_FinalRenderDialog.h"
#include "SpinBox.h"
#include "DoubleSpinBox.h"
#include "TwoButtonWidget.h"
#include "FractoriumSettings.h"
#include "FinalRenderEmberController.h"
///
/// FractoriumFinalRenderDialog class.
///
class Fractorium;//Forward declaration since Fractorium uses this dialog.
///
/// The final render dialog is for when the user is satisfied with the parameters they've
/// set and they want to do a final render at a higher quality and at a specific resolution
/// and save it out to a file.
/// It supports rendering either the current ember, or all of them in the opened file.
/// If a single ember is rendered, it will be saved to a single output file.
/// If multiple embers are rendered, they will all be saved to a specified directory using
/// default names.
/// The user can optionally save the Xml file with each ember.
/// They can be treated as individual images, or as an animation sequence in which case
/// motion blurring with temporal samples will be applied.
/// It keeps a pointer to the main window and the global settings object for convenience.
/// The settings used here are saved to the /finalrender portion of the settings file.
/// It has its own OpenCLWrapper member for populating the combo boxes.
/// Upon running, it will delete the main window's renderer to save memory/GPU resources and restore it to its
/// original state upon exiting.
/// This class uses a controller-based design similar to the main window.
///
class FractoriumFinalRenderDialog : public QDialog
{
Q_OBJECT
friend Fractorium;
friend FinalRenderEmberControllerBase;
friend FinalRenderEmberController;
#ifdef DO_DOUBLE
friend FinalRenderEmberController;
#endif
public:
FractoriumFinalRenderDialog(FractoriumSettings* settings, QWidget* parent, Qt::WindowFlags f = 0);
bool EarlyClip();
bool YAxisUp();
bool Transparency();
bool OpenCL();
bool Double();
bool SaveXml();
bool DoAll();
bool DoSequence();
bool KeepAspect();
eScaleType Scale();
void Scale(eScaleType scale);
QString DoAllExt();
QString Path();
void Path(QString s);
QString Prefix();
QString Suffix();
unsigned int PlatformIndex();
unsigned int DeviceIndex();
unsigned int ThreadCount();
unsigned int Width();
unsigned int Height();
double Quality();
unsigned int TemporalSamples();
unsigned int Supersample();
FinalRenderGuiState State();
public Q_SLOTS:
void MoveCursorToEnd();
void OnEarlyClipCheckBoxStateChanged(int state);
void OnYAxisUpCheckBoxStateChanged(int state);
void OnTransparencyCheckBoxStateChanged(int state);
void OnOpenCLCheckBoxStateChanged(int state);
void OnDoublePrecisionCheckBoxStateChanged(int state);
void OnPlatformComboCurrentIndexChanged(int index);
void OnDoAllCheckBoxStateChanged(int state);
void OnKeepAspectCheckBoxStateChanged(int state);
void OnScaleRadioButtonChanged(bool checked);
void OnWidthChanged(int d);
void OnHeightChanged(int d);
void OnQualityChanged(double d);
void OnTemporalSamplesChanged(int d);
void OnSupersampleChanged(int d);
void OnFileButtonClicked(bool checked);
void OnShowFolderButtonClicked(bool checked);
void OnRenderClicked(bool checked);
void OnCancelRenderClicked(bool checked);
protected:
virtual void reject();
virtual void showEvent(QShowEvent* e);
private:
bool CreateControllerFromGUI(bool createRenderer);
void SetMemory();
OpenCLWrapper m_Wrapper;
Timing m_RenderTimer;
SpinBox* m_WidthSpin;
SpinBox* m_HeightSpin;
DoubleSpinBox* m_QualitySpin;
SpinBox* m_TemporalSamplesSpin;
SpinBox* m_SupersampleSpin;
QLineEdit* m_PrefixEdit;
QLineEdit* m_SuffixEdit;
FractoriumSettings* m_Settings;
Fractorium* m_Fractorium;
auto_ptr m_Controller;
Ui::FinalRenderDialog ui;
};