You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.6 KiB
C++
96 lines
2.6 KiB
C++
#include "reportviewer.h"
|
|
#include "ui_reportviewer.h"
|
|
|
|
#include "../context.h"
|
|
|
|
#include <QFile>
|
|
#include <QPrinter>
|
|
#include <LimeReport>
|
|
|
|
ReportViewer::ReportViewer(QWidget *parent) :
|
|
QDialog(parent),
|
|
ui(new Ui::ReportViewer)
|
|
{
|
|
ui->setupUi(this);
|
|
m_report = NULL;
|
|
}
|
|
|
|
ReportViewer::~ReportViewer()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void ReportViewer::setReport(ReportPtr report)
|
|
{
|
|
m_report = new LimeReport::ReportEngine(this);
|
|
|
|
QString reportPath = qApp->applicationDirPath() + REPORT_ROOT + "/" + report->file();
|
|
QFile file(reportPath);
|
|
file.open(QFile::ReadOnly);
|
|
|
|
QByteArray data = file.readAll();
|
|
m_report->loadFromByteArray(&data);
|
|
m_report->setReportFileName(reportPath);
|
|
m_report->dataManager()->setReportVariable("dbPath", Context::instance().settings()->value("db/path", "").toString());
|
|
|
|
foreach (QString key, report->variables().keys()) {
|
|
m_report->dataManager()->setReportVariable(key, report->variables()[key]);
|
|
}
|
|
}
|
|
|
|
void ReportViewer::openPreview()
|
|
{
|
|
Q_ASSERT(m_report != NULL);
|
|
|
|
showMaximized();
|
|
|
|
m_prevWidget = m_report->createPreviewWidget(this);
|
|
|
|
connect(m_prevWidget, SIGNAL(pagesSet(int)), this, SLOT(slotPageSet(int)));
|
|
connect(ui->pageNavigator, SIGNAL(valueChanged(int)), m_prevWidget, SLOT(pageNavigatorChanged(int)));
|
|
connect(ui->btnPrint, SIGNAL(clicked(bool)), m_prevWidget, SLOT(print()));
|
|
connect(ui->btnPdf, SIGNAL(clicked(bool)), m_prevWidget, SLOT(printToPDF()));
|
|
connect(ui->btnPageUp, SIGNAL(clicked(bool)), m_prevWidget, SLOT(priorPage()));
|
|
connect(ui->btnPageDown, SIGNAL(clicked(bool)), m_prevWidget, SLOT(nextPage()));
|
|
connect(ui->btnZoomIn, SIGNAL(clicked(bool)), m_prevWidget, SLOT(zoomIn()));
|
|
connect(ui->btnZoomOut, SIGNAL(clicked(bool)), m_prevWidget, SLOT(zoomOut()));
|
|
connect(ui->btnFitHoriz, SIGNAL(clicked(bool)), m_prevWidget, SLOT(fitWidth()));
|
|
connect(ui->btnFitVert, SIGNAL(clicked(bool)), m_prevWidget, SLOT(fitPage()));
|
|
|
|
ui->reportLayout->addWidget(m_prevWidget);
|
|
m_prevWidget->refreshPages();
|
|
}
|
|
|
|
void ReportViewer::directPrint(bool dialog)
|
|
{
|
|
Q_ASSERT(m_report != NULL);
|
|
|
|
QPrinter printer(QPrinter::HighResolution);
|
|
|
|
if (dialog || !printer.isValid())
|
|
{
|
|
m_report->printReport();
|
|
}
|
|
else
|
|
{
|
|
m_report->printReport(&printer);
|
|
}
|
|
}
|
|
|
|
void ReportViewer::on_btnClose_clicked()
|
|
{
|
|
close();
|
|
}
|
|
|
|
void ReportViewer::on_btnEdit_clicked()
|
|
{
|
|
m_report->designReport();
|
|
}
|
|
|
|
void ReportViewer::slotPageSet(int page)
|
|
{
|
|
ui->pageNavigator->setSuffix(ui->pageNavigator->suffix() + QString::number(page));
|
|
ui->pageNavigator->setMinimum(1);
|
|
ui->pageNavigator->setMaximum(page);
|
|
}
|