Add PDFWidget JavaScript API
[pykit.git] / PDFWidget.hh
1 // $Id$
2 //
3 // Copyright (C) 2010
4 //     Stefan Bund <info@j32.de>
5
6 /** \file
7     \brief PDFWidget public header */
8
9 #ifndef HH_PyKit_PDFWidget_
10 #define HH_PyKit_PDFWidget_ 1
11
12 // Custom includes
13 #include <poppler/qt4/poppler-qt4.h>
14 #include <boost/scoped_ptr.hpp>
15 #include <QLabel>
16 #include <QString>
17 #include <QWidget>
18 #include <QNetworkAccessManager>
19 #include <QUrl>
20
21 //#include "PDFWidget.mpp"
22 ///////////////////////////////hh.p////////////////////////////////////////
23
24 namespace pykit {
25
26     class PDFWidget : public QLabel
27     {
28         Q_OBJECT;
29     public:
30         explicit PDFWidget(QString const & id, QNetworkAccessManager * manager,
31                            QWidget * parent = 0);
32         PDFWidget(QString const & id, QString const & document, QNetworkAccessManager * manager,
33                   QWidget * parent = 0);
34
35         void load(QUrl const & url);
36
37     public slots:
38         void zoomIn();
39         void zoomOut();
40         void zoomDPI(double dpi);
41
42         int zoomWidth(int w = -1);
43         int zoomHeight();
44         void zoomFit();
45
46         int getPDFWidth();
47         int getPDFHeight();
48
49     protected:
50         virtual void resizeEvent(QResizeEvent * event);
51
52     private slots:
53         void netLoadDocument();
54
55     private:
56         void documentSetup();
57         void showPage();
58
59         enum ZoomMode { Manual, Width, Height, Fit };
60         static double const ZoomStepDpi = 20.0;
61         static double const ZoomMaxDpi = 200.0;
62         static double const ZoomMinDpi = 50.0;
63
64         QString id_;
65         QNetworkAccessManager * manager_;
66         boost::scoped_ptr<Poppler::Document> document_;
67         int currentPage_;
68         ZoomMode zoomMode_;
69         double dpi_;
70         int x_;
71         int y_;
72     };
73
74 }
75
76 ///////////////////////////////hh.e////////////////////////////////////////
77 //#include "PDFWidget.cci"
78 //#include "PDFWidget.ct"
79 //#include "PDFWidget.cti"
80 #endif
81
82 \f
83 // Local Variables:
84 // mode: c++
85 // fill-column: 100
86 // comment-column: 40
87 // c-file-style: "j32"
88 // indent-tabs-mode: nil
89 // ispell-local-dictionary: "american"
90 // compile-command: "scons -U"
91 // End: