summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/fpdfdoc/cpdf_formfield.cpp27
-rw-r--r--core/fpdfdoc/cpdf_formfield.h42
-rw-r--r--core/fpdfdoc/cpdf_interform.cpp16
3 files changed, 60 insertions, 25 deletions
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index 2502fe6faa..df59369723 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -45,6 +45,14 @@ bool IsUnison(CPDF_FormField* pField) {
} // namespace
+Optional<FormFieldType> IntToFormFieldType(int value) {
+ if (value >= static_cast<int>(FormFieldType::kUnknown) &&
+ value < static_cast<int>(kFormFieldTypeCount)) {
+ return {static_cast<FormFieldType>(value)};
+ }
+ return {};
+}
+
CPDF_Object* FPDF_GetFieldAttr(const CPDF_Dictionary* pFieldDict,
const char* name,
int nLevel) {
@@ -238,28 +246,27 @@ int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) const {
return it != m_ControlList.end() ? it - m_ControlList.begin() : -1;
}
-int CPDF_FormField::GetFieldType() const {
+FormFieldType CPDF_FormField::GetFieldType() const {
switch (m_Type) {
case PushButton:
- return FIELDTYPE_PUSHBUTTON;
+ return FormFieldType::kPushButton;
case CheckBox:
- return FIELDTYPE_CHECKBOX;
+ return FormFieldType::kCheckBox;
case RadioButton:
- return FIELDTYPE_RADIOBUTTON;
+ return FormFieldType::kRadioButton;
case ComboBox:
- return FIELDTYPE_COMBOBOX;
+ return FormFieldType::kComboBox;
case ListBox:
- return FIELDTYPE_LISTBOX;
+ return FormFieldType::kListBox;
case Text:
case RichText:
case File:
- return FIELDTYPE_TEXTFIELD;
+ return FormFieldType::kTextField;
case Sign:
- return FIELDTYPE_SIGNATURE;
+ return FormFieldType::kSignature;
default:
- break;
+ return FormFieldType::kUnknown;
}
- return FIELDTYPE_UNKNOWN;
}
CPDF_AAction CPDF_FormField::GetAdditionalAction() const {
diff --git a/core/fpdfdoc/cpdf_formfield.h b/core/fpdfdoc/cpdf_formfield.h
index db1c514969..1f1205dabe 100644
--- a/core/fpdfdoc/cpdf_formfield.h
+++ b/core/fpdfdoc/cpdf_formfield.h
@@ -18,14 +18,38 @@
#include "core/fxcrt/unowned_ptr.h"
#include "third_party/base/stl_util.h"
-#define FIELDTYPE_UNKNOWN 0
-#define FIELDTYPE_PUSHBUTTON 1
-#define FIELDTYPE_CHECKBOX 2
-#define FIELDTYPE_RADIOBUTTON 3
-#define FIELDTYPE_COMBOBOX 4
-#define FIELDTYPE_LISTBOX 5
-#define FIELDTYPE_TEXTFIELD 6
-#define FIELDTYPE_SIGNATURE 7
+enum class FormFieldType : uint8_t {
+ kUnknown = 0,
+ kPushButton = 1,
+ kCheckBox = 2,
+ kRadioButton = 3,
+ kComboBox = 4,
+ kListBox = 5,
+ kTextField = 6,
+ kSignature = 7,
+#ifdef PDF_ENABLE_XFA
+ kXFA = 8, // Generic XFA field.
+#endif // PDF_ENABLE_XFA
+};
+
+Optional<FormFieldType> IntToFormFieldType(int value);
+
+// If values are added to FormFieldType, these will need to be updated.
+#ifdef PDF_ENABLE_XFA
+constexpr size_t kFormFieldTypeCount = 9;
+#else
+constexpr size_t kFormFieldTypeCount = 8;
+#endif // PDF_ENABLE_XFA
+
+constexpr FormFieldType kFormFieldTypes[kFormFieldTypeCount] = {
+ FormFieldType::kUnknown, FormFieldType::kPushButton,
+ FormFieldType::kCheckBox, FormFieldType::kRadioButton,
+ FormFieldType::kComboBox, FormFieldType::kListBox,
+ FormFieldType::kTextField, FormFieldType::kSignature,
+#ifdef PDF_ENABLE_XFA
+ FormFieldType::kXFA,
+#endif // PDF_ENABLE_XFA
+};
#define FORMFLAG_READONLY 0x01
#define FORMFLAG_REQUIRED 0x02
@@ -79,7 +103,7 @@ class CPDF_FormField {
}
int GetControlIndex(const CPDF_FormControl* pControl) const;
- int GetFieldType() const;
+ FormFieldType GetFieldType() const;
CPDF_AAction GetAdditionalAction() const;
WideString GetAlternateName() const;
diff --git a/core/fpdfdoc/cpdf_interform.cpp b/core/fpdfdoc/cpdf_interform.cpp
index 281d4d33fc..1596b17d82 100644
--- a/core/fpdfdoc/cpdf_interform.cpp
+++ b/core/fpdfdoc/cpdf_interform.cpp
@@ -1206,12 +1206,13 @@ void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict,
return;
WideString csWValue = GetFieldValue(*pFieldDict, m_bsEncoding);
- int iType = pField->GetFieldType();
+ FormFieldType fieldType = pField->GetFieldType();
if (bNotify && m_pFormNotify) {
- if (iType == FIELDTYPE_LISTBOX) {
+ if (fieldType == FormFieldType::kListBox) {
if (m_pFormNotify->BeforeSelectionChange(pField, csWValue) < 0)
return;
- } else if (iType == FIELDTYPE_COMBOBOX || iType == FIELDTYPE_TEXTFIELD) {
+ } else if (fieldType == FormFieldType::kComboBox ||
+ fieldType == FormFieldType::kTextField) {
if (m_pFormNotify->BeforeValueChange(pField, csWValue) < 0)
return;
}
@@ -1224,12 +1225,15 @@ void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict,
}
if (bNotify && m_pFormNotify) {
- if (iType == FIELDTYPE_CHECKBOX || iType == FIELDTYPE_RADIOBUTTON)
+ if (fieldType == FormFieldType::kCheckBox ||
+ fieldType == FormFieldType::kRadioButton) {
m_pFormNotify->AfterCheckedStatusChange(pField);
- else if (iType == FIELDTYPE_LISTBOX)
+ } else if (fieldType == FormFieldType::kListBox) {
m_pFormNotify->AfterSelectionChange(pField);
- else if (iType == FIELDTYPE_COMBOBOX || iType == FIELDTYPE_TEXTFIELD)
+ } else if (fieldType == FormFieldType::kComboBox ||
+ fieldType == FormFieldType::kTextField) {
m_pFormNotify->AfterValueChange(pField);
+ }
}
}