diff main/MainWindow.cpp @ 1558:28d80ef79473

Report on failures that happen while configuring a transform
author Chris Cannam
date Thu, 19 Jan 2017 10:50:04 +0000
parents 44e09e1996a3
children 3b8bd7e520c5
line wrap: on
line diff
--- a/main/MainWindow.cpp	Thu Jan 19 09:57:58 2017 +0000
+++ b/main/MainWindow.cpp	Thu Jan 19 10:50:04 2017 +0000
@@ -3881,8 +3881,17 @@
 	return;
     }
 
-    Transform transform = TransformFactory::getInstance()->
-        getDefaultTransformFor(transformId);
+    Transform transform;
+    try {
+        transform = TransformFactory::getInstance()->
+            getDefaultTransformFor(transformId);
+    } catch (std::exception &e) { // e.g. Piper server failure
+        QMessageBox::critical
+            (this, tr("Failed to query transform attributes"),
+             tr("<b>Failed to query transform attributes</b><p>Plugin or server error: %1</p>")
+             .arg(e.what()));
+        return;
+    }
 
     std::vector<Model *> candidateInputModels =
         m_document->getTransformInputModels();
@@ -3951,15 +3960,22 @@
 
 //    SVDEBUG << "MainWindow::addLayer: Input model is " << input.getModel() << " \"" << input.getModel()->objectName() << "\"" << endl << "transform:" << endl << transform.toXmlString() << endl;
 
-    Layer *newLayer = m_document->createDerivedLayer(transform, input);
-
-    if (newLayer) {
-        m_document->addLayerToView(pane, newLayer);
-        m_document->setChannel(newLayer, input.getChannel());
-        m_recentTransforms.add(transformId);
-        m_paneStack->setCurrentLayer(pane, newLayer);
+    try {
+        Layer *newLayer = m_document->createDerivedLayer(transform, input);
+        if (newLayer) {
+            m_document->addLayerToView(pane, newLayer);
+            m_document->setChannel(newLayer, input.getChannel());
+            m_recentTransforms.add(transformId);
+            m_paneStack->setCurrentLayer(pane, newLayer);
+        }
+    } catch (std::exception &e) { // e.g. Piper server failure
+        QMessageBox::critical
+            (this, tr("Transform failed"),
+             tr("<b>Failed to run transform</b><p>Plugin or server error: %1</p>")
+             .arg(e.what()));
+        return;
     }
-
+    
     updateMenuStates();
 }