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 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <vector> 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_aaction.h" 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_formfield.h" 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_basic.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_string.h" 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_system.h" 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/stl_util.h" 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FIELDTYPE_UNKNOWN 0 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FIELDTYPE_PUSHBUTTON 1 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FIELDTYPE_CHECKBOX 2 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FIELDTYPE_RADIOBUTTON 3 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FIELDTYPE_COMBOBOX 4 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FIELDTYPE_LISTBOX 5 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FIELDTYPE_TEXTFIELD 6 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FIELDTYPE_SIGNATURE 7 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann#define FORMFLAG_READONLY 0x01 2933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann#define FORMFLAG_REQUIRED 0x02 3033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann#define FORMFLAG_NOEXPORT 0x04 3133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Dictionary; 334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Font; 344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_FormControl; 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_InterForm; 364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_String; 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_CHAR* name, 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int nLevel = 0); 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_WideString FPDF_GetFullName(CPDF_Dictionary* pFieldDict); 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_FormField { 444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public: 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann enum Type { 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann Unknown, 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PushButton, 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RadioButton, 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CheckBox, 504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann Text, 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RichText, 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann File, 534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ListBox, 544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ComboBox, 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann Sign 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann }; 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetFullName() const; 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann Type GetType() const { return m_Type; } 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t GetFlags() const { return m_Flags; } 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* GetFieldDict() const { return m_pDict; } 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void SetFieldDict(CPDF_Dictionary* pDict) { m_pDict = pDict; } 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool ResetField(bool bNotify = false); 674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int CountControls() const { 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pdfium::CollectionSize<int>(m_ControlList); 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormControl* GetControl(int index) const { return m_ControlList[index]; } 734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int GetControlIndex(const CPDF_FormControl* pControl) const; 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int GetFieldType() const; 764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_AAction GetAdditionalAction() const; 784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetAlternateName() const; 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetMappingName() const; 804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t GetFieldFlags() const; 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString GetDefaultStyle() const; 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetRichTextString() const; 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetValue() const; 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetDefaultValue() const; 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool SetValue(const CFX_WideString& value, bool bNotify = false); 884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int GetMaxLen() const; 904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int CountSelectedItems() const; 914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int GetSelectedIndex(int index) const; 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool ClearSelection(bool bNotify = false); 944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool IsItemSelected(int index) const; 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool SetItemSelection(int index, bool bSelected, bool bNotify = false); 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool IsItemDefaultSelected(int index) const; 984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int GetDefaultSelectedItem() const; 1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int CountOptions() const; 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetOptionLabel(int index) const; 1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetOptionValue(int index) const; 1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int FindOption(CFX_WideString csOptLabel) const; 1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int FindOptionValue(const CFX_WideString& csOptValue) const; 1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool CheckControl(int iControlIndex, bool bChecked, bool bNotify = false); 1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int GetTopVisibleIndex() const; 1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int CountSelectedOptions() const; 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int GetSelectedOptionIndex(int index) const; 1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool IsOptionSelected(int iOptIndex) const; 1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool SelectOption(int iOptIndex, bool bSelected, bool bNotify = false); 1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool ClearSelectedOptions(bool bNotify = false); 1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifdef PDF_ENABLE_XFA 1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool ClearOptions(bool bNotify = false); 1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int InsertOption(CFX_WideString csOptLabel, 1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int index = -1, 1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bNotify = false); 1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // PDF_ENABLE_XFA 1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT GetFontSize() const { return m_FontSize; } 1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Font* GetFont() const { return m_pFont; } 1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann private: 1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann friend class CPDF_InterForm; 1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann friend class CPDF_FormControl; 1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict); 1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ~CPDF_FormField(); 1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetValue(bool bDefault) const; 1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool SetValue(const CFX_WideString& value, bool bDefault, bool bNotify); 1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void SyncFieldFlags(); 1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int FindListSel(CPDF_String* str); 1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetOptionText(int index, int sub_index) const; 1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void LoadDA(); 1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString GetCheckValue(bool bDefault) const; 1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool SetCheckValue(const CFX_WideString& value, bool bDefault, bool bNotify); 1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool NotifyBeforeSelectionChange(const CFX_WideString& value); 1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void NotifyAfterSelectionChange(); 1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool NotifyBeforeValueChange(const CFX_WideString& value); 1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void NotifyAfterValueChange(); 1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool NotifyListOrComboBoxBeforeChange(const CFX_WideString& value); 1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void NotifyListOrComboBoxAfterChange(); 1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormField::Type m_Type; 1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t m_Flags; 1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_InterForm* const m_pForm; 1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* m_pDict; 1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<CPDF_FormControl*> m_ControlList; // Owned by InterForm parent. 1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT m_FontSize; 1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Font* m_pFont; 1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}; 1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // CORE_FPDFDOC_CPDF_FORMFIELD_H_ 168