1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FSDK_BASEFORM_H_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FSDK_BASEFORM_H_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if _FX_OS_ == _FX_ANDROID_
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "time.h"
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <ctime>
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDFSDK_Document;
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass  CPDFSDK_DateTime;
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CPWL_Color;
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFFL_FormFiller;
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDFSDK_PageView;
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDFSDK_InterForm;
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _PDFSDK_FieldAction
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	_PDFSDK_FieldAction()
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bModifier = FALSE;
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bShift = FALSE;
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nCommitKey = 0;
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bKeyDown = FALSE;
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nSelEnd = nSelStart = 0;
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bWillCommit = FALSE;
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bFieldFull = FALSE;
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bRC = TRUE;
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					bModifier;		//in
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					bShift;			//in
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int						nCommitKey;		//in
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString			sChange;		//in[out]
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString			sChangeEx;		//in
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					bKeyDown;		//in
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int						nSelEnd;		//in[out]
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int						nSelStart;		//in[out]
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString			sValue;			//in[out]
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					bWillCommit;	//in
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					bFieldFull;		//in
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					bRC;			//in[out]
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}PDFSDK_FieldAction;
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDFSDK_Widget:public CPDFSDK_Annot
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Widget(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView, CPDFSDK_InterForm* pInterForm);
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CPDFSDK_Widget();
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CFX_ByteString			GetSubType() const;
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CPDF_Action				GetAAction(CPDF_AAction::AActionType eAAT);
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int								GetFieldType() const;
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//define layout order to 2.
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual int						GetLayoutOrder() {return 2;}
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/*
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FIELDFLAG_READONLY
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FIELDFLAG_REQUIRED
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FIELDFLAG_NOEXPORT
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	*/
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int								GetFieldFlags() const;
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int								GetRotate() const;
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							GetFillColor(FX_COLORREF& color) const;
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							GetBorderColor(FX_COLORREF& color) const;
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							GetTextColor(FX_COLORREF& color) const;
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT						GetFontSize() const;
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int								GetSelectedIndex(int nIndex) const;
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString					GetValue() const;
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString					GetDefaultValue() const;
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString					GetOptionLabel(int nIndex) const;
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int								CountOptions() const;
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							IsOptionSelected(int nIndex) const;
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int								GetTopVisibleIndex() const;
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							IsChecked() const;
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/*
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	BF_ALIGN_LEFT
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	BF_ALIGN_MIDDL
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	BF_ALIGN_RIGHT
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	*/
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int								GetAlignment() const;
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int								GetMaxLen() const;
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString					GetAlternateName() const;
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//Set Properties.
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							SetCheck(FX_BOOL bChecked, FX_BOOL bNotify);
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							SetValue(const CFX_WideString& sValue, FX_BOOL bNotify);
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							SetDefaultValue(const CFX_WideString& sValue);
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							SetOptionSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify);
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ClearSelection(FX_BOOL bNotify);
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							SetTopVisibleIndex(int index);
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ResetAppearance(FX_LPCWSTR sValue, FX_BOOL bValueChanged);
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ResetFieldAppearance(FX_BOOL bValueChanged);
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							UpdateField();
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString					OnFormat(int nCommitKey, FX_BOOL& bFormated);
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//Message.
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	FX_BOOL							OnAAction(CPDF_AAction::AActionType type, PDFSDK_FieldAction& data,
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												CPDFSDK_PageView* pPageView);
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm*				GetInterForm() const {return m_pInterForm;}
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_FormField*					GetFormField() const;
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_FormControl*				GetFormControl() const;
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	static CPDF_FormControl*		GetFormControl(CPDF_InterForm* pInterForm, CPDF_Dictionary* pAnnotDict);
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView);
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							SetAppModified();
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ClearAppModified();
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							IsAppModified() const;
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32						GetAppearanceAge() const;
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32						GetValueAge() const;
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ResetAppearance_PushButton();
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ResetAppearance_CheckBox();
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ResetAppearance_RadioButton();
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ResetAppearance_ComboBox(FX_LPCWSTR sValue);
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ResetAppearance_ListBox();
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ResetAppearance_TextField(FX_LPCWSTR sValue);
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect						GetClientRect() const;
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect						GetRotatedRect() const;
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString					GetBackgroundAppStream() const;
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString					GetBorderAppStream() const;
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Matrix						GetMatrix() const;
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Color						GetTextPWLColor() const;
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Color						GetBorderPWLColor() const;
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Color						GetFillPWLColor() const;
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage);
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							RemoveAppearance(const CFX_ByteString& sAPType);
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode);
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions);
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							HitTest(FX_FLOAT pageX, FX_FLOAT pageY);
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm*				m_pInterForm;
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							m_bAppModified;
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32						m_nAppAge;
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32						m_nValueAge;
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CPDFSDK_WidgetMap				CFX_MapPtrTemplate<CPDF_FormControl*, CPDFSDK_Widget*>
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDFSDK_InterForm : public CPDF_FormNotify
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm(CPDFSDK_Document* pDocument);
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CPDFSDK_InterForm();
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void					Destroy();
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CPDF_InterForm*			GetInterForm();
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document*				GetDocument();
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							HighlightWidgets();
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Widget*					GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const;
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Widget*					GetWidget(CPDF_FormControl* pControl) const;
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							GetWidgets(const CFX_WideString& sFieldName, CFX_PtrArray& widgets);
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							GetWidgets(CPDF_FormField* pField, CFX_PtrArray& widgets);
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget);
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							RemoveMap(CPDF_FormControl* pControl);
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							EnableCalculate(FX_BOOL bEnabled);
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							IsCalculateEnabled() const;
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef _WIN32
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Stream*					LoadImageFromFile(const CFX_WideString& sFile);
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							OnKeyStrokeCommit(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC);
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							OnValidate(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC);
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							OnCalculate(CPDF_FormField* pFormField = NULL);
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString					OnFormat(CPDF_FormField* pFormField, int nCommitKey, FX_BOOL& bFormated);
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							ResetFieldAppearance(CPDF_FormField* pFormField, FX_LPCWSTR sValue, FX_BOOL bValueChanged);
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							UpdateField(CPDF_FormField* pFormField);
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							DoAction_Hide(const CPDF_Action& action);
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							DoAction_SubmitForm(const CPDF_Action& action);
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							DoAction_ResetForm(const CPDF_Action& action);
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							DoAction_ImportData(const CPDF_Action& action);
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							GetFieldFromObjects(const CFX_PtrArray& objects, CFX_PtrArray& fields);
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							IsValidField(CPDF_Dictionary* pFieldDict);
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							SubmitFields(const CFX_WideString& csDestination, const CFX_PtrArray& fields,
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_BOOL bIncludeOrExclude, FX_BOOL bUrlEncoded);
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded);
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							ImportFormFromFDFFile(const CFX_WideString& csFDFFileName, FX_BOOL bNotify);
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							ExportFormToFDFFile(const CFX_WideString& sFDFFileName);
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf);
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							ExportFieldsToFDFFile(const CFX_WideString& sFDFFileName, const CFX_PtrArray& fields,
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_BOOL bIncludeOrExclude);
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields,FX_BOOL bIncludeOrExclude, CFX_ByteTextBuf& textBuf);
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							ExportFormToTxtFile(const CFX_WideString& sTxtFileName);
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							ImportFormFromTxtFile(const CFX_WideString& sTxtFileName);
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString					GetTemporaryFileName(const CFX_WideString& sFileExt);
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual int						BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue);
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual int						AfterValueChange(const CPDF_FormField* pField);
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual int						BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue);
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual int						AfterSelectionChange(const CPDF_FormField* pField);
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual int						AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray);
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual int						BeforeFormReset(const CPDF_InterForm* pForm);
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual int						AfterFormReset(const CPDF_InterForm* pForm);
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual int						BeforeFormImportData(const CPDF_InterForm* pForm);
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual int						AfterFormImportData(const CPDF_InterForm* pForm);
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							FDFToURLEncodedData(CFX_WideString csFDFFile, CFX_WideString csTxtFile);
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							FDFToURLEncodedData(FX_LPBYTE& pBuf, FX_STRSIZE& nBufSize);
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int								GetPageIndexByAnnotDict(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict) const;
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							DoFDFBuffer(CFX_ByteString sBuffer);
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document*				m_pDocument;
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_InterForm*					m_pInterForm;
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_WidgetMap				m_Map;
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							m_bCalculate;
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							m_bBusy;
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL IsNeedHighLight(int nFieldType);
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void    RemoveAllHighLight();
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void    SetHighlightAlpha(FX_BYTE alpha) {m_iHighlightAlpha = alpha;}
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BYTE GetHighlightAlpha() {return m_iHighlightAlpha;}
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void    SetHighlightColor(FX_COLORREF clr, int nFieldType);
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_COLORREF GetHighlightColor(int nFieldType);
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_COLORREF m_aHighlightColor[6];
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BYTE m_iHighlightAlpha;
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL	m_bNeedHightlight[6];
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define BAI_STRUCTURE		0
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define BAI_ROW				1
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define BAI_COLUMN			2
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CPDFSDK_Annots				CFX_ArrayTemplate<CPDFSDK_Annot*>
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CPDFSDK_SortAnnots			CGW_ArrayTemplate<CPDFSDK_Annot*>
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CBA_AnnotIterator
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CBA_AnnotIterator(CPDFSDK_PageView* pPageView, const CFX_ByteString& sType, const CFX_ByteString& sSubType);
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CBA_AnnotIterator();
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CPDFSDK_Annot*				GetFirstAnnot();
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CPDFSDK_Annot*				GetLastAnnot();
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CPDFSDK_Annot*				GetNextAnnot(CPDFSDK_Annot* pAnnot);
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CPDFSDK_Annot*				GetPrevAnnot(CPDFSDK_Annot* pAnnot);
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void						Release(){delete this;}
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void								GenerateResults();
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	static int							CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2);
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	static int							CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2);
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	static CPDF_Rect					GetAnnotRect(CPDFSDK_Annot* pAnnot);
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView*					m_pPageView;
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString						m_sType;
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString						m_sSubType;
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int									m_nTabs;
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Annots						m_Annots;
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif //#define _FSDK_BASEFORM_H_
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
293