print functionality
[pykit.git] / Viewer.cc
1 // $Id$
2 //
3 // Copyright (C) 2010
4 //     Stefan Bund <info@j32.de>
5
6 /** \file
7     \brief Viewer non-inline non-template implementation */
8
9 #include "Viewer.hh"
10 //#include "Viewer.ih"
11
12 // Custom includes
13 #include <iostream>
14 #include <QWebPluginFactory>
15 #include "Publisher.hh"
16 #ifdef POPPLER
17 #include "PDFWidget.hh"
18 #endif
19 #include <QPrinter>
20 #include <QPrintDialog>
21
22 //#include "Viewer.mpp"
23 #define prefix_
24 ///////////////////////////////cc.p////////////////////////////////////////
25
26 #ifdef POPPLER
27
28 namespace {
29
30     class PDFWebPluginFactory
31         : public QWebPluginFactory
32     {
33     public:
34         PDFWebPluginFactory(QNetworkAccessManager * manager, QObject * parent = 0);
35
36         QObject * create(QString const & mimeType, QUrl const & url,
37                          QStringList const & argumentNames, QStringList const & argumentValues)
38             const;
39         QList<QWebPluginFactory::Plugin> plugins() const;
40
41     private:
42         QNetworkAccessManager * manager_;
43     };
44
45 }
46
47 prefix_ PDFWebPluginFactory::PDFWebPluginFactory(QNetworkAccessManager * manager,
48                                                  QObject * parent)
49     : QWebPluginFactory(parent), manager_ (manager)
50 {}
51
52 prefix_ QObject * PDFWebPluginFactory::create(QString const & mimeType, QUrl const & url,
53                                               QStringList const & argumentNames,
54                                               QStringList const & argumentValues)
55     const
56 {
57     if (mimeType == "application/pdf") {
58         int idix (argumentNames.indexOf("id"));
59         QString id;
60         if (idix>0)
61             id = argumentValues[idix];
62         pykit::PDFWidget * plugin = new pykit::PDFWidget(
63             id, manager_, dynamic_cast<QWidget*>(parent()));
64         plugin->load(url);
65         return plugin;
66     }
67     return 0;
68 }
69
70 prefix_ QList<QWebPluginFactory::Plugin> PDFWebPluginFactory::plugins()
71     const
72 {
73     QList<QWebPluginFactory::Plugin> plugins;
74
75     {
76         QWebPluginFactory::Plugin plugin;
77         plugin.name = "PDF viewer";
78         plugin.description = "View PDF files";
79         {
80             QWebPluginFactory::MimeType mimeType;
81             mimeType.name = "application/pdf";
82             mimeType.description = "PDF file";
83             plugin.mimeTypes += mimeType;
84         }
85         plugins += plugin;
86     }
87
88     return plugins;
89 }
90
91 #endif
92
93 ///////////////////////////////////////////////////////////////////////////
94 // pykit::Viewer
95
96 prefix_ pykit::Viewer::Viewer(QUrl const & url, Publisher * publisher, QWidget * parent)
97     : QWebView (parent)
98 {
99     QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true);
100     page()->setNetworkAccessManager(
101         new InternalNetworkAccessManager(page()->networkAccessManager(), this, publisher));
102 #ifdef POPPLER
103     page()->setPluginFactory(new PDFWebPluginFactory (page()->networkAccessManager(), this));
104 #endif
105     connect(page(), SIGNAL(printRequested(QWebFrame*)), this, SLOT(printRequested()));
106     load(url);
107 }
108
109 prefix_ void pykit::Viewer::printRequested()
110 {
111     QPrinter printer;
112     QPrintDialog printDialog(&printer, this);
113     if (printDialog.exec() == QPrintDialog::Accepted) {
114         print(&printer);
115     }
116 }
117
118 ///////////////////////////////cc.e////////////////////////////////////////
119 #undef prefix_
120 //#include "Viewer.mpp"
121
122 \f
123 // Local Variables:
124 // mode: c++
125 // fill-column: 100
126 // comment-column: 40
127 // c-file-style: "j32"
128 // indent-tabs-mode: nil
129 // ispell-local-dictionary: "american"
130 // compile-command: "scons -U"
131 // End: