diff --git a/src/lib/expression.h b/src/lib/expression.h --- a/src/lib/expression.h +++ b/src/lib/expression.h @@ -35,6 +35,7 @@ { class Session; class Result; +class LatexRenderer; class ExpressionPrivate; /** @@ -245,9 +246,8 @@ //used for example if special packages are needed virtual QString additionalLatexHeaders(); private: - void renderResultAsLatex(); - private Q_SLOTS: - void latexRendered(); + void renderResultAsLatex(Result* result); + void latexRendered(LatexRenderer* renderer, Result* result); private: ExpressionPrivate* d; diff --git a/src/lib/expression.cpp b/src/lib/expression.cpp --- a/src/lib/expression.cpp +++ b/src/lib/expression.cpp @@ -19,6 +19,7 @@ */ #include "expression.h" +#include "latexrenderer.h" using namespace Cantor; #include @@ -29,7 +30,6 @@ #include "imageresult.h" #include "latexresult.h" #include "settings.h" -#include "latexrenderer.h" #include #include @@ -104,12 +104,6 @@ void Expression::setResult(Result* result) { - - if(d->result) - delete d->result; - - d->result=result; - if(result!=nullptr) { qDebug()<<"settting result to a type "<type()<<" result"; @@ -123,11 +117,17 @@ !isInternal() ) { - renderResultAsLatex(); + renderResultAsLatex(result); + return; } #endif } + if(d->result) + delete d->result; + + d->result=result; + emit gotResult(); } @@ -162,51 +162,51 @@ { return d->session; } -void Expression::renderResultAsLatex() +void Expression::renderResultAsLatex(Result* result) { qDebug()<<"rendering as latex"; qDebug()<<"checking if it really is a formula that can be typeset"; LatexRenderer* renderer=new LatexRenderer(this); - renderer->setLatexCode(result()->data().toString().trimmed()); + renderer->setLatexCode(result->data().toString().trimmed()); renderer->addHeader(additionalLatexHeaders()); - connect(renderer, &LatexRenderer::done, this, &Expression::latexRendered); - connect(renderer, &LatexRenderer::error, this, &Expression::latexRendered); + connect(renderer, &LatexRenderer::done, [=] { latexRendered(renderer, result); }); + connect(renderer, &LatexRenderer::error, [=] { latexRendered(renderer, result); }); renderer->render(); } -void Expression::latexRendered() +void Expression::latexRendered(LatexRenderer* renderer, Result* result) { - LatexRenderer* renderer=qobject_cast(sender()); - qDebug()<<"rendered a result to "<imagePath(); //replace the textresult with the rendered latex image result //ImageResult* latex=new ImageResult( d->latexFilename ); - if(renderer->renderingSuccessful()&&result()) + if(renderer->renderingSuccessful()) { - if (result()->type() == TextResult::Type) + if (result->type() == TextResult::Type) { - TextResult* r=dynamic_cast(result()); + TextResult* r=dynamic_cast(result); LatexResult* latex=new LatexResult(r->data().toString().trimmed(), QUrl::fromLocalFile(renderer->imagePath()), r->plain()); setResult( latex ); } - else if (result()->type() == LatexResult::Type) + else if (result->type() == LatexResult::Type) { - LatexResult* previousLatexResult=dynamic_cast(result()); + LatexResult* previousLatexResult=dynamic_cast(result); LatexResult* latex=new LatexResult(previousLatexResult->data().toString().trimmed(), QUrl::fromLocalFile(renderer->imagePath()), previousLatexResult->plain()); setResult( latex ); } }else { //if rendering with latex was not successful, just use the plain text version //if available - TextResult* r=dynamic_cast(result()); + TextResult* r=dynamic_cast(result); setResult(new TextResult(r->plain())); qDebug()<<"error rendering latex: "<errorMessage(); } + delete result; + renderer->deleteLater(); }