fix bug #21 (erroneously exiting the UI when trying to export an image on OSX)

metadata
Wenzel Jakob 2010-12-01 02:47:20 +01:00
parent e609c8fb39
commit ef583fec48
3 changed files with 27 additions and 16 deletions

View File

@ -24,7 +24,6 @@ vars.Add('CXX', 'C++ compiler')
vars.Add('CC', 'C compiler') vars.Add('CC', 'C compiler')
vars.Add('CXXFLAGS', 'C++ flags') vars.Add('CXXFLAGS', 'C++ flags')
vars.Add('CCFLAGS', 'C compiler flags') vars.Add('CCFLAGS', 'C compiler flags')
vars.Add('STRIP', 'Program for stripping away unused symbols')
vars.Add('SHCXXFLAGS', 'C++ flags (for shared libraries)') vars.Add('SHCXXFLAGS', 'C++ flags (for shared libraries)')
vars.Add('LINK', 'Linker') vars.Add('LINK', 'Linker')
vars.Add('LINKFLAGS', 'Linker flags') vars.Add('LINKFLAGS', 'Linker flags')
@ -217,18 +216,12 @@ else:
env = conf.Finish() env = conf.Finish()
dist = GetOption('dist') != None dist = GetOption('dist') != None
def stripinst_build_function(self, target, source, pkgname = None, use_own = None):
inst = self.Install(target, source)
self.AddPostAction(inst, env['STRIP'] + ' $TARGET')
return inst
def osxlibinst_build_function(self, target, source, pkgname = None, use_own = None): def osxlibinst_build_function(self, target, source, pkgname = None, use_own = None):
inst = self.Install(target, source) inst = self.Install(target, source)
prefix, name = os.path.split(source) prefix, name = os.path.split(source)
self.AddPostAction(inst, 'install_name_tool -id @executable_path/../Frameworks/' + name + ' $TARGET') self.AddPostAction(inst, 'install_name_tool -id @executable_path/../Frameworks/' + name + ' $TARGET')
return inst return inst
env.__class__.StripInst = stripinst_build_function
env.__class__.OSXLibInst = osxlibinst_build_function env.__class__.OSXLibInst = osxlibinst_build_function
if hasCollada: if hasCollada:

View File

@ -1206,25 +1206,42 @@ inline float toSRGB(float value) {
} }
void MainWindow::on_actionExportImage_triggered() { void MainWindow::on_actionExportImage_triggered() {
SceneContext *ctx = m_context[ui->tabBar->currentIndex()]; QFileDialog *dialog = new QFileDialog(this, tr("Export image .."),
QFileDialog dialog(this, tr("Export image .."),
"", tr("All supported formats (*.exr *.png);;Linear EXR Image (*.exr)" "", tr("All supported formats (*.exr *.png);;Linear EXR Image (*.exr)"
";; Tonemapped 8-bit PNG Image (*.png)")); ";; Tonemapped 8-bit PNG Image (*.png)"));
QSettings settings("mitsuba-renderer.org", "qtgui"); QSettings settings("mitsuba-renderer.org", "qtgui");
dialog.setViewMode(QFileDialog::Detail); dialog->setViewMode(QFileDialog::Detail);
dialog.setAcceptMode(QFileDialog::AcceptSave); dialog->setAcceptMode(QFileDialog::AcceptSave);
#if defined(__OSX__) #if defined(__OSX__)
dialog.setOption(QFileDialog::DontUseNativeDialog, true); dialog->setOption(QFileDialog::DontUseNativeDialog, true);
#endif #endif
dialog.restoreState(settings.value("fileDialogState").toByteArray()); dialog->restoreState(settings.value("fileDialogState").toByteArray());
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->setWindowModality(Qt::WindowModal);
connect(dialog, SIGNAL(finished(int)), this, SLOT(onExportDialogClose(int)));
m_currentChild = dialog;
// prevent a tab drawing artifact on Qt/OSX
m_activeWindowHack = true;
dialog->show();
qApp->processEvents();
m_activeWindowHack = false;
}
if (dialog.exec() == QDialog::Accepted) { void MainWindow::onExportDialogClose(int reason) {
QString fileName = dialog.selectedFiles().value(0); int currentIndex = ui->tabBar->currentIndex();
SceneContext *ctx = m_context[currentIndex];
QSettings settings("mitsuba-renderer.org", "qtgui");
QFileDialog *dialog = static_cast<QFileDialog *>(sender());
m_currentChild = NULL;
if (reason == QDialog::Accepted) {
QString fileName = dialog->selectedFiles().value(0);
Bitmap::EFileFormat format; Bitmap::EFileFormat format;
settings.setValue("fileDialogState", dialog.saveState()); settings.setValue("fileDialogState", dialog->saveState());
if (fileName.endsWith(".exr")) { if (fileName.endsWith(".exr")) {
format = Bitmap::EEXR; format = Bitmap::EEXR;

View File

@ -150,6 +150,7 @@ private slots:
void onPreviewSettingsClose(); void onPreviewSettingsClose();
void onOpenDialogClose(int reason); void onOpenDialogClose(int reason);
void onSaveAsDialogClose(int reason); void onSaveAsDialogClose(int reason);
void onExportDialogClose(int reason);
void onRenderSettingsClose(int reason); void onRenderSettingsClose(int reason);
void onImportDialogClose(int reason); void onImportDialogClose(int reason);