// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#ifndef _FSDK_BASEFORM_H_ | |
#define _FSDK_BASEFORM_H_ | |
#if _FX_OS_ == _FX_ANDROID_ | |
#include "time.h" | |
#else | |
#include <ctime> | |
#endif | |
class CPDFSDK_Document; | |
class CPDFSDK_DateTime; | |
struct CPWL_Color; | |
class CFFL_FormFiller; | |
class CPDFSDK_PageView; | |
class CPDFSDK_InterForm; | |
typedef struct _PDFSDK_FieldAction | |
{ | |
_PDFSDK_FieldAction() | |
{ | |
bModifier = FALSE; | |
bShift = FALSE; | |
nCommitKey = 0; | |
bKeyDown = FALSE; | |
nSelEnd = nSelStart = 0; | |
bWillCommit = FALSE; | |
bFieldFull = FALSE; | |
bRC = TRUE; | |
} | |
FX_BOOL bModifier; //in | |
FX_BOOL bShift; //in | |
int nCommitKey; //in | |
CFX_WideString sChange; //in[out] | |
CFX_WideString sChangeEx; //in | |
FX_BOOL bKeyDown; //in | |
int nSelEnd; //in[out] | |
int nSelStart; //in[out] | |
CFX_WideString sValue; //in[out] | |
FX_BOOL bWillCommit; //in | |
FX_BOOL bFieldFull; //in | |
FX_BOOL bRC; //in[out] | |
}PDFSDK_FieldAction; | |
class CPDFSDK_Widget:public CPDFSDK_Annot | |
{ | |
public: | |
CPDFSDK_Widget(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView, CPDFSDK_InterForm* pInterForm); | |
virtual ~CPDFSDK_Widget(); | |
virtual CFX_ByteString GetSubType() const; | |
virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT); | |
int GetFieldType() const; | |
//define layout order to 2. | |
virtual int GetLayoutOrder() {return 2;} | |
/* | |
FIELDFLAG_READONLY | |
FIELDFLAG_REQUIRED | |
FIELDFLAG_NOEXPORT | |
*/ | |
int GetFieldFlags() const; | |
int GetRotate() const; | |
FX_BOOL GetFillColor(FX_COLORREF& color) const; | |
FX_BOOL GetBorderColor(FX_COLORREF& color) const; | |
FX_BOOL GetTextColor(FX_COLORREF& color) const; | |
FX_FLOAT GetFontSize() const; | |
int GetSelectedIndex(int nIndex) const; | |
CFX_WideString GetValue() const; | |
CFX_WideString GetDefaultValue() const; | |
CFX_WideString GetOptionLabel(int nIndex) const; | |
int CountOptions() const; | |
FX_BOOL IsOptionSelected(int nIndex) const; | |
int GetTopVisibleIndex() const; | |
FX_BOOL IsChecked() const; | |
/* | |
BF_ALIGN_LEFT | |
BF_ALIGN_MIDDL | |
BF_ALIGN_RIGHT | |
*/ | |
int GetAlignment() const; | |
int GetMaxLen() const; | |
CFX_WideString GetAlternateName() const; | |
//Set Properties. | |
void SetCheck(FX_BOOL bChecked, FX_BOOL bNotify); | |
void SetValue(const CFX_WideString& sValue, FX_BOOL bNotify); | |
void SetDefaultValue(const CFX_WideString& sValue); | |
void SetOptionSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify); | |
void ClearSelection(FX_BOOL bNotify); | |
void SetTopVisibleIndex(int index); | |
void ResetAppearance(FX_LPCWSTR sValue, FX_BOOL bValueChanged); | |
void ResetFieldAppearance(FX_BOOL bValueChanged); | |
void UpdateField(); | |
CFX_WideString OnFormat(int nCommitKey, FX_BOOL& bFormated); | |
//Message. | |
FX_BOOL OnAAction(CPDF_AAction::AActionType type, PDFSDK_FieldAction& data, | |
CPDFSDK_PageView* pPageView); | |
CPDFSDK_InterForm* GetInterForm() const {return m_pInterForm;} | |
CPDF_FormField* GetFormField() const; | |
CPDF_FormControl* GetFormControl() const; | |
static CPDF_FormControl* GetFormControl(CPDF_InterForm* pInterForm, CPDF_Dictionary* pAnnotDict); | |
void DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView); | |
void SetAppModified(); | |
void ClearAppModified(); | |
FX_BOOL IsAppModified() const; | |
FX_INT32 GetAppearanceAge() const; | |
FX_INT32 GetValueAge() const; | |
private: | |
void ResetAppearance_PushButton(); | |
void ResetAppearance_CheckBox(); | |
void ResetAppearance_RadioButton(); | |
void ResetAppearance_ComboBox(FX_LPCWSTR sValue); | |
void ResetAppearance_ListBox(); | |
void ResetAppearance_TextField(FX_LPCWSTR sValue); | |
CPDF_Rect GetClientRect() const; | |
CPDF_Rect GetRotatedRect() const; | |
CFX_ByteString GetBackgroundAppStream() const; | |
CFX_ByteString GetBorderAppStream() const; | |
CPDF_Matrix GetMatrix() const; | |
CPWL_Color GetTextPWLColor() const; | |
CPWL_Color GetBorderPWLColor() const; | |
CPWL_Color GetFillPWLColor() const; | |
void AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage); | |
void RemoveAppearance(const CFX_ByteString& sAPType); | |
public: | |
FX_BOOL IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode); | |
void DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device, | |
CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions); | |
public: | |
FX_BOOL HitTest(FX_FLOAT pageX, FX_FLOAT pageY); | |
private: | |
CPDFSDK_InterForm* m_pInterForm; | |
FX_BOOL m_bAppModified; | |
FX_INT32 m_nAppAge; | |
FX_INT32 m_nValueAge; | |
}; | |
#define CPDFSDK_WidgetMap CFX_MapPtrTemplate<CPDF_FormControl*, CPDFSDK_Widget*> | |
class CPDFSDK_InterForm : public CPDF_FormNotify | |
{ | |
public: | |
CPDFSDK_InterForm(CPDFSDK_Document* pDocument); | |
virtual ~CPDFSDK_InterForm(); | |
public: | |
virtual void Destroy(); | |
virtual CPDF_InterForm* GetInterForm(); | |
CPDFSDK_Document* GetDocument(); | |
FX_BOOL HighlightWidgets(); | |
CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const; | |
CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl) const; | |
void GetWidgets(const CFX_WideString& sFieldName, CFX_PtrArray& widgets); | |
void GetWidgets(CPDF_FormField* pField, CFX_PtrArray& widgets); | |
void AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget); | |
void RemoveMap(CPDF_FormControl* pControl); | |
void EnableCalculate(FX_BOOL bEnabled); | |
FX_BOOL IsCalculateEnabled() const; | |
#ifdef _WIN32 | |
CPDF_Stream* LoadImageFromFile(const CFX_WideString& sFile); | |
#endif | |
void OnKeyStrokeCommit(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC); | |
void OnValidate(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC); | |
void OnCalculate(CPDF_FormField* pFormField = NULL); | |
CFX_WideString OnFormat(CPDF_FormField* pFormField, int nCommitKey, FX_BOOL& bFormated); | |
void ResetFieldAppearance(CPDF_FormField* pFormField, FX_LPCWSTR sValue, FX_BOOL bValueChanged); | |
void UpdateField(CPDF_FormField* pFormField); | |
public: | |
FX_BOOL DoAction_Hide(const CPDF_Action& action); | |
FX_BOOL DoAction_SubmitForm(const CPDF_Action& action); | |
FX_BOOL DoAction_ResetForm(const CPDF_Action& action); | |
FX_BOOL DoAction_ImportData(const CPDF_Action& action); | |
void GetFieldFromObjects(const CFX_PtrArray& objects, CFX_PtrArray& fields); | |
FX_BOOL IsValidField(CPDF_Dictionary* pFieldDict); | |
FX_BOOL SubmitFields(const CFX_WideString& csDestination, const CFX_PtrArray& fields, | |
FX_BOOL bIncludeOrExclude, FX_BOOL bUrlEncoded); | |
FX_BOOL SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded); | |
FX_BOOL ImportFormFromFDFFile(const CFX_WideString& csFDFFileName, FX_BOOL bNotify); | |
FX_BOOL ExportFormToFDFFile(const CFX_WideString& sFDFFileName); | |
FX_BOOL ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf); | |
FX_BOOL ExportFieldsToFDFFile(const CFX_WideString& sFDFFileName, const CFX_PtrArray& fields, | |
FX_BOOL bIncludeOrExclude); | |
FX_BOOL ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields,FX_BOOL bIncludeOrExclude, CFX_ByteTextBuf& textBuf); | |
FX_BOOL ExportFormToTxtFile(const CFX_WideString& sTxtFileName); | |
FX_BOOL ImportFormFromTxtFile(const CFX_WideString& sTxtFileName); | |
CFX_WideString GetTemporaryFileName(const CFX_WideString& sFileExt); | |
private: | |
virtual int BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue); | |
virtual int AfterValueChange(const CPDF_FormField* pField); | |
virtual int BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue); | |
virtual int AfterSelectionChange(const CPDF_FormField* pField); | |
virtual int AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray); | |
virtual int BeforeFormReset(const CPDF_InterForm* pForm); | |
virtual int AfterFormReset(const CPDF_InterForm* pForm); | |
virtual int BeforeFormImportData(const CPDF_InterForm* pForm); | |
virtual int AfterFormImportData(const CPDF_InterForm* pForm); | |
private: | |
FX_BOOL FDFToURLEncodedData(CFX_WideString csFDFFile, CFX_WideString csTxtFile); | |
FX_BOOL FDFToURLEncodedData(FX_LPBYTE& pBuf, FX_STRSIZE& nBufSize); | |
int GetPageIndexByAnnotDict(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict) const; | |
void DoFDFBuffer(CFX_ByteString sBuffer); | |
private: | |
CPDFSDK_Document* m_pDocument; | |
CPDF_InterForm* m_pInterForm; | |
CPDFSDK_WidgetMap m_Map; | |
FX_BOOL m_bCalculate; | |
FX_BOOL m_bBusy; | |
public: | |
FX_BOOL IsNeedHighLight(int nFieldType); | |
void RemoveAllHighLight(); | |
void SetHighlightAlpha(FX_BYTE alpha) {m_iHighlightAlpha = alpha;} | |
FX_BYTE GetHighlightAlpha() {return m_iHighlightAlpha;} | |
void SetHighlightColor(FX_COLORREF clr, int nFieldType); | |
FX_COLORREF GetHighlightColor(int nFieldType); | |
private: | |
FX_COLORREF m_aHighlightColor[6]; | |
FX_BYTE m_iHighlightAlpha; | |
FX_BOOL m_bNeedHightlight[6]; | |
}; | |
#define BAI_STRUCTURE 0 | |
#define BAI_ROW 1 | |
#define BAI_COLUMN 2 | |
#define CPDFSDK_Annots CFX_ArrayTemplate<CPDFSDK_Annot*> | |
#define CPDFSDK_SortAnnots CGW_ArrayTemplate<CPDFSDK_Annot*> | |
class CBA_AnnotIterator | |
{ | |
public: | |
CBA_AnnotIterator(CPDFSDK_PageView* pPageView, const CFX_ByteString& sType, const CFX_ByteString& sSubType); | |
virtual ~CBA_AnnotIterator(); | |
virtual CPDFSDK_Annot* GetFirstAnnot(); | |
virtual CPDFSDK_Annot* GetLastAnnot(); | |
virtual CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pAnnot); | |
virtual CPDFSDK_Annot* GetPrevAnnot(CPDFSDK_Annot* pAnnot); | |
virtual void Release(){delete this;} | |
private: | |
void GenerateResults(); | |
static int CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); | |
static int CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); | |
static CPDF_Rect GetAnnotRect(CPDFSDK_Annot* pAnnot); | |
private: | |
CPDFSDK_PageView* m_pPageView; | |
CFX_ByteString m_sType; | |
CFX_ByteString m_sSubType; | |
int m_nTabs; | |
CPDFSDK_Annots m_Annots; | |
}; | |
#endif //#define _FSDK_BASEFORM_H_ | |