[poppler] 2 commits - poppler/Form.cc poppler/Form.h
Carlos Garcia Campos
carlosgc at kemper.freedesktop.org
Wed Mar 9 01:26:25 PST 2011
poppler/Form.cc | 165 ++++++++++++++++++++++++++++++--------------------------
poppler/Form.h | 26 +++++---
2 files changed, 107 insertions(+), 84 deletions(-)
New commits:
commit 2dd7e1ba09d4501adf9d10ab4cb8ee003cace74a
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date: Wed Mar 9 10:25:00 2011 +0100
forms: Move modified flag from FormWidget to FormField
diff --git a/poppler/Form.cc b/poppler/Form.cc
index 4acf010..2af8d3d 100644
--- a/poppler/Form.cc
+++ b/poppler/Form.cc
@@ -68,7 +68,6 @@ FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormFi
double t;
ID = 0;
fontSize = 0.0;
- modified = gFalse;
childNum = num;
xref = xrefA;
aobj->copy(&obj);
@@ -133,6 +132,10 @@ bool FormWidget::isReadOnly() const
return field->isReadOnly();
}
+GBool FormWidget::isModified() const {
+ return field->isModified();
+}
+
int FormWidget::encodeID (unsigned pageNum, unsigned fieldNum)
{
return (pageNum << 4*sizeof(unsigned)) + fieldNum;
@@ -244,8 +247,6 @@ FormButtonType FormWidgetButton::getButtonType () const
}
void FormWidgetButton::setAppearanceState(char *state) {
- modified = gTrue;
-
Object obj1;
obj1.initName(state);
obj.getDict()->set("AS", &obj1);
@@ -342,7 +343,6 @@ void FormWidgetText::setContent(GooString* new_content)
return;
}
- modified = gTrue;
parent->setContentCopy(new_content);
}
@@ -373,7 +373,6 @@ void FormWidgetChoice::select (int i)
return;
}
if (!_checkRange(i)) return;
- modified = gTrue;
parent->select(i);
}
@@ -384,7 +383,6 @@ void FormWidgetChoice::toggle (int i)
return;
}
if (!_checkRange(i)) return;
- modified = gTrue;
parent->toggle(i);
}
@@ -394,7 +392,6 @@ void FormWidgetChoice::deselectAll ()
error(-1, "FormWidgetChoice::deselectAll called on a read only field\n");
return;
}
- modified = gTrue;
parent->deselectAll();
}
@@ -424,7 +421,6 @@ void FormWidgetChoice::setEditChoice (GooString* new_content)
return;
}
- modified = gTrue;
parent->setEditChoice(new_content);
}
@@ -496,6 +492,7 @@ FormField::FormField(XRef* xrefA, Object *aobj, const Ref& aref, std::set<int> *
fullyQualifiedName = NULL;
quadding = quaddingLeftJustified;
hasQuadding = gFalse;
+ modified = gFalse;
ref = aref;
@@ -837,6 +834,7 @@ GBool FormFieldButton::setState(char *state)
}
}
updateState(state);
+ modified = gTrue;
}
return gTrue;
@@ -933,6 +931,7 @@ void FormFieldText::setContentCopy (GooString* new_content)
obj1.initString(content ? content->copy() : new GooString(""));
obj.getDict()->set("V", &obj1);
xref->setModifiedObject(&obj, ref);
+ modified = gTrue;
}
FormFieldText::~FormFieldText()
@@ -1097,6 +1096,7 @@ void FormFieldChoice::updateSelection() {
obj.getDict()->set("V", &obj1);
xref->setModifiedObject(&obj, ref);
+ modified = gTrue;
}
void FormFieldChoice::unselectAll ()
diff --git a/poppler/Form.h b/poppler/Form.h
index 4913fa2..b5b4edd 100644
--- a/poppler/Form.h
+++ b/poppler/Form.h
@@ -97,7 +97,7 @@ public:
GooString *getMappingName() const;
GooString *getFullyQualifiedName();
- GBool isModified () { return modified; }
+ GBool isModified () const;
bool isReadOnly() const;
@@ -118,7 +118,6 @@ protected:
Object obj;
Ref ref;
XRef *xref;
- GBool modified;
//index of this field in the parent's child list
unsigned childNum;
@@ -270,6 +269,8 @@ public:
void setReadOnly (bool b) { readOnly = b; }
bool isReadOnly () const { return readOnly; }
+ GBool isModified () const { return modified; }
+
GooString* getDefaultAppearance() const { return defaultAppearance; }
GBool hasTextQuadding() const { return hasQuadding; }
VariableTextQuadding getTextQuadding() const { return quadding; }
@@ -298,6 +299,7 @@ public:
int numChildren;
FormWidget **widgets;
bool readOnly;
+ GBool modified;
GooString *partialName; // T field
GooString *alternateUiName; // TU field
commit b04f03be7e43e309af5f164ef71788e7b8915841
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date: Wed Mar 9 10:17:57 2011 +0100
forms: Move field names handling from FormWidget to FormField
diff --git a/poppler/Form.cc b/poppler/Form.cc
index 4698124..4acf010 100644
--- a/poppler/Form.cc
+++ b/poppler/Form.cc
@@ -75,28 +75,6 @@ FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormFi
type = formUndef;
field = fieldA;
Dict *dict = obj.getDict();
- fullyQualifiedName = NULL;
-
- if (dict->lookup("T", &obj1)->isString()) {
- partialName = obj1.getString()->copy();
- } else {
- partialName = NULL;
- }
- 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 {
- mappingName = NULL;
- }
- obj1.free();
if (!dict->lookup("Rect", &obj1)->isArray()) {
error(-1, "Annotation rectangle is wrong type");
@@ -147,10 +125,6 @@ FormWidget::FormWidget(XRef *xrefA, Object *aobj, unsigned num, Ref aref, FormFi
FormWidget::~FormWidget()
{
- delete partialName;
- delete alternateUiName;
- delete mappingName;
- delete fullyQualifiedName;
obj.free ();
}
@@ -192,50 +166,20 @@ void FormWidget::updateField (const char *key, Object *value)
xref->setModifiedObject(obj1, ref1);
}
-GooString* FormWidget::getFullyQualifiedName() {
- Object obj1, obj2;
- Object parent;
- GooString *parent_name;
- GooString *full_name;
-
- if (fullyQualifiedName)
- return fullyQualifiedName;
-
- full_name = new GooString();
-
- obj.copy(&obj1);
- while (obj1.dictLookup("Parent", &parent)->isDict()) {
- if (parent.dictLookup("T", &obj2)->isString()) {
- parent_name = obj2.getString();
-
- if (parent_name->hasUnicodeMarker()) {
- parent_name->del(0, 2); // Remove the unicode BOM
- full_name->insert(0, "\0.", 2); // 2-byte unicode period
- } else {
- full_name->insert(0, '.'); // 1-byte ascii period
- }
+GooString *FormWidget::getPartialName() const {
+ return field->getPartialName();
+}
- full_name->insert(0, parent_name);
- obj2.free();
- }
- obj1.free();
- parent.copy(&obj1);
- parent.free();
- }
- obj1.free();
- parent.free();
+GooString *FormWidget::getAlternateUiName() const {
+ return field->getAlternateUiName();
+}
- if (partialName) {
- full_name->append(partialName);
- } else {
- int len = full_name->getLength();
- // Remove the last period
- if (len > 0)
- full_name->del(len - 1, 1);
- }
+GooString *FormWidget::getMappingName() const {
+ return field->getMappingName();
+}
- fullyQualifiedName = full_name;
- return fullyQualifiedName;
+GooString *FormWidget::getFullyQualifiedName() {
+ return field->getFullyQualifiedName();
}
LinkAction *FormWidget::createActivationAction(Catalog *catalog)
@@ -549,6 +493,7 @@ FormField::FormField(XRef* xrefA, Object *aobj, const Ref& aref, std::set<int> *
widgets = NULL;
readOnly = false;
defaultAppearance = NULL;
+ fullyQualifiedName = NULL;
quadding = quaddingLeftJustified;
hasQuadding = gFalse;
@@ -642,6 +587,27 @@ FormField::FormField(XRef* xrefA, Object *aobj, const Ref& aref, std::set<int> *
hasQuadding = gTrue;
}
obj1.free();
+
+ if (dict->lookup("T", &obj1)->isString()) {
+ partialName = obj1.getString()->copy();
+ } else {
+ partialName = NULL;
+ }
+ 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 {
+ mappingName = NULL;
+ }
+ obj1.free();
}
FormField::~FormField()
@@ -660,6 +626,10 @@ FormField::~FormField()
obj.free();
delete defaultAppearance;
+ delete partialName;
+ delete alternateUiName;
+ delete mappingName;
+ delete fullyQualifiedName;
}
void FormField::fillChildrenSiblingsID()
@@ -714,6 +684,51 @@ FormWidget* FormField::findWidgetByRef (Ref aref)
return NULL;
}
+GooString* FormField::getFullyQualifiedName() {
+ Object obj1, obj2;
+ Object parent;
+ GooString *parent_name;
+ GooString *full_name;
+
+ if (fullyQualifiedName)
+ return fullyQualifiedName;
+
+ full_name = new GooString();
+
+ obj.copy(&obj1);
+ while (obj1.dictLookup("Parent", &parent)->isDict()) {
+ if (parent.dictLookup("T", &obj2)->isString()) {
+ parent_name = obj2.getString();
+
+ if (parent_name->hasUnicodeMarker()) {
+ parent_name->del(0, 2); // Remove the unicode BOM
+ full_name->insert(0, "\0.", 2); // 2-byte unicode period
+ } else {
+ full_name->insert(0, '.'); // 1-byte ascii period
+ }
+
+ full_name->insert(0, parent_name);
+ obj2.free();
+ }
+ obj1.free();
+ parent.copy(&obj1);
+ parent.free();
+ }
+ obj1.free();
+ parent.free();
+
+ if (partialName) {
+ full_name->append(partialName);
+ } else {
+ int len = full_name->getLength();
+ // Remove the last period
+ if (len > 0)
+ full_name->del(len - 1, 1);
+ }
+
+ fullyQualifiedName = full_name;
+ return fullyQualifiedName;
+}
//------------------------------------------------------------------------
// FormFieldButton
diff --git a/poppler/Form.h b/poppler/Form.h
index 74539ca..4913fa2 100644
--- a/poppler/Form.h
+++ b/poppler/Form.h
@@ -92,9 +92,9 @@ public:
void setFontSize(double f) { fontSize = f; }
double getFontSize () { return fontSize; }
- GooString *getPartialName() const { return partialName; }
- GooString *getAlternateUiName() const { return alternateUiName; }
- GooString *getMappingName() const { return mappingName; }
+ GooString *getPartialName() const;
+ GooString *getAlternateUiName() const;
+ GooString *getMappingName() const;
GooString *getFullyQualifiedName();
GBool isModified () { return modified; }
@@ -119,10 +119,6 @@ protected:
Ref ref;
XRef *xref;
GBool modified;
- GooString *partialName; // T field
- GooString *alternateUiName; // TU field
- GooString *mappingName; // TM field
- GooString *fullyQualifiedName;
//index of this field in the parent's child list
unsigned childNum;
@@ -278,6 +274,11 @@ public:
GBool hasTextQuadding() const { return hasQuadding; }
VariableTextQuadding getTextQuadding() const { return quadding; }
+ GooString *getPartialName() const { return partialName; }
+ GooString *getAlternateUiName() const { return alternateUiName; }
+ GooString *getMappingName() const { return mappingName; }
+ GooString *getFullyQualifiedName();
+
FormWidget* findWidgetByRef (Ref aref);
// only implemented in FormFieldButton
@@ -298,6 +299,11 @@ public:
FormWidget **widgets;
bool readOnly;
+ GooString *partialName; // T field
+ GooString *alternateUiName; // TU field
+ GooString *mappingName; // TM field
+ GooString *fullyQualifiedName;
+
// Variable Text
GooString *defaultAppearance;
GBool hasQuadding;
More information about the poppler
mailing list