typo fix
[pykit.git] / Viewer.cc
index c9101ee..03e8452 100644 (file)
--- a/Viewer.cc
+++ b/Viewer.cc
 #ifdef POPPLER
 #include "PDFWidget.hh"
 #endif
+#include <QPrinter>
+#include <QPrintDialog>
+#include <QWebInspector>
+#include <QWebFrame>
+#include <QWebHistory>
 
 //#include "Viewer.mpp"
 #define prefix_
@@ -48,12 +53,17 @@ prefix_ PDFWebPluginFactory::PDFWebPluginFactory(QNetworkAccessManager * manager
 {}
 
 prefix_ QObject * PDFWebPluginFactory::create(QString const & mimeType, QUrl const & url,
-                                              QStringList const & /* argumentNames */,
-                                              QStringList const & /* argumentValues */)
+                                              QStringList const & argumentNames,
+                                              QStringList const & argumentValues)
     const
 {
     if (mimeType == "application/pdf") {
-        pykit::PDFWidget * plugin = new pykit::PDFWidget(manager_);
+        int idix (argumentNames.indexOf("id"));
+        QString id;
+        if (idix>0)
+            id = argumentValues[idix];
+        pykit::PDFWidget * plugin = new pykit::PDFWidget(
+            id, manager_, dynamic_cast<QWidget*>(parent()));
         plugin->load(url);
         return plugin;
     }
@@ -86,16 +96,64 @@ prefix_ QList<QWebPluginFactory::Plugin> PDFWebPluginFactory::plugins()
 ///////////////////////////////////////////////////////////////////////////
 // pykit::Viewer
 
+namespace {
+    pykit::Viewer * instance_ (0);
+}
+
 prefix_ pykit::Viewer::Viewer(QUrl const & url, Publisher * publisher, QWidget * parent)
     : QWebView (parent)
 {
+    instance_ = this;
     QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true);
+    if (! QWebSettings::globalSettings()->testAttribute(QWebSettings::DeveloperExtrasEnabled))
+        setContextMenuPolicy(Qt::NoContextMenu);
     page()->setNetworkAccessManager(
         new InternalNetworkAccessManager(page()->networkAccessManager(), this, publisher));
 #ifdef POPPLER
     page()->setPluginFactory(new PDFWebPluginFactory (page()->networkAccessManager(), this));
 #endif
+    connect(page(), SIGNAL(printRequested(QWebFrame*)), this, SLOT(printRequested()));
     load(url);
+    inspector_ = new QWebInspector();
+    inspector_->setPage(page());
+    connect(page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
+            this, SLOT(initJSObjects()));
+    initJSObjects();
+}
+
+prefix_ pykit::Viewer::~Viewer()
+{
+    if (inspector_)
+        delete inspector_;
+}
+
+prefix_ pykit::Viewer * pykit::Viewer::instance()
+{
+    return instance_;
+}
+
+prefix_ bool pykit::Viewer::canGoBack()
+{
+    return page()->history()->canGoBack();
+}
+
+prefix_ bool pykit::Viewer::canGoForward()
+{
+    return page()->history()->canGoForward();
+}
+
+prefix_ void pykit::Viewer::initJSObjects()
+{
+    page()->mainFrame()->addToJavaScriptWindowObject("view", this);
+}
+
+prefix_ void pykit::Viewer::printRequested()
+{
+    QPrinter printer;
+    QPrintDialog printDialog(&printer, this);
+    if (printDialog.exec() == QPrintDialog::Accepted) {
+        print(&printer);
+    }
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////