1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
|
// Copyright 2016 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef FPDFSDK_CPDFSDK_FORMFILLENVIRONMENT_H_
#define FPDFSDK_CPDFSDK_FORMFILLENVIRONMENT_H_
#include <memory>
#include "core/fpdfapi/page/cpdf_page.h"
#include "core/fpdfapi/parser/cpdf_document.h"
#include "core/fpdfdoc/cpdf_occontext.h"
#include "core/fxcrt/cfx_observable.h"
#include "fpdfsdk/cfx_systemhandler.h"
#include "fpdfsdk/cpdfsdk_annot.h"
#include "fpdfsdk/fsdk_define.h"
#include "public/fpdf_formfill.h"
#include "public/fpdf_fwlevent.h"
class CFFL_InteractiveFormFiller;
class CFX_SystemHandler;
class CPDFSDK_ActionHandler;
class CPDFSDK_AnnotHandlerMgr;
class CPDFSDK_InterForm;
class CPDFSDK_PageView;
class IJS_Runtime;
class CPDFSDK_FormFillEnvironment
: public CFX_Observable<CPDFSDK_FormFillEnvironment> {
public:
CPDFSDK_FormFillEnvironment(UnderlyingDocumentType* pDoc,
FPDF_FORMFILLINFO* pFFinfo);
~CPDFSDK_FormFillEnvironment();
CPDFSDK_PageView* GetPageView(UnderlyingPageType* pPage, bool renew);
CPDFSDK_PageView* GetPageView(int nIndex);
CPDFSDK_PageView* GetCurrentView();
void RemovePageView(UnderlyingPageType* pPage);
void UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot);
CPDFSDK_Annot* GetFocusAnnot() { return m_pFocusAnnot.Get(); }
bool SetFocusAnnot(CPDFSDK_Annot::ObservedPtr* pAnnot);
bool KillFocusAnnot(uint32_t nFlag);
void ClearAllFocusedAnnots();
bool ExtractPages(const std::vector<uint16_t>& arrExtraPages,
CPDF_Document* pDstDoc);
bool InsertPages(int nInsertAt,
const CPDF_Document* pSrcDoc,
const std::vector<uint16_t>& arrSrcPages);
bool ReplacePages(int nPage,
const CPDF_Document* pSrcDoc,
const std::vector<uint16_t>& arrSrcPages);
int GetPageCount() { return m_pUnderlyingDoc->GetPageCount(); }
bool GetPermissions(int nFlag);
bool GetChangeMark() const { return m_bChangeMask; }
void SetChangeMark() { m_bChangeMask = true; }
void ClearChangeMark() { m_bChangeMask = false; }
UnderlyingPageType* GetPage(int nIndex);
void ProcJavascriptFun();
bool ProcOpenAction();
void Invalidate(FPDF_PAGE page,
double left,
double top,
double right,
double bottom);
void OutputSelectedRect(FPDF_PAGE page,
double left,
double top,
double right,
double bottom);
void SetCursor(int nCursorType);
int SetTimer(int uElapse, TimerCallback lpTimerFunc);
void KillTimer(int nTimerID);
FX_SYSTEMTIME GetLocalTime() const;
void OnChange();
bool IsSHIFTKeyDown(uint32_t nFlag) const;
bool IsCTRLKeyDown(uint32_t nFlag) const;
bool IsALTKeyDown(uint32_t nFlag) const;
FPDF_PAGE GetPage(FPDF_DOCUMENT document, int nPageIndex);
FPDF_PAGE GetCurrentPage(FPDF_DOCUMENT document);
void ExecuteNamedAction(const FX_CHAR* namedAction);
void OnSetFieldInputFocus(FPDF_WIDESTRING focusText,
FPDF_DWORD nTextLen,
bool bFocus);
void DoURIAction(const FX_CHAR* bsURI);
void DoGoToAction(int nPageIndex,
int zoomMode,
float* fPosArray,
int sizeOfArray);
UnderlyingDocumentType* GetUnderlyingDocument() const {
return m_pUnderlyingDoc;
}
#ifdef PDF_ENABLE_XFA
CPDF_Document* GetPDFDocument() const {
return m_pUnderlyingDoc ? m_pUnderlyingDoc->GetPDFDoc() : nullptr;
}
CPDFXFA_Context* GetXFAContext() const { return m_pUnderlyingDoc; }
void ResetXFADocument() { m_pUnderlyingDoc = nullptr; }
int GetPageViewCount() const { return m_PageMap.size(); }
void DisplayCaret(FPDF_PAGE page,
FPDF_BOOL bVisible,
double left,
double top,
double right,
double bottom);
int GetCurrentPageIndex(FPDF_DOCUMENT document);
void SetCurrentPage(FPDF_DOCUMENT document, int iCurPage);
// TODO(dsinclair): This should probably change to PDFium?
CFX_WideString FFI_GetAppName() const { return CFX_WideString(L"Acrobat"); }
CFX_WideString GetPlatform();
void GotoURL(FPDF_DOCUMENT document, const CFX_WideStringC& wsURL);
void GetPageViewRect(FPDF_PAGE page, FS_RECTF& dstRect);
bool PopupMenu(FPDF_PAGE page,
FPDF_WIDGET hWidget,
int menuFlag,
CFX_PointF pt);
void Alert(FPDF_WIDESTRING Msg, FPDF_WIDESTRING Title, int Type, int Icon);
void EmailTo(FPDF_FILEHANDLER* fileHandler,
FPDF_WIDESTRING pTo,
FPDF_WIDESTRING pSubject,
FPDF_WIDESTRING pCC,
FPDF_WIDESTRING pBcc,
FPDF_WIDESTRING pMsg);
void UploadTo(FPDF_FILEHANDLER* fileHandler,
int fileFlag,
FPDF_WIDESTRING uploadTo);
FPDF_FILEHANDLER* OpenFile(int fileType,
FPDF_WIDESTRING wsURL,
const char* mode);
IFX_SeekableReadStream* DownloadFromURL(const FX_WCHAR* url);
CFX_WideString PostRequestURL(const FX_WCHAR* wsURL,
const FX_WCHAR* wsData,
const FX_WCHAR* wsContentType,
const FX_WCHAR* wsEncode,
const FX_WCHAR* wsHeader);
FPDF_BOOL PutRequestURL(const FX_WCHAR* wsURL,
const FX_WCHAR* wsData,
const FX_WCHAR* wsEncode);
CFX_WideString GetLanguage();
void PageEvent(int iPageCount, uint32_t dwEventType) const;
#else // PDF_ENABLE_XFA
CPDF_Document* GetPDFDocument() const { return m_pUnderlyingDoc; }
#endif // PDF_ENABLE_XFA
int JS_appAlert(const FX_WCHAR* Msg,
const FX_WCHAR* Title,
uint32_t Type,
uint32_t Icon);
int JS_appResponse(const FX_WCHAR* Question,
const FX_WCHAR* Title,
const FX_WCHAR* Default,
const FX_WCHAR* cLabel,
FPDF_BOOL bPassword,
void* response,
int length);
void JS_appBeep(int nType);
CFX_WideString JS_fieldBrowse();
CFX_WideString JS_docGetFilePath();
void JS_docSubmitForm(void* formData, int length, const FX_WCHAR* URL);
void JS_docmailForm(void* mailData,
int length,
FPDF_BOOL bUI,
const FX_WCHAR* To,
const FX_WCHAR* Subject,
const FX_WCHAR* CC,
const FX_WCHAR* BCC,
const FX_WCHAR* Msg);
void JS_docprint(FPDF_BOOL bUI,
int nStart,
int nEnd,
FPDF_BOOL bSilent,
FPDF_BOOL bShrinkToFit,
FPDF_BOOL bPrintAsImage,
FPDF_BOOL bReverse,
FPDF_BOOL bAnnotations);
void JS_docgotoPage(int nPageNum);
bool IsJSInitiated() const { return m_pInfo && m_pInfo->m_pJsPlatform; }
CFX_ByteString GetAppName() const { return ""; }
CFX_SystemHandler* GetSysHandler() const { return m_pSysHandler.get(); }
FPDF_FORMFILLINFO* GetFormFillInfo() const { return m_pInfo; }
// Creates if not present.
CFFL_InteractiveFormFiller* GetInteractiveFormFiller();
CPDFSDK_AnnotHandlerMgr* GetAnnotHandlerMgr(); // Creates if not present.
IJS_Runtime* GetJSRuntime(); // Creates if not present.
CPDFSDK_ActionHandler* GetActionHander(); // Creates if not present.
CPDFSDK_InterForm* GetInterForm(); // Creates if not present.
private:
std::unique_ptr<CPDFSDK_AnnotHandlerMgr> m_pAnnotHandlerMgr;
std::unique_ptr<CPDFSDK_ActionHandler> m_pActionHandler;
std::unique_ptr<IJS_Runtime> m_pJSRuntime;
FPDF_FORMFILLINFO* const m_pInfo;
std::map<UnderlyingPageType*, std::unique_ptr<CPDFSDK_PageView>> m_PageMap;
std::unique_ptr<CPDFSDK_InterForm> m_pInterForm;
CPDFSDK_Annot::ObservedPtr m_pFocusAnnot;
UnderlyingDocumentType* m_pUnderlyingDoc;
std::unique_ptr<CFFL_InteractiveFormFiller> m_pFormFiller;
std::unique_ptr<CFX_SystemHandler> m_pSysHandler;
bool m_bChangeMask;
bool m_bBeingDestroyed;
};
#endif // FPDFSDK_CPDFSDK_FORMFILLENVIRONMENT_H_
|