Add support for external webkit
[pykit.git] / PDFWidget.cc
1 // $Id$
2 //
3 // Copyright (C) 2010
4 //     Stefan Bund <info@j32.de>
5
6 /** \file
7     \brief PDFWidget non-inline non-template implementation */
8
9 #include "PDFWidget.hh"
10 //#include "PDFWidget.ih"
11
12 // Custom includes
13 #include <iostream>
14 #include <QNetworkRequest>
15 #include <QNetworkReply>
16
17 //#include "PDFWidget.mpp"
18 #define prefix_
19 ///////////////////////////////cc.p////////////////////////////////////////
20
21 prefix_ pykit::PDFWidget::PDFWidget(QNetworkAccessManager * manager, QWidget * parent)
22     : QLabel(parent), manager_ (manager), currentPage_ (0)
23 {}
24
25 prefix_ pykit::PDFWidget::PDFWidget(QString const & document, QNetworkAccessManager * manager,
26                                     QWidget * parent)
27     : QLabel(parent), manager_ (manager), currentPage_ (0)
28 {
29     document_.reset(Poppler::Document::load(document));
30     documentSetup();
31     showPage();
32 }
33
34 prefix_ void pykit::PDFWidget::load(QUrl const & url)
35 {
36     QNetworkRequest request (url);
37     QNetworkReply * reply (manager_->get(request));
38     connect(reply, SIGNAL(finished()), this, SLOT(netLoadDocument()));
39 }
40
41 prefix_ void pykit::PDFWidget::netLoadDocument()
42 {
43     QNetworkReply * reply = static_cast<QNetworkReply*>(sender());
44     if (reply->error() != QNetworkReply::NoError)
45         return;
46     QByteArray data (reply->read(reply->size()));
47     document_.reset(Poppler::Document::loadFromData(data));
48     documentSetup();
49     showPage();
50     reply->deleteLater();
51 }
52
53 prefix_ void pykit::PDFWidget::documentSetup()
54 {
55     document_->setRenderHint(Poppler::Document::Antialiasing, true);
56     document_->setRenderHint(Poppler::Document::TextAntialiasing, true);
57     document_->setRenderHint(Poppler::Document::TextHinting, false);
58 }
59
60 prefix_ void pykit::PDFWidget::showPage()
61 {
62     if (! document_)
63         return;
64     QImage image (document_->page(currentPage_)->renderToImage(
65                       physicalDpiX(), physicalDpiY()));
66     setPixmap(QPixmap::fromImage(image));
67 }
68
69 ///////////////////////////////cc.e////////////////////////////////////////
70 #undef prefix_
71 //#include "PDFWidget.mpp"
72
73 \f
74 // Local Variables:
75 // mode: c++
76 // fill-column: 100
77 // comment-column: 40
78 // c-file-style: "j32"
79 // indent-tabs-mode: nil
80 // ispell-local-dictionary: "american"
81 // compile-command: "scons -U"
82 // End: