diff options
Diffstat (limited to 'Build/source/libs/poppler/poppler-src/poppler/Form.h')
-rw-r--r-- | Build/source/libs/poppler/poppler-src/poppler/Form.h | 634 |
1 files changed, 0 insertions, 634 deletions
diff --git a/Build/source/libs/poppler/poppler-src/poppler/Form.h b/Build/source/libs/poppler/poppler-src/poppler/Form.h deleted file mode 100644 index 02fc52fb192..00000000000 --- a/Build/source/libs/poppler/poppler-src/poppler/Form.h +++ /dev/null @@ -1,634 +0,0 @@ -//======================================================================== -// -// Form.h -// -// This file is licensed under the GPLv2 or later -// -// Copyright 2006 Julien Rebetez <julienr@svn.gnome.org> -// Copyright 2007, 2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright 2007-2010, 2012, 2015-2018 Albert Astals Cid <aacid@kde.org> -// Copyright 2010 Mark Riedesel <mark@klowner.com> -// Copyright 2011 Pino Toscano <pino@kde.org> -// Copyright 2012 Fabio D'Urso <fabiodurso@hotmail.it> -// Copyright 2013 Adrian Johnson <ajohnson@redneon.com> -// Copyright 2015 André Guerreiro <aguerreiro1985@gmail.com> -// Copyright 2015 André Esser <bepandre@hotmail.com> -// Copyright 2017 Roland Hieber <r.hieber@pengutronix.de> -// Copyright 2017 Hans-Ulrich Jüttner <huj@froreich-bioscientia.de> -// Copyright 2018 Andre Heinecke <aheinecke@intevation.de> -// Copyright 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by the LiMux project of the city of Munich -// Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@protonmail.com> -// -//======================================================================== - -#ifndef FORM_H -#define FORM_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "goo/GooList.h" -#include "Object.h" -#include "Annot.h" - -#include <time.h> - -#include <set> -#include <vector> -#include <ctime> - -class GooString; -class Array; -class Dict; -class Annot; -class AnnotWidget; -class Annots; -class LinkAction; -class GfxResources; -class PDFDoc; -class SignatureInfo; -class SignatureHandler; - -enum FormFieldType { - formButton, - formText, - formChoice, - formSignature, - formUndef -}; - -enum FormButtonType { - formButtonCheck, - formButtonPush, - formButtonRadio -}; - -enum VariableTextQuadding { - quaddingLeftJustified, - quaddingCentered, - quaddingRightJustified -}; - -enum FormSignatureType { - adbe_pkcs7_sha1, - adbe_pkcs7_detached, - ETSI_CAdES_detached -}; - -class Form; -class FormField; -class FormFieldButton; -class FormFieldText; -class FormFieldSignature; -class FormFieldChoice; - -//------------------------------------------------------------------------ -// FormWidget -// A FormWidget represents the graphical part of a field and is "attached" -// to a page. -//------------------------------------------------------------------------ - -class FormWidget { -public: - virtual ~FormWidget(); - - // Check if point is inside the field bounding rect - GBool inRect(double x, double y) const; - - // Get the field bounding rect - void getRect(double *x1, double *y1, double *x2, double *y2) const; - - unsigned getID () { return ID; } - void setID (unsigned int i) { ID=i; } - - FormField *getField () { return field; } - FormFieldType getType() { return type; } - - Object* getObj() { return &obj; } - Ref getRef() { return ref; } - - void setChildNum (unsigned i) { childNum = i; } - unsigned getChildNum () { return childNum; } - - const GooString *getPartialName() const; - void setPartialName(const GooString &name); - const GooString *getAlternateUiName() const; - const GooString *getMappingName() const; - GooString *getFullyQualifiedName(); - - 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 - - // return the unique ID corresponding to pageNum/fieldNum - static int encodeID (unsigned pageNum, unsigned fieldNum); - // decode id and retrieve pageNum and fieldNum - static void decodeID (unsigned id, unsigned* pageNum, unsigned* fieldNum); - - void createWidgetAnnotation(); - AnnotWidget *getWidgetAnnotation() const { return widget; } - - virtual void updateWidgetAppearance() = 0; - -#ifdef DEBUG_FORMS - void print(int indent = 0); -#endif - -protected: - FormWidget(PDFDoc *docA, Object *aobj, unsigned num, Ref aref, FormField *fieldA); - - AnnotWidget *widget; - FormField* field; - FormFieldType type; - Object obj; - Ref ref; - PDFDoc *doc; - XRef *xref; - - //index of this field in the parent's child list - unsigned childNum; - - /* - Field ID is an (unsigned) integer, calculated as follow : - the first sizeof/2 bits are the field number, relative to the page - the last sizeof/2 bits are the page number - [page number | field number] - (encoding) id = (pageNum << 4*sizeof(unsigned)) + fieldNum; - (decoding) pageNum = id >> 4*sizeof(unsigned); fieldNum = (id << 4*sizeof(unsigned)) >> 4*sizeof(unsigned); - */ - unsigned ID; -}; - -//------------------------------------------------------------------------ -// FormWidgetButton -//------------------------------------------------------------------------ - -class FormWidgetButton: public FormWidget { -public: - FormWidgetButton(PDFDoc *docA, Object *dict, unsigned num, Ref ref, FormField *p); - ~FormWidgetButton (); - - FormButtonType getButtonType() const; - - void setState (GBool state); - GBool getState (); - - char* getOnStr(); - void setAppearanceState(const char *state); - void updateWidgetAppearance() override; - -protected: - FormFieldButton *parent() const; - GooString *onStr; -}; - -//------------------------------------------------------------------------ -// FormWidgetText -//------------------------------------------------------------------------ - -class FormWidgetText: public FormWidget { -public: - FormWidgetText(PDFDoc *docA, Object *dict, unsigned num, Ref ref, FormField *p); - //return the field's content (UTF16BE) - const GooString* getContent() const; - - //expects a UTF16BE string - void setContent(const GooString* new_content); - - void updateWidgetAppearance() override; - - bool isMultiline () const; - bool isPassword () const; - bool isFileSelect () const; - bool noSpellCheck () const; - bool noScroll () const; - bool isComb () const; - bool isRichText () const; - int getMaxLen () const; - //return the font size of the field's text - double getTextFontSize(); - //set the font size of the field's text (currently only integer values) - void setTextFontSize(int fontSize); - -protected: - FormFieldText *parent() const; -}; - -//------------------------------------------------------------------------ -// FormWidgetChoice -//------------------------------------------------------------------------ - -class FormWidgetChoice: public FormWidget { -public: - FormWidgetChoice(PDFDoc *docA, Object *dict, unsigned num, Ref ref, FormField *p); - ~FormWidgetChoice(); - - int getNumChoices() const; - //return the display name of the i-th choice (UTF16BE) - const GooString* getChoice(int i) const; - //select the i-th choice - void select (int i); - - //toggle selection of the i-th choice - void toggle (int i); - - //deselect everything - void deselectAll (); - - //except a UTF16BE string - //only work for editable combo box, set the user-entered text as the current choice - void setEditChoice(const GooString* new_content); - - const GooString* getEditChoice () const; - - void updateWidgetAppearance() override; - bool isSelected (int i) const; - - bool isCombo () const; - bool hasEdit () const; - bool isMultiSelect () const; - bool noSpellCheck () const; - bool commitOnSelChange () const; - bool isListBox () const; -protected: - bool _checkRange (int i) const; - FormFieldChoice *parent() const; -}; - -//------------------------------------------------------------------------ -// FormWidgetSignature -//------------------------------------------------------------------------ - -class FormWidgetSignature: public FormWidget { -public: - FormWidgetSignature(PDFDoc *docA, Object *dict, unsigned num, Ref ref, FormField *p); - void updateWidgetAppearance() override; - - FormSignatureType signatureType(); - // Use -1 for now as validationTime - SignatureInfo *validateSignature(bool doVerifyCert, bool forceRevalidation, time_t validationTime); - - // returns a list with the boundaries of the signed ranges - // the elements of the list are of type Goffset - std::vector<Goffset> getSignedRangeBounds(); - - // checks the length encoding of the signature and returns the hex encoded signature - // if the check passed (and the checked file size as output parameter in checkedFileSize) - // otherwise a nullptr is returned - GooString* getCheckedSignature(Goffset *checkedFileSize); - - const GooString *getSignature() const; -}; - -//------------------------------------------------------------------------ -// FormField -// A FormField implements the logical side of a field and is "attached" to -// the Catalog. This is an internal class and client applications should -// only interact with FormWidgets. -//------------------------------------------------------------------------ - -class FormField { -public: - FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parent, std::set<int> *usedParents, FormFieldType t=formUndef); - - virtual ~FormField(); - - // Accessors. - FormFieldType getType() const { return type; } - Object* getObj() { return &obj; } - Ref getRef() { return ref; } - - void setReadOnly (bool b); - bool isReadOnly () const { return readOnly; } - - GooString* getDefaultAppearance() const { return defaultAppearance; } - GBool hasTextQuadding() const { return hasQuadding; } - VariableTextQuadding getTextQuadding() const { return quadding; } - - const GooString *getPartialName() const { return partialName; } - void setPartialName(const GooString &name); - const GooString *getAlternateUiName() const { return alternateUiName; } - const GooString *getMappingName() const { return mappingName; } - GooString *getFullyQualifiedName(); - - FormWidget* findWidgetByRef (Ref aref); - int getNumWidgets() { return terminal ? numChildren : 0; } - FormWidget *getWidget(int i) { return terminal ? widgets[i] : NULL; } - - // only implemented in FormFieldButton - virtual void fillChildrenSiblingsID (); - - void createWidgetAnnotations(); - -#ifdef DEBUG_FORMS - void printTree(int indent = 0); - virtual void print(int indent = 0); -#endif - - - protected: - void _createWidget (Object *obj, Ref aref); - void createChildren(std::set<int> *usedParents); - void updateChildrenAppearance(); - - FormFieldType type; // field type - Ref ref; - bool terminal; - Object obj; - PDFDoc *doc; - XRef *xref; - FormField **children; - FormField *parent; - int numChildren; - FormWidget **widgets; - bool readOnly; - - GooString *partialName; // T field - GooString *alternateUiName; // TU field - GooString *mappingName; // TM field - GooString *fullyQualifiedName; - - // Variable Text - GooString *defaultAppearance; - GBool hasQuadding; - VariableTextQuadding quadding; - -private: - FormField() {} -}; - - -//------------------------------------------------------------------------ -// FormFieldButton -//------------------------------------------------------------------------ - -class FormFieldButton: public FormField { -public: - FormFieldButton(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents); - - FormButtonType getButtonType () const { return btype; } - - bool noToggleToOff () const { return noAllOff; } - - // returns gTrue if the state modification is accepted - GBool setState (char *state); - GBool getState(const char *state) const; - - const char *getAppearanceState() const { return appearanceState.isName() ? appearanceState.getName() : nullptr; } - - void fillChildrenSiblingsID () override; - - void setNumSiblings (int num); - void setSibling (int i, FormFieldButton *id) { siblings[i] = id; } - - //For radio buttons, return the fields of the other radio buttons in the same group - FormFieldButton* getSibling (int i) const { return siblings[i]; } - int getNumSiblings () const { return numSiblings; } - -#ifdef DEBUG_FORMS - void print(int indent = 0); -#endif - - ~FormFieldButton(); -protected: - void updateState(char *state); - - FormFieldButton** siblings; // IDs of dependent buttons (each button of a radio field has all the others buttons - // of the same field in this array) - int numSiblings; - - FormButtonType btype; - int size; - int active_child; //only used for combo box - bool noAllOff; - Object appearanceState; // V -}; - -//------------------------------------------------------------------------ -// FormFieldText -//------------------------------------------------------------------------ - -class FormFieldText: public FormField { -public: - FormFieldText(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents); - - const GooString* getContent () const { return content; } - void setContentCopy (const GooString* new_content); - ~FormFieldText(); - - bool isMultiline () const { return multiline; } - bool isPassword () const { return password; } - bool isFileSelect () const { return fileSelect; } - bool noSpellCheck () const { return doNotSpellCheck; } - bool noScroll () const { return doNotScroll; } - bool isComb () const { return comb; } - bool isRichText () const { return richText; } - - int getMaxLen () const { return maxLen; } - - //return the font size of the field's text - double getTextFontSize(); - //set the font size of the field's text (currently only integer values) - void setTextFontSize(int fontSize); - -#ifdef DEBUG_FORMS - void print(int indent = 0); -#endif - - static int tokenizeDA(const GooString* daString, GooList* daToks, const char* searchTok); - -protected: - int parseDA(GooList* daToks); - - GooString* content; - bool multiline; - bool password; - bool fileSelect; - bool doNotSpellCheck; - bool doNotScroll; - bool comb; - bool richText; - int maxLen; -}; - -//------------------------------------------------------------------------ -// FormFieldChoice -//------------------------------------------------------------------------ - -class FormFieldChoice: public FormField { -public: - FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents); - - ~FormFieldChoice(); - - int getNumChoices() const { return numChoices; } - const GooString* getChoice(int i) const { return choices ? choices[i].optionName : NULL; } - const GooString* getExportVal (int i) const { return choices ? choices[i].exportVal : NULL; } - // For multi-select choices it returns the first one - const GooString* getSelectedChoice() const; - - //select the i-th choice - void select (int i); - - //toggle selection of the i-th choice - void toggle (int i); - - //deselect everything - void deselectAll (); - - //only work for editable combo box, set the user-entered text as the current choice - void setEditChoice(const GooString* new_content); - - const GooString* getEditChoice () const; - - bool isSelected (int i) const { return choices[i].selected; } - - int getNumSelected (); - - bool isCombo () const { return combo; } - bool hasEdit () const { return edit; } - bool isMultiSelect () const { return multiselect; } - bool noSpellCheck () const { return doNotSpellCheck; } - bool commitOnSelChange () const { return doCommitOnSelChange; } - bool isListBox () const { return !combo; } - - int getTopIndex() const { return topIdx; } - -#ifdef DEBUG_FORMS - void print(int indent = 0); -#endif - -protected: - void unselectAll(); - void updateSelection(); - - bool combo; - bool edit; - bool multiselect; - bool doNotSpellCheck; - bool doCommitOnSelChange; - - struct ChoiceOpt { - GooString* exportVal; //the export value ("internal" name) - GooString* optionName; //displayed name - bool selected; //if this choice is selected - }; - - int numChoices; - ChoiceOpt* choices; - GooString* editedChoice; - int topIdx; // TI -}; - -//------------------------------------------------------------------------ -// FormFieldSignature -//------------------------------------------------------------------------ - -class FormFieldSignature: public FormField { - friend class FormWidgetSignature; -public: - FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents); - - // Use -1 for now as validationTime - SignatureInfo *validateSignature(bool doVerifyCert, bool forceRevalidation, time_t validationTime); - - ~FormFieldSignature(); - Object* getByteRange() { return &byte_range; } - const GooString* getSignature() const { return signature; } - -private: - void parseInfo(); - void hashSignedDataBlock(SignatureHandler *handler, Goffset block_len); - - FormSignatureType signature_type; - Object byte_range; - GooString *signature; - SignatureInfo *signature_info; - -#ifdef DEBUG_FORMS - void print(int indent = 0); -#endif -}; - -//------------------------------------------------------------------------ -// Form -// This class handle the document-wide part of Form (things in the acroForm -// Catalog entry). -//------------------------------------------------------------------------ - -class Form { -public: - Form(PDFDoc *docA, Object* acroForm); - - ~Form(); - - Form(const Form &) = delete; - Form& operator=(const Form &) = delete; - - // Look up an inheritable field dictionary entry. - static Object fieldLookup(Dict *field, const char *key); - - /* Creates a new Field of the type specified in obj's dict. - used in Form::Form and FormField::FormField */ - static FormField *createFieldFromDict (Object* obj, PDFDoc *docA, const Ref& aref, FormField *parent, std::set<int> *usedParents); - - Object *getObj () const { return acroForm; } - GBool getNeedAppearances () const { return needAppearances; } - int getNumFields() const { return numFields; } - FormField* getRootField(int i) const { return rootFields[i]; } - const GooString* getDefaultAppearance() const { return defaultAppearance; } - VariableTextQuadding getTextQuadding() const { return quadding; } - GfxResources* getDefaultResources() const { return defaultResources; } - Object* getDefaultResourcesObj() { return &resDict; } - - FormWidget* findWidgetByRef (Ref aref); - - void postWidgetsLoad(); - - const std::vector<Ref> &getCalculateOrder() const { return calculateOrder; } - -private: - FormField** rootFields; - int numFields; - int size; - PDFDoc *doc; - XRef* xref; - Object *acroForm; - GBool needAppearances; - GfxResources *defaultResources; - Object resDict; - std::vector<Ref> calculateOrder; - - // Variable Text - GooString *defaultAppearance; - VariableTextQuadding quadding; -}; - -//------------------------------------------------------------------------ -// FormPageWidgets -//------------------------------------------------------------------------ - -class FormPageWidgets { -public: - FormPageWidgets (Annots* annots, unsigned int page, Form *form); - ~FormPageWidgets(); - - FormPageWidgets(const FormPageWidgets &) = delete; - FormPageWidgets& operator=(const FormPageWidgets &) = delete; - - int getNumWidgets() const { return numWidgets; } - FormWidget* getWidget(int i) const { return widgets[i]; } - -private: - FormWidget** widgets; - int numWidgets; - int size; -}; - -#endif - |