Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: fpdfsdk/include/fsdk_baseform.h

Issue 2252723002: Split fpdfsdk/fsdk_baseform.h into individual classes. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Split fpdfsdk/fsdk_baseform.h into individual classes. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « fpdfsdk/include/fsdk_actionhandler.h ('k') | fpdfsdk/include/fsdk_mgr.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #ifndef FPDFSDK_INCLUDE_FSDK_BASEFORM_H_
8 #define FPDFSDK_INCLUDE_FSDK_BASEFORM_H_
9
10 #include <map>
11 #include <set>
12 #include <vector>
13
14 #include "core/fpdfdoc/include/ipdf_formnotify.h"
15 #include "core/fxcrt/include/fx_basic.h"
16 #include "core/fxge/include/fx_dib.h"
17 #include "fpdfsdk/include/cpdfsdk_annot.h"
18 #include "fpdfsdk/include/cpdfsdk_baannot.h"
19
20 #if _FX_OS_ == _FX_ANDROID_
21 #include "time.h"
22 #else
23 #include <ctime>
24 #endif
25
26 class CPDFSDK_Annot;
27 class CPDFSDK_Document;
28 class CPDFSDK_InterForm;
29 class CPDFSDK_PageView;
30 class CPDF_Action;
31 class CPDF_FormControl;
32 class CPDF_FormField;
33 class CPDF_InterForm;
34 struct CPWL_Color;
35
36 #ifdef PDF_ENABLE_XFA
37 class CXFA_FFWidgetHandler;
38
39 typedef enum _PDFSDK_XFAAActionType {
40 PDFSDK_XFA_Click = 0,
41 PDFSDK_XFA_Full,
42 PDFSDK_XFA_PreOpen,
43 PDFSDK_XFA_PostOpen
44 } PDFSDK_XFAAActionType;
45 #endif // PDF_ENABLE_XFA
46
47 struct PDFSDK_FieldAction {
48 PDFSDK_FieldAction();
49 PDFSDK_FieldAction(const PDFSDK_FieldAction& other) = delete;
50
51 FX_BOOL bModifier; // in
52 FX_BOOL bShift; // in
53 int nCommitKey; // in
54 CFX_WideString sChange; // in[out]
55 CFX_WideString sChangeEx; // in
56 FX_BOOL bKeyDown; // in
57 int nSelEnd; // in[out]
58 int nSelStart; // in[out]
59 CFX_WideString sValue; // in[out]
60 FX_BOOL bWillCommit; // in
61 FX_BOOL bFieldFull; // in
62 FX_BOOL bRC; // in[out]
63 };
64
65 class CPDFSDK_Widget : public CPDFSDK_BAAnnot {
66 public:
67 class Observer {
68 public:
69 explicit Observer(CPDFSDK_Widget** pWatchedPtr);
70 ~Observer();
71
72 void OnWidgetDestroyed();
73
74 private:
75 CPDFSDK_Widget** m_pWatchedPtr;
76 };
77
78 #ifdef PDF_ENABLE_XFA
79 CXFA_FFWidget* GetMixXFAWidget() const;
80 CXFA_FFWidget* GetGroupMixXFAWidget();
81 CXFA_FFWidgetHandler* GetXFAWidgetHandler() const;
82
83 FX_BOOL HasXFAAAction(PDFSDK_XFAAActionType eXFAAAT);
84 FX_BOOL OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT,
85 PDFSDK_FieldAction& data,
86 CPDFSDK_PageView* pPageView);
87
88 void Synchronize(FX_BOOL bSynchronizeElse);
89 void SynchronizeXFAValue();
90 void SynchronizeXFAItems();
91
92 static void SynchronizeXFAValue(CXFA_FFDocView* pXFADocView,
93 CXFA_FFWidget* hWidget,
94 CPDF_FormField* pFormField,
95 CPDF_FormControl* pFormControl);
96 static void SynchronizeXFAItems(CXFA_FFDocView* pXFADocView,
97 CXFA_FFWidget* hWidget,
98 CPDF_FormField* pFormField,
99 CPDF_FormControl* pFormControl);
100 #endif // PDF_ENABLE_XFA
101
102 CPDFSDK_Widget(CPDF_Annot* pAnnot,
103 CPDFSDK_PageView* pPageView,
104 CPDFSDK_InterForm* pInterForm);
105 ~CPDFSDK_Widget() override;
106
107 void AddObserver(Observer* observer);
108 void RemoveObserver(Observer* observer);
109
110 // CPDFSDK_Annot
111 CFX_ByteString GetSubType() const override;
112 CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT) override;
113 FX_BOOL IsAppearanceValid() override;
114
115 int GetLayoutOrder() const override;
116
117 int GetFieldType() const;
118
119 // Possible values from PDF 32000-1:2008, table 221.
120 // FIELDFLAG_READONLY
121 // FIELDFLAG_REQUIRED
122 // FIELDFLAG_NOEXPORT
123 int GetFieldFlags() const;
124 int GetRotate() const;
125
126 FX_BOOL GetFillColor(FX_COLORREF& color) const;
127 FX_BOOL GetBorderColor(FX_COLORREF& color) const;
128 FX_BOOL GetTextColor(FX_COLORREF& color) const;
129 FX_FLOAT GetFontSize() const;
130
131 int GetSelectedIndex(int nIndex) const;
132 #ifndef PDF_ENABLE_XFA
133 CFX_WideString GetValue() const;
134 #else
135 CFX_WideString GetValue(FX_BOOL bDisplay = TRUE) const;
136 #endif // PDF_ENABLE_XFA
137 CFX_WideString GetDefaultValue() const;
138 CFX_WideString GetOptionLabel(int nIndex) const;
139 int CountOptions() const;
140 FX_BOOL IsOptionSelected(int nIndex) const;
141 int GetTopVisibleIndex() const;
142 bool IsChecked() const;
143 /*
144 BF_ALIGN_LEFT
145 BF_ALIGN_MIDDL
146 BF_ALIGN_RIGHT
147 */
148 int GetAlignment() const;
149 int GetMaxLen() const;
150 #ifdef PDF_ENABLE_XFA
151 CFX_WideString GetName() const;
152 #endif // PDF_ENABLE_XFA
153 CFX_WideString GetAlternateName() const;
154
155 // Set Properties.
156 void SetCheck(bool bChecked, bool bNotify);
157 void SetValue(const CFX_WideString& sValue, FX_BOOL bNotify);
158 void SetDefaultValue(const CFX_WideString& sValue);
159 void SetOptionSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify);
160 void ClearSelection(FX_BOOL bNotify);
161 void SetTopVisibleIndex(int index);
162
163 #ifdef PDF_ENABLE_XFA
164 void ResetAppearance(FX_BOOL bValueChanged);
165 #endif // PDF_ENABLE_XFA
166 void ResetAppearance(const FX_WCHAR* sValue, FX_BOOL bValueChanged);
167 void ResetFieldAppearance(FX_BOOL bValueChanged);
168 void UpdateField();
169 CFX_WideString OnFormat(FX_BOOL& bFormated);
170
171 // Message.
172 FX_BOOL OnAAction(CPDF_AAction::AActionType type,
173 PDFSDK_FieldAction& data,
174 CPDFSDK_PageView* pPageView);
175
176 CPDFSDK_InterForm* GetInterForm() const { return m_pInterForm; }
177 CPDF_FormField* GetFormField() const;
178 CPDF_FormControl* GetFormControl() const;
179 static CPDF_FormControl* GetFormControl(CPDF_InterForm* pInterForm,
180 const CPDF_Dictionary* pAnnotDict);
181
182 void DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView);
183
184 void SetAppModified();
185 void ClearAppModified();
186 FX_BOOL IsAppModified() const;
187
188 int32_t GetAppearanceAge() const;
189 int32_t GetValueAge() const;
190
191 FX_BOOL IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode);
192 void DrawAppearance(CFX_RenderDevice* pDevice,
193 const CFX_Matrix* pUser2Device,
194 CPDF_Annot::AppearanceMode mode,
195 const CPDF_RenderOptions* pOptions) override;
196
197 FX_BOOL HitTest(FX_FLOAT pageX, FX_FLOAT pageY);
198
199 private:
200 void ResetAppearance_PushButton();
201 void ResetAppearance_CheckBox();
202 void ResetAppearance_RadioButton();
203 void ResetAppearance_ComboBox(const FX_WCHAR* sValue);
204 void ResetAppearance_ListBox();
205 void ResetAppearance_TextField(const FX_WCHAR* sValue);
206
207 CFX_FloatRect GetClientRect() const;
208 CFX_FloatRect GetRotatedRect() const;
209
210 CFX_ByteString GetBackgroundAppStream() const;
211 CFX_ByteString GetBorderAppStream() const;
212 CFX_Matrix GetMatrix() const;
213
214 CPWL_Color GetTextPWLColor() const;
215 CPWL_Color GetBorderPWLColor() const;
216 CPWL_Color GetFillPWLColor() const;
217
218 void AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage);
219 void RemoveAppearance(const CFX_ByteString& sAPType);
220
221 CPDFSDK_InterForm* const m_pInterForm;
222 FX_BOOL m_bAppModified;
223 int32_t m_nAppAge;
224 int32_t m_nValueAge;
225 std::set<Observer*> m_Observers;
226
227 #ifdef PDF_ENABLE_XFA
228 mutable CXFA_FFWidget* m_hMixXFAWidget;
229 mutable CXFA_FFWidgetHandler* m_pWidgetHandler;
230 #endif // PDF_ENABLE_XFA
231 };
232
233 #ifdef PDF_ENABLE_XFA
234 class CPDFSDK_XFAWidget : public CPDFSDK_Annot {
235 public:
236 CPDFSDK_XFAWidget(CXFA_FFWidget* pAnnot,
237 CPDFSDK_PageView* pPageView,
238 CPDFSDK_InterForm* pInterForm);
239 ~CPDFSDK_XFAWidget() override {}
240
241 FX_BOOL IsXFAField() override;
242 CXFA_FFWidget* GetXFAWidget() const override;
243 CFX_ByteString GetType() const override;
244 CFX_ByteString GetSubType() const override;
245 CFX_FloatRect GetRect() const override;
246
247 CPDFSDK_InterForm* GetInterForm() { return m_pInterForm; }
248
249 private:
250 CPDFSDK_InterForm* m_pInterForm;
251 CXFA_FFWidget* m_hXFAWidget;
252 };
253 #endif // PDF_ENABLE_XFA
254
255 class CPDFSDK_InterForm : public IPDF_FormNotify {
256 public:
257 explicit CPDFSDK_InterForm(CPDFSDK_Document* pDocument);
258 ~CPDFSDK_InterForm() override;
259
260 CPDF_InterForm* GetInterForm() const { return m_pInterForm.get(); }
261 CPDFSDK_Document* GetDocument() const { return m_pDocument; }
262
263 FX_BOOL HighlightWidgets();
264
265 CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const;
266 CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl,
267 bool createIfNeeded) const;
268 void GetWidgets(const CFX_WideString& sFieldName,
269 std::vector<CPDFSDK_Widget*>* widgets) const;
270 void GetWidgets(CPDF_FormField* pField,
271 std::vector<CPDFSDK_Widget*>* widgets) const;
272
273 void AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget);
274 void RemoveMap(CPDF_FormControl* pControl);
275
276 void EnableCalculate(FX_BOOL bEnabled);
277 FX_BOOL IsCalculateEnabled() const;
278
279 #ifdef PDF_ENABLE_XFA
280 void AddXFAMap(CXFA_FFWidget* hWidget, CPDFSDK_XFAWidget* pWidget);
281 void RemoveXFAMap(CXFA_FFWidget* hWidget);
282 CPDFSDK_XFAWidget* GetXFAWidget(CXFA_FFWidget* hWidget);
283 void XfaEnableCalculate(FX_BOOL bEnabled);
284 FX_BOOL IsXfaCalculateEnabled() const;
285 FX_BOOL IsXfaValidationsEnabled();
286 void XfaSetValidationsEnabled(FX_BOOL bEnabled);
287 #endif // PDF_ENABLE_XFA
288
289 FX_BOOL OnKeyStrokeCommit(CPDF_FormField* pFormField,
290 const CFX_WideString& csValue);
291 FX_BOOL OnValidate(CPDF_FormField* pFormField, const CFX_WideString& csValue);
292 void OnCalculate(CPDF_FormField* pFormField = nullptr);
293 CFX_WideString OnFormat(CPDF_FormField* pFormField, FX_BOOL& bFormated);
294
295 void ResetFieldAppearance(CPDF_FormField* pFormField,
296 const FX_WCHAR* sValue,
297 FX_BOOL bValueChanged);
298 void UpdateField(CPDF_FormField* pFormField);
299
300 FX_BOOL DoAction_Hide(const CPDF_Action& action);
301 FX_BOOL DoAction_SubmitForm(const CPDF_Action& action);
302 FX_BOOL DoAction_ResetForm(const CPDF_Action& action);
303 FX_BOOL DoAction_ImportData(const CPDF_Action& action);
304
305 std::vector<CPDF_FormField*> GetFieldFromObjects(
306 const std::vector<CPDF_Object*>& objects) const;
307 FX_BOOL IsValidField(CPDF_Dictionary* pFieldDict);
308 FX_BOOL SubmitFields(const CFX_WideString& csDestination,
309 const std::vector<CPDF_FormField*>& fields,
310 bool bIncludeOrExclude,
311 bool bUrlEncoded);
312 FX_BOOL SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded);
313 FX_BOOL ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf);
314 FX_BOOL ExportFieldsToFDFTextBuf(const std::vector<CPDF_FormField*>& fields,
315 bool bIncludeOrExclude,
316 CFX_ByteTextBuf& textBuf);
317 CFX_WideString GetTemporaryFileName(const CFX_WideString& sFileExt);
318
319 #ifdef PDF_ENABLE_XFA
320 void SynchronizeField(CPDF_FormField* pFormField, FX_BOOL bSynchronizeElse);
321 #endif // PDF_ENABLE_XFA
322
323 private:
324 // IPDF_FormNotify:
325 int BeforeValueChange(CPDF_FormField* pField,
326 const CFX_WideString& csValue) override;
327 void AfterValueChange(CPDF_FormField* pField) override;
328 int BeforeSelectionChange(CPDF_FormField* pField,
329 const CFX_WideString& csValue) override;
330 void AfterSelectionChange(CPDF_FormField* pField) override;
331 void AfterCheckedStatusChange(CPDF_FormField* pField) override;
332 int BeforeFormReset(CPDF_InterForm* pForm) override;
333 void AfterFormReset(CPDF_InterForm* pForm) override;
334 int BeforeFormImportData(CPDF_InterForm* pForm) override;
335 void AfterFormImportData(CPDF_InterForm* pForm) override;
336
337 FX_BOOL FDFToURLEncodedData(CFX_WideString csFDFFile,
338 CFX_WideString csTxtFile);
339 FX_BOOL FDFToURLEncodedData(uint8_t*& pBuf, FX_STRSIZE& nBufSize);
340 int GetPageIndexByAnnotDict(CPDF_Document* pDocument,
341 CPDF_Dictionary* pAnnotDict) const;
342
343 using CPDFSDK_WidgetMap = std::map<CPDF_FormControl*, CPDFSDK_Widget*>;
344
345 CPDFSDK_Document* m_pDocument;
346 std::unique_ptr<CPDF_InterForm> m_pInterForm;
347 CPDFSDK_WidgetMap m_Map;
348 #ifdef PDF_ENABLE_XFA
349 std::map<CXFA_FFWidget*, CPDFSDK_XFAWidget*> m_XFAMap;
350 FX_BOOL m_bXfaCalculate;
351 FX_BOOL m_bXfaValidationsEnabled;
352 #endif // PDF_ENABLE_XFA
353 FX_BOOL m_bCalculate;
354 FX_BOOL m_bBusy;
355
356 public:
357 FX_BOOL IsNeedHighLight(int nFieldType);
358 void RemoveAllHighLight();
359 void SetHighlightAlpha(uint8_t alpha) { m_iHighlightAlpha = alpha; }
360 uint8_t GetHighlightAlpha() { return m_iHighlightAlpha; }
361 void SetHighlightColor(FX_COLORREF clr, int nFieldType);
362 FX_COLORREF GetHighlightColor(int nFieldType);
363
364 private:
365 #ifndef PDF_ENABLE_XFA
366 static const int kNumFieldTypes = 6;
367 #else // PDF_ENABLE_XFA
368 static const int kNumFieldTypes = 7;
369 #endif // PDF_ENABLE_XFA
370
371 FX_COLORREF m_aHighlightColor[kNumFieldTypes];
372 uint8_t m_iHighlightAlpha;
373 FX_BOOL m_bNeedHightlight[kNumFieldTypes];
374 };
375
376 class CBA_AnnotIterator {
377 public:
378 enum TabOrder { STRUCTURE = 0, ROW, COLUMN };
379
380 CBA_AnnotIterator(CPDFSDK_PageView* pPageView,
381 const CFX_ByteString& sType,
382 const CFX_ByteString& sSubType);
383 ~CBA_AnnotIterator();
384
385 CPDFSDK_Annot* GetFirstAnnot();
386 CPDFSDK_Annot* GetLastAnnot();
387 CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pAnnot);
388 CPDFSDK_Annot* GetPrevAnnot(CPDFSDK_Annot* pAnnot);
389
390 private:
391 void GenerateResults();
392 static CFX_FloatRect GetAnnotRect(const CPDFSDK_Annot* pAnnot);
393
394 // Function signature compatible with std::sort().
395 static bool CompareByLeftAscending(const CPDFSDK_Annot* p1,
396 const CPDFSDK_Annot* p2);
397 static bool CompareByTopDescending(const CPDFSDK_Annot* p1,
398 const CPDFSDK_Annot* p2);
399
400 TabOrder m_eTabOrder;
401 CPDFSDK_PageView* m_pPageView;
402 CFX_ByteString m_sType;
403 CFX_ByteString m_sSubType;
404 std::vector<CPDFSDK_Annot*> m_Annots;
405 };
406
407 #endif // FPDFSDK_INCLUDE_FSDK_BASEFORM_H_
OLDNEW
« no previous file with comments | « fpdfsdk/include/fsdk_actionhandler.h ('k') | fpdfsdk/include/fsdk_mgr.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698