qt4/src/poppler-form.cc    |    1 
 qt4/src/poppler-page.cc    |    1 
 qt4/src/poppler-private.cc |  104 +++++++++++++++++++++++++++++++++++++++++++++
 qt4/src/poppler-private.h  |   64 ---------------------------
 4 files changed, 108 insertions(+), 62 deletions(-)

New commits:
commit 4cd364c179ae91ed383a8237ba1ad263952fd7aa
Author: Pino Toscano <[EMAIL PROTECTED]>
Date:   Sun Nov 30 16:57:52 2008 +0100

    add my copyright here

diff --git a/qt4/src/poppler-private.cc b/qt4/src/poppler-private.cc
index 7d2d586..d5a0191 100644
--- a/qt4/src/poppler-private.cc
+++ b/qt4/src/poppler-private.cc
@@ -1,6 +1,7 @@
 /* poppler-private.cc: qt interface to poppler
  * Copyright (C) 2005, Net Integration Technologies, Inc.
  * Copyright (C) 2006 by Albert Astals Cid <[EMAIL PROTECTED]>
+ * Copyright (C) 2008 by Pino Toscano <[EMAIL PROTECTED]>
  * Inspired on code by
  * Copyright (C) 2004 by Albert Astals Cid <[EMAIL PROTECTED]>
  * Copyright (C) 2004 by Enrico Ros <[EMAIL PROTECTED]>
commit 6b1676deb773675d90469adc84c3de8dcdaf174c
Author: Pino Toscano <[EMAIL PROTECTED]>
Date:   Sun Nov 30 16:56:43 2008 +0100

    [Qt4] support URI actions for TOC items

diff --git a/qt4/src/poppler-private.cc b/qt4/src/poppler-private.cc
index 80871e7..7d2d586 100644
--- a/qt4/src/poppler-private.cc
+++ b/qt4/src/poppler-private.cc
@@ -174,6 +174,11 @@ namespace Poppler {
                 e->setAttribute( "ExternalFileName", 
g->getFileName()->getCString() );
                 break;
             }
+            case actionURI:
+            {
+                LinkURI * u = static_cast< LinkURI * >( a );
+                e->setAttribute( "DestinationURI", u->getURI()->getCString() );
+            }
             default: ;
         }
     }
commit b5cd58b5565055fd0c13771461245ddcd80edfcf
Author: Pino Toscano <[EMAIL PROTECTED]>
Date:   Sun Nov 30 16:34:57 2008 +0100

    extract the LinkAction "serialization" in an own function, and make it more 
safe

diff --git a/qt4/src/poppler-private.cc b/qt4/src/poppler-private.cc
index 7b6e2a0..80871e7 100644
--- a/qt4/src/poppler-private.cc
+++ b/qt4/src/poppler-private.cc
@@ -118,28 +118,14 @@ namespace Poppler {
         return ret;
     }
 
-    void DocumentData::addTocChildren( QDomDocument * docSyn, QDomNode * 
parent, GooList * items )
+    void linkActionToTocItem( ::LinkAction * a, DocumentData * doc, 
QDomElement * e )
     {
-        int numItems = items->getLength();
-        for ( int i = 0; i < numItems; ++i )
-        {
-            // iterate over every object in 'items'
-            OutlineItem * outlineItem = (OutlineItem *)items->get( i );
-
-            // 1. create element using outlineItem's title as tagName
-            QString name;
-            Unicode * uniChar = outlineItem->getTitle();
-            int titleLength = outlineItem->getTitleLength();
-            name = unicodeToQString(uniChar, titleLength);
-            if ( name.isEmpty() )
-                continue;
-
-            QDomElement item = docSyn->createElement( name );
-            parent->appendChild( item );
+        if ( !a || !e )
+            return;
 
-            // 2. find the page the link refers to
-            ::LinkAction * a = outlineItem->getAction();
-            if ( a && ( a->getKind() == actionGoTo || a->getKind() == 
actionGoToR ) )
+        switch ( a->getKind() )
+        {
+            case actionGoTo:
             {
                 // page number is contained/referenced in a LinkGoTo
                 LinkGoTo * g = static_cast< LinkGoTo * >( a );
@@ -153,20 +139,67 @@ namespace Poppler {
                     QChar *charArray = new QChar[s->getLength()];
                     for (int i = 0; i < s->getLength(); ++i) charArray[i] = 
QChar(s->getCString()[i]);
                     QString aux(charArray, s->getLength());
-                    item.setAttribute( "DestinationName", aux );
+                    e->setAttribute( "DestinationName", aux );
                     delete[] charArray;
                 }
                 else if ( destination && destination->isOk() )
                 {
-                    LinkDestinationData ldd(destination, NULL, this);
-                    item.setAttribute( "Destination", 
LinkDestination(ldd).toString() );
+                    LinkDestinationData ldd(destination, NULL, doc);
+                    e->setAttribute( "Destination", 
LinkDestination(ldd).toString() );
                 }
-                if ( a->getKind() == actionGoToR )
+                break;
+            }
+            case actionGoToR:
+            {
+                // page number is contained/referenced in a LinkGoToR
+                LinkGoToR * g = static_cast< LinkGoToR * >( a );
+                LinkDest * destination = g->getDest();
+                if ( !destination && g->getNamedDest() )
                 {
-                    LinkGoToR * g2 = static_cast< LinkGoToR * >( a );
-                    item.setAttribute( "ExternalFileName", 
g2->getFileName()->getCString() );
+                    // no 'destination' but an internal 'named reference'. we 
could
+                    // get the destination for the page now, but it's VERY 
time consuming,
+                    // so better storing the reference and provide the 
viewport on demand
+                    GooString *s = g->getNamedDest();
+                    QChar *charArray = new QChar[s->getLength()];
+                    for (int i = 0; i < s->getLength(); ++i) charArray[i] = 
QChar(s->getCString()[i]);
+                    QString aux(charArray, s->getLength());
+                    e->setAttribute( "DestinationName", aux );
+                    delete[] charArray;
+                }
+                else if ( destination && destination->isOk() )
+                {
+                    LinkDestinationData ldd(destination, NULL, doc);
+                    e->setAttribute( "Destination", 
LinkDestination(ldd).toString() );
                 }
+                e->setAttribute( "ExternalFileName", 
g->getFileName()->getCString() );
+                break;
             }
+            default: ;
+        }
+    }
+
+    void DocumentData::addTocChildren( QDomDocument * docSyn, QDomNode * 
parent, GooList * items )
+    {
+        int numItems = items->getLength();
+        for ( int i = 0; i < numItems; ++i )
+        {
+            // iterate over every object in 'items'
+            OutlineItem * outlineItem = (OutlineItem *)items->get( i );
+
+            // 1. create element using outlineItem's title as tagName
+            QString name;
+            Unicode * uniChar = outlineItem->getTitle();
+            int titleLength = outlineItem->getTitleLength();
+            name = unicodeToQString(uniChar, titleLength);
+            if ( name.isEmpty() )
+                continue;
+
+            QDomElement item = docSyn->createElement( name );
+            parent->appendChild( item );
+
+            // 2. find the page the link refers to
+            ::LinkAction * a = outlineItem->getAction();
+            linkActionToTocItem( a, this, &item );
 
             item.setAttribute( "Open", QVariant( (bool)outlineItem->isOpen() 
).toString() );
 
commit ee191363e22940ae7b06945e68c4738b17c78348
Author: Pino Toscano <[EMAIL PROTECTED]>
Date:   Sun Nov 30 16:17:32 2008 +0100

    move the addTocChildren() implementation in the cpp

diff --git a/qt4/src/poppler-form.cc b/qt4/src/poppler-form.cc
index 772cdd9..d9ef0bc 100644
--- a/qt4/src/poppler-form.cc
+++ b/qt4/src/poppler-form.cc
@@ -22,6 +22,7 @@
 
 #include <Form.h>
 #include <Object.h>
+#include <Link.h>
 
 #include "poppler-form.h"
 #include "poppler-page-private.h"
diff --git a/qt4/src/poppler-page.cc b/qt4/src/poppler-page.cc
index f5f1281..e6d5ed9 100644
--- a/qt4/src/poppler-page.cc
+++ b/qt4/src/poppler-page.cc
@@ -34,6 +34,7 @@
 #include <ErrorCodes.h>
 #include <TextOutputDev.h>
 #include <Annot.h>
+#include <Link.h>
 #if defined(HAVE_SPLASH)
 #include <SplashOutputDev.h>
 #include <splash/SplashBitmap.h>
diff --git a/qt4/src/poppler-private.cc b/qt4/src/poppler-private.cc
index d525e56..7b6e2a0 100644
--- a/qt4/src/poppler-private.cc
+++ b/qt4/src/poppler-private.cc
@@ -24,6 +24,10 @@
 
 #include <QtCore/QByteArray>
 #include <QtCore/QDebug>
+#include <QtCore/QVariant>
+
+#include <Link.h>
+#include <Outline.h>
 
 namespace Poppler {
 
@@ -113,4 +117,65 @@ namespace Poppler {
         gfree(cstring);
         return ret;
     }
+
+    void DocumentData::addTocChildren( QDomDocument * docSyn, QDomNode * 
parent, GooList * items )
+    {
+        int numItems = items->getLength();
+        for ( int i = 0; i < numItems; ++i )
+        {
+            // iterate over every object in 'items'
+            OutlineItem * outlineItem = (OutlineItem *)items->get( i );
+
+            // 1. create element using outlineItem's title as tagName
+            QString name;
+            Unicode * uniChar = outlineItem->getTitle();
+            int titleLength = outlineItem->getTitleLength();
+            name = unicodeToQString(uniChar, titleLength);
+            if ( name.isEmpty() )
+                continue;
+
+            QDomElement item = docSyn->createElement( name );
+            parent->appendChild( item );
+
+            // 2. find the page the link refers to
+            ::LinkAction * a = outlineItem->getAction();
+            if ( a && ( a->getKind() == actionGoTo || a->getKind() == 
actionGoToR ) )
+            {
+                // page number is contained/referenced in a LinkGoTo
+                LinkGoTo * g = static_cast< LinkGoTo * >( a );
+                LinkDest * destination = g->getDest();
+                if ( !destination && g->getNamedDest() )
+                {
+                    // no 'destination' but an internal 'named reference'. we 
could
+                    // get the destination for the page now, but it's VERY 
time consuming,
+                    // so better storing the reference and provide the 
viewport on demand
+                    GooString *s = g->getNamedDest();
+                    QChar *charArray = new QChar[s->getLength()];
+                    for (int i = 0; i < s->getLength(); ++i) charArray[i] = 
QChar(s->getCString()[i]);
+                    QString aux(charArray, s->getLength());
+                    item.setAttribute( "DestinationName", aux );
+                    delete[] charArray;
+                }
+                else if ( destination && destination->isOk() )
+                {
+                    LinkDestinationData ldd(destination, NULL, this);
+                    item.setAttribute( "Destination", 
LinkDestination(ldd).toString() );
+                }
+                if ( a->getKind() == actionGoToR )
+                {
+                    LinkGoToR * g2 = static_cast< LinkGoToR * >( a );
+                    item.setAttribute( "ExternalFileName", 
g2->getFileName()->getCString() );
+                }
+            }
+
+            item.setAttribute( "Open", QVariant( (bool)outlineItem->isOpen() 
).toString() );
+
+            // 3. recursively descend over children
+            outlineItem->open();
+            GooList * children = outlineItem->getKids();
+            if ( children )
+                addTocChildren( docSyn, &item, children );
+        }
+    }
+
 }
diff --git a/qt4/src/poppler-private.h b/qt4/src/poppler-private.h
index 4ac9094..941f3d6 100644
--- a/qt4/src/poppler-private.h
+++ b/qt4/src/poppler-private.h
@@ -26,14 +26,11 @@
 #define _POPPLER_PRIVATE_H_
 
 #include <QtCore/QPointer>
-#include <QtCore/QVariant>
 #include <QtCore/QVector>
 
 #include <config.h>
 #include <GfxState.h>
 #include <GlobalParams.h>
-#include <Link.h>
-#include <Outline.h>
 #include <PDFDoc.h>
 #include <FontInfo.h>
 #include <OutputDev.h>
@@ -44,6 +41,7 @@
 
 #include "poppler-qt4.h"
 
+class LinkDest;
 class FormWidget;
 
 namespace Poppler {
@@ -150,65 +148,7 @@ namespace Poppler {
                return m_outputDev;
        }
        
-       void addTocChildren( QDomDocument * docSyn, QDomNode * parent, GooList 
* items )
-       {
-               int numItems = items->getLength();
-               for ( int i = 0; i < numItems; ++i )
-               {
-                       // iterate over every object in 'items'
-                       OutlineItem * outlineItem = (OutlineItem *)items->get( 
i );
-                       
-                       // 1. create element using outlineItem's title as 
tagName
-                       QString name;
-                       Unicode * uniChar = outlineItem->getTitle();
-                       int titleLength = outlineItem->getTitleLength();
-                       name = unicodeToQString(uniChar, titleLength);
-                       if ( name.isEmpty() )
-                               continue;
-                       
-                       QDomElement item = docSyn->createElement( name );
-                       parent->appendChild( item );
-                       
-                       // 2. find the page the link refers to
-                       ::LinkAction * a = outlineItem->getAction();
-                       if ( a && ( a->getKind() == actionGoTo || a->getKind() 
== actionGoToR ) )
-                       {
-                               // page number is contained/referenced in a 
LinkGoTo
-                               LinkGoTo * g = static_cast< LinkGoTo * >( a );
-                               LinkDest * destination = g->getDest();
-                               if ( !destination && g->getNamedDest() )
-                               {
-                                       // no 'destination' but an internal 
'named reference'. we could
-                                       // get the destination for the page 
now, but it's VERY time consuming,
-                                       // so better storing the reference and 
provide the viewport on demand
-                                       GooString *s = g->getNamedDest();
-                                       QChar *charArray = new 
QChar[s->getLength()];
-                                       for (int i = 0; i < s->getLength(); 
++i) charArray[i] = QChar(s->getCString()[i]);
-                                       QString aux(charArray, s->getLength());
-                                       item.setAttribute( "DestinationName", 
aux );
-                                       delete[] charArray;
-                               }
-                               else if ( destination && destination->isOk() )
-                               {
-                                       LinkDestinationData ldd(destination, 
NULL, this);
-                                       item.setAttribute( "Destination", 
LinkDestination(ldd).toString() );
-                               }
-                               if ( a->getKind() == actionGoToR )
-                               {
-                                       LinkGoToR * g2 = static_cast< LinkGoToR 
* >( a );
-                                       item.setAttribute( "ExternalFileName", 
g2->getFileName()->getCString() );
-                               }
-                       }
-
-                       item.setAttribute( "Open", QVariant( 
(bool)outlineItem->isOpen() ).toString() );
-
-                       // 3. recursively descend over children
-                       outlineItem->open();
-                       GooList * children = outlineItem->getKids();
-                       if ( children )
-                               addTocChildren( docSyn, &item, children );
-               }
-       }
+       void addTocChildren( QDomDocument * docSyn, QDomNode * parent, GooList 
* items );
        
        void setPaperColor(const QColor &color)
        {
_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to