#include "MainWindow.h" #include "ui_MainWindow.h" #include #include #include #include #include #if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1)) #include #endif #include "XmlModel.h" #include "SettingDialog.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); } } } }