[poppler] 7 commits - poppler/Form.cc poppler/Form.h qt4/src

Pino Toscano pino at kemper.freedesktop.org
Sun Feb 27 05:43:39 PST 2011


 poppler/Form.cc           |   20 +++++++++++++
 poppler/Form.h            |    5 +++
 qt4/src/poppler-form.cc   |   70 ++++++++++++++++++++++++++--------------------
 qt4/src/poppler-private.h |   25 ----------------
 4 files changed, 66 insertions(+), 54 deletions(-)

New commits:
commit f9c978fc2ab8a1f901f2136ae95deb9d41076155
Author: Pino Toscano <pino at kde.org>
Date:   Sun Feb 27 14:39:52 2011 +0100

    [qt4] directly use the dict

diff --git a/qt4/src/poppler-form.cc b/qt4/src/poppler-form.cc
index b989883..815a8df 100644
--- a/qt4/src/poppler-form.cc
+++ b/qt4/src/poppler-form.cc
@@ -90,17 +90,17 @@ FormField::FormField(FormFieldData &dd)
   XPDFReader::transform( MTX, qMax( left, right ), qMin( top, bottom ), bottomRight );
   m_formData->box = QRectF(topLeft, QSizeF(bottomRight.x() - topLeft.x(), bottomRight.y() - topLeft.y()));
 
-  Object *obj = m_formData->fm->getObj();
+  Dict *dict = m_formData->fm->getObj()->getDict();
   Object tmp;
 
   // reading the flags
-  if (obj->isDict() && obj->dictLookup("Ff", &tmp)->isInt())
+  if (dict->lookup("Ff", &tmp)->isInt())
   {
     m_formData->flags = tmp.getInt();
   }
   tmp.free();
   // reading the widget annotation flags
-  if (obj->isDict() && obj->dictLookup("F", &tmp)->isInt())
+  if (dict->lookup("F", &tmp)->isInt())
   {
     m_formData->annoflags = tmp.getInt();
   }
commit 071966e48577c515b17a424baeae85ae4fc80a20
Author: Pino Toscano <pino at kde.org>
Date:   Sun Feb 27 14:21:11 2011 +0100

    [qt4] move textAlignment() as a private function

diff --git a/qt4/src/poppler-form.cc b/qt4/src/poppler-form.cc
index f3b97b5..b989883 100644
--- a/qt4/src/poppler-form.cc
+++ b/qt4/src/poppler-form.cc
@@ -32,6 +32,35 @@
 
 #include <math.h>
 
+namespace {
+
+Qt::Alignment formTextAlignment(Object *obj)
+{
+  Object tmp;
+  int align = 0;
+  if (obj->dictLookup("Q", &tmp)->isInt())
+  {
+    align = tmp.getInt();
+  }
+  tmp.free();
+  Qt::Alignment qtalign;
+  switch (align)
+  {
+    case 1:
+      qtalign = Qt::AlignHCenter;
+      break;
+    case 2:
+      qtalign = Qt::AlignRight;
+      break;
+    case 0:
+    default:
+      qtalign = Qt::AlignLeft;
+  }
+  return qtalign;
+}
+
+}
+
 namespace Poppler {
 
 FormField::FormField(FormFieldData &dd)
@@ -264,7 +293,7 @@ int FormFieldText::maximumLength() const
 
 Qt::Alignment FormFieldText::textAlignment() const
 {
-  return m_formData->textAlignment(m_formData->fm->getObj());
+  return formTextAlignment(m_formData->fm->getObj());
 }
 
 bool FormFieldText::canBeSpellChecked() const
@@ -342,7 +371,7 @@ void FormFieldChoice::setCurrentChoices( const QList<int> &choice )
 
 Qt::Alignment FormFieldChoice::textAlignment() const
 {
-  return m_formData->textAlignment(m_formData->fm->getObj());
+  return formTextAlignment(m_formData->fm->getObj());
 }
 
 bool FormFieldChoice::canBeSpellChecked() const
diff --git a/qt4/src/poppler-private.h b/qt4/src/poppler-private.h
index 6800a8b..105b9aa 100644
--- a/qt4/src/poppler-private.h
+++ b/qt4/src/poppler-private.h
@@ -260,31 +260,6 @@ namespace Poppler {
 		{
 		}
 
-		Qt::Alignment textAlignment(Object *obj) const
-		{
-			Object tmp;
-			int align = 0;
-			if (obj->dictLookup("Q", &tmp)->isInt())
-			{
-				align = tmp.getInt();
-			}
-			tmp.free();
-			Qt::Alignment qtalign;
-			switch ( align )
-			{
-				case 1:
-					qtalign = Qt::AlignHCenter;
-					break;
-				case 2:
-					qtalign = Qt::AlignRight;
-					break;
-				case 0:
-				default:
-					qtalign = Qt::AlignLeft;
-			}
-			return qtalign;
-		}
-
 		DocumentData *doc;
 		::Page *page;
 		::FormWidget *fm;
commit adc236771f11eeb4197064747836e8ed3fbfeba9
Author: Pino Toscano <pino at kde.org>
Date:   Sun Feb 27 14:13:50 2011 +0100

    [qt4] use FormWidget::getAlternateUiName()
    
    ... instead of read the value on our own

diff --git a/qt4/src/poppler-form.cc b/qt4/src/poppler-form.cc
index 5887300..f3b97b5 100644
--- a/qt4/src/poppler-form.cc
+++ b/qt4/src/poppler-form.cc
@@ -106,16 +106,11 @@ QString FormField::name() const
 
 QString FormField::uiName() const
 {
-  Object tmp;
-  Object *obj = m_formData->fm->getObj();
   QString name;
-  if (obj->dictLookup("TU", &tmp)->isString())
+  if (GooString *goo = m_formData->fm->getAlternateUiName())
   {
-    GooString *goo = tmp.getString();
-    if (goo)
-      name = goo->getCString();
+    name = QString::fromLatin1(goo->getCString());
   }
-  tmp.free();
   return name;
 }
 
commit 9f111483cf6196dedf3cee380c3e5224776203ea
Author: Pino Toscano <pino at kde.org>
Date:   Sun Feb 27 14:12:16 2011 +0100

    forms: read the TU field as alternateUiName

diff --git a/poppler/Form.cc b/poppler/Form.cc
index a433215..7ca27cb 100644
--- a/poppler/Form.cc
+++ b/poppler/Form.cc
@@ -84,6 +84,13 @@ FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormFi
   }
   obj1.free();
 
+  if (dict->lookup("TU", &obj1)->isString()) {
+    alternateUiName = obj1.getString()->copy();
+  } else {
+    alternateUiName = NULL;
+  }
+  obj1.free();
+
   if(dict->lookup("TM", &obj1)->isString()) {
     mappingName = obj1.getString()->copy();
   } else {
@@ -141,6 +148,7 @@ FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormFi
 FormWidget::~FormWidget()
 {
   delete partialName;
+  delete alternateUiName;
   delete mappingName;
   delete fullyQualifiedName;
   obj.free ();
diff --git a/poppler/Form.h b/poppler/Form.h
index 31505ad..5f40945 100644
--- a/poppler/Form.h
+++ b/poppler/Form.h
@@ -87,6 +87,7 @@ public:
   double getFontSize () { return fontSize; }
 
   GooString *getPartialName() const { return partialName; }
+  GooString *getAlternateUiName() const { return alternateUiName; }
   GooString *getMappingName() const { return mappingName; }
   GooString *getFullyQualifiedName();
 
@@ -114,6 +115,7 @@ protected:
   GBool defaultsLoaded;
   GBool modified;
   GooString *partialName; // T field
+  GooString *alternateUiName; // TU field
   GooString *mappingName; // TM field
   GooString *fullyQualifiedName;
 
commit cfaadaa9e4a857fcea3b5a2cadacd352de6c469d
Author: Pino Toscano <pino at kde.org>
Date:   Sun Feb 27 14:07:35 2011 +0100

    [qt4] use FormWidget::getPartialName()
    
    ... instead of read the value on our own

diff --git a/qt4/src/poppler-form.cc b/qt4/src/poppler-form.cc
index 0f9b484..5887300 100644
--- a/qt4/src/poppler-form.cc
+++ b/qt4/src/poppler-form.cc
@@ -96,16 +96,11 @@ int FormField::id() const
 
 QString FormField::name() const
 {
-  Object tmp;
-  Object *obj = m_formData->fm->getObj();
   QString name;
-  if (obj->dictLookup("T", &tmp)->isString())
+  if (GooString *goo = m_formData->fm->getPartialName())
   {
-    GooString *goo = tmp.getString();
-    if (goo)
-      name = goo->getCString();
+    name = QString::fromLatin1(goo->getCString());
   }
-  tmp.free();
   return name;
 }
 
commit 2478896a0c1f6e5842f3d8b172e4cc7e6bd58cd8
Author: Pino Toscano <pino at kde.org>
Date:   Sun Feb 27 13:24:09 2011 +0100

    [qt4] use the new FormWidget::createActivationAction()

diff --git a/qt4/src/poppler-form.cc b/qt4/src/poppler-form.cc
index 6224b68..0f9b484 100644
--- a/qt4/src/poppler-form.cc
+++ b/qt4/src/poppler-form.cc
@@ -136,19 +136,12 @@ bool FormField::isVisible() const
 
 Link* FormField::activationAction() const
 {
-  Object tmp;
-  Object *obj = m_formData->fm->getObj();
   Link* action = 0;
-  if (obj->dictLookup("A", &tmp)->isDict())
+  if (::LinkAction *act = m_formData->fm->createActivationAction(m_formData->doc->doc->getCatalog()))
   {
-    ::LinkAction *act = ::LinkAction::parseAction(&tmp, m_formData->doc->doc->getCatalog()->getBaseURI());
-    if (act)
-    {
-      action = PageData::convertLinkActionToLink(act, m_formData->doc, QRectF());
-      delete act;
-    }
+    action = PageData::convertLinkActionToLink(act, m_formData->doc, QRectF());
+    delete act;
   }
-  tmp.free();
   return action;
 }
 
commit 1dcb683a5c2dd6a1de654e90a4394f65d63dc296
Author: Pino Toscano <pino at kde.org>
Date:   Sun Feb 27 13:22:48 2011 +0100

    add FormWidget::createActivationAction()
    
    used to get and create a new activation action object of a form widget

diff --git a/poppler/Form.cc b/poppler/Form.cc
index 74e8d90..a433215 100644
--- a/poppler/Form.cc
+++ b/poppler/Form.cc
@@ -37,6 +37,7 @@
 #include "PDFDocEncoding.h"
 #include "Annot.h"
 #include "Catalog.h"
+#include "Link.h"
 
 //return a newly allocated char* containing an UTF16BE string of size length
 char* pdfDocEncodingToUTF16 (GooString* orig, int* length)
@@ -229,6 +230,17 @@ GooString* FormWidget::getFullyQualifiedName() {
   return fullyQualifiedName;
 }
 
+LinkAction *FormWidget::createActivationAction(Catalog *catalog)
+{
+  Object tmp;
+  LinkAction *act = NULL;
+  if (obj.dictLookup("A", &tmp)->isDict()) {
+    act = LinkAction::parseAction(&tmp, catalog ? catalog->getBaseURI() : NULL);
+  }
+  tmp.free();
+  return act;
+}
+
 FormWidgetButton::FormWidgetButton (XRef *xrefA, Object *aobj, unsigned num, Ref ref, FormField *p) :
 	FormWidget(xrefA, aobj, num, ref, p)
 {
diff --git a/poppler/Form.h b/poppler/Form.h
index 106c556..31505ad 100644
--- a/poppler/Form.h
+++ b/poppler/Form.h
@@ -27,6 +27,7 @@ class Array;
 class Dict;
 class Annot;
 class Catalog;
+class LinkAction;
 
 enum FormFieldType {
   formButton,
@@ -93,6 +94,8 @@ public:
 
   bool isReadOnly() const;
 
+  LinkAction *createActivationAction(Catalog *catalog);
+
   // return the unique ID corresponding to pageNum/fieldNum
   static int encodeID (unsigned pageNum, unsigned fieldNum);
   // decode id and retrieve pageNum and fieldNum


More information about the poppler mailing list