14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifndef CORE_FPDFDOC_CPDF_FORMFIELD_H_
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define CORE_FPDFDOC_CPDF_FORMFIELD_H_
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <memory>
11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <utility>
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <vector>
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_aaction.h"
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_formfield.h"
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_string.h"
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_system.h"
18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/unowned_ptr.h"
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/stl_util.h"
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannenum class FormFieldType : uint8_t {
22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kUnknown = 0,
23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kPushButton = 1,
24d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kCheckBox = 2,
25d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kRadioButton = 3,
26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kComboBox = 4,
27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kListBox = 5,
28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kTextField = 6,
29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kSignature = 7,
30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#ifdef PDF_ENABLE_XFA
31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kXFA = 8,  // Generic XFA field, should use value below if possible.
32d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kXFA_CheckBox = 9,
33d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kXFA_ComboBox = 10,
34d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kXFA_ImageField = 11,
35d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kXFA_ListBox = 12,
36d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kXFA_PushButton = 13,
37d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kXFA_Signature = 14,
38d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  kXFA_TextField = 15
39d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#endif  // PDF_ENABLE_XFA
40d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann};
41d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
42d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOptional<FormFieldType> IntToFormFieldType(int value);
43d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
44d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// If values are added to FormFieldType, these will need to be updated.
45d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#ifdef PDF_ENABLE_XFA
46d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannconstexpr size_t kFormFieldTypeCount = 16;
47d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#else
48d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannconstexpr size_t kFormFieldTypeCount = 8;
49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#endif  // PDF_ENABLE_XFA
50d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
51d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannconstexpr FormFieldType kFormFieldTypes[kFormFieldTypeCount] = {
52d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kUnknown,
53d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kPushButton,
54d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kCheckBox,
55d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kRadioButton,
56d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kComboBox,
57d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kListBox,
58d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kTextField,
59d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kSignature,
60d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#ifdef PDF_ENABLE_XFA
61d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kXFA,
62d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kXFA_CheckBox,
63d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kXFA_ComboBox,
64d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kXFA_ImageField,
65d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kXFA_ListBox,
66d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kXFA_PushButton,
67d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kXFA_Signature,
68d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    FormFieldType::kXFA_TextField
69d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#endif  // PDF_ENABLE_XFA
70d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann};
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann#define FORMFLAG_READONLY 0x01
7333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann#define FORMFLAG_REQUIRED 0x02
7433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann#define FORMFLAG_NOEXPORT 0x04
7533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Dictionary;
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Font;
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_FormControl;
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_InterForm;
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_String;
814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
82d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPDF_Object* FPDF_GetFieldAttr(const CPDF_Dictionary* pFieldDict,
83d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                               const char* name,
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                               int nLevel = 0);
85d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannWideString FPDF_GetFullName(CPDF_Dictionary* pFieldDict);
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_FormField {
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public:
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  enum Type {
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Unknown,
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    PushButton,
924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    RadioButton,
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CheckBox,
944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Text,
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    RichText,
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    File,
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ListBox,
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ComboBox,
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    Sign
1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  };
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
102d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict);
103d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  ~CPDF_FormField();
104d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetFullName() const;
1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Type GetType() const { return m_Type; }
1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t GetFlags() const { return m_Flags; }
1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
110d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CPDF_Dictionary* GetFieldDict() const { return m_pDict.Get(); }
1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SetFieldDict(CPDF_Dictionary* pDict) { m_pDict = pDict; }
1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool ResetField(bool bNotify = false);
1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int CountControls() const {
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return pdfium::CollectionSize<int>(m_ControlList);
1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
119d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CPDF_FormControl* GetControl(int index) const {
120d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return m_ControlList[index].Get();
121d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  }
1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int GetControlIndex(const CPDF_FormControl* pControl) const;
124d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  FormFieldType GetFieldType() const;
1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_AAction GetAdditionalAction() const;
127d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetAlternateName() const;
128d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetMappingName() const;
1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t GetFieldFlags() const;
131d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  ByteString GetDefaultStyle() const;
132d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetRichTextString() const;
1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
134d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetValue() const;
135d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetDefaultValue() const;
136d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  bool SetValue(const WideString& value, bool bNotify = false);
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int GetMaxLen() const;
1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int CountSelectedItems() const;
1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int GetSelectedIndex(int index) const;
1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool ClearSelection(bool bNotify = false);
1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool IsItemSelected(int index) const;
1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool SetItemSelection(int index, bool bSelected, bool bNotify = false);
1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool IsItemDefaultSelected(int index) const;
1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int GetDefaultSelectedItem() const;
1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int CountOptions() const;
1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
151d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetOptionLabel(int index) const;
152d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetOptionValue(int index) const;
1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
154d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  int FindOption(WideString csOptLabel) const;
155d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  int FindOptionValue(const WideString& csOptValue) const;
1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool CheckControl(int iControlIndex, bool bChecked, bool bNotify = false);
1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int GetTopVisibleIndex() const;
1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int CountSelectedOptions() const;
1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int GetSelectedOptionIndex(int index) const;
1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool IsOptionSelected(int iOptIndex) const;
1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool SelectOption(int iOptIndex, bool bSelected, bool bNotify = false);
1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool ClearSelectedOptions(bool bNotify = false);
1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifdef PDF_ENABLE_XFA
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool ClearOptions(bool bNotify = false);
1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
172d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  int InsertOption(WideString csOptLabel, int index = -1, bool bNotify = false);
1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif  // PDF_ENABLE_XFA
1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
175d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  float GetFontSize() const { return m_FontSize; }
176d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CPDF_Font* GetFont() const { return m_pFont.Get(); }
1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
178d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  const CPDF_Dictionary* GetDict() const { return m_pDict.Get(); }
179d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  const CPDF_InterForm* GetForm() const { return m_pForm.Get(); }
1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
181d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetCheckValue(bool bDefault) const;
1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
183d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  void AddFormControl(CPDF_FormControl* pFormControl) {
184d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    m_ControlList.emplace_back(pFormControl);
185d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  }
186d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
187d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  void SetOpt(std::unique_ptr<CPDF_Object> pOpt) {
188d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    m_pDict->SetFor("Opt", std::move(pOpt));
189d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  }
190d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
191d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann private:
192d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetValue(bool bDefault) const;
193d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  bool SetValue(const WideString& value, bool bDefault, bool bNotify);
1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SyncFieldFlags();
1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int FindListSel(CPDF_String* str);
197d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetOptionText(int index, int sub_index) const;
1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void LoadDA();
200d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  bool SetCheckValue(const WideString& value, bool bDefault, bool bNotify);
2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
202d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  bool NotifyBeforeSelectionChange(const WideString& value);
2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void NotifyAfterSelectionChange();
2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
205d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  bool NotifyBeforeValueChange(const WideString& value);
2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void NotifyAfterValueChange();
2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
208d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  bool NotifyListOrComboBoxBeforeChange(const WideString& value);
2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void NotifyListOrComboBoxAfterChange();
2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_FormField::Type m_Type;
2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t m_Flags;
213d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  UnownedPtr<CPDF_InterForm> const m_pForm;
214d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  UnownedPtr<CPDF_Dictionary> m_pDict;
215d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  // Owned by InterForm parent.
216d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  std::vector<UnownedPtr<CPDF_FormControl>> m_ControlList;
217d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  float m_FontSize;
218d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  UnownedPtr<CPDF_Font> m_pFont;
2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif  // CORE_FPDFDOC_CPDF_FORMFIELD_H_
222