]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
0020512: EDF 1113 OTHER : Using webkit to display documentation
authorvsr <vsr@opencascade.com>
Mon, 17 Oct 2011 10:07:30 +0000 (10:07 +0000)
committervsr <vsr@opencascade.com>
Mon, 17 Oct 2011 10:07:30 +0000 (10:07 +0000)
Process PDF files

src/Qtx/QtxWebBrowser.cxx
src/Qtx/QtxWebBrowser.h

index 34e354422da18b5e4a12287cd3a5f26ed6953a9e..98e39eb6162daa957cfe783abd8d9cdfbda1e3c1 100644 (file)
@@ -27,6 +27,7 @@
 #include "QtxSearchTool.h"
 
 #include <QApplication>
+#include <QFileInfo>
 #include <QWebView>
 #include <QMenuBar>
 #include <QToolBar>
@@ -151,6 +152,7 @@ QtxWebBrowser::QtxWebBrowser() : QMainWindow( 0 )
   QWidget* frame = new QWidget( this );
 
   myWebView = new QWebView( frame );
+  myWebView->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
   myFindPanel = new QtxSearchTool( frame, myWebView,
                                   QtxSearchTool::Basic | QtxSearchTool::Case | QtxSearchTool::Wrap, 
                                   Qt::Horizontal );
@@ -177,6 +179,7 @@ QtxWebBrowser::QtxWebBrowser() : QMainWindow( 0 )
   main->setSpacing( 3 );
 
   connect( myWebView, SIGNAL( titleChanged( QString ) ), SLOT( adjustTitle() ) ); 
+  connect( myWebView, SIGNAL( linkClicked( QUrl ) ),     SLOT( linkClicked( QUrl ) ) ); 
   
   setCentralWidget( frame );
   setFocusProxy( myWebView );
@@ -365,11 +368,45 @@ void QtxWebBrowser::updateData()
   }
 }
 
+/*!
+  \brief Clear internal data map
+  \internal
+*/
 void QtxWebBrowser::clearData()
 {
   myData.clear();
 }
 
+/*!
+  \brief Called when users activated any link at the page
+  \internal
+*/
+void QtxWebBrowser::linkClicked( const QUrl& url )
+{
+  myWebView->page()->setLinkDelegationPolicy( QWebPage::DontDelegateLinks );
+  myWebView->load( url );
+  if ( url.scheme() == "file" ) {
+    QString filename = url.toLocalFile();
+    if ( QFileInfo( filename ).suffix().toLower() == "pdf" ) {
+#ifdef WIN32
+      ::system( QString( "start %2" ).arg( filename ).toLatin1().constData() );
+#else
+      // special processing of PDF files
+      QStringList readers;
+      readers << "xdg-open" << "acroread" << "kpdf" << "kghostview" << "xpdf";
+      foreach ( QString r, readers ) {
+       QString reader = QString( "/usr/bin/%1" ).arg( r );
+       if ( QFileInfo( reader ).exists() ) {
+         ::system( QString( "%1 %2 &" ).arg( reader ).arg( url.toLocalFile() ).toLatin1().constData() );
+         break;
+       }
+      }
+#endif // WIN32
+    }
+  }
+  myWebView->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
+}
+
 /*!
   \brief Update title of the window
   \internal
index d96914a6604d1adc4aef27f8e6e17ac801a939e1..f48f7f0ca6b57325270016c1ca3d3ae4a623728d 100644 (file)
@@ -36,6 +36,7 @@ class QAction;
 class QMenu;
 class QToolBar;
 class QWebView;
+class QUrl;
 class QtxSearchTool;
 
 class QTX_EXPORT QtxWebBrowser : public QMainWindow
@@ -61,6 +62,9 @@ private:
   void                            updateData();
   static void                     clearData();
 
+protected slots:
+  virtual void                    linkClicked( const QUrl& );
+
 private slots:
   void                            adjustTitle();