0
0
mirror of https://github.com/fralx/LimeReport.git synced 2024-12-24 00:33:02 +03:00
LimeReport/lrdview/MainWindow.cpp
Андрей Лухнов 0fca7169d3 Define code style and format all source file using clang-format-14
except those placed in 3rdparty directories.
2024-09-19 21:09:38 +03:00

221 lines
6.9 KiB
C++

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <private/qzipreader_p.h>
#include <QDebug>
#include <QFileDialog>
#include <QPrintDialog>
#include <QtCore/qabstractanimation.h>
#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1))
#include <QDesktopWidget>
#endif
#include "SettingDialog.h"
#include "XmlModel.h"
#include "lrreportengine.h"
//#ifndef QT_DEBUG
// Q_IMPORT_PLUGIN(adateeditorplugin)
//#endif
void centerWindow(QWidget* widget, double widthFactor, double heightFactor)
{
#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1))
QDesktopWidget desk;
int ww = desk.width() * widthFactor;
int wh = desk.height() * heightFactor;
widget->move((desk.width() - ww) / 2, (desk.height() - wh) / 2);
widget->resize(ww, wh);
#else
QScreen* desk = QGuiApplication::primaryScreen();
int ww = desk->geometry().width() * widthFactor;
int wh = desk->geometry().height() * heightFactor;
widget->resize(ww, wh);
widget->move((desk->geometry().width() - ww) / 2, (desk->geometry().height() - wh) / 2);
#endif
}
MainWindow::MainWindow(QWidget* parent):
QMainWindow(parent),
ui(new Ui::MainWindow),
m_previewScene(0),
m_isCert(false),
m_deleteLastFile(false)
{
ui->setupUi(this);
m_report.dataManager()->addModel("reportData", &m_model, false);
ui->graphicsView->scale(0.5, 0.5);
centerWindow(this, 0.8, 0.8);
m_settings = new QSettings("OCKK Ltd", "LRDView");
m_report.setSettings(m_settings);
readSetting();
setWindowTitle("LRDView ver 1.30");
if (QCoreApplication::arguments().count() > 1) {
loadReport(QCoreApplication::arguments().at(1));
}
// ui->statusBar->addWidget(new QLabel(" Designed by Arin Alexander (arin_a@bk.ru) ",this));
}
bool isFileExists(QZipReader& reader, QString fileName)
{
foreach (QZipReader::FileInfo fi, reader.fileInfoList()) {
if (fi.filePath.compare(fileName) == 0)
return true;
}
return false;
}
void MainWindow::loadReport(QString fileName)
{
if (!fileName.isEmpty()) {
QZipReader reader(fileName);
QByteArray fileData = reader.fileData("report.xml");
m_report.loadFromByteArray(&fileData);
m_reportData = reader.fileData("data.xml");
m_model.setXMLData(&m_reportData);
if (m_previewScene)
delete m_previewScene;
m_previewScene = dynamic_cast<LimeReport::PageDesignIntf*>(
m_report.createPreviewScene(ui->graphicsView));
m_previewScene->setItemMode(LimeReport::PreviewMode);
ui->graphicsView->setScene(m_previewScene);
ui->graphicsView->centerOn(0, 0);
ui->actionEdit->setChecked(false);
m_isCert = isFileExists(reader, "CertFlag.sgn");
// m_lastReport = fileName;
ui->action_PDF->setEnabled(true);
ui->actionPrint->setEnabled(true);
reader.close();
if (m_deleteLastFile) {
QFile::remove(fileName);
}
}
}
MainWindow::~MainWindow()
{
delete m_settings;
delete ui;
}
void MainWindow::on_actionEdit_triggered()
{
if (m_previewScene) {
if (m_previewScene->itemMode() == LimeReport::PreviewMode) {
m_previewScene->setItemMode(LimeReport::DesignMode);
} else
m_previewScene->setItemMode(LimeReport::PreviewMode);
}
}
void MainWindow::on_actionOpen_triggered()
{
QString fileName
= QFileDialog::getOpenFileName(0, tr("Открыть файл отчета"), QString(), "*.lrd");
if (!fileName.isEmpty()) {
loadReport(fileName);
}
}
void MainWindow::on_actionDesign_triggered() { m_report.designReport(); }
void MainWindow::closeEvent(QCloseEvent* event) { writeSetting(); }
void MainWindow::writeSetting() { m_settings->setValue("geometry", saveGeometry()); }
void MainWindow::readSetting()
{
QVariant v = m_settings->value("geometry");
if (v.isValid()) {
restoreGeometry(v.toByteArray());
}
m_certPrinterName = m_settings->value("certPrinterName", "").value<QString>();
m_otherPrinterName = m_settings->value("otherPrinterName", "").value<QString>();
m_deleteLastFile = m_settings->value("deleteLastFile", false).value<bool>();
}
void MainWindow::settingAccepted()
{
m_certPrinterName = ((SettingDialog*)sender())->certPrinterName();
m_otherPrinterName = ((SettingDialog*)sender())->othenPrinterName();
m_deleteLastFile = ((SettingDialog*)sender())->deleteLastFile();
m_settings->setValue("certPrinterName", m_certPrinterName);
m_settings->setValue("otherPrinterName", m_otherPrinterName);
m_settings->setValue("deleteLastFile", m_deleteLastFile);
}
void MainWindow::on_actionZoomIn_triggered() { ui->graphicsView->scale(1.2, 1.2); }
void MainWindow::on_actionZoomOut_triggered() { ui->graphicsView->scale(1 / 1.2, 1 / 1.2); }
void MainWindow::on_actionPrint_triggered()
{
QPrinterInfo pi;
if (m_isCert)
pi = getPrinterInfo(m_certPrinterName);
else {
pi = getPrinterInfo(m_otherPrinterName);
}
QPrinter printer(pi);
QPrintDialog dialog(&printer, QApplication::activeWindow());
if (dialog.exec()) {
if (m_previewScene->pageItems().isEmpty())
m_report.printReport(&printer);
else {
printer.setPrintRange(QPrinter::PrintRange(dialog.printRange()));
printer.setFromTo(dialog.fromPage(), dialog.toPage());
m_report.printPages(m_previewScene->pageItems(), &printer);
foreach (LimeReport::PageItemDesignIntf::Ptr pageItem, m_previewScene->pageItems()) {
m_previewScene->reactivatePageItem(pageItem);
}
}
}
}
QPrinterInfo MainWindow::getPrinterInfo(QString printerName)
{
foreach (QPrinterInfo pi, QPrinterInfo::availablePrinters()) {
if (pi.printerName().compare(printerName) == 0)
return pi;
}
return QPrinterInfo::defaultPrinter();
}
void MainWindow::on_actionSetting_triggered()
{
SettingDialog w(this);
w.setCertPrinterName(m_certPrinterName);
w.setOtherPrinterName(m_otherPrinterName);
w.setDeleteLastFile(m_deleteLastFile);
connect(&w, SIGNAL(accepted()), this, SLOT(settingAccepted()));
w.exec();
}
void MainWindow::on_actionDelete_triggered()
{
if (m_previewScene) {
m_previewScene->deleteSelected();
}
}
void MainWindow::on_action_PDF_triggered()
{
QString fileName
= QFileDialog::getSaveFileName(this, tr("Имя файла для экспорта"), "", "*.pdf");
if (!fileName.isEmpty()) {
QPrinter printer;
printer.setOutputFileName(fileName);
printer.setOutputFormat(QPrinter::PdfFormat);
// m_report.printReport(&printer);
if (m_previewScene->pageItems().isEmpty())
m_report.printReport(&printer);
else {
m_report.printPages(m_previewScene->pageItems(), &printer);
foreach (LimeReport::PageItemDesignIntf::Ptr pageItem, m_previewScene->pageItems()) {
m_previewScene->reactivatePageItem(pageItem);
}
}
}
}