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 | 19 | ||||
-rw-r--r-- | fpdfsdk/include/fsdk_mgr.h | 18 | ||||
-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/fsdk_baseform.cpp | 70 | ||||
-rw-r--r-- | fpdfsdk/src/fsdk_mgr.cpp | 98 | ||||
-rw-r--r-- | fpdfsdk/src/pdfwindow/PWL_Wnd.cpp | 44 |
13 files changed, 264 insertions, 338 deletions
diff --git a/fpdfsdk/include/formfiller/FFL_FormFiller.h b/fpdfsdk/include/formfiller/FFL_FormFiller.h index e4e04f3ac8..52e1193a51 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); @@ -121,7 +118,6 @@ public: virtual void GetKeyStrokeData(CPDFSDK_PageView* pPageView, FFL_KeyStrokeData& data); -public: CPWL_Wnd* GetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bNew); void DestroyPDFWindow(CPDFSDK_PageView* pPageView); void EscapeFiller(CPDFSDK_PageView* pPageView, FX_BOOL bDestroyPDFWindow); @@ -130,7 +126,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; @@ -140,14 +135,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 ddcc2c5efd..b27d1e68ba 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, @@ -64,13 +63,11 @@ public: virtual void OnKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, int32_t nKeyCode, CFX_WideString & strChange, const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit); -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); @@ -79,7 +76,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); @@ -96,12 +92,15 @@ public: void OnButtonUp(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 521c46e4f1..b4705699c8 100644 --- a/fpdfsdk/include/fsdk_annothandler.h +++ b/fpdfsdk/include/fsdk_annothandler.h @@ -219,8 +219,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 718ff60ab5..edbd5e4efc 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" @@ -165,8 +167,6 @@ private: int32_t m_nValueAge; }; -#define CPDFSDK_WidgetMap CFX_MapPtrTemplate<CPDF_FormControl*, CPDFSDK_Widget*> - class CPDFSDK_InterForm : public CPDF_FormNotify { public: @@ -201,7 +201,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); @@ -227,18 +226,18 @@ 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; - FX_BOOL m_bCalculate; - 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; + FX_BOOL m_bCalculate; + 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 18092bb8bc..43f6bf09f1 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. @@ -372,8 +374,6 @@ public: CPDFSDK_InterForm* GetInterForm() ; CPDF_Document* GetDocument() {return m_pDoc;} - void InitPageView(); - void AddPageView(CPDF_Page* pPDFPage, CPDFSDK_PageView* pPageView); CPDFSDK_PageView* GetPageView(CPDF_Page* pPDFPage, FX_BOOL ReNew = TRUE); CPDFSDK_PageView* GetPageView(int nIndex); CPDFSDK_PageView* GetCurrentView(); @@ -406,13 +406,13 @@ public: FX_BOOL ProcOpenAction(); CPDF_OCContext* GetOCContext(); private: - CFX_MapPtrTemplate<CPDF_Page*, CPDFSDK_PageView*> m_pageMap; - CPDF_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<CPDF_Page*, CPDFSDK_PageView*> m_pageMap; + CPDF_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 7f5ee2ffec..6b211f3b8f 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 464ff3ce6b..62090a5c08 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) @@ -645,53 +639,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) @@ -704,11 +691,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 a8dfe7f7d7..9358c9e194 100644 --- a/fpdfsdk/src/fpdfformfill.cpp +++ b/fpdfsdk/src/fpdfformfill.cpp @@ -339,7 +339,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/fsdk_baseform.cpp b/fpdfsdk/src/fsdk_baseform.cpp index 312d323581..d3742520fa 100644 --- a/fpdfsdk/src/fsdk_baseform.cpp +++ b/fpdfsdk/src/fsdk_baseform.cpp @@ -1666,10 +1666,9 @@ CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_Document* pDocument) CPDFSDK_InterForm::~CPDFSDK_InterForm() { - delete m_pInterForm; - m_pInterForm = NULL; - - m_Map.RemoveAll(); + delete m_pInterForm; + m_pInterForm = nullptr; + m_Map.clear(); } FX_BOOL CPDFSDK_InterForm::HighlightWidgets() @@ -1688,45 +1687,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; - - CPDFSDK_Widget* pWidget = NULL; - m_Map.Lookup(pControl, pWidget); - - if (pWidget) return pWidget; + if (!pControl || !m_pInterForm) + return nullptr; - CPDF_Dictionary* pControlDict = pControl->GetWidget(); - ASSERT(pControlDict != NULL); + CPDFSDK_Widget* pWidget = nullptr; + const auto it = m_Map.find(pControl); + if (it != m_Map.end()) + pWidget = it->second; - ASSERT(m_pDocument != NULL); - CPDF_Document* pDocument = m_pDocument->GetDocument(); + if (pWidget) + return pWidget; - CPDFSDK_PageView* pPage = NULL; + CPDF_Dictionary* pControlDict = pControl->GetWidget(); + CPDF_Document* pDocument = m_pDocument->GetDocument(); + CPDFSDK_PageView* pPage = nullptr; - 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) @@ -1786,12 +1780,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::EnableCalculate(FX_BOOL bEnabled) diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp index 5d4680d978..003753223f 100644 --- a/fpdfsdk/src/fsdk_mgr.cpp +++ b/fpdfsdk/src/fsdk_mgr.cpp @@ -317,14 +317,9 @@ CPDFSDK_Document::CPDFSDK_Document(CPDF_Document* pDoc,CPDFDoc_Environment* pEnv CPDFSDK_Document::~CPDFSDK_Document() { - FX_POSITION pos = m_pageMap.GetStartPosition(); - while (pos) { - CPDF_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; @@ -333,36 +328,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(CPDF_Page* pPDFPage, CPDFSDK_PageView* pPageView) -{ - m_pageMap.SetAt(pPDFPage, pPageView); -} - CPDFSDK_PageView* CPDFSDK_Document::GetPageView(CPDF_Page* pPDFPage, FX_BOOL ReNew) { - CPDFSDK_PageView* pPageView = (CPDFSDK_PageView*)m_pageMap.GetValueAt(pPDFPage); - if(pPageView != NULL) - return pPageView; - if(ReNew) - { - pPageView = new CPDFSDK_PageView(this,pPDFPage); - m_pageMap.SetAt(pPDFPage, pPageView); - //Delay to load all the annotations, to avoid endless loop. - pPageView->LoadFXAnnots(); - } - return pPageView; + auto it = m_pageMap.find(pPDFPage); + if (it != m_pageMap.end()) + return it->second; + if (!ReNew) + return nullptr; + + CPDFSDK_PageView* pPageView = new CPDFSDK_PageView(this, pPDFPage); + m_pageMap[pPDFPage] = pPageView; + // Delay to load all the annotations, to avoid endless loop. + pPageView->LoadFXAnnots(); + return pPageView; } CPDFSDK_PageView* CPDFSDK_Document::GetCurrentView() @@ -373,16 +352,12 @@ CPDFSDK_PageView* CPDFSDK_Document::GetCurrentView() CPDFSDK_PageView* CPDFSDK_Document::GetPageView(int nIndex) { - CPDFSDK_PageView * pTempPageView = NULL; - CPDF_Page * pTempPage = (CPDF_Page*)m_pEnv->FFI_GetPage(m_pDoc,nIndex); - if(!pTempPage) - return NULL; - - m_pageMap.Lookup(pTempPage, pTempPageView); + CPDF_Page* pTempPage = (CPDF_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() @@ -440,12 +415,16 @@ CPDF_OCContext* CPDFSDK_Document::GetOCContext() void CPDFSDK_Document::ReMovePageView(CPDF_Page* pPDFPage) { - CPDFSDK_PageView* pPageView = (CPDFSDK_PageView*)m_pageMap.GetValueAt(pPDFPage); - if(pPageView && !pPageView->IsLocked()) - { - delete pPageView; - m_pageMap.RemoveKey(pPDFPage); - } + auto it = m_pageMap.find(pPDFPage); + if (it == m_pageMap.end()) + return; + + CPDFSDK_PageView* pPageView = it->second; + if (pPageView->IsLocked()) + return; + + delete pPageView; + m_pageMap.erase(it); } CPDF_Page * CPDFSDK_Document::GetPage(int nIndex) @@ -465,19 +444,12 @@ CPDFSDK_InterForm* CPDFSDK_Document::GetInterForm() void CPDFSDK_Document::UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot) { - - FX_POSITION pos = m_pageMap.GetStartPosition(); - CPDF_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 -------------------------- */ |