diff options
Diffstat (limited to 'fpdfsdk')
-rw-r--r-- | fpdfsdk/include/formfiller/FFL_FormFiller.h | 22 | ||||
-rw-r--r-- | fpdfsdk/include/formfiller/FFL_IFormFiller.h | 21 | ||||
-rw-r--r-- | fpdfsdk/include/formfiller/FFL_ListBox.h | 43 | ||||
-rw-r--r-- | fpdfsdk/include/fsdk_annothandler.h | 2 | ||||
-rw-r--r-- | fpdfsdk/include/fsdk_baseform.h | 30 | ||||
-rw-r--r-- | fpdfsdk/include/fsdk_mgr.h | 20 | ||||
-rw-r--r-- | fpdfsdk/src/formfiller/FFL_FormFiller.cpp | 106 | ||||
-rw-r--r-- | fpdfsdk/src/formfiller/FFL_IFormFiller.cpp | 106 | ||||
-rw-r--r-- | fpdfsdk/src/formfiller/FFL_ListBox.cpp | 52 | ||||
-rw-r--r-- | fpdfsdk/src/fpdfformfill.cpp | 1 | ||||
-rw-r--r-- | fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp | 2 | ||||
-rw-r--r-- | fpdfsdk/src/fsdk_baseform.cpp | 71 | ||||
-rw-r--r-- | fpdfsdk/src/fsdk_mgr.cpp | 100 | ||||
-rw-r--r-- | fpdfsdk/src/pdfwindow/PWL_Wnd.cpp | 44 |
14 files changed, 273 insertions, 347 deletions
diff --git a/fpdfsdk/include/formfiller/FFL_FormFiller.h b/fpdfsdk/include/formfiller/FFL_FormFiller.h index 226766ceed..cf0617598c 100644 --- a/fpdfsdk/include/formfiller/FFL_FormFiller.h +++ b/fpdfsdk/include/formfiller/FFL_FormFiller.h @@ -19,8 +19,6 @@ class CPDFSDK_Document; class CPDFSDK_Widget; -#define CFFL_PageView2PDFWindow CFX_MapPtrTemplate<CPDFSDK_PageView*, CPWL_Wnd*> - struct FFL_KeyStrokeData { CFX_WideString swValue; @@ -78,11 +76,10 @@ public: virtual void DoCut(CPDFSDK_Document* pDocument); virtual void DoPaste(CPDFSDK_Document* pDocument); -public: //CPWL_TimerHandler + // CPWL_TimerHandler virtual void TimerProc(); virtual IFX_SystemHandler* GetSystemHandler() const; -public: virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData); virtual CFX_WideString LoadPopupMenuString(int nIndex); @@ -122,7 +119,6 @@ public: virtual void GetKeyStrokeData(CPDFSDK_PageView* pPageView, FFL_KeyStrokeData& data); virtual FX_BOOL IsFieldFull(CPDFSDK_PageView* pPageView); -public: CPWL_Wnd* GetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bNew); void DestroyPDFWindow(CPDFSDK_PageView* pPageView); void EscapeFiller(CPDFSDK_PageView* pPageView, FX_BOOL bDestroyPDFWindow); @@ -131,7 +127,6 @@ public: virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) = 0; virtual CPDF_Rect GetFocusBox(CPDFSDK_PageView* pPageView); -public: FX_BOOL IsValid() const; CPDF_Rect GetPDFWindowRect() const; @@ -141,14 +136,17 @@ public: virtual void InvalidateRect(double left, double top, double right, double bottom); CPDFDoc_Environment* GetApp(){return m_pApp;} CPDFSDK_Annot* GetSDKAnnot() {return m_pAnnot;} + protected: - CPDFDoc_Environment* m_pApp; - CPDFSDK_Widget* m_pWidget; - CPDFSDK_Annot* m_pAnnot; + using CFFL_PageView2PDFWindow = std::map<CPDFSDK_PageView*, CPWL_Wnd*>; + + CPDFDoc_Environment* m_pApp; + CPDFSDK_Widget* m_pWidget; + CPDFSDK_Annot* m_pAnnot; - FX_BOOL m_bValid; - CFFL_PageView2PDFWindow m_Maps; - CPDF_Point m_ptOldPos; + FX_BOOL m_bValid; + CFFL_PageView2PDFWindow m_Maps; + CPDF_Point m_ptOldPos; }; class CFFL_Button : public CFFL_FormFiller diff --git a/fpdfsdk/include/formfiller/FFL_IFormFiller.h b/fpdfsdk/include/formfiller/FFL_IFormFiller.h index 80bddb74f4..7096170476 100644 --- a/fpdfsdk/include/formfiller/FFL_IFormFiller.h +++ b/fpdfsdk/include/formfiller/FFL_IFormFiller.h @@ -7,13 +7,13 @@ #ifndef FPDFSDK_INCLUDE_FORMFILLER_FFL_IFORMFILLER_H_ #define FPDFSDK_INCLUDE_FORMFILLER_FFL_IFORMFILLER_H_ +#include <map> + #include "FormFiller.h" class CFFL_FormFiller; class CFFL_PrivateData; -#define CFFL_Widget2Filler CFX_MapPtrTemplate<CPDFSDK_Annot*, CFFL_FormFiller*> - class CFFL_IFormFiller : public IPWL_Filler_Notify { public: @@ -52,7 +52,6 @@ public: virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag); virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag); -public: virtual void QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax, int32_t & nRet, FX_FLOAT & fPopupRet); virtual void OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, int32_t nKeyCode, CFX_WideString & strChange, const CFX_WideString& strChangeEx, @@ -66,13 +65,11 @@ public: virtual void OnPopupPreOpen(void* pPrivateData, FX_BOOL& bExit, FX_DWORD nFlag); virtual void OnPopupPostOpen(void* pPrivateData, FX_BOOL& bExit, FX_DWORD nFlag); -public: virtual void BeforeUndo(CPDFSDK_Document* pDocument); virtual void BeforeRedo(CPDFSDK_Document* pDocument); virtual void AfterUndo(CPDFSDK_Document* pDocument); virtual void AfterRedo(CPDFSDK_Document* pDocument); -public: virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument); virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument); virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument); @@ -81,7 +78,6 @@ public: virtual void DoCut(CPDFSDK_Document* pDocument); virtual void DoPaste(CPDFSDK_Document* pDocument); -public: CFFL_FormFiller* GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister); void RemoveFormFiller(CPDFSDK_Annot* pAnnot); @@ -102,12 +98,15 @@ public: void OnPostOpen(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit, FX_UINT nFlag); private: - void UnRegisterFormFiller(CPDFSDK_Annot* pAnnot); - void SetFocusAnnotTab(CPDFSDK_Annot* pWidget, FX_BOOL bSameField, FX_BOOL bNext); + using CFFL_Widget2Filler = std::map<CPDFSDK_Annot*, CFFL_FormFiller*>; + + void UnRegisterFormFiller(CPDFSDK_Annot* pAnnot); + void SetFocusAnnotTab(CPDFSDK_Annot* pWidget, FX_BOOL bSameField, + FX_BOOL bNext); - CPDFDoc_Environment* m_pApp; - CFFL_Widget2Filler m_Maps; - FX_BOOL m_bNotifying; + CPDFDoc_Environment* m_pApp; + CFFL_Widget2Filler m_Maps; + FX_BOOL m_bNotifying; }; class CFFL_PrivateData diff --git a/fpdfsdk/include/formfiller/FFL_ListBox.h b/fpdfsdk/include/formfiller/FFL_ListBox.h index 81abec1cad..4c0813f5c8 100644 --- a/fpdfsdk/include/formfiller/FFL_ListBox.h +++ b/fpdfsdk/include/formfiller/FFL_ListBox.h @@ -7,6 +7,8 @@ #ifndef FPDFSDK_INCLUDE_FORMFILLER_FFL_LISTBOX_H_ #define FPDFSDK_INCLUDE_FORMFILLER_FFL_LISTBOX_H_ +#include <set> + #include "FFL_FormFiller.h" class CBA_FontMap; @@ -14,32 +16,37 @@ class CBA_FontMap; class CFFL_ListBox : public CFFL_FormFiller { public: - CFFL_ListBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget); - virtual ~CFFL_ListBox(); + CFFL_ListBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget); + virtual ~CFFL_ListBox(); - virtual PWL_CREATEPARAM GetCreateParam(); - virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView); + virtual PWL_CREATEPARAM GetCreateParam(); + virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, + CPDFSDK_PageView* pPageView); - virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); + virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, + FX_UINT nFlags); - virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView); - virtual void SaveData(CPDFSDK_PageView* pPageView); + virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView); + virtual void SaveData(CPDFSDK_PageView* pPageView); - virtual void GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, - PDFSDK_FieldAction& fa); - virtual void SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, - const PDFSDK_FieldAction& fa); + virtual void GetActionData(CPDFSDK_PageView* pPageView, + CPDF_AAction::AActionType type, + PDFSDK_FieldAction& fa); + virtual void SetActionData(CPDFSDK_PageView* pPageView, + CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& fa); - virtual void SaveState(CPDFSDK_PageView* pPageView); - virtual void RestoreState(CPDFSDK_PageView* pPageView); + virtual void SaveState(CPDFSDK_PageView* pPageView); + virtual void RestoreState(CPDFSDK_PageView* pPageView); - virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue); - virtual void OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag); + virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView, + FX_BOOL bRestoreValue); + virtual void OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag); private: - CBA_FontMap* m_pFontMap; - CFX_MapPtrTemplate<int, void*> m_OriginSelections; - CFX_ArrayTemplate<int> m_State; + CBA_FontMap* m_pFontMap; + std::set<int> m_OriginSelections; + CFX_ArrayTemplate<int> m_State; }; diff --git a/fpdfsdk/include/fsdk_annothandler.h b/fpdfsdk/include/fsdk_annothandler.h index ce3c20d0e0..b46aae2b23 100644 --- a/fpdfsdk/include/fsdk_annothandler.h +++ b/fpdfsdk/include/fsdk_annothandler.h @@ -309,8 +309,6 @@ private: CPDFDoc_Environment* m_pApp; }; -//#define CBF_Page2Accessible CFX_MapPtrTemplate<CPDFSDK_PageView*, IAccessible*> - typedef int (*AI_COMPARE) (CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); class CPDFSDK_AnnotIterator diff --git a/fpdfsdk/include/fsdk_baseform.h b/fpdfsdk/include/fsdk_baseform.h index f80813837e..8d741380e5 100644 --- a/fpdfsdk/include/fsdk_baseform.h +++ b/fpdfsdk/include/fsdk_baseform.h @@ -13,6 +13,8 @@ #include <ctime> #endif +#include <map> + #include "../../core/include/fpdfapi/fpdf_parser.h" #include "../../core/include/fpdfdoc/fpdf_doc.h" #include "../../core/include/fxcrt/fx_basic.h" @@ -219,9 +221,8 @@ private: IXFA_Widget* m_hXFAWidget; }; -#define CPDFSDK_WidgetMap CFX_MapPtrTemplate<CPDF_FormControl*, CPDFSDK_Widget*> -#define CPDFSDK_XFAWidgetMap CFX_MapPtrTemplate<IXFA_Widget*, CPDFSDK_XFAWidget*> -#define CPDFSDK_FieldSynchronizeMap CFX_MapPtrTemplate<CPDF_FormField*, int> +#define CPDFSDK_XFAWidgetMap CFX_MapPtrTemplate<IXFA_Widget*, CPDFSDK_XFAWidget*> +#define CPDFSDK_FieldSynchronizeMap CFX_MapPtrTemplate<CPDF_FormField*, int> class CPDFSDK_InterForm : public CPDF_FormNotify { @@ -267,7 +268,6 @@ public: void ResetFieldAppearance(CPDF_FormField* pFormField, const FX_WCHAR* sValue, FX_BOOL bValueChanged); void UpdateField(CPDF_FormField* pFormField); -public: FX_BOOL DoAction_Hide(const CPDF_Action& action); FX_BOOL DoAction_SubmitForm(const CPDF_Action& action); FX_BOOL DoAction_ResetForm(const CPDF_Action& action); @@ -295,22 +295,22 @@ private: virtual int BeforeFormImportData(const CPDF_InterForm* pForm); virtual int AfterFormImportData(const CPDF_InterForm* pForm); -private: FX_BOOL FDFToURLEncodedData(CFX_WideString csFDFFile, CFX_WideString csTxtFile); FX_BOOL FDFToURLEncodedData(uint8_t*& pBuf, FX_STRSIZE& nBufSize); int GetPageIndexByAnnotDict(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict) const; void DoFDFBuffer(CFX_ByteString sBuffer); -private: - CPDFSDK_Document* m_pDocument; - CPDF_InterForm* m_pInterForm; - CPDFSDK_WidgetMap m_Map; - CPDFSDK_XFAWidgetMap m_XFAMap; - CPDFSDK_FieldSynchronizeMap m_FieldSynchronizeMap; - FX_BOOL m_bCalculate; - FX_BOOL m_bXfaCalculate; - FX_BOOL m_bXfaValidationsEnabled; - FX_BOOL m_bBusy; + using CPDFSDK_WidgetMap = std::map<CPDF_FormControl*, CPDFSDK_Widget*>; + + CPDFSDK_Document* m_pDocument; + CPDF_InterForm* m_pInterForm; + CPDFSDK_WidgetMap m_Map; + CPDFSDK_XFAWidgetMap m_XFAMap; + CPDFSDK_FieldSynchronizeMap m_FieldSynchronizeMap; + FX_BOOL m_bCalculate; + FX_BOOL m_bXfaCalculate; + FX_BOOL m_bXfaValidationsEnabled; + FX_BOOL m_bBusy; public: FX_BOOL IsNeedHighLight(int nFieldType); diff --git a/fpdfsdk/include/fsdk_mgr.h b/fpdfsdk/include/fsdk_mgr.h index c3fb88edfc..29da5030a0 100644 --- a/fpdfsdk/include/fsdk_mgr.h +++ b/fpdfsdk/include/fsdk_mgr.h @@ -7,6 +7,8 @@ #ifndef FPDFSDK_INCLUDE_FSDK_MGR_H_ #define FPDFSDK_INCLUDE_FSDK_MGR_H_ +#include <map> + #include "../../core/include/fpdftext/fpdf_text.h" #include "../../public/fpdf_formfill.h" #include "../../public/fpdf_fwlevent.h" // cross platform keycode and events define. @@ -720,9 +722,7 @@ public: CPDFSDK_InterForm* GetInterForm() ; CPDFXFA_Document* GetDocument() {return m_pDoc;} - void InitPageView(); - int GetPageViewCount(){return m_pageMap.GetCount();} - void AddPageView(CPDFXFA_Page* pPDFXFAPage, CPDFSDK_PageView* pPageView); + int GetPageViewCount() const { return m_pageMap.size(); } CPDFSDK_PageView* GetPageView(CPDFXFA_Page* pPDFXFAPage, FX_BOOL ReNew = TRUE); CPDFSDK_PageView* GetPageView(int nIndex); CPDFSDK_PageView* GetCurrentView(); @@ -755,13 +755,13 @@ public: FX_BOOL ProcOpenAction(); CPDF_OCContext* GetOCContext(); private: - CFX_MapPtrTemplate<CPDFXFA_Page*, CPDFSDK_PageView*> m_pageMap; - CPDFXFA_Document* m_pDoc; - CPDFSDK_InterForm* m_pInterForm; - CPDFSDK_Annot* m_pFocusAnnot; - CPDFDoc_Environment * m_pEnv; - CPDF_OCContext * m_pOccontent; - FX_BOOL m_bChangeMask; + std::map<CPDFXFA_Page*, CPDFSDK_PageView*> m_pageMap; + CPDFXFA_Document* m_pDoc; + CPDFSDK_InterForm* m_pInterForm; + CPDFSDK_Annot* m_pFocusAnnot; + CPDFDoc_Environment* m_pEnv; + CPDF_OCContext* m_pOccontent; + FX_BOOL m_bChangeMask; }; class CPDFSDK_PageView final { diff --git a/fpdfsdk/src/formfiller/FFL_FormFiller.cpp b/fpdfsdk/src/formfiller/FFL_FormFiller.cpp index 540619692b..7a70493d4c 100644 --- a/fpdfsdk/src/formfiller/FFL_FormFiller.cpp +++ b/fpdfsdk/src/formfiller/FFL_FormFiller.cpp @@ -28,23 +28,14 @@ CFFL_FormFiller::CFFL_FormFiller(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnno CFFL_FormFiller::~CFFL_FormFiller() { - FX_POSITION pos = m_Maps.GetStartPosition(); - while (pos) - { - CPDFSDK_PageView * pPageView = NULL; - CPWL_Wnd* pWnd = NULL; - m_Maps.GetNextAssoc(pos, pPageView, pWnd); - - if (pWnd) - { - CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData(); - pWnd->Destroy(); - delete pWnd; - delete pData; - } - } - m_Maps.RemoveAll(); - + for (auto& it : m_Maps) { + CPWL_Wnd* pWnd = it.second; + CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData(); + pWnd->Destroy(); + delete pWnd; + delete pData; + } + m_Maps.clear(); } void CFFL_FormFiller::SetWindowRect(CPDFSDK_PageView* pPageView, const CPDF_Rect& rcWindow) @@ -430,64 +421,53 @@ PWL_CREATEPARAM CFFL_FormFiller::GetCreateParam() CPWL_Wnd* CFFL_FormFiller::GetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bNew) { - ASSERT(pPageView != NULL); - ASSERT(m_pWidget != NULL); + ASSERT(pPageView); - CPWL_Wnd* pWnd = NULL; - m_Maps.Lookup(pPageView, pWnd); + auto it = m_Maps.find(pPageView); + const bool found = it != m_Maps.end(); + CPWL_Wnd* pWnd = found ? it->second : nullptr; + if (!bNew) + return pWnd; - if (bNew) - { - if (pWnd) - { - CFFL_PrivateData* pPrivateData = (CFFL_PrivateData*)pWnd->GetAttachedData(); - ASSERT(pPrivateData != NULL); + if (found) { + CFFL_PrivateData* pPrivateData = + (CFFL_PrivateData*)pWnd->GetAttachedData(); + if (pPrivateData->nWidgetAge != m_pWidget->GetAppearanceAge()) { + return ResetPDFWindow( + pPageView, m_pWidget->GetValueAge() == pPrivateData->nValueAge); + } + } else { + PWL_CREATEPARAM cp = GetCreateParam(); + cp.hAttachedWnd = (FX_HWND)m_pWidget; - if (pPrivateData->nWidgetAge != m_pWidget->GetAppearanceAge()) - { - return ResetPDFWindow(pPageView, m_pWidget->GetValueAge() == pPrivateData->nValueAge); - } - } - else - { - PWL_CREATEPARAM cp = GetCreateParam(); - cp.hAttachedWnd = (FX_HWND)m_pWidget; + CFFL_PrivateData* pPrivateData = new CFFL_PrivateData; + pPrivateData->pWidget = m_pWidget; + pPrivateData->pPageView = pPageView; + pPrivateData->nWidgetAge = m_pWidget->GetAppearanceAge(); + pPrivateData->nValueAge = 0; - CFFL_PrivateData* pPrivateData = new CFFL_PrivateData; - pPrivateData->pWidget = m_pWidget; - pPrivateData->pPageView = pPageView; - pPrivateData->nWidgetAge = m_pWidget->GetAppearanceAge(); - pPrivateData->nValueAge = 0; + cp.pAttachedData = pPrivateData; - cp.pAttachedData = pPrivateData; + pWnd = NewPDFWindow(cp, pPageView); + m_Maps[pPageView] = pWnd; + } - pWnd = NewPDFWindow(cp, pPageView); - - if (pWnd) - { - m_Maps.SetAt(pPageView, pWnd); - } - } - } - - return pWnd; + return pWnd; } void CFFL_FormFiller::DestroyPDFWindow(CPDFSDK_PageView* pPageView) { - CPWL_Wnd* pWnd = NULL; - m_Maps.Lookup(pPageView, pWnd); + auto it = m_Maps.find(pPageView); + if (it == m_Maps.end()) + return; - if (pWnd) - { - CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData(); - pData->pPageView = NULL; - pWnd->Destroy(); - delete pWnd; - delete pData; - } + CPWL_Wnd* pWnd = it->second; + CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData(); + pWnd->Destroy(); + delete pWnd; + delete pData; - m_Maps.RemoveKey(pPageView); + m_Maps.erase(it); } CPDF_Matrix CFFL_FormFiller::GetWindowMatrix(void* pAttachedData) diff --git a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp index d4ca0235b3..66ae237a31 100644 --- a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp +++ b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp @@ -28,15 +28,9 @@ CFFL_IFormFiller::CFFL_IFormFiller(CPDFDoc_Environment* pApp) : CFFL_IFormFiller::~CFFL_IFormFiller() { - FX_POSITION pos = m_Maps.GetStartPosition(); - while (pos) - { - CPDFSDK_Annot * pAnnot = NULL; - CFFL_FormFiller * pFormFiller = NULL; - m_Maps.GetNextAssoc(pos,pAnnot,pFormFiller); - delete pFormFiller; - } - m_Maps.RemoveAll(); + for (auto& it : m_Maps) + delete it.second; + m_Maps.clear(); } FX_BOOL CFFL_IFormFiller::Annot_HitTest(CPDFSDK_PageView* pPageView,CPDFSDK_Annot* pAnnot, CPDF_Point point) @@ -648,53 +642,46 @@ FX_BOOL CFFL_IFormFiller::IsFillingAllowed(CPDFSDK_Widget* pWidget) CFFL_FormFiller* CFFL_IFormFiller::GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister) { -// ASSERT(pAnnot != NULL); -// ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - - CFFL_FormFiller * pFormFiller = NULL; - m_Maps.Lookup(pAnnot, pFormFiller); - - if (pFormFiller) - return pFormFiller; - - if (bRegister) - { - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - - int nFieldType = pWidget->GetFieldType(); - switch(nFieldType) - { - case FIELDTYPE_PUSHBUTTON: - pFormFiller = new CFFL_PushButton(m_pApp, pWidget); - break; - case FIELDTYPE_CHECKBOX: - pFormFiller = new CFFL_CheckBox(m_pApp, pWidget); - break; - case FIELDTYPE_RADIOBUTTON: - pFormFiller = new CFFL_RadioButton(m_pApp, pWidget); - break; - case FIELDTYPE_TEXTFIELD: - pFormFiller = new CFFL_TextField(m_pApp, pWidget); - break; - case FIELDTYPE_LISTBOX: - pFormFiller = new CFFL_ListBox(m_pApp, pWidget); - break; - case FIELDTYPE_COMBOBOX: - pFormFiller = new CFFL_ComboBox(m_pApp, pWidget); - break; - case FIELDTYPE_UNKNOWN: - default: - pFormFiller = NULL; - break; - } + auto it = m_Maps.find(pAnnot); + if (it != m_Maps.end()) + return it->second; + + if (!bRegister) + return nullptr; + + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + int nFieldType = pWidget->GetFieldType(); + CFFL_FormFiller* pFormFiller; + switch (nFieldType) { + case FIELDTYPE_PUSHBUTTON: + pFormFiller = new CFFL_PushButton(m_pApp, pWidget); + break; + case FIELDTYPE_CHECKBOX: + pFormFiller = new CFFL_CheckBox(m_pApp, pWidget); + break; + case FIELDTYPE_RADIOBUTTON: + pFormFiller = new CFFL_RadioButton(m_pApp, pWidget); + break; + case FIELDTYPE_TEXTFIELD: + pFormFiller = new CFFL_TextField(m_pApp, pWidget); + break; + case FIELDTYPE_LISTBOX: + pFormFiller = new CFFL_ListBox(m_pApp, pWidget); + break; + case FIELDTYPE_COMBOBOX: + pFormFiller = new CFFL_ComboBox(m_pApp, pWidget); + break; + case FIELDTYPE_UNKNOWN: + default: + pFormFiller = nullptr; + break; + } - if (pFormFiller) - { - m_Maps.SetAt(pAnnot, pFormFiller); - } - } + if (!pFormFiller) + return nullptr; - return pFormFiller; + m_Maps[pAnnot] = pFormFiller; + return pFormFiller; } void CFFL_IFormFiller::RemoveFormFiller(CPDFSDK_Annot* pAnnot) @@ -707,11 +694,12 @@ void CFFL_IFormFiller::RemoveFormFiller(CPDFSDK_Annot* pAnnot) void CFFL_IFormFiller::UnRegisterFormFiller(CPDFSDK_Annot* pAnnot) { - CFFL_FormFiller* pFormFiller = nullptr; - if (m_Maps.Lookup(pAnnot,pFormFiller)) { - delete pFormFiller; - m_Maps.RemoveKey(pAnnot); - } + auto it = m_Maps.find(pAnnot); + if (it == m_Maps.end()) + return; + + delete it->second; + m_Maps.erase(it); } void CFFL_IFormFiller::SetFocusAnnotTab(CPDFSDK_Annot* pWidget, FX_BOOL bSameField, FX_BOOL bNext) diff --git a/fpdfsdk/src/formfiller/FFL_ListBox.cpp b/fpdfsdk/src/formfiller/FFL_ListBox.cpp index 4622d4fcef..28dcf340ad 100644 --- a/fpdfsdk/src/formfiller/FFL_ListBox.cpp +++ b/fpdfsdk/src/formfiller/FFL_ListBox.cpp @@ -75,7 +75,7 @@ CPWL_Wnd* CFFL_ListBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView if (pWnd->HasFlag(PLBS_MULTIPLESEL)) { - m_OriginSelections.RemoveAll(); + m_OriginSelections.clear(); FX_BOOL bSetCaret = FALSE; for (int32_t i=0,sz=m_pWidget->CountOptions(); i<sz; i++) @@ -88,7 +88,7 @@ CPWL_Wnd* CFFL_ListBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView bSetCaret = TRUE; } pWnd->Select(i); - m_OriginSelections.SetAt(i, NULL); + m_OriginSelections.insert(i); } } } @@ -115,36 +115,26 @@ FX_BOOL CFFL_ListBox::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlag return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); } -FX_BOOL CFFL_ListBox::IsDataChanged(CPDFSDK_PageView* pPageView) +FX_BOOL CFFL_ListBox::IsDataChanged(CPDFSDK_PageView* pPageView) { - ASSERT(m_pWidget != NULL); - - if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) - { - if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) - { - int nSelCount = 0; - for (int32_t i=0,sz=pListBox->GetCount(); i<sz; i++) - { - if (pListBox->IsItemSelected(i)) - { - void* p = NULL; - if (!m_OriginSelections.Lookup(i, p)) - return TRUE; - - nSelCount++; - } - } - - return nSelCount != m_OriginSelections.GetCount(); - } - else - { - return pListBox->GetCurSel() != m_pWidget->GetSelectedIndex(0); - } - } - - return FALSE; + CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE); + if (!pListBox) + return FALSE; + + if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) { + int nSelCount = 0; + for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; ++i) { + if (pListBox->IsItemSelected(i)) { + if (m_OriginSelections.count(i) == 0) + return TRUE; + + nSelCount++; + } + } + + return nSelCount != m_OriginSelections.size(); + } + return pListBox->GetCurSel() != m_pWidget->GetSelectedIndex(0); } void CFFL_ListBox::SaveData(CPDFSDK_PageView* pPageView) diff --git a/fpdfsdk/src/fpdfformfill.cpp b/fpdfsdk/src/fpdfformfill.cpp index 9e89ea002b..8087bb1d70 100644 --- a/fpdfsdk/src/fpdfformfill.cpp +++ b/fpdfsdk/src/fpdfformfill.cpp @@ -630,7 +630,6 @@ DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle) return; if( CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc()) { - pSDKDoc->InitPageView(); if(((CPDFDoc_Environment*)hHandle)->IsJSInitiated()) pSDKDoc->ProcJavascriptFun(); } diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp index b4ac5f0e17..81f1edcc27 100644 --- a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp +++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp @@ -578,8 +578,6 @@ void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget, CXFA_WidgetAcc* pWidget if (m_iDocType != DOCTYPE_DYNIMIC_XFA || NULL == hWidget)
return;
- int pageViewCount = m_pSDKDoc->GetPageViewCount();
-
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
if (pEnv == NULL)
return;
diff --git a/fpdfsdk/src/fsdk_baseform.cpp b/fpdfsdk/src/fsdk_baseform.cpp index 262e5f8c7b..cff6a38c14 100644 --- a/fpdfsdk/src/fsdk_baseform.cpp +++ b/fpdfsdk/src/fsdk_baseform.cpp @@ -2397,11 +2397,11 @@ CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_Document* pDocument) CPDFSDK_InterForm::~CPDFSDK_InterForm() { - delete m_pInterForm; - m_pInterForm = NULL; + delete m_pInterForm; + m_pInterForm = nullptr; - m_Map.RemoveAll(); - m_XFAMap.RemoveAll(); + m_Map.clear(); + m_XFAMap.RemoveAll(); } FX_BOOL CPDFSDK_InterForm::HighlightWidgets() @@ -2420,45 +2420,40 @@ CPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL b return (CPDFSDK_Widget*)pIterator->GetPrevAnnot(pWidget); } -CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const +CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const { - if(!pControl || !m_pInterForm) return NULL; + if (!pControl || !m_pInterForm) + return nullptr; - CPDFSDK_Widget* pWidget = NULL; - m_Map.Lookup(pControl, pWidget); + CPDFSDK_Widget* pWidget = nullptr; + const auto it = m_Map.find(pControl); + if (it != m_Map.end()) + pWidget = it->second; - if (pWidget) return pWidget; + if (pWidget) + return pWidget; - CPDF_Dictionary* pControlDict = pControl->GetWidget(); - ASSERT(pControlDict != NULL); + CPDF_Dictionary* pControlDict = pControl->GetWidget(); + CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc(); + CPDFSDK_PageView* pPage = nullptr; - ASSERT(m_pDocument != NULL); - CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc(); - - CPDFSDK_PageView* pPage = NULL; - - if (CPDF_Dictionary* pPageDict = pControlDict->GetDict("P")) - { - int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum()); - if (nPageIndex >= 0) - { - pPage = m_pDocument->GetPageView(nPageIndex); - } - } - - if (!pPage) - { - int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict); - if (nPageIndex >= 0) - { - pPage = m_pDocument->GetPageView(nPageIndex); - } - } + if (CPDF_Dictionary* pPageDict = pControlDict->GetDict("P")) { + int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum()); + if (nPageIndex >= 0) { + pPage = m_pDocument->GetPageView(nPageIndex); + } + } - if (pPage) - return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict); + if (!pPage) { + int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict); + if (nPageIndex >= 0) { + pPage = m_pDocument->GetPageView(nPageIndex); + } + } - return NULL; + if (!pPage) + return nullptr; + return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict); } void CPDFSDK_InterForm::GetWidgets(const CFX_WideString& sFieldName, CFX_PtrArray& widgets) @@ -2518,12 +2513,12 @@ int CPDFSDK_InterForm::GetPageIndexByAnnotDict(CPDF_Document* pDocument, CPDF_Di void CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget) { - m_Map.SetAt(pControl, pWidget); + m_Map[pControl] = pWidget; } void CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl) { - m_Map.RemoveKey(pControl); + m_Map.erase(pControl); } void CPDFSDK_InterForm::AddXFAMap(IXFA_Widget* hWidget, CPDFSDK_XFAWidget* pWidget) diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp index 0f71e6eaa0..1169d79a22 100644 --- a/fpdfsdk/src/fsdk_mgr.cpp +++ b/fpdfsdk/src/fsdk_mgr.cpp @@ -315,15 +315,9 @@ CPDFSDK_Document::CPDFSDK_Document(CPDFXFA_Document* pDoc,CPDFDoc_Environment* p CPDFSDK_Document::~CPDFSDK_Document() { - FX_POSITION pos = m_pageMap.GetStartPosition(); - while(pos) - { - CPDFXFA_Page* pPage = NULL; - CPDFSDK_PageView* pPageView = NULL; - m_pageMap.GetNextAssoc(pos, pPage, pPageView); - delete pPageView; - } - m_pageMap.RemoveAll(); + for (auto& it : m_pageMap) + delete it.second; + m_pageMap.clear(); delete m_pInterForm; m_pInterForm = nullptr; @@ -332,36 +326,20 @@ CPDFSDK_Document::~CPDFSDK_Document() m_pOccontent = nullptr; } -void CPDFSDK_Document::InitPageView() -{ - int nCount = m_pDoc->GetPageCount(); - for(int i=0; i<nCount; i++) - { - // To do -// CPDF_Dictionary* pDic = m_pDoc->GetPage(i); -// m_pageMap.SetAt(pDic, pPageView); - } -} - -void CPDFSDK_Document::AddPageView(CPDFXFA_Page* pPDFXFAPage, CPDFSDK_PageView* pPageView) -{ - m_pageMap.SetAt(pPDFXFAPage, pPageView); -} - CPDFSDK_PageView* CPDFSDK_Document::GetPageView(CPDFXFA_Page* pPDFXFAPage, FX_BOOL ReNew) { - CPDFSDK_PageView* pPageView = (CPDFSDK_PageView*)m_pageMap.GetValueAt(pPDFXFAPage); - if(pPageView != NULL) - return pPageView; - if(ReNew) - { - pPageView = new CPDFSDK_PageView(this,pPDFXFAPage); - m_pageMap.SetAt(pPDFXFAPage, pPageView); - //Delay to load all the annotations, to avoid endless loop. - pPageView->LoadFXAnnots(); - } - return pPageView; + auto it = m_pageMap.find(pPDFXFAPage); + if (it != m_pageMap.end()) + return it->second; + if (!ReNew) + return nullptr; + + CPDFSDK_PageView* pPageView = new CPDFSDK_PageView(this, pPDFXFAPage); + m_pageMap[pPDFXFAPage] = pPageView; + // Delay to load all the annotations, to avoid endless loop. + pPageView->LoadFXAnnots(); + return pPageView; } CPDFSDK_PageView* CPDFSDK_Document::GetCurrentView() @@ -372,16 +350,13 @@ CPDFSDK_PageView* CPDFSDK_Document::GetCurrentView() CPDFSDK_PageView* CPDFSDK_Document::GetPageView(int nIndex) { - CPDFSDK_PageView * pTempPageView = NULL; - CPDFXFA_Page * pTempPage = (CPDFXFA_Page*)m_pEnv->FFI_GetPage(m_pDoc,nIndex); - if(!pTempPage) - return NULL; - - m_pageMap.Lookup(pTempPage, pTempPageView); + CPDFXFA_Page* pTempPage = + (CPDFXFA_Page*)m_pEnv->FFI_GetPage(m_pDoc, nIndex); + if (!pTempPage) + return nullptr; - ASSERT(pTempPageView != NULL); - - return pTempPageView; + auto it = m_pageMap.find(pTempPage); + return it->second; } void CPDFSDK_Document:: ProcJavascriptFun() @@ -439,12 +414,16 @@ CPDF_OCContext* CPDFSDK_Document::GetOCContext() void CPDFSDK_Document::ReMovePageView(CPDFXFA_Page* pPDFXFAPage) { - CPDFSDK_PageView* pPageView = (CPDFSDK_PageView*)m_pageMap.GetValueAt(pPDFXFAPage); - if(pPageView && !pPageView->IsLocked()) - { - delete pPageView; - m_pageMap.RemoveKey(pPDFXFAPage); - } + auto it = m_pageMap.find(pPDFXFAPage); + if (it == m_pageMap.end()) + return; + + CPDFSDK_PageView* pPageView = it->second; + if (pPageView->IsLocked()) + return; + + delete pPageView; + m_pageMap.erase(it); } CPDFXFA_Page * CPDFSDK_Document::GetPage(int nIndex) @@ -464,19 +443,12 @@ CPDFSDK_InterForm* CPDFSDK_Document::GetInterForm() void CPDFSDK_Document::UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot) { - - FX_POSITION pos = m_pageMap.GetStartPosition(); - CPDFXFA_Page * pPage = NULL; - CPDFSDK_PageView * pPageView = NULL; - while(pos) - { - m_pageMap.GetNextAssoc(pos, pPage, pPageView); - - if(pPageView != pSender) - { - pPageView->UpdateView(pAnnot); - } - } + for (const auto& it : m_pageMap) { + CPDFSDK_PageView* pPageView = it.second; + if (pPageView != pSender) { + pPageView->UpdateView(pAnnot); + } + } } CPDFSDK_Annot* CPDFSDK_Document::GetFocusAnnot() diff --git a/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp b/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp index dcc6e409a4..89d4babcd7 100644 --- a/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp @@ -4,6 +4,8 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com +#include <map> + #include "../../include/pdfwindow/PDFWindow.h" #include "../../include/pdfwindow/PWL_Wnd.h" #include "../../include/pdfwindow/PWL_Utils.h" @@ -11,10 +13,10 @@ /* -------------------------- CPWL_Timer -------------------------- */ -static CFX_MapPtrTemplate<int32_t, CPWL_Timer*>& GetPWLTimeMap() +static std::map<int32_t, CPWL_Timer*>& GetPWLTimeMap() { // Leak the object at shutdown. - static auto timeMap = new CFX_MapPtrTemplate<int32_t, CPWL_Timer*>; + static auto timeMap = new std::map<int32_t, CPWL_Timer*>; return *timeMap; } @@ -34,33 +36,33 @@ CPWL_Timer::~CPWL_Timer() int32_t CPWL_Timer::SetPWLTimer(int32_t nElapse) { - if (m_nTimerID != 0) KillPWLTimer(); - m_nTimerID = m_pSystemHandler->SetTimer(nElapse, TimerProc); - GetPWLTimeMap().SetAt(m_nTimerID, this); - return m_nTimerID; + if (m_nTimerID != 0) + KillPWLTimer(); + m_nTimerID = m_pSystemHandler->SetTimer(nElapse, TimerProc); + + GetPWLTimeMap()[m_nTimerID] = this; + return m_nTimerID; } void CPWL_Timer::KillPWLTimer() { - if (m_nTimerID != 0) - { - m_pSystemHandler->KillTimer(m_nTimerID); - GetPWLTimeMap().RemoveKey(m_nTimerID); - m_nTimerID = 0; - } + if (m_nTimerID == 0) + return; + + m_pSystemHandler->KillTimer(m_nTimerID); + GetPWLTimeMap().erase(m_nTimerID); + m_nTimerID = 0; } void CPWL_Timer::TimerProc(int32_t idEvent) { - CPWL_Timer* pTimer = NULL; - if (GetPWLTimeMap().Lookup(idEvent, pTimer)) - { - if (pTimer) - { - if (pTimer->m_pAttached) - pTimer->m_pAttached->TimerProc(); - } - } + auto it = GetPWLTimeMap().find(idEvent); + if (it == GetPWLTimeMap().end()) + return; + + CPWL_Timer* pTimer = it->second; + if (pTimer->m_pAttached) + pTimer->m_pAttached->TimerProc(); } /* -------------------------- CPWL_TimerHandler -------------------------- */ |