Merge pull request #2901 from opentx/projectkk2glider/issue_2896_curves_without_files

Fixes #2896: draw curves without using temporary disk files
This commit is contained in:
Bertrand Songis
2015-09-19 20:41:56 +02:00
6 changed files with 19 additions and 37 deletions
+1 -1
View File
@@ -101,7 +101,7 @@ void CompareDialog::dropEvent(QDropEvent *event)
if (model1Valid && model2Valid) {
multimodelprinter.setModel(0, model1);
multimodelprinter.setModel(1, model2);
ui->textEdit->setHtml(multimodelprinter.print());
ui->textEdit->setHtml(multimodelprinter.print(ui->textEdit->document()));
}
}
+5 -25
View File
@@ -17,9 +17,6 @@ ModelPrinter::ModelPrinter(Firmware * firmware, const GeneralSettings & generalS
ModelPrinter::~ModelPrinter()
{
foreach(QString filename, curvefiles) {
qunlink(filename);
}
}
void debugHtml(const QString & html)
@@ -620,29 +617,12 @@ void CurveImage::drawCurve(const CurveData & curve, QColor color)
}
}
void CurveImage::save(const QString & filename)
{
image.save(filename, "png", 100);
}
QString ModelPrinter::createCurveImage(int idx)
QString ModelPrinter::createCurveImage(int idx, QTextDocument * document)
{
CurveImage image;
image.drawCurve(model.curves[idx], colors[idx]);
QString filename = generateProcessUniqueTempFileName(QString("curve-%1-%2.png").arg((uint64_t)this).arg(idx));
image.save(filename);
curvefiles << filename;
return filename;
}
QString ModelPrinter::createCurvesImage()
{
CurveImage image;
for (int idx=0; idx<firmware->getCapability(NumCurves); idx++) {
image.drawCurve(model.curves[idx], colors[idx]);
}
QString filename = generateProcessUniqueTempFileName(QString("curves-%1.png").arg((uint64_t)this));
image.save(filename);
curvefiles << filename;
return filename;
QString filename = QString("curve-%1-%2.png").arg((uint64_t)this).arg(idx);
if (document) document->addResource(QTextDocument::ImageResource, QUrl(filename), image.get());
// qDebug() << "ModelPrinter::createCurveImage()" << idx << filename;
return ":" + filename;
}
+3 -4
View File
@@ -4,6 +4,7 @@
#include <QString>
#include <QStringList>
#include <QPainter>
#include <QTextDocument>
#include "eeprominterface.h"
QString changeColor(const QString & input, const QString & to, const QString & from = "grey");
@@ -17,7 +18,7 @@ class CurveImage
public:
CurveImage();
void drawCurve(const CurveData & curve, QColor color);
void save(const QString & filename);
const QImage & get() const { return image; };
protected:
int size;
@@ -59,14 +60,12 @@ class ModelPrinter: public QObject
static QString printChannelName(int idx);
QString printOutputName(int idx);
QString printCurve(int idx);
QString createCurvesImage();
QString createCurveImage(int idx);
QString createCurveImage(int idx, QTextDocument * document);
private:
Firmware * firmware;
const GeneralSettings & generalSettings;
const ModelData & model;
QStringList curvefiles;
};
+6 -4
View File
@@ -122,8 +122,10 @@ void MultiModelPrinter::setModel(int idx, const ModelData & model)
modelPrinters[idx] = new ModelPrinter(firmware, defaultSettings, model);
}
QString MultiModelPrinter::print()
QString MultiModelPrinter::print(QTextDocument * document)
{
if (document) document->clear();
QString str = "<table border='1' cellspacing='0' cellpadding='3' width='100%' style='font-family: monospace;'>";
str += printSetup();
if (firmware->getCapability(FlightModes))
@@ -131,7 +133,7 @@ QString MultiModelPrinter::print()
str += printInputs();
str += printMixers();
str += printLimits();
str += printCurves();
str += printCurves(document);
if (firmware->getCapability(Gvars) && !firmware->getCapability(GvarsFlightModes))
str += printGvars();
str += printLogicalSwitches();
@@ -366,7 +368,7 @@ QString MultiModelPrinter::printMixers()
return str;
}
QString MultiModelPrinter::printCurves()
QString MultiModelPrinter::printCurves(QTextDocument * document)
{
QString str;
MultiColumns columns(models.size());
@@ -385,7 +387,7 @@ QString MultiModelPrinter::printCurves()
columns.append("<tr><td width='20%'><b>" + tr("CV%1").arg(i+1) + "</b></td><td>");
COMPARE(modelPrinter->printCurve(i));
for (int k=0; k<models.size(); k++)
columns.append(k, QString("<br/><img src='%1' border='0' />").arg(modelPrinters[k]->createCurveImage(i)));
columns.append(k, QString("<br/><img src='%1' border='0' />").arg(modelPrinters[k]->createCurveImage(i, document)));
columns.append("</td></tr>");
}
}
+3 -2
View File
@@ -2,6 +2,7 @@
#define _MULTIMODELPRINTER_H
#include <QObject>
#include <QTextDocument>
#include "eeprominterface.h"
#include "modelprinter.h"
@@ -14,7 +15,7 @@ class MultiModelPrinter: public QObject
virtual ~MultiModelPrinter();
void setModel(int idx, const ModelData & model);
QString print();
QString print(QTextDocument * document);
protected:
class MultiColumns {
@@ -46,7 +47,7 @@ class MultiModelPrinter: public QObject
QString printLimits();
QString printInputs();
QString printMixers();
QString printCurves();
QString printCurves(QTextDocument * document);
QString printGvars();
QString printLogicalSwitches();
QString printCustomFunctions();
+1 -1
View File
@@ -21,7 +21,7 @@ PrintDialog::PrintDialog(QWidget *parent, Firmware * firmware, GeneralSettings &
setWindowIcon(CompanionIcon("print.png"));
setWindowTitle(model.name);
multimodelprinter.setModel(0, model);
ui->textEdit->setHtml(multimodelprinter.print());
ui->textEdit->setHtml(multimodelprinter.print(ui->textEdit->document()));
if (!printfilename.isEmpty()) {
printToFile();
QTimer::singleShot(0, this, SLOT(autoClose()));