#include "MainWindow.h" #include "ui_MainWindow.h" #include #include #include #include #include #if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1)) #include #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( 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(); m_otherPrinterName = m_settings->value("otherPrinterName", "").value(); m_deleteLastFile = m_settings->value("deleteLastFile", false).value(); } 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); } } } }