poppler/Form.cc         |   32 ++++++++++++++++++++++++++++++++
 poppler/Form.h          |    4 +++-
 qt5/src/poppler-form.cc |    6 ++++++
 qt5/src/poppler-form.h  |    7 +++++++
 4 files changed, 48 insertions(+), 1 deletion(-)

New commits:
commit 327c342a932d8df731ec02a6b22792004206c2db
Author: Andre Heinecke <[email protected]>
Date:   Tue Mar 20 23:07:15 2018 +0100

    Add read only setter for form fields
    
    Read only is modifiable from AcroForm scripts.

diff --git a/poppler/Form.cc b/poppler/Form.cc
index 11b16c91..76545d17 100644
--- a/poppler/Form.cc
+++ b/poppler/Form.cc
@@ -19,6 +19,7 @@
 // Copyright 2015 André Esser <[email protected]>
 // Copyright 2017 Hans-Ulrich Jüttner <[email protected]>
 // Copyright 2017 Bernd Kuhls <[email protected]>
+// Copyright 2018 Andre Heinecke <[email protected]>
 //
 //========================================================================
 
@@ -135,6 +136,11 @@ bool FormWidget::isReadOnly() const
   return field->isReadOnly();
 }
 
+void FormWidget::setReadOnly(bool value)
+{
+  return field->setReadOnly(value);
+}
+
 int FormWidget::encodeID (unsigned pageNum, unsigned fieldNum)
 {
   return (pageNum << 4*sizeof(unsigned)) + fieldNum;
@@ -939,6 +945,32 @@ void FormField::updateChildrenAppearance()
   }
 }
 
+void FormField::setReadOnly (bool value)
+{
+  if (value == readOnly) {
+    return;
+  }
+
+  readOnly = value;
+
+  Dict* dict = obj.getDict();
+
+  const Object obj1 = Form::fieldLookup(dict, "Ff");
+  int flags = 0;
+  if (obj1.isInt()) {
+    flags = obj1.getInt();
+  }
+  if (value) {
+    flags |= 1;
+  } else {
+    flags &= ~1;
+  }
+
+  dict->set("Ff", Object(flags));
+  xref->setModifiedObject(&obj, ref);
+  updateChildrenAppearance();
+}
+
 //------------------------------------------------------------------------
 // FormFieldButton
 //------------------------------------------------------------------------
diff --git a/poppler/Form.h b/poppler/Form.h
index 8f7cb377..a4c59fb1 100644
--- a/poppler/Form.h
+++ b/poppler/Form.h
@@ -15,6 +15,7 @@
 // Copyright 2015 André Esser <[email protected]>
 // Copyright 2017 Roland Hieber <[email protected]>
 // Copyright 2017 Hans-Ulrich Jüttner <[email protected]>
+// Copyright 2018 Andre Heinecke <[email protected]>
 //
 //========================================================================
 
@@ -118,6 +119,7 @@ public:
   GBool isModified () const;
 
   bool isReadOnly() const;
+  void setReadOnly(bool value);
 
   LinkAction *getActivationAction(); // The caller should not delete the result
   LinkAction *getAdditionalAction(Annot::FormAdditionalActionsType type); // 
The caller should delete the result
@@ -300,7 +302,7 @@ public:
   Object* getObj() { return &obj; }
   Ref getRef() { return ref; }
 
-  void setReadOnly (bool b) { readOnly = b; }
+  void setReadOnly (bool b);
   bool isReadOnly () const { return readOnly; }
 
   GooString* getDefaultAppearance() const { return defaultAppearance; }
diff --git a/qt5/src/poppler-form.cc b/qt5/src/poppler-form.cc
index eed3dd9d..eee504b3 100644
--- a/qt5/src/poppler-form.cc
+++ b/qt5/src/poppler-form.cc
@@ -5,6 +5,7 @@
  * Copyright (C) 2012, Adam Reichold <[email protected]>
  * Copyright (C) 2016, Hanno Meyer-Thurow <[email protected]>
  * Copyright (C) 2017, Hans-Ulrich Jüttner <[email protected]>
+ * Copyright (C) 2018, Andre Heinecke <[email protected]>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -151,6 +152,11 @@ bool FormField::isReadOnly() const
   return m_formData->fm->isReadOnly();
 }
 
+void FormField::setReadOnly(bool value)
+{
+  m_formData->fm->setReadOnly(value);
+}
+
 bool FormField::isVisible() const
 {
   return !(m_formData->fm->getWidgetAnnotation()->getFlags() & 
Annot::flagHidden);
diff --git a/qt5/src/poppler-form.h b/qt5/src/poppler-form.h
index a5cc0377..d52f7e4b 100644
--- a/qt5/src/poppler-form.h
+++ b/qt5/src/poppler-form.h
@@ -5,6 +5,7 @@
  * Copyright (C) 2016, Hanno Meyer-Thurow <[email protected]>
  * Copyright (C) 2017, Hans-Ulrich Jüttner <[email protected]>
  * Copyright (C) 2017, Tobias C. Berner <[email protected]>
+ * Copyright (C) 2018, Andre Heinecke <[email protected]>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -110,6 +111,12 @@ namespace Poppler {
        bool isReadOnly() const;
 
        /**
+         Set whether this form field is read-only.
+         \since 0.64
+        */
+       void setReadOnly(bool value);
+
+       /**
          Whether this form field is visible.
         */
        bool isVisible() const;
_______________________________________________
poppler mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to