Files
picturePrint/cprint.cpp
T
2020-02-18 15:21:55 +01:00

197 lines
6.1 KiB
C++

/*!
\file cprint.cpp
*/
#include "cprint.h"
#include "ui_cprint.h"
#include "cfileviewer.h"
#include "cimage.h"
#include <QPrinter>
#include <QPrinterInfo>
#include <QPrintDialog>
#include <QPrintPreviewWidget>
#include <QPageSetupDialog>
#include <QPainter>
#include <QDebug>
cPrint::cPrint(QProgressBar* lpProgressBar, QListView* lpSelectedList, QStandardItemModel* lpSelectedListModel, QWidget *parent) :
QWidget(parent),
ui(new Ui::cPrint),
m_lpProgressBar(lpProgressBar),
m_lpSelectedList(lpSelectedList),
m_lpSelectedListModel(lpSelectedListModel)
{
ui->setupUi(this);
m_printerStateText.insert(QPrinter::Idle, tr("idle"));
m_printerStateText.insert(QPrinter::Active, tr("Active"));
m_printerStateText.insert(QPrinter::Aborted, tr("Aborted"));
m_printerStateText.insert(QPrinter::Error, tr("Error"));
m_printerPaperSource.insert(QPrinter::Auto, tr("Auto"));
m_printerPaperSource.insert(QPrinter::Cassette, tr("Cassette"));
m_printerPaperSource.insert(QPrinter::Envelope, tr("Envelope"));
m_printerPaperSource.insert(QPrinter::EnvelopeManual, tr("EnvelopeManual"));
m_printerPaperSource.insert(QPrinter::FormSource, tr("FormSource"));
m_printerPaperSource.insert(QPrinter::LargeCapacity, tr("LargeCapacity"));
m_printerPaperSource.insert(QPrinter::LargeFormat, tr("LargeFormat"));
m_printerPaperSource.insert(QPrinter::Lower, tr("Lower"));
m_printerPaperSource.insert(QPrinter::MaxPageSource, tr("MaxPageSource"));
m_printerPaperSource.insert(QPrinter::Middle, tr("Middle"));
m_printerPaperSource.insert(QPrinter::Manual, tr("Manual"));
m_printerPaperSource.insert(QPrinter::OnlyOne, tr("OnlyOne"));
m_printerPaperSource.insert(QPrinter::Tractor, tr("Tractor"));
m_printerPaperSource.insert(QPrinter::SmallFormat, tr("SmallFormat"));
m_printerPaperSource.insert(QPrinter::Upper, tr("Upper"));
m_printerPaperSource.insert(QPrinter::CustomSource, tr("CustomSource"));
m_printerPaperSource.insert(QPrinter::LastPaperSource, tr("LastPaperSource"));
m_lpPrinter = new QPrinter;
QString defaultPrinter = QPrinterInfo::defaultPrinterName();
QStringList availablePrinters = QPrinterInfo::availablePrinterNames();
m_lpPrinter->setPrinterName(defaultPrinter);
onPrinterChanged(defaultPrinter);
ui->m_lpPrinterSelect->addItems(availablePrinters);
ui->m_lpPrinterSelect->setCurrentText(defaultPrinter);
m_lpPrintPreviewWidget = new QPrintPreviewWidget(m_lpPrinter, this);
m_lpPrintPreviewWidget->setObjectName(QString::fromUtf8("m_lpPrintPreviewWidget"));
ui->m_lpSplitter->insertWidget(0, m_lpPrintPreviewWidget);
const QIcon zoomOutIcon = QIcon::fromTheme("document-new");
const QIcon zoomInIcon = QIcon::fromTheme("zoom-in");
ui->m_lpZoomOut->setIcon(zoomOutIcon);
ui->m_lpZoomIn->setIcon(zoomInIcon);
connect(ui->m_lpPrinterSelect, &QComboBox::currentTextChanged, this, &cPrint::onPrinterChanged);
connect(ui->m_lpPrinterProperties, &QPushButton::clicked, this, &cPrint::onPrinterSettings);
connect(ui->m_lpPrintPreview, &QPushButton::clicked, this, &cPrint::onPrintPreview);
connect(ui->m_lpPrint, &QPushButton::clicked, this, &cPrint::onPrint);
connect(m_lpPrintPreviewWidget, &QPrintPreviewWidget::paintRequested, this, &cPrint::onPaintRequested);
}
cPrint::~cPrint()
{
if(m_lpPrintPreviewWidget)
delete m_lpPrintPreviewWidget;
if(m_lpPrinter)
delete m_lpPrinter;
delete ui;
}
void cPrint::onPrinterChanged(const QString& printer)
{
m_lpPrinter->setPrinterName(printer);
ui->m_lpPaperSize->clear();
ui->m_lpPaperSource->clear();
QPrinterInfo printerInfo(*m_lpPrinter);
QList<QPageSize> pageSizes = printerInfo.supportedPageSizes();
QList<QPrinter::PaperSource> paperSources = m_lpPrinter->supportedPaperSources();
ui->m_lpPrinterStatus->setText(m_printerStateText[printerInfo.state()]);
ui->m_lpPrinterMakeAndModel->setText(printerInfo.makeAndModel());
for(int x = 0;x < pageSizes.count();x++)
ui->m_lpPaperSize->addItem(pageSizes[x].name());
ui->m_lpPaperSize->setCurrentText(QPageSize::name(static_cast<QPageSize::PageSizeId>(m_lpPrinter->pageSize())));
ui->m_lpPrinterLocation->setText(printerInfo.location());
for(int x = 0;x < paperSources.count();x++)
ui->m_lpPaperSource->addItem(m_printerPaperSource[paperSources[x]]);
ui->m_lpPaperSource->setCurrentText(m_printerPaperSource[m_lpPrinter->paperSource()]);
}
void cPrint::onPrinterSettings()
{
QPrintDialog printDialog(m_lpPrinter);
printDialog.exec();
}
void cPrint::onPrintPreview()
{
if(!m_lpSelectedListModel->rowCount())
return;
cFileViewer* lpFileViewer = static_cast<cFileViewer*>(m_lpSelectedList->indexWidget(m_lpSelectedListModel->index(0, 0)));
if(!lpFileViewer)
return;
m_lpPrintPreviewWidget->updatePreview();
}
void cPrint::onPaintRequested(QPrinter* printer)
{
if(!m_lpSelectedListModel->rowCount())
return;
cFileViewer* lpFileViewer = static_cast<cFileViewer*>(m_lpSelectedList->indexWidget(m_lpSelectedListModel->index(0, 0)));
if(!lpFileViewer)
return;
QString fileName = lpFileViewer->fileName();
cImage image(fileName);
if(image.isNull())
return;
printer->newPage();
QPixmap pixmap = QPixmap::fromImage(image);
QPainter painter(printer);
QRect rect = painter.viewport();
QSize size = pixmap.size();
size.scale(rect.size(), Qt::KeepAspectRatio);
painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
painter.setWindow(pixmap.rect());
painter.drawPixmap(0, 0, pixmap);
}
void cPrint::onPrint()
{
// if(!m_lpSelectedListModel->rowCount())
// return;
// cFileViewer* lpFileViewer = static_cast<cFileViewer*>(m_lpSelectedList->indexWidget(m_lpSelectedListModel->index(0, 0)));
// if(!lpFileViewer)
// return;
// QString fileName = lpFileViewer->fileName();
// cImage image(fileName);
// if(image.isNull())
// return;
// QPixmap pixmap = QPixmap::fromImage(image);
// QPrintDialog printDialog(m_lpPrinter, this);
// if(printDialog.exec())
// {
// QPainter painter(m_lpPrinter);
// QRect rect = painter.viewport();
// QSize size = pixmap.size();
// size.scale(rect.size(), Qt::KeepAspectRatio);
// painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
// painter.setWindow(pixmap.rect());
// painter.drawPixmap(0, 0, pixmap);
// }
}