Initial commit.
[pdfium.git] / core / include / fpdfdoc / fpdf_doc.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4  \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FPDF_DOC_H_\r
8 #define _FPDF_DOC_H_\r
9 #ifndef _FPDF_PARSER_\r
10 #include "../fpdfapi/fpdf_parser.h"\r
11 #endif\r
12 #ifndef _FPDF_RENDER_\r
13 #include "../fpdfapi/fpdf_render.h"\r
14 #endif\r
15 class CPDF_Action;\r
16 class CPDF_Annot;\r
17 class CPDF_AnnotList;\r
18 class CPDF_Bookmark;\r
19 class CPDF_BookmarkTree;\r
20 class CPDF_Dest;\r
21 class CPDF_Link;\r
22 class CPDF_LinkList;\r
23 class CPDF_Metadata;\r
24 class CPDF_NameTree;\r
25 class CPDF_NumberTree;\r
26 class CPDF_TextObject;\r
27 class CPDF_ViewerPreferences;\r
28 class CPDF_Page;\r
29 class CPDF_RenderOptions;\r
30 class CXML_Element;\r
31 class CPDF_OCContext;\r
32 class CPDF_DocJSActions;\r
33 class CPDF_ActionFields;\r
34 class CPDF_AAction;\r
35 class CPDF_FileSpec;\r
36 class CPDF_IconFit;\r
37 class CPDF_DefaultAppearance;\r
38 class CPDF_InterForm;\r
39 class CPDF_FormField;\r
40 class CPDF_FormNotify;\r
41 class CPDF_FormControl;\r
42 class CPDF_LWinParam;\r
43 class CFieldTree;\r
44 class CPDF_ApSettings;\r
45 class CPDF_NameTree : public CFX_Object\r
46 {\r
47 public:\r
48 \r
49     CPDF_NameTree(CPDF_Dictionary* pRoot)\r
50     {\r
51         m_pRoot = pRoot;\r
52     }\r
53 \r
54     CPDF_NameTree(CPDF_Document* pDoc, FX_BSTR category);\r
55 \r
56     CPDF_Object*                LookupValue(int nIndex, CFX_ByteString& csName) const;\r
57 \r
58     CPDF_Object*                LookupValue(const CFX_ByteString& csName) const;\r
59 \r
60     CPDF_Array*                 LookupNamedDest(CPDF_Document* pDoc, FX_BSTR sName);\r
61 \r
62     int                                 GetIndex(const CFX_ByteString& csName) const;\r
63 \r
64     int                                 GetCount() const;\r
65 \r
66 \r
67     CPDF_Dictionary*    GetRoot() const\r
68     {\r
69         return m_pRoot;\r
70     }\r
71 \r
72 protected:\r
73 \r
74     CPDF_Dictionary*            m_pRoot;\r
75 };\r
76 class CPDF_BookmarkTree : public CFX_Object\r
77 {\r
78 public:\r
79 \r
80     CPDF_BookmarkTree(CPDF_Document* pDoc)\r
81     {\r
82         m_pDocument = pDoc;\r
83     }\r
84 public:\r
85 \r
86 \r
87 \r
88     CPDF_Bookmark               GetFirstChild(CPDF_Bookmark parent);\r
89 \r
90     CPDF_Bookmark               GetNextSibling(CPDF_Bookmark bookmark);\r
91 \r
92 \r
93     CPDF_Document*              GetDocument() const\r
94     {\r
95         return m_pDocument;\r
96     }\r
97 protected:\r
98 \r
99     CPDF_Document*              m_pDocument;\r
100 };\r
101 #define PDFBOOKMARK_ITALIC                      1\r
102 #define PDFBOOKMARK_BOLD                        2\r
103 class CPDF_Bookmark : public CFX_Object\r
104 {\r
105 public:\r
106 \r
107     CPDF_Bookmark(CPDF_Dictionary* pDict = NULL)\r
108     {\r
109         m_pDict = pDict;\r
110     }\r
111 \r
112     operator CPDF_Dictionary*() const\r
113     {\r
114         return m_pDict;\r
115     }\r
116 \r
117 \r
118 \r
119     FX_DWORD                    GetColorRef();\r
120 \r
121     FX_DWORD                    GetFontStyle();\r
122 \r
123     CFX_WideString              GetTitle();\r
124 \r
125 \r
126 \r
127 \r
128     CPDF_Dest                   GetDest(CPDF_Document* pDocument);\r
129 \r
130     CPDF_Action                 GetAction();\r
131 \r
132 \r
133     CPDF_Dictionary*    m_pDict;\r
134 };\r
135 #define PDFZOOM_XYZ                                     1\r
136 #define PDFZOOM_FITPAGE                         2\r
137 #define PDFZOOM_FITHORZ                         3\r
138 #define PDFZOOM_FITVERT                         4\r
139 #define PDFZOOM_FITRECT                         5\r
140 #define PDFZOOM_FITBBOX                         6\r
141 #define PDFZOOM_FITBHORZ                        7\r
142 \r
143 #define PDFZOOM_FITBVERT                        8\r
144 class CPDF_Dest : public CFX_Object\r
145 {\r
146 public:\r
147 \r
148     CPDF_Dest(CPDF_Object* pObj = NULL)\r
149     {\r
150         m_pObj = pObj;\r
151     }\r
152 \r
153     operator CPDF_Object* () const\r
154     {\r
155         return m_pObj;\r
156     }\r
157 \r
158     CFX_ByteString              GetRemoteName();\r
159 \r
160     int                                 GetPageIndex(CPDF_Document* pDoc);\r
161 \r
162     FX_DWORD                    GetPageObjNum();\r
163 \r
164     int                                 GetZoomMode();\r
165 \r
166     FX_FLOAT                    GetParam(int index);\r
167 \r
168 \r
169     CPDF_Object*                m_pObj;\r
170 };\r
171 class CPDF_OCContext : public CFX_Object, public IPDF_OCContext\r
172 {\r
173 public:\r
174 \r
175     enum UsageType {\r
176         View = 0,\r
177         Design,\r
178         Print,\r
179         Export\r
180     };\r
181 \r
182     CPDF_OCContext(CPDF_Document *pDoc, UsageType eUsageType = View);\r
183 \r
184     virtual ~CPDF_OCContext();\r
185 \r
186     CPDF_Document*      GetDocument() const\r
187     {\r
188         return m_pDocument;\r
189     }\r
190 \r
191     UsageType           GetUsageType() const\r
192     {\r
193         return m_eUsageType;\r
194     }\r
195 \r
196     FX_BOOL                     CheckOCGVisible(const CPDF_Dictionary *pOCGDict);\r
197 \r
198     void                        ResetOCContext();\r
199 protected:\r
200 \r
201     FX_BOOL                     LoadOCGStateFromConfig(FX_BSTR csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const;\r
202 \r
203     FX_BOOL                     LoadOCGState(const CPDF_Dictionary *pOCGDict) const;\r
204 \r
205     FX_BOOL                     GetOCGVisible(const CPDF_Dictionary *pOCGDict);\r
206 \r
207     FX_BOOL                     GetOCGVE(CPDF_Array *pExpression, FX_BOOL bFromConfig, int nLevel = 0);\r
208 \r
209     FX_BOOL                     LoadOCMDState(const CPDF_Dictionary *pOCMDDict, FX_BOOL bFromConfig);\r
210 \r
211     CPDF_Document               *m_pDocument;\r
212 \r
213     UsageType                   m_eUsageType;\r
214 \r
215     CFX_MapPtrTemplate<const CPDF_Dictionary*, void*>   m_OCGStates;\r
216 };\r
217 class CPDF_LWinParam : public CFX_Object\r
218 {\r
219 public:\r
220 \r
221     CPDF_LWinParam(CPDF_Dictionary* pDict)\r
222     {\r
223         m_pDict = pDict;\r
224     }\r
225 \r
226     operator CPDF_Dictionary* () const\r
227     {\r
228         return m_pDict;\r
229     }\r
230 \r
231     inline CFX_ByteString       GetFileName()\r
232     {\r
233         return m_pDict->GetString("F");\r
234     }\r
235 \r
236 \r
237     inline CFX_ByteString       GetDefaultDirectory()\r
238     {\r
239         return m_pDict->GetString("D");\r
240     }\r
241 \r
242 \r
243     inline CFX_ByteString       GetOperation()\r
244     {\r
245         return m_pDict->GetString("O");\r
246     }\r
247 \r
248 \r
249     inline CFX_ByteString       GetParameter()\r
250     {\r
251         return m_pDict->GetString("P");\r
252     }\r
253 \r
254     CPDF_Dictionary*            m_pDict;\r
255 };\r
256 class CPDF_ActionFields : public CFX_Object\r
257 {\r
258 public:\r
259 \r
260     CPDF_ActionFields(const CPDF_Action* pAction)\r
261     {\r
262         m_pAction = (CPDF_Action*)pAction;\r
263     }\r
264 \r
265     operator CPDF_Action*() const\r
266     {\r
267         return m_pAction;\r
268     }\r
269 \r
270     FX_DWORD                            GetFieldsCount() const;\r
271 \r
272     void                                        GetAllFields(CFX_PtrArray& fieldObjects) const;\r
273 \r
274     CPDF_Object*                        GetField(FX_DWORD iIndex) const;\r
275 \r
276     CPDF_Action*                        m_pAction;\r
277 };\r
278 \r
279 #define PDFNAMED_NEXTPAGE               1\r
280 #define PDFNAMED_PREVPAGE               2\r
281 #define PDFNAMED_FIRSTPAGE              3\r
282 #define PDFNAMED_LASTPAGE               4\r
283 #define PDFJS_MAXLENGTH                 64\r
284 class CPDF_Action : public CFX_Object\r
285 {\r
286 public:\r
287 \r
288     CPDF_Action(CPDF_Dictionary* pDict = NULL)\r
289     {\r
290         m_pDict = pDict;\r
291     }\r
292 \r
293     operator CPDF_Dictionary* () const\r
294     {\r
295         return m_pDict;\r
296     }\r
297 \r
298     enum ActionType {\r
299         Unknown = 0,\r
300         GoTo,\r
301         GoToR,\r
302         GoToE,\r
303         Launch,\r
304         Thread,\r
305         URI,\r
306         Sound,\r
307         Movie,\r
308         Hide,\r
309         Named,\r
310         SubmitForm,\r
311         ResetForm,\r
312         ImportData,\r
313         JavaScript,\r
314         SetOCGState,\r
315         Rendition,\r
316         Trans,\r
317         GoTo3DView\r
318     };\r
319 \r
320     CFX_ByteString              GetTypeName() const\r
321     {\r
322         return m_pDict->GetString("S");\r
323     }\r
324 \r
325     ActionType                  GetType() const;\r
326 \r
327 \r
328 \r
329     CPDF_Dest                   GetDest(CPDF_Document* pDoc) const;\r
330 \r
331 \r
332 \r
333 \r
334 \r
335     CFX_WideString              GetFilePath() const;\r
336 \r
337 \r
338 \r
339 \r
340     FX_BOOL                             GetNewWindow() const\r
341     {\r
342         return m_pDict->GetBoolean("NewWindow");\r
343     }\r
344 \r
345 \r
346 \r
347 \r
348     CPDF_LWinParam              GetWinParam() const;\r
349 \r
350 \r
351 \r
352 \r
353     CFX_ByteString              GetURI(CPDF_Document* pDoc) const;\r
354 \r
355 \r
356 \r
357 \r
358     FX_BOOL                             GetMouseMap() const\r
359     {\r
360         return m_pDict->GetBoolean("IsMap");\r
361     }\r
362 \r
363 \r
364 \r
365 \r
366     CPDF_ActionFields   GetWidgets() const\r
367     {\r
368         return this;\r
369     }\r
370 \r
371 \r
372 \r
373 \r
374     FX_BOOL                             GetHideStatus() const\r
375     {\r
376         return m_pDict->GetBoolean("H", TRUE);\r
377     }\r
378 \r
379 \r
380 \r
381 \r
382     CFX_ByteString              GetNamedAction() const\r
383     {\r
384         return m_pDict->GetString("N");\r
385     }\r
386 \r
387 \r
388 \r
389 \r
390     FX_DWORD                    GetFlags() const\r
391     {\r
392         return m_pDict->GetInteger("Flags");\r
393     }\r
394 \r
395 \r
396 \r
397 \r
398     CFX_WideString              GetJavaScript() const;\r
399 \r
400 \r
401 \r
402 \r
403     CPDF_Dictionary*    GetAnnot() const;\r
404 \r
405 \r
406 \r
407 \r
408     FX_INT32                    GetOperationType() const;\r
409 \r
410 \r
411 \r
412 \r
413     CPDF_Stream*                GetSoundStream() const\r
414     {\r
415         return m_pDict->GetStream("Sound");\r
416     }\r
417 \r
418     FX_FLOAT                    GetVolume() const\r
419     {\r
420         return m_pDict->GetNumber("Volume");\r
421     }\r
422 \r
423     FX_BOOL                             IsSynchronous() const\r
424     {\r
425         return m_pDict->GetBoolean("Synchronous");\r
426     }\r
427 \r
428     FX_BOOL                             IsRepeat() const\r
429     {\r
430         return m_pDict->GetBoolean("Repeat");\r
431     }\r
432 \r
433     FX_BOOL                             IsMixPlay() const\r
434     {\r
435         return m_pDict->GetBoolean("Mix");\r
436     }\r
437 \r
438 \r
439 \r
440 \r
441     FX_DWORD                    GetSubActionsCount() const;\r
442 \r
443     CPDF_Action                 GetSubAction(FX_DWORD iIndex) const;\r
444 \r
445 \r
446     CPDF_Dictionary*    m_pDict;\r
447 };\r
448 class CPDF_AAction : public CFX_Object\r
449 {\r
450 public:\r
451 \r
452     CPDF_AAction(CPDF_Dictionary* pDict = NULL)\r
453     {\r
454         m_pDict = pDict;\r
455     }\r
456 \r
457     operator CPDF_Dictionary*() const\r
458     {\r
459         return m_pDict;\r
460     }\r
461 \r
462     enum AActionType {\r
463         CursorEnter = 0,\r
464         CursorExit,\r
465         ButtonDown,\r
466         ButtonUp,\r
467         GetFocus,\r
468         LoseFocus,\r
469         PageOpen,\r
470         PageClose,\r
471         PageVisible,\r
472         PageInvisible,\r
473         OpenPage,\r
474         ClosePage,\r
475         KeyStroke,\r
476         Format,\r
477         Validate,\r
478         Calculate,\r
479         CloseDocument,\r
480         SaveDocument,\r
481         DocumentSaved,\r
482         PrintDocument,\r
483         DocumentPrinted\r
484     };\r
485 \r
486     FX_BOOL                             ActionExist(AActionType eType) const;\r
487 \r
488     CPDF_Action                 GetAction(AActionType eType) const;\r
489 \r
490     FX_POSITION                 GetStartPos() const;\r
491 \r
492     CPDF_Action                 GetNextAction(FX_POSITION& pos, AActionType& eType) const;\r
493 \r
494     CPDF_Dictionary*    m_pDict;\r
495 };\r
496 class CPDF_DocJSActions : public CFX_Object\r
497 {\r
498 public:\r
499     CPDF_DocJSActions(CPDF_Document* pDoc);\r
500 \r
501 \r
502     int                                 CountJSActions() const;\r
503 \r
504     CPDF_Action                 GetJSAction(int index, CFX_ByteString& csName) const;\r
505 \r
506     CPDF_Action                 GetJSAction(const CFX_ByteString& csName) const;\r
507 \r
508     int                                 FindJSAction(const CFX_ByteString& csName) const;\r
509 \r
510 \r
511     CPDF_Document*              GetDocument() const\r
512     {\r
513         return m_pDocument;\r
514     }\r
515 \r
516 protected:\r
517 \r
518     CPDF_Document*              m_pDocument;\r
519 };\r
520 class CPDF_FileSpec : public CFX_Object\r
521 {\r
522 public:\r
523 \r
524     CPDF_FileSpec();\r
525 \r
526     CPDF_FileSpec(CPDF_Object *pObj)\r
527     {\r
528         m_pObj = pObj;\r
529     }\r
530 \r
531     operator CPDF_Object*() const\r
532     {\r
533         return m_pObj;\r
534     }\r
535 \r
536     FX_BOOL                     IsURL() const;\r
537 \r
538     FX_BOOL                     GetFileName(CFX_WideString &wsFileName) const;\r
539 \r
540     CPDF_Stream*        GetFileStream() const;\r
541 \r
542     void                        SetFileName(FX_WSTR wsFileName, FX_BOOL bURL = FALSE);\r
543 protected:\r
544 \r
545     CPDF_Object         *m_pObj;\r
546 };\r
547 class CPDF_LinkList : public CFX_Object\r
548 {\r
549 public:\r
550 \r
551     CPDF_LinkList(CPDF_Document* pDoc)\r
552     {\r
553         m_pDocument = pDoc;\r
554     }\r
555 \r
556     ~CPDF_LinkList();\r
557 \r
558     CPDF_Link                   GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y);\r
559 \r
560     int                                 CountLinks(CPDF_Page* pPage);\r
561 \r
562     CPDF_Link                   GetLink(CPDF_Page* pPage, int index);\r
563 \r
564     CPDF_Document*              GetDocument() const\r
565     {\r
566         return m_pDocument;\r
567     }\r
568 protected:\r
569 \r
570     CPDF_Document*              m_pDocument;\r
571 \r
572     CFX_MapPtrToPtr             m_PageMap;\r
573 \r
574     CFX_PtrArray*               GetPageLinks(CPDF_Page* pPage);\r
575 \r
576     void                                LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList);\r
577 };\r
578 class CPDF_Link : public CFX_Object\r
579 {\r
580 public:\r
581 \r
582     CPDF_Link(CPDF_Dictionary* pDict = NULL)\r
583     {\r
584         m_pDict = pDict;\r
585     }\r
586 \r
587     operator CPDF_Dictionary*() const\r
588     {\r
589         return m_pDict;\r
590     }\r
591 \r
592     CFX_FloatRect               GetRect();\r
593 \r
594 \r
595 \r
596     CPDF_Dest                   GetDest(CPDF_Document* pDoc);\r
597 \r
598     CPDF_Action                 GetAction();\r
599 \r
600 \r
601     CPDF_Dictionary*    m_pDict;\r
602 };\r
603 #define ANNOTFLAG_INVISIBLE                     1\r
604 #define ANNOTFLAG_HIDDEN                        2\r
605 #define ANNOTFLAG_PRINT                         4\r
606 #define ANNOTFLAG_NOZOOM                        8\r
607 #define ANNOTFLAG_NOROTATE                      0x10\r
608 #define ANNOTFLAG_NOVIEW                        0x20\r
609 #define ANNOTFLAG_READONLY                      0x40\r
610 #define ANNOTFLAG_LOCKED                        0x80\r
611 #define ANNOTFLAG_TOGGLENOVIEW          0x100\r
612 class CPDF_Annot : public CFX_PrivateData, public CFX_Object\r
613 {\r
614 public:\r
615 \r
616     CPDF_Annot(CPDF_Dictionary* pDict);\r
617 \r
618     ~CPDF_Annot();\r
619 \r
620     CPDF_Dictionary*    m_pAnnotDict;\r
621 \r
622     CFX_ByteString              GetSubType() const;\r
623 \r
624     FX_DWORD                    GetFlags() const\r
625     {\r
626         return m_pAnnotDict->GetInteger("F");\r
627     }\r
628 \r
629     void                                GetRect(CFX_FloatRect& rect) const;\r
630 \r
631     enum AppearanceMode {\r
632         Normal,\r
633         Rollover,\r
634         Down\r
635     };\r
636 \r
637     FX_BOOL                             DrawAppearance(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,\r
638                                        AppearanceMode mode, const CPDF_RenderOptions* pOptions);\r
639 \r
640     FX_BOOL                             DrawInContext(const CPDF_Page* pPage, const CPDF_RenderContext* pContext,\r
641                                       const CFX_AffineMatrix* pUser2Device, AppearanceMode mode);\r
642 \r
643     void                                ClearCachedAP();\r
644 \r
645 \r
646     void                                DrawBorder(CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,\r
647                                    const CPDF_RenderOptions* pOptions);\r
648 \r
649     CPDF_PageObject*    GetBorder(FX_BOOL bPrint, const CPDF_RenderOptions* pOptions);\r
650 \r
651 \r
652 \r
653     int                                 CountIRTNotes();\r
654 \r
655     CPDF_Annot*                 GetIRTNote(int index);\r
656 \r
657 \r
658     CPDF_Form*                  GetAPForm(const CPDF_Page* pPage, AppearanceMode mode);\r
659 private:\r
660 \r
661     CFX_MapPtrToPtr             m_APMap;\r
662 protected:\r
663     friend class                CPDF_AnnotList;\r
664 \r
665     CPDF_AnnotList*             m_pList;\r
666 \r
667     CPDF_Reference*             NewAnnotRef();\r
668 };\r
669 class CPDF_AnnotList : public CFX_Object\r
670 {\r
671 public:\r
672 \r
673     CPDF_AnnotList(CPDF_Page* pPage);\r
674 \r
675     ~CPDF_AnnotList();\r
676 \r
677     void        GetAnnotMatrix(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CFX_Matrix &matrix) const;\r
678 \r
679     void        GetAnnotRect(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CPDF_Rect &rtAnnot) const;\r
680 \r
681     void                                DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,\r
682                                       CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,\r
683                                       CPDF_RenderOptions* pOptions);\r
684 \r
685     void                                DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,\r
686                                       FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,\r
687                                       CPDF_RenderOptions* pOptions)\r
688     {\r
689         DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, NULL);\r
690     }\r
691 \r
692     void                                DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,\r
693                                       FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,\r
694                                       CPDF_RenderOptions* pOptions, FX_RECT *pClipRect)\r
695     {\r
696         DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, pClipRect);\r
697     }\r
698 \r
699     void                                DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, CPDF_RenderContext* pContext,\r
700                                       FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_DWORD dwAnnotFlags,\r
701                                       CPDF_RenderOptions* pOptions, FX_RECT* pClipRect);\r
702 \r
703 \r
704 \r
705     CPDF_Annot*                 GetAt(int index)\r
706     {\r
707         return (CPDF_Annot*)m_AnnotList.GetAt(index);\r
708     }\r
709 \r
710     int                                 Count()\r
711     {\r
712         return m_AnnotList.GetSize();\r
713     }\r
714 \r
715     int                                 GetIndex(CPDF_Annot* pAnnot);\r
716 \r
717 \r
718     CPDF_Document*              GetDocument() const\r
719     {\r
720         return m_pDocument;\r
721     }\r
722 protected:\r
723 \r
724     CFX_PtrArray                m_AnnotList;\r
725 \r
726     CPDF_Dictionary*    m_pPageDict;\r
727 \r
728     CPDF_Document*              m_pDocument;\r
729 \r
730     CFX_PtrArray                m_Borders;\r
731 \r
732     void                                DisplayPass(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,\r
733                                     CPDF_RenderContext* pContext, FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix,\r
734                                     FX_BOOL bWidget, CPDF_RenderOptions* pOptions, FX_RECT* clip_rect);\r
735     friend class                CPDF_Annot;\r
736 };\r
737 #define COLORTYPE_TRANSPARENT   0\r
738 #define COLORTYPE_GRAY                  1\r
739 #define COLORTYPE_RGB                   2\r
740 #define COLORTYPE_CMYK                  3\r
741 class CPDF_DefaultAppearance : public CFX_Object\r
742 {\r
743 public:\r
744 \r
745     CPDF_DefaultAppearance(const CFX_ByteString& csDA = "")\r
746     {\r
747         m_csDA = csDA;\r
748     }\r
749 \r
750     CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA)\r
751     {\r
752         m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;\r
753     }\r
754 \r
755 \r
756     operator CFX_ByteString() const\r
757     {\r
758         return m_csDA;\r
759     }\r
760 \r
761     const CPDF_DefaultAppearance& operator =(const CFX_ByteString& csDA)\r
762     {\r
763         m_csDA = csDA;\r
764         return *this;\r
765     }\r
766 \r
767     const CPDF_DefaultAppearance& operator =(const CPDF_DefaultAppearance& cDA)\r
768     {\r
769         m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;\r
770         return *this;\r
771     }\r
772 \r
773 \r
774 \r
775     FX_BOOL                             HasFont();\r
776 \r
777     CFX_ByteString              GetFontString();\r
778 \r
779     void                                GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize);\r
780 \r
781 \r
782 \r
783 \r
784     FX_BOOL                             HasColor(FX_BOOL bStrokingOperation = FALSE);\r
785 \r
786     CFX_ByteString              GetColorString(FX_BOOL bStrokingOperation = FALSE);\r
787 \r
788     void                                GetColor(int& iColorType, FX_FLOAT fc[4], FX_BOOL bStrokingOperation = FALSE);\r
789 \r
790     void                                GetColor(FX_ARGB& color, int& iColorType, FX_BOOL bStrokingOperation = FALSE);\r
791 \r
792 \r
793 \r
794 \r
795     FX_BOOL                             HasTextMatrix();\r
796 \r
797     CFX_ByteString              GetTextMatrixString();\r
798 \r
799     CFX_AffineMatrix    GetTextMatrix();\r
800 \r
801 protected:\r
802 \r
803     CFX_ByteString              m_csDA;\r
804 };\r
805 #define FIELDTYPE_UNKNOWN                       0\r
806 #define FIELDTYPE_PUSHBUTTON            1\r
807 #define FIELDTYPE_CHECKBOX                      2\r
808 #define FIELDTYPE_RADIOBUTTON           3\r
809 #define FIELDTYPE_COMBOBOX                      4\r
810 #define FIELDTYPE_LISTBOX                       5\r
811 #define FIELDTYPE_TEXTFIELD                     6\r
812 #define FIELDTYPE_SIGNATURE                     7\r
813 class CPDF_InterForm : public CFX_PrivateData, public CFX_Object\r
814 {\r
815 public:\r
816 \r
817     CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bUpdateAP);\r
818 \r
819     ~CPDF_InterForm();\r
820 \r
821 \r
822 \r
823     static void                         EnableUpdateAP(FX_BOOL bUpdateAP);\r
824 \r
825     static FX_BOOL                      UpdatingAPEnabled();\r
826 \r
827 \r
828     static CFX_ByteString       GenerateNewResourceName(const CPDF_Dictionary* pResDict, FX_LPCSTR csType, int iMinLen = 2, FX_LPCSTR csPrefix = "");\r
829 \r
830 \r
831 \r
832     static CPDF_Font*           AddSystemDefaultFont(const CPDF_Document* pDocument);\r
833 \r
834     static CPDF_Font*           AddSystemFont(const CPDF_Document* pDocument, CFX_ByteString csFontName, FX_BYTE iCharSet = 1);\r
835 \r
836     static CPDF_Font*           AddSystemFont(const CPDF_Document* pDocument, CFX_WideString csFontName, FX_BYTE iCharSet = 1);\r
837 \r
838     static CPDF_Font*           AddStandardFont(const CPDF_Document* pDocument, CFX_ByteString csFontName);\r
839 \r
840     static CFX_ByteString       GetNativeFont(FX_BYTE iCharSet, FX_LPVOID pLogFont = NULL);\r
841 \r
842     static CFX_ByteString       GetNativeFont(FX_LPVOID pLogFont = NULL);\r
843 \r
844     static FX_BYTE                      GetNativeCharSet();\r
845 \r
846     static CPDF_Font*           AddNativeFont(FX_BYTE iCharSet, const CPDF_Document* pDocument);\r
847 \r
848     static CPDF_Font*           AddNativeFont(const CPDF_Document* pDocument);\r
849 \r
850 \r
851 \r
852 \r
853     FX_BOOL                                     ValidateFieldName(CFX_WideString& csNewFieldName, int iType);\r
854 \r
855     FX_BOOL                                     ValidateFieldName(const CPDF_FormField* pField, CFX_WideString& csNewFieldName);\r
856 \r
857     FX_BOOL                                     ValidateFieldName(const CPDF_FormControl* pControl, CFX_WideString& csNewFieldName);\r
858 \r
859 \r
860 \r
861 \r
862     FX_DWORD                            CountFields(const CFX_WideString &csFieldName = L"");\r
863 \r
864     CPDF_FormField*                     GetField(FX_DWORD index, const CFX_WideString &csFieldName = L"");\r
865 \r
866     void                                        GetAllFieldNames(CFX_WideStringArray& allFieldNames);\r
867 \r
868     FX_BOOL                                     IsValidFormField(const void* pField);\r
869 \r
870     CPDF_FormField*                     GetFieldByDict(CPDF_Dictionary* pFieldDict) const;\r
871 \r
872 \r
873 \r
874 \r
875     FX_DWORD                            CountControls(CFX_WideString csFieldName = L"");\r
876 \r
877     CPDF_FormControl*           GetControl(FX_DWORD index, CFX_WideString csFieldName = L"");\r
878 \r
879     FX_BOOL                                     IsValidFormControl(const void* pControl);\r
880 \r
881     int                                         CountPageControls(CPDF_Page* pPage) const;\r
882 \r
883     CPDF_FormControl*           GetPageControl(CPDF_Page* pPage, int index) const;\r
884 \r
885 \r
886     CPDF_FormControl*           GetControlAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y) const;\r
887 \r
888     CPDF_FormControl*           GetControlByDict(CPDF_Dictionary* pWidgetDict) const;\r
889 \r
890 \r
891 \r
892 \r
893     FX_DWORD                            CountInternalFields(const CFX_WideString& csFieldName = L"") const;\r
894 \r
895     CPDF_Dictionary*            GetInternalField(FX_DWORD index, const CFX_WideString& csFieldName = L"") const;\r
896 \r
897 \r
898 \r
899 \r
900 \r
901     CPDF_Document*                      GetDocument() const\r
902     {\r
903         return m_pDocument;\r
904     }\r
905 \r
906     CPDF_Dictionary*            GetFormDict() const\r
907     {\r
908         return m_pFormDict;\r
909     }\r
910 \r
911 \r
912 \r
913 \r
914     FX_BOOL                                     NeedConstructAP();\r
915 \r
916     void                                        NeedConstructAP(FX_BOOL bNeedAP);\r
917 \r
918 \r
919 \r
920 \r
921     int                                         CountFieldsInCalculationOrder();\r
922 \r
923     CPDF_FormField*                     GetFieldInCalculationOrder(int index);\r
924 \r
925     int                                         FindFieldInCalculationOrder(const CPDF_FormField* pField);\r
926 \r
927 \r
928 \r
929 \r
930     FX_DWORD                            CountFormFonts();\r
931 \r
932     CPDF_Font*                          GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag);\r
933 \r
934     CPDF_Font*                          GetFormFont(CFX_ByteString csNameTag);\r
935 \r
936     CPDF_Font*                          GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag);\r
937 \r
938     CPDF_Font*                          GetNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag);\r
939 \r
940     CPDF_Font*                          GetNativeFormFont(CFX_ByteString& csNameTag);\r
941 \r
942     FX_BOOL                                     FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);\r
943 \r
944     FX_BOOL                                     FindFormFont(CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag);\r
945 \r
946     inline FX_BOOL                      FindFormFont(CFX_WideString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag)\r
947     {\r
948         return FindFormFont(PDF_EncodeText(csFontName), pFont, csNameTag);\r
949     }\r
950 \r
951 \r
952 \r
953 \r
954 \r
955     void                                        AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);\r
956 \r
957     CPDF_Font*                          AddNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag);\r
958 \r
959     CPDF_Font*                          AddNativeFormFont(CFX_ByteString& csNameTag);\r
960 \r
961     void                                        RemoveFormFont(const CPDF_Font* pFont);\r
962 \r
963     void                                        RemoveFormFont(CFX_ByteString csNameTag);\r
964 \r
965 \r
966 \r
967 \r
968     CPDF_DefaultAppearance      GetDefaultAppearance();\r
969 \r
970     CPDF_Font*                          GetDefaultFormFont();\r
971 \r
972 \r
973 \r
974     int                                         GetFormAlignment();\r
975 \r
976 \r
977 \r
978 \r
979     CPDF_FormField*                     CheckRequiredFields(const CFX_PtrArray *fields = NULL, FX_BOOL bIncludeOrExclude = TRUE) const;\r
980 \r
981     CFDF_Document*                      ExportToFDF(FX_WSTR pdf_path, FX_BOOL bSimpleFileSpec = FALSE) const;\r
982 \r
983     CFDF_Document*                      ExportToFDF(FX_WSTR pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bSimpleFileSpec = FALSE) const;\r
984 \r
985     FX_BOOL                                     ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE);\r
986 \r
987 \r
988 \r
989 \r
990     FX_BOOL                                     ResetForm(const CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bNotify = FALSE);\r
991 \r
992     FX_BOOL                                     ResetForm(FX_BOOL bNotify = FALSE);\r
993 \r
994     void                                        ReloadForm();\r
995 \r
996     CPDF_FormNotify*            GetFormNotify() const\r
997     {\r
998         return m_pFormNotify;\r
999     }\r
1000 \r
1001     void                                        SetFormNotify(const CPDF_FormNotify* pNotify);\r
1002 \r
1003 \r
1004     int                                         GetPageWithWidget(int iCurPage, FX_BOOL bNext);\r
1005 \r
1006 \r
1007 \r
1008     FX_BOOL                                     IsUpdated()\r
1009     {\r
1010         return m_bUpdated;\r
1011     }\r
1012 \r
1013     void                                        ClearUpdatedFlag()\r
1014     {\r
1015         m_bUpdated = FALSE;\r
1016     }\r
1017 \r
1018 \r
1019     FX_BOOL                                     HasXFAForm() const;\r
1020 \r
1021     void                                        FixPageFields(const CPDF_Page* pPage);\r
1022 protected:\r
1023 \r
1024     static FX_BOOL                      m_bUpdateAP;\r
1025 \r
1026     void                                        LoadField(CPDF_Dictionary* pFieldDict, int nLevel = 0);\r
1027 \r
1028     CPDF_Object*                        GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name);\r
1029 \r
1030     CPDF_FormField*                     AddTerminalField(const CPDF_Dictionary* pFieldDict);\r
1031 \r
1032     CPDF_FormControl*           AddControl(const CPDF_FormField* pField, const CPDF_Dictionary* pWidgetDict);\r
1033 \r
1034     void                                        FDF_ImportField(CPDF_Dictionary* pField, const CFX_WideString& parent_name, FX_BOOL bNotify = FALSE, int nLevel = 0);\r
1035 \r
1036     FX_BOOL                                     ValidateFieldName(CFX_WideString& csNewFieldName, int iType, const CPDF_FormField* pExcludedField, const CPDF_FormControl* pExcludedControl);\r
1037 \r
1038     int                                         CompareFieldName(const CFX_WideString& name1, const CFX_WideString& name2);\r
1039 \r
1040     int                                         CompareFieldName(const CFX_ByteString& name1, const CFX_ByteString& name2);\r
1041 \r
1042     CPDF_Document*                      m_pDocument;\r
1043 \r
1044     FX_BOOL                                     m_bGenerateAP;\r
1045 \r
1046     CPDF_Dictionary*            m_pFormDict;\r
1047 \r
1048     CFX_MapPtrToPtr                     m_ControlMap;\r
1049 \r
1050     CFieldTree *m_pFieldTree;\r
1051 \r
1052     CFX_ByteString                      m_bsEncoding;\r
1053 \r
1054     CPDF_FormNotify*            m_pFormNotify;\r
1055 \r
1056     FX_BOOL                                     m_bUpdated;\r
1057     friend class CPDF_FormControl;\r
1058     friend class CPDF_FormField;\r
1059 };\r
1060 #define FORMFIELD_READONLY              0x01\r
1061 #define FORMFIELD_REQUIRED              0x02\r
1062 #define FORMFIELD_NOEXPORT              0x04\r
1063 #define FORMRADIO_NOTOGGLEOFF   0x100\r
1064 #define FORMRADIO_UNISON                0x200\r
1065 #define FORMTEXT_MULTILINE              0x100\r
1066 #define FORMTEXT_PASSWORD               0x200\r
1067 #define FORMTEXT_NOSCROLL               0x400\r
1068 #define FORMTEXT_COMB                   0x800\r
1069 #define FORMCOMBO_EDIT                  0x100\r
1070 #define FORMLIST_MULTISELECT    0x100\r
1071 class CPDF_FormField : public CFX_Object\r
1072 {\r
1073 public:\r
1074 \r
1075     enum Type {\r
1076         Unknown,\r
1077         PushButton,\r
1078         RadioButton,\r
1079         CheckBox,\r
1080         Text,\r
1081         RichText,\r
1082         File,\r
1083         ListBox,\r
1084         ComboBox,\r
1085         Sign\r
1086     };\r
1087 \r
1088     CFX_WideString                      GetFullName();\r
1089 \r
1090     Type                                        GetType()\r
1091     {\r
1092         return m_Type;\r
1093     }\r
1094 \r
1095     FX_DWORD                            GetFlags()\r
1096     {\r
1097         return m_Flags;\r
1098     }\r
1099 \r
1100     CPDF_InterForm*                     GetInterForm() const\r
1101     {\r
1102         return m_pForm;\r
1103     }\r
1104 \r
1105     CPDF_Dictionary*            GetFieldDict() const\r
1106     {\r
1107         return m_pDict;\r
1108     }\r
1109 \r
1110     void                                        SetFieldDict(CPDF_Dictionary* pDict)\r
1111     {\r
1112         m_pDict = pDict;\r
1113     }\r
1114 \r
1115     FX_BOOL                                     ResetField(FX_BOOL bNotify = FALSE);\r
1116 \r
1117 \r
1118 \r
1119     int                                         CountControls()\r
1120     {\r
1121         return m_ControlList.GetSize();\r
1122     }\r
1123 \r
1124     CPDF_FormControl*           GetControl(int index)\r
1125     {\r
1126         return (CPDF_FormControl*)m_ControlList.GetAt(index);\r
1127     }\r
1128 \r
1129     int                                         GetControlIndex(const CPDF_FormControl* pControl);\r
1130 \r
1131 \r
1132 \r
1133 \r
1134     int                                         GetFieldType();\r
1135 \r
1136 \r
1137 \r
1138 \r
1139     CPDF_AAction                        GetAdditionalAction();\r
1140 \r
1141 \r
1142 \r
1143 \r
1144     CFX_WideString                      GetAlternateName();\r
1145 \r
1146 \r
1147 \r
1148 \r
1149     CFX_WideString                      GetMappingName();\r
1150 \r
1151 \r
1152 \r
1153 \r
1154     FX_DWORD                            GetFieldFlags();\r
1155 \r
1156 \r
1157 \r
1158 \r
1159     CFX_ByteString                      GetDefaultStyle();\r
1160 \r
1161 \r
1162 \r
1163 \r
1164     CFX_WideString                      GetRichTextString();\r
1165 \r
1166 \r
1167 \r
1168     CFX_WideString                      GetValue();\r
1169 \r
1170     CFX_WideString                      GetDefaultValue();\r
1171 \r
1172     FX_BOOL                                     SetValue(const CFX_WideString& value, FX_BOOL bNotify = FALSE);\r
1173 \r
1174 \r
1175 \r
1176 \r
1177 \r
1178     int                                         GetMaxLen();\r
1179 \r
1180 \r
1181 \r
1182 \r
1183     int                                         CountSelectedItems();\r
1184 \r
1185     int                                         GetSelectedIndex(int index);\r
1186 \r
1187     FX_BOOL                                     ClearSelection(FX_BOOL bNotify = FALSE);\r
1188 \r
1189     FX_BOOL                                     IsItemSelected(int index);\r
1190 \r
1191     FX_BOOL                                     SetItemSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);\r
1192 \r
1193     FX_BOOL                                     IsItemDefaultSelected(int index);\r
1194 \r
1195     int                                         GetDefaultSelectedItem();\r
1196 \r
1197 \r
1198 \r
1199 \r
1200     int                                         CountOptions();\r
1201 \r
1202     CFX_WideString                      GetOptionLabel(int index);\r
1203 \r
1204     CFX_WideString                      GetOptionValue(int index);\r
1205 \r
1206     int                                         FindOption(CFX_WideString csOptLabel);\r
1207 \r
1208     int                                         FindOptionValue(FX_LPCWSTR csOptValue, int iStartIndex = 0);\r
1209 \r
1210 \r
1211 \r
1212 \r
1213     FX_BOOL                                     CheckControl(int iControlIndex, FX_BOOL bChecked, FX_BOOL bNotify = FALSE);\r
1214 \r
1215 \r
1216 \r
1217 \r
1218     int                                         GetTopVisibleIndex();\r
1219 \r
1220 \r
1221 \r
1222 \r
1223     int                                         CountSelectedOptions();\r
1224 \r
1225     int                                         GetSelectedOptionIndex(int index);\r
1226 \r
1227     FX_BOOL                                     IsOptionSelected(int iOptIndex);\r
1228 \r
1229     FX_BOOL                                     SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);\r
1230 \r
1231     FX_BOOL                                     ClearSelectedOptions(FX_BOOL bNotify = FALSE);\r
1232 \r
1233 \r
1234 \r
1235 \r
1236     FX_FLOAT                            GetFontSize()\r
1237     {\r
1238         return m_FontSize;\r
1239     }\r
1240 \r
1241     CPDF_Font*                          GetFont()\r
1242     {\r
1243         return m_pFont;\r
1244     }\r
1245 \r
1246 protected:\r
1247 \r
1248     CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict);\r
1249 \r
1250     ~CPDF_FormField();\r
1251 \r
1252     CPDF_FormField::Type        m_Type;\r
1253 \r
1254     FX_DWORD                            m_Flags;\r
1255 \r
1256     CPDF_InterForm*                     m_pForm;\r
1257 \r
1258     CPDF_Dictionary*            m_pDict;\r
1259 \r
1260     CFX_PtrArray                        m_ControlList;\r
1261     friend class                        CPDF_InterForm;\r
1262     friend class                        CPDF_FormControl;\r
1263 \r
1264 \r
1265 \r
1266     CFX_WideString                      GetValue(FX_BOOL bDefault);\r
1267 \r
1268     FX_BOOL                                     SetValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);\r
1269 \r
1270 \r
1271     void                                        SyncFieldFlags();\r
1272 \r
1273     int                                         FindListSel(CPDF_String* str);\r
1274 \r
1275     CFX_WideString                      GetOptionText(int index, int sub_index);\r
1276 \r
1277     void                                        LoadDA();\r
1278 \r
1279     void                                        UpdateAP(CPDF_FormControl* pControl);\r
1280 \r
1281 \r
1282 \r
1283     CFX_WideString                      GetCheckValue(FX_BOOL bDefault);\r
1284 \r
1285     FX_BOOL                                     SetCheckValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);\r
1286 \r
1287 \r
1288     FX_FLOAT                            m_FontSize;\r
1289 \r
1290     CPDF_Font*                          m_pFont;\r
1291 };\r
1292 CPDF_Object*    FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name, int nLevel = 0);\r
1293 class CPDF_IconFit : public CFX_Object\r
1294 {\r
1295 public:\r
1296 \r
1297     CPDF_IconFit(CPDF_Dictionary* pDict = NULL)\r
1298     {\r
1299         m_pDict = pDict;\r
1300     }\r
1301 \r
1302     operator CPDF_Dictionary*() const\r
1303     {\r
1304         return m_pDict;\r
1305     }\r
1306 \r
1307 \r
1308 \r
1309 \r
1310     enum ScaleMethod {\r
1311         Always = 0,\r
1312         Bigger,\r
1313         Smaller,\r
1314         Never\r
1315     };\r
1316 \r
1317     ScaleMethod                         GetScaleMethod();\r
1318 \r
1319 \r
1320 \r
1321 \r
1322     FX_BOOL                                     IsProportionalScale();\r
1323 \r
1324 \r
1325 \r
1326 \r
1327     void                                        GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom);\r
1328 \r
1329 \r
1330 \r
1331 \r
1332     FX_BOOL                                     GetFittingBounds();\r
1333 \r
1334 \r
1335     CPDF_Dictionary*            m_pDict;\r
1336 };\r
1337 \r
1338 #define TEXTPOS_CAPTION         0\r
1339 #define TEXTPOS_ICON            1\r
1340 #define TEXTPOS_BELOW           2\r
1341 #define TEXTPOS_ABOVE           3\r
1342 #define TEXTPOS_RIGHT           4\r
1343 #define TEXTPOS_LEFT            5\r
1344 #define TEXTPOS_OVERLAID        6\r
1345 class CPDF_FormControl : public CFX_Object\r
1346 {\r
1347 public:\r
1348 \r
1349     CPDF_FormField::Type        GetType()\r
1350     {\r
1351         return m_pField->GetType();\r
1352     }\r
1353 \r
1354     CPDF_InterForm*                     GetInterForm() const\r
1355     {\r
1356         return m_pForm;\r
1357     }\r
1358 \r
1359     CPDF_FormField*                     GetField() const\r
1360     {\r
1361         return m_pField;\r
1362     }\r
1363 \r
1364     CPDF_Dictionary*            GetWidget() const\r
1365     {\r
1366         return m_pWidgetDict;\r
1367     }\r
1368 \r
1369     CFX_FloatRect                       GetRect();\r
1370 \r
1371     void                                        DrawControl(CFX_RenderDevice* pDevice, CFX_AffineMatrix* pMatrix,\r
1372                                         CPDF_Page* pPage, CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions = NULL);\r
1373 \r
1374 \r
1375 \r
1376     CFX_ByteString                      GetCheckedAPState();\r
1377 \r
1378     CFX_WideString                      GetExportValue();\r
1379 \r
1380     FX_BOOL                                     IsChecked();\r
1381 \r
1382     FX_BOOL                                     IsDefaultChecked();\r
1383 \r
1384 \r
1385 \r
1386 \r
1387     enum HighlightingMode       {\r
1388         None = 0,\r
1389         Invert,\r
1390         Outline,\r
1391         Push,\r
1392         Toggle\r
1393     };\r
1394 \r
1395     HighlightingMode            GetHighlightingMode();\r
1396 \r
1397 \r
1398 \r
1399 \r
1400     FX_BOOL                                     HasMKEntry(CFX_ByteString csEntry);\r
1401 \r
1402 \r
1403 \r
1404 \r
1405     int                                         GetRotation();\r
1406 \r
1407 \r
1408 \r
1409 \r
1410     inline FX_ARGB                      GetBorderColor(int& iColorType)\r
1411     {\r
1412         return GetColor(iColorType, "BC");\r
1413     }\r
1414 \r
1415     inline FX_FLOAT                     GetOriginalBorderColor(int index)\r
1416     {\r
1417         return GetOriginalColor(index, "BC");\r
1418     }\r
1419 \r
1420     inline void                         GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])\r
1421     {\r
1422         GetOriginalColor(iColorType, fc, "BC");\r
1423     }\r
1424 \r
1425 \r
1426 \r
1427 \r
1428     inline FX_ARGB                      GetBackgroundColor(int& iColorType)\r
1429     {\r
1430         return GetColor(iColorType, "BG");\r
1431     }\r
1432 \r
1433     inline FX_FLOAT                     GetOriginalBackgroundColor(int index)\r
1434     {\r
1435         return GetOriginalColor(index, "BG");\r
1436     }\r
1437 \r
1438     inline void                         GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])\r
1439     {\r
1440         GetOriginalColor(iColorType, fc, "BG");\r
1441     }\r
1442 \r
1443 \r
1444 \r
1445 \r
1446     inline CFX_WideString       GetNormalCaption()\r
1447     {\r
1448         return GetCaption("CA");\r
1449     }\r
1450 \r
1451 \r
1452 \r
1453 \r
1454     inline CFX_WideString       GetRolloverCaption()\r
1455     {\r
1456         return GetCaption("RC");\r
1457     }\r
1458 \r
1459 \r
1460 \r
1461 \r
1462     inline CFX_WideString       GetDownCaption()\r
1463     {\r
1464         return GetCaption("AC");\r
1465     }\r
1466 \r
1467 \r
1468 \r
1469 \r
1470     inline CPDF_Stream*         GetNormalIcon()\r
1471     {\r
1472         return GetIcon("I");\r
1473     }\r
1474 \r
1475 \r
1476 \r
1477 \r
1478     inline CPDF_Stream*         GetRolloverIcon()\r
1479     {\r
1480         return GetIcon("RI");\r
1481     }\r
1482 \r
1483 \r
1484 \r
1485 \r
1486     inline CPDF_Stream*         GetDownIcon()\r
1487     {\r
1488         return GetIcon("IX");\r
1489     }\r
1490 \r
1491 \r
1492 \r
1493 \r
1494     CPDF_IconFit                        GetIconFit();\r
1495 \r
1496 \r
1497 \r
1498 \r
1499     int                                         GetTextPosition();\r
1500 \r
1501 \r
1502 \r
1503 \r
1504     CPDF_Action                         GetAction();\r
1505 \r
1506 \r
1507 \r
1508 \r
1509     CPDF_AAction                        GetAdditionalAction();\r
1510 \r
1511 \r
1512 \r
1513 \r
1514     CPDF_DefaultAppearance      GetDefaultAppearance();\r
1515 \r
1516     CPDF_Font*                          GetDefaultControlFont();\r
1517 \r
1518 \r
1519 \r
1520 \r
1521     int                                         GetControlAlignment();\r
1522 \r
1523 protected:\r
1524 \r
1525     CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict);\r
1526 \r
1527     CFX_ByteString                      GetOnStateName();\r
1528 \r
1529     void                                        SetOnStateName(const CFX_ByteString& csOn);\r
1530 \r
1531     void                                        CheckControl(FX_BOOL bChecked);\r
1532 \r
1533     FX_ARGB                                     GetColor(int& iColorType, CFX_ByteString csEntry);\r
1534 \r
1535     FX_FLOAT                            GetOriginalColor(int index, CFX_ByteString csEntry);\r
1536 \r
1537     void                                        GetOriginalColor(int& iColorType, FX_FLOAT fc[4], CFX_ByteString csEntry);\r
1538 \r
1539     CFX_WideString                      GetCaption(CFX_ByteString csEntry);\r
1540 \r
1541     CPDF_Stream*                        GetIcon(CFX_ByteString csEntry);\r
1542 \r
1543     CPDF_ApSettings                     GetMK(FX_BOOL bCreate);\r
1544 \r
1545     CPDF_InterForm*                     m_pForm;\r
1546 \r
1547     CPDF_FormField*                     m_pField;\r
1548 \r
1549     CPDF_Dictionary*            m_pWidgetDict;\r
1550     friend class                        CPDF_InterForm;\r
1551     friend class                        CPDF_FormField;\r
1552 };\r
1553 class CPDF_FormNotify : public CFX_Object\r
1554 {\r
1555 public:\r
1556 \r
1557     virtual ~CPDF_FormNotify() {}\r
1558 \r
1559     virtual int         BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue)\r
1560     {\r
1561         return 0;\r
1562     }\r
1563 \r
1564     virtual int         AfterValueChange(const CPDF_FormField* pField)\r
1565     {\r
1566         return 0;\r
1567     }\r
1568 \r
1569     virtual int         BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue)\r
1570     {\r
1571         return 0;\r
1572     }\r
1573 \r
1574     virtual int         AfterSelectionChange(const CPDF_FormField* pField)\r
1575     {\r
1576         return 0;\r
1577     }\r
1578 \r
1579     virtual int         AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray)\r
1580     {\r
1581         return 0;\r
1582     }\r
1583 \r
1584     virtual int         BeforeFormReset(const CPDF_InterForm* pForm)\r
1585     {\r
1586         return 0;\r
1587     }\r
1588 \r
1589     virtual int         AfterFormReset(const CPDF_InterForm* pForm)\r
1590     {\r
1591         return 0;\r
1592     }\r
1593 \r
1594     virtual int         BeforeFormImportData(const CPDF_InterForm* pForm)\r
1595     {\r
1596         return 0;\r
1597     }\r
1598 \r
1599     virtual int         AfterFormImportData(const CPDF_InterForm* pForm)\r
1600     {\r
1601         return 0;\r
1602     }\r
1603 };\r
1604 FX_BOOL         FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);\r
1605 class CPDF_PageLabel : public CFX_Object\r
1606 {\r
1607 public:\r
1608 \r
1609     CPDF_PageLabel(CPDF_Document* pDocument)\r
1610     {\r
1611         m_pDocument = pDocument;\r
1612     }\r
1613 \r
1614 \r
1615     CFX_WideString                                      GetLabel(int nPage) const;\r
1616 \r
1617     FX_INT32                                            GetPageByLabel(FX_BSTR bsLabel) const;\r
1618 \r
1619 \r
1620     FX_INT32                                            GetPageByLabel(FX_WSTR wsLabel) const;\r
1621 \r
1622 protected:\r
1623     CPDF_Document*                                      m_pDocument;\r
1624 };\r
1625 class CPDF_Metadata\r
1626 {\r
1627 public:\r
1628 \r
1629     CPDF_Metadata();\r
1630 \r
1631 \r
1632     ~CPDF_Metadata();\r
1633 \r
1634     void                                LoadDoc(CPDF_Document *pDoc);\r
1635 \r
1636 \r
1637     FX_INT32                    GetString(FX_BSTR bsItem, CFX_WideString &wsStr);\r
1638 \r
1639     CXML_Element*               GetRoot() const;\r
1640 \r
1641     CXML_Element*               GetRDF() const;\r
1642 \r
1643 protected:\r
1644     FX_LPVOID   m_pData;\r
1645 };\r
1646 class CPDF_ViewerPreferences\r
1647 {\r
1648 public:\r
1649 \r
1650     CPDF_ViewerPreferences(CPDF_Document *pDoc);\r
1651 \r
1652 \r
1653     ~CPDF_ViewerPreferences();\r
1654 \r
1655 \r
1656     FX_BOOL IsDirectionR2L() const;\r
1657 \r
1658     FX_BOOL PrintScaling() const;\r
1659 \r
1660 \r
1661 protected:\r
1662     CPDF_Document*      m_pDoc;\r
1663 };\r
1664 class CPDF_ApSettings : public CFX_Object\r
1665 {\r
1666 public:\r
1667 \r
1668     CPDF_ApSettings(CPDF_Dictionary* pDict = NULL)\r
1669     {\r
1670         m_pDict = pDict;\r
1671     }\r
1672 \r
1673     operator CPDF_Dictionary* () const\r
1674     {\r
1675         return m_pDict;\r
1676     }\r
1677 \r
1678     FX_BOOL                                     HasMKEntry(FX_BSTR csEntry);\r
1679 \r
1680 \r
1681 \r
1682     int                                         GetRotation();\r
1683 \r
1684 \r
1685 \r
1686 \r
1687     inline FX_ARGB                      GetBorderColor(int& iColorType)\r
1688     {\r
1689         return GetColor(iColorType, FX_BSTRC("BC"));\r
1690     }\r
1691 \r
1692     inline FX_FLOAT                     GetOriginalBorderColor(int index)\r
1693     {\r
1694         return GetOriginalColor(index, FX_BSTRC("BC"));\r
1695     }\r
1696 \r
1697     inline void                         GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])\r
1698     {\r
1699         GetOriginalColor(iColorType, fc, FX_BSTRC("BC"));\r
1700     }\r
1701 \r
1702 \r
1703 \r
1704 \r
1705     inline FX_ARGB                      GetBackgroundColor(int& iColorType)\r
1706     {\r
1707         return GetColor(iColorType, FX_BSTRC("BG"));\r
1708     }\r
1709 \r
1710     inline FX_FLOAT                     GetOriginalBackgroundColor(int index)\r
1711     {\r
1712         return GetOriginalColor(index, FX_BSTRC("BG"));\r
1713     }\r
1714 \r
1715     inline void                         GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])\r
1716     {\r
1717         GetOriginalColor(iColorType, fc, FX_BSTRC("BG"));\r
1718     }\r
1719 \r
1720 \r
1721 \r
1722 \r
1723     inline CFX_WideString       GetNormalCaption()\r
1724     {\r
1725         return GetCaption(FX_BSTRC("CA"));\r
1726     }\r
1727 \r
1728 \r
1729 \r
1730 \r
1731     inline CFX_WideString       GetRolloverCaption()\r
1732     {\r
1733         return GetCaption(FX_BSTRC("RC"));\r
1734     }\r
1735 \r
1736 \r
1737 \r
1738 \r
1739     inline CFX_WideString       GetDownCaption()\r
1740     {\r
1741         return GetCaption(FX_BSTRC("AC"));\r
1742     }\r
1743 \r
1744 \r
1745 \r
1746 \r
1747     inline CPDF_Stream*         GetNormalIcon()\r
1748     {\r
1749         return GetIcon(FX_BSTRC("I"));\r
1750     }\r
1751 \r
1752 \r
1753 \r
1754 \r
1755     inline CPDF_Stream*         GetRolloverIcon()\r
1756     {\r
1757         return GetIcon(FX_BSTRC("RI"));\r
1758     }\r
1759 \r
1760 \r
1761 \r
1762 \r
1763     inline CPDF_Stream*         GetDownIcon()\r
1764     {\r
1765         return GetIcon(FX_BSTRC("IX"));\r
1766     }\r
1767 \r
1768 \r
1769 \r
1770 \r
1771     CPDF_IconFit                        GetIconFit();\r
1772 \r
1773 \r
1774 \r
1775 \r
1776     int                                         GetTextPosition();\r
1777 \r
1778     CPDF_Dictionary*            m_pDict;\r
1779 protected:\r
1780 \r
1781     FX_ARGB                                     GetColor(int& iColorType, FX_BSTR csEntry);\r
1782 \r
1783     FX_FLOAT                            GetOriginalColor(int index, FX_BSTR csEntry);\r
1784 \r
1785     void                                        GetOriginalColor(int& iColorType, FX_FLOAT fc[4], FX_BSTR csEntry);\r
1786 \r
1787     CFX_WideString                      GetCaption(FX_BSTR csEntry);\r
1788 \r
1789     CPDF_Stream*                        GetIcon(FX_BSTR csEntry);\r
1790     friend class                        CPDF_FormControl;\r
1791 };\r
1792 #endif\r