diff --git a/cmainwindow.cpp b/cmainwindow.cpp index 25babf8..fe4f512 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -21,7 +21,8 @@ cMainWindow::cMainWindow(cSplashScreen* lpSplashScreen, QWidget *parent) : QMainWindow(parent), ui(new Ui::cMainWindow), m_lpSplashScreen(lpSplashScreen), - m_lpFileBrowser(nullptr) + m_lpFileBrowser(nullptr), + m_lpPrint(nullptr) { setImageFormats(); @@ -81,6 +82,9 @@ void cMainWindow::initUI() m_lpFileBrowser = new cFileBrowser(m_lpProgressBar, &m_imageFormats, ui->m_lpSelectedList, m_lpSelectedListModel, this); ui->m_lpMainTab->addTab(m_lpFileBrowser, "Files"); + m_lpPrint = new cPrint(m_lpProgressBar, ui->m_lpSelectedList, m_lpSelectedListModel, this); + ui->m_lpMainTab->addTab(m_lpPrint, "Print"); + if(!settings.value("main/maximized").toBool()) { qint32 iX = settings.value("main/x", QVariant::fromValue(-1)).toInt(); diff --git a/cmainwindow.h b/cmainwindow.h index a46ad8a..121e69b 100644 --- a/cmainwindow.h +++ b/cmainwindow.h @@ -11,6 +11,7 @@ #include "common.h" #include "cfilebrowser.h" +#include "cprint.h" #include #include @@ -46,6 +47,7 @@ private: QProgressBar* m_lpProgressBar; /*!< TODO: describe */ cFileBrowser* m_lpFileBrowser; /*!< TODO: describe */ + cPrint* m_lpPrint; /*!< TODO: describe */ QStandardItemModel* m_lpSelectedListModel; /*!< TODO: describe */ QList m_imageFormats; /*!< TODO: describe */ diff --git a/cprint.cpp b/cprint.cpp new file mode 100644 index 0000000..f718fc8 --- /dev/null +++ b/cprint.cpp @@ -0,0 +1,84 @@ +/*! + \file cprint.cpp + +*/ + +#include "cprint.h" +#include "ui_cprint.h" + +#include "cfileviewer.h" + +#include "cimage.h" + +#include +#include +#include +#include +#include + + +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_lpPrinter = new QPrinter; + + QString defaultPrinter = QPrinterInfo::defaultPrinterName(); + QStringList availablePrinters = QPrinterInfo::availablePrinterNames(); + + ui->m_lpPrinterSelect->addItems(availablePrinters); + ui->m_lpPrinterSelect->setCurrentText(defaultPrinter); + + connect(ui->m_lpPrinterSettings, &QPushButton::clicked, this, &cPrint::onPrinterSettings); + connect(ui->m_lpPrint, &QPushButton::clicked, this, &cPrint::onPrint); +} + +cPrint::~cPrint() +{ + if(m_lpPrinter) + delete m_lpPrinter; + + delete ui; +} + +void cPrint::onPrinterSettings() +{ + QPageSetupDialog pageSetupDialog(m_lpPrinter); + pageSetupDialog.exec(); +} + +void cPrint::onPrint() +{ + if(!m_lpSelectedListModel->rowCount()) + return; + + cFileViewer* lpFileViewer = static_cast(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); + } +} diff --git a/cprint.h b/cprint.h new file mode 100644 index 0000000..1b5512f --- /dev/null +++ b/cprint.h @@ -0,0 +1,70 @@ +/*! + \file cprint.h + +*/ + +#ifndef CPRINT_H +#define CPRINT_H + + +#include + +#include +#include +#include + +#include + + +namespace Ui { +class cPrint; +} + +/*! + \brief + + \class cPrint cprint.h "cprint.h" +*/ +class cPrint : public QWidget +{ + Q_OBJECT + +public: + /*! + \brief + + \fn cPrint + \param parent + */ + explicit cPrint(QProgressBar* lpProgressBar, QListView* lpSelectedList, QStandardItemModel* lpSelectedListModel, QWidget *parent = nullptr); + /*! + \brief + + \fn ~cPrint + */ + ~cPrint(); + +private: + Ui::cPrint* ui; /*!< TODO: describe */ + QProgressBar* m_lpProgressBar; /*!< TODO: describe */ + QListView* m_lpSelectedList; /*!< TODO: describe */ + QStandardItemModel* m_lpSelectedListModel; /*!< TODO: describe */ + + QPrinter* m_lpPrinter; /*!< TODO: describe */ + +private slots: + /*! + \brief + + \fn onPrinterSettings + */ + void onPrinterSettings(); + /*! + \brief + + \fn onPrint + */ + void onPrint(); +}; + +#endif // CPRINT_H diff --git a/cprint.ui b/cprint.ui new file mode 100644 index 0000000..5ed1722 --- /dev/null +++ b/cprint.ui @@ -0,0 +1,72 @@ + + + cPrint + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + printer settings... + + + + + + + print + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + diff --git a/picturePrint.pro b/picturePrint.pro index cff8535..efc7d91 100644 --- a/picturePrint.pro +++ b/picturePrint.pro @@ -5,6 +5,7 @@ QMAKE_TARGET_DESCRIPTION = picturePrint QMAKE_TARGET_COPYRIGHT = (c) 2020 WIN-DESIGN QT += core gui sql multimedia concurrent +qtHaveModule(printsupport): QT += printsupport greaterThan(QT_MAJOR_VERSION, 4): QT += widgets @@ -49,6 +50,7 @@ SOURCES += \ cfileviewer.cpp \ cimage.cpp \ common.cpp \ + cprint.cpp \ csplashscreen.cpp \ main.cpp \ cmainwindow.cpp @@ -60,12 +62,14 @@ HEADERS += \ cimage.h \ cmainwindow.h \ common.h \ + cprint.h \ csplashscreen.h FORMS += \ cfilebrowser.ui \ cfileviewer.ui \ - cmainwindow.ui + cmainwindow.ui \ + cprint.ui TRANSLATIONS += \ picturePrint_de_AT.ts