diff options
author | Ken Moore <ken@ixsystems.com> | 2017-03-13 15:41:39 -0400 |
---|---|---|
committer | Ken Moore <ken@ixsystems.com> | 2017-03-13 15:41:39 -0400 |
commit | cbef967cead76a6e465d534284acdd1927ad632e (patch) | |
tree | 74e336cb732edb37495f1312ce15135830c7ec51 /src-qt5/desktop-utils/lumina-pdf/mainUI.cpp | |
parent | Merge branch 'master' of github.com:trueos/lumina (diff) | |
download | lumina-cbef967cead76a6e465d534284acdd1927ad632e.tar.gz lumina-cbef967cead76a6e465d534284acdd1927ad632e.tar.bz2 lumina-cbef967cead76a6e465d534284acdd1927ad632e.zip |
Add a new desktop application: lumina-pdf
This is a basic PDF file viewer application, with printing capabilities.
NOTE: This is not quite done yet - the basic PDF viewer works if an input file is supplied, but I have not finished adding all the normal window operations around it yet (menu bar with close, open file options, progress bar for loading status rather than using a message box, etc...)
Diffstat (limited to 'src-qt5/desktop-utils/lumina-pdf/mainUI.cpp')
-rw-r--r-- | src-qt5/desktop-utils/lumina-pdf/mainUI.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src-qt5/desktop-utils/lumina-pdf/mainUI.cpp b/src-qt5/desktop-utils/lumina-pdf/mainUI.cpp new file mode 100644 index 00000000..22e41dbb --- /dev/null +++ b/src-qt5/desktop-utils/lumina-pdf/mainUI.cpp @@ -0,0 +1,102 @@ +//=========================================== +// Lumina Desktop source code +// Copyright (c) 2017, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +#include "mainUI.h" +#include <QPainter> +#include <QImage> +#include <QSize> +#include <QMessageBox> +#include <QDebug> +#include <QApplication> + +#include <LuminaXDG.h> + +MainUI::MainUI() : QPrintPreviewDialog(0, Qt::Window){ + + //this->addStatusBar(); + + connect(this, SIGNAL(paintRequested(QPrinter*)), this, SLOT(paintOnWidget(QPrinter*)) ); + DOC = 0; +} + +MainUI::~MainUI(){ + +} + +void MainUI::loadFile(QString path){ + if(DOC!=0){ + //Clear out the old document first + delete DOC; + } + if(!QFile::exists(path) || path.isEmpty() ){QApplication::exit(1); } + DOC = Poppler::Document::load(path); + if(DOC!=0){ this->setWindowTitle(DOC->title()); } + if(this->windowTitle().isEmpty()){ this->setWindowTitle(path.section("/",-1)); } + this->setWindowIcon( LXDG::findIcon("application-pdf","unknown")); + //Setup the Document + Poppler::Page *PAGE = DOC->page(0); + if(PAGE!=0){ + this->printer()->setPageSize( QPageSize(PAGE->pageSize(), QPageSize::Point) ); + switch(PAGE->orientation()){ + case Poppler::Page::Landscape: + this->printer()->setOrientation(QPrinter::Landscape); break; + default: + this->printer()->setOrientation(QPrinter::Portrait); + } + delete PAGE; + } + +} + +void MainUI::done(int val){ + //This is automatically called with value=1 when the "print()" function finishes + //Otherwise close down the application + if(val==0){ QApplication::exit(0); } +} + +void MainUI::paintOnWidget(QPrinter *PRINTER){ + if(DOC==0){ return; } + int pages = DOC->numPages(); + int firstpage = 0; + //qDebug() << "Start Rendering PDF:" << PRINTER->fromPage() << PRINTER->toPage(); + if(PRINTER->fromPage() != PRINTER->toPage() || PRINTER->fromPage()!=0){ + firstpage = PRINTER->fromPage() - 1; + pages = PRINTER->toPage(); + } + qDebug() << " - Generating Pages:" << firstpage << pages; + //Now start painting all the pages onto the widget + QRectF size = PRINTER->pageRect(QPrinter::DevicePixel); + QSize DPI(PRINTER->resolution(),PRINTER->resolution()); + QPainter painter(PRINTER); + Poppler::Page *PAGE = 0; + QMessageBox wait(QMessageBox::NoIcon, tr("Opening PDF..."), QString(tr("Preparing Document (%1 pages)")).arg(QString::number(pages)), QMessageBox::Abort, this); + wait.setInformativeText(" "); //Make sure the window is the right size before showing it + wait.setStandardButtons(QMessageBox::Abort); //make sure that no buttons are used + wait.show(); + for(int i=firstpage; i<pages && wait.isVisible(); i++){ + wait.setInformativeText( QString(tr("Loading Page: %1")).arg(i+1) ); + //qDebug() << "Loading Page:" << i; + QApplication::processEvents(); + //Now paint this page on the printer + if(PAGE!=0){ delete PAGE; PRINTER->newPage(); } //this is the start of the next page (not needed for first) + PAGE = DOC->page(i); + if(PAGE!=0){ + painter.drawImage(0,0,PAGE->renderToImage(DPI.width(), DPI.height()).scaled(size.width(), size.height(), Qt::KeepAspectRatio, Qt::SmoothTransformation) ); + }else{ + painter.drawImage(0,0,QImage()); + } + QApplication::processEvents(); + } + if(PAGE!=0){ delete PAGE; } + wait.close(); +} + +void MainUI::OpenNewFile(){ + //Prompt for a file + + //Now Open it + +} |