From 9d8ec5a6e37e8d1d4d4edca9040de234e2d4728f Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Tue, 4 Aug 2015 13:00:21 -0700 Subject: XFA: clang-format all pdfium code. No behavior change. Generated by: find . -name '*.cpp' -o -name '*.h' | \ grep -E -v 'third_party|thirdparties|lpng_v163|tiff_v403' | \ xargs ../../buildtools/mac/clang-format -i Then manually merged https://codereview.chromium.org/1269223002/ See thread "tabs vs spaces" on pdfium@googlegroups.com for discussion. BUG=none --- fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h | 70 +- fpdfsdk/include/formfiller/FFL_CheckBox.h | 34 +- fpdfsdk/include/formfiller/FFL_ComboBox.h | 115 +- fpdfsdk/include/formfiller/FFL_FormFiller.h | 324 +- fpdfsdk/include/formfiller/FFL_IFormFiller.h | 294 +- fpdfsdk/include/formfiller/FFL_ListBox.h | 71 +- fpdfsdk/include/formfiller/FFL_Notify.h | 95 +- fpdfsdk/include/formfiller/FFL_PushButton.h | 22 +- fpdfsdk/include/formfiller/FFL_RadioButton.h | 27 +- fpdfsdk/include/formfiller/FFL_TextField.h | 115 +- fpdfsdk/include/formfiller/FFL_Utils.h | 15 +- fpdfsdk/include/fpdfxfa/fpdfxfa_app.h | 148 +- fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h | 351 +- fpdfsdk/include/fpdfxfa/fpdfxfa_page.h | 91 +- fpdfsdk/include/fpdfxfa/fpdfxfa_util.h | 58 +- fpdfsdk/include/fsdk_actionhandler.h | 149 +- fpdfsdk/include/fsdk_annothandler.h | 761 +-- fpdfsdk/include/fsdk_baseannot.h | 298 +- fpdfsdk/include/fsdk_baseform.h | 623 +-- fpdfsdk/include/fsdk_common.h | 60 +- fpdfsdk/include/fsdk_define.h | 97 +- fpdfsdk/include/fsdk_mgr.h | 1240 ++--- fpdfsdk/include/fsdk_rendercontext.h | 42 +- fpdfsdk/include/fx_systemhandler.h | 151 +- fpdfsdk/include/fxedit/fx_edit.h | 936 ++-- fpdfsdk/include/fxedit/fxet_edit.h | 1430 +++--- fpdfsdk/include/fxedit/fxet_list.h | 624 ++- fpdfsdk/include/javascript/Consts.h | 119 +- fpdfsdk/include/javascript/Document.h | 592 ++- fpdfsdk/include/javascript/Field.h | 929 ++-- fpdfsdk/include/javascript/IJavaScript.h | 230 +- fpdfsdk/include/javascript/Icon.h | 42 +- fpdfsdk/include/javascript/JS_Context.h | 210 +- fpdfsdk/include/javascript/JS_Define.h | 635 +-- fpdfsdk/include/javascript/JS_EventHandler.h | 345 +- fpdfsdk/include/javascript/JS_GlobalData.h | 145 +- fpdfsdk/include/javascript/JS_Object.h | 461 +- fpdfsdk/include/javascript/JS_Runtime.h | 86 +- fpdfsdk/include/javascript/JS_Value.h | 304 +- fpdfsdk/include/javascript/PublicMethods.h | 240 +- fpdfsdk/include/javascript/app.h | 349 +- fpdfsdk/include/javascript/color.h | 117 +- fpdfsdk/include/javascript/console.h | 52 +- fpdfsdk/include/javascript/event.h | 123 +- fpdfsdk/include/javascript/global.h | 133 +- fpdfsdk/include/javascript/report.h | 40 +- fpdfsdk/include/javascript/resource.h | 36 +- fpdfsdk/include/javascript/util.h | 76 +- fpdfsdk/include/jsapi/fxjs_v8.h | 293 +- fpdfsdk/include/pdfwindow/PWL_Button.h | 21 +- fpdfsdk/include/pdfwindow/PWL_Caret.h | 72 +- fpdfsdk/include/pdfwindow/PWL_ComboBox.h | 148 +- fpdfsdk/include/pdfwindow/PWL_Edit.h | 286 +- fpdfsdk/include/pdfwindow/PWL_EditCtrl.h | 315 +- fpdfsdk/include/pdfwindow/PWL_FontMap.h | 207 +- fpdfsdk/include/pdfwindow/PWL_Icon.h | 73 +- fpdfsdk/include/pdfwindow/PWL_IconList.h | 202 +- fpdfsdk/include/pdfwindow/PWL_Label.h | 58 +- fpdfsdk/include/pdfwindow/PWL_ListBox.h | 180 +- fpdfsdk/include/pdfwindow/PWL_ListCtrl.h | 66 +- fpdfsdk/include/pdfwindow/PWL_Note.h | 585 +-- fpdfsdk/include/pdfwindow/PWL_ScrollBar.h | 273 +- fpdfsdk/include/pdfwindow/PWL_Signature.h | 74 +- fpdfsdk/include/pdfwindow/PWL_SpecialButton.h | 61 +- fpdfsdk/include/pdfwindow/PWL_Utils.h | 598 ++- fpdfsdk/include/pdfwindow/PWL_Wnd.h | 831 ++-- fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp | 503 +- fpdfsdk/src/formfiller/FFL_CheckBox.cpp | 213 +- fpdfsdk/src/formfiller/FFL_ComboBox.cpp | 563 +-- fpdfsdk/src/formfiller/FFL_FormFiller.cpp | 1152 +++-- fpdfsdk/src/formfiller/FFL_IFormFiller.cpp | 1937 ++++---- fpdfsdk/src/formfiller/FFL_ListBox.cpp | 431 +- fpdfsdk/src/formfiller/FFL_Notify.cpp | 230 +- fpdfsdk/src/formfiller/FFL_PushButton.cpp | 45 +- fpdfsdk/src/formfiller/FFL_RadioButton.cpp | 205 +- fpdfsdk/src/formfiller/FFL_TextField.cpp | 509 +- fpdfsdk/src/formfiller/FFL_Utils.cpp | 173 +- fpdfsdk/src/fpdf_dataavail.cpp | 246 +- fpdfsdk/src/fpdf_dataavail_embeddertest.cpp | 3 +- fpdfsdk/src/fpdf_ext.cpp | 369 +- fpdfsdk/src/fpdf_flatten.cpp | 983 ++-- fpdfsdk/src/fpdf_progressive.cpp | 170 +- fpdfsdk/src/fpdf_searchex.cpp | 12 +- fpdfsdk/src/fpdf_sysfontinfo.cpp | 286 +- fpdfsdk/src/fpdf_transformpage.cpp | 614 +-- fpdfsdk/src/fpdfdoc.cpp | 494 +- fpdfsdk/src/fpdfdoc_embeddertest.cpp | 3 +- fpdfsdk/src/fpdfeditimg.cpp | 121 +- fpdfsdk/src/fpdfeditpage.cpp | 594 +-- fpdfsdk/src/fpdfformfill.cpp | 1143 ++--- fpdfsdk/src/fpdfformfill_embeddertest.cpp | 4 +- fpdfsdk/src/fpdfppo.cpp | 768 ++- fpdfsdk/src/fpdfsave.cpp | 577 ++- fpdfsdk/src/fpdftext.cpp | 457 +- fpdfsdk/src/fpdftext_embeddertest.cpp | 71 +- fpdfsdk/src/fpdfview.cpp | 1677 +++---- fpdfsdk/src/fpdfview_embeddertest.cpp | 15 +- fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp | 770 ++- fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp | 2506 +++++----- fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp | 429 +- fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp | 91 +- fpdfsdk/src/fsdk_actionhandler.cpp | 1450 +++--- fpdfsdk/src/fsdk_annothandler.cpp | 2101 ++++---- fpdfsdk/src/fsdk_baseannot.cpp | 1618 +++---- fpdfsdk/src/fsdk_baseform.cpp | 5732 +++++++++++----------- fpdfsdk/src/fsdk_mgr.cpp | 2107 ++++---- fpdfsdk/src/fsdk_rendercontext.cpp | 53 +- fpdfsdk/src/fxedit/fxet_ap.cpp | 392 +- fpdfsdk/src/fxedit/fxet_edit.cpp | 5308 ++++++++++----------- fpdfsdk/src/fxedit/fxet_list.cpp | 1511 +++--- fpdfsdk/src/fxedit/fxet_module.cpp | 37 +- fpdfsdk/src/fxedit/fxet_pageobjs.cpp | 1243 ++--- fpdfsdk/src/javascript/Consts.cpp | 373 +- fpdfsdk/src/javascript/Document.cpp | 2991 ++++++------ fpdfsdk/src/javascript/Field.cpp | 6362 ++++++++++++------------- fpdfsdk/src/javascript/Icon.cpp | 51 +- fpdfsdk/src/javascript/JS_Context.cpp | 476 +- fpdfsdk/src/javascript/JS_EventHandler.cpp | 927 ++-- fpdfsdk/src/javascript/JS_GlobalData.cpp | 840 ++-- fpdfsdk/src/javascript/JS_Object.cpp | 171 +- fpdfsdk/src/javascript/JS_Runtime.cpp | 606 ++- fpdfsdk/src/javascript/JS_Value.cpp | 784 ++- fpdfsdk/src/javascript/PublicMethods.cpp | 3844 ++++++++------- fpdfsdk/src/javascript/app.cpp | 1555 +++--- fpdfsdk/src/javascript/color.cpp | 367 +- fpdfsdk/src/javascript/console.cpp | 60 +- fpdfsdk/src/javascript/event.cpp | 590 +-- fpdfsdk/src/javascript/global.cpp | 858 ++-- fpdfsdk/src/javascript/report.cpp | 26 +- fpdfsdk/src/javascript/resource.cpp | 64 +- fpdfsdk/src/javascript/util.cpp | 960 ++-- fpdfsdk/src/jsapi/fxjs_v8.cpp | 2039 ++++---- fpdfsdk/src/pdfwindow/PWL_Button.cpp | 46 +- fpdfsdk/src/pdfwindow/PWL_Caret.cpp | 292 +- fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp | 979 ++-- fpdfsdk/src/pdfwindow/PWL_Edit.cpp | 2170 ++++----- fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp | 985 ++-- fpdfsdk/src/pdfwindow/PWL_FontMap.cpp | 835 ++-- fpdfsdk/src/pdfwindow/PWL_Icon.cpp | 370 +- fpdfsdk/src/pdfwindow/PWL_IconList.cpp | 893 ++-- fpdfsdk/src/pdfwindow/PWL_Label.cpp | 231 +- fpdfsdk/src/pdfwindow/PWL_ListBox.cpp | 922 ++-- fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp | 305 +- fpdfsdk/src/pdfwindow/PWL_Note.cpp | 2869 ++++++----- fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp | 2158 ++++----- fpdfsdk/src/pdfwindow/PWL_Signature.cpp | 274 +- fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp | 99 +- fpdfsdk/src/pdfwindow/PWL_Utils.cpp | 6294 +++++++++++++----------- fpdfsdk/src/pdfwindow/PWL_Wnd.cpp | 1674 +++---- fpdfsdk/src/resource.h | 8 +- 150 files changed, 51481 insertions(+), 51631 deletions(-) (limited to 'fpdfsdk') diff --git a/fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h b/fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h index 3be49fc2de..7978150736 100644 --- a/fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h +++ b/fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h @@ -12,39 +12,43 @@ class CPDF_Dictionary; class CPDFSDK_Annot; -class CBA_FontMap : public CPWL_FontMap -{ -public: - CBA_FontMap(CPDFSDK_Annot* pAnnot, IFX_SystemHandler* pSystemHandler); - CBA_FontMap(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict, IFX_SystemHandler* pSystemHandler); - - virtual ~CBA_FontMap(); - - virtual void Initial(const FX_CHAR* fontname = NULL); - -public: - void SetDefaultFont(CPDF_Font * pFont, const CFX_ByteString & sFontName); - - void Reset(); - void SetAPType(const CFX_ByteString& sAPType); - -protected: - virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset); - virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias); - virtual CPDF_Document* GetDocument(); -private: - CPDF_Font* FindResFontSameCharset(CPDF_Dictionary* pResDict, CFX_ByteString& sFontAlias, - int32_t nCharset); - CPDF_Font* GetAnnotDefaultFont(CFX_ByteString &csNameTag); - void AddFontToAnnotDict(CPDF_Font* pFont, const CFX_ByteString& sAlias); - -private: - CPDF_Document* m_pDocument; - CPDF_Dictionary* m_pAnnotDict; - CPDF_Font* m_pDefaultFont; - CFX_ByteString m_sDefaultFontName; - - CFX_ByteString m_sAPType; +class CBA_FontMap : public CPWL_FontMap { + public: + CBA_FontMap(CPDFSDK_Annot* pAnnot, IFX_SystemHandler* pSystemHandler); + CBA_FontMap(CPDF_Document* pDocument, + CPDF_Dictionary* pAnnotDict, + IFX_SystemHandler* pSystemHandler); + + virtual ~CBA_FontMap(); + + virtual void Initial(const FX_CHAR* fontname = NULL); + + public: + void SetDefaultFont(CPDF_Font* pFont, const CFX_ByteString& sFontName); + + void Reset(); + void SetAPType(const CFX_ByteString& sAPType); + + protected: + virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias, + int32_t nCharset); + virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias); + virtual CPDF_Document* GetDocument(); + + private: + CPDF_Font* FindResFontSameCharset(CPDF_Dictionary* pResDict, + CFX_ByteString& sFontAlias, + int32_t nCharset); + CPDF_Font* GetAnnotDefaultFont(CFX_ByteString& csNameTag); + void AddFontToAnnotDict(CPDF_Font* pFont, const CFX_ByteString& sAlias); + + private: + CPDF_Document* m_pDocument; + CPDF_Dictionary* m_pAnnotDict; + CPDF_Font* m_pDefaultFont; + CFX_ByteString m_sDefaultFontName; + + CFX_ByteString m_sAPType; }; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_CBA_FONTMAP_H_ diff --git a/fpdfsdk/include/formfiller/FFL_CheckBox.h b/fpdfsdk/include/formfiller/FFL_CheckBox.h index 3deeae8aa7..0ac7170a16 100644 --- a/fpdfsdk/include/formfiller/FFL_CheckBox.h +++ b/fpdfsdk/include/formfiller/FFL_CheckBox.h @@ -9,21 +9,25 @@ #include "FFL_FormFiller.h" -class CFFL_CheckBox : public CFFL_Button -{ -public: - CFFL_CheckBox(CPDFDoc_Environment* pApp, CPDFSDK_Widget* pWidget); - virtual ~CFFL_CheckBox(); - - virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView); - - virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags); - virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); - virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - - virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView); - virtual void SaveData(CPDFSDK_PageView* pPageView); +class CFFL_CheckBox : public CFFL_Button { + public: + CFFL_CheckBox(CPDFDoc_Environment* pApp, CPDFSDK_Widget* pWidget); + virtual ~CFFL_CheckBox(); + + virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, + CPDFSDK_PageView* pPageView); + + virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, + FX_UINT nKeyCode, + FX_UINT nFlags); + virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); + virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + + virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView); + virtual void SaveData(CPDFSDK_PageView* pPageView); }; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_CHECKBOX_H_ - diff --git a/fpdfsdk/include/formfiller/FFL_ComboBox.h b/fpdfsdk/include/formfiller/FFL_ComboBox.h index 0ade1bcdb0..1a3c20c94c 100644 --- a/fpdfsdk/include/formfiller/FFL_ComboBox.h +++ b/fpdfsdk/include/formfiller/FFL_ComboBox.h @@ -13,62 +13,69 @@ class CBA_FontMap; class CPDFSDK_Document; -struct FFL_ComboBoxState -{ - int nIndex; - int nStart; - int nEnd; - CFX_WideString sValue; +struct FFL_ComboBoxState { + int nIndex; + int nStart; + int nEnd; + CFX_WideString sValue; }; -class CFFL_ComboBox : public CFFL_FormFiller, public IPWL_FocusHandler, public IPWL_Edit_Notify -{ -public: - CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget); - virtual ~CFFL_ComboBox(); - - 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 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 FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld, const PDFSDK_FieldAction& faNew); - 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_UINT nFlag); - - virtual FX_BOOL IsFieldFull(CPDFSDK_PageView* pPageView); - -public: - virtual void OnSetFocus(CPWL_Wnd* pWnd); - virtual void OnKillFocus(CPWL_Wnd* pWnd); - -public: - virtual void OnAddUndo(CPWL_Edit* pEdit); - -public: - virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument); - virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument); - virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument); - - virtual void DoCopy(CPDFSDK_Document* pDocument); - virtual void DoCut(CPDFSDK_Document* pDocument); - virtual void DoPaste(CPDFSDK_Document* pDocument); - -private: - CFX_WideString GetSelectExportText(); - -private: - CBA_FontMap* m_pFontMap; - FFL_ComboBoxState m_State; +class CFFL_ComboBox : public CFFL_FormFiller, + public IPWL_FocusHandler, + public IPWL_Edit_Notify { + public: + CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget); + virtual ~CFFL_ComboBox(); + + 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 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 FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& faOld, + const PDFSDK_FieldAction& faNew); + 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_UINT nFlag); + + virtual FX_BOOL IsFieldFull(CPDFSDK_PageView* pPageView); + + public: + virtual void OnSetFocus(CPWL_Wnd* pWnd); + virtual void OnKillFocus(CPWL_Wnd* pWnd); + + public: + virtual void OnAddUndo(CPWL_Edit* pEdit); + + public: + virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument); + virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument); + virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument); + + virtual void DoCopy(CPDFSDK_Document* pDocument); + virtual void DoCut(CPDFSDK_Document* pDocument); + virtual void DoPaste(CPDFSDK_Document* pDocument); + + private: + CFX_WideString GetSelectExportText(); + + private: + CBA_FontMap* m_pFontMap; + FFL_ComboBoxState m_State; }; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_COMBOBOX_H_ diff --git a/fpdfsdk/include/formfiller/FFL_FormFiller.h b/fpdfsdk/include/formfiller/FFL_FormFiller.h index 215bba9a04..fab989c14a 100644 --- a/fpdfsdk/include/formfiller/FFL_FormFiller.h +++ b/fpdfsdk/include/formfiller/FFL_FormFiller.h @@ -18,144 +18,196 @@ class CPDFSDK_PageView; class CPDFSDK_Document; class CPDFSDK_Widget; -class CFFL_FormFiller : public IPWL_Provider, public CPWL_TimerHandler -{ -public: - CFFL_FormFiller(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot); - virtual ~CFFL_FormFiller(); - - virtual FX_RECT GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); - virtual void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags); - virtual void OnDrawDeactive(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags); - - virtual void OnCreate(CPDFSDK_Annot* pAnnot); - virtual void OnLoad(CPDFSDK_Annot* pAnnot); - virtual void OnDelete(CPDFSDK_Annot* pAnnot); - - virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); - virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); - - virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point); - virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - - virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags); - virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); - - virtual void OnDeSelected(CPDFSDK_Annot* pAnnot); - virtual void OnSelected(CPDFSDK_Annot* pAnnot); - - virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag); - virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag); - - virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument); - virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument); - virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument); - - virtual void DoCopy(CPDFSDK_Document* pDocument); - virtual void DoCut(CPDFSDK_Document* pDocument); - virtual void DoPaste(CPDFSDK_Document* pDocument); - - // CPWL_TimerHandler - virtual void TimerProc(); - virtual IFX_SystemHandler* GetSystemHandler() const; - - virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData); - virtual CFX_WideString LoadPopupMenuString(int nIndex); - - 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 FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld, - const PDFSDK_FieldAction& faNew); - - 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); - - CPDF_Matrix GetCurMatrix(); - - CPDF_Rect FFLtoPWL(const CPDF_Rect& rect); - CPDF_Rect PWLtoFFL(const CPDF_Rect& rect); - CPDF_Point FFLtoPWL(const CPDF_Point& point); - CPDF_Point PWLtoFFL(const CPDF_Point& point); - - CPDF_Point WndtoPWL(CPDFSDK_PageView* pPageView, const CPDF_Point& pt); - CPDF_Rect FFLtoWnd(CPDFSDK_PageView* pPageView, const CPDF_Rect& rect); - - void SetWindowRect(CPDFSDK_PageView* pPageView, const CPDF_Rect& rcWindow); - CPDF_Rect GetWindowRect(CPDFSDK_PageView* pPageView); - - FX_BOOL CommitData(CPDFSDK_PageView* pPageView, FX_UINT nFlag); - virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView); - virtual void SaveData(CPDFSDK_PageView* pPageView); - - virtual FX_BOOL IsFieldFull(CPDFSDK_PageView* pPageView); - - CPWL_Wnd* GetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bNew); - void DestroyPDFWindow(CPDFSDK_PageView* pPageView); - void EscapeFiller(CPDFSDK_PageView* pPageView, FX_BOOL bDestroyPDFWindow); - - virtual PWL_CREATEPARAM GetCreateParam(); - virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) = 0; - virtual CPDF_Rect GetFocusBox(CPDFSDK_PageView* pPageView); - - FX_BOOL IsValid() const; - CPDF_Rect GetPDFWindowRect() const; - - CPDFSDK_PageView* GetCurPageView(); - void SetChangeMark(); - - virtual void InvalidateRect(double left, double top, double right, double bottom); - CPDFDoc_Environment* GetApp(){return m_pApp;} - CPDFSDK_Annot* GetSDKAnnot() {return m_pAnnot;} - -protected: - using CFFL_PageView2PDFWindow = std::map; - - CPDFDoc_Environment* m_pApp; - CPDFSDK_Widget* m_pWidget; - CPDFSDK_Annot* m_pAnnot; - - FX_BOOL m_bValid; - CFFL_PageView2PDFWindow m_Maps; - CPDF_Point m_ptOldPos; +class CFFL_FormFiller : public IPWL_Provider, public CPWL_TimerHandler { + public: + CFFL_FormFiller(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot); + virtual ~CFFL_FormFiller(); + + virtual FX_RECT GetViewBBox(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot); + virtual void OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags); + virtual void OnDrawDeactive(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags); + + virtual void OnCreate(CPDFSDK_Annot* pAnnot); + virtual void OnLoad(CPDFSDK_Annot* pAnnot); + virtual void OnDelete(CPDFSDK_Annot* pAnnot); + + virtual void OnMouseEnter(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot); + virtual void OnMouseExit(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot); + + virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + short zDelta, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + + virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, + FX_UINT nKeyCode, + FX_UINT nFlags); + virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); + + virtual void OnDeSelected(CPDFSDK_Annot* pAnnot); + virtual void OnSelected(CPDFSDK_Annot* pAnnot); + + virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag); + virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag); + + virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument); + virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument); + virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument); + + virtual void DoCopy(CPDFSDK_Document* pDocument); + virtual void DoCut(CPDFSDK_Document* pDocument); + virtual void DoPaste(CPDFSDK_Document* pDocument); + + // CPWL_TimerHandler + virtual void TimerProc(); + virtual IFX_SystemHandler* GetSystemHandler() const; + + virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData); + virtual CFX_WideString LoadPopupMenuString(int nIndex); + + 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 FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& faOld, + const PDFSDK_FieldAction& faNew); + + 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); + + CPDF_Matrix GetCurMatrix(); + + CPDF_Rect FFLtoPWL(const CPDF_Rect& rect); + CPDF_Rect PWLtoFFL(const CPDF_Rect& rect); + CPDF_Point FFLtoPWL(const CPDF_Point& point); + CPDF_Point PWLtoFFL(const CPDF_Point& point); + + CPDF_Point WndtoPWL(CPDFSDK_PageView* pPageView, const CPDF_Point& pt); + CPDF_Rect FFLtoWnd(CPDFSDK_PageView* pPageView, const CPDF_Rect& rect); + + void SetWindowRect(CPDFSDK_PageView* pPageView, const CPDF_Rect& rcWindow); + CPDF_Rect GetWindowRect(CPDFSDK_PageView* pPageView); + + FX_BOOL CommitData(CPDFSDK_PageView* pPageView, FX_UINT nFlag); + virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView); + virtual void SaveData(CPDFSDK_PageView* pPageView); + + virtual FX_BOOL IsFieldFull(CPDFSDK_PageView* pPageView); + + CPWL_Wnd* GetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bNew); + void DestroyPDFWindow(CPDFSDK_PageView* pPageView); + void EscapeFiller(CPDFSDK_PageView* pPageView, FX_BOOL bDestroyPDFWindow); + + virtual PWL_CREATEPARAM GetCreateParam(); + virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, + CPDFSDK_PageView* pPageView) = 0; + virtual CPDF_Rect GetFocusBox(CPDFSDK_PageView* pPageView); + + FX_BOOL IsValid() const; + CPDF_Rect GetPDFWindowRect() const; + + CPDFSDK_PageView* GetCurPageView(); + void SetChangeMark(); + + virtual void InvalidateRect(double left, + double top, + double right, + double bottom); + CPDFDoc_Environment* GetApp() { return m_pApp; } + CPDFSDK_Annot* GetSDKAnnot() { return m_pAnnot; } + + protected: + using CFFL_PageView2PDFWindow = std::map; + + CPDFDoc_Environment* m_pApp; + CPDFSDK_Widget* m_pWidget; + CPDFSDK_Annot* m_pAnnot; + + FX_BOOL m_bValid; + CFFL_PageView2PDFWindow m_Maps; + CPDF_Point m_ptOldPos; }; -class CFFL_Button : public CFFL_FormFiller -{ -public: - CFFL_Button(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget); - virtual ~CFFL_Button(); - - virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); - virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); - virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags); - - virtual void OnDrawDeactive(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags); -protected: - FX_BOOL m_bMouseIn; - FX_BOOL m_bMouseDown; +class CFFL_Button : public CFFL_FormFiller { + public: + CFFL_Button(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget); + virtual ~CFFL_Button(); + + virtual void OnMouseEnter(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot); + virtual void OnMouseExit(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot); + virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual void OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags); + + virtual void OnDrawDeactive(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags); + + protected: + FX_BOOL m_bMouseIn; + FX_BOOL m_bMouseDown; }; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_FORMFILLER_H_ diff --git a/fpdfsdk/include/formfiller/FFL_IFormFiller.h b/fpdfsdk/include/formfiller/FFL_IFormFiller.h index 7096170476..ece8e4a4a6 100644 --- a/fpdfsdk/include/formfiller/FFL_IFormFiller.h +++ b/fpdfsdk/include/formfiller/FFL_IFormFiller.h @@ -14,109 +14,201 @@ class CFFL_FormFiller; class CFFL_PrivateData; -class CFFL_IFormFiller : public IPWL_Filler_Notify -{ -public: - CFFL_IFormFiller(CPDFDoc_Environment* pApp); - virtual ~CFFL_IFormFiller(); - - virtual FX_BOOL Annot_HitTest(CPDFSDK_PageView* pPageView,CPDFSDK_Annot* pAnnot, CPDF_Point point); - virtual FX_RECT GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); - virtual void OnDraw(CPDFSDK_PageView *pPageView, /*HDC hDC,*/ CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - /*const CRect& rcWindow,*/ FX_DWORD dwFlags); - - - virtual void OnCreate(CPDFSDK_Annot* pAnnot); - virtual void OnLoad(CPDFSDK_Annot* pAnnot); - virtual void OnDelete(CPDFSDK_Annot* pAnnot); - - virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag); - virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag); - - virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point); - virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - - virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags); - virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); - - virtual void OnDeSelected(CPDFSDK_Annot* pAnnot); - virtual void OnSelected(CPDFSDK_Annot* pAnnot); - - virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag); - virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag); - - 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, - int nSelStart, int nSelEnd, - FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag); - virtual void OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_BOOL & bExit, FX_DWORD nFlag) ; - - virtual void OnSetWindowRect(void* pPrivateData, const CPDF_Rect & rcWindow); - 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); - virtual void OnPopupPreOpen(void* pPrivateData, FX_BOOL& bExit, FX_DWORD nFlag); - virtual void OnPopupPostOpen(void* pPrivateData, FX_BOOL& bExit, FX_DWORD nFlag); - - virtual void BeforeUndo(CPDFSDK_Document* pDocument); - virtual void BeforeRedo(CPDFSDK_Document* pDocument); - virtual void AfterUndo(CPDFSDK_Document* pDocument); - virtual void AfterRedo(CPDFSDK_Document* pDocument); - - virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument); - virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument); - virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument); - - virtual void DoCopy(CPDFSDK_Document* pDocument); - virtual void DoCut(CPDFSDK_Document* pDocument); - virtual void DoPaste(CPDFSDK_Document* pDocument); - - CFFL_FormFiller* GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister); - void RemoveFormFiller(CPDFSDK_Annot* pAnnot); - - static FX_BOOL IsVisible(CPDFSDK_Widget* pWidget); - static FX_BOOL IsReadOnly(CPDFSDK_Widget* pWidget); - static FX_BOOL IsFillingAllowed(CPDFSDK_Widget* pWidget); - static FX_BOOL IsValidAnnot(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot); - - void OnKeyStrokeCommit(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag); - void OnValidate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag); - - void OnCalculate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag); - void OnFormat(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag); - void OnButtonUp(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit,FX_UINT nFlag); - void OnClick(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit, FX_UINT nFlag); - void OnFull(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit, FX_UINT nFlag); - void OnPreOpen(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit, FX_UINT nFlag); - void OnPostOpen(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit, FX_UINT nFlag); - -private: - using CFFL_Widget2Filler = std::map; - - 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; +class CFFL_IFormFiller : public IPWL_Filler_Notify { + public: + CFFL_IFormFiller(CPDFDoc_Environment* pApp); + virtual ~CFFL_IFormFiller(); + + virtual FX_BOOL Annot_HitTest(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CPDF_Point point); + virtual FX_RECT GetViewBBox(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot); + virtual void OnDraw(CPDFSDK_PageView* pPageView, + /*HDC hDC,*/ CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + /*const CRect& rcWindow,*/ FX_DWORD dwFlags); + + virtual void OnCreate(CPDFSDK_Annot* pAnnot); + virtual void OnLoad(CPDFSDK_Annot* pAnnot); + virtual void OnDelete(CPDFSDK_Annot* pAnnot); + + virtual void OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlag); + virtual void OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlag); + + virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + short zDelta, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + + virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, + FX_UINT nKeyCode, + FX_UINT nFlags); + virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); + + virtual void OnDeSelected(CPDFSDK_Annot* pAnnot); + virtual void OnSelected(CPDFSDK_Annot* pAnnot); + + virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag); + virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag); + + 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, + int nSelStart, + int nSelEnd, + FX_BOOL bKeyDown, + FX_BOOL& bRC, + FX_BOOL& bExit, + FX_DWORD nFlag); + virtual void OnAfterKeyStroke(FX_BOOL bEditOrList, + void* pPrivateData, + FX_BOOL& bExit, + FX_DWORD nFlag); + + virtual void OnSetWindowRect(void* pPrivateData, const CPDF_Rect& rcWindow); + 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); + virtual void OnPopupPreOpen(void* pPrivateData, + FX_BOOL& bExit, + FX_DWORD nFlag); + virtual void OnPopupPostOpen(void* pPrivateData, + FX_BOOL& bExit, + FX_DWORD nFlag); + + virtual void BeforeUndo(CPDFSDK_Document* pDocument); + virtual void BeforeRedo(CPDFSDK_Document* pDocument); + virtual void AfterUndo(CPDFSDK_Document* pDocument); + virtual void AfterRedo(CPDFSDK_Document* pDocument); + + virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument); + virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument); + virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument); + + virtual void DoCopy(CPDFSDK_Document* pDocument); + virtual void DoCut(CPDFSDK_Document* pDocument); + virtual void DoPaste(CPDFSDK_Document* pDocument); + + CFFL_FormFiller* GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister); + void RemoveFormFiller(CPDFSDK_Annot* pAnnot); + + static FX_BOOL IsVisible(CPDFSDK_Widget* pWidget); + static FX_BOOL IsReadOnly(CPDFSDK_Widget* pWidget); + static FX_BOOL IsFillingAllowed(CPDFSDK_Widget* pWidget); + static FX_BOOL IsValidAnnot(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot); + + void OnKeyStrokeCommit(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bRC, + FX_BOOL& bExit, + FX_DWORD nFlag); + void OnValidate(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bRC, + FX_BOOL& bExit, + FX_DWORD nFlag); + + void OnCalculate(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bExit, + FX_DWORD nFlag); + void OnFormat(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bExit, + FX_DWORD nFlag); + void OnButtonUp(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bReset, + FX_BOOL& bExit, + FX_UINT nFlag); + void OnClick(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bReset, + FX_BOOL& bExit, + FX_UINT nFlag); + void OnFull(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bReset, + FX_BOOL& bExit, + FX_UINT nFlag); + void OnPreOpen(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bReset, + FX_BOOL& bExit, + FX_UINT nFlag); + void OnPostOpen(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bReset, + FX_BOOL& bExit, + FX_UINT nFlag); + + private: + using CFFL_Widget2Filler = std::map; + + 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; }; -class CFFL_PrivateData -{ -public: - CPDFSDK_Widget* pWidget; - CPDFSDK_PageView* pPageView; - int nWidgetAge; - int nValueAge; +class CFFL_PrivateData { + public: + CPDFSDK_Widget* pWidget; + CPDFSDK_PageView* pPageView; + int nWidgetAge; + int nValueAge; }; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_IFORMFILLER_H_ - diff --git a/fpdfsdk/include/formfiller/FFL_ListBox.h b/fpdfsdk/include/formfiller/FFL_ListBox.h index 4c0813f5c8..2e26069e2c 100644 --- a/fpdfsdk/include/formfiller/FFL_ListBox.h +++ b/fpdfsdk/include/formfiller/FFL_ListBox.h @@ -11,43 +11,40 @@ #include "FFL_FormFiller.h" -class CBA_FontMap; - -class CFFL_ListBox : public CFFL_FormFiller -{ -public: - 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 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 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 CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView, - FX_BOOL bRestoreValue); - virtual void OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag); - -private: - CBA_FontMap* m_pFontMap; - std::set m_OriginSelections; - CFX_ArrayTemplate m_State; -}; +class CBA_FontMap; + +class CFFL_ListBox : public CFFL_FormFiller { + public: + 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 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 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 CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView, + FX_BOOL bRestoreValue); + virtual void OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag); + + private: + CBA_FontMap* m_pFontMap; + std::set m_OriginSelections; + CFX_ArrayTemplate m_State; +}; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_LISTBOX_H_ diff --git a/fpdfsdk/include/formfiller/FFL_Notify.h b/fpdfsdk/include/formfiller/FFL_Notify.h index 051a25069f..b051df86cf 100644 --- a/fpdfsdk/include/formfiller/FFL_Notify.h +++ b/fpdfsdk/include/formfiller/FFL_Notify.h @@ -13,44 +13,63 @@ class CFFL_FormFiller; class CPDF_FormField; -class CFFL_Notify -{ -public: - CFFL_Notify(CFFL_FormFiller * pFormFiller); - virtual ~CFFL_Notify(); - -public: - FX_BOOL OnSetFocus(FX_BOOL & bExit); - FX_BOOL OnMouseEnter(FX_BOOL & bExit); - FX_BOOL OnMouseDown(FX_BOOL & bExit); - FX_BOOL OnMouseUp(FX_BOOL & bExit); - FX_BOOL OnMouseExit(FX_BOOL & bExit); - FX_BOOL OnKillFocus(FX_BOOL & bExit); - - FX_BOOL OnCalculate(); - FX_BOOL OnFormat(int iCommitKey); - FX_BOOL OnValidate(CPDF_FormField* pFormField, CFX_WideString& strValue, CFX_WideString & strChange, - const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL bModifier, - FX_BOOL bShift, FX_BOOL & bRC); - FX_BOOL OnKeyStroke(CPDF_FormField* pFormField, int nCommitKey, CFX_WideString& strValue, CFX_WideString& strChange, - const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL bModifier, - FX_BOOL bShift, FX_BOOL bWillCommit, FX_BOOL bFieldFull, - int& nSelStart, int& nSelEnd, FX_BOOL& bRC); - - void BeforeNotify(); - void AfterNotify(); - FX_BOOL IsNotifying() const {return m_nNotifyFlag > 0;} - -private: - FX_BOOL DoAAction(CPDF_AAction::AActionType eAAT, FX_BOOL & bExit); - FX_BOOL FindAAction(CPDF_AAction::AActionType eAAT,CPDF_Action & action); - FX_BOOL FindAAction(CPDF_AAction aaction,CPDF_AAction::AActionType eAAT,CPDF_Action & action); - FX_BOOL ExecuteActionTree(CPDF_AAction::AActionType eAAT, CPDF_Action & action, FX_BOOL& bExit); - FX_BOOL ExecuteAction(CPDF_AAction::AActionType eAAT,CPDF_Action & action,FX_BOOL& bExit); - - CFFL_FormFiller * m_pFormFiller; - FX_BOOL m_bDoActioning; - int32_t m_nNotifyFlag; +class CFFL_Notify { + public: + CFFL_Notify(CFFL_FormFiller* pFormFiller); + virtual ~CFFL_Notify(); + + public: + FX_BOOL OnSetFocus(FX_BOOL& bExit); + FX_BOOL OnMouseEnter(FX_BOOL& bExit); + FX_BOOL OnMouseDown(FX_BOOL& bExit); + FX_BOOL OnMouseUp(FX_BOOL& bExit); + FX_BOOL OnMouseExit(FX_BOOL& bExit); + FX_BOOL OnKillFocus(FX_BOOL& bExit); + + FX_BOOL OnCalculate(); + FX_BOOL OnFormat(int iCommitKey); + FX_BOOL OnValidate(CPDF_FormField* pFormField, + CFX_WideString& strValue, + CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + FX_BOOL& bRC); + FX_BOOL OnKeyStroke(CPDF_FormField* pFormField, + int nCommitKey, + CFX_WideString& strValue, + CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + FX_BOOL bWillCommit, + FX_BOOL bFieldFull, + int& nSelStart, + int& nSelEnd, + FX_BOOL& bRC); + + void BeforeNotify(); + void AfterNotify(); + FX_BOOL IsNotifying() const { return m_nNotifyFlag > 0; } + + private: + FX_BOOL DoAAction(CPDF_AAction::AActionType eAAT, FX_BOOL& bExit); + FX_BOOL FindAAction(CPDF_AAction::AActionType eAAT, CPDF_Action& action); + FX_BOOL FindAAction(CPDF_AAction aaction, + CPDF_AAction::AActionType eAAT, + CPDF_Action& action); + FX_BOOL ExecuteActionTree(CPDF_AAction::AActionType eAAT, + CPDF_Action& action, + FX_BOOL& bExit); + FX_BOOL ExecuteAction(CPDF_AAction::AActionType eAAT, + CPDF_Action& action, + FX_BOOL& bExit); + + CFFL_FormFiller* m_pFormFiller; + FX_BOOL m_bDoActioning; + int32_t m_nNotifyFlag; }; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_NOTIFY_H_ diff --git a/fpdfsdk/include/formfiller/FFL_PushButton.h b/fpdfsdk/include/formfiller/FFL_PushButton.h index 3cfaefb9bd..5c4819400d 100644 --- a/fpdfsdk/include/formfiller/FFL_PushButton.h +++ b/fpdfsdk/include/formfiller/FFL_PushButton.h @@ -9,18 +9,20 @@ #include "FFL_FormFiller.h" -class CFFL_PushButton : public CFFL_Button -{ -public: - CFFL_PushButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot); - virtual ~CFFL_PushButton(); +class CFFL_PushButton : public CFFL_Button { + public: + CFFL_PushButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot); + virtual ~CFFL_PushButton(); - virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView); + 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 void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags); + virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); + virtual void OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags); }; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_PUSHBUTTON_H_ diff --git a/fpdfsdk/include/formfiller/FFL_RadioButton.h b/fpdfsdk/include/formfiller/FFL_RadioButton.h index 46332e07fd..ba7bff4629 100644 --- a/fpdfsdk/include/formfiller/FFL_RadioButton.h +++ b/fpdfsdk/include/formfiller/FFL_RadioButton.h @@ -9,18 +9,23 @@ #include "FFL_FormFiller.h" -class CFFL_RadioButton : public CFFL_Button -{ -public: - CFFL_RadioButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot); - virtual ~CFFL_RadioButton(); +class CFFL_RadioButton : public CFFL_Button { + public: + CFFL_RadioButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot); + virtual ~CFFL_RadioButton(); - virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView); - virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags); - virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); - virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); - virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView); - virtual void SaveData(CPDFSDK_PageView* pPageView); + virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, + CPDFSDK_PageView* pPageView); + virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, + FX_UINT nKeyCode, + FX_UINT nFlags); + virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); + virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point); + virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView); + virtual void SaveData(CPDFSDK_PageView* pPageView); }; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_RADIOBUTTON_H_ diff --git a/fpdfsdk/include/formfiller/FFL_TextField.h b/fpdfsdk/include/formfiller/FFL_TextField.h index cb8df3f9c4..20f478b4e2 100644 --- a/fpdfsdk/include/formfiller/FFL_TextField.h +++ b/fpdfsdk/include/formfiller/FFL_TextField.h @@ -9,67 +9,70 @@ #include "FFL_FormFiller.h" -#define BF_ALIGN_LEFT 0 -#define BF_ALIGN_MIDDLE 1 -#define BF_ALIGN_RIGHT 2 +#define BF_ALIGN_LEFT 0 +#define BF_ALIGN_MIDDLE 1 +#define BF_ALIGN_RIGHT 2 class CBA_FontMap; -struct FFL_TextFieldState -{ - int nStart; - int nEnd; - CFX_WideString sValue; +struct FFL_TextFieldState { + int nStart; + int nEnd; + CFX_WideString sValue; }; -class CFFL_TextField : public CFFL_FormFiller, public IPWL_FocusHandler, public IPWL_Edit_Notify -{ -public: - CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot); - virtual ~CFFL_TextField(); - - 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 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 FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld, - const PDFSDK_FieldAction& faNew); - virtual void SaveState(CPDFSDK_PageView* pPageView); - virtual void RestoreState(CPDFSDK_PageView* pPageView); - - virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue); - - virtual FX_BOOL IsFieldFull(CPDFSDK_PageView* pPageView); - -public: - virtual void OnSetFocus(CPWL_Wnd* pWnd); - virtual void OnKillFocus(CPWL_Wnd* pWnd); - -public: - virtual void OnAddUndo(CPWL_Edit* pEdit); - -public: - virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument); - virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument); - virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument); - - virtual void DoCopy(CPDFSDK_Document* pDocument); - virtual void DoCut(CPDFSDK_Document* pDocument); - virtual void DoPaste(CPDFSDK_Document* pDocument); - -private: - CBA_FontMap* m_pFontMap; - FFL_TextFieldState m_State; - +class CFFL_TextField : public CFFL_FormFiller, + public IPWL_FocusHandler, + public IPWL_Edit_Notify { + public: + CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot); + virtual ~CFFL_TextField(); + + 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 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 FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& faOld, + const PDFSDK_FieldAction& faNew); + virtual void SaveState(CPDFSDK_PageView* pPageView); + virtual void RestoreState(CPDFSDK_PageView* pPageView); + + virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView, + FX_BOOL bRestoreValue); + + virtual FX_BOOL IsFieldFull(CPDFSDK_PageView* pPageView); + + public: + virtual void OnSetFocus(CPWL_Wnd* pWnd); + virtual void OnKillFocus(CPWL_Wnd* pWnd); + + public: + virtual void OnAddUndo(CPWL_Edit* pEdit); + + public: + virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument); + virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument); + virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument); + + virtual void DoCopy(CPDFSDK_Document* pDocument); + virtual void DoCut(CPDFSDK_Document* pDocument); + virtual void DoPaste(CPDFSDK_Document* pDocument); + + private: + CBA_FontMap* m_pFontMap; + FFL_TextFieldState m_State; }; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_TEXTFIELD_H_ diff --git a/fpdfsdk/include/formfiller/FFL_Utils.h b/fpdfsdk/include/formfiller/FFL_Utils.h index fe025eca4b..372a2b6837 100644 --- a/fpdfsdk/include/formfiller/FFL_Utils.h +++ b/fpdfsdk/include/formfiller/FFL_Utils.h @@ -9,15 +9,12 @@ #include "../../../core/include/fpdfapi/fpdf_parser.h" -class CFFL_Utils -{ -public: - static CPDF_Rect MaxRect(const CPDF_Rect& rect1,const CPDF_Rect& rect2); - static CPDF_Rect InflateRect(const CPDF_Rect& crRect, - const FX_FLOAT& fSize); - static CPDF_Rect DeflateRect(const CPDF_Rect& crRect, - const FX_FLOAT& fSize); - static FX_BOOL TraceObject(CPDF_Object* pObj); +class CFFL_Utils { + public: + static CPDF_Rect MaxRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2); + static CPDF_Rect InflateRect(const CPDF_Rect& crRect, const FX_FLOAT& fSize); + static CPDF_Rect DeflateRect(const CPDF_Rect& crRect, const FX_FLOAT& fSize); + static FX_BOOL TraceObject(CPDF_Object* pObj); }; #endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_UTILS_H_ diff --git a/fpdfsdk/include/fpdfxfa/fpdfxfa_app.h b/fpdfsdk/include/fpdfxfa/fpdfxfa_app.h index e650c6235b..bf96993bd3 100644 --- a/fpdfsdk/include/fpdfxfa/fpdfxfa_app.h +++ b/fpdfsdk/include/fpdfxfa/fpdfxfa_app.h @@ -10,73 +10,87 @@ class IFXJS_Runtime; class CJS_RuntimeFactory; -class CPDFXFA_App : public IXFA_AppProvider -{ -public: - static CPDFXFA_App* GetInstance(); - static void ReleaseInstance(); - - CPDFXFA_App(); - ~CPDFXFA_App() override; - - FX_BOOL Initialize(); - IXFA_App* GetXFAApp() { return m_pXFAApp; } - - FX_BOOL AddFormFillEnv(CPDFDoc_Environment* pEnv); - FX_BOOL RemoveFormFillEnv(CPDFDoc_Environment* pEnv); - - FXJSE_HRUNTIME GetJSERuntime() { return m_hJSERuntime; } - void ReleaseRuntime(); - FX_BOOL InitRuntime(FX_BOOL bReset=FALSE); - - CJS_RuntimeFactory* GetRuntimeFactory() { return m_pJSRuntimeFactory; } - - // IFXA_AppProvider: - void GetAppType(CFX_WideString &wsAppType) override; - void SetAppType(const CFX_WideStringC& wsAppType) override; - - void GetLanguage(CFX_WideString &wsLanguage) override; - void GetPlatform(CFX_WideString &wsPlatform) override; - void GetVariation(CFX_WideString &wsVariation) override; - void GetVersion(CFX_WideString &wsVersion) override; - void GetFoxitVersion(CFX_WideString &wsFoxitVersion) override { - wsFoxitVersion = L"7.0"; - } - - void GetAppName(CFX_WideString& wsName) override; - void GetFoxitAppName(CFX_WideString& wsFoxitName) override { - wsFoxitName = L"Foxit"; - } - - void Beep(FX_DWORD dwType) override; - int32_t MsgBox(const CFX_WideStringC& wsMessage, const CFX_WideStringC& wsTitle, FX_DWORD dwIconType, FX_DWORD dwButtonType) override; - void Response(CFX_WideString &wsAnswer, const CFX_WideStringC& wsQuestion, const CFX_WideStringC& wsTitle, - const CFX_WideStringC& wsDefaultAnswer, FX_BOOL bMark) override; - - int32_t GetDocumentCountInBatch() override; - int32_t GetCurDocumentInBatch() override; - - IFX_FileRead* DownloadURL(const CFX_WideStringC& wsURL) override; - FX_BOOL PostRequestURL(const CFX_WideStringC& wsURL, const CFX_WideStringC& wsData, const CFX_WideStringC& wsContentType, - const CFX_WideStringC& wsEncode, const CFX_WideStringC& wsHeader, CFX_WideString &wsResponse) override; - FX_BOOL PutRequestURL(const CFX_WideStringC& wsURL, const CFX_WideStringC& wsData, const CFX_WideStringC& wsEncode) override; - - void LoadString(int32_t iStringID, CFX_WideString &wsString) override; - FX_BOOL ShowFileDialog(const CFX_WideStringC& wsTitle, const CFX_WideStringC& wsFilter, CFX_WideStringArray &wsPathArr, FX_BOOL bOpen) override; - IFWL_AdapterTimerMgr* GetTimerMgr() override; - - CFX_ArrayTemplate m_pEnvList; - -protected: - static CPDFXFA_App* g_pApp; - - FX_BOOL m_bInitRuntime; - IXFA_App* m_pXFAApp; - IXFA_FontMgr* m_pFontMgr; - FXJSE_HRUNTIME m_hJSERuntime; - IFXJS_Runtime* m_pJSRuntime; - CJS_RuntimeFactory* m_pJSRuntimeFactory; - CFX_WideString m_csAppType; +class CPDFXFA_App : public IXFA_AppProvider { + public: + static CPDFXFA_App* GetInstance(); + static void ReleaseInstance(); + + CPDFXFA_App(); + ~CPDFXFA_App() override; + + FX_BOOL Initialize(); + IXFA_App* GetXFAApp() { return m_pXFAApp; } + + FX_BOOL AddFormFillEnv(CPDFDoc_Environment* pEnv); + FX_BOOL RemoveFormFillEnv(CPDFDoc_Environment* pEnv); + + FXJSE_HRUNTIME GetJSERuntime() { return m_hJSERuntime; } + void ReleaseRuntime(); + FX_BOOL InitRuntime(FX_BOOL bReset = FALSE); + + CJS_RuntimeFactory* GetRuntimeFactory() { return m_pJSRuntimeFactory; } + + // IFXA_AppProvider: + void GetAppType(CFX_WideString& wsAppType) override; + void SetAppType(const CFX_WideStringC& wsAppType) override; + + void GetLanguage(CFX_WideString& wsLanguage) override; + void GetPlatform(CFX_WideString& wsPlatform) override; + void GetVariation(CFX_WideString& wsVariation) override; + void GetVersion(CFX_WideString& wsVersion) override; + void GetFoxitVersion(CFX_WideString& wsFoxitVersion) override { + wsFoxitVersion = L"7.0"; + } + + void GetAppName(CFX_WideString& wsName) override; + void GetFoxitAppName(CFX_WideString& wsFoxitName) override { + wsFoxitName = L"Foxit"; + } + + void Beep(FX_DWORD dwType) override; + int32_t MsgBox(const CFX_WideStringC& wsMessage, + const CFX_WideStringC& wsTitle, + FX_DWORD dwIconType, + FX_DWORD dwButtonType) override; + void Response(CFX_WideString& wsAnswer, + const CFX_WideStringC& wsQuestion, + const CFX_WideStringC& wsTitle, + const CFX_WideStringC& wsDefaultAnswer, + FX_BOOL bMark) override; + + int32_t GetDocumentCountInBatch() override; + int32_t GetCurDocumentInBatch() override; + + IFX_FileRead* DownloadURL(const CFX_WideStringC& wsURL) override; + FX_BOOL PostRequestURL(const CFX_WideStringC& wsURL, + const CFX_WideStringC& wsData, + const CFX_WideStringC& wsContentType, + const CFX_WideStringC& wsEncode, + const CFX_WideStringC& wsHeader, + CFX_WideString& wsResponse) override; + FX_BOOL PutRequestURL(const CFX_WideStringC& wsURL, + const CFX_WideStringC& wsData, + const CFX_WideStringC& wsEncode) override; + + void LoadString(int32_t iStringID, CFX_WideString& wsString) override; + FX_BOOL ShowFileDialog(const CFX_WideStringC& wsTitle, + const CFX_WideStringC& wsFilter, + CFX_WideStringArray& wsPathArr, + FX_BOOL bOpen) override; + IFWL_AdapterTimerMgr* GetTimerMgr() override; + + CFX_ArrayTemplate m_pEnvList; + + protected: + static CPDFXFA_App* g_pApp; + + FX_BOOL m_bInitRuntime; + IXFA_App* m_pXFAApp; + IXFA_FontMgr* m_pFontMgr; + FXJSE_HRUNTIME m_hJSERuntime; + IFXJS_Runtime* m_pJSRuntime; + CJS_RuntimeFactory* m_pJSRuntimeFactory; + CFX_WideString m_csAppType; }; #endif // FPDFXFA_APP_H_ diff --git a/fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h b/fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h index f8d691ebfa..27e7a91cd5 100644 --- a/fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h +++ b/fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h @@ -1,7 +1,7 @@ // Copyright 2014 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 FPDFXFA_DOC_H_ @@ -18,142 +18,219 @@ class IFXJS_Runtime; class IFXJS_Context; class IXFA_DocHandler; -class CPDFXFA_Document : public IXFA_DocProvider -{ -public: - CPDFXFA_Document(CPDF_Document* pPDFDoc, CPDFXFA_App* pProvider); - ~CPDFXFA_Document(); - - FX_BOOL LoadXFADoc(); - CPDFXFA_App* GetApp() {return m_pApp;} - CPDF_Document* GetPDFDoc() { return m_pPDFDoc; } - IXFA_Doc* GetXFADoc() { return m_pXFADoc; } - IXFA_DocView* GetXFADocView() { return m_pXFADocView; } - - int GetPageCount(); - CPDFXFA_Page* GetPage(int page_index); - CPDFXFA_Page* GetPage(IXFA_PageView* pPage); - void RemovePage(CPDFXFA_Page* page); - int GetDocType(){ return m_iDocType; } - - CPDFSDK_Document* GetSDKDocument(CPDFDoc_Environment* pFormFillEnv); - void ReleaseSDKDoc(); - - void FXRect2PDFRect(const CFX_RectF& fxRectF, CPDF_Rect& pdfRect); - -public: - virtual void SetChangeMark(IXFA_Doc* hDoc); - virtual FX_BOOL GetChangeMark(IXFA_Doc* hDoc); - //used in dynamic xfa, dwFlags refer to XFA_INVALIDATE_XXX macros. - virtual void InvalidateRect(IXFA_PageView* pPageView, const CFX_RectF& rt, FX_DWORD dwFlags = 0); - //used in static xfa, dwFlags refer to XFA_INVALIDATE_XXX macros. - virtual void InvalidateRect(IXFA_Widget* hWidget, FX_DWORD dwFlags = 0); - //show or hide caret - virtual void DisplayCaret(IXFA_Widget* hWidget, FX_BOOL bVisible, const CFX_RectF* pRtAnchor); - //dwPos: (0:bottom 1:top) - virtual FX_BOOL GetPopupPos(IXFA_Widget* hWidget, FX_FLOAT fMinPopup, FX_FLOAT fMaxPopup, - const CFX_RectF &rtAnchor, CFX_RectF &rtPopup); - virtual FX_BOOL PopupMenu(IXFA_Widget* hWidget, CFX_PointF ptPopup, const CFX_RectF* pRectExclude = NULL); - - //dwFlags XFA_PAGEVIEWEVENT_Added, XFA_PAGEVIEWEVENT_Removing - virtual void PageViewEvent(IXFA_PageView* pPageView, FX_DWORD dwFlags); - //dwEvent refer to XFA_WIDGETEVENT_XXX - virtual void WidgetEvent(IXFA_Widget* hWidget, CXFA_WidgetAcc* pWidgetData, FX_DWORD dwEvent, void* pParam = NULL, void* pAdditional = NULL); - - //return true if render it. - virtual FX_BOOL RenderCustomWidget(IXFA_Widget* hWidget, CFX_Graphics* pGS, CFX_Matrix* pMatrix, const CFX_RectF& rtUI){return FALSE;} - - //host method - virtual int32_t CountPages(IXFA_Doc* hDoc); - virtual int32_t GetCurrentPage(IXFA_Doc* hDoc); - virtual void SetCurrentPage(IXFA_Doc* hDoc, int32_t iCurPage); - virtual FX_BOOL IsCalculationsEnabled(IXFA_Doc* hDoc); - virtual void SetCalculationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled); - virtual void GetTitle(IXFA_Doc* hDoc, CFX_WideString &wsTitle); - virtual void SetTitle(IXFA_Doc* hDoc, const CFX_WideStringC& wsTitle); - virtual void ExportData(IXFA_Doc* hDoc, const CFX_WideStringC& wsFilePath, FX_BOOL bXDP = TRUE); - virtual void ImportData(IXFA_Doc* hDoc, const CFX_WideStringC& wsFilePath); - virtual void GotoURL(IXFA_Doc* hDoc, const CFX_WideStringC& bsURL, FX_BOOL bAppend = TRUE); - virtual FX_BOOL IsValidationsEnabled(IXFA_Doc* hDoc); - virtual void SetValidationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled); - virtual void SetFocusWidget(IXFA_Doc* hDoc, IXFA_Widget* hWidget); - virtual void Print(IXFA_Doc* hDoc, int32_t nStartPage, int32_t nEndPage, FX_DWORD dwOptions); - - //LayoutPseudo method - virtual int32_t AbsPageCountInBatch(IXFA_Doc* hDoc){return 0;} - virtual int32_t AbsPageInBatch(IXFA_Doc* hDoc, IXFA_Widget* hWidget){return 0;} - virtual int32_t SheetCountInBatch(IXFA_Doc* hDoc){return 0;} - virtual int32_t SheetInBatch(IXFA_Doc* hDoc, IXFA_Widget* hWidget){return 0;} - - //SignaturePseudoModel method - //TODO: - virtual int32_t Verify(IXFA_Doc* hDoc, CXFA_Node* pSigNode, FX_BOOL bUsed = TRUE/*, SecurityHandler* pHandler, SignatureInfo &info*/) {return 0;} - virtual FX_BOOL Sign(IXFA_Doc* hDoc, CXFA_NodeList* pNodeList, const CFX_WideStringC& wsExpression, const CFX_WideStringC& wsXMLIdent, const CFX_WideStringC& wsValue = FX_WSTRC(L"open"), FX_BOOL bUsed = TRUE/*, SecurityHandler* pHandler = NULL, SignatureInfo &info*/) {return 0;} - virtual CXFA_NodeList* Enumerate(IXFA_Doc* hDoc) {return 0;} - virtual FX_BOOL Clear(IXFA_Doc* hDoc, CXFA_Node* pSigNode, FX_BOOL bCleared = TRUE) {return 0;} - - //Get document path - virtual void GetURL(IXFA_Doc* hDoc, CFX_WideString &wsDocURL); - virtual FX_ARGB GetHighlightColor(IXFA_Doc* hDoc); - virtual void AddDoRecord(IXFA_Widget* hWidget); - /** - *Submit data to email, http, ftp. - * @param[in] hDoc The document handler. - * @param[in] eFormat Determines the format in which the data will be submitted. XFA_ATTRIBUTEENUM_Xdp, XFA_ATTRIBUTEENUM_Xml... - * @param[in] wsTarget The URL to which the data will be submitted. - * @param[in] eEncoding The encoding of text content. - * @param[in] pXDPContent Controls what subset of the data is submitted, used only when the format property is xdp. - * @param[in] bEmbedPDF, specifies whether PDF is embedded in the submitted content or not. - */ - virtual FX_BOOL SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit); - - virtual FX_BOOL CheckWord(IXFA_Doc* hDoc, const CFX_ByteStringC& sWord){return FALSE;} - virtual FX_BOOL GetSuggestWords(IXFA_Doc* hDoc, const CFX_ByteStringC& sWord, CFX_ByteStringArray& sSuggest){return FALSE;} - - //Get PDF javascript object, set the object to hValue. - virtual FX_BOOL GetPDFScriptObject(IXFA_Doc* hDoc, const CFX_ByteStringC& utf8Name, FXJSE_HVALUE hValue); - - virtual FX_BOOL GetGlobalProperty(IXFA_Doc* hDoc, const CFX_ByteStringC& szPropName, FXJSE_HVALUE hValue); - virtual FX_BOOL SetGlobalProperty(IXFA_Doc* hDoc, const CFX_ByteStringC& szPropName, FXJSE_HVALUE hValue); - virtual CPDF_Document* OpenPDF(IXFA_Doc* hDoc, IFX_FileRead* pFile, FX_BOOL bTakeOverFile){return NULL;} - - virtual IFX_FileRead* OpenLinkedFile(IXFA_Doc* hDoc, const CFX_WideString& wsLink); - - FX_BOOL _GetHValueByName(const CFX_ByteStringC& utf8Name, FXJSE_HVALUE hValue, IFXJS_Runtime* runTime); - FX_BOOL _OnBeforeNotifySumbit(); - void _OnAfterNotifySumbit(); - FX_BOOL _NotifySubmit(FX_BOOL bPrevOrPost); - FX_BOOL _SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit); - FX_BOOL _MailToInfo(CFX_WideString& csURL, CFX_WideString& csToAddress, CFX_WideString& csCCAddress, CFX_WideString& csBCCAddress, CFX_WideString& csSubject, CFX_WideString& csMsg); - FX_BOOL _ExportSubmitFile(FPDF_FILEHANDLER* ppFileHandler, int fileType, FPDF_DWORD encodeType, FPDF_DWORD flag = 0x01111111); - void _ToXFAContentFlags(CFX_WideString csSrcContent, FPDF_DWORD& flag); - void _ClearChangeMark(); - -private: - void CloseXFADoc(IXFA_DocHandler* pDoc) { - if (pDoc) { - pDoc->CloseDoc(m_pXFADoc); - pDoc->ReleaseDoc(m_pXFADoc); - m_pXFADoc = NULL; - m_pXFADocView = NULL; - } - } - - CPDF_Document* m_pPDFDoc; - IXFA_Doc* m_pXFADoc; - IXFA_DocView* m_pXFADocView; - CFX_ArrayTemplate m_XFAPageList; - - CPDFSDK_Document* m_pSDKDoc; - CPDFXFA_App* m_pApp; - - CFX_MapByteStringToPtr m_XfaGlobalProperty; - - CFX_MapByteStringToPtr m_ValueMap; - - IFXJS_Context* m_pJSContext; - - int m_iDocType; +class CPDFXFA_Document : public IXFA_DocProvider { + public: + CPDFXFA_Document(CPDF_Document* pPDFDoc, CPDFXFA_App* pProvider); + ~CPDFXFA_Document(); + + FX_BOOL LoadXFADoc(); + CPDFXFA_App* GetApp() { return m_pApp; } + CPDF_Document* GetPDFDoc() { return m_pPDFDoc; } + IXFA_Doc* GetXFADoc() { return m_pXFADoc; } + IXFA_DocView* GetXFADocView() { return m_pXFADocView; } + + int GetPageCount(); + CPDFXFA_Page* GetPage(int page_index); + CPDFXFA_Page* GetPage(IXFA_PageView* pPage); + void RemovePage(CPDFXFA_Page* page); + int GetDocType() { return m_iDocType; } + + CPDFSDK_Document* GetSDKDocument(CPDFDoc_Environment* pFormFillEnv); + void ReleaseSDKDoc(); + + void FXRect2PDFRect(const CFX_RectF& fxRectF, CPDF_Rect& pdfRect); + + public: + virtual void SetChangeMark(IXFA_Doc* hDoc); + virtual FX_BOOL GetChangeMark(IXFA_Doc* hDoc); + // used in dynamic xfa, dwFlags refer to XFA_INVALIDATE_XXX macros. + virtual void InvalidateRect(IXFA_PageView* pPageView, + const CFX_RectF& rt, + FX_DWORD dwFlags = 0); + // used in static xfa, dwFlags refer to XFA_INVALIDATE_XXX macros. + virtual void InvalidateRect(IXFA_Widget* hWidget, FX_DWORD dwFlags = 0); + // show or hide caret + virtual void DisplayCaret(IXFA_Widget* hWidget, + FX_BOOL bVisible, + const CFX_RectF* pRtAnchor); + // dwPos: (0:bottom 1:top) + virtual FX_BOOL GetPopupPos(IXFA_Widget* hWidget, + FX_FLOAT fMinPopup, + FX_FLOAT fMaxPopup, + const CFX_RectF& rtAnchor, + CFX_RectF& rtPopup); + virtual FX_BOOL PopupMenu(IXFA_Widget* hWidget, + CFX_PointF ptPopup, + const CFX_RectF* pRectExclude = NULL); + + // dwFlags XFA_PAGEVIEWEVENT_Added, XFA_PAGEVIEWEVENT_Removing + virtual void PageViewEvent(IXFA_PageView* pPageView, FX_DWORD dwFlags); + // dwEvent refer to XFA_WIDGETEVENT_XXX + virtual void WidgetEvent(IXFA_Widget* hWidget, + CXFA_WidgetAcc* pWidgetData, + FX_DWORD dwEvent, + void* pParam = NULL, + void* pAdditional = NULL); + + // return true if render it. + virtual FX_BOOL RenderCustomWidget(IXFA_Widget* hWidget, + CFX_Graphics* pGS, + CFX_Matrix* pMatrix, + const CFX_RectF& rtUI) { + return FALSE; + } + + // host method + virtual int32_t CountPages(IXFA_Doc* hDoc); + virtual int32_t GetCurrentPage(IXFA_Doc* hDoc); + virtual void SetCurrentPage(IXFA_Doc* hDoc, int32_t iCurPage); + virtual FX_BOOL IsCalculationsEnabled(IXFA_Doc* hDoc); + virtual void SetCalculationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled); + virtual void GetTitle(IXFA_Doc* hDoc, CFX_WideString& wsTitle); + virtual void SetTitle(IXFA_Doc* hDoc, const CFX_WideStringC& wsTitle); + virtual void ExportData(IXFA_Doc* hDoc, + const CFX_WideStringC& wsFilePath, + FX_BOOL bXDP = TRUE); + virtual void ImportData(IXFA_Doc* hDoc, const CFX_WideStringC& wsFilePath); + virtual void GotoURL(IXFA_Doc* hDoc, + const CFX_WideStringC& bsURL, + FX_BOOL bAppend = TRUE); + virtual FX_BOOL IsValidationsEnabled(IXFA_Doc* hDoc); + virtual void SetValidationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled); + virtual void SetFocusWidget(IXFA_Doc* hDoc, IXFA_Widget* hWidget); + virtual void Print(IXFA_Doc* hDoc, + int32_t nStartPage, + int32_t nEndPage, + FX_DWORD dwOptions); + + // LayoutPseudo method + virtual int32_t AbsPageCountInBatch(IXFA_Doc* hDoc) { return 0; } + virtual int32_t AbsPageInBatch(IXFA_Doc* hDoc, IXFA_Widget* hWidget) { + return 0; + } + virtual int32_t SheetCountInBatch(IXFA_Doc* hDoc) { return 0; } + virtual int32_t SheetInBatch(IXFA_Doc* hDoc, IXFA_Widget* hWidget) { + return 0; + } + + // SignaturePseudoModel method + // TODO: + virtual int32_t Verify( + IXFA_Doc* hDoc, + CXFA_Node* pSigNode, + FX_BOOL + bUsed = TRUE /*, SecurityHandler* pHandler, SignatureInfo &info*/) { + return 0; + } + virtual FX_BOOL Sign( + IXFA_Doc* hDoc, + CXFA_NodeList* pNodeList, + const CFX_WideStringC& wsExpression, + const CFX_WideStringC& wsXMLIdent, + const CFX_WideStringC& wsValue = FX_WSTRC(L"open"), + FX_BOOL + bUsed = TRUE /*, SecurityHandler* pHandler = NULL, SignatureInfo &info*/) { + return 0; + } + virtual CXFA_NodeList* Enumerate(IXFA_Doc* hDoc) { return 0; } + virtual FX_BOOL Clear(IXFA_Doc* hDoc, + CXFA_Node* pSigNode, + FX_BOOL bCleared = TRUE) { + return 0; + } + + // Get document path + virtual void GetURL(IXFA_Doc* hDoc, CFX_WideString& wsDocURL); + virtual FX_ARGB GetHighlightColor(IXFA_Doc* hDoc); + virtual void AddDoRecord(IXFA_Widget* hWidget); + /** + *Submit data to email, http, ftp. + * @param[in] hDoc The document handler. + * @param[in] eFormat Determines the format in which the data will be + *submitted. XFA_ATTRIBUTEENUM_Xdp, XFA_ATTRIBUTEENUM_Xml... + * @param[in] wsTarget The URL to which the data will be submitted. + * @param[in] eEncoding The encoding of text content. + * @param[in] pXDPContent Controls what subset of the data is submitted, used + *only when the format property is xdp. + * @param[in] bEmbedPDF, specifies whether PDF is embedded in the submitted + *content or not. + */ + virtual FX_BOOL SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit); + + virtual FX_BOOL CheckWord(IXFA_Doc* hDoc, const CFX_ByteStringC& sWord) { + return FALSE; + } + virtual FX_BOOL GetSuggestWords(IXFA_Doc* hDoc, + const CFX_ByteStringC& sWord, + CFX_ByteStringArray& sSuggest) { + return FALSE; + } + + // Get PDF javascript object, set the object to hValue. + virtual FX_BOOL GetPDFScriptObject(IXFA_Doc* hDoc, + const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue); + + virtual FX_BOOL GetGlobalProperty(IXFA_Doc* hDoc, + const CFX_ByteStringC& szPropName, + FXJSE_HVALUE hValue); + virtual FX_BOOL SetGlobalProperty(IXFA_Doc* hDoc, + const CFX_ByteStringC& szPropName, + FXJSE_HVALUE hValue); + virtual CPDF_Document* OpenPDF(IXFA_Doc* hDoc, + IFX_FileRead* pFile, + FX_BOOL bTakeOverFile) { + return NULL; + } + + virtual IFX_FileRead* OpenLinkedFile(IXFA_Doc* hDoc, + const CFX_WideString& wsLink); + + FX_BOOL _GetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue, + IFXJS_Runtime* runTime); + FX_BOOL _OnBeforeNotifySumbit(); + void _OnAfterNotifySumbit(); + FX_BOOL _NotifySubmit(FX_BOOL bPrevOrPost); + FX_BOOL _SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit); + FX_BOOL _MailToInfo(CFX_WideString& csURL, + CFX_WideString& csToAddress, + CFX_WideString& csCCAddress, + CFX_WideString& csBCCAddress, + CFX_WideString& csSubject, + CFX_WideString& csMsg); + FX_BOOL _ExportSubmitFile(FPDF_FILEHANDLER* ppFileHandler, + int fileType, + FPDF_DWORD encodeType, + FPDF_DWORD flag = 0x01111111); + void _ToXFAContentFlags(CFX_WideString csSrcContent, FPDF_DWORD& flag); + void _ClearChangeMark(); + + private: + void CloseXFADoc(IXFA_DocHandler* pDoc) { + if (pDoc) { + pDoc->CloseDoc(m_pXFADoc); + pDoc->ReleaseDoc(m_pXFADoc); + m_pXFADoc = NULL; + m_pXFADocView = NULL; + } + } + + CPDF_Document* m_pPDFDoc; + IXFA_Doc* m_pXFADoc; + IXFA_DocView* m_pXFADocView; + CFX_ArrayTemplate m_XFAPageList; + + CPDFSDK_Document* m_pSDKDoc; + CPDFXFA_App* m_pApp; + + CFX_MapByteStringToPtr m_XfaGlobalProperty; + + CFX_MapByteStringToPtr m_ValueMap; + + IFXJS_Context* m_pJSContext; + + int m_iDocType; }; #endif // FPDFXFA_DOC_H_ diff --git a/fpdfsdk/include/fpdfxfa/fpdfxfa_page.h b/fpdfsdk/include/fpdfxfa/fpdfxfa_page.h index f55a42496d..1a97fe4a5a 100644 --- a/fpdfsdk/include/fpdfxfa/fpdfxfa_page.h +++ b/fpdfsdk/include/fpdfxfa/fpdfxfa_page.h @@ -1,48 +1,65 @@ // Copyright 2014 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 _FPDFXFA_PAGEVIEW_H_ #define _FPDFXFA_PAGEVIEW_H_ -class CPDFXFA_Page -{ -public: - CPDFXFA_Page(CPDFXFA_Document* pDoc, int page_index); - ~CPDFXFA_Page(); - - void Release(); - void AddRef(){ m_iRef ++; } - FX_BOOL LoadPage(); - FX_BOOL LoadPDFPage(CPDF_Dictionary* pageDict); - CPDFXFA_Document* GetDocument() { return m_pDocument; } - int GetPageIndex() { return m_iPageIndex; } - CPDF_Page* GetPDFPage() { return m_pPDFPage; } - IXFA_PageView* GetXFAPageView() { return m_pXFAPageView; } - - FX_FLOAT GetPageWidth(); - FX_FLOAT GetPageHeight(); - - void DeviceToPage(int start_x, int start_y, int size_x, int size_y, - int rotate, int device_x, int device_y, double* page_x, double* page_y); - void PageToDevice(int start_x, int start_y, int size_x, int size_y, - int rotate, double page_x, double page_y, int* device_x, int* device_y); - - void GetDisplayMatrix(CFX_AffineMatrix& matrix, int xPos, int yPos, - int xSize, int ySize, int iRotate) const; - -protected: - FX_BOOL LoadPDFPage(); - FX_BOOL LoadXFAPageView(); - -private: - CPDF_Page* m_pPDFPage; - IXFA_PageView* m_pXFAPageView; - int m_iPageIndex; - CPDFXFA_Document* m_pDocument; - int m_iRef; +class CPDFXFA_Page { + public: + CPDFXFA_Page(CPDFXFA_Document* pDoc, int page_index); + ~CPDFXFA_Page(); + + void Release(); + void AddRef() { m_iRef++; } + FX_BOOL LoadPage(); + FX_BOOL LoadPDFPage(CPDF_Dictionary* pageDict); + CPDFXFA_Document* GetDocument() { return m_pDocument; } + int GetPageIndex() { return m_iPageIndex; } + CPDF_Page* GetPDFPage() { return m_pPDFPage; } + IXFA_PageView* GetXFAPageView() { return m_pXFAPageView; } + + FX_FLOAT GetPageWidth(); + FX_FLOAT GetPageHeight(); + + void DeviceToPage(int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + int device_x, + int device_y, + double* page_x, + double* page_y); + void PageToDevice(int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + double page_x, + double page_y, + int* device_x, + int* device_y); + + void GetDisplayMatrix(CFX_AffineMatrix& matrix, + int xPos, + int yPos, + int xSize, + int ySize, + int iRotate) const; + + protected: + FX_BOOL LoadPDFPage(); + FX_BOOL LoadXFAPageView(); + + private: + CPDF_Page* m_pPDFPage; + IXFA_PageView* m_pXFAPageView; + int m_iPageIndex; + CPDFXFA_Document* m_pDocument; + int m_iRef; }; #endif diff --git a/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h b/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h index 9676b1399f..a6f327a201 100644 --- a/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h +++ b/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h @@ -1,44 +1,38 @@ // Copyright 2014 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 _FPDFXFA_UTIL_H_ #define _FPDFXFA_UTIL_H_ -#define JS_STR_VIEWERTYPE_STANDARD L"Exchange" -#define JS_STR_LANGUANGE L"ENU" -#define JS_STR_VIEWERVARIATION L"Full" -#define JS_STR_VIEWERVERSION_XFA L"11" - -class CXFA_FWLAdapterTimerMgr : public IFWL_AdapterTimerMgr -{ -public: - CXFA_FWLAdapterTimerMgr(CPDFDoc_Environment* pEnv) : m_pEnv(pEnv) - { - - } - virtual FWL_ERR Start(IFWL_Timer *pTimer, FX_DWORD dwElapse, FWL_HTIMER &hTimer, FX_BOOL bImmediately = TRUE); - virtual FWL_ERR Stop(FWL_HTIMER hTimer); - -protected: - static void TimerProc(int32_t idEvent); - - static CFX_PtrArray ms_timerArray; - CPDFDoc_Environment* m_pEnv; +#define JS_STR_VIEWERTYPE_STANDARD L"Exchange" +#define JS_STR_LANGUANGE L"ENU" +#define JS_STR_VIEWERVARIATION L"Full" +#define JS_STR_VIEWERVERSION_XFA L"11" + +class CXFA_FWLAdapterTimerMgr : public IFWL_AdapterTimerMgr { + public: + CXFA_FWLAdapterTimerMgr(CPDFDoc_Environment* pEnv) : m_pEnv(pEnv) {} + virtual FWL_ERR Start(IFWL_Timer* pTimer, + FX_DWORD dwElapse, + FWL_HTIMER& hTimer, + FX_BOOL bImmediately = TRUE); + virtual FWL_ERR Stop(FWL_HTIMER hTimer); + + protected: + static void TimerProc(int32_t idEvent); + + static CFX_PtrArray ms_timerArray; + CPDFDoc_Environment* m_pEnv; }; -class CFWL_TimerInfo -{ -public: - CFWL_TimerInfo() - : pTimer(NULL) - { - - } - uint32_t uIDEvent; - IFWL_Timer *pTimer; +class CFWL_TimerInfo { + public: + CFWL_TimerInfo() : pTimer(NULL) {} + uint32_t uIDEvent; + IFWL_Timer* pTimer; }; -#endif +#endif diff --git a/fpdfsdk/include/fsdk_actionhandler.h b/fpdfsdk/include/fsdk_actionhandler.h index 39ec4f41af..dfb7d488c2 100644 --- a/fpdfsdk/include/fsdk_actionhandler.h +++ b/fpdfsdk/include/fsdk_actionhandler.h @@ -20,65 +20,118 @@ class CPDF_Bookmark; class CPDF_Dictionary; class IFXJS_Runtime; -class CPDFSDK_FormActionHandler -{ -public: - FX_BOOL DoAction_Hide(const CPDF_Action& action, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_SubmitForm(const CPDF_Action& action, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_ResetForm(const CPDF_Action& action, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_ImportData(const CPDF_Action& action, CPDFSDK_Document* pDocument); +class CPDFSDK_FormActionHandler { + public: + FX_BOOL DoAction_Hide(const CPDF_Action& action, CPDFSDK_Document* pDocument); + FX_BOOL DoAction_SubmitForm(const CPDF_Action& action, + CPDFSDK_Document* pDocument); + FX_BOOL DoAction_ResetForm(const CPDF_Action& action, + CPDFSDK_Document* pDocument); + FX_BOOL DoAction_ImportData(const CPDF_Action& action, + CPDFSDK_Document* pDocument); }; -class CPDFSDK_MediaActionHandler -{ -public: - FX_BOOL DoAction_Rendition(const CPDF_Action& action, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_Sound(const CPDF_Action& action, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_Movie(const CPDF_Action& action, CPDFSDK_Document* pDocument); +class CPDFSDK_MediaActionHandler { + public: + FX_BOOL DoAction_Rendition(const CPDF_Action& action, + CPDFSDK_Document* pDocument); + FX_BOOL DoAction_Sound(const CPDF_Action& action, + CPDFSDK_Document* pDocument); + FX_BOOL DoAction_Movie(const CPDF_Action& action, + CPDFSDK_Document* pDocument); }; -class CPDFSDK_ActionHandler -{ -public: - CPDFSDK_ActionHandler(CPDFDoc_Environment* pEvi); +class CPDFSDK_ActionHandler { + public: + CPDFSDK_ActionHandler(CPDFDoc_Environment* pEvi); - void SetMediaActionHandler(CPDFSDK_MediaActionHandler* pHandler); + void SetMediaActionHandler(CPDFSDK_MediaActionHandler* pHandler); - FX_BOOL DoAction_DocOpen(const CPDF_Action& action, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_JavaScript(const CPDF_Action& JsAction,CFX_WideString csJSName, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_Page(const CPDF_Action& action, enum CPDF_AAction::AActionType eType, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_Document(const CPDF_Action& action, enum CPDF_AAction::AActionType eType, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_BookMark(CPDF_Bookmark *pBookMark, const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_Screen(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDFSDK_Annot* pScreen); - FX_BOOL DoAction_Link(const CPDF_Action& action, CPDFSDK_Document* pDocument); - FX_BOOL DoAction_Field(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, PDFSDK_FieldAction& data); - FX_BOOL DoAction_FieldJavaScript(const CPDF_Action& JsAction, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, PDFSDK_FieldAction& data); + FX_BOOL DoAction_DocOpen(const CPDF_Action& action, + CPDFSDK_Document* pDocument); + FX_BOOL DoAction_JavaScript(const CPDF_Action& JsAction, + CFX_WideString csJSName, + CPDFSDK_Document* pDocument); + FX_BOOL DoAction_Page(const CPDF_Action& action, + enum CPDF_AAction::AActionType eType, + CPDFSDK_Document* pDocument); + FX_BOOL DoAction_Document(const CPDF_Action& action, + enum CPDF_AAction::AActionType eType, + CPDFSDK_Document* pDocument); + FX_BOOL DoAction_BookMark(CPDF_Bookmark* pBookMark, + const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument); + FX_BOOL DoAction_Screen(const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CPDFSDK_Annot* pScreen); + FX_BOOL DoAction_Link(const CPDF_Action& action, CPDFSDK_Document* pDocument); + FX_BOOL DoAction_Field(const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CPDF_FormField* pFormField, + PDFSDK_FieldAction& data); + FX_BOOL DoAction_FieldJavaScript(const CPDF_Action& JsAction, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CPDF_FormField* pFormField, + PDFSDK_FieldAction& data); -private: - FX_BOOL ExecuteDocumentOpenAction(const CPDF_Action& action, CPDFSDK_Document* pDocument, CFX_PtrList& list); - FX_BOOL ExecuteDocumentPageAction(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CFX_PtrList& list); - FX_BOOL ExecuteFieldAction(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, PDFSDK_FieldAction& data, CFX_PtrList& list); - FX_BOOL ExecuteScreenAction(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDFSDK_Annot* pScreen, CFX_PtrList& list); - FX_BOOL ExecuteBookMark(const CPDF_Action& action, CPDFSDK_Document* pDocument, CPDF_Bookmark* pBookmark, CFX_PtrList& list); - FX_BOOL ExecuteLinkAction(const CPDF_Action& action, CPDFSDK_Document* pDocument, CFX_PtrList& list); + private: + FX_BOOL ExecuteDocumentOpenAction(const CPDF_Action& action, + CPDFSDK_Document* pDocument, + CFX_PtrList& list); + FX_BOOL ExecuteDocumentPageAction(const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CFX_PtrList& list); + FX_BOOL ExecuteFieldAction(const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CPDF_FormField* pFormField, + PDFSDK_FieldAction& data, + CFX_PtrList& list); + FX_BOOL ExecuteScreenAction(const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CPDFSDK_Annot* pScreen, + CFX_PtrList& list); + FX_BOOL ExecuteBookMark(const CPDF_Action& action, + CPDFSDK_Document* pDocument, + CPDF_Bookmark* pBookmark, + CFX_PtrList& list); + FX_BOOL ExecuteLinkAction(const CPDF_Action& action, + CPDFSDK_Document* pDocument, + CFX_PtrList& list); - void DoAction_NoJs(const CPDF_Action& action, CPDFSDK_Document* pDocument); - void RunDocumentPageJavaScript(CPDFSDK_Document* pDocument, CPDF_AAction::AActionType type, const CFX_WideString& script); - void RunDocumentOpenJavaScript(CPDFSDK_Document* pDocument, const CFX_WideString& sScriptName, const CFX_WideString& script); - void RunFieldJavaScript(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, CPDF_AAction::AActionType type, PDFSDK_FieldAction& data, const CFX_WideString& script); + void DoAction_NoJs(const CPDF_Action& action, CPDFSDK_Document* pDocument); + void RunDocumentPageJavaScript(CPDFSDK_Document* pDocument, + CPDF_AAction::AActionType type, + const CFX_WideString& script); + void RunDocumentOpenJavaScript(CPDFSDK_Document* pDocument, + const CFX_WideString& sScriptName, + const CFX_WideString& script); + void RunFieldJavaScript(CPDFSDK_Document* pDocument, + CPDF_FormField* pFormField, + CPDF_AAction::AActionType type, + PDFSDK_FieldAction& data, + const CFX_WideString& script); - FX_BOOL IsValidField(CPDFSDK_Document* pDocument, CPDF_Dictionary* pFieldDict); - FX_BOOL IsValidDocView(CPDFSDK_Document* pDocument); + FX_BOOL IsValidField(CPDFSDK_Document* pDocument, + CPDF_Dictionary* pFieldDict); + FX_BOOL IsValidDocView(CPDFSDK_Document* pDocument); - void DoAction_GoTo(CPDFSDK_Document* pDocument, const CPDF_Action& action); - void DoAction_GoToR(CPDFSDK_Document* pDocument, const CPDF_Action& action); - void DoAction_Launch(CPDFSDK_Document* pDocument, const CPDF_Action& action); - void DoAction_URI(CPDFSDK_Document* pDocument, const CPDF_Action& action); - void DoAction_Named(CPDFSDK_Document* pDocument, const CPDF_Action& action); - void DoAction_SetOCGState(CPDFSDK_Document* pDocument, const CPDF_Action& action); + void DoAction_GoTo(CPDFSDK_Document* pDocument, const CPDF_Action& action); + void DoAction_GoToR(CPDFSDK_Document* pDocument, const CPDF_Action& action); + void DoAction_Launch(CPDFSDK_Document* pDocument, const CPDF_Action& action); + void DoAction_URI(CPDFSDK_Document* pDocument, const CPDF_Action& action); + void DoAction_Named(CPDFSDK_Document* pDocument, const CPDF_Action& action); + void DoAction_SetOCGState(CPDFSDK_Document* pDocument, + const CPDF_Action& action); - nonstd::unique_ptr m_pFormActionHandler; - CPDFSDK_MediaActionHandler* m_pMediaActionHandler; + nonstd::unique_ptr m_pFormActionHandler; + CPDFSDK_MediaActionHandler* m_pMediaActionHandler; }; #endif // FPDFSDK_INCLUDE_FSDK_ACTIONHANDLER_H_ diff --git a/fpdfsdk/include/fsdk_annothandler.h b/fpdfsdk/include/fsdk_annothandler.h index b46aae2b23..b755e7ec3f 100644 --- a/fpdfsdk/include/fsdk_annothandler.h +++ b/fpdfsdk/include/fsdk_annothandler.h @@ -21,323 +21,468 @@ class CPDF_Matrix; class CPDF_Point; class CPDF_Rect; -class IPDFSDK_AnnotHandler -{ - -public: - virtual ~IPDFSDK_AnnotHandler() {}; - - virtual CFX_ByteString GetType() = 0; - - virtual CFX_ByteString GetName() = 0; - - virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot) = 0; - - - virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) = 0; - - virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* hWidget, CPDFSDK_PageView* pPage) = 0; - - virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot) = 0; - - virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) = 0; - - - virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) = 0; - - virtual FX_BOOL HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point) = 0; - - - virtual void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags) = 0; - - virtual void OnDrawSleep(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - const CPDF_Rect& rcWindow, FX_DWORD dwFlags) = 0; - - - - - virtual void OnCreate(CPDFSDK_Annot* pAnnot) = 0; - - virtual void OnLoad(CPDFSDK_Annot* pAnnot) = 0; - - virtual void OnDelete(CPDFSDK_Annot* pAnnot) = 0; - - virtual void OnRelease(CPDFSDK_Annot* pAnnot) = 0; - - - virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0; - virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0; - - - virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0; - virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0; - virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0; - virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0; - virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) = 0; - virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0; - virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0; - virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0; -//by wjm. - virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags) = 0; - virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) = 0; - virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) =0 ; - - virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) = 0; - virtual void OnSelected(CPDFSDK_Annot* pAnnot) = 0; - - virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0; - virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0; - virtual FX_BOOL OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot, CPDFSDK_Annot* pNewAnnot) = 0; - +class IPDFSDK_AnnotHandler { + public: + virtual ~IPDFSDK_AnnotHandler(){}; + + virtual CFX_ByteString GetType() = 0; + + virtual CFX_ByteString GetName() = 0; + + virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot) = 0; + + virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, + CPDFSDK_PageView* pPage) = 0; + + virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* hWidget, + CPDFSDK_PageView* pPage) = 0; + + virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot) = 0; + + virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) = 0; + + virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) = 0; + + virtual FX_BOOL HitTest(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + const CPDF_Point& point) = 0; + + virtual void OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags) = 0; + + virtual void OnDrawSleep(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rcWindow, + FX_DWORD dwFlags) = 0; + + virtual void OnCreate(CPDFSDK_Annot* pAnnot) = 0; + + virtual void OnLoad(CPDFSDK_Annot* pAnnot) = 0; + + virtual void OnDelete(CPDFSDK_Annot* pAnnot) = 0; + + virtual void OnRelease(CPDFSDK_Annot* pAnnot) = 0; + + virtual void OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) = 0; + virtual void OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) = 0; + + virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) = 0; + virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) = 0; + virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) = 0; + virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) = 0; + virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + short zDelta, + const CPDF_Point& point) = 0; + virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) = 0; + virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) = 0; + virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) = 0; + // by wjm. + virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, + FX_DWORD nChar, + FX_DWORD nFlags) = 0; + virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) = 0; + virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) = 0; + + virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) = 0; + virtual void OnSelected(CPDFSDK_Annot* pAnnot) = 0; + + virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0; + virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0; + virtual FX_BOOL OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot, + CPDFSDK_Annot* pNewAnnot) = 0; }; - -class CPDFSDK_BFAnnotHandler:public IPDFSDK_AnnotHandler -{ -public: - CPDFSDK_BFAnnotHandler(CPDFDoc_Environment* pApp) : m_pApp(pApp), m_pFormFiller(NULL) {} - virtual ~CPDFSDK_BFAnnotHandler() {} -public: - - virtual CFX_ByteString GetType() {return CFX_ByteString("Widget");} - - virtual CFX_ByteString GetName() {return CFX_ByteString("WidgetHandler");} - - virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot); - - virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage); - - virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* hWidget, CPDFSDK_PageView* pPage); - - virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot) ; - - virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) {} - - - virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) ; - - virtual FX_BOOL HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point); - - - virtual void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags) ; - - virtual void OnDrawSleep(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - const CPDF_Rect& rcWindow, FX_DWORD dwFlags) {} - - - virtual void OnCreate(CPDFSDK_Annot* pAnnot) ; - - virtual void OnLoad(CPDFSDK_Annot* pAnnot) ; - - virtual void OnDelete(CPDFSDK_Annot* pAnnot) {} - - virtual void OnRelease(CPDFSDK_Annot* pAnnot) {} - - - virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) ; - virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) ; - - - virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ; - virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ; - virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ; - virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ; - virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) ; - virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ; - virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ; - virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) {return FALSE;} - -//by wjm. - virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags); - virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); - virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); - - virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) {} - virtual void OnSelected(CPDFSDK_Annot* pAnnot) {} - - virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); - virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); - virtual FX_BOOL OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot, CPDFSDK_Annot* pNewAnnot){ return TRUE; } - - void SetFormFiller(CFFL_IFormFiller* pFiller){m_pFormFiller = pFiller;} - CFFL_IFormFiller* GetFormFiller() {return m_pFormFiller;} -private: - - CPDFDoc_Environment* m_pApp; - CFFL_IFormFiller* m_pFormFiller; +class CPDFSDK_BFAnnotHandler : public IPDFSDK_AnnotHandler { + public: + CPDFSDK_BFAnnotHandler(CPDFDoc_Environment* pApp) + : m_pApp(pApp), m_pFormFiller(NULL) {} + virtual ~CPDFSDK_BFAnnotHandler() {} + + public: + virtual CFX_ByteString GetType() { return CFX_ByteString("Widget"); } + + virtual CFX_ByteString GetName() { return CFX_ByteString("WidgetHandler"); } + + virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot); + + virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage); + + virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* hWidget, + CPDFSDK_PageView* pPage); + + virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot); + + virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) {} + + virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot); + + virtual FX_BOOL HitTest(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + const CPDF_Point& point); + + virtual void OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags); + + virtual void OnDrawSleep(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rcWindow, + FX_DWORD dwFlags) {} + + virtual void OnCreate(CPDFSDK_Annot* pAnnot); + + virtual void OnLoad(CPDFSDK_Annot* pAnnot); + + virtual void OnDelete(CPDFSDK_Annot* pAnnot) {} + + virtual void OnRelease(CPDFSDK_Annot* pAnnot) {} + + virtual void OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag); + virtual void OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag); + + virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + short zDelta, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + return FALSE; + } + + // by wjm. + virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, + FX_DWORD nChar, + FX_DWORD nFlags); + virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); + virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); + + virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) {} + virtual void OnSelected(CPDFSDK_Annot* pAnnot) {} + + virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); + virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); + virtual FX_BOOL OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot, + CPDFSDK_Annot* pNewAnnot) { + return TRUE; + } + + void SetFormFiller(CFFL_IFormFiller* pFiller) { m_pFormFiller = pFiller; } + CFFL_IFormFiller* GetFormFiller() { return m_pFormFiller; } + + private: + CPDFDoc_Environment* m_pApp; + CFFL_IFormFiller* m_pFormFiller; }; -class CPDFSDK_XFAAnnotHandler : public IPDFSDK_AnnotHandler -{ -public: - CPDFSDK_XFAAnnotHandler(CPDFDoc_Environment* pApp); - ~CPDFSDK_XFAAnnotHandler(){} - -public: - virtual CFX_ByteString GetType() { return FSDK_XFAWIDGET_TYPENAME; } - - virtual CFX_ByteString GetName() { return "XFAWidgetHandler"; } - - virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot); - - - virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) { return NULL; } - - virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* pAnnot, CPDFSDK_PageView* pPage); - - virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot); - - virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) {} - - - virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); - - virtual FX_BOOL HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point); - - - virtual void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags); - - virtual void OnDrawSleep(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - const CPDF_Rect& rcWindow, FX_DWORD dwFlags) {} - - - - - virtual void OnCreate(CPDFSDK_Annot* pAnnot) {} - - virtual void OnLoad(CPDFSDK_Annot* pAnnot) {} - - virtual void OnDelete(CPDFSDK_Annot* pAnnot) {} - - virtual void OnRelease(CPDFSDK_Annot* pAnnot) {} - - - virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); - virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); - - - virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point); - virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ; - virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ; - virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point); - virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) ; - virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point); - virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ; - virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ; - //by wjm. - virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags); - virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); - virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); - - virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) {} - virtual void OnSelected(CPDFSDK_Annot* pAnnot) {} - - virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); - virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) ; - virtual FX_BOOL OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot, CPDFSDK_Annot* pNewAnnot); - -private: - IXFA_WidgetHandler* GetXFAWidgetHandler(CPDFSDK_Annot* pAnnot); - FX_DWORD GetFWLFlags(FX_DWORD dwFlag); - -private: - CPDFDoc_Environment* m_pApp; +class CPDFSDK_XFAAnnotHandler : public IPDFSDK_AnnotHandler { + public: + CPDFSDK_XFAAnnotHandler(CPDFDoc_Environment* pApp); + ~CPDFSDK_XFAAnnotHandler() {} + + public: + virtual CFX_ByteString GetType() { return FSDK_XFAWIDGET_TYPENAME; } + + virtual CFX_ByteString GetName() { return "XFAWidgetHandler"; } + + virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot); + + virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) { + return NULL; + } + + virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* pAnnot, CPDFSDK_PageView* pPage); + + virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot); + + virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) {} + + virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot); + + virtual FX_BOOL HitTest(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + const CPDF_Point& point); + + virtual void OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags); + + virtual void OnDrawSleep(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rcWindow, + FX_DWORD dwFlags) {} + + virtual void OnCreate(CPDFSDK_Annot* pAnnot) {} + + virtual void OnLoad(CPDFSDK_Annot* pAnnot) {} + + virtual void OnDelete(CPDFSDK_Annot* pAnnot) {} + + virtual void OnRelease(CPDFSDK_Annot* pAnnot) {} + + virtual void OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag); + virtual void OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag); + + virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + short zDelta, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + // by wjm. + virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, + FX_DWORD nChar, + FX_DWORD nFlags); + virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); + virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); + + virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) {} + virtual void OnSelected(CPDFSDK_Annot* pAnnot) {} + + virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); + virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); + virtual FX_BOOL OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot, + CPDFSDK_Annot* pNewAnnot); + + private: + IXFA_WidgetHandler* GetXFAWidgetHandler(CPDFSDK_Annot* pAnnot); + FX_DWORD GetFWLFlags(FX_DWORD dwFlag); + + private: + CPDFDoc_Environment* m_pApp; }; #define CBA_AnnotHandlerArray CFX_ArrayTemplate -class CPDFSDK_AnnotHandlerMgr -{ -public: - // Destroy the handler - CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp); - virtual ~CPDFSDK_AnnotHandlerMgr() ; - -public: - void RegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler); - void UnRegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler); - - virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot * pAnnot, CPDFSDK_PageView *pPageView); - virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* pAnnot, CPDFSDK_PageView* pPageView); - virtual void ReleaseAnnot(CPDFSDK_Annot * pAnnot); - - virtual void Annot_OnCreate(CPDFSDK_Annot* pAnnot); - virtual void Annot_OnLoad(CPDFSDK_Annot* pAnnot); -public: - IPDFSDK_AnnotHandler* GetAnnotHandler(CPDFSDK_Annot* pAnnot) const; - virtual void Annot_OnDraw(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,FX_DWORD dwFlags); - - virtual void Annot_OnMouseEnter(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags); - virtual void Annot_OnMouseExit(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags); - - virtual FX_BOOL Annot_OnLButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point); - virtual FX_BOOL Annot_OnLButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point); - virtual FX_BOOL Annot_OnLButtonDblClk(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point); - - virtual FX_BOOL Annot_OnMouseMove(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point); - virtual FX_BOOL Annot_OnMouseWheel(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point); - virtual FX_BOOL Annot_OnRButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point); - virtual FX_BOOL Annot_OnRButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point); - - - virtual FX_BOOL Annot_OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags); - virtual FX_BOOL Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); - virtual FX_BOOL Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); - - virtual FX_BOOL Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); - virtual FX_BOOL Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); - virtual FX_BOOL Annot_OnChangeFocus(CPDFSDK_Annot* pSetAnnot,CPDFSDK_Annot* pKillAnnot); - - virtual CPDF_Rect Annot_OnGetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); - virtual FX_BOOL Annot_OnHitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point); - -private: - IPDFSDK_AnnotHandler* GetAnnotHandler(const CFX_ByteString& sType) const; - CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,FX_BOOL bNext); -private: - CBA_AnnotHandlerArray m_Handlers; - CFX_MapByteStringToPtr m_mapType2Handler; - CPDFDoc_Environment* m_pApp; +class CPDFSDK_AnnotHandlerMgr { + public: + // Destroy the handler + CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp); + virtual ~CPDFSDK_AnnotHandlerMgr(); + + public: + void RegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler); + void UnRegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler); + + virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, + CPDFSDK_PageView* pPageView); + virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* pAnnot, + CPDFSDK_PageView* pPageView); + virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot); + + virtual void Annot_OnCreate(CPDFSDK_Annot* pAnnot); + virtual void Annot_OnLoad(CPDFSDK_Annot* pAnnot); + + public: + IPDFSDK_AnnotHandler* GetAnnotHandler(CPDFSDK_Annot* pAnnot) const; + virtual void Annot_OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags); + + virtual void Annot_OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags); + virtual void Annot_OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags); + + virtual FX_BOOL Annot_OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL Annot_OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL Annot_OnLButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + + virtual FX_BOOL Annot_OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL Annot_OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + short zDelta, + const CPDF_Point& point); + virtual FX_BOOL Annot_OnRButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + virtual FX_BOOL Annot_OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point); + + virtual FX_BOOL Annot_OnChar(CPDFSDK_Annot* pAnnot, + FX_DWORD nChar, + FX_DWORD nFlags); + virtual FX_BOOL Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, + int nKeyCode, + int nFlag); + virtual FX_BOOL Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag); + + virtual FX_BOOL Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); + virtual FX_BOOL Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag); + virtual FX_BOOL Annot_OnChangeFocus(CPDFSDK_Annot* pSetAnnot, + CPDFSDK_Annot* pKillAnnot); + + virtual CPDF_Rect Annot_OnGetViewBBox(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot); + virtual FX_BOOL Annot_OnHitTest(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + const CPDF_Point& point); + + private: + IPDFSDK_AnnotHandler* GetAnnotHandler(const CFX_ByteString& sType) const; + CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, FX_BOOL bNext); + + private: + CBA_AnnotHandlerArray m_Handlers; + CFX_MapByteStringToPtr m_mapType2Handler; + CPDFDoc_Environment* m_pApp; }; -typedef int (*AI_COMPARE) (CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); - -class CPDFSDK_AnnotIterator -{ -public: - CPDFSDK_AnnotIterator(CPDFSDK_PageView * pPageView, FX_BOOL bReverse, - FX_BOOL bIgnoreTopmost=FALSE,FX_BOOL bCircle=FALSE,CFX_PtrArray* pList=NULL); - virtual ~CPDFSDK_AnnotIterator() { } - - virtual CPDFSDK_Annot* Next (const CPDFSDK_Annot* pCurrent) ; - virtual CPDFSDK_Annot* Prev (const CPDFSDK_Annot* pCurrent) ; - virtual CPDFSDK_Annot* Next(int& index ) ; - virtual CPDFSDK_Annot* Prev(int& index ) ; - virtual int Count(){return m_pIteratorAnnotList.GetSize();} - - virtual FX_BOOL InitIteratorAnnotList(CPDFSDK_PageView * pPageView,CFX_PtrArray* pList=NULL); - - void InsertSort(CFX_PtrArray &arrayList, AI_COMPARE pCompare); - -protected: - CPDFSDK_Annot* NextAnnot (const CPDFSDK_Annot* pCurrent) ; - CPDFSDK_Annot* PrevAnnot (const CPDFSDK_Annot* pCurrent) ; - CPDFSDK_Annot* NextAnnot(int& index ) ; - CPDFSDK_Annot* PrevAnnot(int& index ) ; - - CFX_PtrArray m_pIteratorAnnotList; - FX_BOOL m_bReverse; - FX_BOOL m_bIgnoreTopmost; - FX_BOOL m_bCircle; +typedef int (*AI_COMPARE)(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); + +class CPDFSDK_AnnotIterator { + public: + CPDFSDK_AnnotIterator(CPDFSDK_PageView* pPageView, + FX_BOOL bReverse, + FX_BOOL bIgnoreTopmost = FALSE, + FX_BOOL bCircle = FALSE, + CFX_PtrArray* pList = NULL); + virtual ~CPDFSDK_AnnotIterator() {} + + virtual CPDFSDK_Annot* Next(const CPDFSDK_Annot* pCurrent); + virtual CPDFSDK_Annot* Prev(const CPDFSDK_Annot* pCurrent); + virtual CPDFSDK_Annot* Next(int& index); + virtual CPDFSDK_Annot* Prev(int& index); + virtual int Count() { return m_pIteratorAnnotList.GetSize(); } + + virtual FX_BOOL InitIteratorAnnotList(CPDFSDK_PageView* pPageView, + CFX_PtrArray* pList = NULL); + + void InsertSort(CFX_PtrArray& arrayList, AI_COMPARE pCompare); + + protected: + CPDFSDK_Annot* NextAnnot(const CPDFSDK_Annot* pCurrent); + CPDFSDK_Annot* PrevAnnot(const CPDFSDK_Annot* pCurrent); + CPDFSDK_Annot* NextAnnot(int& index); + CPDFSDK_Annot* PrevAnnot(int& index); + + CFX_PtrArray m_pIteratorAnnotList; + FX_BOOL m_bReverse; + FX_BOOL m_bIgnoreTopmost; + FX_BOOL m_bCircle; }; #endif // FPDFSDK_INCLUDE_FSDK_ANNOTHANDLER_H_ diff --git a/fpdfsdk/include/fsdk_baseannot.h b/fpdfsdk/include/fsdk_baseannot.h index b71e128cfb..706e96435e 100644 --- a/fpdfsdk/include/fsdk_baseannot.h +++ b/fpdfsdk/include/fsdk_baseannot.h @@ -25,192 +25,198 @@ class CPDF_Matrix; class CPDF_RenderOptions; class CFX_RenderDevice; -#define CFX_IntArray CFX_ArrayTemplate - -class CPDFSDK_DateTime -{ -public: - CPDFSDK_DateTime(); - CPDFSDK_DateTime(const CFX_ByteString& dtStr); - CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime); - CPDFSDK_DateTime(const FX_SYSTEMTIME& st); - - - CPDFSDK_DateTime& operator = (const CPDFSDK_DateTime& datetime); - CPDFSDK_DateTime& operator = (const FX_SYSTEMTIME& st); - FX_BOOL operator == (CPDFSDK_DateTime& datetime); - FX_BOOL operator != (CPDFSDK_DateTime& datetime); - FX_BOOL operator > (CPDFSDK_DateTime& datetime); - FX_BOOL operator >= (CPDFSDK_DateTime& datetime); - FX_BOOL operator < (CPDFSDK_DateTime& datetime); - FX_BOOL operator <= (CPDFSDK_DateTime& datetime); - operator time_t(); - - CPDFSDK_DateTime& FromPDFDateTimeString(const CFX_ByteString& dtStr); - CFX_ByteString ToCommonDateTimeString(); - CFX_ByteString ToPDFDateTimeString(); - void ToSystemTime(FX_SYSTEMTIME& st); - CPDFSDK_DateTime ToGMT(); - CPDFSDK_DateTime& AddDays(short days); - CPDFSDK_DateTime& AddSeconds(int seconds); - - void ResetDateTime(); - - struct FX_DATETIME - { - int16_t year; - uint8_t month; - uint8_t day; - uint8_t hour; - uint8_t minute; - uint8_t second; - int8_t tzHour; - uint8_t tzMinute; - }dt; +#define CFX_IntArray CFX_ArrayTemplate + +class CPDFSDK_DateTime { + public: + CPDFSDK_DateTime(); + CPDFSDK_DateTime(const CFX_ByteString& dtStr); + CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime); + CPDFSDK_DateTime(const FX_SYSTEMTIME& st); + + CPDFSDK_DateTime& operator=(const CPDFSDK_DateTime& datetime); + CPDFSDK_DateTime& operator=(const FX_SYSTEMTIME& st); + FX_BOOL operator==(CPDFSDK_DateTime& datetime); + FX_BOOL operator!=(CPDFSDK_DateTime& datetime); + FX_BOOL operator>(CPDFSDK_DateTime& datetime); + FX_BOOL operator>=(CPDFSDK_DateTime& datetime); + FX_BOOL operator<(CPDFSDK_DateTime& datetime); + FX_BOOL operator<=(CPDFSDK_DateTime& datetime); + operator time_t(); + + CPDFSDK_DateTime& FromPDFDateTimeString(const CFX_ByteString& dtStr); + CFX_ByteString ToCommonDateTimeString(); + CFX_ByteString ToPDFDateTimeString(); + void ToSystemTime(FX_SYSTEMTIME& st); + CPDFSDK_DateTime ToGMT(); + CPDFSDK_DateTime& AddDays(short days); + CPDFSDK_DateTime& AddSeconds(int seconds); + + void ResetDateTime(); + + struct FX_DATETIME { + int16_t year; + uint8_t month; + uint8_t day; + uint8_t hour; + uint8_t minute; + uint8_t second; + int8_t tzHour; + uint8_t tzMinute; + } dt; }; -class CPDFSDK_Annot -{ -public: - CPDFSDK_Annot(CPDFSDK_PageView* pPageView); - virtual ~CPDFSDK_Annot() {}; -public: - virtual FX_BOOL IsXFAField() { return FALSE; } +class CPDFSDK_Annot { + public: + CPDFSDK_Annot(CPDFSDK_PageView* pPageView); + virtual ~CPDFSDK_Annot(){}; - virtual FX_FLOAT GetMinWidth() const; - virtual FX_FLOAT GetMinHeight() const; - //define layout order to 5. - virtual int GetLayoutOrder() const { return 5; } + public: + virtual FX_BOOL IsXFAField() { return FALSE; } - virtual CPDF_Annot* GetPDFAnnot() { return NULL; } - virtual IXFA_Widget* GetXFAWidget() { return NULL; } + virtual FX_FLOAT GetMinWidth() const; + virtual FX_FLOAT GetMinHeight() const; + // define layout order to 5. + virtual int GetLayoutOrder() const { return 5; } - virtual CFX_ByteString GetType() const { return ""; } - virtual CFX_ByteString GetSubType() const { return ""; } + virtual CPDF_Annot* GetPDFAnnot() { return NULL; } + virtual IXFA_Widget* GetXFAWidget() { return NULL; } - virtual void SetRect(const CPDF_Rect& rect) {} - virtual CPDF_Rect GetRect() const { return CPDF_Rect(); } + virtual CFX_ByteString GetType() const { return ""; } + virtual CFX_ByteString GetSubType() const { return ""; } - virtual void Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,CPDF_RenderOptions* pOptions) {} + virtual void SetRect(const CPDF_Rect& rect) {} + virtual CPDF_Rect GetRect() const { return CPDF_Rect(); } -public: - CPDF_Page* GetPDFPage(); - CPDFXFA_Page* GetPDFXFAPage(); + virtual void Annot_OnDraw(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + CPDF_RenderOptions* pOptions) {} - void SetPage(CPDFSDK_PageView* pPageView) { m_pPageView = pPageView; } - CPDFSDK_PageView* GetPageView() { return m_pPageView; } + public: + CPDF_Page* GetPDFPage(); + CPDFXFA_Page* GetPDFXFAPage(); - // Tab Order - int GetTabOrder(); - void SetTabOrder(int iTabOrder); + void SetPage(CPDFSDK_PageView* pPageView) { m_pPageView = pPageView; } + CPDFSDK_PageView* GetPageView() { return m_pPageView; } - // Selection - FX_BOOL IsSelected(); - void SetSelected(FX_BOOL bSelected); + // Tab Order + int GetTabOrder(); + void SetTabOrder(int iTabOrder); -protected: - CPDF_Annot* m_pAnnot; - CPDFSDK_PageView* m_pPageView; - FX_BOOL m_bSelected; - int m_nTabOrder; + // Selection + FX_BOOL IsSelected(); + void SetSelected(FX_BOOL bSelected); + protected: + CPDF_Annot* m_pAnnot; + CPDFSDK_PageView* m_pPageView; + FX_BOOL m_bSelected; + int m_nTabOrder; }; -class CPDFSDK_BAAnnot : public CPDFSDK_Annot -{ -public: - CPDFSDK_BAAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView); - virtual ~CPDFSDK_BAAnnot(); +class CPDFSDK_BAAnnot : public CPDFSDK_Annot { + public: + CPDFSDK_BAAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView); + virtual ~CPDFSDK_BAAnnot(); -public: - virtual FX_BOOL IsXFAField(); + public: + virtual FX_BOOL IsXFAField(); - virtual CFX_ByteString GetType() const; - virtual CFX_ByteString GetSubType() const; + virtual CFX_ByteString GetType() const; + virtual CFX_ByteString GetSubType() const; - virtual void SetRect(const CPDF_Rect& rect); - virtual CPDF_Rect GetRect() const; + virtual void SetRect(const CPDF_Rect& rect); + virtual CPDF_Rect GetRect() const; - virtual CPDF_Annot* GetPDFAnnot(); + virtual CPDF_Annot* GetPDFAnnot(); - virtual void Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,CPDF_RenderOptions* pOptions); -public: - CPDF_Dictionary* GetAnnotDict() const; + virtual void Annot_OnDraw(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + CPDF_RenderOptions* pOptions); - void SetContents(const CFX_WideString& sContents); - CFX_WideString GetContents() const; + public: + CPDF_Dictionary* GetAnnotDict() const; - void SetAnnotName(const CFX_WideString& sName); - CFX_WideString GetAnnotName() const; + void SetContents(const CFX_WideString& sContents); + CFX_WideString GetContents() const; - void SetModifiedDate(const FX_SYSTEMTIME& st); - FX_SYSTEMTIME GetModifiedDate() const; + void SetAnnotName(const CFX_WideString& sName); + CFX_WideString GetAnnotName() const; - void SetFlags(int nFlags); - int GetFlags() const; + void SetModifiedDate(const FX_SYSTEMTIME& st); + FX_SYSTEMTIME GetModifiedDate() const; - void SetAppState(const CFX_ByteString& str); - CFX_ByteString GetAppState() const; + void SetFlags(int nFlags); + int GetFlags() const; - void SetStructParent(int key); - int GetStructParent() const; + void SetAppState(const CFX_ByteString& str); + CFX_ByteString GetAppState() const; - //border - void SetBorderWidth(int nWidth); - int GetBorderWidth() const; + void SetStructParent(int key); + int GetStructParent() const; - //BBS_SOLID - //BBS_DASH - //BBS_BEVELED - //BBS_INSET - //BBS_UNDERLINE + // border + void SetBorderWidth(int nWidth); + int GetBorderWidth() const; - void SetBorderStyle(int nStyle); - int GetBorderStyle() const; + // BBS_SOLID + // BBS_DASH + // BBS_BEVELED + // BBS_INSET + // BBS_UNDERLINE - void SetBorderDash(const CFX_IntArray& array); - void GetBorderDash(CFX_IntArray& array) const; + void SetBorderStyle(int nStyle); + int GetBorderStyle() const; - //The background of the annotation's icon when closed - //The title bar of the annotation's pop-up window - //The border of a link annotation + void SetBorderDash(const CFX_IntArray& array); + void GetBorderDash(CFX_IntArray& array) const; - void SetColor(FX_COLORREF color); - void RemoveColor(); - FX_BOOL GetColor(FX_COLORREF& color) const; + // The background of the annotation's icon when closed + // The title bar of the annotation's pop-up window + // The border of a link annotation - FX_BOOL IsVisible() const; - //action + void SetColor(FX_COLORREF color); + void RemoveColor(); + FX_BOOL GetColor(FX_COLORREF& color) const; - CPDF_Action GetAction() const; - void SetAction(const CPDF_Action& a); - void RemoveAction(); + FX_BOOL IsVisible() const; + // action - CPDF_AAction GetAAction() const; - void SetAAction(const CPDF_AAction& aa); - void RemoveAAction(); + CPDF_Action GetAction() const; + void SetAction(const CPDF_Action& a); + void RemoveAction(); - virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT); + CPDF_AAction GetAAction() const; + void SetAAction(const CPDF_AAction& aa); + void RemoveAAction(); -public: - virtual FX_BOOL IsAppearanceValid(); - virtual FX_BOOL IsAppearanceValid(CPDF_Annot::AppearanceMode mode); - virtual void DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device, - CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions); - void DrawBorder(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device, - const CPDF_RenderOptions* pOptions); + virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT); - void ClearCachedAP(); + public: + virtual FX_BOOL IsAppearanceValid(); + virtual FX_BOOL IsAppearanceValid(CPDF_Annot::AppearanceMode mode); + virtual void DrawAppearance(CFX_RenderDevice* pDevice, + const CPDF_Matrix* pUser2Device, + CPDF_Annot::AppearanceMode mode, + const CPDF_RenderOptions* pOptions); + void DrawBorder(CFX_RenderDevice* pDevice, + const CPDF_Matrix* pUser2Device, + const CPDF_RenderOptions* pOptions); - virtual void ResetAppearance(); - void WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Rect& rcBBox, - const CPDF_Matrix& matrix, const CFX_ByteString& sContents, - const CFX_ByteString& sAPState = ""); + void ClearCachedAP(); -private: - FX_BOOL CreateFormFiller(); -protected: - CPDF_Annot* m_pAnnot; + virtual void ResetAppearance(); + void WriteAppearance(const CFX_ByteString& sAPType, + const CPDF_Rect& rcBBox, + const CPDF_Matrix& matrix, + const CFX_ByteString& sContents, + const CFX_ByteString& sAPState = ""); + + private: + FX_BOOL CreateFormFiller(); + + protected: + CPDF_Annot* m_pAnnot; }; #endif // FPDFSDK_INCLUDE_FSDK_BASEANNOT_H_ diff --git a/fpdfsdk/include/fsdk_baseform.h b/fpdfsdk/include/fsdk_baseform.h index 8d741380e5..089a34c649 100644 --- a/fpdfsdk/include/fsdk_baseform.h +++ b/fpdfsdk/include/fsdk_baseform.h @@ -31,328 +31,357 @@ class CPDF_Action; class CPDF_FormField; struct CPWL_Color; -typedef enum _PDFSDK_XFAAActionType -{ - PDFSDK_XFA_Click = 0, - PDFSDK_XFA_Full, - PDFSDK_XFA_PreOpen, - PDFSDK_XFA_PostOpen -}PDFSDK_XFAAActionType; - -typedef struct _PDFSDK_FieldAction -{ - _PDFSDK_FieldAction() - { - bModifier = FALSE; - bShift = FALSE; - nCommitKey = 0; - bKeyDown = FALSE; - nSelEnd = nSelStart = 0; - bWillCommit = FALSE; - bFieldFull = FALSE; - bRC = TRUE; - } - - FX_BOOL bModifier; //in - FX_BOOL bShift; //in - int nCommitKey; //in - CFX_WideString sChange; //in[out] - CFX_WideString sChangeEx; //in - FX_BOOL bKeyDown; //in - int nSelEnd; //in[out] - int nSelStart; //in[out] - CFX_WideString sValue; //in[out] - FX_BOOL bWillCommit; //in - FX_BOOL bFieldFull; //in - FX_BOOL bRC; //in[out] -}PDFSDK_FieldAction; -class CPDFSDK_Widget : public CPDFSDK_BAAnnot -{ -public: - IXFA_Widget* GetMixXFAWidget(); - IXFA_Widget* GetGroupMixXFAWidget(); - IXFA_WidgetHandler* GetXFAWidgetHandler(); - - FX_BOOL HasXFAAAction(PDFSDK_XFAAActionType eXFAAAT); - FX_BOOL OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT, PDFSDK_FieldAction& data, CPDFSDK_PageView* pPageView); - - void Synchronize(FX_BOOL bSynchronizeElse); - void SynchronizeXFAValue(); - void SynchronizeXFAItems(); - - static void SynchronizeXFAValue(IXFA_DocView* pXFADocView, IXFA_Widget* hWidget, - CPDF_FormField* pFormField, CPDF_FormControl* pFormControl); - static void SynchronizeXFAItems(IXFA_DocView* pXFADocView, IXFA_Widget* hWidget, - CPDF_FormField* pFormField, CPDF_FormControl* pFormControl); - -public: - CPDFSDK_Widget(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView, CPDFSDK_InterForm* pInterForm); - virtual ~CPDFSDK_Widget(); - - virtual CFX_ByteString GetSubType() const; - - virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT); - - int GetFieldType() const; - //define layout order to 2. - virtual int GetLayoutOrder() const {return 2;} - virtual FX_BOOL IsAppearanceValid(); - /* - FIELDFLAG_READONLY - FIELDFLAG_REQUIRED - FIELDFLAG_NOEXPORT - */ - - int GetFieldFlags() const; - int GetRotate() const; - - FX_BOOL GetFillColor(FX_COLORREF& color) const; - FX_BOOL GetBorderColor(FX_COLORREF& color) const; - FX_BOOL GetTextColor(FX_COLORREF& color) const; - FX_FLOAT GetFontSize() const; - - int GetSelectedIndex(int nIndex); - CFX_WideString GetValue(FX_BOOL bDisplay = TRUE); - CFX_WideString GetDefaultValue() const; - CFX_WideString GetOptionLabel(int nIndex) const; - int CountOptions() const; - FX_BOOL IsOptionSelected(int nIndex); - int GetTopVisibleIndex() const; - FX_BOOL IsChecked(); - /* - BF_ALIGN_LEFT - BF_ALIGN_MIDDL - BF_ALIGN_RIGHT - */ - int GetAlignment() const; - int GetMaxLen() const; - CFX_WideString GetName(); - CFX_WideString GetAlternateName() const; - -//Set Properties. - void SetCheck(FX_BOOL bChecked, FX_BOOL bNotify); - void SetValue(const CFX_WideString& sValue, FX_BOOL bNotify); - void SetDefaultValue(const CFX_WideString& sValue); - void SetOptionSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify); - void ClearSelection(FX_BOOL bNotify); - void SetTopVisibleIndex(int index); - - void ResetAppearance(FX_BOOL bValueChanged); - void ResetAppearance(const FX_WCHAR* sValue, FX_BOOL bValueChanged); - void ResetFieldAppearance(FX_BOOL bValueChanged); - void UpdateField(); - CFX_WideString OnFormat(FX_BOOL& bFormated); - -//Message. - FX_BOOL OnAAction(CPDF_AAction::AActionType type, PDFSDK_FieldAction& data, - CPDFSDK_PageView* pPageView); - - CPDFSDK_InterForm* GetInterForm() const {return m_pInterForm;} - CPDF_FormField* GetFormField() const; - CPDF_FormControl* GetFormControl() const; - static CPDF_FormControl* GetFormControl(CPDF_InterForm* pInterForm, CPDF_Dictionary* pAnnotDict); - - void DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView); - - void SetAppModified(); - void ClearAppModified(); - FX_BOOL IsAppModified() const; - - int32_t GetAppearanceAge() const; - int32_t GetValueAge() const; - -private: - void ResetAppearance_PushButton(); - void ResetAppearance_CheckBox(); - void ResetAppearance_RadioButton(); - void ResetAppearance_ComboBox(const FX_WCHAR* sValue); - void ResetAppearance_ListBox(); - void ResetAppearance_TextField(const FX_WCHAR* sValue); - - CPDF_Rect GetClientRect() const; - CPDF_Rect GetRotatedRect() const; - - CFX_ByteString GetBackgroundAppStream() const; - CFX_ByteString GetBorderAppStream() const; - CPDF_Matrix GetMatrix() const; - - CPWL_Color GetTextPWLColor() const; - CPWL_Color GetBorderPWLColor() const; - CPWL_Color GetFillPWLColor() const; - - void AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage); - void RemoveAppearance(const CFX_ByteString& sAPType); -public: - FX_BOOL IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode); - void DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device, - CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions); -public: - FX_BOOL HitTest(FX_FLOAT pageX, FX_FLOAT pageY); -private: - CPDFSDK_InterForm* m_pInterForm; - FX_BOOL m_bAppModified; - int32_t m_nAppAge; - int32_t m_nValueAge; - - IXFA_Widget* m_hMixXFAWidget; - IXFA_WidgetHandler* m_pWidgetHandler; +typedef enum _PDFSDK_XFAAActionType { + PDFSDK_XFA_Click = 0, + PDFSDK_XFA_Full, + PDFSDK_XFA_PreOpen, + PDFSDK_XFA_PostOpen +} PDFSDK_XFAAActionType; + +typedef struct _PDFSDK_FieldAction { + _PDFSDK_FieldAction() { + bModifier = FALSE; + bShift = FALSE; + nCommitKey = 0; + bKeyDown = FALSE; + nSelEnd = nSelStart = 0; + bWillCommit = FALSE; + bFieldFull = FALSE; + bRC = TRUE; + } + + FX_BOOL bModifier; // in + FX_BOOL bShift; // in + int nCommitKey; // in + CFX_WideString sChange; // in[out] + CFX_WideString sChangeEx; // in + FX_BOOL bKeyDown; // in + int nSelEnd; // in[out] + int nSelStart; // in[out] + CFX_WideString sValue; // in[out] + FX_BOOL bWillCommit; // in + FX_BOOL bFieldFull; // in + FX_BOOL bRC; // in[out] +} PDFSDK_FieldAction; +class CPDFSDK_Widget : public CPDFSDK_BAAnnot { + public: + IXFA_Widget* GetMixXFAWidget(); + IXFA_Widget* GetGroupMixXFAWidget(); + IXFA_WidgetHandler* GetXFAWidgetHandler(); + + FX_BOOL HasXFAAAction(PDFSDK_XFAAActionType eXFAAAT); + FX_BOOL OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT, + PDFSDK_FieldAction& data, + CPDFSDK_PageView* pPageView); + + void Synchronize(FX_BOOL bSynchronizeElse); + void SynchronizeXFAValue(); + void SynchronizeXFAItems(); + + static void SynchronizeXFAValue(IXFA_DocView* pXFADocView, + IXFA_Widget* hWidget, + CPDF_FormField* pFormField, + CPDF_FormControl* pFormControl); + static void SynchronizeXFAItems(IXFA_DocView* pXFADocView, + IXFA_Widget* hWidget, + CPDF_FormField* pFormField, + CPDF_FormControl* pFormControl); + + public: + CPDFSDK_Widget(CPDF_Annot* pAnnot, + CPDFSDK_PageView* pPageView, + CPDFSDK_InterForm* pInterForm); + virtual ~CPDFSDK_Widget(); + + virtual CFX_ByteString GetSubType() const; + + virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT); + + int GetFieldType() const; + // define layout order to 2. + virtual int GetLayoutOrder() const { return 2; } + virtual FX_BOOL IsAppearanceValid(); + /* + FIELDFLAG_READONLY + FIELDFLAG_REQUIRED + FIELDFLAG_NOEXPORT + */ + + int GetFieldFlags() const; + int GetRotate() const; + + FX_BOOL GetFillColor(FX_COLORREF& color) const; + FX_BOOL GetBorderColor(FX_COLORREF& color) const; + FX_BOOL GetTextColor(FX_COLORREF& color) const; + FX_FLOAT GetFontSize() const; + + int GetSelectedIndex(int nIndex); + CFX_WideString GetValue(FX_BOOL bDisplay = TRUE); + CFX_WideString GetDefaultValue() const; + CFX_WideString GetOptionLabel(int nIndex) const; + int CountOptions() const; + FX_BOOL IsOptionSelected(int nIndex); + int GetTopVisibleIndex() const; + FX_BOOL IsChecked(); + /* + BF_ALIGN_LEFT + BF_ALIGN_MIDDL + BF_ALIGN_RIGHT + */ + int GetAlignment() const; + int GetMaxLen() const; + CFX_WideString GetName(); + CFX_WideString GetAlternateName() const; + + // Set Properties. + void SetCheck(FX_BOOL bChecked, FX_BOOL bNotify); + void SetValue(const CFX_WideString& sValue, FX_BOOL bNotify); + void SetDefaultValue(const CFX_WideString& sValue); + void SetOptionSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify); + void ClearSelection(FX_BOOL bNotify); + void SetTopVisibleIndex(int index); + + void ResetAppearance(FX_BOOL bValueChanged); + void ResetAppearance(const FX_WCHAR* sValue, FX_BOOL bValueChanged); + void ResetFieldAppearance(FX_BOOL bValueChanged); + void UpdateField(); + CFX_WideString OnFormat(FX_BOOL& bFormated); + + // Message. + FX_BOOL OnAAction(CPDF_AAction::AActionType type, + PDFSDK_FieldAction& data, + CPDFSDK_PageView* pPageView); + + CPDFSDK_InterForm* GetInterForm() const { return m_pInterForm; } + CPDF_FormField* GetFormField() const; + CPDF_FormControl* GetFormControl() const; + static CPDF_FormControl* GetFormControl(CPDF_InterForm* pInterForm, + CPDF_Dictionary* pAnnotDict); + + void DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView); + + void SetAppModified(); + void ClearAppModified(); + FX_BOOL IsAppModified() const; + + int32_t GetAppearanceAge() const; + int32_t GetValueAge() const; + + private: + void ResetAppearance_PushButton(); + void ResetAppearance_CheckBox(); + void ResetAppearance_RadioButton(); + void ResetAppearance_ComboBox(const FX_WCHAR* sValue); + void ResetAppearance_ListBox(); + void ResetAppearance_TextField(const FX_WCHAR* sValue); + + CPDF_Rect GetClientRect() const; + CPDF_Rect GetRotatedRect() const; + + CFX_ByteString GetBackgroundAppStream() const; + CFX_ByteString GetBorderAppStream() const; + CPDF_Matrix GetMatrix() const; + + CPWL_Color GetTextPWLColor() const; + CPWL_Color GetBorderPWLColor() const; + CPWL_Color GetFillPWLColor() const; + + void AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage); + void RemoveAppearance(const CFX_ByteString& sAPType); + + public: + FX_BOOL IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode); + void DrawAppearance(CFX_RenderDevice* pDevice, + const CPDF_Matrix* pUser2Device, + CPDF_Annot::AppearanceMode mode, + const CPDF_RenderOptions* pOptions); + + public: + FX_BOOL HitTest(FX_FLOAT pageX, FX_FLOAT pageY); + + private: + CPDFSDK_InterForm* m_pInterForm; + FX_BOOL m_bAppModified; + int32_t m_nAppAge; + int32_t m_nValueAge; + + IXFA_Widget* m_hMixXFAWidget; + IXFA_WidgetHandler* m_pWidgetHandler; }; -class CPDFSDK_XFAWidget : public CPDFSDK_Annot -{ -public: - CPDFSDK_XFAWidget(IXFA_Widget* pAnnot, CPDFSDK_PageView* pPageView, CPDFSDK_InterForm* pInterForm); - virtual ~CPDFSDK_XFAWidget(){} +class CPDFSDK_XFAWidget : public CPDFSDK_Annot { + public: + CPDFSDK_XFAWidget(IXFA_Widget* pAnnot, + CPDFSDK_PageView* pPageView, + CPDFSDK_InterForm* pInterForm); + virtual ~CPDFSDK_XFAWidget() {} -public: - virtual FX_BOOL IsXFAField(); - virtual IXFA_Widget* GetXFAWidget() { return m_hXFAWidget; } + public: + virtual FX_BOOL IsXFAField(); + virtual IXFA_Widget* GetXFAWidget() { return m_hXFAWidget; } - virtual CFX_ByteString GetType() const ; - virtual CFX_ByteString GetSubType() const { return ""; } + virtual CFX_ByteString GetType() const; + virtual CFX_ByteString GetSubType() const { return ""; } - virtual CFX_FloatRect GetRect(); + virtual CFX_FloatRect GetRect(); -public: - CPDFSDK_InterForm* GetInterForm() { return m_pInterForm; } + public: + CPDFSDK_InterForm* GetInterForm() { return m_pInterForm; } -private: - CPDFSDK_InterForm* m_pInterForm; - IXFA_Widget* m_hXFAWidget; + private: + CPDFSDK_InterForm* m_pInterForm; + IXFA_Widget* m_hXFAWidget; }; -#define CPDFSDK_XFAWidgetMap CFX_MapPtrTemplate +#define CPDFSDK_XFAWidgetMap \ + CFX_MapPtrTemplate #define CPDFSDK_FieldSynchronizeMap CFX_MapPtrTemplate -class CPDFSDK_InterForm : public CPDF_FormNotify -{ -public: - explicit CPDFSDK_InterForm(CPDFSDK_Document* pDocument); - ~CPDFSDK_InterForm() override; +class CPDFSDK_InterForm : public CPDF_FormNotify { + public: + explicit CPDFSDK_InterForm(CPDFSDK_Document* pDocument); + ~CPDFSDK_InterForm() override; - CPDF_InterForm* GetInterForm() const { return m_pInterForm; } - CPDFSDK_Document* GetDocument() const { return m_pDocument; } + CPDF_InterForm* GetInterForm() const { return m_pInterForm; } + CPDFSDK_Document* GetDocument() const { return m_pDocument; } - FX_BOOL HighlightWidgets(); + FX_BOOL HighlightWidgets(); - CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const; - CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl) const; - void GetWidgets(const CFX_WideString& sFieldName, CFX_PtrArray& widgets); - void GetWidgets(CPDF_FormField* pField, CFX_PtrArray& widgets); + CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const; + CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl) const; + void GetWidgets(const CFX_WideString& sFieldName, CFX_PtrArray& widgets); + void GetWidgets(CPDF_FormField* pField, CFX_PtrArray& widgets); - void AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget); - void RemoveMap(CPDF_FormControl* pControl); + void AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget); + void RemoveMap(CPDF_FormControl* pControl); - void AddXFAMap(IXFA_Widget* hWidget, CPDFSDK_XFAWidget* pWidget); - void RemoveXFAMap(IXFA_Widget* hWidget); - CPDFSDK_XFAWidget* GetXFAWidget(IXFA_Widget* hWidget); + void AddXFAMap(IXFA_Widget* hWidget, CPDFSDK_XFAWidget* pWidget); + void RemoveXFAMap(IXFA_Widget* hWidget); + CPDFSDK_XFAWidget* GetXFAWidget(IXFA_Widget* hWidget); - void EnableCalculate(FX_BOOL bEnabled); - FX_BOOL IsCalculateEnabled() const; + void EnableCalculate(FX_BOOL bEnabled); + FX_BOOL IsCalculateEnabled() const; - void XfaEnableCalculate(FX_BOOL bEnabled); - FX_BOOL IsXfaCalculateEnabled() const; + void XfaEnableCalculate(FX_BOOL bEnabled); + FX_BOOL IsXfaCalculateEnabled() const; - FX_BOOL IsXfaValidationsEnabled(); - void XfaSetValidationsEnabled(FX_BOOL bEnabled); + FX_BOOL IsXfaValidationsEnabled(); + void XfaSetValidationsEnabled(FX_BOOL bEnabled); #ifdef _WIN32 - CPDF_Stream* LoadImageFromFile(const CFX_WideString& sFile); + CPDF_Stream* LoadImageFromFile(const CFX_WideString& sFile); #endif - void OnKeyStrokeCommit(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC); - void OnValidate(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC); - void OnCalculate(CPDF_FormField* pFormField = NULL); - CFX_WideString OnFormat(CPDF_FormField* pFormField, FX_BOOL& bFormated); - - void ResetFieldAppearance(CPDF_FormField* pFormField, const FX_WCHAR* sValue, FX_BOOL bValueChanged); - void UpdateField(CPDF_FormField* pFormField); - - FX_BOOL DoAction_Hide(const CPDF_Action& action); - FX_BOOL DoAction_SubmitForm(const CPDF_Action& action); - FX_BOOL DoAction_ResetForm(const CPDF_Action& action); - FX_BOOL DoAction_ImportData(const CPDF_Action& action); - - void GetFieldFromObjects(const CFX_PtrArray& objects, CFX_PtrArray& fields); - FX_BOOL IsValidField(CPDF_Dictionary* pFieldDict); - FX_BOOL SubmitFields(const CFX_WideString& csDestination, const CFX_PtrArray& fields, - FX_BOOL bIncludeOrExclude, FX_BOOL bUrlEncoded); - FX_BOOL SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded); - FX_BOOL ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf); - FX_BOOL ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields,FX_BOOL bIncludeOrExclude, CFX_ByteTextBuf& textBuf); - CFX_WideString GetTemporaryFileName(const CFX_WideString& sFileExt); - - void SynchronizeField(CPDF_FormField* pFormField, FX_BOOL bSynchronizeElse); - -private: - virtual int BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue); - virtual int AfterValueChange(const CPDF_FormField* pField); - virtual int BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue); - virtual int AfterSelectionChange(const CPDF_FormField* pField); - virtual int AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray); - virtual int BeforeFormReset(const CPDF_InterForm* pForm); - virtual int AfterFormReset(const CPDF_InterForm* pForm); - virtual int BeforeFormImportData(const CPDF_InterForm* pForm); - virtual int AfterFormImportData(const CPDF_InterForm* pForm); - - 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); - - using CPDFSDK_WidgetMap = std::map; - - 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); - void RemoveAllHighLight(); - void SetHighlightAlpha(uint8_t alpha) {m_iHighlightAlpha = alpha;} - uint8_t GetHighlightAlpha() {return m_iHighlightAlpha;} - void SetHighlightColor(FX_COLORREF clr, int nFieldType); - FX_COLORREF GetHighlightColor(int nFieldType); -private: - FX_COLORREF m_aHighlightColor[7]; - uint8_t m_iHighlightAlpha; - FX_BOOL m_bNeedHightlight[7]; + void OnKeyStrokeCommit(CPDF_FormField* pFormField, + CFX_WideString& csValue, + FX_BOOL& bRC); + void OnValidate(CPDF_FormField* pFormField, + CFX_WideString& csValue, + FX_BOOL& bRC); + void OnCalculate(CPDF_FormField* pFormField = NULL); + CFX_WideString OnFormat(CPDF_FormField* pFormField, FX_BOOL& bFormated); + + void ResetFieldAppearance(CPDF_FormField* pFormField, + const FX_WCHAR* sValue, + FX_BOOL bValueChanged); + void UpdateField(CPDF_FormField* pFormField); + + FX_BOOL DoAction_Hide(const CPDF_Action& action); + FX_BOOL DoAction_SubmitForm(const CPDF_Action& action); + FX_BOOL DoAction_ResetForm(const CPDF_Action& action); + FX_BOOL DoAction_ImportData(const CPDF_Action& action); + + void GetFieldFromObjects(const CFX_PtrArray& objects, CFX_PtrArray& fields); + FX_BOOL IsValidField(CPDF_Dictionary* pFieldDict); + FX_BOOL SubmitFields(const CFX_WideString& csDestination, + const CFX_PtrArray& fields, + FX_BOOL bIncludeOrExclude, + FX_BOOL bUrlEncoded); + FX_BOOL SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded); + FX_BOOL ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf); + FX_BOOL ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields, + FX_BOOL bIncludeOrExclude, + CFX_ByteTextBuf& textBuf); + CFX_WideString GetTemporaryFileName(const CFX_WideString& sFileExt); + + void SynchronizeField(CPDF_FormField* pFormField, FX_BOOL bSynchronizeElse); + + private: + virtual int BeforeValueChange(const CPDF_FormField* pField, + CFX_WideString& csValue); + virtual int AfterValueChange(const CPDF_FormField* pField); + virtual int BeforeSelectionChange(const CPDF_FormField* pField, + CFX_WideString& csValue); + virtual int AfterSelectionChange(const CPDF_FormField* pField); + virtual int AfterCheckedStatusChange(const CPDF_FormField* pField, + const CFX_ByteArray& statusArray); + virtual int BeforeFormReset(const CPDF_InterForm* pForm); + virtual int AfterFormReset(const CPDF_InterForm* pForm); + virtual int BeforeFormImportData(const CPDF_InterForm* pForm); + virtual int AfterFormImportData(const CPDF_InterForm* pForm); + + 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); + + using CPDFSDK_WidgetMap = std::map; + + 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); + void RemoveAllHighLight(); + void SetHighlightAlpha(uint8_t alpha) { m_iHighlightAlpha = alpha; } + uint8_t GetHighlightAlpha() { return m_iHighlightAlpha; } + void SetHighlightColor(FX_COLORREF clr, int nFieldType); + FX_COLORREF GetHighlightColor(int nFieldType); + + private: + FX_COLORREF m_aHighlightColor[7]; + uint8_t m_iHighlightAlpha; + FX_BOOL m_bNeedHightlight[7]; }; -#define BAI_STRUCTURE 0 -#define BAI_ROW 1 -#define BAI_COLUMN 2 - -#define CPDFSDK_Annots CFX_ArrayTemplate -#define CPDFSDK_SortAnnots CGW_ArrayTemplate -class CBA_AnnotIterator -{ -public: - CBA_AnnotIterator(CPDFSDK_PageView* pPageView, const CFX_ByteString& sType, const CFX_ByteString& sSubType); - ~CBA_AnnotIterator(); - - CPDFSDK_Annot* GetFirstAnnot(); - CPDFSDK_Annot* GetLastAnnot(); - CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pAnnot); - CPDFSDK_Annot* GetPrevAnnot(CPDFSDK_Annot* pAnnot); - -private: - void GenerateResults(); - static int CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); - static int CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); - static CPDF_Rect GetAnnotRect(CPDFSDK_Annot* pAnnot); - - CPDFSDK_PageView* m_pPageView; - CFX_ByteString m_sType; - CFX_ByteString m_sSubType; - int m_nTabs; - CPDFSDK_Annots m_Annots; +#define BAI_STRUCTURE 0 +#define BAI_ROW 1 +#define BAI_COLUMN 2 + +#define CPDFSDK_Annots CFX_ArrayTemplate +#define CPDFSDK_SortAnnots CGW_ArrayTemplate +class CBA_AnnotIterator { + public: + CBA_AnnotIterator(CPDFSDK_PageView* pPageView, + const CFX_ByteString& sType, + const CFX_ByteString& sSubType); + ~CBA_AnnotIterator(); + + CPDFSDK_Annot* GetFirstAnnot(); + CPDFSDK_Annot* GetLastAnnot(); + CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pAnnot); + CPDFSDK_Annot* GetPrevAnnot(CPDFSDK_Annot* pAnnot); + + private: + void GenerateResults(); + static int CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); + static int CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); + static CPDF_Rect GetAnnotRect(CPDFSDK_Annot* pAnnot); + + CPDFSDK_PageView* m_pPageView; + CFX_ByteString m_sType; + CFX_ByteString m_sSubType; + int m_nTabs; + CPDFSDK_Annots m_Annots; }; #endif // FPDFSDK_INCLUDE_FSDK_BASEFORM_H_ diff --git a/fpdfsdk/include/fsdk_common.h b/fpdfsdk/include/fsdk_common.h index b243cd4ab7..279048b9ac 100644 --- a/fpdfsdk/include/fsdk_common.h +++ b/fpdfsdk/include/fsdk_common.h @@ -7,39 +7,39 @@ #ifndef FPDFSDK_INCLUDE_FSDK_COMMON_H_ #define FPDFSDK_INCLUDE_FSDK_COMMON_H_ -#define BFFT_SIGNATURE "Signature" +#define BFFT_SIGNATURE "Signature" -//for all fields -#define FIELDFLAG_READONLY 1 -#define FIELDFLAG_REQUIRED 2 -#define FIELDFLAG_NOEXPORT 4 -//for text fields -#define FIELDFLAG_MULTILINE (1<<12) -#define FIELDFLAG_PASSWORD (1<<13) -#define FIELDFLAG_FILESELECT (1<<20) -#define FIELDFLAG_DONOTSPELLCHECK (1<<22) -#define FIELDFLAG_DONOTSCROLL (1<<23) -#define FIELDFLAG_COMB (1<<24) -#define FIELDFLAG_RICHTEXT (1<<25) -//for button fileds -#define FIELDFLAG_NOTOGGLETOOFF (1<<14) -#define FIELDFLAG_RADIO (1<<15) -#define FIELDFLAG_PUSHBUTTON (1<<16) -#define FIELDFLAG_RADIOSINUNISON (1<<25) -//for choice fields -#define FIELDFLAG_COMBO (1<<17) -#define FIELDFLAG_EDIT (1<<18) -#define FIELDFLAG_SORT (1<<19) -#define FIELDFLAG_MULTISELECT (1<<21) +// for all fields +#define FIELDFLAG_READONLY 1 +#define FIELDFLAG_REQUIRED 2 +#define FIELDFLAG_NOEXPORT 4 +// for text fields +#define FIELDFLAG_MULTILINE (1 << 12) +#define FIELDFLAG_PASSWORD (1 << 13) +#define FIELDFLAG_FILESELECT (1 << 20) +#define FIELDFLAG_DONOTSPELLCHECK (1 << 22) +#define FIELDFLAG_DONOTSCROLL (1 << 23) +#define FIELDFLAG_COMB (1 << 24) +#define FIELDFLAG_RICHTEXT (1 << 25) +// for button fileds +#define FIELDFLAG_NOTOGGLETOOFF (1 << 14) +#define FIELDFLAG_RADIO (1 << 15) +#define FIELDFLAG_PUSHBUTTON (1 << 16) +#define FIELDFLAG_RADIOSINUNISON (1 << 25) +// for choice fields +#define FIELDFLAG_COMBO (1 << 17) +#define FIELDFLAG_EDIT (1 << 18) +#define FIELDFLAG_SORT (1 << 19) +#define FIELDFLAG_MULTISELECT (1 << 21) #ifndef FIELDFLAG_DONOTSPELLCHECK -#define FIELDFLAG_DONOTSPELLCHECK (1<<22) +#define FIELDFLAG_DONOTSPELLCHECK (1 << 22) #endif -#define FIELDFLAG_COMMITONSELCHANGE (1<<26) +#define FIELDFLAG_COMMITONSELCHANGE (1 << 26) -#define BBS_SOLID 0 -#define BBS_DASH 1 -#define BBS_BEVELED 2 -#define BBS_INSET 3 -#define BBS_UNDERLINE 4 +#define BBS_SOLID 0 +#define BBS_DASH 1 +#define BBS_BEVELED 2 +#define BBS_INSET 3 +#define BBS_UNDERLINE 4 #endif // FPDFSDK_INCLUDE_FSDK_COMMON_H_ diff --git a/fpdfsdk/include/fsdk_define.h b/fpdfsdk/include/fsdk_define.h index e1ab1769a7..f208c05dab 100644 --- a/fpdfsdk/include/fsdk_define.h +++ b/fpdfsdk/include/fsdk_define.h @@ -31,66 +31,77 @@ #ifndef FX_ARGBTOCOLORREF /** @brief Convert a #FX_ARGB to a #FX_COLORREF. */ -#define FX_ARGBTOCOLORREF(argb) ((((FX_DWORD)argb & 0x00FF0000) >> 16)|((FX_DWORD)argb & 0x0000FF00)|(((FX_DWORD)argb & 0x000000FF) << 16)) +#define FX_ARGBTOCOLORREF(argb) \ + ((((FX_DWORD)argb & 0x00FF0000) >> 16) | ((FX_DWORD)argb & 0x0000FF00) | \ + (((FX_DWORD)argb & 0x000000FF) << 16)) #endif #ifndef FX_COLORREFTOARGB /** @brief Convert a #FX_COLORREF to a #FX_ARGB. */ -#define FX_COLORREFTOARGB(rgb) ((FX_DWORD)0xFF000000|(((FX_DWORD)rgb & 0x000000FF) << 16)|((FX_DWORD)rgb & 0x0000FF00)|(((FX_DWORD)rgb & 0x00FF0000) >> 16)) +#define FX_COLORREFTOARGB(rgb) \ + ((FX_DWORD)0xFF000000 | (((FX_DWORD)rgb & 0x000000FF) << 16) | \ + ((FX_DWORD)rgb & 0x0000FF00) | (((FX_DWORD)rgb & 0x00FF0000) >> 16)) #endif typedef unsigned int FX_UINT; class CRenderContext; class IFSDK_PAUSE_Adapter; -class CPDF_CustomAccess final : public IFX_FileRead -{ -public: - CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess); - ~CPDF_CustomAccess() {} - - - virtual CFX_ByteString GetFullPath() { return ""; } - virtual FX_FILESIZE GetSize() override { return m_FileAccess.m_FileLen; } - virtual FX_BOOL GetByte(FX_DWORD pos, uint8_t& ch); - virtual FX_BOOL GetBlock(FX_DWORD pos, uint8_t* pBuf, FX_DWORD size); - virtual void Release() override { delete this; } - virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override; - - FPDF_FILEACCESS m_FileAccess; - uint8_t m_Buffer[512]; - FX_DWORD m_BufferOffset; +class CPDF_CustomAccess final : public IFX_FileRead { + public: + CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess); + ~CPDF_CustomAccess() {} + + virtual CFX_ByteString GetFullPath() { return ""; } + virtual FX_FILESIZE GetSize() override { return m_FileAccess.m_FileLen; } + virtual FX_BOOL GetByte(FX_DWORD pos, uint8_t& ch); + virtual FX_BOOL GetBlock(FX_DWORD pos, uint8_t* pBuf, FX_DWORD size); + virtual void Release() override { delete this; } + virtual FX_BOOL ReadBlock(void* buffer, + FX_FILESIZE offset, + size_t size) override; + + FPDF_FILEACCESS m_FileAccess; + uint8_t m_Buffer[512]; + FX_DWORD m_BufferOffset; }; -class CFPDF_FileStream : public IFX_FileStream -{ -public: - CFPDF_FileStream(FPDF_FILEHANDLER* pFS); - virtual ~CFPDF_FileStream() {} - - virtual IFX_FileStream* Retain(); - virtual void Release(); - - virtual FX_FILESIZE GetSize(); - virtual FX_BOOL IsEOF(); - virtual FX_FILESIZE GetPosition() {return m_nCurPos;} - virtual void SetPosition(FX_FILESIZE pos) {m_nCurPos = pos; } - virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size); - virtual size_t ReadBlock(void* buffer, size_t size); - virtual FX_BOOL WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size); - virtual FX_BOOL Flush(); - -protected: - FPDF_FILEHANDLER* m_pFS; - FX_FILESIZE m_nCurPos; +class CFPDF_FileStream : public IFX_FileStream { + public: + CFPDF_FileStream(FPDF_FILEHANDLER* pFS); + virtual ~CFPDF_FileStream() {} + + virtual IFX_FileStream* Retain(); + virtual void Release(); + + virtual FX_FILESIZE GetSize(); + virtual FX_BOOL IsEOF(); + virtual FX_FILESIZE GetPosition() { return m_nCurPos; } + virtual void SetPosition(FX_FILESIZE pos) { m_nCurPos = pos; } + virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size); + virtual size_t ReadBlock(void* buffer, size_t size); + virtual FX_BOOL WriteBlock(const void* buffer, + FX_FILESIZE offset, + size_t size); + virtual FX_BOOL Flush(); + + protected: + FPDF_FILEHANDLER* m_pFS; + FX_FILESIZE m_nCurPos; }; void DropContext(void* data); void FSDK_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable); FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy); -void FPDF_RenderPage_Retail(CRenderContext* pContext, FPDF_PAGE page, - int start_x, int start_y, int size_x, int size_y, - int rotate, int flags, FX_BOOL bNeedToRestore, +void FPDF_RenderPage_Retail(CRenderContext* pContext, + FPDF_PAGE page, + int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + int flags, + FX_BOOL bNeedToRestore, IFSDK_PAUSE_Adapter* pause); #endif // FPDFSDK_INCLUDE_FSDK_DEFINE_H_ diff --git a/fpdfsdk/include/fsdk_mgr.h b/fpdfsdk/include/fsdk_mgr.h index bd158bc1fe..1e648e9461 100644 --- a/fpdfsdk/include/fsdk_mgr.h +++ b/fpdfsdk/include/fsdk_mgr.h @@ -11,7 +11,7 @@ #include "../../core/include/fpdftext/fpdf_text.h" #include "../../public/fpdf_formfill.h" -#include "../../public/fpdf_fwlevent.h" // cross platform keycode and events define. +#include "../../public/fpdf_fwlevent.h" // cross platform keycode and events define. #include "fsdk_common.h" #include "fsdk_define.h" #include "fx_systemhandler.h" @@ -33,621 +33,655 @@ class CPDFSDK_PageView; class CPDFSDK_Widget; class IFX_SystemHandler; -class CPDFDoc_Environment final -{ -public: - CPDFDoc_Environment(CPDFXFA_Document* pDoc, FPDF_FORMFILLINFO* pFFinfo); - virtual ~CPDFDoc_Environment(); - - virtual void Release() - { - if (m_pInfo && m_pInfo->Release) - m_pInfo->Release(m_pInfo); - delete this; - } - - void FFI_Invalidate(FPDF_PAGE page, double left, double top, double right, double bottom) - { - if (m_pInfo && m_pInfo->FFI_Invalidate) - m_pInfo->FFI_Invalidate(m_pInfo, page, left, top, right, bottom); - } - - void FFI_OutputSelectedRect(FPDF_PAGE page, double left, double top, double right, double bottom) - { - if (m_pInfo && m_pInfo->FFI_OutputSelectedRect) - m_pInfo->FFI_OutputSelectedRect(m_pInfo, page, left, top, right, bottom); - } - - void FFI_SetCursor(int nCursorType) - { - if (m_pInfo && m_pInfo->FFI_SetCursor) - m_pInfo->FFI_SetCursor(m_pInfo, nCursorType); - } - - int FFI_SetTimer(int uElapse, TimerCallback lpTimerFunc) - { - if (m_pInfo && m_pInfo->FFI_SetTimer) - return m_pInfo->FFI_SetTimer(m_pInfo, uElapse, lpTimerFunc); - return -1; - } - - void FFI_KillTimer(int nTimerID) - { - if (m_pInfo && m_pInfo->FFI_KillTimer) - m_pInfo->FFI_KillTimer(m_pInfo, nTimerID); - } - - FX_SYSTEMTIME FFI_GetLocalTime() - { - FX_SYSTEMTIME fxtime; - if(m_pInfo && m_pInfo->FFI_GetLocalTime) - { - FPDF_SYSTEMTIME systime = m_pInfo->FFI_GetLocalTime(m_pInfo); - fxtime.wDay = systime.wDay; - fxtime.wDayOfWeek = systime.wDayOfWeek; - fxtime.wHour = systime.wHour; - fxtime.wMilliseconds = systime.wMilliseconds; - fxtime.wMinute = systime.wMinute; - fxtime.wMonth = systime.wMonth; - fxtime.wSecond = systime.wSecond; - fxtime.wYear = systime.wYear; - } - return fxtime; - } - - void FFI_OnChange() - { - if (m_pInfo && m_pInfo->FFI_OnChange) - m_pInfo->FFI_OnChange(m_pInfo); - } - - FX_BOOL FFI_IsSHIFTKeyDown(FX_DWORD nFlag) - { - return (nFlag & FWL_EVENTFLAG_ShiftKey) != 0; - } - - FX_BOOL FFI_IsCTRLKeyDown(FX_DWORD nFlag) - { - return (nFlag & FWL_EVENTFLAG_ControlKey) != 0; - } - - FX_BOOL FFI_IsALTKeyDown(FX_DWORD nFlag) - { - return (nFlag & FWL_EVENTFLAG_AltKey) != 0; - } - - FX_BOOL FFI_IsINSERTKeyDown(FX_DWORD nFlag) - { - return FALSE; - } - - int JS_appAlert(const FX_WCHAR* Msg, const FX_WCHAR* Title, FX_UINT Type, FX_UINT 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) - { - if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_beep) - m_pInfo->m_pJsPlatform->app_beep(m_pInfo->m_pJsPlatform, 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) - { - if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_print) - m_pInfo->m_pJsPlatform->Doc_print( - m_pInfo->m_pJsPlatform, bUI, nStart, nEnd, bSilent, bShrinkToFit, - bPrintAsImage, bReverse, bAnnotations); - } - - void JS_docgotoPage(int nPageNum) - { - if(m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_gotoPage) - m_pInfo->m_pJsPlatform->Doc_gotoPage(m_pInfo->m_pJsPlatform, nPageNum); - } - - FPDF_PAGE FFI_GetPage(FPDF_DOCUMENT document,int nPageIndex) - { - if (m_pInfo && m_pInfo->FFI_GetPage) - return m_pInfo->FFI_GetPage(m_pInfo, document, nPageIndex); - return NULL; - } - - FPDF_PAGE FFI_GetCurrentPage(FPDF_DOCUMENT document) - { - if (m_pInfo && m_pInfo->FFI_GetCurrentPage) - return m_pInfo->FFI_GetCurrentPage(m_pInfo, document); - return NULL; - } - - int FFI_GetRotation(FPDF_PAGE page) - { - if (m_pInfo && m_pInfo->FFI_GetRotation) - return m_pInfo->FFI_GetRotation(m_pInfo, page); - return 0; - } - - void FFI_ExecuteNamedAction(const FX_CHAR* namedAction) - { - if (m_pInfo && m_pInfo->FFI_ExecuteNamedAction) - m_pInfo->FFI_ExecuteNamedAction(m_pInfo, namedAction); - } - - void FFI_OnSetFieldInputFocus(void* field,FPDF_WIDESTRING focusText, FPDF_DWORD nTextLen, FX_BOOL bFocus) - { - if (m_pInfo && m_pInfo->FFI_SetTextFieldFocus) - m_pInfo->FFI_SetTextFieldFocus(m_pInfo, focusText, nTextLen, bFocus); - } - - void FFI_DoURIAction(const FX_CHAR* bsURI) - { - if (m_pInfo && m_pInfo->FFI_DoURIAction) - m_pInfo->FFI_DoURIAction(m_pInfo, bsURI); - } - - void FFI_DoGoToAction(int nPageIndex, int zoomMode, float* fPosArray, int sizeOfArray) - { - if (m_pInfo && m_pInfo->FFI_DoGoToAction) - m_pInfo->FFI_DoGoToAction(m_pInfo, nPageIndex, zoomMode, fPosArray, sizeOfArray); - } - - void FFI_DisplayCaret(FPDF_PAGE page, FPDF_BOOL bVisible, double left, double top, double right, double bottom) - { - if (m_pInfo && m_pInfo->FFI_DisplayCaret) - m_pInfo->FFI_DisplayCaret(m_pInfo, page, bVisible, left, top, right, bottom); - } - - int FFI_GetCurrentPageIndex(FPDF_DOCUMENT document) - { - if (m_pInfo && m_pInfo->FFI_GetCurrentPageIndex) - m_pInfo->FFI_GetCurrentPageIndex(m_pInfo, document); - return -1; - } - - int FFI_SetCurrentPage(FPDF_DOCUMENT document, int iCurPage) - { - if (m_pInfo && m_pInfo->FFI_SetCurrentPage) - m_pInfo->FFI_SetCurrentPage(m_pInfo, document, iCurPage); - return -1; - } - - CFX_WideString FFI_GetAppName() const { return CFX_WideString(L"Acrobat"); } - - CFX_WideString FFI_GetPlatform() - { - if (m_pInfo && m_pInfo->FFI_GetPlatform) - { - int nRequiredLen = m_pInfo->FFI_GetPlatform(m_pInfo, NULL, 0); - if (nRequiredLen <= 0) - return L""; - - char* pbuff = new char[nRequiredLen]; - if (!pbuff) - return L""; - - memset(pbuff, 0, nRequiredLen); - int nActualLen = m_pInfo->FFI_GetPlatform(m_pInfo, pbuff, nRequiredLen); - if (nActualLen <= 0 || nActualLen > nRequiredLen) - { - delete[] pbuff; - return L""; - } - CFX_ByteString bsRet = CFX_ByteString(pbuff, nActualLen); - CFX_WideString wsRet = CFX_WideString::FromUTF16LE((unsigned short*)bsRet.GetBuffer(bsRet.GetLength()), bsRet.GetLength()/sizeof(unsigned short)); - delete[] pbuff; - return wsRet; - } +class CPDFDoc_Environment final { + public: + CPDFDoc_Environment(CPDFXFA_Document* pDoc, FPDF_FORMFILLINFO* pFFinfo); + virtual ~CPDFDoc_Environment(); + + virtual void Release() { + if (m_pInfo && m_pInfo->Release) + m_pInfo->Release(m_pInfo); + delete this; + } + + void FFI_Invalidate(FPDF_PAGE page, + double left, + double top, + double right, + double bottom) { + if (m_pInfo && m_pInfo->FFI_Invalidate) + m_pInfo->FFI_Invalidate(m_pInfo, page, left, top, right, bottom); + } + + void FFI_OutputSelectedRect(FPDF_PAGE page, + double left, + double top, + double right, + double bottom) { + if (m_pInfo && m_pInfo->FFI_OutputSelectedRect) + m_pInfo->FFI_OutputSelectedRect(m_pInfo, page, left, top, right, bottom); + } + + void FFI_SetCursor(int nCursorType) { + if (m_pInfo && m_pInfo->FFI_SetCursor) + m_pInfo->FFI_SetCursor(m_pInfo, nCursorType); + } + + int FFI_SetTimer(int uElapse, TimerCallback lpTimerFunc) { + if (m_pInfo && m_pInfo->FFI_SetTimer) + return m_pInfo->FFI_SetTimer(m_pInfo, uElapse, lpTimerFunc); + return -1; + } + + void FFI_KillTimer(int nTimerID) { + if (m_pInfo && m_pInfo->FFI_KillTimer) + m_pInfo->FFI_KillTimer(m_pInfo, nTimerID); + } + + FX_SYSTEMTIME FFI_GetLocalTime() { + FX_SYSTEMTIME fxtime; + if (m_pInfo && m_pInfo->FFI_GetLocalTime) { + FPDF_SYSTEMTIME systime = m_pInfo->FFI_GetLocalTime(m_pInfo); + fxtime.wDay = systime.wDay; + fxtime.wDayOfWeek = systime.wDayOfWeek; + fxtime.wHour = systime.wHour; + fxtime.wMilliseconds = systime.wMilliseconds; + fxtime.wMinute = systime.wMinute; + fxtime.wMonth = systime.wMonth; + fxtime.wSecond = systime.wSecond; + fxtime.wYear = systime.wYear; + } + return fxtime; + } + + void FFI_OnChange() { + if (m_pInfo && m_pInfo->FFI_OnChange) + m_pInfo->FFI_OnChange(m_pInfo); + } + + FX_BOOL FFI_IsSHIFTKeyDown(FX_DWORD nFlag) { + return (nFlag & FWL_EVENTFLAG_ShiftKey) != 0; + } + + FX_BOOL FFI_IsCTRLKeyDown(FX_DWORD nFlag) { + return (nFlag & FWL_EVENTFLAG_ControlKey) != 0; + } + + FX_BOOL FFI_IsALTKeyDown(FX_DWORD nFlag) { + return (nFlag & FWL_EVENTFLAG_AltKey) != 0; + } + + FX_BOOL FFI_IsINSERTKeyDown(FX_DWORD nFlag) { return FALSE; } + + int JS_appAlert(const FX_WCHAR* Msg, + const FX_WCHAR* Title, + FX_UINT Type, + FX_UINT 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) { + if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_beep) + m_pInfo->m_pJsPlatform->app_beep(m_pInfo->m_pJsPlatform, 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) { + if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_print) + m_pInfo->m_pJsPlatform->Doc_print(m_pInfo->m_pJsPlatform, bUI, nStart, + nEnd, bSilent, bShrinkToFit, + bPrintAsImage, bReverse, bAnnotations); + } + + void JS_docgotoPage(int nPageNum) { + if (m_pInfo && m_pInfo->m_pJsPlatform && + m_pInfo->m_pJsPlatform->Doc_gotoPage) + m_pInfo->m_pJsPlatform->Doc_gotoPage(m_pInfo->m_pJsPlatform, nPageNum); + } + + FPDF_PAGE FFI_GetPage(FPDF_DOCUMENT document, int nPageIndex) { + if (m_pInfo && m_pInfo->FFI_GetPage) + return m_pInfo->FFI_GetPage(m_pInfo, document, nPageIndex); + return NULL; + } + + FPDF_PAGE FFI_GetCurrentPage(FPDF_DOCUMENT document) { + if (m_pInfo && m_pInfo->FFI_GetCurrentPage) + return m_pInfo->FFI_GetCurrentPage(m_pInfo, document); + return NULL; + } + + int FFI_GetRotation(FPDF_PAGE page) { + if (m_pInfo && m_pInfo->FFI_GetRotation) + return m_pInfo->FFI_GetRotation(m_pInfo, page); + return 0; + } + + void FFI_ExecuteNamedAction(const FX_CHAR* namedAction) { + if (m_pInfo && m_pInfo->FFI_ExecuteNamedAction) + m_pInfo->FFI_ExecuteNamedAction(m_pInfo, namedAction); + } + + void FFI_OnSetFieldInputFocus(void* field, + FPDF_WIDESTRING focusText, + FPDF_DWORD nTextLen, + FX_BOOL bFocus) { + if (m_pInfo && m_pInfo->FFI_SetTextFieldFocus) + m_pInfo->FFI_SetTextFieldFocus(m_pInfo, focusText, nTextLen, bFocus); + } + + void FFI_DoURIAction(const FX_CHAR* bsURI) { + if (m_pInfo && m_pInfo->FFI_DoURIAction) + m_pInfo->FFI_DoURIAction(m_pInfo, bsURI); + } + + void FFI_DoGoToAction(int nPageIndex, + int zoomMode, + float* fPosArray, + int sizeOfArray) { + if (m_pInfo && m_pInfo->FFI_DoGoToAction) + m_pInfo->FFI_DoGoToAction(m_pInfo, nPageIndex, zoomMode, fPosArray, + sizeOfArray); + } + + void FFI_DisplayCaret(FPDF_PAGE page, + FPDF_BOOL bVisible, + double left, + double top, + double right, + double bottom) { + if (m_pInfo && m_pInfo->FFI_DisplayCaret) + m_pInfo->FFI_DisplayCaret(m_pInfo, page, bVisible, left, top, right, + bottom); + } + + int FFI_GetCurrentPageIndex(FPDF_DOCUMENT document) { + if (m_pInfo && m_pInfo->FFI_GetCurrentPageIndex) + m_pInfo->FFI_GetCurrentPageIndex(m_pInfo, document); + return -1; + } + + int FFI_SetCurrentPage(FPDF_DOCUMENT document, int iCurPage) { + if (m_pInfo && m_pInfo->FFI_SetCurrentPage) + m_pInfo->FFI_SetCurrentPage(m_pInfo, document, iCurPage); + return -1; + } + + CFX_WideString FFI_GetAppName() const { return CFX_WideString(L"Acrobat"); } + + CFX_WideString FFI_GetPlatform() { + if (m_pInfo && m_pInfo->FFI_GetPlatform) { + int nRequiredLen = m_pInfo->FFI_GetPlatform(m_pInfo, NULL, 0); + if (nRequiredLen <= 0) return L""; - } - - void FFI_GotoURL(FPDF_DOCUMENT document, const CFX_WideStringC& wsURL, FX_BOOL bAppend) - { - if (m_pInfo && m_pInfo->FFI_GotoURL) - { - CFX_ByteString bsTo = CFX_WideString(wsURL).UTF16LE_Encode(); - FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(wsURL.GetLength()); - m_pInfo->FFI_GotoURL(m_pInfo, document, pTo); - bsTo.ReleaseBuffer(); - } - } - - void FFI_GetURL(FPDF_DOCUMENT document, CFX_WideString& wsURL) - { - wsURL = CFX_WideString(); - } - - void FFI_AddDoRecord(FPDF_DOCUMENT document, FPDF_WIDGET hWidget) {} - void FFI_PageEvent(FPDF_PAGE page, FPDF_DWORD flag) {} - - void FFI_GetPageViewRect(FPDF_PAGE page, FS_RECTF& dstRect) - { - if (m_pInfo && m_pInfo->FFI_GetPageViewRect) - { - double left; - double top; - double right; - double bottom; - m_pInfo->FFI_GetPageViewRect(m_pInfo, page, &left, &top, &right, &bottom); - - dstRect.left = static_cast(left); - dstRect.top = static_cast(top < bottom ? bottom : top); - dstRect.bottom = static_cast(top < bottom ? top : bottom); - dstRect.right = static_cast(right); - } - } - - FX_BOOL FFI_PopupMenu(FPDF_PAGE page, FPDF_WIDGET hWidget, int menuFlag, CFX_PointF ptPopup, const CFX_PointF* pRectExclude) - { - if (m_pInfo && m_pInfo->FFI_PopupMenu) - return m_pInfo->FFI_PopupMenu(m_pInfo, page, hWidget, menuFlag, ptPopup.x, ptPopup.y); - return FALSE; - } - - void FFI_Alert(FPDF_WIDESTRING Msg, FPDF_WIDESTRING Title, int Type, int Icon) - { - if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_alert) - m_pInfo->m_pJsPlatform->app_alert(m_pInfo->m_pJsPlatform, Msg, Title, Type, Icon); - } - void FFI_EmailTo(FPDF_FILEHANDLER* fileHandler, FPDF_WIDESTRING pTo, - FPDF_WIDESTRING pSubject, FPDF_WIDESTRING pCC, - FPDF_WIDESTRING pBcc, FPDF_WIDESTRING pMsg) - { - if (m_pInfo && m_pInfo->FFI_EmailTo) - m_pInfo->FFI_EmailTo(m_pInfo, fileHandler, pTo, pSubject, pCC, pBcc, pMsg); - } - - void FFI_UploadTo(FPDF_FILEHANDLER* fileHandler, int fileFlag, FPDF_WIDESTRING uploadTo) - { - if (m_pInfo && m_pInfo->FFI_UploadTo) - m_pInfo->FFI_UploadTo(m_pInfo, fileHandler, fileFlag, uploadTo); - } - - FPDF_FILEHANDLER* FFI_OpenFile(int fileType, FPDF_WIDESTRING wsURL, const char* mode) - { - if (m_pInfo && m_pInfo->FFI_OpenFile) - return m_pInfo->FFI_OpenFile(m_pInfo, fileType, wsURL, mode); - return NULL; - } - - CFX_WideString FFI_GetFilePath(FPDF_FILEHANDLER* pFileHandler) const - { + char* pbuff = new char[nRequiredLen]; + if (!pbuff) return L""; - } - - int FFI_GetDocumentCount() const { return 0; } - int FFI_GetCurDocument() const { return 0; } - - IFX_FileRead* FFI_DownloadFromURL(const FX_WCHAR* url) - { - if (m_pInfo && m_pInfo->FFI_DownloadFromURL) - { - CFX_ByteString bstrURL = CFX_WideString(url).UTF16LE_Encode(); - FPDF_WIDESTRING wsURL = (FPDF_WIDESTRING)bstrURL.GetBuffer(bstrURL.GetLength()); - - FPDF_LPFILEHANDLER fileHandler = m_pInfo->FFI_DownloadFromURL(m_pInfo, wsURL); - - CFPDF_FileStream* fileStream = FX_NEW CFPDF_FileStream(fileHandler); - return fileStream; - } - return NULL; - } - CFX_WideString FFI_PostRequestURL(const FX_WCHAR* wsURL, - const FX_WCHAR* wsData, - const FX_WCHAR* wsContentType, - const FX_WCHAR* wsEncode, - const FX_WCHAR* wsHeader) - { - if (m_pInfo && m_pInfo->FFI_PostRequestURL) - { - CFX_ByteString bsURL = CFX_WideString(wsURL).UTF16LE_Encode(); - FPDF_WIDESTRING URL = (FPDF_WIDESTRING)bsURL.GetBuffer(bsURL.GetLength()); - - CFX_ByteString bsData = CFX_WideString(wsData).UTF16LE_Encode(); - FPDF_WIDESTRING data = (FPDF_WIDESTRING)bsData.GetBuffer(bsData.GetLength()); - - CFX_ByteString bsContentType = CFX_WideString(wsContentType).UTF16LE_Encode(); - FPDF_WIDESTRING contentType = (FPDF_WIDESTRING)bsContentType.GetBuffer(bsContentType.GetLength()); - - CFX_ByteString bsEncode = CFX_WideString(wsEncode).UTF16LE_Encode(); - FPDF_WIDESTRING encode = (FPDF_WIDESTRING)bsEncode.GetBuffer(bsEncode.GetLength()); - - CFX_ByteString bsHeader = CFX_WideString(wsHeader).UTF16LE_Encode(); - FPDF_WIDESTRING header = (FPDF_WIDESTRING)bsHeader.GetBuffer(bsHeader.GetLength()); - - FPDF_BSTR respone; - FPDF_BStr_Init(&respone); - m_pInfo->FFI_PostRequestURL(m_pInfo, URL, data, contentType, encode, header, &respone); - - CFX_WideString wsRet = CFX_WideString::FromUTF16LE((unsigned short*)respone.str, respone.len/sizeof(unsigned short)); - FPDF_BStr_Clear(&respone); - - return wsRet; - } + memset(pbuff, 0, nRequiredLen); + int nActualLen = m_pInfo->FFI_GetPlatform(m_pInfo, pbuff, nRequiredLen); + if (nActualLen <= 0 || nActualLen > nRequiredLen) { + delete[] pbuff; + return L""; + } + CFX_ByteString bsRet = CFX_ByteString(pbuff, nActualLen); + CFX_WideString wsRet = CFX_WideString::FromUTF16LE( + (unsigned short*)bsRet.GetBuffer(bsRet.GetLength()), + bsRet.GetLength() / sizeof(unsigned short)); + delete[] pbuff; + return wsRet; + } + return L""; + } + + void FFI_GotoURL(FPDF_DOCUMENT document, + const CFX_WideStringC& wsURL, + FX_BOOL bAppend) { + if (m_pInfo && m_pInfo->FFI_GotoURL) { + CFX_ByteString bsTo = CFX_WideString(wsURL).UTF16LE_Encode(); + FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(wsURL.GetLength()); + m_pInfo->FFI_GotoURL(m_pInfo, document, pTo); + bsTo.ReleaseBuffer(); + } + } + + void FFI_GetURL(FPDF_DOCUMENT document, CFX_WideString& wsURL) { + wsURL = CFX_WideString(); + } + + void FFI_AddDoRecord(FPDF_DOCUMENT document, FPDF_WIDGET hWidget) {} + void FFI_PageEvent(FPDF_PAGE page, FPDF_DWORD flag) {} + + void FFI_GetPageViewRect(FPDF_PAGE page, FS_RECTF& dstRect) { + if (m_pInfo && m_pInfo->FFI_GetPageViewRect) { + double left; + double top; + double right; + double bottom; + m_pInfo->FFI_GetPageViewRect(m_pInfo, page, &left, &top, &right, &bottom); + + dstRect.left = static_cast(left); + dstRect.top = static_cast(top < bottom ? bottom : top); + dstRect.bottom = static_cast(top < bottom ? top : bottom); + dstRect.right = static_cast(right); + } + } + + FX_BOOL FFI_PopupMenu(FPDF_PAGE page, + FPDF_WIDGET hWidget, + int menuFlag, + CFX_PointF ptPopup, + const CFX_PointF* pRectExclude) { + if (m_pInfo && m_pInfo->FFI_PopupMenu) + return m_pInfo->FFI_PopupMenu(m_pInfo, page, hWidget, menuFlag, ptPopup.x, + ptPopup.y); + return FALSE; + } + + void FFI_Alert(FPDF_WIDESTRING Msg, + FPDF_WIDESTRING Title, + int Type, + int Icon) { + if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_alert) + m_pInfo->m_pJsPlatform->app_alert(m_pInfo->m_pJsPlatform, Msg, Title, + Type, Icon); + } + + void FFI_EmailTo(FPDF_FILEHANDLER* fileHandler, + FPDF_WIDESTRING pTo, + FPDF_WIDESTRING pSubject, + FPDF_WIDESTRING pCC, + FPDF_WIDESTRING pBcc, + FPDF_WIDESTRING pMsg) { + if (m_pInfo && m_pInfo->FFI_EmailTo) + m_pInfo->FFI_EmailTo(m_pInfo, fileHandler, pTo, pSubject, pCC, pBcc, + pMsg); + } + + void FFI_UploadTo(FPDF_FILEHANDLER* fileHandler, + int fileFlag, + FPDF_WIDESTRING uploadTo) { + if (m_pInfo && m_pInfo->FFI_UploadTo) + m_pInfo->FFI_UploadTo(m_pInfo, fileHandler, fileFlag, uploadTo); + } + + FPDF_FILEHANDLER* FFI_OpenFile(int fileType, + FPDF_WIDESTRING wsURL, + const char* mode) { + if (m_pInfo && m_pInfo->FFI_OpenFile) + return m_pInfo->FFI_OpenFile(m_pInfo, fileType, wsURL, mode); + return NULL; + } + + CFX_WideString FFI_GetFilePath(FPDF_FILEHANDLER* pFileHandler) const { + return L""; + } + + int FFI_GetDocumentCount() const { return 0; } + int FFI_GetCurDocument() const { return 0; } + + IFX_FileRead* FFI_DownloadFromURL(const FX_WCHAR* url) { + if (m_pInfo && m_pInfo->FFI_DownloadFromURL) { + CFX_ByteString bstrURL = CFX_WideString(url).UTF16LE_Encode(); + FPDF_WIDESTRING wsURL = + (FPDF_WIDESTRING)bstrURL.GetBuffer(bstrURL.GetLength()); + + FPDF_LPFILEHANDLER fileHandler = + m_pInfo->FFI_DownloadFromURL(m_pInfo, wsURL); + + CFPDF_FileStream* fileStream = FX_NEW CFPDF_FileStream(fileHandler); + return fileStream; + } + return NULL; + } + + CFX_WideString FFI_PostRequestURL(const FX_WCHAR* wsURL, + const FX_WCHAR* wsData, + const FX_WCHAR* wsContentType, + const FX_WCHAR* wsEncode, + const FX_WCHAR* wsHeader) { + if (m_pInfo && m_pInfo->FFI_PostRequestURL) { + CFX_ByteString bsURL = CFX_WideString(wsURL).UTF16LE_Encode(); + FPDF_WIDESTRING URL = (FPDF_WIDESTRING)bsURL.GetBuffer(bsURL.GetLength()); + + CFX_ByteString bsData = CFX_WideString(wsData).UTF16LE_Encode(); + FPDF_WIDESTRING data = + (FPDF_WIDESTRING)bsData.GetBuffer(bsData.GetLength()); + + CFX_ByteString bsContentType = + CFX_WideString(wsContentType).UTF16LE_Encode(); + FPDF_WIDESTRING contentType = + (FPDF_WIDESTRING)bsContentType.GetBuffer(bsContentType.GetLength()); + + CFX_ByteString bsEncode = CFX_WideString(wsEncode).UTF16LE_Encode(); + FPDF_WIDESTRING encode = + (FPDF_WIDESTRING)bsEncode.GetBuffer(bsEncode.GetLength()); + + CFX_ByteString bsHeader = CFX_WideString(wsHeader).UTF16LE_Encode(); + FPDF_WIDESTRING header = + (FPDF_WIDESTRING)bsHeader.GetBuffer(bsHeader.GetLength()); + + FPDF_BSTR respone; + FPDF_BStr_Init(&respone); + m_pInfo->FFI_PostRequestURL(m_pInfo, URL, data, contentType, encode, + header, &respone); + + CFX_WideString wsRet = CFX_WideString::FromUTF16LE( + (unsigned short*)respone.str, respone.len / sizeof(unsigned short)); + FPDF_BStr_Clear(&respone); + + return wsRet; + } + return L""; + } + + FPDF_BOOL FFI_PutRequestURL(const FX_WCHAR* wsURL, + const FX_WCHAR* wsData, + const FX_WCHAR* wsEncode) { + if (m_pInfo && m_pInfo->FFI_PutRequestURL) { + CFX_ByteString bsURL = CFX_WideString(wsURL).UTF16LE_Encode(); + FPDF_WIDESTRING URL = (FPDF_WIDESTRING)bsURL.GetBuffer(bsURL.GetLength()); + + CFX_ByteString bsData = CFX_WideString(wsData).UTF16LE_Encode(); + FPDF_WIDESTRING data = + (FPDF_WIDESTRING)bsData.GetBuffer(bsData.GetLength()); + + CFX_ByteString bsEncode = CFX_WideString(wsEncode).UTF16LE_Encode(); + FPDF_WIDESTRING encode = + (FPDF_WIDESTRING)bsEncode.GetBuffer(bsEncode.GetLength()); + + return m_pInfo->FFI_PutRequestURL(m_pInfo, URL, data, encode); + } + return FALSE; + } + + FPDF_BOOL FFI_ShowFileDialog(const FX_WCHAR* wsTitle, + const FX_WCHAR* wsFilter, + CFX_WideStringArray& wsPathArr, + FX_BOOL bOpen) { + return FALSE; + } + + CFX_WideString FFI_GetLanguage() { + if (m_pInfo && m_pInfo->FFI_GetLanguage) { + int nRequiredLen = m_pInfo->FFI_GetLanguage(m_pInfo, NULL, 0); + if (nRequiredLen <= 0) return L""; - } - - FPDF_BOOL FFI_PutRequestURL(const FX_WCHAR* wsURL, const FX_WCHAR* wsData, const FX_WCHAR* wsEncode) - { - if (m_pInfo && m_pInfo->FFI_PutRequestURL) - { - CFX_ByteString bsURL = CFX_WideString(wsURL).UTF16LE_Encode(); - FPDF_WIDESTRING URL = (FPDF_WIDESTRING)bsURL.GetBuffer(bsURL.GetLength()); - - CFX_ByteString bsData = CFX_WideString(wsData).UTF16LE_Encode(); - FPDF_WIDESTRING data = (FPDF_WIDESTRING)bsData.GetBuffer(bsData.GetLength()); - - CFX_ByteString bsEncode = CFX_WideString(wsEncode).UTF16LE_Encode(); - FPDF_WIDESTRING encode = (FPDF_WIDESTRING)bsEncode.GetBuffer(bsEncode.GetLength()); - - return m_pInfo->FFI_PutRequestURL(m_pInfo, URL, data, encode); - } - return FALSE; - } - - FPDF_BOOL FFI_ShowFileDialog(const FX_WCHAR* wsTitle, const FX_WCHAR* wsFilter, CFX_WideStringArray &wsPathArr, FX_BOOL bOpen) - { - return FALSE; - } - CFX_WideString FFI_GetLanguage() - { - if (m_pInfo && m_pInfo->FFI_GetLanguage) - { - int nRequiredLen = m_pInfo->FFI_GetLanguage(m_pInfo, NULL, 0); - if (nRequiredLen <= 0) - return L""; - - char* pbuff = new char[nRequiredLen]; - if (!pbuff) - return L""; - - memset(pbuff, 0, nRequiredLen); - int nActualLen = m_pInfo->FFI_GetLanguage(m_pInfo, pbuff, nRequiredLen); - if (nActualLen <= 0 || nActualLen > nRequiredLen) - { - delete[] pbuff; - return L""; - } - CFX_ByteString bsRet = CFX_ByteString(pbuff, nActualLen); - CFX_WideString wsRet = CFX_WideString::FromUTF16LE((unsigned short*)bsRet.GetBuffer(bsRet.GetLength()), bsRet.GetLength()/sizeof(unsigned short)); - delete[] pbuff; - return wsRet; - } + char* pbuff = new char[nRequiredLen]; + if (!pbuff) return L""; - } - FX_BOOL IsJSInitiated() const { return m_pInfo && m_pInfo->m_pJsPlatform; } - void SetSDKDocument(CPDFSDK_Document* pFXDoc) { m_pSDKDoc = pFXDoc; } - CPDFSDK_Document* GetSDKDocument() const { return m_pSDKDoc; } - CPDFXFA_Document* GetPDFXFADocument() const { return m_pXFADoc; } - CFX_ByteString GetAppName() const { return ""; } - IFX_SystemHandler* GetSysHandler() const { return m_pSysHandler; } - FPDF_FORMFILLINFO* GetFormFillInfo() const { return m_pInfo; } - - CFFL_IFormFiller* GetIFormFiller(); // Creates if not present. - CPDFSDK_AnnotHandlerMgr* GetAnnotHandlerMgr(); // Creates if not present. - IFXJS_Runtime* GetJSRuntime(); // Creates if not present. - CPDFSDK_ActionHandler* GetActionHander(); // Creates if not present. - -private: - CPDFSDK_AnnotHandlerMgr* m_pAnnotHandlerMgr; - CPDFSDK_ActionHandler* m_pActionHandler; - IFXJS_Runtime* m_pJSRuntime; - FPDF_FORMFILLINFO* const m_pInfo; - CPDFSDK_Document* m_pSDKDoc; - CPDFXFA_Document* const m_pXFADoc; - CFFL_IFormFiller* m_pIFormFiller; - IFX_SystemHandler* m_pSysHandler; + memset(pbuff, 0, nRequiredLen); + int nActualLen = m_pInfo->FFI_GetLanguage(m_pInfo, pbuff, nRequiredLen); + if (nActualLen <= 0 || nActualLen > nRequiredLen) { + delete[] pbuff; + return L""; + } + CFX_ByteString bsRet = CFX_ByteString(pbuff, nActualLen); + CFX_WideString wsRet = CFX_WideString::FromUTF16LE( + (unsigned short*)bsRet.GetBuffer(bsRet.GetLength()), + bsRet.GetLength() / sizeof(unsigned short)); + delete[] pbuff; + return wsRet; + } + return L""; + } + + FX_BOOL IsJSInitiated() const { return m_pInfo && m_pInfo->m_pJsPlatform; } + void SetSDKDocument(CPDFSDK_Document* pFXDoc) { m_pSDKDoc = pFXDoc; } + CPDFSDK_Document* GetSDKDocument() const { return m_pSDKDoc; } + CPDFXFA_Document* GetPDFXFADocument() const { return m_pXFADoc; } + CFX_ByteString GetAppName() const { return ""; } + IFX_SystemHandler* GetSysHandler() const { return m_pSysHandler; } + FPDF_FORMFILLINFO* GetFormFillInfo() const { return m_pInfo; } + + CFFL_IFormFiller* GetIFormFiller(); // Creates if not present. + CPDFSDK_AnnotHandlerMgr* GetAnnotHandlerMgr(); // Creates if not present. + IFXJS_Runtime* GetJSRuntime(); // Creates if not present. + CPDFSDK_ActionHandler* GetActionHander(); // Creates if not present. + + private: + CPDFSDK_AnnotHandlerMgr* m_pAnnotHandlerMgr; + CPDFSDK_ActionHandler* m_pActionHandler; + IFXJS_Runtime* m_pJSRuntime; + FPDF_FORMFILLINFO* const m_pInfo; + CPDFSDK_Document* m_pSDKDoc; + CPDFXFA_Document* const m_pXFADoc; + CFFL_IFormFiller* m_pIFormFiller; + IFX_SystemHandler* m_pSysHandler; }; -class CPDFSDK_Document -{ -public: - CPDFSDK_Document(CPDFXFA_Document* pDoc, CPDFDoc_Environment* pEnv); - ~CPDFSDK_Document(); - - CPDFSDK_InterForm* GetInterForm() ; - CPDFXFA_Document* GetDocument() {return m_pDoc;} - - 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(); - void ReMovePageView(CPDFXFA_Page* pPDFPage); - void UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot); - - CPDFSDK_Annot* GetFocusAnnot(); - - IFXJS_Runtime * GetJsRuntime(); - - FX_BOOL SetFocusAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag = 0); - FX_BOOL KillFocusAnnot(FX_UINT nFlag = 0); - - FX_BOOL ExtractPages(const CFX_WordArray &arrExtraPages, CPDF_Document* pDstDoc); - FX_BOOL InsertPages(int nInsertAt, const CPDF_Document* pSrcDoc, const CFX_WordArray &arrSrcPages); - FX_BOOL DeletePages(int nStart, int nCount); - FX_BOOL ReplacePages(int nPage, const CPDF_Document* pSrcDoc, const CFX_WordArray &arrSrcPages); - - void OnCloseDocument(); - - int GetPageCount() {return m_pDoc->GetPageCount();} - FX_BOOL GetPermissions(int nFlag); - FX_BOOL GetChangeMark() {return m_bChangeMask;} - void SetChangeMark() {m_bChangeMask = TRUE;} - void ClearChangeMark() {m_bChangeMask= FALSE;} - CFX_WideString GetPath() ; - CPDFXFA_Page* GetPage(int nIndex); - CPDFDoc_Environment * GetEnv() {return m_pEnv; } - void ProcJavascriptFun(); - FX_BOOL ProcOpenAction(); - CPDF_OCContext* GetOCContext(); -private: - std::map 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_Document { + public: + CPDFSDK_Document(CPDFXFA_Document* pDoc, CPDFDoc_Environment* pEnv); + ~CPDFSDK_Document(); + + CPDFSDK_InterForm* GetInterForm(); + CPDFXFA_Document* GetDocument() { return m_pDoc; } + + 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(); + void ReMovePageView(CPDFXFA_Page* pPDFPage); + void UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot); + + CPDFSDK_Annot* GetFocusAnnot(); + + IFXJS_Runtime* GetJsRuntime(); + + FX_BOOL SetFocusAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag = 0); + FX_BOOL KillFocusAnnot(FX_UINT nFlag = 0); + + FX_BOOL ExtractPages(const CFX_WordArray& arrExtraPages, + CPDF_Document* pDstDoc); + FX_BOOL InsertPages(int nInsertAt, + const CPDF_Document* pSrcDoc, + const CFX_WordArray& arrSrcPages); + FX_BOOL DeletePages(int nStart, int nCount); + FX_BOOL ReplacePages(int nPage, + const CPDF_Document* pSrcDoc, + const CFX_WordArray& arrSrcPages); + + void OnCloseDocument(); + + int GetPageCount() { return m_pDoc->GetPageCount(); } + FX_BOOL GetPermissions(int nFlag); + FX_BOOL GetChangeMark() { return m_bChangeMask; } + void SetChangeMark() { m_bChangeMask = TRUE; } + void ClearChangeMark() { m_bChangeMask = FALSE; } + CFX_WideString GetPath(); + CPDFXFA_Page* GetPage(int nIndex); + CPDFDoc_Environment* GetEnv() { return m_pEnv; } + void ProcJavascriptFun(); + FX_BOOL ProcOpenAction(); + CPDF_OCContext* GetOCContext(); + + private: + std::map 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 -{ -public: - CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc,CPDFXFA_Page* page); - ~CPDFSDK_PageView(); - void PageView_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,CPDF_RenderOptions* pOptions, FX_RECT* pClip = NULL) ; - CPDF_Annot* GetPDFAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); - CPDFSDK_Annot* GetFXAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); - CPDF_Annot* GetPDFWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); - CPDFSDK_Annot* GetFXWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); - CPDFSDK_Annot* GetFocusAnnot() ; - void SetFocusAnnot(CPDFSDK_Annot* pSDKAnnot,FX_UINT nFlag = 0) {m_pSDKDoc->SetFocusAnnot(pSDKAnnot, nFlag);} - FX_BOOL KillFocusAnnot(FX_UINT nFlag = 0) {return m_pSDKDoc->KillFocusAnnot(nFlag);} - FX_BOOL Annot_HasAppearance(CPDF_Annot* pAnnot); - - CPDFSDK_Annot* AddAnnot(CPDF_Dictionary * pDict); - CPDFSDK_Annot* AddAnnot(const FX_CHAR* lpSubType,CPDF_Dictionary * pDict); - CPDFSDK_Annot* AddAnnot(CPDF_Annot * pPDFAnnot); - CPDFSDK_Annot* AddAnnot(IXFA_Widget* pPDFAnnot); - FX_BOOL DeleteAnnot(CPDFSDK_Annot* pAnnot); - - int CountAnnots(); - CPDFSDK_Annot* GetAnnot(int nIndex); - CPDFSDK_Annot* GetAnnotByDict(CPDF_Dictionary * pDict); - CPDFSDK_Annot* GetAnnotByXFAWidget(IXFA_Widget* hWidget); - CPDFXFA_Page* GetPDFXFAPage(){return m_page;} - CPDF_Page* GetPDFPage(); - CPDF_Document* GetPDFDocument(); - CPDFSDK_Document* GetSDKDocument() {return m_pSDKDoc;} - FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_UINT nFlag); - FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_UINT nFlag); - FX_BOOL OnRButtonDown(const CPDF_Point & point, FX_UINT nFlag); - FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_UINT nFlag); - FX_BOOL OnChar(int nChar, FX_UINT nFlag); - FX_BOOL OnKeyDown(int nKeyCode, int nFlag); - FX_BOOL OnKeyUp(int nKeyCode, int nFlag); - - FX_BOOL OnMouseMove(const CPDF_Point & point, int nFlag); - FX_BOOL OnMouseWheel(double deltaX, double deltaY,const CPDF_Point& point, int nFlag); - FX_BOOL IsValidAnnot(void* p); - void GetCurrentMatrix(CPDF_Matrix& matrix) {matrix = m_curMatrix;} - void UpdateRects(CFX_RectArray& rects); - void UpdateView(CPDFSDK_Annot* pAnnot); - CFX_PtrArray* GetAnnotList(){ return &m_fxAnnotArray; } - - int GetPageIndex(); - void LoadFXAnnots(); - void SetValid(FX_BOOL bValid) {m_bValid = bValid;} - FX_BOOL IsValid() {return m_bValid;} - void SetLock(FX_BOOL bLocked) {m_bLocked= bLocked;} - FX_BOOL IsLocked() {return m_bLocked;} -private: - void PageView_OnHighlightFormFields(CFX_RenderDevice* pDevice, CPDFSDK_Widget* pWidget); - CPDF_Matrix m_curMatrix; - CPDFXFA_Page* m_page; - CPDF_AnnotList* m_pAnnotList; - //CPDFSDK_Annot* m_pFocusAnnot; - CFX_PtrArray m_fxAnnotArray; - CPDFSDK_Document* m_pSDKDoc; - CPDFSDK_Annot* m_CaptureWidget; - FX_BOOL m_bEnterWidget; - FX_BOOL m_bExitWidget; - FX_BOOL m_bOnWidget; - FX_BOOL m_bValid; - FX_BOOL m_bLocked; +class CPDFSDK_PageView final { + public: + CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc, CPDFXFA_Page* page); + ~CPDFSDK_PageView(); + void PageView_OnDraw(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + CPDF_RenderOptions* pOptions, + FX_RECT* pClip = NULL); + CPDF_Annot* GetPDFAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); + CPDFSDK_Annot* GetFXAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); + CPDF_Annot* GetPDFWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); + CPDFSDK_Annot* GetFXWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); + CPDFSDK_Annot* GetFocusAnnot(); + void SetFocusAnnot(CPDFSDK_Annot* pSDKAnnot, FX_UINT nFlag = 0) { + m_pSDKDoc->SetFocusAnnot(pSDKAnnot, nFlag); + } + FX_BOOL KillFocusAnnot(FX_UINT nFlag = 0) { + return m_pSDKDoc->KillFocusAnnot(nFlag); + } + FX_BOOL Annot_HasAppearance(CPDF_Annot* pAnnot); + + CPDFSDK_Annot* AddAnnot(CPDF_Dictionary* pDict); + CPDFSDK_Annot* AddAnnot(const FX_CHAR* lpSubType, CPDF_Dictionary* pDict); + CPDFSDK_Annot* AddAnnot(CPDF_Annot* pPDFAnnot); + CPDFSDK_Annot* AddAnnot(IXFA_Widget* pPDFAnnot); + FX_BOOL DeleteAnnot(CPDFSDK_Annot* pAnnot); + + int CountAnnots(); + CPDFSDK_Annot* GetAnnot(int nIndex); + CPDFSDK_Annot* GetAnnotByDict(CPDF_Dictionary* pDict); + CPDFSDK_Annot* GetAnnotByXFAWidget(IXFA_Widget* hWidget); + CPDFXFA_Page* GetPDFXFAPage() { return m_page; } + CPDF_Page* GetPDFPage(); + CPDF_Document* GetPDFDocument(); + CPDFSDK_Document* GetSDKDocument() { return m_pSDKDoc; } + FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_UINT nFlag); + FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_UINT nFlag); + FX_BOOL OnRButtonDown(const CPDF_Point& point, FX_UINT nFlag); + FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_UINT nFlag); + FX_BOOL OnChar(int nChar, FX_UINT nFlag); + FX_BOOL OnKeyDown(int nKeyCode, int nFlag); + FX_BOOL OnKeyUp(int nKeyCode, int nFlag); + + FX_BOOL OnMouseMove(const CPDF_Point& point, int nFlag); + FX_BOOL OnMouseWheel(double deltaX, + double deltaY, + const CPDF_Point& point, + int nFlag); + FX_BOOL IsValidAnnot(void* p); + void GetCurrentMatrix(CPDF_Matrix& matrix) { matrix = m_curMatrix; } + void UpdateRects(CFX_RectArray& rects); + void UpdateView(CPDFSDK_Annot* pAnnot); + CFX_PtrArray* GetAnnotList() { return &m_fxAnnotArray; } + + int GetPageIndex(); + void LoadFXAnnots(); + void SetValid(FX_BOOL bValid) { m_bValid = bValid; } + FX_BOOL IsValid() { return m_bValid; } + void SetLock(FX_BOOL bLocked) { m_bLocked = bLocked; } + FX_BOOL IsLocked() { return m_bLocked; } + + private: + void PageView_OnHighlightFormFields(CFX_RenderDevice* pDevice, + CPDFSDK_Widget* pWidget); + CPDF_Matrix m_curMatrix; + CPDFXFA_Page* m_page; + CPDF_AnnotList* m_pAnnotList; + // CPDFSDK_Annot* m_pFocusAnnot; + CFX_PtrArray m_fxAnnotArray; + CPDFSDK_Document* m_pSDKDoc; + CPDFSDK_Annot* m_CaptureWidget; + FX_BOOL m_bEnterWidget; + FX_BOOL m_bExitWidget; + FX_BOOL m_bOnWidget; + FX_BOOL m_bValid; + FX_BOOL m_bLocked; }; - -template -class CGW_ArrayTemplate : public CFX_ArrayTemplate -{ -public: - CGW_ArrayTemplate(){} - virtual ~CGW_ArrayTemplate(){} - - typedef int (*LP_COMPARE)(TYPE p1, TYPE p2); - - void Sort(LP_COMPARE pCompare, FX_BOOL bAscent = TRUE) - { - int nSize = this->GetSize(); - QuickSort(0, nSize -1, bAscent, pCompare); - } - -private: - void QuickSort(FX_UINT nStartPos, FX_UINT nStopPos, FX_BOOL bAscend, LP_COMPARE pCompare) - { - if (nStartPos >= nStopPos) return; - - if ((nStopPos - nStartPos) == 1) - { - TYPE Value1 = this->GetAt(nStartPos); - TYPE Value2 = this->GetAt(nStopPos); - - int iGreate = (*pCompare)(Value1, Value2); - if ((bAscend && iGreate > 0) || (!bAscend && iGreate < 0)) - { - this->SetAt(nStartPos, Value2); - this->SetAt(nStopPos, Value1); - } - return; - } - - FX_UINT m = nStartPos + (nStopPos - nStartPos) / 2; - FX_UINT i = nStartPos; - - TYPE Value = this->GetAt(m); - - while (i < m) - { - TYPE temp = this->GetAt(i); - - int iGreate = (*pCompare)(temp, Value); - if ((bAscend && iGreate > 0) || (!bAscend && iGreate < 0)) - { - this->InsertAt(m+1, temp); - this->RemoveAt(i); - m--; - } - else - { - i++; - } - } - - FX_UINT j = nStopPos; - - while (j > m) - { - TYPE temp = this->GetAt(j); - - int iGreate = (*pCompare)(temp, Value); - if ((bAscend && iGreate < 0) || (!bAscend && iGreate > 0)) - { - this->RemoveAt(j); - this->InsertAt(m, temp); - m++; - } - else - { - j--; - } - } - - if (nStartPos < m) QuickSort(nStartPos, m, bAscend, pCompare); - if (nStopPos > m) QuickSort(m, nStopPos, bAscend, pCompare); - } +template +class CGW_ArrayTemplate : public CFX_ArrayTemplate { + public: + CGW_ArrayTemplate() {} + virtual ~CGW_ArrayTemplate() {} + + typedef int (*LP_COMPARE)(TYPE p1, TYPE p2); + + void Sort(LP_COMPARE pCompare, FX_BOOL bAscent = TRUE) { + int nSize = this->GetSize(); + QuickSort(0, nSize - 1, bAscent, pCompare); + } + + private: + void QuickSort(FX_UINT nStartPos, + FX_UINT nStopPos, + FX_BOOL bAscend, + LP_COMPARE pCompare) { + if (nStartPos >= nStopPos) + return; + + if ((nStopPos - nStartPos) == 1) { + TYPE Value1 = this->GetAt(nStartPos); + TYPE Value2 = this->GetAt(nStopPos); + + int iGreate = (*pCompare)(Value1, Value2); + if ((bAscend && iGreate > 0) || (!bAscend && iGreate < 0)) { + this->SetAt(nStartPos, Value2); + this->SetAt(nStopPos, Value1); + } + return; + } + + FX_UINT m = nStartPos + (nStopPos - nStartPos) / 2; + FX_UINT i = nStartPos; + + TYPE Value = this->GetAt(m); + + while (i < m) { + TYPE temp = this->GetAt(i); + + int iGreate = (*pCompare)(temp, Value); + if ((bAscend && iGreate > 0) || (!bAscend && iGreate < 0)) { + this->InsertAt(m + 1, temp); + this->RemoveAt(i); + m--; + } else { + i++; + } + } + + FX_UINT j = nStopPos; + + while (j > m) { + TYPE temp = this->GetAt(j); + + int iGreate = (*pCompare)(temp, Value); + if ((bAscend && iGreate < 0) || (!bAscend && iGreate > 0)) { + this->RemoveAt(j); + this->InsertAt(m, temp); + m++; + } else { + j--; + } + } + + if (nStartPos < m) + QuickSort(nStartPos, m, bAscend, pCompare); + if (nStopPos > m) + QuickSort(m, nStopPos, bAscend, pCompare); + } }; #endif // FPDFSDK_INCLUDE_FSDK_MGR_H_ diff --git a/fpdfsdk/include/fsdk_rendercontext.h b/fpdfsdk/include/fsdk_rendercontext.h index b2bc163b49..9d1dabd41c 100644 --- a/fpdfsdk/include/fsdk_rendercontext.h +++ b/fpdfsdk/include/fsdk_rendercontext.h @@ -11,33 +11,31 @@ #include "fsdk_define.h" // Everything about rendering is put here: for OOM recovery -class CRenderContext -{ -public: - CRenderContext() { Clear(); } - ~CRenderContext(); - - void Clear(); - - CFX_RenderDevice* m_pDevice; - CPDF_RenderContext* m_pContext; - CPDF_ProgressiveRenderer* m_pRenderer; - CPDF_AnnotList* m_pAnnots; - CPDF_RenderOptions* m_pOptions; +class CRenderContext { + public: + CRenderContext() { Clear(); } + ~CRenderContext(); + + void Clear(); + + CFX_RenderDevice* m_pDevice; + CPDF_RenderContext* m_pContext; + CPDF_ProgressiveRenderer* m_pRenderer; + CPDF_AnnotList* m_pAnnots; + CPDF_RenderOptions* m_pOptions; #ifdef _WIN32_WCE - CFX_DIBitmap* m_pBitmap; - HBITMAP m_hBitmap; + CFX_DIBitmap* m_pBitmap; + HBITMAP m_hBitmap; #endif }; -class IFSDK_PAUSE_Adapter : public IFX_Pause -{ -public: - IFSDK_PAUSE_Adapter(IFSDK_PAUSE* IPause ); - FX_BOOL NeedToPauseNow(); +class IFSDK_PAUSE_Adapter : public IFX_Pause { + public: + IFSDK_PAUSE_Adapter(IFSDK_PAUSE* IPause); + FX_BOOL NeedToPauseNow(); -private: - IFSDK_PAUSE* m_IPause; + private: + IFSDK_PAUSE* m_IPause; }; #endif // FPDFSDK_INCLUDE_FSDK_RENDERCONTEXT_H_ diff --git a/fpdfsdk/include/fx_systemhandler.h b/fpdfsdk/include/fx_systemhandler.h index bf59e452ea..31d3347477 100644 --- a/fpdfsdk/include/fx_systemhandler.h +++ b/fpdfsdk/include/fx_systemhandler.h @@ -7,13 +7,12 @@ #ifndef FPDFSDK_INCLUDE_FX_SYSTEMHANDLER_H_ #define FPDFSDK_INCLUDE_FX_SYSTEMHANDLER_H_ -typedef void* FX_HWND; -typedef void* FX_HMENU; -typedef void (*TimerCallback)(int32_t idEvent); +typedef void* FX_HWND; +typedef void* FX_HMENU; +typedef void (*TimerCallback)(int32_t idEvent); -typedef struct _FX_SYSTEMTIME -{ - _FX_SYSTEMTIME() +typedef struct _FX_SYSTEMTIME { + _FX_SYSTEMTIME() : wYear(0), wMonth(0), wDayOfWeek(0), @@ -22,72 +21,80 @@ typedef struct _FX_SYSTEMTIME wMinute(0), wSecond(0), wMilliseconds(0) {} - FX_WORD wYear; - FX_WORD wMonth; - FX_WORD wDayOfWeek; - FX_WORD wDay; - FX_WORD wHour; - FX_WORD wMinute; - FX_WORD wSecond; - FX_WORD wMilliseconds; -}FX_SYSTEMTIME; - -//cursor style -#define FXCT_ARROW 0 -#define FXCT_NESW 1 -#define FXCT_NWSE 2 -#define FXCT_VBEAM 3 -#define FXCT_HBEAM 4 -#define FXCT_HAND 5 - -class IFX_SystemHandler -{ -public: - virtual ~IFX_SystemHandler() {} - virtual void InvalidateRect(FX_HWND hWnd, FX_RECT rect) = 0; - virtual void OutputSelectedRect(void* pFormFiller, CPDF_Rect&rect) = 0; - - virtual FX_BOOL IsSelectionImplemented() = 0; - - virtual CFX_WideString GetClipboardText(FX_HWND hWnd) = 0; - virtual FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString string) = 0; - - virtual void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) = 0; - virtual void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) = 0; - - /*cursor style - FXCT_ARROW - FXCT_NESW - FXCT_NWSE - FXCT_VBEAM - FXCT_HBEAM - FXCT_HAND - */ - virtual void SetCursor(int32_t nCursorType) = 0; - - virtual FX_HMENU CreatePopupMenu() = 0; - virtual FX_BOOL AppendMenuItem(FX_HMENU hMenu, int32_t nIDNewItem, CFX_WideString string) = 0; - virtual FX_BOOL EnableMenuItem(FX_HMENU hMenu, int32_t nIDItem, FX_BOOL bEnabled) = 0; - virtual int32_t TrackPopupMenu(FX_HMENU hMenu, int32_t x, int32_t y, FX_HWND hParent) = 0; - virtual void DestroyMenu(FX_HMENU hMenu) = 0; - - virtual CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset) = 0; - virtual FX_BOOL FindNativeTrueTypeFont(int32_t nCharset, CFX_ByteString sFontFaceName) = 0; - virtual CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc, CFX_ByteString sFontFaceName, uint8_t nCharset) = 0; - - virtual int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc) = 0; - virtual void KillTimer(int32_t nID) = 0; - - - virtual FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) = 0; - virtual FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) = 0; - virtual FX_BOOL IsALTKeyDown(FX_DWORD nFlag) = 0; - virtual FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) = 0; - - virtual FX_SYSTEMTIME GetLocalTime() = 0; - - virtual int32_t GetCharSet() = 0; - virtual void SetCharSet(int32_t nCharSet) = 0; + FX_WORD wYear; + FX_WORD wMonth; + FX_WORD wDayOfWeek; + FX_WORD wDay; + FX_WORD wHour; + FX_WORD wMinute; + FX_WORD wSecond; + FX_WORD wMilliseconds; +} FX_SYSTEMTIME; + +// cursor style +#define FXCT_ARROW 0 +#define FXCT_NESW 1 +#define FXCT_NWSE 2 +#define FXCT_VBEAM 3 +#define FXCT_HBEAM 4 +#define FXCT_HAND 5 + +class IFX_SystemHandler { + public: + virtual ~IFX_SystemHandler() {} + virtual void InvalidateRect(FX_HWND hWnd, FX_RECT rect) = 0; + virtual void OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect) = 0; + + virtual FX_BOOL IsSelectionImplemented() = 0; + + virtual CFX_WideString GetClipboardText(FX_HWND hWnd) = 0; + virtual FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString string) = 0; + + virtual void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) = 0; + virtual void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) = 0; + + /*cursor style + FXCT_ARROW + FXCT_NESW + FXCT_NWSE + FXCT_VBEAM + FXCT_HBEAM + FXCT_HAND + */ + virtual void SetCursor(int32_t nCursorType) = 0; + + virtual FX_HMENU CreatePopupMenu() = 0; + virtual FX_BOOL AppendMenuItem(FX_HMENU hMenu, + int32_t nIDNewItem, + CFX_WideString string) = 0; + virtual FX_BOOL EnableMenuItem(FX_HMENU hMenu, + int32_t nIDItem, + FX_BOOL bEnabled) = 0; + virtual int32_t TrackPopupMenu(FX_HMENU hMenu, + int32_t x, + int32_t y, + FX_HWND hParent) = 0; + virtual void DestroyMenu(FX_HMENU hMenu) = 0; + + virtual CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset) = 0; + virtual FX_BOOL FindNativeTrueTypeFont(int32_t nCharset, + CFX_ByteString sFontFaceName) = 0; + virtual CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc, + CFX_ByteString sFontFaceName, + uint8_t nCharset) = 0; + + virtual int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc) = 0; + virtual void KillTimer(int32_t nID) = 0; + + virtual FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) = 0; + virtual FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) = 0; + virtual FX_BOOL IsALTKeyDown(FX_DWORD nFlag) = 0; + virtual FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) = 0; + + virtual FX_SYSTEMTIME GetLocalTime() = 0; + + virtual int32_t GetCharSet() = 0; + virtual void SetCharSet(int32_t nCharSet) = 0; }; #endif // FPDFSDK_INCLUDE_FX_SYSTEMHANDLER_H_ diff --git a/fpdfsdk/include/fxedit/fx_edit.h b/fpdfsdk/include/fxedit/fx_edit.h index d154cb2290..bfe6a254ff 100644 --- a/fpdfsdk/include/fxedit/fx_edit.h +++ b/fpdfsdk/include/fxedit/fx_edit.h @@ -35,451 +35,535 @@ struct CPVT_WordPlace; struct CPVT_WordProps; struct CPVT_WordRange; -#define PVTWORD_STYLE_NORMAL 0x0000L -#define PVTWORD_STYLE_HIGHLIGHT 0x0001L -#define PVTWORD_STYLE_UNDERLINE 0x0002L -#define PVTWORD_STYLE_CROSSOUT 0x0004L -#define PVTWORD_STYLE_SQUIGGLY 0x0008L -#define PVTWORD_STYLE_DUALCROSSOUT 0x0010L -#define PVTWORD_STYLE_BOLD 0x0020L -#define PVTWORD_STYLE_ITALIC 0x0040L - -#define FX_EDIT_ISLATINWORD(u) (u == 0x2D || (u <= 0x005A && u >= 0x0041) || (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0)) +#define PVTWORD_STYLE_NORMAL 0x0000L +#define PVTWORD_STYLE_HIGHLIGHT 0x0001L +#define PVTWORD_STYLE_UNDERLINE 0x0002L +#define PVTWORD_STYLE_CROSSOUT 0x0004L +#define PVTWORD_STYLE_SQUIGGLY 0x0008L +#define PVTWORD_STYLE_DUALCROSSOUT 0x0010L +#define PVTWORD_STYLE_BOLD 0x0020L +#define PVTWORD_STYLE_ITALIC 0x0040L + +#define FX_EDIT_ISLATINWORD(u) \ + (u == 0x2D || (u <= 0x005A && u >= 0x0041) || \ + (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0)) #ifndef DEFAULT_CHARSET -#define DEFAULT_CHARSET 1 +#define DEFAULT_CHARSET 1 #endif -class IFX_Edit_FontMap -{ -public: - virtual ~IFX_Edit_FontMap() { } - //map a fontindex to pdf font. - virtual CPDF_Font * GetPDFFont(int32_t nFontIndex) = 0; - //get the alias of a pdf font. - virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) = 0; - //get the index of a font that can show a word. - virtual int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex) = 0; - //get the charcode of word from unicode - virtual int32_t CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) = 0; - //get the charset of unicode - virtual int32_t CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) = 0; +class IFX_Edit_FontMap { + public: + virtual ~IFX_Edit_FontMap() {} + // map a fontindex to pdf font. + virtual CPDF_Font* GetPDFFont(int32_t nFontIndex) = 0; + // get the alias of a pdf font. + virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) = 0; + // get the index of a font that can show a word. + virtual int32_t GetWordFontIndex(FX_WORD word, + int32_t charset, + int32_t nFontIndex) = 0; + // get the charcode of word from unicode + virtual int32_t CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) = 0; + // get the charset of unicode + virtual int32_t CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) = 0; }; -class IFX_Edit_Notify -{ -public: - virtual ~IFX_Edit_Notify() { } - //set the horizontal scrollbar information. - virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, - FX_FLOAT fContentMin, FX_FLOAT fContentMax, - FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0; - //set the vertical scrollbar information. - virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, - FX_FLOAT fContentMin, FX_FLOAT fContentMax, - FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0; - //set the position of horizontal scrollbar. - virtual void IOnSetScrollPosX(FX_FLOAT fx) = 0; - //set the position of vertical scrollbar. - virtual void IOnSetScrollPosY(FX_FLOAT fy) = 0; - //set the caret information. - virtual void IOnSetCaret(FX_BOOL bVisible,const CPDF_Point & ptHead,const CPDF_Point & ptFoot, const CPVT_WordPlace& place) = 0; - //if the caret position is changed ,send the information of current postion to user. - virtual void IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps) = 0; - //if the text area is changed, send the information to user. - virtual void IOnContentChange(const CPDF_Rect& rcContent) = 0; - //Invalidate the rectangle relative to the bounding box of edit. - virtual void IOnInvalidateRect(CPDF_Rect * pRect) = 0; +class IFX_Edit_Notify { + public: + virtual ~IFX_Edit_Notify() {} + // set the horizontal scrollbar information. + virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep) = 0; + // set the vertical scrollbar information. + virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep) = 0; + // set the position of horizontal scrollbar. + virtual void IOnSetScrollPosX(FX_FLOAT fx) = 0; + // set the position of vertical scrollbar. + virtual void IOnSetScrollPosY(FX_FLOAT fy) = 0; + // set the caret information. + virtual void IOnSetCaret(FX_BOOL bVisible, + const CPDF_Point& ptHead, + const CPDF_Point& ptFoot, + const CPVT_WordPlace& place) = 0; + // if the caret position is changed ,send the information of current postion + // to user. + virtual void IOnCaretChange(const CPVT_SecProps& secProps, + const CPVT_WordProps& wordProps) = 0; + // if the text area is changed, send the information to user. + virtual void IOnContentChange(const CPDF_Rect& rcContent) = 0; + // Invalidate the rectangle relative to the bounding box of edit. + virtual void IOnInvalidateRect(CPDF_Rect* pRect) = 0; }; -class IFX_Edit_OprNotify -{ -public: - virtual ~IFX_Edit_OprNotify() { } - - //OprType: 0 - virtual void OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0; - //OprType: 1 - virtual void OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0; - //OprType: 2 - virtual void OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0; - //OprType: 3 - virtual void OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0; - //OprType: 4 - virtual void OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0; - //OprType: 5 - virtual void OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0; - //OprType: 6 - virtual void OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0; - // - virtual void OnAddUndo(IFX_Edit_UndoItem* pUndoItem) = 0; +class IFX_Edit_OprNotify { + public: + virtual ~IFX_Edit_OprNotify() {} + + // OprType: 0 + virtual void OnInsertWord(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) = 0; + // OprType: 1 + virtual void OnInsertReturn(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) = 0; + // OprType: 2 + virtual void OnBackSpace(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) = 0; + // OprType: 3 + virtual void OnDelete(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) = 0; + // OprType: 4 + virtual void OnClear(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) = 0; + // OprType: 5 + virtual void OnInsertText(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) = 0; + // OprType: 6 + virtual void OnSetText(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) = 0; + // + virtual void OnAddUndo(IFX_Edit_UndoItem* pUndoItem) = 0; }; -class IFX_Edit_Iterator -{ -public: - virtual ~IFX_Edit_Iterator() {} -public: - //move the current position to the next word. - virtual FX_BOOL NextWord() = 0; - //move the current position to the next line. - virtual FX_BOOL NextLine() = 0; - //move the current position to the next section. - virtual FX_BOOL NextSection() = 0; - - //move the current position to the previous word. - virtual FX_BOOL PrevWord() = 0; - //move the current position to the previous line. - virtual FX_BOOL PrevLine() = 0; - //move the current position to the previous section. - virtual FX_BOOL PrevSection() = 0; - - //get the information of the current word. - virtual FX_BOOL GetWord(CPVT_Word & word) const = 0; - //get the information of the current line. - virtual FX_BOOL GetLine(CPVT_Line & line) const = 0; - //get the information of the current section. - virtual FX_BOOL GetSection(CPVT_Section & section) const = 0; - //set the current position. - virtual void SetAt(int32_t nWordIndex) = 0; - //set the current position. - virtual void SetAt(const CPVT_WordPlace & place) = 0; - //get the current position. - virtual const CPVT_WordPlace & GetAt() const = 0; - - //get the edit which this iterator belongs to - virtual IFX_Edit* GetEdit() const = 0; +class IFX_Edit_Iterator { + public: + virtual ~IFX_Edit_Iterator() {} + + public: + // move the current position to the next word. + virtual FX_BOOL NextWord() = 0; + // move the current position to the next line. + virtual FX_BOOL NextLine() = 0; + // move the current position to the next section. + virtual FX_BOOL NextSection() = 0; + + // move the current position to the previous word. + virtual FX_BOOL PrevWord() = 0; + // move the current position to the previous line. + virtual FX_BOOL PrevLine() = 0; + // move the current position to the previous section. + virtual FX_BOOL PrevSection() = 0; + + // get the information of the current word. + virtual FX_BOOL GetWord(CPVT_Word& word) const = 0; + // get the information of the current line. + virtual FX_BOOL GetLine(CPVT_Line& line) const = 0; + // get the information of the current section. + virtual FX_BOOL GetSection(CPVT_Section& section) const = 0; + // set the current position. + virtual void SetAt(int32_t nWordIndex) = 0; + // set the current position. + virtual void SetAt(const CPVT_WordPlace& place) = 0; + // get the current position. + virtual const CPVT_WordPlace& GetAt() const = 0; + + // get the edit which this iterator belongs to + virtual IFX_Edit* GetEdit() const = 0; }; -class IFX_Edit_UndoItem -{ -public: - virtual ~IFX_Edit_UndoItem() { } +class IFX_Edit_UndoItem { + public: + virtual ~IFX_Edit_UndoItem() {} - virtual void Undo() = 0; - virtual void Redo() = 0; - virtual CFX_WideString GetUndoTitle() = 0; + virtual void Undo() = 0; + virtual void Redo() = 0; + virtual CFX_WideString GetUndoTitle() = 0; }; -class IFX_Edit -{ -public: - static IFX_Edit* NewEdit(); - static void DelEdit(IFX_Edit* pEdit); - - //set a IFX_Edit_FontMap pointer implemented by user. - virtual void SetFontMap(IFX_Edit_FontMap* pFontMap) = 0; - //if user don't like to use FontMap, implement VTProvider and set it directly. - virtual void SetVTProvider(IPDF_VariableText_Provider* pProvider) = 0; - //set a IFX_Edit_Notify pointer implemented by user. - virtual void SetNotify(IFX_Edit_Notify * pNotify) = 0; - virtual void SetOprNotify(IFX_Edit_OprNotify* pOprNotify) = 0; - //get a pointer allocated by CPDF_Edit, by this pointer, user can iterate the contents of edit, but don't need to release. - virtual IFX_Edit_Iterator* GetIterator() = 0; - //get a VT pointer relative to this edit. - virtual IPDF_VariableText* GetVariableText() = 0; - //get the IFX_Edit_FontMap pointer set by user. - virtual IFX_Edit_FontMap* GetFontMap() = 0; - - //initialize the edit. - virtual void Initialize() = 0; - - //set the bounding box of the text area. - virtual void SetPlateRect(const CPDF_Rect & rect, FX_BOOL bPaint = TRUE) = 0; - //set the scroll origin - virtual void SetScrollPos(const CPDF_Point & point) = 0; - - //set the horizontal text alignment in text box, nFormat (0:left 1:middle 2:right). - virtual void SetAlignmentH(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) = 0; - //set the vertical text alignment in text box, nFormat (0:top 1:center 2:bottom). - virtual void SetAlignmentV(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) = 0; - //if the text is shown in secret , set a character for substitute. - virtual void SetPasswordChar(FX_WORD wSubWord = '*', FX_BOOL bPaint = TRUE) = 0; - //set the maximal count of words of the text. - virtual void SetLimitChar(int32_t nLimitChar = 0, FX_BOOL bPaint = TRUE) = 0; - //if set the count of charArray , then all words is shown in equal space. - virtual void SetCharArray(int32_t nCharArray = 0, FX_BOOL bPaint = TRUE) = 0; - //set the space of two characters. - virtual void SetCharSpace(FX_FLOAT fCharSpace = 0.0f, FX_BOOL bPaint = TRUE) = 0; - //set the horizontal scale of all characters. - virtual void SetHorzScale(int32_t nHorzScale = 100, FX_BOOL bPaint = TRUE) = 0; - //set the leading of all lines - virtual void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE) = 0; - //if set, CRLF is allowed. - virtual void SetMultiLine(FX_BOOL bMultiLine = TRUE, FX_BOOL bPaint = TRUE) = 0; - //if set, all words auto fit the width of the bounding box. - virtual void SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0; - //if set, a font size is calculated to full fit the bounding box. - virtual void SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0; - //is set, the text is allowed to scroll. - virtual void SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0; - //set the font size of all words. - virtual void SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE) = 0; - //the text is allowed to auto-scroll, allow the text overflow? - virtual void SetTextOverflow(FX_BOOL bAllowed = FALSE, FX_BOOL bPaint = TRUE) = 0; - - //query if the edit is richedit. - virtual FX_BOOL IsRichText() const = 0; - //set the edit is richedit. - virtual void SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE) = 0; - //set the fontsize of selected text. - virtual FX_BOOL SetRichFontSize(FX_FLOAT fFontSize) = 0; - //set the fontindex of selected text, user can change the font of selected text. - virtual FX_BOOL SetRichFontIndex(int32_t nFontIndex) = 0; - //set the textcolor of selected text. - virtual FX_BOOL SetRichTextColor(FX_COLORREF dwColor) = 0; - //set the text script type of selected text. (0:normal 1:superscript 2:subscript) - virtual FX_BOOL SetRichTextScript(int32_t nScriptType) = 0; - //set the bold font style of selected text. - virtual FX_BOOL SetRichTextBold(FX_BOOL bBold = TRUE) = 0; - //set the italic font style of selected text. - virtual FX_BOOL SetRichTextItalic(FX_BOOL bItalic = TRUE) = 0; - //set the underline style of selected text. - virtual FX_BOOL SetRichTextUnderline(FX_BOOL bUnderline = TRUE) = 0; - //set the crossout style of selected text. - virtual FX_BOOL SetRichTextCrossout(FX_BOOL bCrossout = TRUE) = 0; - //set the charspace of selected text, in user coordinate. - virtual FX_BOOL SetRichTextCharSpace(FX_FLOAT fCharSpace) = 0; - //set the horizontal scale of selected text, default value is 100. - virtual FX_BOOL SetRichTextHorzScale(int32_t nHorzScale = 100) = 0; - //set the leading of selected section, in user coordinate. - virtual FX_BOOL SetRichTextLineLeading(FX_FLOAT fLineLeading) = 0; - //set the indent of selected section, in user coordinate. - virtual FX_BOOL SetRichTextLineIndent(FX_FLOAT fLineIndent) = 0; - //set the alignment of selected section, nAlignment(0:left 1:middle 2:right) - virtual FX_BOOL SetRichTextAlignment(int32_t nAlignment) = 0; - - //set the selected range of text. - //if nStartChar == 0 and nEndChar == -1, select all the text. - virtual void SetSel(int32_t nStartChar,int32_t nEndChar) = 0; - //get the selected range of text. - virtual void GetSel(int32_t & nStartChar, int32_t & nEndChar) const = 0; - //select all the text. - virtual void SelectAll() = 0; - //set text is not selected. - virtual void SelectNone() = 0; - //get the caret position. - virtual int32_t GetCaret() const = 0; - virtual CPVT_WordPlace GetCaretWordPlace() const = 0; - //get the string of selected text. - virtual CFX_WideString GetSelText() const = 0; - //get the text conent - virtual CFX_WideString GetText() const = 0; - //query if any text is selected. - virtual FX_BOOL IsSelected() const = 0; - //get the scroll origin - virtual CPDF_Point GetScrollPos() const = 0; - //get the bounding box of the text area. - virtual CPDF_Rect GetPlateRect() const = 0; - //get the fact area of the text. - virtual CPDF_Rect GetContentRect() const = 0; - //get the visible word range - virtual CPVT_WordRange GetVisibleWordRange() const = 0; - //get the whole word range - virtual CPVT_WordRange GetWholeWordRange() const = 0; - //get the word range of select text - virtual CPVT_WordRange GetSelectWordRange() const = 0; - - //send the mousedown message to edit for response. - //if Shift key is hold, bShift is TRUE, is Ctrl key is hold, bCtrl is TRUE. - virtual void OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0; - //send the mousemove message to edit when mouse down is TRUE. - virtual void OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0; - //send the UP key message to edit. - virtual void OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - //send the DOWN key message to edit. - virtual void OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - //send the LEFT key message to edit. - virtual void OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - //send the RIGHT key message to edit. - virtual void OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - //send the HOME key message to edit. - virtual void OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - //send the END key message to edit. - virtual void OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - - //put text into edit. - virtual void SetText(const FX_WCHAR* text,int32_t charset = DEFAULT_CHARSET, - const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL) = 0; - //insert a word into the edit. - virtual FX_BOOL InsertWord(FX_WORD word, int32_t charset = DEFAULT_CHARSET, const CPVT_WordProps * pWordProps = NULL) = 0; - //insert a return into the edit. - virtual FX_BOOL InsertReturn(const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL) = 0; - //insert text into the edit. - virtual FX_BOOL InsertText(const FX_WCHAR* text, int32_t charset = DEFAULT_CHARSET, - const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL) = 0; - //do backspace operation. - virtual FX_BOOL Backspace() = 0; - //do delete operation. - virtual FX_BOOL Delete() = 0; - //delete the selected text. - virtual FX_BOOL Clear() = 0; - - //do Redo operation. - virtual FX_BOOL Redo() = 0; - //do Undo operation. - virtual FX_BOOL Undo() = 0; - //move caret - virtual void SetCaret(int32_t nPos) = 0; - - //arrange all words over again - virtual void Paint() = 0; - - //allow to refresh screen? - virtual void EnableRefresh(FX_BOOL bRefresh) = 0; - - virtual void RefreshWordRange(const CPVT_WordRange& wr) = 0; - - //allow undo/redo? - virtual void EnableUndo(FX_BOOL bUndo) = 0; - - //allow notify? - virtual void EnableNotify(FX_BOOL bNotify) = 0; - - //allow opr notify? - virtual void EnableOprNotify(FX_BOOL bNotify) = 0; - - //map word place to word index. - virtual int32_t WordPlaceToWordIndex(const CPVT_WordPlace & place) const = 0; - //map word index to word place. - virtual CPVT_WordPlace WordIndexToWordPlace(int32_t index) const = 0; - - //get the beginning position of a line - virtual CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace & place) const = 0; - - //get the ending position of a line - virtual CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace & place) const = 0; - - //get the beginning position of a section - virtual CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace & place) const = 0; - - //get the ending position of a section - virtual CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace & place) const = 0; - - //search a wordplace form point - virtual CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const = 0; - - //get the font size of non_rich text or default font size of richtext. - virtual FX_FLOAT GetFontSize() const = 0; - //get the mask character. - virtual FX_WORD GetPasswordChar() const = 0; - //get the count of charArray - virtual int32_t GetCharArray() const = 0; - //get the horizontal scale of all characters - virtual int32_t GetHorzScale() const = 0; - //get the space of two characters - virtual FX_FLOAT GetCharSpace() const = 0; - //get the latin words of specified range - virtual CFX_WideString GetRangeText(const CPVT_WordRange & range) const = 0; - //is the text full in bounding box - virtual FX_BOOL IsTextFull() const = 0; - virtual FX_BOOL CanUndo() const = 0; - virtual FX_BOOL CanRedo() const = 0; - //if the content is changed after settext? - virtual FX_BOOL IsModified() const = 0; - //get the total words in edit - virtual int32_t GetTotalWords() const = 0; - - virtual void AddUndoItem(IFX_Edit_UndoItem* pUndoItem) = 0; - - static CFX_ByteString GetEditAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, - const CPVT_WordRange* pRange = NULL, - FX_BOOL bContinuous = TRUE, FX_WORD SubWord = 0); - static CFX_ByteString GetSelectAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, const CPVT_WordRange* pRange = NULL); - static void DrawEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF crTextFill, FX_COLORREF crTextStroke, - const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, IFX_SystemHandler* pSystemHandler, void* pFFLData); - static void DrawUnderline(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF color, - const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange); - static void DrawRichEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, - const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange); - static void GeneratePageObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit, - const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, FX_COLORREF crText, CFX_ArrayTemplate& ObjArray); - static void GenerateRichPageObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit, - const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, CFX_ArrayTemplate& ObjArray); - static void GenerateUnderlineObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit, - const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, FX_COLORREF color); - -protected: - ~IFX_Edit() { } +class IFX_Edit { + public: + static IFX_Edit* NewEdit(); + static void DelEdit(IFX_Edit* pEdit); + + // set a IFX_Edit_FontMap pointer implemented by user. + virtual void SetFontMap(IFX_Edit_FontMap* pFontMap) = 0; + // if user don't like to use FontMap, implement VTProvider and set it + // directly. + virtual void SetVTProvider(IPDF_VariableText_Provider* pProvider) = 0; + // set a IFX_Edit_Notify pointer implemented by user. + virtual void SetNotify(IFX_Edit_Notify* pNotify) = 0; + virtual void SetOprNotify(IFX_Edit_OprNotify* pOprNotify) = 0; + // get a pointer allocated by CPDF_Edit, by this pointer, user can iterate the + // contents of edit, but don't need to release. + virtual IFX_Edit_Iterator* GetIterator() = 0; + // get a VT pointer relative to this edit. + virtual IPDF_VariableText* GetVariableText() = 0; + // get the IFX_Edit_FontMap pointer set by user. + virtual IFX_Edit_FontMap* GetFontMap() = 0; + + // initialize the edit. + virtual void Initialize() = 0; + + // set the bounding box of the text area. + virtual void SetPlateRect(const CPDF_Rect& rect, FX_BOOL bPaint = TRUE) = 0; + // set the scroll origin + virtual void SetScrollPos(const CPDF_Point& point) = 0; + + // set the horizontal text alignment in text box, nFormat (0:left 1:middle + // 2:right). + virtual void SetAlignmentH(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) = 0; + // set the vertical text alignment in text box, nFormat (0:top 1:center + // 2:bottom). + virtual void SetAlignmentV(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) = 0; + // if the text is shown in secret , set a character for substitute. + virtual void SetPasswordChar(FX_WORD wSubWord = '*', + FX_BOOL bPaint = TRUE) = 0; + // set the maximal count of words of the text. + virtual void SetLimitChar(int32_t nLimitChar = 0, FX_BOOL bPaint = TRUE) = 0; + // if set the count of charArray , then all words is shown in equal space. + virtual void SetCharArray(int32_t nCharArray = 0, FX_BOOL bPaint = TRUE) = 0; + // set the space of two characters. + virtual void SetCharSpace(FX_FLOAT fCharSpace = 0.0f, + FX_BOOL bPaint = TRUE) = 0; + // set the horizontal scale of all characters. + virtual void SetHorzScale(int32_t nHorzScale = 100, + FX_BOOL bPaint = TRUE) = 0; + // set the leading of all lines + virtual void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE) = 0; + // if set, CRLF is allowed. + virtual void SetMultiLine(FX_BOOL bMultiLine = TRUE, + FX_BOOL bPaint = TRUE) = 0; + // if set, all words auto fit the width of the bounding box. + virtual void SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0; + // if set, a font size is calculated to full fit the bounding box. + virtual void SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0; + // is set, the text is allowed to scroll. + virtual void SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0; + // set the font size of all words. + virtual void SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE) = 0; + // the text is allowed to auto-scroll, allow the text overflow? + virtual void SetTextOverflow(FX_BOOL bAllowed = FALSE, + FX_BOOL bPaint = TRUE) = 0; + + // query if the edit is richedit. + virtual FX_BOOL IsRichText() const = 0; + // set the edit is richedit. + virtual void SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE) = 0; + // set the fontsize of selected text. + virtual FX_BOOL SetRichFontSize(FX_FLOAT fFontSize) = 0; + // set the fontindex of selected text, user can change the font of selected + // text. + virtual FX_BOOL SetRichFontIndex(int32_t nFontIndex) = 0; + // set the textcolor of selected text. + virtual FX_BOOL SetRichTextColor(FX_COLORREF dwColor) = 0; + // set the text script type of selected text. (0:normal 1:superscript + // 2:subscript) + virtual FX_BOOL SetRichTextScript(int32_t nScriptType) = 0; + // set the bold font style of selected text. + virtual FX_BOOL SetRichTextBold(FX_BOOL bBold = TRUE) = 0; + // set the italic font style of selected text. + virtual FX_BOOL SetRichTextItalic(FX_BOOL bItalic = TRUE) = 0; + // set the underline style of selected text. + virtual FX_BOOL SetRichTextUnderline(FX_BOOL bUnderline = TRUE) = 0; + // set the crossout style of selected text. + virtual FX_BOOL SetRichTextCrossout(FX_BOOL bCrossout = TRUE) = 0; + // set the charspace of selected text, in user coordinate. + virtual FX_BOOL SetRichTextCharSpace(FX_FLOAT fCharSpace) = 0; + // set the horizontal scale of selected text, default value is 100. + virtual FX_BOOL SetRichTextHorzScale(int32_t nHorzScale = 100) = 0; + // set the leading of selected section, in user coordinate. + virtual FX_BOOL SetRichTextLineLeading(FX_FLOAT fLineLeading) = 0; + // set the indent of selected section, in user coordinate. + virtual FX_BOOL SetRichTextLineIndent(FX_FLOAT fLineIndent) = 0; + // set the alignment of selected section, nAlignment(0:left 1:middle 2:right) + virtual FX_BOOL SetRichTextAlignment(int32_t nAlignment) = 0; + + // set the selected range of text. + // if nStartChar == 0 and nEndChar == -1, select all the text. + virtual void SetSel(int32_t nStartChar, int32_t nEndChar) = 0; + // get the selected range of text. + virtual void GetSel(int32_t& nStartChar, int32_t& nEndChar) const = 0; + // select all the text. + virtual void SelectAll() = 0; + // set text is not selected. + virtual void SelectNone() = 0; + // get the caret position. + virtual int32_t GetCaret() const = 0; + virtual CPVT_WordPlace GetCaretWordPlace() const = 0; + // get the string of selected text. + virtual CFX_WideString GetSelText() const = 0; + // get the text conent + virtual CFX_WideString GetText() const = 0; + // query if any text is selected. + virtual FX_BOOL IsSelected() const = 0; + // get the scroll origin + virtual CPDF_Point GetScrollPos() const = 0; + // get the bounding box of the text area. + virtual CPDF_Rect GetPlateRect() const = 0; + // get the fact area of the text. + virtual CPDF_Rect GetContentRect() const = 0; + // get the visible word range + virtual CPVT_WordRange GetVisibleWordRange() const = 0; + // get the whole word range + virtual CPVT_WordRange GetWholeWordRange() const = 0; + // get the word range of select text + virtual CPVT_WordRange GetSelectWordRange() const = 0; + + // send the mousedown message to edit for response. + // if Shift key is hold, bShift is TRUE, is Ctrl key is hold, bCtrl is TRUE. + virtual void OnMouseDown(const CPDF_Point& point, + FX_BOOL bShift, + FX_BOOL bCtrl) = 0; + // send the mousemove message to edit when mouse down is TRUE. + virtual void OnMouseMove(const CPDF_Point& point, + FX_BOOL bShift, + FX_BOOL bCtrl) = 0; + // send the UP key message to edit. + virtual void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + // send the DOWN key message to edit. + virtual void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + // send the LEFT key message to edit. + virtual void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + // send the RIGHT key message to edit. + virtual void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + // send the HOME key message to edit. + virtual void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + // send the END key message to edit. + virtual void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + + // put text into edit. + virtual void SetText(const FX_WCHAR* text, + int32_t charset = DEFAULT_CHARSET, + const CPVT_SecProps* pSecProps = NULL, + const CPVT_WordProps* pWordProps = NULL) = 0; + // insert a word into the edit. + virtual FX_BOOL InsertWord(FX_WORD word, + int32_t charset = DEFAULT_CHARSET, + const CPVT_WordProps* pWordProps = NULL) = 0; + // insert a return into the edit. + virtual FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps = NULL, + const CPVT_WordProps* pWordProps = NULL) = 0; + // insert text into the edit. + virtual FX_BOOL InsertText(const FX_WCHAR* text, + int32_t charset = DEFAULT_CHARSET, + const CPVT_SecProps* pSecProps = NULL, + const CPVT_WordProps* pWordProps = NULL) = 0; + // do backspace operation. + virtual FX_BOOL Backspace() = 0; + // do delete operation. + virtual FX_BOOL Delete() = 0; + // delete the selected text. + virtual FX_BOOL Clear() = 0; + + // do Redo operation. + virtual FX_BOOL Redo() = 0; + // do Undo operation. + virtual FX_BOOL Undo() = 0; + // move caret + virtual void SetCaret(int32_t nPos) = 0; + + // arrange all words over again + virtual void Paint() = 0; + + // allow to refresh screen? + virtual void EnableRefresh(FX_BOOL bRefresh) = 0; + + virtual void RefreshWordRange(const CPVT_WordRange& wr) = 0; + + // allow undo/redo? + virtual void EnableUndo(FX_BOOL bUndo) = 0; + + // allow notify? + virtual void EnableNotify(FX_BOOL bNotify) = 0; + + // allow opr notify? + virtual void EnableOprNotify(FX_BOOL bNotify) = 0; + + // map word place to word index. + virtual int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const = 0; + // map word index to word place. + virtual CPVT_WordPlace WordIndexToWordPlace(int32_t index) const = 0; + + // get the beginning position of a line + virtual CPVT_WordPlace GetLineBeginPlace( + const CPVT_WordPlace& place) const = 0; + + // get the ending position of a line + virtual CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const = 0; + + // get the beginning position of a section + virtual CPVT_WordPlace GetSectionBeginPlace( + const CPVT_WordPlace& place) const = 0; + + // get the ending position of a section + virtual CPVT_WordPlace GetSectionEndPlace( + const CPVT_WordPlace& place) const = 0; + + // search a wordplace form point + virtual CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const = 0; + + // get the font size of non_rich text or default font size of richtext. + virtual FX_FLOAT GetFontSize() const = 0; + // get the mask character. + virtual FX_WORD GetPasswordChar() const = 0; + // get the count of charArray + virtual int32_t GetCharArray() const = 0; + // get the horizontal scale of all characters + virtual int32_t GetHorzScale() const = 0; + // get the space of two characters + virtual FX_FLOAT GetCharSpace() const = 0; + // get the latin words of specified range + virtual CFX_WideString GetRangeText(const CPVT_WordRange& range) const = 0; + // is the text full in bounding box + virtual FX_BOOL IsTextFull() const = 0; + virtual FX_BOOL CanUndo() const = 0; + virtual FX_BOOL CanRedo() const = 0; + // if the content is changed after settext? + virtual FX_BOOL IsModified() const = 0; + // get the total words in edit + virtual int32_t GetTotalWords() const = 0; + + virtual void AddUndoItem(IFX_Edit_UndoItem* pUndoItem) = 0; + + static CFX_ByteString GetEditAppearanceStream( + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange = NULL, + FX_BOOL bContinuous = TRUE, + FX_WORD SubWord = 0); + static CFX_ByteString GetSelectAppearanceStream( + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange = NULL); + static void DrawEdit(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + IFX_Edit* pEdit, + FX_COLORREF crTextFill, + FX_COLORREF crTextStroke, + const CPDF_Rect& rcClip, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + IFX_SystemHandler* pSystemHandler, + void* pFFLData); + static void DrawUnderline(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + IFX_Edit* pEdit, + FX_COLORREF color, + const CPDF_Rect& rcClip, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange); + static void DrawRichEdit(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + IFX_Edit* pEdit, + const CPDF_Rect& rcClip, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange); + static void GeneratePageObjects( + CPDF_PageObjects* pPageObjects, + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + FX_COLORREF crText, + CFX_ArrayTemplate& ObjArray); + static void GenerateRichPageObjects( + CPDF_PageObjects* pPageObjects, + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + CFX_ArrayTemplate& ObjArray); + static void GenerateUnderlineObjects(CPDF_PageObjects* pPageObjects, + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + FX_COLORREF color); + + protected: + ~IFX_Edit() {} }; -class IFX_List_Notify -{ -public: - virtual ~IFX_List_Notify() { } - //set the horizontal scrollbar information. - virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, - FX_FLOAT fContentMin, FX_FLOAT fContentMax, - FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0; - //set the vertical scrollbar information. - virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, - FX_FLOAT fContentMin, FX_FLOAT fContentMax, - FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0; - //set the position of horizontal scrollbar. - virtual void IOnSetScrollPosX(FX_FLOAT fx) = 0; - //set the position of vertical scrollbar. - virtual void IOnSetScrollPosY(FX_FLOAT fy) = 0; - //Invalidate the rectangle relative to the bounding box of edit. - virtual void IOnInvalidateRect(CPDF_Rect * pRect) = 0; +class IFX_List_Notify { + public: + virtual ~IFX_List_Notify() {} + // set the horizontal scrollbar information. + virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep) = 0; + // set the vertical scrollbar information. + virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep) = 0; + // set the position of horizontal scrollbar. + virtual void IOnSetScrollPosX(FX_FLOAT fx) = 0; + // set the position of vertical scrollbar. + virtual void IOnSetScrollPosY(FX_FLOAT fy) = 0; + // Invalidate the rectangle relative to the bounding box of edit. + virtual void IOnInvalidateRect(CPDF_Rect* pRect) = 0; }; -class IFX_List -{ -public: - static IFX_List* NewList(); - static void DelList(IFX_List* pList); - - virtual void SetFontMap(IFX_Edit_FontMap * pFontMap) = 0; - virtual void SetNotify(IFX_List_Notify * pNotify) = 0; - - virtual void SetPlateRect(const CPDF_Rect & rect) = 0; - virtual void SetFontSize(FX_FLOAT fFontSize) = 0; - - virtual CPDF_Rect GetPlateRect() const = 0; - virtual CPDF_Rect GetContentRect() const = 0; - - virtual FX_FLOAT GetFontSize() const = 0; - virtual IFX_Edit* GetItemEdit(int32_t nIndex) const = 0; - virtual int32_t GetCount() const = 0; - virtual FX_BOOL IsItemSelected(int32_t nIndex) const = 0; - virtual FX_FLOAT GetFirstHeight() const = 0; - - virtual void SetMultipleSel(FX_BOOL bMultiple) = 0; - virtual FX_BOOL IsMultipleSel() const = 0; - virtual FX_BOOL IsValid(int32_t nItemIndex) const = 0; - virtual int32_t FindNext(int32_t nIndex,FX_WCHAR nChar) const = 0; - - virtual void SetScrollPos(const CPDF_Point & point) = 0; - virtual void ScrollToListItem(int32_t nItemIndex) = 0; - virtual CPDF_Rect GetItemRect(int32_t nIndex) const = 0; - virtual int32_t GetCaret() const = 0; - virtual int32_t GetSelect() const = 0; - virtual int32_t GetTopItem() const = 0; - virtual int32_t GetItemIndex(const CPDF_Point & point) const = 0; - virtual int32_t GetFirstSelected() const = 0; - - virtual void AddString(const FX_WCHAR* string) = 0; - virtual void SetTopItem(int32_t nIndex) = 0; - virtual void Select(int32_t nItemIndex) = 0; - virtual void SetCaret(int32_t nItemIndex) = 0; - virtual void Empty() = 0; - virtual void Cancel() = 0; - virtual CFX_WideString GetText() const = 0; - - - virtual void OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0; - virtual void OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0; - virtual void OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - virtual void OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - virtual void OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - virtual void OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - virtual void OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - virtual void OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl) = 0; - virtual void OnVK(int32_t nItemIndex,FX_BOOL bShift,FX_BOOL bCtrl) = 0; - virtual FX_BOOL OnChar(FX_WORD nChar,FX_BOOL bShift,FX_BOOL bCtrl) = 0; - -protected: - ~IFX_List() { } +class IFX_List { + public: + static IFX_List* NewList(); + static void DelList(IFX_List* pList); + + virtual void SetFontMap(IFX_Edit_FontMap* pFontMap) = 0; + virtual void SetNotify(IFX_List_Notify* pNotify) = 0; + + virtual void SetPlateRect(const CPDF_Rect& rect) = 0; + virtual void SetFontSize(FX_FLOAT fFontSize) = 0; + + virtual CPDF_Rect GetPlateRect() const = 0; + virtual CPDF_Rect GetContentRect() const = 0; + + virtual FX_FLOAT GetFontSize() const = 0; + virtual IFX_Edit* GetItemEdit(int32_t nIndex) const = 0; + virtual int32_t GetCount() const = 0; + virtual FX_BOOL IsItemSelected(int32_t nIndex) const = 0; + virtual FX_FLOAT GetFirstHeight() const = 0; + + virtual void SetMultipleSel(FX_BOOL bMultiple) = 0; + virtual FX_BOOL IsMultipleSel() const = 0; + virtual FX_BOOL IsValid(int32_t nItemIndex) const = 0; + virtual int32_t FindNext(int32_t nIndex, FX_WCHAR nChar) const = 0; + + virtual void SetScrollPos(const CPDF_Point& point) = 0; + virtual void ScrollToListItem(int32_t nItemIndex) = 0; + virtual CPDF_Rect GetItemRect(int32_t nIndex) const = 0; + virtual int32_t GetCaret() const = 0; + virtual int32_t GetSelect() const = 0; + virtual int32_t GetTopItem() const = 0; + virtual int32_t GetItemIndex(const CPDF_Point& point) const = 0; + virtual int32_t GetFirstSelected() const = 0; + + virtual void AddString(const FX_WCHAR* string) = 0; + virtual void SetTopItem(int32_t nIndex) = 0; + virtual void Select(int32_t nItemIndex) = 0; + virtual void SetCaret(int32_t nItemIndex) = 0; + virtual void Empty() = 0; + virtual void Cancel() = 0; + virtual CFX_WideString GetText() const = 0; + + virtual void OnMouseDown(const CPDF_Point& point, + FX_BOOL bShift, + FX_BOOL bCtrl) = 0; + virtual void OnMouseMove(const CPDF_Point& point, + FX_BOOL bShift, + FX_BOOL bCtrl) = 0; + virtual void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + virtual void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + virtual void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + virtual void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + virtual void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + virtual void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) = 0; + virtual void OnVK(int32_t nItemIndex, FX_BOOL bShift, FX_BOOL bCtrl) = 0; + virtual FX_BOOL OnChar(FX_WORD nChar, FX_BOOL bShift, FX_BOOL bCtrl) = 0; + + protected: + ~IFX_List() {} }; #endif // FPDFSDK_INCLUDE_FXEDIT_FX_EDIT_H_ diff --git a/fpdfsdk/include/fxedit/fxet_edit.h b/fpdfsdk/include/fxedit/fxet_edit.h index 7a2742f0ee..d654ebc451 100644 --- a/fpdfsdk/include/fxedit/fxet_edit.h +++ b/fpdfsdk/include/fxedit/fxet_edit.h @@ -23,795 +23,801 @@ class CFX_Edit_UndoItem; class CFX_Edit_Undo; class CFX_Edit_Provider; -#define FX_EDIT_IsFloatZero(f) (f < 0.0001 && f > -0.0001) -#define FX_EDIT_IsFloatEqual(fa,fb) FX_EDIT_IsFloatZero(fa - fb) -#define FX_EDIT_IsFloatBigger(fa,fb) (fa > fb && !FX_EDIT_IsFloatEqual(fa,fb)) -#define FX_EDIT_IsFloatSmaller(fa,fb) (fa < fb && !FX_EDIT_IsFloatEqual(fa,fb)) +#define FX_EDIT_IsFloatZero(f) (f < 0.0001 && f > -0.0001) +#define FX_EDIT_IsFloatEqual(fa, fb) FX_EDIT_IsFloatZero(fa - fb) +#define FX_EDIT_IsFloatBigger(fa, fb) (fa > fb && !FX_EDIT_IsFloatEqual(fa, fb)) +#define FX_EDIT_IsFloatSmaller(fa, fb) \ + (fa < fb && !FX_EDIT_IsFloatEqual(fa, fb)) + +template +T FX_EDIT_MIN(const T& i, const T& j) { + return ((i < j) ? i : j); +} +template +T FX_EDIT_MAX(const T& i, const T& j) { + return ((i > j) ? i : j); +} + +#define FX_EDIT_PI 3.14159265358979f +#define FX_EDIT_ITALIC_ANGEL 10 * FX_EDIT_PI / 180.0f -template T FX_EDIT_MIN (const T & i, const T & j) { return ((i < j) ? i : j); } -template T FX_EDIT_MAX (const T & i, const T & j) { return ((i > j) ? i : j); } +/* ------------------------- CFX_Edit_Refresh ---------------------------- */ -#define FX_EDIT_PI 3.14159265358979f -#define FX_EDIT_ITALIC_ANGEL 10 * FX_EDIT_PI / 180.0f +enum REFRESH_PLAN_E { RP_ANALYSE, RP_NOANALYSE, RP_OPTIONAL }; + +enum EDIT_PROPS_E { + EP_LINELEADING, + EP_LINEINDENT, + EP_ALIGNMENT, + EP_FONTINDEX, + EP_FONTSIZE, + EP_WORDCOLOR, + EP_SCRIPTTYPE, + EP_UNDERLINE, + EP_CROSSOUT, + EP_CHARSPACE, + EP_HORZSCALE, + EP_BOLD, + EP_ITALIC +}; +struct CFX_Edit_LineRect { + CFX_Edit_LineRect(const CPVT_WordRange& wrLine, const CPDF_Rect& rcLine) + : m_wrLine(wrLine), m_rcLine(rcLine) {} -/* ------------------------- CFX_Edit_Refresh ---------------------------- */ + FX_BOOL operator!=(const CFX_Edit_LineRect& linerect) const { + return FXSYS_memcmp(this, &linerect, sizeof(CFX_Edit_LineRect)) != 0; + } -enum REFRESH_PLAN_E -{ - RP_ANALYSE, - RP_NOANALYSE, - RP_OPTIONAL -}; + FX_BOOL IsSameHeight(const CFX_Edit_LineRect& linerect) const { + return FX_EDIT_IsFloatZero( + (m_rcLine.top - m_rcLine.bottom) - + (linerect.m_rcLine.top - linerect.m_rcLine.bottom)); + } -enum EDIT_PROPS_E -{ - EP_LINELEADING, - EP_LINEINDENT, - EP_ALIGNMENT, - EP_FONTINDEX, - EP_FONTSIZE, - EP_WORDCOLOR, - EP_SCRIPTTYPE, - EP_UNDERLINE, - EP_CROSSOUT, - EP_CHARSPACE, - EP_HORZSCALE, - EP_BOLD, - EP_ITALIC -}; + FX_BOOL IsSameTop(const CFX_Edit_LineRect& linerect) const { + return FX_EDIT_IsFloatZero(m_rcLine.top - linerect.m_rcLine.top); + } -struct CFX_Edit_LineRect -{ - CFX_Edit_LineRect(const CPVT_WordRange & wrLine,const CPDF_Rect & rcLine) : - m_wrLine(wrLine), m_rcLine(rcLine) - { - } - - FX_BOOL operator != (const CFX_Edit_LineRect & linerect) const - { - return FXSYS_memcmp(this, &linerect, sizeof(CFX_Edit_LineRect)) != 0; - } - - FX_BOOL IsSameHeight(const CFX_Edit_LineRect & linerect) const - { - return FX_EDIT_IsFloatZero((m_rcLine.top - m_rcLine.bottom) - (linerect.m_rcLine.top -linerect.m_rcLine.bottom)); - } - - FX_BOOL IsSameTop(const CFX_Edit_LineRect & linerect) const - { - return FX_EDIT_IsFloatZero(m_rcLine.top - linerect.m_rcLine.top); - } - - FX_BOOL IsSameLeft(const CFX_Edit_LineRect & linerect) const - { - return FX_EDIT_IsFloatZero(m_rcLine.left - linerect.m_rcLine.left); - } - - FX_BOOL IsSameRight(const CFX_Edit_LineRect & linerect) const - { - return FX_EDIT_IsFloatZero(m_rcLine.right - linerect.m_rcLine.right); - } - - CPVT_WordRange m_wrLine; - CPDF_Rect m_rcLine; -}; + FX_BOOL IsSameLeft(const CFX_Edit_LineRect& linerect) const { + return FX_EDIT_IsFloatZero(m_rcLine.left - linerect.m_rcLine.left); + } -class CFX_Edit_LineRectArray -{ -public: - CFX_Edit_LineRectArray() - { - } - - virtual ~CFX_Edit_LineRectArray() - { - Empty(); - } - - void Empty() - { - for (int32_t i = 0, sz = m_LineRects.GetSize(); i < sz; i++) - delete m_LineRects.GetAt(i); - - m_LineRects.RemoveAll(); - } - - void RemoveAll() - { - m_LineRects.RemoveAll(); - } - - void operator = (CFX_Edit_LineRectArray & rects) - { - Empty(); - for (int32_t i = 0, sz = rects.GetSize(); i < sz; i++) - m_LineRects.Add(rects.GetAt(i)); - - rects.RemoveAll(); - } - - void Add(const CPVT_WordRange & wrLine,const CPDF_Rect & rcLine) - { - if (CFX_Edit_LineRect * pRect = new CFX_Edit_LineRect(wrLine,rcLine)) - m_LineRects.Add(pRect); - } - - int32_t GetSize() const - { - return m_LineRects.GetSize(); - } - - CFX_Edit_LineRect * GetAt(int32_t nIndex) const - { - if (nIndex < 0 || nIndex >= m_LineRects.GetSize()) - return NULL; - - return m_LineRects.GetAt(nIndex); - } - - CFX_ArrayTemplate m_LineRects; -}; + FX_BOOL IsSameRight(const CFX_Edit_LineRect& linerect) const { + return FX_EDIT_IsFloatZero(m_rcLine.right - linerect.m_rcLine.right); + } -class CFX_Edit_RectArray -{ -public: - CFX_Edit_RectArray() - { - } - - virtual ~CFX_Edit_RectArray() - { - Empty(); - } - - void Empty() - { - for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++) - delete m_Rects.GetAt(i); - - m_Rects.RemoveAll(); - } - - void Add(const CPDF_Rect & rect) - { - //check for overlaped area - for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++) - if (CPDF_Rect * pRect = m_Rects.GetAt(i)) - if (pRect->Contains(rect))return; - - if (CPDF_Rect * pNewRect = new CPDF_Rect(rect)) - m_Rects.Add(pNewRect); - } - - int32_t GetSize() const - { - return m_Rects.GetSize(); - } - - CPDF_Rect * GetAt(int32_t nIndex) const - { - if (nIndex < 0 || nIndex >= m_Rects.GetSize()) - return NULL; - - return m_Rects.GetAt(nIndex); - } - - CFX_ArrayTemplate m_Rects; + CPVT_WordRange m_wrLine; + CPDF_Rect m_rcLine; }; -class CFX_Edit_Refresh -{ -public: - CFX_Edit_Refresh(); - virtual ~CFX_Edit_Refresh(); - - void BeginRefresh(); - void Push(const CPVT_WordRange & linerange,const CPDF_Rect & rect); - void NoAnalyse(); - void Analyse(int32_t nAlignment); - void AddRefresh(const CPDF_Rect & rect); - const CFX_Edit_RectArray * GetRefreshRects() const; - void EndRefresh(); - -private: - CFX_Edit_LineRectArray m_NewLineRects; - CFX_Edit_LineRectArray m_OldLineRects; - CFX_Edit_RectArray m_RefreshRects; -}; +class CFX_Edit_LineRectArray { + public: + CFX_Edit_LineRectArray() {} + virtual ~CFX_Edit_LineRectArray() { Empty(); } -/* ------------------------- CFX_Edit_Select ---------------------------- */ + void Empty() { + for (int32_t i = 0, sz = m_LineRects.GetSize(); i < sz; i++) + delete m_LineRects.GetAt(i); + + m_LineRects.RemoveAll(); + } + + void RemoveAll() { m_LineRects.RemoveAll(); } -class CFX_Edit_Select -{ -public: - CFX_Edit_Select() - { - } - - CFX_Edit_Select(const CPVT_WordPlace & begin,const CPVT_WordPlace & end) - { - Set(begin,end); - } - - CFX_Edit_Select(const CPVT_WordRange & range) - { - Set(range.BeginPos,range.EndPos); - } - - CPVT_WordRange ConvertToWordRange() const - { - return CPVT_WordRange(BeginPos, EndPos); - } - - void Default() - { - BeginPos.Default(); - EndPos.Default(); - } - - void Set(const CPVT_WordPlace & begin,const CPVT_WordPlace & end) - { - BeginPos = begin; - EndPos = end; - } - - void SetBeginPos(const CPVT_WordPlace & begin) - { - BeginPos = begin; - } - - void SetEndPos(const CPVT_WordPlace & end) - { - EndPos = end; - } - - FX_BOOL IsExist() const - { - return BeginPos != EndPos; - } - - FX_BOOL operator != (const CPVT_WordRange & wr) const - { - return wr.BeginPos != BeginPos || wr.EndPos != EndPos; - } - - CPVT_WordPlace BeginPos,EndPos; + void operator=(CFX_Edit_LineRectArray& rects) { + Empty(); + for (int32_t i = 0, sz = rects.GetSize(); i < sz; i++) + m_LineRects.Add(rects.GetAt(i)); + + rects.RemoveAll(); + } + + void Add(const CPVT_WordRange& wrLine, const CPDF_Rect& rcLine) { + if (CFX_Edit_LineRect* pRect = new CFX_Edit_LineRect(wrLine, rcLine)) + m_LineRects.Add(pRect); + } + + int32_t GetSize() const { return m_LineRects.GetSize(); } + + CFX_Edit_LineRect* GetAt(int32_t nIndex) const { + if (nIndex < 0 || nIndex >= m_LineRects.GetSize()) + return NULL; + + return m_LineRects.GetAt(nIndex); + } + + CFX_ArrayTemplate m_LineRects; }; -/* ------------------------- CFX_Edit_Undo ---------------------------- */ +class CFX_Edit_RectArray { + public: + CFX_Edit_RectArray() {} -class CFX_Edit_Undo -{ -public: - CFX_Edit_Undo(int32_t nBufsize = 10000); - virtual ~CFX_Edit_Undo(); + virtual ~CFX_Edit_RectArray() { Empty(); } - void Undo(); - void Redo(); + void Empty() { + for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++) + delete m_Rects.GetAt(i); - void AddItem(IFX_Edit_UndoItem* pItem); + m_Rects.RemoveAll(); + } - FX_BOOL CanUndo() const; - FX_BOOL CanRedo() const; - FX_BOOL IsModified() const; - FX_BOOL IsWorking() const; + void Add(const CPDF_Rect& rect) { + // check for overlaped area + for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++) + if (CPDF_Rect* pRect = m_Rects.GetAt(i)) + if (pRect->Contains(rect)) + return; - void Reset(); + if (CPDF_Rect* pNewRect = new CPDF_Rect(rect)) + m_Rects.Add(pNewRect); + } - IFX_Edit_UndoItem* GetItem(int32_t nIndex); - int32_t GetItemCount(){return m_UndoItemStack.GetSize();} - int32_t GetCurUndoPos(){return m_nCurUndoPos;} + int32_t GetSize() const { return m_Rects.GetSize(); } -private: - void SetBufSize(int32_t nSize){m_nBufSize = nSize;} - int32_t GetBufSize(){return m_nBufSize;} + CPDF_Rect* GetAt(int32_t nIndex) const { + if (nIndex < 0 || nIndex >= m_Rects.GetSize()) + return NULL; - void RemoveHeads(); - void RemoveTails(); + return m_Rects.GetAt(nIndex); + } -private: - CFX_ArrayTemplate m_UndoItemStack; + CFX_ArrayTemplate m_Rects; +}; - int32_t m_nCurUndoPos; - int32_t m_nBufSize; - FX_BOOL m_bModified; - FX_BOOL m_bVirgin; - FX_BOOL m_bWorking; +class CFX_Edit_Refresh { + public: + CFX_Edit_Refresh(); + virtual ~CFX_Edit_Refresh(); + + void BeginRefresh(); + void Push(const CPVT_WordRange& linerange, const CPDF_Rect& rect); + void NoAnalyse(); + void Analyse(int32_t nAlignment); + void AddRefresh(const CPDF_Rect& rect); + const CFX_Edit_RectArray* GetRefreshRects() const; + void EndRefresh(); + + private: + CFX_Edit_LineRectArray m_NewLineRects; + CFX_Edit_LineRectArray m_OldLineRects; + CFX_Edit_RectArray m_RefreshRects; }; -class CFX_Edit_UndoItem : public IFX_Edit_UndoItem -{ -public: - CFX_Edit_UndoItem() : m_bFirst(TRUE), m_bLast(TRUE) {} +/* ------------------------- CFX_Edit_Select ---------------------------- */ - CFX_WideString GetUndoTitle() override { return L""; } +class CFX_Edit_Select { + public: + CFX_Edit_Select() {} - void SetFirst(FX_BOOL bFirst){m_bFirst = bFirst;} - FX_BOOL IsFirst(){return m_bFirst;} - void SetLast(FX_BOOL bLast){m_bLast = bLast;} - FX_BOOL IsLast(){return m_bLast;} + CFX_Edit_Select(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) { + Set(begin, end); + } -private: - FX_BOOL m_bFirst; - FX_BOOL m_bLast; -}; + CFX_Edit_Select(const CPVT_WordRange& range) { + Set(range.BeginPos, range.EndPos); + } -class CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem -{ -public: - CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle); - ~CFX_Edit_GroupUndoItem() override; + CPVT_WordRange ConvertToWordRange() const { + return CPVT_WordRange(BeginPos, EndPos); + } - void Undo() override; - void Redo() override; - CFX_WideString GetUndoTitle() override; + void Default() { + BeginPos.Default(); + EndPos.Default(); + } - void AddUndoItem(CFX_Edit_UndoItem* pUndoItem); - void UpdateItems(); + void Set(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) { + BeginPos = begin; + EndPos = end; + } -private: - CFX_WideString m_sTitle; - CFX_ArrayTemplate m_Items; + void SetBeginPos(const CPVT_WordPlace& begin) { BeginPos = begin; } + + void SetEndPos(const CPVT_WordPlace& end) { EndPos = end; } + + FX_BOOL IsExist() const { return BeginPos != EndPos; } + + FX_BOOL operator!=(const CPVT_WordRange& wr) const { + return wr.BeginPos != BeginPos || wr.EndPos != EndPos; + } + + CPVT_WordPlace BeginPos, EndPos; }; -/* ------------------------- CFX_Edit_UndoItem derived classes ---------------------------- */ +/* ------------------------- CFX_Edit_Undo ---------------------------- */ -class CFXEU_InsertWord : public CFX_Edit_UndoItem -{ -public: - CFXEU_InsertWord(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - FX_WORD word, int32_t charset, const CPVT_WordProps * pWordProps); - virtual ~CFXEU_InsertWord(); +class CFX_Edit_Undo { + public: + CFX_Edit_Undo(int32_t nBufsize = 10000); + virtual ~CFX_Edit_Undo(); - void Redo(); - void Undo(); + void Undo(); + void Redo(); -private: - CFX_Edit* m_pEdit; + void AddItem(IFX_Edit_UndoItem* pItem); - CPVT_WordPlace m_wpOld; - CPVT_WordPlace m_wpNew; - FX_WORD m_Word; - int32_t m_nCharset; - CPVT_WordProps m_WordProps; -}; + FX_BOOL CanUndo() const; + FX_BOOL CanRedo() const; + FX_BOOL IsModified() const; + FX_BOOL IsWorking() const; -class CFXEU_InsertReturn : public CFX_Edit_UndoItem -{ -public: - CFXEU_InsertReturn(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps); - virtual ~CFXEU_InsertReturn(); + void Reset(); - void Redo(); - void Undo(); + IFX_Edit_UndoItem* GetItem(int32_t nIndex); + int32_t GetItemCount() { return m_UndoItemStack.GetSize(); } + int32_t GetCurUndoPos() { return m_nCurUndoPos; } -private: - CFX_Edit * m_pEdit; + private: + void SetBufSize(int32_t nSize) { m_nBufSize = nSize; } + int32_t GetBufSize() { return m_nBufSize; } - CPVT_WordPlace m_wpOld; - CPVT_WordPlace m_wpNew; - CPVT_SecProps m_SecProps; - CPVT_WordProps m_WordProps; -}; + void RemoveHeads(); + void RemoveTails(); + + private: + CFX_ArrayTemplate m_UndoItemStack; -class CFXEU_Backspace : public CFX_Edit_UndoItem -{ -public: - CFXEU_Backspace(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - FX_WORD word, int32_t charset, - const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps); - virtual ~CFXEU_Backspace(); - - void Redo(); - void Undo(); - -private: - CFX_Edit * m_pEdit; - - CPVT_WordPlace m_wpOld; - CPVT_WordPlace m_wpNew; - FX_WORD m_Word; - int32_t m_nCharset; - CPVT_SecProps m_SecProps; - CPVT_WordProps m_WordProps; + int32_t m_nCurUndoPos; + int32_t m_nBufSize; + FX_BOOL m_bModified; + FX_BOOL m_bVirgin; + FX_BOOL m_bWorking; }; -class CFXEU_Delete : public CFX_Edit_UndoItem -{ -public: - CFXEU_Delete(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - FX_WORD word, int32_t charset, - const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps, FX_BOOL bSecEnd); - virtual ~CFXEU_Delete(); - - void Redo(); - void Undo(); - -private: - CFX_Edit * m_pEdit; - - CPVT_WordPlace m_wpOld; - CPVT_WordPlace m_wpNew; - FX_WORD m_Word; - int32_t m_nCharset; - CPVT_SecProps m_SecProps; - CPVT_WordProps m_WordProps; - FX_BOOL m_bSecEnd; +class CFX_Edit_UndoItem : public IFX_Edit_UndoItem { + public: + CFX_Edit_UndoItem() : m_bFirst(TRUE), m_bLast(TRUE) {} + + CFX_WideString GetUndoTitle() override { return L""; } + + void SetFirst(FX_BOOL bFirst) { m_bFirst = bFirst; } + FX_BOOL IsFirst() { return m_bFirst; } + void SetLast(FX_BOOL bLast) { m_bLast = bLast; } + FX_BOOL IsLast() { return m_bLast; } + + private: + FX_BOOL m_bFirst; + FX_BOOL m_bLast; }; -class CFXEU_Clear : public CFX_Edit_UndoItem -{ -public: - CFXEU_Clear(CFX_Edit * pEdit, const CPVT_WordRange & wrSel, const CFX_WideString & swText); - virtual ~CFXEU_Clear(); +class CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem { + public: + CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle); + ~CFX_Edit_GroupUndoItem() override; - void Redo(); - void Undo(); + void Undo() override; + void Redo() override; + CFX_WideString GetUndoTitle() override; -private: - CFX_Edit* m_pEdit; + void AddUndoItem(CFX_Edit_UndoItem* pUndoItem); + void UpdateItems(); - CPVT_WordRange m_wrSel; - CFX_WideString m_swText; + private: + CFX_WideString m_sTitle; + CFX_ArrayTemplate m_Items; }; -class CFXEU_ClearRich : public CFX_Edit_UndoItem -{ -public: - CFXEU_ClearRich(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - const CPVT_WordRange & wrSel, - FX_WORD word, int32_t charset, - const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps); - virtual ~CFXEU_ClearRich(); - - void Redo(); - void Undo(); - -private: - CFX_Edit * m_pEdit; - - CPVT_WordPlace m_wpOld; - CPVT_WordPlace m_wpNew; - CPVT_WordRange m_wrSel; - FX_WORD m_Word; - int32_t m_nCharset; - CPVT_SecProps m_SecProps; - CPVT_WordProps m_WordProps; +/* ------------------------- CFX_Edit_UndoItem derived classes + * ---------------------------- */ + +class CFXEU_InsertWord : public CFX_Edit_UndoItem { + public: + CFXEU_InsertWord(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + FX_WORD word, + int32_t charset, + const CPVT_WordProps* pWordProps); + virtual ~CFXEU_InsertWord(); + + void Redo(); + void Undo(); + + private: + CFX_Edit* m_pEdit; + + CPVT_WordPlace m_wpOld; + CPVT_WordPlace m_wpNew; + FX_WORD m_Word; + int32_t m_nCharset; + CPVT_WordProps m_WordProps; }; -class CFXEU_InsertText : public CFX_Edit_UndoItem -{ -public: - CFXEU_InsertText(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - const CFX_WideString & swText, int32_t charset, - const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps); - virtual ~CFXEU_InsertText(); - - void Redo(); - void Undo(); - -private: - CFX_Edit * m_pEdit; - - CPVT_WordPlace m_wpOld; - CPVT_WordPlace m_wpNew; - CFX_WideString m_swText; - int32_t m_nCharset; - CPVT_SecProps m_SecProps; - CPVT_WordProps m_WordProps; +class CFXEU_InsertReturn : public CFX_Edit_UndoItem { + public: + CFXEU_InsertReturn(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps); + virtual ~CFXEU_InsertReturn(); + + void Redo(); + void Undo(); + + private: + CFX_Edit* m_pEdit; + + CPVT_WordPlace m_wpOld; + CPVT_WordPlace m_wpNew; + CPVT_SecProps m_SecProps; + CPVT_WordProps m_WordProps; }; -class CFXEU_SetSecProps : public CFX_Edit_UndoItem -{ -public: - CFXEU_SetSecProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep, - const CPVT_SecProps & oldsecprops, const CPVT_WordProps & oldwordprops, - const CPVT_SecProps & newsecprops, const CPVT_WordProps & newwordprops, const CPVT_WordRange & range); - virtual ~CFXEU_SetSecProps(); - - void Redo(); - void Undo(); - -private: - CFX_Edit * m_pEdit; - CPVT_WordPlace m_wpPlace; - CPVT_WordRange m_wrPlace; - EDIT_PROPS_E m_eProps; - - CPVT_SecProps m_OldSecProps; - CPVT_SecProps m_NewSecProps; - CPVT_WordProps m_OldWordProps; - CPVT_WordProps m_NewWordProps; +class CFXEU_Backspace : public CFX_Edit_UndoItem { + public: + CFXEU_Backspace(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + FX_WORD word, + int32_t charset, + const CPVT_SecProps& SecProps, + const CPVT_WordProps& WordProps); + virtual ~CFXEU_Backspace(); + + void Redo(); + void Undo(); + + private: + CFX_Edit* m_pEdit; + + CPVT_WordPlace m_wpOld; + CPVT_WordPlace m_wpNew; + FX_WORD m_Word; + int32_t m_nCharset; + CPVT_SecProps m_SecProps; + CPVT_WordProps m_WordProps; }; -class CFXEU_SetWordProps : public CFX_Edit_UndoItem -{ -public: - CFXEU_SetWordProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep, - const CPVT_WordProps & oldprops, const CPVT_WordProps & newprops, const CPVT_WordRange & range); - virtual ~CFXEU_SetWordProps(); +class CFXEU_Delete : public CFX_Edit_UndoItem { + public: + CFXEU_Delete(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + FX_WORD word, + int32_t charset, + const CPVT_SecProps& SecProps, + const CPVT_WordProps& WordProps, + FX_BOOL bSecEnd); + virtual ~CFXEU_Delete(); + + void Redo(); + void Undo(); + + private: + CFX_Edit* m_pEdit; + + CPVT_WordPlace m_wpOld; + CPVT_WordPlace m_wpNew; + FX_WORD m_Word; + int32_t m_nCharset; + CPVT_SecProps m_SecProps; + CPVT_WordProps m_WordProps; + FX_BOOL m_bSecEnd; +}; + +class CFXEU_Clear : public CFX_Edit_UndoItem { + public: + CFXEU_Clear(CFX_Edit* pEdit, + const CPVT_WordRange& wrSel, + const CFX_WideString& swText); + virtual ~CFXEU_Clear(); + + void Redo(); + void Undo(); + + private: + CFX_Edit* m_pEdit; + + CPVT_WordRange m_wrSel; + CFX_WideString m_swText; +}; - void Redo(); - void Undo(); +class CFXEU_ClearRich : public CFX_Edit_UndoItem { + public: + CFXEU_ClearRich(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + const CPVT_WordRange& wrSel, + FX_WORD word, + int32_t charset, + const CPVT_SecProps& SecProps, + const CPVT_WordProps& WordProps); + virtual ~CFXEU_ClearRich(); + + void Redo(); + void Undo(); + + private: + CFX_Edit* m_pEdit; + + CPVT_WordPlace m_wpOld; + CPVT_WordPlace m_wpNew; + CPVT_WordRange m_wrSel; + FX_WORD m_Word; + int32_t m_nCharset; + CPVT_SecProps m_SecProps; + CPVT_WordProps m_WordProps; +}; -private: - CFX_Edit * m_pEdit; - CPVT_WordPlace m_wpPlace; - CPVT_WordRange m_wrPlace; - EDIT_PROPS_E m_eProps; +class CFXEU_InsertText : public CFX_Edit_UndoItem { + public: + CFXEU_InsertText(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + const CFX_WideString& swText, + int32_t charset, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps); + virtual ~CFXEU_InsertText(); + + void Redo(); + void Undo(); + + private: + CFX_Edit* m_pEdit; + + CPVT_WordPlace m_wpOld; + CPVT_WordPlace m_wpNew; + CFX_WideString m_swText; + int32_t m_nCharset; + CPVT_SecProps m_SecProps; + CPVT_WordProps m_WordProps; +}; + +class CFXEU_SetSecProps : public CFX_Edit_UndoItem { + public: + CFXEU_SetSecProps(CFX_Edit* pEdit, + const CPVT_WordPlace& place, + EDIT_PROPS_E ep, + const CPVT_SecProps& oldsecprops, + const CPVT_WordProps& oldwordprops, + const CPVT_SecProps& newsecprops, + const CPVT_WordProps& newwordprops, + const CPVT_WordRange& range); + virtual ~CFXEU_SetSecProps(); + + void Redo(); + void Undo(); + + private: + CFX_Edit* m_pEdit; + CPVT_WordPlace m_wpPlace; + CPVT_WordRange m_wrPlace; + EDIT_PROPS_E m_eProps; + + CPVT_SecProps m_OldSecProps; + CPVT_SecProps m_NewSecProps; + CPVT_WordProps m_OldWordProps; + CPVT_WordProps m_NewWordProps; +}; - CPVT_WordProps m_OldWordProps; - CPVT_WordProps m_NewWordProps; +class CFXEU_SetWordProps : public CFX_Edit_UndoItem { + public: + CFXEU_SetWordProps(CFX_Edit* pEdit, + const CPVT_WordPlace& place, + EDIT_PROPS_E ep, + const CPVT_WordProps& oldprops, + const CPVT_WordProps& newprops, + const CPVT_WordRange& range); + virtual ~CFXEU_SetWordProps(); + + void Redo(); + void Undo(); + + private: + CFX_Edit* m_pEdit; + CPVT_WordPlace m_wpPlace; + CPVT_WordRange m_wrPlace; + EDIT_PROPS_E m_eProps; + + CPVT_WordProps m_OldWordProps; + CPVT_WordProps m_NewWordProps; }; /* ------------------------- CFX_Edit ---------------------------- */ -class CFX_Edit : public IFX_Edit -{ - friend class CFX_Edit_Iterator; - friend class CFXEU_InsertWord; - friend class CFXEU_InsertReturn; - friend class CFXEU_Backspace; - friend class CFXEU_Delete; - friend class CFXEU_Clear; - friend class CFXEU_ClearRich; - friend class CFXEU_SetSecProps; - friend class CFXEU_SetWordProps; - friend class CFXEU_InsertText; - -public: - CFX_Edit(IPDF_VariableText * pVT); - virtual ~CFX_Edit(); - - void SetFontMap(IFX_Edit_FontMap * pFontMap); - void SetVTProvider(IPDF_VariableText_Provider* pProvider); - void SetNotify(IFX_Edit_Notify * pNotify); - void SetOprNotify(IFX_Edit_OprNotify* pOprNotify); - IFX_Edit_Iterator* GetIterator(); - IPDF_VariableText * GetVariableText(); - IFX_Edit_FontMap* GetFontMap(); - - void Initialize(); - void SetPlateRect(const CPDF_Rect & rect, FX_BOOL bPaint = TRUE); - void SetScrollPos(const CPDF_Point & point); - - void SetAlignmentH(int32_t nFormat = 0, FX_BOOL bPaint = TRUE); - void SetAlignmentV(int32_t nFormat = 0, FX_BOOL bPaint = TRUE); - void SetPasswordChar(FX_WORD wSubWord = '*', FX_BOOL bPaint = TRUE); - void SetLimitChar(int32_t nLimitChar = 0, FX_BOOL bPaint = TRUE); - void SetCharArray(int32_t nCharArray = 0, FX_BOOL bPaint = TRUE); - void SetCharSpace(FX_FLOAT fCharSpace = 0.0f, FX_BOOL bPaint = TRUE); - void SetHorzScale(int32_t nHorzScale = 100, FX_BOOL bPaint = TRUE); - void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE); - void SetMultiLine(FX_BOOL bMultiLine = TRUE, FX_BOOL bPaint = TRUE); - void SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE); - void SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE); - void SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE); - void SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE); - void SetTextOverflow(FX_BOOL bAllowed = FALSE, FX_BOOL bPaint = TRUE); - - FX_BOOL IsRichText() const; - void SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE); - FX_BOOL SetRichFontSize(FX_FLOAT fFontSize); - FX_BOOL SetRichFontIndex(int32_t nFontIndex); - FX_BOOL SetRichTextColor(FX_COLORREF dwColor); - FX_BOOL SetRichTextScript(int32_t nScriptType); - FX_BOOL SetRichTextBold(FX_BOOL bBold = TRUE); - FX_BOOL SetRichTextItalic(FX_BOOL bItalic = TRUE); - FX_BOOL SetRichTextUnderline(FX_BOOL bUnderline = TRUE); - FX_BOOL SetRichTextCrossout(FX_BOOL bCrossout = TRUE); - FX_BOOL SetRichTextCharSpace(FX_FLOAT fCharSpace); - FX_BOOL SetRichTextHorzScale(int32_t nHorzScale = 100); - FX_BOOL SetRichTextLineLeading(FX_FLOAT fLineLeading); - FX_BOOL SetRichTextLineIndent(FX_FLOAT fLineIndent); - FX_BOOL SetRichTextAlignment(int32_t nAlignment); - - void OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl); - void OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl); - - void SetText(const FX_WCHAR* text,int32_t charset = DEFAULT_CHARSET, - const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL); - FX_BOOL InsertWord(FX_WORD word, int32_t charset = DEFAULT_CHARSET, const CPVT_WordProps * pWordProps = NULL); - FX_BOOL InsertReturn(const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL); - FX_BOOL Backspace(); - FX_BOOL Delete(); - FX_BOOL Clear(); - FX_BOOL Empty(); - FX_BOOL InsertText(const FX_WCHAR* text, int32_t charset = DEFAULT_CHARSET, - const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL); - FX_BOOL Redo(); - FX_BOOL Undo(); - CPVT_WordPlace DoInsertText(const CPVT_WordPlace& place, const FX_WCHAR* text, int32_t charset, - const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps); - int32_t GetCharSetFromUnicode(FX_WORD word, int32_t nOldCharset); - - int32_t WordPlaceToWordIndex(const CPVT_WordPlace & place) const; - CPVT_WordPlace WordIndexToWordPlace(int32_t index) const; - - CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace & place) const; - CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace & place) const; - CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace & place) const; - CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace & place) const; - CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const; - - int32_t GetCaret() const; - CPVT_WordPlace GetCaretWordPlace() const; - CFX_WideString GetSelText() const; - CFX_WideString GetText() const; - FX_FLOAT GetFontSize() const; - FX_WORD GetPasswordChar() const; - CPDF_Point GetScrollPos() const; - int32_t GetCharArray() const; - CPDF_Rect GetPlateRect() const; - CPDF_Rect GetContentRect() const; - CFX_WideString GetRangeText(const CPVT_WordRange & range) const; - int32_t GetHorzScale() const; - FX_FLOAT GetCharSpace() const; - int32_t GetTotalWords() const; - int32_t GetTotalLines() const; - - void SetSel(int32_t nStartChar,int32_t nEndChar); - void GetSel(int32_t & nStartChar, int32_t & nEndChar) const; - -private: - void SelectAll(); - void SelectNone(); - void SetSel(const CPVT_WordPlace & begin,const CPVT_WordPlace & end); - FX_BOOL IsSelected() const; - - void RearrangeAll(); - void RearrangePart(const CPVT_WordRange & range); - void Paint(); - void ScrollToCaret(); - void SetScrollInfo(); - void SetScrollPosX(FX_FLOAT fx); - void SetScrollPosY(FX_FLOAT fy); - void SetScrollLimit(); - void SetContentChanged(); - void EnableNotify(FX_BOOL bNotify); - - void SetText(const FX_WCHAR* text,int32_t charset, - const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint); - FX_BOOL InsertWord(FX_WORD word, int32_t charset, const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint); - FX_BOOL InsertReturn(const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint); - FX_BOOL Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint); - FX_BOOL Delete(FX_BOOL bAddUndo, FX_BOOL bPaint); - FX_BOOL Clear(FX_BOOL bAddUndo, FX_BOOL bPaint); - FX_BOOL InsertText(const FX_WCHAR* text, int32_t charset, - const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint); - FX_BOOL SetRichTextProps(EDIT_PROPS_E eProps, - const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps); - FX_BOOL SetSecProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place, - const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps, const CPVT_WordRange & wr, FX_BOOL bAddUndo); - FX_BOOL SetWordProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place, - const CPVT_WordProps * pWordProps, const CPVT_WordRange & wr, FX_BOOL bAddUndo); - void PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange & wr); - void PaintInsertText(const CPVT_WordPlace & wpOld, const CPVT_WordPlace & wpNew); - - inline CPDF_Point VTToEdit(const CPDF_Point & point) const; - inline CPDF_Point EditToVT(const CPDF_Point & point) const; - inline CPDF_Rect VTToEdit(const CPDF_Rect & rect) const; - inline CPDF_Rect EditToVT(const CPDF_Rect & rect) const; - - void EnableRefresh(FX_BOOL bRefresh); - void Refresh(REFRESH_PLAN_E ePlan,const CPVT_WordRange * pRange1 = NULL,const CPVT_WordRange * pRange2 = NULL); - void RefreshPushLineRects(const CPVT_WordRange & wr); - void RefreshPushRandomRects(const CPVT_WordRange & wr); - void RefreshWordRange(const CPVT_WordRange& wr); - - void SetCaret(int32_t nPos); - void SetCaret(const CPVT_WordPlace & place); - void SetCaretInfo(); - void SetCaretOrigin(); - void SetCaretChange(); - - CPVT_WordRange GetWholeWordRange() const; - CPVT_WordRange GetVisibleWordRange() const; - CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace & place) const; - CPVT_WordRange CombineWordRange(const CPVT_WordRange & wr1, const CPVT_WordRange & wr2); - CPVT_WordRange GetSelectWordRange() const; - - void EnableUndo(FX_BOOL bUndo); - void EnableOprNotify(FX_BOOL bNotify); - - FX_BOOL IsTextFull() const; - FX_BOOL IsTextOverflow() const; - FX_BOOL CanUndo() const; - FX_BOOL CanRedo() const; - FX_BOOL IsModified() const; - - void BeginGroupUndo(const CFX_WideString& sTitle); - void EndGroupUndo(); - void AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem); - void AddUndoItem(IFX_Edit_UndoItem* pUndoItem); - - void SetPageInfo(const CPVT_WordPlace& place); - CPVT_WordPlace SearchPageEndPlace(const CPVT_WordPlace& wpPageBegin, const CPDF_Point& point) const; - FX_FLOAT GetLineTop(const CPVT_WordPlace& place) const; - FX_FLOAT GetLineBottom(const CPVT_WordPlace& place) const; - -private: - IPDF_VariableText* m_pVT; - IFX_Edit_Notify* m_pNotify; - IFX_Edit_OprNotify* m_pOprNotify; - CFX_Edit_Provider* m_pVTProvide; - - CPVT_WordPlace m_wpCaret; - CPVT_WordPlace m_wpOldCaret; - CFX_Edit_Select m_SelState; - - CPDF_Point m_ptScrollPos; - CPDF_Point m_ptRefreshScrollPos; - FX_BOOL m_bEnableScroll; - IFX_Edit_Iterator * m_pIterator; - CFX_Edit_Refresh m_Refresh; - CPDF_Point m_ptCaret; - CFX_Edit_Undo m_Undo; - int32_t m_nAlignment; - FX_BOOL m_bNotifyFlag; - FX_BOOL m_bEnableOverflow; - FX_BOOL m_bEnableRefresh; - CPDF_Rect m_rcOldContent; - FX_BOOL m_bEnableUndo; - FX_BOOL m_bNotify; - FX_BOOL m_bOprNotify; - CFX_Edit_GroupUndoItem* m_pGroupUndoItem; +class CFX_Edit : public IFX_Edit { + friend class CFX_Edit_Iterator; + friend class CFXEU_InsertWord; + friend class CFXEU_InsertReturn; + friend class CFXEU_Backspace; + friend class CFXEU_Delete; + friend class CFXEU_Clear; + friend class CFXEU_ClearRich; + friend class CFXEU_SetSecProps; + friend class CFXEU_SetWordProps; + friend class CFXEU_InsertText; + + public: + CFX_Edit(IPDF_VariableText* pVT); + virtual ~CFX_Edit(); + + void SetFontMap(IFX_Edit_FontMap* pFontMap); + void SetVTProvider(IPDF_VariableText_Provider* pProvider); + void SetNotify(IFX_Edit_Notify* pNotify); + void SetOprNotify(IFX_Edit_OprNotify* pOprNotify); + IFX_Edit_Iterator* GetIterator(); + IPDF_VariableText* GetVariableText(); + IFX_Edit_FontMap* GetFontMap(); + + void Initialize(); + void SetPlateRect(const CPDF_Rect& rect, FX_BOOL bPaint = TRUE); + void SetScrollPos(const CPDF_Point& point); + + void SetAlignmentH(int32_t nFormat = 0, FX_BOOL bPaint = TRUE); + void SetAlignmentV(int32_t nFormat = 0, FX_BOOL bPaint = TRUE); + void SetPasswordChar(FX_WORD wSubWord = '*', FX_BOOL bPaint = TRUE); + void SetLimitChar(int32_t nLimitChar = 0, FX_BOOL bPaint = TRUE); + void SetCharArray(int32_t nCharArray = 0, FX_BOOL bPaint = TRUE); + void SetCharSpace(FX_FLOAT fCharSpace = 0.0f, FX_BOOL bPaint = TRUE); + void SetHorzScale(int32_t nHorzScale = 100, FX_BOOL bPaint = TRUE); + void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE); + void SetMultiLine(FX_BOOL bMultiLine = TRUE, FX_BOOL bPaint = TRUE); + void SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE); + void SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE); + void SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE); + void SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE); + void SetTextOverflow(FX_BOOL bAllowed = FALSE, FX_BOOL bPaint = TRUE); + + FX_BOOL IsRichText() const; + void SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE); + FX_BOOL SetRichFontSize(FX_FLOAT fFontSize); + FX_BOOL SetRichFontIndex(int32_t nFontIndex); + FX_BOOL SetRichTextColor(FX_COLORREF dwColor); + FX_BOOL SetRichTextScript(int32_t nScriptType); + FX_BOOL SetRichTextBold(FX_BOOL bBold = TRUE); + FX_BOOL SetRichTextItalic(FX_BOOL bItalic = TRUE); + FX_BOOL SetRichTextUnderline(FX_BOOL bUnderline = TRUE); + FX_BOOL SetRichTextCrossout(FX_BOOL bCrossout = TRUE); + FX_BOOL SetRichTextCharSpace(FX_FLOAT fCharSpace); + FX_BOOL SetRichTextHorzScale(int32_t nHorzScale = 100); + FX_BOOL SetRichTextLineLeading(FX_FLOAT fLineLeading); + FX_BOOL SetRichTextLineIndent(FX_FLOAT fLineIndent); + FX_BOOL SetRichTextAlignment(int32_t nAlignment); + + void OnMouseDown(const CPDF_Point& point, FX_BOOL bShift, FX_BOOL bCtrl); + void OnMouseMove(const CPDF_Point& point, FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl); + + void SetText(const FX_WCHAR* text, + int32_t charset = DEFAULT_CHARSET, + const CPVT_SecProps* pSecProps = NULL, + const CPVT_WordProps* pWordProps = NULL); + FX_BOOL InsertWord(FX_WORD word, + int32_t charset = DEFAULT_CHARSET, + const CPVT_WordProps* pWordProps = NULL); + FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps = NULL, + const CPVT_WordProps* pWordProps = NULL); + FX_BOOL Backspace(); + FX_BOOL Delete(); + FX_BOOL Clear(); + FX_BOOL Empty(); + FX_BOOL InsertText(const FX_WCHAR* text, + int32_t charset = DEFAULT_CHARSET, + const CPVT_SecProps* pSecProps = NULL, + const CPVT_WordProps* pWordProps = NULL); + FX_BOOL Redo(); + FX_BOOL Undo(); + CPVT_WordPlace DoInsertText(const CPVT_WordPlace& place, + const FX_WCHAR* text, + int32_t charset, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps); + int32_t GetCharSetFromUnicode(FX_WORD word, int32_t nOldCharset); + + int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const; + CPVT_WordPlace WordIndexToWordPlace(int32_t index) const; + + CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace& place) const; + CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const; + CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace& place) const; + CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace& place) const; + CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const; + + int32_t GetCaret() const; + CPVT_WordPlace GetCaretWordPlace() const; + CFX_WideString GetSelText() const; + CFX_WideString GetText() const; + FX_FLOAT GetFontSize() const; + FX_WORD GetPasswordChar() const; + CPDF_Point GetScrollPos() const; + int32_t GetCharArray() const; + CPDF_Rect GetPlateRect() const; + CPDF_Rect GetContentRect() const; + CFX_WideString GetRangeText(const CPVT_WordRange& range) const; + int32_t GetHorzScale() const; + FX_FLOAT GetCharSpace() const; + int32_t GetTotalWords() const; + int32_t GetTotalLines() const; + + void SetSel(int32_t nStartChar, int32_t nEndChar); + void GetSel(int32_t& nStartChar, int32_t& nEndChar) const; + + private: + void SelectAll(); + void SelectNone(); + void SetSel(const CPVT_WordPlace& begin, const CPVT_WordPlace& end); + FX_BOOL IsSelected() const; + + void RearrangeAll(); + void RearrangePart(const CPVT_WordRange& range); + void Paint(); + void ScrollToCaret(); + void SetScrollInfo(); + void SetScrollPosX(FX_FLOAT fx); + void SetScrollPosY(FX_FLOAT fy); + void SetScrollLimit(); + void SetContentChanged(); + void EnableNotify(FX_BOOL bNotify); + + void SetText(const FX_WCHAR* text, + int32_t charset, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps, + FX_BOOL bAddUndo, + FX_BOOL bPaint); + FX_BOOL InsertWord(FX_WORD word, + int32_t charset, + const CPVT_WordProps* pWordProps, + FX_BOOL bAddUndo, + FX_BOOL bPaint); + FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps, + FX_BOOL bAddUndo, + FX_BOOL bPaint); + FX_BOOL Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint); + FX_BOOL Delete(FX_BOOL bAddUndo, FX_BOOL bPaint); + FX_BOOL Clear(FX_BOOL bAddUndo, FX_BOOL bPaint); + FX_BOOL InsertText(const FX_WCHAR* text, + int32_t charset, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps, + FX_BOOL bAddUndo, + FX_BOOL bPaint); + FX_BOOL SetRichTextProps(EDIT_PROPS_E eProps, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps); + FX_BOOL SetSecProps(EDIT_PROPS_E eProps, + const CPVT_WordPlace& place, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps, + const CPVT_WordRange& wr, + FX_BOOL bAddUndo); + FX_BOOL SetWordProps(EDIT_PROPS_E eProps, + const CPVT_WordPlace& place, + const CPVT_WordProps* pWordProps, + const CPVT_WordRange& wr, + FX_BOOL bAddUndo); + void PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange& wr); + void PaintInsertText(const CPVT_WordPlace& wpOld, + const CPVT_WordPlace& wpNew); + + inline CPDF_Point VTToEdit(const CPDF_Point& point) const; + inline CPDF_Point EditToVT(const CPDF_Point& point) const; + inline CPDF_Rect VTToEdit(const CPDF_Rect& rect) const; + inline CPDF_Rect EditToVT(const CPDF_Rect& rect) const; + + void EnableRefresh(FX_BOOL bRefresh); + void Refresh(REFRESH_PLAN_E ePlan, + const CPVT_WordRange* pRange1 = NULL, + const CPVT_WordRange* pRange2 = NULL); + void RefreshPushLineRects(const CPVT_WordRange& wr); + void RefreshPushRandomRects(const CPVT_WordRange& wr); + void RefreshWordRange(const CPVT_WordRange& wr); + + void SetCaret(int32_t nPos); + void SetCaret(const CPVT_WordPlace& place); + void SetCaretInfo(); + void SetCaretOrigin(); + void SetCaretChange(); + + CPVT_WordRange GetWholeWordRange() const; + CPVT_WordRange GetVisibleWordRange() const; + CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace& place) const; + CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1, + const CPVT_WordRange& wr2); + CPVT_WordRange GetSelectWordRange() const; + + void EnableUndo(FX_BOOL bUndo); + void EnableOprNotify(FX_BOOL bNotify); + + FX_BOOL IsTextFull() const; + FX_BOOL IsTextOverflow() const; + FX_BOOL CanUndo() const; + FX_BOOL CanRedo() const; + FX_BOOL IsModified() const; + + void BeginGroupUndo(const CFX_WideString& sTitle); + void EndGroupUndo(); + void AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem); + void AddUndoItem(IFX_Edit_UndoItem* pUndoItem); + + void SetPageInfo(const CPVT_WordPlace& place); + CPVT_WordPlace SearchPageEndPlace(const CPVT_WordPlace& wpPageBegin, + const CPDF_Point& point) const; + FX_FLOAT GetLineTop(const CPVT_WordPlace& place) const; + FX_FLOAT GetLineBottom(const CPVT_WordPlace& place) const; + + private: + IPDF_VariableText* m_pVT; + IFX_Edit_Notify* m_pNotify; + IFX_Edit_OprNotify* m_pOprNotify; + CFX_Edit_Provider* m_pVTProvide; + + CPVT_WordPlace m_wpCaret; + CPVT_WordPlace m_wpOldCaret; + CFX_Edit_Select m_SelState; + + CPDF_Point m_ptScrollPos; + CPDF_Point m_ptRefreshScrollPos; + FX_BOOL m_bEnableScroll; + IFX_Edit_Iterator* m_pIterator; + CFX_Edit_Refresh m_Refresh; + CPDF_Point m_ptCaret; + CFX_Edit_Undo m_Undo; + int32_t m_nAlignment; + FX_BOOL m_bNotifyFlag; + FX_BOOL m_bEnableOverflow; + FX_BOOL m_bEnableRefresh; + CPDF_Rect m_rcOldContent; + FX_BOOL m_bEnableUndo; + FX_BOOL m_bNotify; + FX_BOOL m_bOprNotify; + CFX_Edit_GroupUndoItem* m_pGroupUndoItem; }; /* ------------------------- CFX_Edit_Iterator ---------------------------- */ -class CFX_Edit_Iterator : public IFX_Edit_Iterator -{ -public: - CFX_Edit_Iterator(CFX_Edit * pEdit,IPDF_VariableText_Iterator * pVTIterator); - virtual ~CFX_Edit_Iterator(); - - FX_BOOL NextWord(); - FX_BOOL NextLine(); - FX_BOOL NextSection(); - FX_BOOL PrevWord(); - FX_BOOL PrevLine(); - FX_BOOL PrevSection(); - - FX_BOOL GetWord(CPVT_Word & word) const; - FX_BOOL GetLine(CPVT_Line & line) const; - FX_BOOL GetSection(CPVT_Section & section) const; - void SetAt(int32_t nWordIndex); - void SetAt(const CPVT_WordPlace & place); - const CPVT_WordPlace & GetAt() const; - IFX_Edit* GetEdit() const; - -private: - CFX_Edit * m_pEdit; - IPDF_VariableText_Iterator* m_pVTIterator; +class CFX_Edit_Iterator : public IFX_Edit_Iterator { + public: + CFX_Edit_Iterator(CFX_Edit* pEdit, IPDF_VariableText_Iterator* pVTIterator); + virtual ~CFX_Edit_Iterator(); + + FX_BOOL NextWord(); + FX_BOOL NextLine(); + FX_BOOL NextSection(); + FX_BOOL PrevWord(); + FX_BOOL PrevLine(); + FX_BOOL PrevSection(); + + FX_BOOL GetWord(CPVT_Word& word) const; + FX_BOOL GetLine(CPVT_Line& line) const; + FX_BOOL GetSection(CPVT_Section& section) const; + void SetAt(int32_t nWordIndex); + void SetAt(const CPVT_WordPlace& place); + const CPVT_WordPlace& GetAt() const; + IFX_Edit* GetEdit() const; + + private: + CFX_Edit* m_pEdit; + IPDF_VariableText_Iterator* m_pVTIterator; }; -class CFX_Edit_Provider : public IPDF_VariableText_Provider -{ -public: - CFX_Edit_Provider(IFX_Edit_FontMap* pFontMap); - virtual ~CFX_Edit_Provider(); +class CFX_Edit_Provider : public IPDF_VariableText_Provider { + public: + CFX_Edit_Provider(IFX_Edit_FontMap* pFontMap); + virtual ~CFX_Edit_Provider(); - IFX_Edit_FontMap* GetFontMap(); + IFX_Edit_FontMap* GetFontMap(); - int32_t GetCharWidth(int32_t nFontIndex, FX_WORD word, int32_t nWordStyle); - int32_t GetTypeAscent(int32_t nFontIndex); - int32_t GetTypeDescent(int32_t nFontIndex); - int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex); - int32_t GetDefaultFontIndex(); - FX_BOOL IsLatinWord(FX_WORD word); + int32_t GetCharWidth(int32_t nFontIndex, FX_WORD word, int32_t nWordStyle); + int32_t GetTypeAscent(int32_t nFontIndex); + int32_t GetTypeDescent(int32_t nFontIndex); + int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex); + int32_t GetDefaultFontIndex(); + FX_BOOL IsLatinWord(FX_WORD word); -private: - IFX_Edit_FontMap* m_pFontMap; + private: + IFX_Edit_FontMap* m_pFontMap; }; #endif // FPDFSDK_INCLUDE_FXEDIT_FXET_EDIT_H_ diff --git a/fpdfsdk/include/fxedit/fxet_list.h b/fpdfsdk/include/fxedit/fxet_list.h index fe75b0fc35..4aa35684cf 100644 --- a/fpdfsdk/include/fxedit/fxet_list.h +++ b/fpdfsdk/include/fxedit/fxet_list.h @@ -12,353 +12,337 @@ class IFX_Edit; -class CLST_Size -{ -public: - CLST_Size() : x(0.0f), y(0.0f) - { - } - - CLST_Size(FX_FLOAT other_x, FX_FLOAT other_y) - { - x = other_x; - y = other_y; - } - - void Default() - { - x = 0.0f; - y = 0.0f; - } - - FX_BOOL operator != (const CLST_Size & size) const - { - return FXSYS_memcmp(this, &size, sizeof(CLST_Size)) != 0; - } - - FX_FLOAT x,y; +class CLST_Size { + public: + CLST_Size() : x(0.0f), y(0.0f) {} + + CLST_Size(FX_FLOAT other_x, FX_FLOAT other_y) { + x = other_x; + y = other_y; + } + + void Default() { + x = 0.0f; + y = 0.0f; + } + + FX_BOOL operator!=(const CLST_Size& size) const { + return FXSYS_memcmp(this, &size, sizeof(CLST_Size)) != 0; + } + + FX_FLOAT x, y; }; -class CLST_Rect : public CPDF_Rect -{ -public: - CLST_Rect() - { - left = top = right = bottom = 0.0f; - } - - CLST_Rect(FX_FLOAT other_left, - FX_FLOAT other_top, - FX_FLOAT other_right, - FX_FLOAT other_bottom) - { - left = other_left; - top = other_top; - right = other_right; - bottom = other_bottom; - } - - CLST_Rect(const CPDF_Rect & rect) - { - left = rect.left; - top = rect.top; - right = rect.right; - bottom = rect.bottom; - } - - void Default() - { - left = top = right = bottom = 0.0f; - } - - const CLST_Rect operator = (const CPDF_Rect & rect) - { - left = rect.left; - top = rect.top; - right = rect.right; - bottom = rect.bottom; - - return *this; - } - - FX_BOOL operator == (const CLST_Rect & rect) const - { - return FXSYS_memcmp(this, &rect, sizeof(CLST_Rect)) == 0; - } - - FX_BOOL operator != (const CLST_Rect & rect) const - { - return FXSYS_memcmp(this, &rect, sizeof(CLST_Rect)) != 0; - } - - FX_FLOAT Width() const - { - return right - left; - } - - FX_FLOAT Height() const - { - if (top > bottom) - return top - bottom; - return bottom - top; - } - - CPDF_Point LeftTop() const - { - return CPDF_Point(left,top); - } - - CPDF_Point RightBottom() const - { - return CPDF_Point(right,bottom); - } - - const CLST_Rect operator += (const CPDF_Point & point) - { - left += point.x; - right += point.x; - top += point.y; - bottom += point.y; - - return *this; - } - - const CLST_Rect operator -= (const CPDF_Point & point) - { - left -= point.x; - right -= point.x; - top -= point.y; - bottom -= point.y; - - return *this; - } - - CLST_Rect operator + (const CPDF_Point & point) const - { - return CLST_Rect(left + point.x, - top + point.y, - right + point.x, - bottom + point.y); - } - - CLST_Rect operator - (const CPDF_Point & point) const - { - return CLST_Rect(left - point.x, - top - point.y, - right - point.x, - bottom - point.y); - } +class CLST_Rect : public CPDF_Rect { + public: + CLST_Rect() { left = top = right = bottom = 0.0f; } + + CLST_Rect(FX_FLOAT other_left, + FX_FLOAT other_top, + FX_FLOAT other_right, + FX_FLOAT other_bottom) { + left = other_left; + top = other_top; + right = other_right; + bottom = other_bottom; + } + + CLST_Rect(const CPDF_Rect& rect) { + left = rect.left; + top = rect.top; + right = rect.right; + bottom = rect.bottom; + } + + void Default() { left = top = right = bottom = 0.0f; } + + const CLST_Rect operator=(const CPDF_Rect& rect) { + left = rect.left; + top = rect.top; + right = rect.right; + bottom = rect.bottom; + + return *this; + } + + FX_BOOL operator==(const CLST_Rect& rect) const { + return FXSYS_memcmp(this, &rect, sizeof(CLST_Rect)) == 0; + } + + FX_BOOL operator!=(const CLST_Rect& rect) const { + return FXSYS_memcmp(this, &rect, sizeof(CLST_Rect)) != 0; + } + + FX_FLOAT Width() const { return right - left; } + + FX_FLOAT Height() const { + if (top > bottom) + return top - bottom; + return bottom - top; + } + + CPDF_Point LeftTop() const { return CPDF_Point(left, top); } + + CPDF_Point RightBottom() const { return CPDF_Point(right, bottom); } + + const CLST_Rect operator+=(const CPDF_Point& point) { + left += point.x; + right += point.x; + top += point.y; + bottom += point.y; + + return *this; + } + + const CLST_Rect operator-=(const CPDF_Point& point) { + left -= point.x; + right -= point.x; + top -= point.y; + bottom -= point.y; + + return *this; + } + + CLST_Rect operator+(const CPDF_Point& point) const { + return CLST_Rect(left + point.x, top + point.y, right + point.x, + bottom + point.y); + } + + CLST_Rect operator-(const CPDF_Point& point) const { + return CLST_Rect(left - point.x, top - point.y, right - point.x, + bottom - point.y); + } }; -class CFX_ListItem -{ -public: - CFX_ListItem(); - virtual ~CFX_ListItem(); - - void SetFontMap(IFX_Edit_FontMap * pFontMap); - IFX_Edit_Iterator* GetIterator() const; - IFX_Edit* GetEdit() const; - -public: - void SetRect(const CLST_Rect & rect); - void SetSelect(FX_BOOL bSelected); - void SetCaret(FX_BOOL bCaret); - void SetText(const FX_WCHAR* text); - void SetFontSize(FX_FLOAT fFontSize); - CFX_WideString GetText() const; - - CLST_Rect GetRect() const; - FX_BOOL IsSelected() const; - FX_BOOL IsCaret() const; - FX_FLOAT GetItemHeight() const; - FX_WORD GetFirstChar() const; - -private: - IFX_Edit* m_pEdit; - FX_BOOL m_bSelected; - FX_BOOL m_bCaret; - CLST_Rect m_rcListItem; +class CFX_ListItem { + public: + CFX_ListItem(); + virtual ~CFX_ListItem(); + + void SetFontMap(IFX_Edit_FontMap* pFontMap); + IFX_Edit_Iterator* GetIterator() const; + IFX_Edit* GetEdit() const; + + public: + void SetRect(const CLST_Rect& rect); + void SetSelect(FX_BOOL bSelected); + void SetCaret(FX_BOOL bCaret); + void SetText(const FX_WCHAR* text); + void SetFontSize(FX_FLOAT fFontSize); + CFX_WideString GetText() const; + + CLST_Rect GetRect() const; + FX_BOOL IsSelected() const; + FX_BOOL IsCaret() const; + FX_FLOAT GetItemHeight() const; + FX_WORD GetFirstChar() const; + + private: + IFX_Edit* m_pEdit; + FX_BOOL m_bSelected; + FX_BOOL m_bCaret; + CLST_Rect m_rcListItem; }; -class CFX_ListContainer -{ -public: - CFX_ListContainer() : m_rcPlate(0.0f,0.0f,0.0f,0.0f), m_rcContent(0.0f,0.0f,0.0f,0.0f){} - virtual ~CFX_ListContainer(){} - virtual void SetPlateRect(const CPDF_Rect & rect){m_rcPlate = rect;} - CPDF_Rect GetPlateRect() const{return m_rcPlate;} - void SetContentRect(const CLST_Rect & rect){m_rcContent = rect;} - CLST_Rect GetContentRect() const{return m_rcContent;} - CPDF_Point GetBTPoint() const{return CPDF_Point(m_rcPlate.left,m_rcPlate.top);} - CPDF_Point GetETPoint() const{return CPDF_Point(m_rcPlate.right,m_rcPlate.bottom);} -public: - CPDF_Point InnerToOuter(const CPDF_Point & point) const{return CPDF_Point(point.x + GetBTPoint().x,GetBTPoint().y - point.y);} - CPDF_Point OuterToInner(const CPDF_Point & point) const{return CPDF_Point(point.x - GetBTPoint().x,GetBTPoint().y - point.y);} - CPDF_Rect InnerToOuter(const CLST_Rect & rect) const{CPDF_Point ptLeftTop = InnerToOuter(CPDF_Point(rect.left,rect.top)); - CPDF_Point ptRightBottom = InnerToOuter(CPDF_Point(rect.right,rect.bottom)); - return CPDF_Rect(ptLeftTop.x,ptRightBottom.y,ptRightBottom.x,ptLeftTop.y);} - CLST_Rect OuterToInner(const CPDF_Rect & rect) const{CPDF_Point ptLeftTop = OuterToInner(CPDF_Point(rect.left,rect.top)); - CPDF_Point ptRightBottom = OuterToInner(CPDF_Point(rect.right,rect.bottom)); - return CLST_Rect(ptLeftTop.x,ptLeftTop.y,ptRightBottom.x,ptRightBottom.y);} -private: - CPDF_Rect m_rcPlate; - CLST_Rect m_rcContent; //positive forever! +class CFX_ListContainer { + public: + CFX_ListContainer() + : m_rcPlate(0.0f, 0.0f, 0.0f, 0.0f), + m_rcContent(0.0f, 0.0f, 0.0f, 0.0f) {} + virtual ~CFX_ListContainer() {} + virtual void SetPlateRect(const CPDF_Rect& rect) { m_rcPlate = rect; } + CPDF_Rect GetPlateRect() const { return m_rcPlate; } + void SetContentRect(const CLST_Rect& rect) { m_rcContent = rect; } + CLST_Rect GetContentRect() const { return m_rcContent; } + CPDF_Point GetBTPoint() const { + return CPDF_Point(m_rcPlate.left, m_rcPlate.top); + } + CPDF_Point GetETPoint() const { + return CPDF_Point(m_rcPlate.right, m_rcPlate.bottom); + } + + public: + CPDF_Point InnerToOuter(const CPDF_Point& point) const { + return CPDF_Point(point.x + GetBTPoint().x, GetBTPoint().y - point.y); + } + CPDF_Point OuterToInner(const CPDF_Point& point) const { + return CPDF_Point(point.x - GetBTPoint().x, GetBTPoint().y - point.y); + } + CPDF_Rect InnerToOuter(const CLST_Rect& rect) const { + CPDF_Point ptLeftTop = InnerToOuter(CPDF_Point(rect.left, rect.top)); + CPDF_Point ptRightBottom = + InnerToOuter(CPDF_Point(rect.right, rect.bottom)); + return CPDF_Rect(ptLeftTop.x, ptRightBottom.y, ptRightBottom.x, + ptLeftTop.y); + } + CLST_Rect OuterToInner(const CPDF_Rect& rect) const { + CPDF_Point ptLeftTop = OuterToInner(CPDF_Point(rect.left, rect.top)); + CPDF_Point ptRightBottom = + OuterToInner(CPDF_Point(rect.right, rect.bottom)); + return CLST_Rect(ptLeftTop.x, ptLeftTop.y, ptRightBottom.x, + ptRightBottom.y); + } + + private: + CPDF_Rect m_rcPlate; + CLST_Rect m_rcContent; // positive forever! }; -template class CLST_ArrayTemplate : public CFX_ArrayTemplate -{ -public: - FX_BOOL IsEmpty() { return CFX_ArrayTemplate::GetSize() <= 0; } - TYPE GetAt(int32_t nIndex) const { if (nIndex >= 0 && nIndex < CFX_ArrayTemplate::GetSize()) return CFX_ArrayTemplate::GetAt(nIndex); return NULL;} - void RemoveAt(int32_t nIndex){if (nIndex >= 0 && nIndex < CFX_ArrayTemplate::GetSize()) CFX_ArrayTemplate::RemoveAt(nIndex);} +template +class CLST_ArrayTemplate : public CFX_ArrayTemplate { + public: + FX_BOOL IsEmpty() { return CFX_ArrayTemplate::GetSize() <= 0; } + TYPE GetAt(int32_t nIndex) const { + if (nIndex >= 0 && nIndex < CFX_ArrayTemplate::GetSize()) + return CFX_ArrayTemplate::GetAt(nIndex); + return NULL; + } + void RemoveAt(int32_t nIndex) { + if (nIndex >= 0 && nIndex < CFX_ArrayTemplate::GetSize()) + CFX_ArrayTemplate::RemoveAt(nIndex); + } }; -class CFX_List : protected CFX_ListContainer , public IFX_List -{ -public: - CFX_List(); - virtual ~CFX_List(); +class CFX_List : protected CFX_ListContainer, public IFX_List { + public: + CFX_List(); + virtual ~CFX_List(); -public: - virtual void SetFontMap(IFX_Edit_FontMap * pFontMap); - virtual void SetFontSize(FX_FLOAT fFontSize); + public: + virtual void SetFontMap(IFX_Edit_FontMap* pFontMap); + virtual void SetFontSize(FX_FLOAT fFontSize); - virtual CPDF_Rect GetPlateRect() const; - virtual CPDF_Rect GetContentRect() const; + virtual CPDF_Rect GetPlateRect() const; + virtual CPDF_Rect GetContentRect() const; - virtual FX_FLOAT GetFontSize() const; - virtual IFX_Edit* GetItemEdit(int32_t nIndex) const; - virtual int32_t GetCount() const; - virtual FX_BOOL IsItemSelected(int32_t nIndex) const; - virtual FX_FLOAT GetFirstHeight() const; + virtual FX_FLOAT GetFontSize() const; + virtual IFX_Edit* GetItemEdit(int32_t nIndex) const; + virtual int32_t GetCount() const; + virtual FX_BOOL IsItemSelected(int32_t nIndex) const; + virtual FX_FLOAT GetFirstHeight() const; - virtual void SetMultipleSel(FX_BOOL bMultiple); - virtual FX_BOOL IsMultipleSel() const; - virtual FX_BOOL IsValid(int32_t nItemIndex) const; - virtual int32_t FindNext(int32_t nIndex,FX_WCHAR nChar) const; + virtual void SetMultipleSel(FX_BOOL bMultiple); + virtual FX_BOOL IsMultipleSel() const; + virtual FX_BOOL IsValid(int32_t nItemIndex) const; + virtual int32_t FindNext(int32_t nIndex, FX_WCHAR nChar) const; -protected: - virtual void Empty(); + protected: + virtual void Empty(); - void AddItem(const FX_WCHAR* str); - virtual void ReArrange(int32_t nItemIndex); + void AddItem(const FX_WCHAR* str); + virtual void ReArrange(int32_t nItemIndex); - virtual CPDF_Rect GetItemRect(int32_t nIndex) const; - CFX_WideString GetItemText(int32_t nIndex) const; + virtual CPDF_Rect GetItemRect(int32_t nIndex) const; + CFX_WideString GetItemText(int32_t nIndex) const; - void SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected); - void SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret); + void SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected); + void SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret); - virtual int32_t GetItemIndex(const CPDF_Point & point) const; - int32_t GetFirstSelected() const; - int32_t GetLastSelected() const; - FX_WCHAR Toupper(FX_WCHAR c) const; + virtual int32_t GetItemIndex(const CPDF_Point& point) const; + int32_t GetFirstSelected() const; + int32_t GetLastSelected() const; + FX_WCHAR Toupper(FX_WCHAR c) const; -private: - CLST_ArrayTemplate m_aListItems; - FX_FLOAT m_fFontSize; - IFX_Edit_FontMap* m_pFontMap; - FX_BOOL m_bMultiple; + private: + CLST_ArrayTemplate m_aListItems; + FX_FLOAT m_fFontSize; + IFX_Edit_FontMap* m_pFontMap; + FX_BOOL m_bMultiple; }; -struct CPLST_Select_Item -{ - CPLST_Select_Item(int32_t other_nItemIndex, int32_t other_nState) - { - nItemIndex = other_nItemIndex; - nState = other_nState; - } +struct CPLST_Select_Item { + CPLST_Select_Item(int32_t other_nItemIndex, int32_t other_nState) { + nItemIndex = other_nItemIndex; + nState = other_nState; + } - int32_t nItemIndex; - int32_t nState; //0:normal select -1:to deselect 1: to select + int32_t nItemIndex; + int32_t nState; // 0:normal select -1:to deselect 1: to select }; -class CPLST_Select -{ -public: - CPLST_Select(); - virtual ~CPLST_Select(); - -public: - void Add(int32_t nItemIndex); - void Add(int32_t nBeginIndex, int32_t nEndIndex); - void Sub(int32_t nItemIndex); - void Sub(int32_t nBeginIndex, int32_t nEndIndex); - FX_BOOL IsExist(int32_t nItemIndex) const; - int32_t Find(int32_t nItemIndex) const; - int32_t GetCount() const; - int32_t GetItemIndex(int32_t nIndex) const; - int32_t GetState(int32_t nIndex) const; - void Done(); - void DeselectAll(); - -private: - CFX_ArrayTemplate m_aItems; +class CPLST_Select { + public: + CPLST_Select(); + virtual ~CPLST_Select(); + + public: + void Add(int32_t nItemIndex); + void Add(int32_t nBeginIndex, int32_t nEndIndex); + void Sub(int32_t nItemIndex); + void Sub(int32_t nBeginIndex, int32_t nEndIndex); + FX_BOOL IsExist(int32_t nItemIndex) const; + int32_t Find(int32_t nItemIndex) const; + int32_t GetCount() const; + int32_t GetItemIndex(int32_t nIndex) const; + int32_t GetState(int32_t nIndex) const; + void Done(); + void DeselectAll(); + + private: + CFX_ArrayTemplate m_aItems; }; -class CFX_ListCtrl : public CFX_List -{ -public: - CFX_ListCtrl(); - virtual ~CFX_ListCtrl(); - -public: - void SetNotify(IFX_List_Notify * pNotify); - - void OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl); - void OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl); - void OnVK(int32_t nItemIndex,FX_BOOL bShift,FX_BOOL bCtrl); - FX_BOOL OnChar(FX_WORD nChar,FX_BOOL bShift,FX_BOOL bCtrl); - - virtual CPDF_Point InToOut(const CPDF_Point & point) const; - virtual CPDF_Point OutToIn(const CPDF_Point & point) const; - virtual CPDF_Rect InToOut(const CPDF_Rect & rect) const; - virtual CPDF_Rect OutToIn(const CPDF_Rect & rect) const; - - virtual void SetPlateRect(const CPDF_Rect & rect); - void SetScrollPos(const CPDF_Point & point); - void ScrollToListItem(int32_t nItemIndex); - virtual CPDF_Rect GetItemRect(int32_t nIndex) const; - int32_t GetCaret() const {return m_nCaretIndex;} - int32_t GetSelect() const {return m_nSelItem;} - int32_t GetTopItem() const; - virtual CPDF_Rect GetContentRect() const; - virtual int32_t GetItemIndex(const CPDF_Point & point) const; - - void AddString(const FX_WCHAR* string); - void SetTopItem(int32_t nIndex); - void Select(int32_t nItemIndex); - virtual void SetCaret(int32_t nItemIndex); - virtual void Empty(); - virtual void Cancel(); - CFX_WideString GetText() const; - -private: - void SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected); - void SetSingleSelect(int32_t nItemIndex); - void InvalidateItem(int32_t nItemIndex); - void SelectItems(); - FX_BOOL IsItemVisible(int32_t nItemIndex) const; - void SetScrollInfo(); - void SetScrollPosY(FX_FLOAT fy); - virtual void ReArrange(int32_t nItemIndex); - -private: - IFX_List_Notify* m_pNotify; - FX_BOOL m_bNotifyFlag; - CPDF_Point m_ptScrollPos; - CPLST_Select m_aSelItems; //for multiple - int32_t m_nSelItem; //for single - int32_t m_nFootIndex; //for multiple - FX_BOOL m_bCtrlSel; //for multiple - int32_t m_nCaretIndex; //for multiple +class CFX_ListCtrl : public CFX_List { + public: + CFX_ListCtrl(); + virtual ~CFX_ListCtrl(); + + public: + void SetNotify(IFX_List_Notify* pNotify); + + void OnMouseDown(const CPDF_Point& point, FX_BOOL bShift, FX_BOOL bCtrl); + void OnMouseMove(const CPDF_Point& point, FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl); + void OnVK(int32_t nItemIndex, FX_BOOL bShift, FX_BOOL bCtrl); + FX_BOOL OnChar(FX_WORD nChar, FX_BOOL bShift, FX_BOOL bCtrl); + + virtual CPDF_Point InToOut(const CPDF_Point& point) const; + virtual CPDF_Point OutToIn(const CPDF_Point& point) const; + virtual CPDF_Rect InToOut(const CPDF_Rect& rect) const; + virtual CPDF_Rect OutToIn(const CPDF_Rect& rect) const; + + virtual void SetPlateRect(const CPDF_Rect& rect); + void SetScrollPos(const CPDF_Point& point); + void ScrollToListItem(int32_t nItemIndex); + virtual CPDF_Rect GetItemRect(int32_t nIndex) const; + int32_t GetCaret() const { return m_nCaretIndex; } + int32_t GetSelect() const { return m_nSelItem; } + int32_t GetTopItem() const; + virtual CPDF_Rect GetContentRect() const; + virtual int32_t GetItemIndex(const CPDF_Point& point) const; + + void AddString(const FX_WCHAR* string); + void SetTopItem(int32_t nIndex); + void Select(int32_t nItemIndex); + virtual void SetCaret(int32_t nItemIndex); + virtual void Empty(); + virtual void Cancel(); + CFX_WideString GetText() const; + + private: + void SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected); + void SetSingleSelect(int32_t nItemIndex); + void InvalidateItem(int32_t nItemIndex); + void SelectItems(); + FX_BOOL IsItemVisible(int32_t nItemIndex) const; + void SetScrollInfo(); + void SetScrollPosY(FX_FLOAT fy); + virtual void ReArrange(int32_t nItemIndex); + + private: + IFX_List_Notify* m_pNotify; + FX_BOOL m_bNotifyFlag; + CPDF_Point m_ptScrollPos; + CPLST_Select m_aSelItems; // for multiple + int32_t m_nSelItem; // for single + int32_t m_nFootIndex; // for multiple + FX_BOOL m_bCtrlSel; // for multiple + int32_t m_nCaretIndex; // for multiple }; #endif // FPDFSDK_INCLUDE_FXEDIT_FXET_LIST_H_ diff --git a/fpdfsdk/include/javascript/Consts.h b/fpdfsdk/include/javascript/Consts.h index d04cc6b54c..c0abe4c7d4 100644 --- a/fpdfsdk/include/javascript/Consts.h +++ b/fpdfsdk/include/javascript/Consts.h @@ -11,117 +11,108 @@ /* ------------------------------ border ------------------------------ */ -class CJS_Border : public CJS_Object -{ -public: - CJS_Border(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Border(void){}; +class CJS_Border : public CJS_Object { + public: + CJS_Border(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Border(void){}; - DECLARE_JS_CLASS_CONST(); + DECLARE_JS_CLASS_CONST(); }; /* ------------------------------ display ------------------------------ */ -class CJS_Display : public CJS_Object -{ -public: - CJS_Display(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Display(void){}; +class CJS_Display : public CJS_Object { + public: + CJS_Display(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Display(void){}; - DECLARE_JS_CLASS_CONST(); + DECLARE_JS_CLASS_CONST(); }; /* ------------------------------ font ------------------------------ */ -class CJS_Font : public CJS_Object -{ -public: - CJS_Font(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Font(void){}; +class CJS_Font : public CJS_Object { + public: + CJS_Font(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Font(void){}; - DECLARE_JS_CLASS_CONST(); + DECLARE_JS_CLASS_CONST(); }; /* ------------------------------ highlight ------------------------------ */ -class CJS_Highlight : public CJS_Object -{ -public: - CJS_Highlight(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Highlight(void){}; +class CJS_Highlight : public CJS_Object { + public: + CJS_Highlight(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Highlight(void){}; - DECLARE_JS_CLASS_CONST(); + DECLARE_JS_CLASS_CONST(); }; /* ------------------------------ position ------------------------------ */ -class CJS_Position : public CJS_Object -{ -public: - CJS_Position(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Position(void){}; +class CJS_Position : public CJS_Object { + public: + CJS_Position(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Position(void){}; - DECLARE_JS_CLASS_CONST(); + DECLARE_JS_CLASS_CONST(); }; /* ------------------------------ scaleHow ------------------------------ */ -class CJS_ScaleHow : public CJS_Object -{ -public: - CJS_ScaleHow(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_ScaleHow(void){}; +class CJS_ScaleHow : public CJS_Object { + public: + CJS_ScaleHow(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_ScaleHow(void){}; - DECLARE_JS_CLASS_CONST(); + DECLARE_JS_CLASS_CONST(); }; /* ------------------------------ scaleWhen ------------------------------ */ -class CJS_ScaleWhen : public CJS_Object -{ -public: - CJS_ScaleWhen(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_ScaleWhen(void){}; +class CJS_ScaleWhen : public CJS_Object { + public: + CJS_ScaleWhen(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_ScaleWhen(void){}; - DECLARE_JS_CLASS_CONST(); + DECLARE_JS_CLASS_CONST(); }; /* ------------------------------ style ------------------------------ */ -class CJS_Style : public CJS_Object -{ -public: - CJS_Style(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Style(void){}; +class CJS_Style : public CJS_Object { + public: + CJS_Style(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Style(void){}; - DECLARE_JS_CLASS_CONST(); + DECLARE_JS_CLASS_CONST(); }; /* ------------------------------ zoomtype ------------------------------ */ -class CJS_Zoomtype : public CJS_Object -{ -public: - CJS_Zoomtype(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Zoomtype(void){}; +class CJS_Zoomtype : public CJS_Object { + public: + CJS_Zoomtype(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Zoomtype(void){}; - DECLARE_JS_CLASS_CONST(); + DECLARE_JS_CLASS_CONST(); }; -/* ------------------------------ CJS_GlobalConsts ------------------------------ */ +/* ------------------------------ CJS_GlobalConsts + * ------------------------------ */ -class CJS_GlobalConsts : public CJS_Object -{ -public: - static int Init(IJS_Runtime* pRuntime); +class CJS_GlobalConsts : public CJS_Object { + public: + static int Init(IJS_Runtime* pRuntime); }; -/* ------------------------------ CJS_GlobalArrays ------------------------------ */ +/* ------------------------------ CJS_GlobalArrays + * ------------------------------ */ -class CJS_GlobalArrays : public CJS_Object -{ -public: - static int Init(IJS_Runtime* pRuntime); +class CJS_GlobalArrays : public CJS_Object { + public: + static int Init(IJS_Runtime* pRuntime); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_CONSTS_H_ diff --git a/fpdfsdk/include/javascript/Document.h b/fpdfsdk/include/javascript/Document.h index 11642366f4..52a1981b5e 100644 --- a/fpdfsdk/include/javascript/Document.h +++ b/fpdfsdk/include/javascript/Document.h @@ -9,267 +9,399 @@ #include "JS_Define.h" -class PrintParamsObj : public CJS_EmbedObj -{ -public: - PrintParamsObj(CJS_Object* pJSObject); - virtual ~PrintParamsObj(){} +class PrintParamsObj : public CJS_EmbedObj { + public: + PrintParamsObj(CJS_Object* pJSObject); + virtual ~PrintParamsObj() {} -public: - FX_BOOL bUI; - int nStart; - int nEnd; - FX_BOOL bSilent; - FX_BOOL bShrinkToFit; - FX_BOOL bPrintAsImage; - FX_BOOL bReverse; - FX_BOOL bAnnotations; + public: + FX_BOOL bUI; + int nStart; + int nEnd; + FX_BOOL bSilent; + FX_BOOL bShrinkToFit; + FX_BOOL bPrintAsImage; + FX_BOOL bReverse; + FX_BOOL bAnnotations; }; -class CJS_PrintParamsObj : public CJS_Object -{ -public: - CJS_PrintParamsObj(JSFXObject pObject) : CJS_Object(pObject) {} - virtual ~CJS_PrintParamsObj(){} +class CJS_PrintParamsObj : public CJS_Object { + public: + CJS_PrintParamsObj(JSFXObject pObject) : CJS_Object(pObject) {} + virtual ~CJS_PrintParamsObj() {} - DECLARE_JS_CLASS(CJS_PrintParamsObj); + DECLARE_JS_CLASS(CJS_PrintParamsObj); }; - class Icon; class Field; -struct IconElement -{ - IconElement() : IconName(L""), NextIcon(NULL), IconStream(NULL) {} - virtual ~IconElement() - { - } - CFX_WideString IconName; - IconElement* NextIcon; - Icon* IconStream; +struct IconElement { + IconElement() : IconName(L""), NextIcon(NULL), IconStream(NULL) {} + virtual ~IconElement() {} + CFX_WideString IconName; + IconElement* NextIcon; + Icon* IconStream; }; -class IconTree -{ -public: - IconTree():m_pHead(NULL), m_pEnd(NULL), m_iLength(0) - { - - } +class IconTree { + public: + IconTree() : m_pHead(NULL), m_pEnd(NULL), m_iLength(0) {} - virtual ~IconTree() - { - } + virtual ~IconTree() {} -public: - void InsertIconElement(IconElement* pNewIcon); - void DeleteIconElement(CFX_WideString swIconName); - void DeleteIconTree(); - int GetLength(); - IconElement* operator[](int iIndex); + public: + void InsertIconElement(IconElement* pNewIcon); + void DeleteIconElement(CFX_WideString swIconName); + void DeleteIconTree(); + int GetLength(); + IconElement* operator[](int iIndex); -private: - IconElement* m_pHead; - IconElement* m_pEnd; - int m_iLength; + private: + IconElement* m_pHead; + IconElement* m_pEnd; + int m_iLength; }; struct CJS_DelayData; struct CJS_DelayAnnot; struct CJS_AnnotObj; -class Document : public CJS_EmbedObj -{ -public: - Document(CJS_Object* pJSObject); - virtual ~Document(); +class Document : public CJS_EmbedObj { + public: + Document(CJS_Object* pJSObject); + virtual ~Document(); -public: - FX_BOOL ADBE(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL author(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL baseURL(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL bookmarkRoot(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL calculate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL Collab(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL creationDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL creator(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL dirty(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL documentFileName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL external(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL filesize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL icons(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL info(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL keywords(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL layout(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL modDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL mouseX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL mouseY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL numFields(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL numPages(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL pageNum(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL pageWindowRect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL path(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL producer(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL subject(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL title(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL zoomType(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + public: + FX_BOOL ADBE(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL author(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL baseURL(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL bookmarkRoot(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL calculate(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL Collab(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL creationDate(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL creator(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL dirty(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL documentFileName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL external(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL filesize(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL icons(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL info(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL keywords(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL layout(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL modDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL mouseX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL mouseY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL numFields(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL numPages(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL pageNum(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL pageWindowRect(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL path(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL producer(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL subject(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL title(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL zoomType(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); - FX_BOOL addAnnot(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL addField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL addLink(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL addIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL calculateNow(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL closeDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL createDataObject(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL deletePages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL exportAsText(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL exportAsFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL exportAsXFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL extractPages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getAnnot(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getAnnots(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getAnnot3D(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getAnnots3D(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getLinks(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getNthFieldName(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getOCGs(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getPageBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getPageNthWord(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getPageNthWordQuads(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getPageNumWords(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getPrintParams(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getURL(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL importAnFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL importAnXFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL importTextData(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL insertPages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL mailForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL print(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL removeField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL replacePages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL resetForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL saveAs(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL submitForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL mailDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL removeIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); + FX_BOOL addAnnot(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL addField(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL addLink(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL addIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL calculateNow(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL closeDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL createDataObject(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL deletePages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL exportAsText(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL exportAsFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL exportAsXFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL extractPages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getAnnot(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getAnnots(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getAnnot3D(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getAnnots3D(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getField(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getLinks(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getNthFieldName(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getOCGs(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getPageBox(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getPageNthWord(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getPageNthWordQuads(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getPageNumWords(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getPrintParams(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getURL(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL importAnFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL importAnXFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL importTextData(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL insertPages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL mailForm(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL print(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL removeField(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL replacePages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL resetForm(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL saveAs(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL submitForm(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL mailDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL removeIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); -public: - void AttachDoc(CPDFSDK_Document* pDoc); - CPDFSDK_Document* GetReaderDoc(); - static FX_BOOL ExtractFileName(CPDFSDK_Document* pDoc, CFX_ByteString& strFileName); - static FX_BOOL ExtractFolderName(CPDFSDK_Document* pDoc, CFX_ByteString& strFolderName); - void AddDelayData(CJS_DelayData* pData); - void DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex); - void AddDelayAnnotData(CJS_AnnotObj *pData); - void DoAnnotDelay(); - void SetIsolate(v8::Isolate* isolate) {m_isolate = isolate;} - CJS_Document* GetCJSDoc() const; + public: + void AttachDoc(CPDFSDK_Document* pDoc); + CPDFSDK_Document* GetReaderDoc(); + static FX_BOOL ExtractFileName(CPDFSDK_Document* pDoc, + CFX_ByteString& strFileName); + static FX_BOOL ExtractFolderName(CPDFSDK_Document* pDoc, + CFX_ByteString& strFolderName); + void AddDelayData(CJS_DelayData* pData); + void DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex); + void AddDelayAnnotData(CJS_AnnotObj* pData); + void DoAnnotDelay(); + void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; } + CJS_Document* GetCJSDoc() const; -private: - CFX_WideString ReversalStr(CFX_WideString cbFrom); - CFX_WideString CutString(CFX_WideString cbFrom); - bool IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect); - int CountWords(CPDF_TextObject* pTextObj); - CFX_WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex); - FX_BOOL ParserParams(JSObject *pObj,CJS_AnnotObj& annotobj); + private: + CFX_WideString ReversalStr(CFX_WideString cbFrom); + CFX_WideString CutString(CFX_WideString cbFrom); + bool IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect); + int CountWords(CPDF_TextObject* pTextObj); + CFX_WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex); + FX_BOOL ParserParams(JSObject* pObj, CJS_AnnotObj& annotobj); - v8::Isolate* m_isolate; - IconTree* m_pIconTree; - CPDFSDK_Document* m_pDocument; - CFX_WideString m_cwBaseURL; - bool m_bDelay; - CFX_ArrayTemplate m_DelayData; - CFX_ArrayTemplate m_DelayAnnotData; + v8::Isolate* m_isolate; + IconTree* m_pIconTree; + CPDFSDK_Document* m_pDocument; + CFX_WideString m_cwBaseURL; + bool m_bDelay; + CFX_ArrayTemplate m_DelayData; + CFX_ArrayTemplate m_DelayAnnotData; }; -class CJS_Document : public CJS_Object -{ -public: - CJS_Document(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Document(){}; +class CJS_Document : public CJS_Object { + public: + CJS_Document(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Document(){}; - virtual FX_BOOL InitInstance(IFXJS_Context* cc); + virtual FX_BOOL InitInstance(IFXJS_Context* cc); - DECLARE_JS_CLASS(CJS_Document); + DECLARE_JS_CLASS(CJS_Document); - JS_STATIC_PROP(ADBE, Document); - JS_STATIC_PROP(author, Document); - JS_STATIC_PROP(baseURL, Document); - JS_STATIC_PROP(bookmarkRoot, Document); - JS_STATIC_PROP(calculate, Document); - JS_STATIC_PROP(Collab, Document); - JS_STATIC_PROP(creationDate, Document); - JS_STATIC_PROP(creator, Document); - JS_STATIC_PROP(delay, Document); - JS_STATIC_PROP(dirty, Document); - JS_STATIC_PROP(documentFileName, Document); - JS_STATIC_PROP(external, Document); - JS_STATIC_PROP(filesize, Document); - JS_STATIC_PROP(icons, Document); - JS_STATIC_PROP(info, Document); - JS_STATIC_PROP(keywords, Document); - JS_STATIC_PROP(layout, Document); - JS_STATIC_PROP(media, Document); - JS_STATIC_PROP(modDate, Document); - JS_STATIC_PROP(mouseX, Document); - JS_STATIC_PROP(mouseY, Document); - JS_STATIC_PROP(numFields, Document); - JS_STATIC_PROP(numPages, Document); - JS_STATIC_PROP(pageNum, Document); - JS_STATIC_PROP(pageWindowRect, Document); - JS_STATIC_PROP(path, Document); - JS_STATIC_PROP(producer, Document); - JS_STATIC_PROP(subject, Document); - JS_STATIC_PROP(title, Document); - JS_STATIC_PROP(zoom, Document); - JS_STATIC_PROP(zoomType, Document); + JS_STATIC_PROP(ADBE, Document); + JS_STATIC_PROP(author, Document); + JS_STATIC_PROP(baseURL, Document); + JS_STATIC_PROP(bookmarkRoot, Document); + JS_STATIC_PROP(calculate, Document); + JS_STATIC_PROP(Collab, Document); + JS_STATIC_PROP(creationDate, Document); + JS_STATIC_PROP(creator, Document); + JS_STATIC_PROP(delay, Document); + JS_STATIC_PROP(dirty, Document); + JS_STATIC_PROP(documentFileName, Document); + JS_STATIC_PROP(external, Document); + JS_STATIC_PROP(filesize, Document); + JS_STATIC_PROP(icons, Document); + JS_STATIC_PROP(info, Document); + JS_STATIC_PROP(keywords, Document); + JS_STATIC_PROP(layout, Document); + JS_STATIC_PROP(media, Document); + JS_STATIC_PROP(modDate, Document); + JS_STATIC_PROP(mouseX, Document); + JS_STATIC_PROP(mouseY, Document); + JS_STATIC_PROP(numFields, Document); + JS_STATIC_PROP(numPages, Document); + JS_STATIC_PROP(pageNum, Document); + JS_STATIC_PROP(pageWindowRect, Document); + JS_STATIC_PROP(path, Document); + JS_STATIC_PROP(producer, Document); + JS_STATIC_PROP(subject, Document); + JS_STATIC_PROP(title, Document); + JS_STATIC_PROP(zoom, Document); + JS_STATIC_PROP(zoomType, Document); - JS_STATIC_METHOD(addAnnot,Document); - JS_STATIC_METHOD(addField, Document); - JS_STATIC_METHOD(addLink, Document); - JS_STATIC_METHOD(addIcon, Document); - JS_STATIC_METHOD(calculateNow, Document); - JS_STATIC_METHOD(closeDoc, Document); - JS_STATIC_METHOD(createDataObject, Document); - JS_STATIC_METHOD(deletePages, Document); - JS_STATIC_METHOD(exportAsText, Document); - JS_STATIC_METHOD(exportAsFDF, Document); - JS_STATIC_METHOD(exportAsXFDF, Document); - JS_STATIC_METHOD(extractPages, Document); - JS_STATIC_METHOD(getAnnot, Document); - JS_STATIC_METHOD(getAnnots, Document); - JS_STATIC_METHOD(getAnnot3D, Document); - JS_STATIC_METHOD(getAnnots3D, Document); - JS_STATIC_METHOD(getField, Document); - JS_STATIC_METHOD(getIcon, Document); - JS_STATIC_METHOD(getLinks, Document); - JS_STATIC_METHOD(getNthFieldName, Document); - JS_STATIC_METHOD(getOCGs, Document); - JS_STATIC_METHOD(getPageBox, Document); - JS_STATIC_METHOD(getPageNthWord, Document); - JS_STATIC_METHOD(getPageNthWordQuads, Document); - JS_STATIC_METHOD(getPageNumWords, Document); - JS_STATIC_METHOD(getPrintParams, Document); - JS_STATIC_METHOD(getURL, Document); - JS_STATIC_METHOD(importAnFDF, Document); - JS_STATIC_METHOD(importAnXFDF, Document); - JS_STATIC_METHOD(importTextData, Document); - JS_STATIC_METHOD(insertPages, Document); - JS_STATIC_METHOD(mailForm, Document); - JS_STATIC_METHOD(print, Document); - JS_STATIC_METHOD(removeField, Document); - JS_STATIC_METHOD(replacePages, Document); - JS_STATIC_METHOD(removeIcon, Document); - JS_STATIC_METHOD(resetForm, Document); - JS_STATIC_METHOD(saveAs, Document); - JS_STATIC_METHOD(submitForm, Document); - JS_STATIC_METHOD(mailDoc, Document); + JS_STATIC_METHOD(addAnnot, Document); + JS_STATIC_METHOD(addField, Document); + JS_STATIC_METHOD(addLink, Document); + JS_STATIC_METHOD(addIcon, Document); + JS_STATIC_METHOD(calculateNow, Document); + JS_STATIC_METHOD(closeDoc, Document); + JS_STATIC_METHOD(createDataObject, Document); + JS_STATIC_METHOD(deletePages, Document); + JS_STATIC_METHOD(exportAsText, Document); + JS_STATIC_METHOD(exportAsFDF, Document); + JS_STATIC_METHOD(exportAsXFDF, Document); + JS_STATIC_METHOD(extractPages, Document); + JS_STATIC_METHOD(getAnnot, Document); + JS_STATIC_METHOD(getAnnots, Document); + JS_STATIC_METHOD(getAnnot3D, Document); + JS_STATIC_METHOD(getAnnots3D, Document); + JS_STATIC_METHOD(getField, Document); + JS_STATIC_METHOD(getIcon, Document); + JS_STATIC_METHOD(getLinks, Document); + JS_STATIC_METHOD(getNthFieldName, Document); + JS_STATIC_METHOD(getOCGs, Document); + JS_STATIC_METHOD(getPageBox, Document); + JS_STATIC_METHOD(getPageNthWord, Document); + JS_STATIC_METHOD(getPageNthWordQuads, Document); + JS_STATIC_METHOD(getPageNumWords, Document); + JS_STATIC_METHOD(getPrintParams, Document); + JS_STATIC_METHOD(getURL, Document); + JS_STATIC_METHOD(importAnFDF, Document); + JS_STATIC_METHOD(importAnXFDF, Document); + JS_STATIC_METHOD(importTextData, Document); + JS_STATIC_METHOD(insertPages, Document); + JS_STATIC_METHOD(mailForm, Document); + JS_STATIC_METHOD(print, Document); + JS_STATIC_METHOD(removeField, Document); + JS_STATIC_METHOD(replacePages, Document); + JS_STATIC_METHOD(removeIcon, Document); + JS_STATIC_METHOD(resetForm, Document); + JS_STATIC_METHOD(saveAs, Document); + JS_STATIC_METHOD(submitForm, Document); + JS_STATIC_METHOD(mailDoc, Document); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_DOCUMENT_H_ diff --git a/fpdfsdk/include/javascript/Field.h b/fpdfsdk/include/javascript/Field.h index 70d1d39b48..afbf783bf2 100644 --- a/fpdfsdk/include/javascript/Field.h +++ b/fpdfsdk/include/javascript/Field.h @@ -14,346 +14,611 @@ class Document; -enum FIELD_PROP -{ - FP_ALIGNMENT, - FP_BORDERSTYLE, - FP_BUTTONALIGNX, - FP_BUTTONALIGNY, - FP_BUTTONFITBOUNDS, - FP_BUTTONPOSITION, - FP_BUTTONSCALEHOW, - FP_BUTTONSCALEWHEN, - FP_CALCORDERINDEX, - FP_CHARLIMIT, - FP_COMB, - FP_COMMITONSELCHANGE, - FP_CURRENTVALUEINDICES, - FP_DEFAULTVALUE, - FP_DONOTSCROLL, - FP_DISPLAY, - FP_FILLCOLOR, - FP_HIDDEN, - FP_HIGHLIGHT, - FP_LINEWIDTH, - FP_MULTILINE, - FP_MULTIPLESELECTION, - FP_PASSWORD, - FP_RECT, - FP_RICHTEXT, - FP_RICHVALUE, - FP_ROTATION, - FP_STROKECOLOR, - FP_STYLE, - FP_TEXTCOLOR, - FP_TEXTFONT, - FP_TEXTSIZE, - FP_USERNAME, - FP_VALUE +enum FIELD_PROP { + FP_ALIGNMENT, + FP_BORDERSTYLE, + FP_BUTTONALIGNX, + FP_BUTTONALIGNY, + FP_BUTTONFITBOUNDS, + FP_BUTTONPOSITION, + FP_BUTTONSCALEHOW, + FP_BUTTONSCALEWHEN, + FP_CALCORDERINDEX, + FP_CHARLIMIT, + FP_COMB, + FP_COMMITONSELCHANGE, + FP_CURRENTVALUEINDICES, + FP_DEFAULTVALUE, + FP_DONOTSCROLL, + FP_DISPLAY, + FP_FILLCOLOR, + FP_HIDDEN, + FP_HIGHLIGHT, + FP_LINEWIDTH, + FP_MULTILINE, + FP_MULTIPLESELECTION, + FP_PASSWORD, + FP_RECT, + FP_RICHTEXT, + FP_RICHVALUE, + FP_ROTATION, + FP_STROKECOLOR, + FP_STYLE, + FP_TEXTCOLOR, + FP_TEXTFONT, + FP_TEXTSIZE, + FP_USERNAME, + FP_VALUE }; -class CJS_WideStringArray -{ -public: - CJS_WideStringArray(){} - virtual ~CJS_WideStringArray() - { - for (int i=0,sz=m_Data.GetSize(); i m_Data; +class CJS_WideStringArray { + public: + CJS_WideStringArray() {} + virtual ~CJS_WideStringArray() { + for (int i = 0, sz = m_Data.GetSize(); i < sz; i++) + delete m_Data.GetAt(i); + m_Data.RemoveAll(); + } + + void Add(const CFX_WideString& string) { + m_Data.Add(new CFX_WideString(string)); + } + + int GetSize() const { return m_Data.GetSize(); } + + CFX_WideString GetAt(int i) const { return *m_Data.GetAt(i); } + + private: + CFX_ArrayTemplate m_Data; }; -struct CJS_DelayData -{ - CFX_WideString sFieldName; - int nControlIndex; - enum FIELD_PROP eProp; - int32_t num; - bool b; - CFX_ByteString string; - CFX_WideString widestring; - CPDF_Rect rect; - CPWL_Color color; - CFX_DWordArray wordarray; - CJS_WideStringArray widestringarray; +struct CJS_DelayData { + CFX_WideString sFieldName; + int nControlIndex; + enum FIELD_PROP eProp; + int32_t num; + bool b; + CFX_ByteString string; + CFX_WideString widestring; + CPDF_Rect rect; + CPWL_Color color; + CFX_DWordArray wordarray; + CJS_WideStringArray widestringarray; }; -class Field : public CJS_EmbedObj -{ -public: - Field(CJS_Object* pJSObject); - virtual ~Field(void); - - FX_BOOL alignment(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL borderStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL buttonAlignX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL buttonAlignY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL buttonFitBounds(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL buttonPosition(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL buttonScaleHow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL buttonScaleWhen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL calcOrderIndex(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL charLimit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL comb(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL commitOnSelChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL currentValueIndices(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL defaultStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL defaultValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL doNotScroll(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL doNotSpellCheck(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL display(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL doc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL editable(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL exportValues(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL fileSelect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL fillColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL hidden(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL highlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL lineWidth(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL multiline(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL multipleSelection(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL numItems(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL page(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL password(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL print(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL radiosInUnison(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL readonly(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL rect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL required(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL richText(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL rotation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL strokeColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL style(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL submitName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL textColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL textFont(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL textSize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL userName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL valueAsString(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - - FX_BOOL browseForFileToSubmit(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL buttonGetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL buttonGetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL buttonImportIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL buttonSetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL buttonSetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL checkThisBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL clearItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL defaultIsChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL deleteItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getArray(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL getLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL insertItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL isBoxChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL isDefaultChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL setAction(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL setFocus(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL setItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL setLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL signatureGetModifications(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL signatureGetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL signatureInfo(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL signatureSetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL signatureSign(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL signatureValidate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - -public: - static void SetAlignment(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string); - static void SetBorderStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string); - static void SetButtonAlignX(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetButtonAlignY(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetButtonFitBounds(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b); - static void SetButtonPosition(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetButtonScaleHow(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetButtonScaleWhen(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetCalcOrderIndex(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetCharLimit(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetComb(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b); - static void SetCommitOnSelChange(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b); - static void SetCurrentValueIndices(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_DWordArray& array); - static void SetDefaultStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex); - static void SetDefaultValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_WideString& string); - static void SetDoNotScroll(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b); - static void SetDisplay(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetFillColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color); - static void SetHidden(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b); - static void SetHighlight(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string); - static void SetLineWidth(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetMultiline(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b); - static void SetMultipleSelection(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b); - static void SetPassword(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b); - static void SetRect(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPDF_Rect& rect); - static void SetRichText(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b); - static void SetRichValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex); - static void SetRotation(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetStrokeColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color); - static void SetStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string); - static void SetTextColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color); - static void SetTextFont(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string); - static void SetTextSize(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number); - static void SetUserName(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_WideString& string); - static void SetValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CJS_WideStringArray& strArray); - -public: - static void AddField(CPDFSDK_Document* pDocument, int nPageIndex, int nFieldType, - const CFX_WideString& sName, const CPDF_Rect& rcCoords); -public: - static void UpdateFormField(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, - FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh); - static void UpdateFormControl(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl, - FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh); - - static CPDFSDK_Widget* GetWidget(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl); - static void GetFormFields(CPDFSDK_Document* pDocument, const CFX_WideString& csFieldName, CFX_PtrArray& FieldsArray); - - static void DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData); - -public: - FX_BOOL AttachField(Document* pDocument, const CFX_WideString& csFieldName); - void SetDelay(FX_BOOL bDelay); - void SetIsolate(v8::Isolate* isolate) {m_isolate = isolate;} -protected: - void ParseFieldName(const std::wstring &strFieldNameParsed,std::wstring &strFieldName,int & iControlNo); - void GetFormFields(const CFX_WideString& csFieldName, CFX_PtrArray& FieldsArray); - CPDF_FormControl* GetSmartFieldControl(CPDF_FormField* pFormField); - FX_BOOL ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel); - - void AddDelay_Int(enum FIELD_PROP prop, int32_t n); - void AddDelay_Bool(enum FIELD_PROP prop,bool b); - void AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string); - void AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string); - void AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect); - void AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color); - void AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array); - void AddDelay_WideStringArray(enum FIELD_PROP prop, const CJS_WideStringArray& array); - - void DoDelay(); -public: - Document* m_pJSDoc; - CPDFSDK_Document* m_pDocument; - CFX_WideString m_FieldName; - int m_nFormControlIndex; - FX_BOOL m_bCanSet; - - FX_BOOL m_bDelay; - v8::Isolate* m_isolate; +class Field : public CJS_EmbedObj { + public: + Field(CJS_Object* pJSObject); + virtual ~Field(void); + + FX_BOOL alignment(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL borderStyle(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonAlignX(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonAlignY(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonFitBounds(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonPosition(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonScaleHow(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL buttonScaleWhen(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL calcOrderIndex(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL charLimit(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL comb(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL commitOnSelChange(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL currentValueIndices(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL defaultStyle(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL defaultValue(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL doNotScroll(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL doNotSpellCheck(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL display(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL doc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL editable(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL exportValues(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL fileSelect(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL fillColor(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL hidden(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL highlight(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL lineWidth(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL multiline(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL multipleSelection(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL numItems(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL page(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL password(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL print(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL radiosInUnison(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL readonly(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL rect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL required(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL richText(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL richValue(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL rotation(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL strokeColor(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL style(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL submitName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL textColor(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL textFont(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL textSize(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL userName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL valueAsString(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + + FX_BOOL browseForFileToSubmit(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL buttonGetCaption(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL buttonGetIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL buttonImportIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL buttonSetCaption(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL buttonSetIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL checkThisBox(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL clearItems(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL defaultIsChecked(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL deleteItemAt(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getArray(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getItemAt(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL getLock(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL insertItemAt(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL isBoxChecked(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL isDefaultChecked(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setAction(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setFocus(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setItems(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setLock(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureGetModifications(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureGetSeedValue(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureInfo(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureSetSeedValue(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureSign(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL signatureValidate(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + + public: + static void SetAlignment(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string); + static void SetBorderStyle(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string); + static void SetButtonAlignX(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetButtonAlignY(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetButtonFitBounds(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetButtonPosition(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetButtonScaleHow(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetButtonScaleWhen(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetCalcOrderIndex(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetCharLimit(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetComb(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetCommitOnSelChange(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetCurrentValueIndices(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_DWordArray& array); + static void SetDefaultStyle(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex); + static void SetDefaultValue(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_WideString& string); + static void SetDoNotScroll(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetDisplay(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetFillColor(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPWL_Color& color); + static void SetHidden(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetHighlight(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string); + static void SetLineWidth(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetMultiline(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetMultipleSelection(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetPassword(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetRect(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPDF_Rect& rect); + static void SetRichText(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b); + static void SetRichValue(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex); + static void SetRotation(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetStrokeColor(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPWL_Color& color); + static void SetStyle(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string); + static void SetTextColor(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPWL_Color& color); + static void SetTextFont(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string); + static void SetTextSize(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number); + static void SetUserName(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_WideString& string); + static void SetValue(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CJS_WideStringArray& strArray); + + public: + static void AddField(CPDFSDK_Document* pDocument, + int nPageIndex, + int nFieldType, + const CFX_WideString& sName, + const CPDF_Rect& rcCoords); + + public: + static void UpdateFormField(CPDFSDK_Document* pDocument, + CPDF_FormField* pFormField, + FX_BOOL bChangeMark, + FX_BOOL bResetAP, + FX_BOOL bRefresh); + static void UpdateFormControl(CPDFSDK_Document* pDocument, + CPDF_FormControl* pFormControl, + FX_BOOL bChangeMark, + FX_BOOL bResetAP, + FX_BOOL bRefresh); + + static CPDFSDK_Widget* GetWidget(CPDFSDK_Document* pDocument, + CPDF_FormControl* pFormControl); + static void GetFormFields(CPDFSDK_Document* pDocument, + const CFX_WideString& csFieldName, + CFX_PtrArray& FieldsArray); + + static void DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData); + + public: + FX_BOOL AttachField(Document* pDocument, const CFX_WideString& csFieldName); + void SetDelay(FX_BOOL bDelay); + void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; } + + protected: + void ParseFieldName(const std::wstring& strFieldNameParsed, + std::wstring& strFieldName, + int& iControlNo); + void GetFormFields(const CFX_WideString& csFieldName, + CFX_PtrArray& FieldsArray); + CPDF_FormControl* GetSmartFieldControl(CPDF_FormField* pFormField); + FX_BOOL ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel); + + void AddDelay_Int(enum FIELD_PROP prop, int32_t n); + void AddDelay_Bool(enum FIELD_PROP prop, bool b); + void AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string); + void AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string); + void AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect); + void AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color); + void AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array); + void AddDelay_WideStringArray(enum FIELD_PROP prop, + const CJS_WideStringArray& array); + + void DoDelay(); + + public: + Document* m_pJSDoc; + CPDFSDK_Document* m_pDocument; + CFX_WideString m_FieldName; + int m_nFormControlIndex; + FX_BOOL m_bCanSet; + + FX_BOOL m_bDelay; + v8::Isolate* m_isolate; }; -class CJS_Field : public CJS_Object -{ -public: - CJS_Field(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Field(void){}; - - virtual FX_BOOL InitInstance(IFXJS_Context* cc); - - DECLARE_JS_CLASS(CJS_Field); - - JS_STATIC_PROP(alignment, Field); - JS_STATIC_PROP(borderStyle, Field); - JS_STATIC_PROP(buttonAlignX, Field); - JS_STATIC_PROP(buttonAlignY, Field); - JS_STATIC_PROP(buttonFitBounds, Field); - JS_STATIC_PROP(buttonPosition, Field); - JS_STATIC_PROP(buttonScaleHow, Field); - JS_STATIC_PROP(buttonScaleWhen, Field); - JS_STATIC_PROP(calcOrderIndex, Field); - JS_STATIC_PROP(charLimit, Field); - JS_STATIC_PROP(comb, Field); - JS_STATIC_PROP(commitOnSelChange, Field); - JS_STATIC_PROP(currentValueIndices, Field); - JS_STATIC_PROP(defaultStyle, Field); - JS_STATIC_PROP(defaultValue, Field); - JS_STATIC_PROP(doNotScroll, Field); - JS_STATIC_PROP(doNotSpellCheck, Field); - JS_STATIC_PROP(delay, Field); - JS_STATIC_PROP(display, Field); - JS_STATIC_PROP(doc, Field); - JS_STATIC_PROP(editable, Field); - JS_STATIC_PROP(exportValues, Field); - JS_STATIC_PROP(fileSelect, Field); - JS_STATIC_PROP(fillColor, Field); - JS_STATIC_PROP(hidden, Field); - JS_STATIC_PROP(highlight, Field); - JS_STATIC_PROP(lineWidth, Field); - JS_STATIC_PROP(multiline, Field); - JS_STATIC_PROP(multipleSelection, Field); - JS_STATIC_PROP(name, Field); - JS_STATIC_PROP(numItems, Field); - JS_STATIC_PROP(page, Field); - JS_STATIC_PROP(password, Field); - JS_STATIC_PROP(print, Field); - JS_STATIC_PROP(radiosInUnison, Field); - JS_STATIC_PROP(readonly, Field); - JS_STATIC_PROP(rect, Field); - JS_STATIC_PROP(required, Field); - JS_STATIC_PROP(richText, Field); - JS_STATIC_PROP(richValue, Field); - JS_STATIC_PROP(rotation, Field); - JS_STATIC_PROP(strokeColor, Field); - JS_STATIC_PROP(style, Field); - JS_STATIC_PROP(submitName, Field); - JS_STATIC_PROP(textColor, Field); - JS_STATIC_PROP(textFont, Field); - JS_STATIC_PROP(textSize, Field); - JS_STATIC_PROP(type, Field); - JS_STATIC_PROP(userName, Field); - JS_STATIC_PROP(value, Field); - JS_STATIC_PROP(valueAsString, Field); - JS_STATIC_PROP(source, Field); - - JS_STATIC_METHOD(browseForFileToSubmit, Field); - JS_STATIC_METHOD(buttonGetCaption, Field); - JS_STATIC_METHOD(buttonGetIcon, Field); - JS_STATIC_METHOD(buttonImportIcon, Field); - JS_STATIC_METHOD(buttonSetCaption, Field); - JS_STATIC_METHOD(buttonSetIcon, Field); - JS_STATIC_METHOD(checkThisBox, Field); - JS_STATIC_METHOD(clearItems, Field); - JS_STATIC_METHOD(defaultIsChecked, Field); - JS_STATIC_METHOD(deleteItemAt, Field); - JS_STATIC_METHOD(getArray, Field); - JS_STATIC_METHOD(getItemAt, Field); - JS_STATIC_METHOD(getLock, Field); - JS_STATIC_METHOD(insertItemAt, Field); - JS_STATIC_METHOD(isBoxChecked, Field); - JS_STATIC_METHOD(isDefaultChecked, Field); - JS_STATIC_METHOD(setAction, Field); - JS_STATIC_METHOD(setFocus, Field); - JS_STATIC_METHOD(setItems, Field); - JS_STATIC_METHOD(setLock, Field); - JS_STATIC_METHOD(signatureGetModifications, Field); - JS_STATIC_METHOD(signatureGetSeedValue, Field); - JS_STATIC_METHOD(signatureInfo, Field); - JS_STATIC_METHOD(signatureSetSeedValue, Field); - JS_STATIC_METHOD(signatureSign, Field); - JS_STATIC_METHOD(signatureValidate, Field); +class CJS_Field : public CJS_Object { + public: + CJS_Field(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Field(void){}; + + virtual FX_BOOL InitInstance(IFXJS_Context* cc); + + DECLARE_JS_CLASS(CJS_Field); + + JS_STATIC_PROP(alignment, Field); + JS_STATIC_PROP(borderStyle, Field); + JS_STATIC_PROP(buttonAlignX, Field); + JS_STATIC_PROP(buttonAlignY, Field); + JS_STATIC_PROP(buttonFitBounds, Field); + JS_STATIC_PROP(buttonPosition, Field); + JS_STATIC_PROP(buttonScaleHow, Field); + JS_STATIC_PROP(buttonScaleWhen, Field); + JS_STATIC_PROP(calcOrderIndex, Field); + JS_STATIC_PROP(charLimit, Field); + JS_STATIC_PROP(comb, Field); + JS_STATIC_PROP(commitOnSelChange, Field); + JS_STATIC_PROP(currentValueIndices, Field); + JS_STATIC_PROP(defaultStyle, Field); + JS_STATIC_PROP(defaultValue, Field); + JS_STATIC_PROP(doNotScroll, Field); + JS_STATIC_PROP(doNotSpellCheck, Field); + JS_STATIC_PROP(delay, Field); + JS_STATIC_PROP(display, Field); + JS_STATIC_PROP(doc, Field); + JS_STATIC_PROP(editable, Field); + JS_STATIC_PROP(exportValues, Field); + JS_STATIC_PROP(fileSelect, Field); + JS_STATIC_PROP(fillColor, Field); + JS_STATIC_PROP(hidden, Field); + JS_STATIC_PROP(highlight, Field); + JS_STATIC_PROP(lineWidth, Field); + JS_STATIC_PROP(multiline, Field); + JS_STATIC_PROP(multipleSelection, Field); + JS_STATIC_PROP(name, Field); + JS_STATIC_PROP(numItems, Field); + JS_STATIC_PROP(page, Field); + JS_STATIC_PROP(password, Field); + JS_STATIC_PROP(print, Field); + JS_STATIC_PROP(radiosInUnison, Field); + JS_STATIC_PROP(readonly, Field); + JS_STATIC_PROP(rect, Field); + JS_STATIC_PROP(required, Field); + JS_STATIC_PROP(richText, Field); + JS_STATIC_PROP(richValue, Field); + JS_STATIC_PROP(rotation, Field); + JS_STATIC_PROP(strokeColor, Field); + JS_STATIC_PROP(style, Field); + JS_STATIC_PROP(submitName, Field); + JS_STATIC_PROP(textColor, Field); + JS_STATIC_PROP(textFont, Field); + JS_STATIC_PROP(textSize, Field); + JS_STATIC_PROP(type, Field); + JS_STATIC_PROP(userName, Field); + JS_STATIC_PROP(value, Field); + JS_STATIC_PROP(valueAsString, Field); + JS_STATIC_PROP(source, Field); + + JS_STATIC_METHOD(browseForFileToSubmit, Field); + JS_STATIC_METHOD(buttonGetCaption, Field); + JS_STATIC_METHOD(buttonGetIcon, Field); + JS_STATIC_METHOD(buttonImportIcon, Field); + JS_STATIC_METHOD(buttonSetCaption, Field); + JS_STATIC_METHOD(buttonSetIcon, Field); + JS_STATIC_METHOD(checkThisBox, Field); + JS_STATIC_METHOD(clearItems, Field); + JS_STATIC_METHOD(defaultIsChecked, Field); + JS_STATIC_METHOD(deleteItemAt, Field); + JS_STATIC_METHOD(getArray, Field); + JS_STATIC_METHOD(getItemAt, Field); + JS_STATIC_METHOD(getLock, Field); + JS_STATIC_METHOD(insertItemAt, Field); + JS_STATIC_METHOD(isBoxChecked, Field); + JS_STATIC_METHOD(isDefaultChecked, Field); + JS_STATIC_METHOD(setAction, Field); + JS_STATIC_METHOD(setFocus, Field); + JS_STATIC_METHOD(setItems, Field); + JS_STATIC_METHOD(setLock, Field); + JS_STATIC_METHOD(signatureGetModifications, Field); + JS_STATIC_METHOD(signatureGetSeedValue, Field); + JS_STATIC_METHOD(signatureInfo, Field); + JS_STATIC_METHOD(signatureSetSeedValue, Field); + JS_STATIC_METHOD(signatureSign, Field); + JS_STATIC_METHOD(signatureValidate, Field); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_FIELD_H_ diff --git a/fpdfsdk/include/javascript/IJavaScript.h b/fpdfsdk/include/javascript/IJavaScript.h index 1d9396fb79..d2cbfb1dd8 100644 --- a/fpdfsdk/include/javascript/IJavaScript.h +++ b/fpdfsdk/include/javascript/IJavaScript.h @@ -16,103 +16,161 @@ class CPDF_FormField; class CPDFSDK_Annot; class CPDFSDK_Document; -class IFXJS_Context -{ -public: - virtual ~IFXJS_Context() { } - virtual FX_BOOL Compile(const CFX_WideString& script, CFX_WideString& info) = 0; - virtual FX_BOOL RunScript(const CFX_WideString& script, CFX_WideString& info) = 0; - - virtual void OnApp_Init() = 0; - - virtual void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName) = 0; - virtual void OnDoc_WillPrint(CPDFSDK_Document* pDoc) = 0; - virtual void OnDoc_DidPrint(CPDFSDK_Document* pDoc) = 0; - virtual void OnDoc_WillSave(CPDFSDK_Document* pDoc) = 0; - virtual void OnDoc_DidSave(CPDFSDK_Document* pDoc) = 0; - virtual void OnDoc_WillClose(CPDFSDK_Document* pDoc) = 0; - - virtual void OnPage_Open(CPDFSDK_Document* pTarget) = 0; - virtual void OnPage_Close(CPDFSDK_Document* pTarget) = 0; - virtual void OnPage_InView(CPDFSDK_Document* pTarget) = 0; - virtual void OnPage_OutView(CPDFSDK_Document* pTarget) = 0; - - virtual void OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) = 0; - virtual void OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) = 0; - virtual void OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) = 0; - virtual void OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) = 0; - virtual void OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value) = 0; - virtual void OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value) = 0; - - virtual void OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc) = 0; - virtual void OnField_Format(CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit) = 0; - virtual void OnField_Keystroke(CFX_WideString& strChange, const CFX_WideString& strChangeEx, - FX_BOOL KeyDown, FX_BOOL bModifier, int &nSelEnd,int &nSelStart, FX_BOOL bShift, - CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit, - FX_BOOL bFieldFull, FX_BOOL &bRc) = 0; - virtual void OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, - FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc) = 0; - - virtual void OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0; - virtual void OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0; - - virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) = 0; - virtual void OnLink_MouseUp(CPDFSDK_Document* pTarget) = 0; - - virtual void OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString &) = 0; - virtual void OnBatchExec(CPDFSDK_Document* pTarget) = 0; - virtual void OnConsole_Exec() = 0; - virtual void OnExternal_Exec() = 0; - - virtual void EnableMessageBox(FX_BOOL bEnable) = 0; +class IFXJS_Context { + public: + virtual ~IFXJS_Context() {} + virtual FX_BOOL Compile(const CFX_WideString& script, + CFX_WideString& info) = 0; + virtual FX_BOOL RunScript(const CFX_WideString& script, + CFX_WideString& info) = 0; + + virtual void OnApp_Init() = 0; + + virtual void OnDoc_Open(CPDFSDK_Document* pDoc, + const CFX_WideString& strTargetName) = 0; + virtual void OnDoc_WillPrint(CPDFSDK_Document* pDoc) = 0; + virtual void OnDoc_DidPrint(CPDFSDK_Document* pDoc) = 0; + virtual void OnDoc_WillSave(CPDFSDK_Document* pDoc) = 0; + virtual void OnDoc_DidSave(CPDFSDK_Document* pDoc) = 0; + virtual void OnDoc_WillClose(CPDFSDK_Document* pDoc) = 0; + + virtual void OnPage_Open(CPDFSDK_Document* pTarget) = 0; + virtual void OnPage_Close(CPDFSDK_Document* pTarget) = 0; + virtual void OnPage_InView(CPDFSDK_Document* pTarget) = 0; + virtual void OnPage_OutView(CPDFSDK_Document* pTarget) = 0; + + virtual void OnField_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) = 0; + virtual void OnField_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) = 0; + virtual void OnField_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) = 0; + virtual void OnField_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) = 0; + virtual void OnField_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) = 0; + virtual void OnField_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) = 0; + + virtual void OnField_Calculate(CPDF_FormField* pSource, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) = 0; + virtual void OnField_Format(CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit) = 0; + virtual void OnField_Keystroke(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL KeyDown, + FX_BOOL bModifier, + int& nSelEnd, + int& nSelStart, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit, + FX_BOOL bFieldFull, + FX_BOOL& bRc) = 0; + virtual void OnField_Validate(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) = 0; + + virtual void OnScreen_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_Open(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_Close(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_InView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + virtual void OnScreen_OutView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) = 0; + + virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) = 0; + virtual void OnLink_MouseUp(CPDFSDK_Document* pTarget) = 0; + + virtual void OnMenu_Exec(CPDFSDK_Document* pTarget, + const CFX_WideString&) = 0; + virtual void OnBatchExec(CPDFSDK_Document* pTarget) = 0; + virtual void OnConsole_Exec() = 0; + virtual void OnExternal_Exec() = 0; + + virtual void EnableMessageBox(FX_BOOL bEnable) = 0; }; -class IFXJS_Runtime -{ -public: - virtual IFXJS_Context* NewContext() = 0; - virtual void ReleaseContext(IFXJS_Context * pContext) = 0; - virtual IFXJS_Context* GetCurrentContext() = 0; +class IFXJS_Runtime { + public: + virtual IFXJS_Context* NewContext() = 0; + virtual void ReleaseContext(IFXJS_Context* pContext) = 0; + virtual IFXJS_Context* GetCurrentContext() = 0; - virtual void SetReaderDocument(CPDFSDK_Document* pReaderDoc) = 0; + virtual void SetReaderDocument(CPDFSDK_Document* pReaderDoc) = 0; - virtual CPDFSDK_Document* GetReaderDocument() = 0; + virtual CPDFSDK_Document* GetReaderDocument() = 0; - virtual FX_BOOL GetHValueByName(const CFX_ByteStringC& utf8Name, FXJSE_HVALUE hValue) = 0; - virtual FX_BOOL SetHValueByName(const CFX_ByteStringC& utf8Name, FXJSE_HVALUE hValue) = 0; + virtual FX_BOOL GetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) = 0; + virtual FX_BOOL SetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) = 0; -protected: - ~IFXJS_Runtime() { } + protected: + ~IFXJS_Runtime() {} }; class CPDFDoc_Environment; class CJS_GlobalData; -class CJS_RuntimeFactory -{ -public: - CJS_RuntimeFactory():m_bInit(FALSE),m_nRef(0),m_pGlobalData(NULL),m_nGlobalDataCount(0) {} - ~CJS_RuntimeFactory(); - IFXJS_Runtime* NewJSRuntime(CPDFDoc_Environment* pApp); - void DeleteJSRuntime(IFXJS_Runtime* pRuntime); - void AddRef(); - void Release(); - - CJS_GlobalData* NewGlobalData(CPDFDoc_Environment* pApp); - void ReleaseGlobalData(); -private: - FX_BOOL m_bInit; - int m_nRef; - CJS_GlobalData* m_pGlobalData; - int32_t m_nGlobalDataCount; +class CJS_RuntimeFactory { + public: + CJS_RuntimeFactory() + : m_bInit(FALSE), m_nRef(0), m_pGlobalData(NULL), m_nGlobalDataCount(0) {} + ~CJS_RuntimeFactory(); + IFXJS_Runtime* NewJSRuntime(CPDFDoc_Environment* pApp); + void DeleteJSRuntime(IFXJS_Runtime* pRuntime); + void AddRef(); + void Release(); + + CJS_GlobalData* NewGlobalData(CPDFDoc_Environment* pApp); + void ReleaseGlobalData(); + + private: + FX_BOOL m_bInit; + int m_nRef; + CJS_GlobalData* m_pGlobalData; + int32_t m_nGlobalDataCount; }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_IJAVASCRIPT_H_ diff --git a/fpdfsdk/include/javascript/Icon.h b/fpdfsdk/include/javascript/Icon.h index 0298005f00..0b549ec613 100644 --- a/fpdfsdk/include/javascript/Icon.h +++ b/fpdfsdk/include/javascript/Icon.h @@ -9,32 +9,30 @@ #include "JS_Define.h" -class Icon : public CJS_EmbedObj -{ -public: - Icon(CJS_Object* pJSObject); - virtual ~Icon(); - FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - void SetStream(CPDF_Stream* pIconStream); - CPDF_Stream* GetStream(); - void SetIconName(CFX_WideString name); - CFX_WideString GetIconName(); - -private: - CPDF_Stream* m_pIconStream; - CFX_WideString m_swIconName; +class Icon : public CJS_EmbedObj { + public: + Icon(CJS_Object* pJSObject); + virtual ~Icon(); + FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + void SetStream(CPDF_Stream* pIconStream); + CPDF_Stream* GetStream(); + void SetIconName(CFX_WideString name); + CFX_WideString GetIconName(); + + private: + CPDF_Stream* m_pIconStream; + CFX_WideString m_swIconName; }; -class CJS_Icon : public CJS_Object -{ -public: - CJS_Icon(JSFXObject pObject) : CJS_Object(pObject){}; - virtual ~CJS_Icon(){}; +class CJS_Icon : public CJS_Object { + public: + CJS_Icon(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Icon(){}; -public: - DECLARE_JS_CLASS(CJS_Icon); + public: + DECLARE_JS_CLASS(CJS_Icon); - JS_STATIC_PROP(name, Icon); + JS_STATIC_PROP(name, Icon); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_ICON_H_ diff --git a/fpdfsdk/include/javascript/JS_Context.h b/fpdfsdk/include/javascript/JS_Context.h index 060bb55937..f61f37cdc6 100644 --- a/fpdfsdk/include/javascript/JS_Context.h +++ b/fpdfsdk/include/javascript/JS_Context.h @@ -14,84 +14,138 @@ class CJS_EventHandler; class CJS_Runtime; -class CJS_Context : public IFXJS_Context -{ -public: - CJS_Context(CJS_Runtime* pRuntime); - virtual ~CJS_Context(); - -public: - virtual FX_BOOL Compile(const CFX_WideString& script, CFX_WideString& info); - virtual FX_BOOL RunScript(const CFX_WideString& script, CFX_WideString& info); - -public: - virtual void OnApp_Init(); - - virtual void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName); - virtual void OnDoc_WillPrint(CPDFSDK_Document* pDoc); - virtual void OnDoc_DidPrint(CPDFSDK_Document* pDoc); - virtual void OnDoc_WillSave(CPDFSDK_Document* pDoc); - virtual void OnDoc_DidSave(CPDFSDK_Document* pDoc); - virtual void OnDoc_WillClose(CPDFSDK_Document* pDoc); - - virtual void OnPage_Open(CPDFSDK_Document* pTarget); - virtual void OnPage_Close(CPDFSDK_Document* pTarget); - virtual void OnPage_InView(CPDFSDK_Document* pTarget); - virtual void OnPage_OutView(CPDFSDK_Document* pTarget); - - virtual void OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget); - virtual void OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget); - virtual void OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget); - virtual void OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget); - virtual void OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value); - virtual void OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value); - - virtual void OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc); - virtual void OnField_Format(CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit); - virtual void OnField_Keystroke(CFX_WideString& strChange, const CFX_WideString& strChangeEx, - FX_BOOL bKeyDown, FX_BOOL bModifier, int &nSelEnd,int &nSelStart, FX_BOOL bShift, - CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit, - FX_BOOL bFieldFull, FX_BOOL &bRc); - virtual void OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, - FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc); - - virtual void OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - virtual void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - virtual void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - virtual void OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - virtual void OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - virtual void OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - virtual void OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - virtual void OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - virtual void OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - virtual void OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - - virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark); - virtual void OnLink_MouseUp(CPDFSDK_Document* pTarget); - - virtual void OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString& strTargetName); - virtual void OnBatchExec(CPDFSDK_Document* pTarget); - virtual void OnConsole_Exec(); - virtual void OnExternal_Exec(); - - virtual void EnableMessageBox(FX_BOOL bEnable) {m_bMsgBoxEnable = bEnable;} - FX_BOOL IsMsgBoxEnabled() const {return m_bMsgBoxEnable;} - -public: - CPDFDoc_Environment* GetReaderApp(); - CJS_Runtime* GetJSRuntime(){return m_pRuntime;} - - FX_BOOL DoJob(int nMode, const CFX_WideString& script, CFX_WideString& info); - - CJS_EventHandler* GetEventHandler(){return m_pEventHandler;}; - CPDFSDK_Document* GetReaderDocument(); - -private: - CJS_Runtime* m_pRuntime; - CJS_EventHandler* m_pEventHandler; - - FX_BOOL m_bBusy; - FX_BOOL m_bMsgBoxEnable; +class CJS_Context : public IFXJS_Context { + public: + CJS_Context(CJS_Runtime* pRuntime); + virtual ~CJS_Context(); + + public: + virtual FX_BOOL Compile(const CFX_WideString& script, CFX_WideString& info); + virtual FX_BOOL RunScript(const CFX_WideString& script, CFX_WideString& info); + + public: + virtual void OnApp_Init(); + + virtual void OnDoc_Open(CPDFSDK_Document* pDoc, + const CFX_WideString& strTargetName); + virtual void OnDoc_WillPrint(CPDFSDK_Document* pDoc); + virtual void OnDoc_DidPrint(CPDFSDK_Document* pDoc); + virtual void OnDoc_WillSave(CPDFSDK_Document* pDoc); + virtual void OnDoc_DidSave(CPDFSDK_Document* pDoc); + virtual void OnDoc_WillClose(CPDFSDK_Document* pDoc); + + virtual void OnPage_Open(CPDFSDK_Document* pTarget); + virtual void OnPage_Close(CPDFSDK_Document* pTarget); + virtual void OnPage_InView(CPDFSDK_Document* pTarget); + virtual void OnPage_OutView(CPDFSDK_Document* pTarget); + + virtual void OnField_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + virtual void OnField_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + virtual void OnField_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + virtual void OnField_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + virtual void OnField_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value); + virtual void OnField_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value); + + virtual void OnField_Calculate(CPDF_FormField* pSource, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc); + virtual void OnField_Format(CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit); + virtual void OnField_Keystroke(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + int& nSelEnd, + int& nSelStart, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit, + FX_BOOL bFieldFull, + FX_BOOL& bRc); + virtual void OnField_Validate(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc); + + virtual void OnScreen_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + virtual void OnScreen_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + virtual void OnScreen_Open(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + virtual void OnScreen_Close(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + virtual void OnScreen_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + virtual void OnScreen_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + virtual void OnScreen_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + virtual void OnScreen_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + virtual void OnScreen_InView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + virtual void OnScreen_OutView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + + virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark); + virtual void OnLink_MouseUp(CPDFSDK_Document* pTarget); + + virtual void OnMenu_Exec(CPDFSDK_Document* pTarget, + const CFX_WideString& strTargetName); + virtual void OnBatchExec(CPDFSDK_Document* pTarget); + virtual void OnConsole_Exec(); + virtual void OnExternal_Exec(); + + virtual void EnableMessageBox(FX_BOOL bEnable) { m_bMsgBoxEnable = bEnable; } + FX_BOOL IsMsgBoxEnabled() const { return m_bMsgBoxEnable; } + + public: + CPDFDoc_Environment* GetReaderApp(); + CJS_Runtime* GetJSRuntime() { return m_pRuntime; } + + FX_BOOL DoJob(int nMode, const CFX_WideString& script, CFX_WideString& info); + + CJS_EventHandler* GetEventHandler() { return m_pEventHandler; }; + CPDFSDK_Document* GetReaderDocument(); + + private: + CJS_Runtime* m_pRuntime; + CJS_EventHandler* m_pEventHandler; + + FX_BOOL m_bBusy; + FX_BOOL m_bMsgBoxEnable; }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_CONTEXT_H_ diff --git a/fpdfsdk/include/javascript/JS_Define.h b/fpdfsdk/include/javascript/JS_Define.h index c480ce30c3..7490a2f636 100644 --- a/fpdfsdk/include/javascript/JS_Define.h +++ b/fpdfsdk/include/javascript/JS_Define.h @@ -12,46 +12,68 @@ #include "JS_Object.h" #include "JS_Value.h" -struct JSConstSpec -{ - const wchar_t* pName; - double number; - const wchar_t* string; - uint8_t t; //0:double 1:str +struct JSConstSpec { + const wchar_t* pName; + double number; + const wchar_t* string; + uint8_t t; // 0:double 1:str }; -struct JSPropertySpec -{ - const wchar_t* pName; - v8::AccessorGetterCallback pPropGet; - v8::AccessorSetterCallback pPropPut; +struct JSPropertySpec { + const wchar_t* pName; + v8::AccessorGetterCallback pPropGet; + v8::AccessorSetterCallback pPropPut; }; -struct JSMethodSpec -{ - const wchar_t* pName; - v8::FunctionCallback pMethodCall; +struct JSMethodSpec { + const wchar_t* pName; + v8::FunctionCallback pMethodCall; }; -/* ====================================== PUBLIC DEFINE SPEC ============================================== */ -#define JS_WIDESTRING(widestring) L###widestring - -#define BEGIN_JS_STATIC_CONST(js_class_name) JSConstSpec js_class_name::JS_Class_Consts[] = { -#define JS_STATIC_CONST_ENTRY_NUMBER(const_name, pValue) {JS_WIDESTRING(const_name), pValue, L"", 0}, -#define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue) {JS_WIDESTRING(const_name), 0, JS_WIDESTRING(pValue), 1}, -#define END_JS_STATIC_CONST() {0, 0, 0, 0}}; - -#define BEGIN_JS_STATIC_PROP(js_class_name) JSPropertySpec js_class_name::JS_Class_Properties[] = { -#define JS_STATIC_PROP_ENTRY(prop_name) {JS_WIDESTRING(prop_name), get_##prop_name##_static, set_##prop_name##_static}, -#define END_JS_STATIC_PROP() {0, 0, 0}}; - -#define BEGIN_JS_STATIC_METHOD(js_class_name) JSMethodSpec js_class_name::JS_Class_Methods[] = { -#define JS_STATIC_METHOD_ENTRY(method_name) {JS_WIDESTRING(method_name), method_name##_static}, -#define END_JS_STATIC_METHOD() {0, 0}}; - -/* ======================================== PROP CALLBACK ============================================ */ - -template +/* ====================================== PUBLIC DEFINE SPEC + * ============================================== */ +#define JS_WIDESTRING(widestring) L## #widestring + +#define BEGIN_JS_STATIC_CONST(js_class_name) \ + JSConstSpec js_class_name::JS_Class_Consts[] = { +#define JS_STATIC_CONST_ENTRY_NUMBER(const_name, pValue) \ + { JS_WIDESTRING(const_name), pValue, L"", 0 } \ + , +#define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue) \ + { JS_WIDESTRING(const_name), 0, JS_WIDESTRING(pValue), 1 } \ + , +#define END_JS_STATIC_CONST() \ + { 0, 0, 0, 0 } \ + } \ + ; + +#define BEGIN_JS_STATIC_PROP(js_class_name) \ + JSPropertySpec js_class_name::JS_Class_Properties[] = { +#define JS_STATIC_PROP_ENTRY(prop_name) \ + { \ + JS_WIDESTRING(prop_name), get_##prop_name##_static, set_##prop_name##_static \ + } \ + , +#define END_JS_STATIC_PROP() \ + { 0, 0, 0 } \ + } \ + ; + +#define BEGIN_JS_STATIC_METHOD(js_class_name) \ + JSMethodSpec js_class_name::JS_Class_Methods[] = { +#define JS_STATIC_METHOD_ENTRY(method_name) \ + { JS_WIDESTRING(method_name), method_name##_static } \ + , +#define END_JS_STATIC_METHOD() \ + { 0, 0 } \ + } \ + ; + +/* ======================================== PROP CALLBACK + * ============================================ */ + +template void JSPropGetter(const char* prop_name_string, const char* class_name_string, v8::Local property, @@ -61,17 +83,19 @@ void JSPropGetter(const char* prop_name_string, IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); CJS_PropValue value(isolate); value.StartGetting(); - CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate,info.Holder()); + CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate, info.Holder()); C* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); CFX_WideString sError; if (!(pObj->*M)(pRuntimeContext, value, sError)) { - JS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, sError)); + JS_Error(isolate, + JSFormatErrorString(class_name_string, prop_name_string, sError)); return; } info.GetReturnValue().Set((v8::Local)value); } -template +template void JSPropSetter(const char* prop_name_string, const char* class_name_string, v8::Local property, @@ -82,32 +106,37 @@ void JSPropSetter(const char* prop_name_string, IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); CJS_PropValue propValue(CJS_Value(isolate, value, VT_unknown)); propValue.StartSetting(); - CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate,info.Holder()); + CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate, info.Holder()); C* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); CFX_WideString sError; if (!(pObj->*M)(pRuntimeContext, propValue, sError)) { - JS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, sError)); + JS_Error(isolate, + JSFormatErrorString(class_name_string, prop_name_string, sError)); } } -#define JS_STATIC_PROP(prop_name, class_name) \ - static void get_##prop_name##_static( \ - v8::Local property, \ - const v8::PropertyCallbackInfo& info) { \ - JSPropGetter( \ - #prop_name, #class_name, property, info); \ - } \ - static void set_##prop_name##_static( \ - v8::Local property, \ - v8::Local value, \ - const v8::PropertyCallbackInfo& info) { \ - JSPropSetter( \ - #prop_name, #class_name, property, value, info); \ +#define JS_STATIC_PROP(prop_name, class_name) \ + static void get_##prop_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info) { \ + JSPropGetter(#prop_name, #class_name, \ + property, info); \ + } \ + static void set_##prop_name##_static( \ + v8::Local property, v8::Local value, \ + const v8::PropertyCallbackInfo& info) { \ + JSPropSetter(#prop_name, #class_name, \ + property, value, info); \ } -/* ========================================= METHOD CALLBACK =========================================== */ +/* ========================================= METHOD CALLBACK + * =========================================== */ -template +template void JSMethod(const char* method_name_string, const char* class_name_string, const v8::FunctionCallbackInfo& info) { @@ -115,121 +144,140 @@ void JSMethod(const char* method_name_string, IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); CJS_Parameters parameters; - for (unsigned int i = 0; i<(unsigned int)info.Length(); i++) { + for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { parameters.push_back(CJS_Value(isolate, info[i], VT_unknown)); } CJS_Value valueRes(isolate); - CJS_Object* pJSObj = (CJS_Object *)JS_GetPrivate(isolate,info.Holder()); + CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate, info.Holder()); C* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); CFX_WideString sError; if (!(pObj->*M)(pRuntimeContext, parameters, valueRes, sError)) { - JS_Error(isolate, JSFormatErrorString(class_name_string, method_name_string, sError)); + JS_Error(isolate, JSFormatErrorString(class_name_string, method_name_string, + sError)); return; } info.GetReturnValue().Set(valueRes.ToV8Value()); } -#define JS_STATIC_METHOD(method_name, class_name) \ - static void method_name##_static( \ - const v8::FunctionCallbackInfo& info) { \ - JSMethod( \ - #method_name, #class_name, info); \ +#define JS_STATIC_METHOD(method_name, class_name) \ + static void method_name##_static( \ + const v8::FunctionCallbackInfo& info) { \ + JSMethod(#method_name, #class_name, \ + info); \ } #define JS_SPECIAL_STATIC_METHOD(method_name, class_alternate, class_name) \ - static void method_name##_static( \ - const v8::FunctionCallbackInfo& info) { \ - JSMethod( \ - #method_name, #class_name, info); \ + static void method_name##_static( \ + const v8::FunctionCallbackInfo& info) { \ + JSMethod( \ + #method_name, #class_name, info); \ } -/* ===================================== JS CLASS =============================================== */ - -#define DECLARE_JS_CLASS(js_class_name) \ - static void JSConstructor(IFXJS_Context* cc, JSFXObject obj,JSFXObject global);\ - static void JSDestructor(JSFXObject obj);\ - static int Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType);\ - static JSConstSpec JS_Class_Consts[];\ - static JSPropertySpec JS_Class_Properties[];\ - static JSMethodSpec JS_Class_Methods[];\ - static const wchar_t* m_pClassName - -#define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \ -const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name);\ -void js_class_name::JSConstructor(IFXJS_Context* cc, JSFXObject obj, JSFXObject global)\ -{\ - CJS_Object* pObj = FX_NEW js_class_name(obj);\ - pObj->SetEmbedObject(FX_NEW class_alternate(pObj));\ - JS_SetPrivate(NULL,obj,(void*)pObj); \ - pObj->InitInstance(cc);\ -}\ -\ -void js_class_name::JSDestructor(JSFXObject obj) \ -{\ - js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL,obj);\ - ASSERT(pObj != NULL);\ - pObj->ExitInstance();\ - delete pObj;\ -}\ -\ -int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType)\ -{\ - int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, eObjType, JSConstructor, JSDestructor);\ - if (nObjDefnID >= 0)\ - {\ - for (int j=0, szj=sizeof(JS_Class_Properties)/sizeof(JSPropertySpec)-1; jSetEmbedObject(FX_NEW class_alternate(pObj)); \ + JS_SetPrivate(NULL, obj, (void*)pObj); \ + pObj->InitInstance(cc); \ + } \ + \ + void js_class_name::JSDestructor(JSFXObject obj) { \ + js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL, obj); \ + ASSERT(pObj != NULL); \ + pObj->ExitInstance(); \ + delete pObj; \ + } \ + \ + int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType) { \ + int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, \ + eObjType, JSConstructor, JSDestructor); \ + if (nObjDefnID >= 0) { \ + for (int j = 0, \ + szj = sizeof(JS_Class_Properties) / sizeof(JSPropertySpec) - 1; \ + j < szj; j++) { \ + if (JS_DefineObjProperty(pRuntime, nObjDefnID, \ + JS_Class_Properties[j].pName, \ + JS_Class_Properties[j].pPropGet, \ + JS_Class_Properties[j].pPropPut) < 0) \ + return -1; \ + } \ + for (int k = 0, \ + szk = sizeof(JS_Class_Methods) / sizeof(JSMethodSpec) - 1; \ + k < szk; k++) { \ + if (JS_DefineObjMethod(pRuntime, nObjDefnID, \ + JS_Class_Methods[k].pName, \ + JS_Class_Methods[k].pMethodCall) < 0) \ + return -1; \ + } \ + return nObjDefnID; \ + } \ + return -1; \ + } -#define IMPLEMENT_JS_CLASS(js_class_name, class_name) IMPLEMENT_JS_CLASS_RICH(js_class_name, class_name, class_name) - -/* ======================================== CONST CLASS ============================================ */ - -#define DECLARE_JS_CLASS_CONST() \ - static int Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType);\ - static JSConstSpec JS_Class_Consts[];\ - static const wchar_t* m_pClassName - -#define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name) \ -const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name);\ -int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType)\ -{\ - int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, eObjType, NULL, NULL);\ - if (nObjDefnID >=0)\ - {\ - for (int i=0, sz=sizeof(JS_Class_Consts)/sizeof(JSConstSpec)-1; i= 0) { \ + for (int i = 0, sz = sizeof(JS_Class_Consts) / sizeof(JSConstSpec) - 1; \ + i < sz; i++) { \ + if (JS_Class_Consts[i].t == 0) { \ + if (JS_DefineObjConst( \ + pRuntime, nObjDefnID, JS_Class_Consts[i].pName, \ + JS_NewNumber(pRuntime, JS_Class_Consts[i].number)) < 0) \ + return -1; \ + } else { \ + if (JS_DefineObjConst( \ + pRuntime, nObjDefnID, JS_Class_Consts[i].pName, \ + JS_NewString(pRuntime, JS_Class_Consts[i].string)) < 0) \ + return -1; \ + } \ + } \ + return nObjDefnID; \ + } \ + return -1; \ + } -/* ===================================== SPECIAL JS CLASS =============================================== */ +/* ===================================== SPECIAL JS CLASS + * =============================================== */ template -void JSSpecialPropQuery(const char *, v8::Local property,const v8::PropertyCallbackInfo& info) { +void JSSpecialPropQuery(const char*, + v8::Local property, + const v8::PropertyCallbackInfo& info) { v8::Isolate* isolate = info.GetIsolate(); v8::String::Utf8Value utf8_value(property); - CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); - CJS_Object* pJSObj = reinterpret_cast(JS_GetPrivate(isolate, info.Holder())); + CFX_WideString propname = + CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); + CJS_Object* pJSObj = + reinterpret_cast(JS_GetPrivate(isolate, info.Holder())); Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); FX_BOOL bRet = pObj->QueryProperty(propname.c_str()); info.GetReturnValue().Set(bRet ? 4 : 0); @@ -243,16 +291,18 @@ void JSSpecialPropGet(const char* class_name, v8::Local context = isolate->GetCurrentContext(); IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); - CJS_Object* pJSObj = reinterpret_cast(JS_GetPrivate(isolate, info.Holder())); + CJS_Object* pJSObj = + reinterpret_cast(JS_GetPrivate(isolate, info.Holder())); Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); v8::String::Utf8Value utf8_value(property); - CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); + CFX_WideString propname = + CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); CFX_WideString sError; CJS_PropValue value(isolate); value.StartGetting(); if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), value, sError)) { - JS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError)); - return; + JS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError)); + return; } info.GetReturnValue().Set((v8::Local)value); } @@ -266,15 +316,17 @@ void JSSpecialPropPut(const char* class_name, v8::Local context = isolate->GetCurrentContext(); IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); - CJS_Object* pJSObj = reinterpret_cast(JS_GetPrivate(isolate, info.Holder())); + CJS_Object* pJSObj = + reinterpret_cast(JS_GetPrivate(isolate, info.Holder())); Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); v8::String::Utf8Value utf8_value(property); - CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); + CFX_WideString propname = + CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); CFX_WideString sError; - CJS_PropValue PropValue(CJS_Value(isolate,value,VT_unknown)); + CJS_PropValue PropValue(CJS_Value(isolate, value, VT_unknown)); PropValue.StartSetting(); if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), PropValue, sError)) { - JS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError)); + JS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError)); } } @@ -286,10 +338,12 @@ void JSSpecialPropDel(const char* class_name, v8::Local context = isolate->GetCurrentContext(); IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); - CJS_Object* pJSObj = reinterpret_cast(JS_GetPrivate(isolate, info.Holder())); + CJS_Object* pJSObj = + reinterpret_cast(JS_GetPrivate(isolate, info.Holder())); Alt* pObj = reinterpret_cast(pJSObj->GetEmbedObject()); v8::String::Utf8Value utf8_value(property); - CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); + CFX_WideString propname = + CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); CFX_WideString sError; if (!pObj->DelProperty(pRuntimeContext, propname.c_str(), sError)) { CFX_ByteString cbName; @@ -298,83 +352,114 @@ void JSSpecialPropDel(const char* class_name, } } -#define DECLARE_SPECIAL_JS_CLASS(js_class_name) \ - static void JSConstructor(IFXJS_Context* cc, JSFXObject obj, JSFXObject global);\ - static void JSDestructor(JSFXObject obj);\ - static JSConstSpec JS_Class_Consts[];\ - static JSPropertySpec JS_Class_Properties[];\ - static JSMethodSpec JS_Class_Methods[];\ - static int Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType);\ - static const wchar_t* m_pClassName;\ - static void queryprop_##js_class_name##_static(v8::Local property,const v8::PropertyCallbackInfo& info);\ - static void getprop_##js_class_name##_static(v8::Local property, const v8::PropertyCallbackInfo& info);\ - static void putprop_##js_class_name##_static(v8::Local property,v8::Local value,const v8::PropertyCallbackInfo& info);\ - static void delprop_##js_class_name##_static(v8::Local property,const v8::PropertyCallbackInfo& info) +#define DECLARE_SPECIAL_JS_CLASS(js_class_name) \ + static void JSConstructor(IFXJS_Context* cc, JSFXObject obj, \ + JSFXObject global); \ + static void JSDestructor(JSFXObject obj); \ + static JSConstSpec JS_Class_Consts[]; \ + static JSPropertySpec JS_Class_Properties[]; \ + static JSMethodSpec JS_Class_Methods[]; \ + static int Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType); \ + static const wchar_t* m_pClassName; \ + static void queryprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info); \ + static void getprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info); \ + static void putprop_##js_class_name##_static( \ + v8::Local property, v8::Local value, \ + const v8::PropertyCallbackInfo& info); \ + static void delprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info) #define IMPLEMENT_SPECIAL_JS_CLASS(js_class_name, class_alternate, class_name) \ -const wchar_t * js_class_name::m_pClassName = JS_WIDESTRING(class_name);\ -void js_class_name::queryprop_##js_class_name##_static(v8::Local property,const v8::PropertyCallbackInfo& info) { \ - JSSpecialPropQuery(#class_name, property, info); \ -}\ -void js_class_name::getprop_##js_class_name##_static(v8::Local property, const v8::PropertyCallbackInfo& info) { \ - JSSpecialPropGet(#class_name, property, info); \ -} \ -void js_class_name::putprop_##js_class_name##_static(v8::Local property,v8::Local value,const v8::PropertyCallbackInfo& info) {\ - JSSpecialPropPut(#class_name, property, value, info); \ -}\ -void js_class_name::delprop_##js_class_name##_static(v8::Local property,const v8::PropertyCallbackInfo& info) { \ - JSSpecialPropDel(#class_name, property, info); \ -} \ -void js_class_name::JSConstructor(IFXJS_Context* cc, JSFXObject obj,JSFXObject global)\ -{\ - CJS_Object* pObj = FX_NEW js_class_name(obj);\ - pObj->SetEmbedObject(FX_NEW class_alternate(pObj));\ - JS_SetPrivate(NULL,obj, (void*)pObj); \ - pObj->InitInstance(cc);\ -}\ -\ -void js_class_name::JSDestructor(JSFXObject obj) \ -{\ - js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL,obj);\ - ASSERT(pObj != NULL);\ - pObj->ExitInstance();\ - delete pObj;\ -}\ -\ -int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType)\ -{\ -\ - int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, eObjType, JSConstructor, JSDestructor);\ -\ - if (nObjDefnID >= 0)\ - {\ - for (int j=0, szj=sizeof(JS_Class_Properties)/sizeof(JSPropertySpec)-1; j property, \ + const v8::PropertyCallbackInfo& info) { \ + JSSpecialPropQuery(#class_name, property, info); \ + } \ + void js_class_name::getprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info) { \ + JSSpecialPropGet(#class_name, property, info); \ + } \ + void js_class_name::putprop_##js_class_name##_static( \ + v8::Local property, v8::Local value, \ + const v8::PropertyCallbackInfo& info) { \ + JSSpecialPropPut(#class_name, property, value, info); \ + } \ + void js_class_name::delprop_##js_class_name##_static( \ + v8::Local property, \ + const v8::PropertyCallbackInfo& info) { \ + JSSpecialPropDel(#class_name, property, info); \ + } \ + void js_class_name::JSConstructor(IFXJS_Context* cc, JSFXObject obj, \ + JSFXObject global) { \ + CJS_Object* pObj = FX_NEW js_class_name(obj); \ + pObj->SetEmbedObject(FX_NEW class_alternate(pObj)); \ + JS_SetPrivate(NULL, obj, (void*)pObj); \ + pObj->InitInstance(cc); \ + } \ + \ + void js_class_name::JSDestructor(JSFXObject obj) { \ + js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL, obj); \ + ASSERT(pObj != NULL); \ + pObj->ExitInstance(); \ + delete pObj; \ + } \ + \ + int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType) { \ + int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, \ + eObjType, JSConstructor, JSDestructor); \ + \ + if (nObjDefnID >= 0) { \ + for (int j = 0, \ + szj = sizeof(JS_Class_Properties) / sizeof(JSPropertySpec) - 1; \ + j < szj; j++) { \ + if (JS_DefineObjProperty(pRuntime, nObjDefnID, \ + JS_Class_Properties[j].pName, \ + JS_Class_Properties[j].pPropGet, \ + JS_Class_Properties[j].pPropPut) < 0) \ + return -1; \ + } \ + \ + for (int k = 0, \ + szk = sizeof(JS_Class_Methods) / sizeof(JSMethodSpec) - 1; \ + k < szk; k++) { \ + if (JS_DefineObjMethod(pRuntime, nObjDefnID, \ + JS_Class_Methods[k].pName, \ + JS_Class_Methods[k].pMethodCall) < 0) \ + return -1; \ + } \ + if (JS_DefineObjAllProperties( \ + pRuntime, nObjDefnID, \ + js_class_name::queryprop_##js_class_name##_static, \ + js_class_name::getprop_##js_class_name##_static, \ + js_class_name::putprop_##js_class_name##_static, \ + js_class_name::delprop_##js_class_name##_static) < 0) \ + return -1; \ + \ + return nObjDefnID; \ + } \ + \ + return -1; \ + } -/* ======================================== GLOBAL METHODS ============================================ */ +/* ======================================== GLOBAL METHODS + * ============================================ */ -template -void JSGlobalFunc(const char *func_name_string, +template +void JSGlobalFunc(const char* func_name_string, const v8::FunctionCallbackInfo& info) { v8::Isolate* isolate = info.GetIsolate(); IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)isolate->GetData(2); IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); CJS_Parameters parameters; - for (unsigned int i = 0; i<(unsigned int)info.Length(); i++) { + for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { parameters.push_back(CJS_Value(isolate, info[i], VT_unknown)); } CJS_Value valueRes(isolate); @@ -386,63 +471,71 @@ void JSGlobalFunc(const char *func_name_string, info.GetReturnValue().Set(valueRes.ToV8Value()); } -#define JS_STATIC_GLOBAL_FUN(fun_name) \ - static void fun_name##_static(const v8::FunctionCallbackInfo& info) { \ - JSGlobalFunc(#fun_name, info); \ +#define JS_STATIC_GLOBAL_FUN(fun_name) \ + static void fun_name##_static( \ + const v8::FunctionCallbackInfo& info) { \ + JSGlobalFunc(#fun_name, info); \ } -#define JS_STATIC_DECLARE_GLOBAL_FUN() \ -static JSMethodSpec global_methods[]; \ -static int Init(IJS_Runtime* pRuntime) +#define JS_STATIC_DECLARE_GLOBAL_FUN() \ + static JSMethodSpec global_methods[]; \ + static int Init(IJS_Runtime* pRuntime) #define BEGIN_JS_STATIC_GLOBAL_FUN(js_class_name) \ -JSMethodSpec js_class_name::global_methods[] = { - -#define JS_STATIC_GLOBAL_FUN_ENTRY(method_name) JS_STATIC_METHOD_ENTRY(method_name) + JSMethodSpec js_class_name::global_methods[] = { +#define JS_STATIC_GLOBAL_FUN_ENTRY(method_name) \ + JS_STATIC_METHOD_ENTRY(method_name) #define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD() -#define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ -int js_class_name::Init(IJS_Runtime* pRuntime)\ -{\ - for (int i=0, sz=sizeof(js_class_name::global_methods)/sizeof(JSMethodSpec)-1; i p); diff --git a/fpdfsdk/include/javascript/JS_EventHandler.h b/fpdfsdk/include/javascript/JS_EventHandler.h index 62afb829e7..5e4982c1df 100644 --- a/fpdfsdk/include/javascript/JS_EventHandler.h +++ b/fpdfsdk/include/javascript/JS_EventHandler.h @@ -17,157 +17,204 @@ class CPDF_Bookmark; class CPDF_FormField; class Field; -enum JS_EVENT_T -{ - JET_UNKNOWN, - JET_APP_INIT, - JET_DOC_OPEN, - JET_DOC_WILLPRINT, - JET_DOC_DIDPRINT, - JET_DOC_WILLSAVE, - JET_DOC_DIDSAVE, - JET_DOC_WILLCLOSE, - JET_PAGE_OPEN, - JET_PAGE_CLOSE, - JET_PAGE_INVIEW, - JET_PAGE_OUTVIEW, - JET_FIELD_MOUSEDOWN, - JET_FIELD_MOUSEUP, - JET_FIELD_MOUSEENTER, - JET_FIELD_MOUSEEXIT, - JET_FIELD_FOCUS, - JET_FIELD_BLUR, - JET_FIELD_KEYSTROKE, - JET_FIELD_VALIDATE, - JET_FIELD_CALCULATE, - JET_FIELD_FORMAT, - JET_SCREEN_FOCUS, - JET_SCREEN_BLUR, - JET_SCREEN_OPEN, - JET_SCREEN_CLOSE, - JET_SCREEN_MOUSEDOWN, - JET_SCREEN_MOUSEUP, - JET_SCREEN_MOUSEENTER, - JET_SCREEN_MOUSEEXIT, - JET_SCREEN_INVIEW, - JET_SCREEN_OUTVIEW, - JET_BATCH_EXEC, - JET_MENU_EXEC, - JET_CONSOLE_EXEC, - JET_EXTERNAL_EXEC, - JET_BOOKMARK_MOUSEUP, - JET_LINK_MOUSEUP +enum JS_EVENT_T { + JET_UNKNOWN, + JET_APP_INIT, + JET_DOC_OPEN, + JET_DOC_WILLPRINT, + JET_DOC_DIDPRINT, + JET_DOC_WILLSAVE, + JET_DOC_DIDSAVE, + JET_DOC_WILLCLOSE, + JET_PAGE_OPEN, + JET_PAGE_CLOSE, + JET_PAGE_INVIEW, + JET_PAGE_OUTVIEW, + JET_FIELD_MOUSEDOWN, + JET_FIELD_MOUSEUP, + JET_FIELD_MOUSEENTER, + JET_FIELD_MOUSEEXIT, + JET_FIELD_FOCUS, + JET_FIELD_BLUR, + JET_FIELD_KEYSTROKE, + JET_FIELD_VALIDATE, + JET_FIELD_CALCULATE, + JET_FIELD_FORMAT, + JET_SCREEN_FOCUS, + JET_SCREEN_BLUR, + JET_SCREEN_OPEN, + JET_SCREEN_CLOSE, + JET_SCREEN_MOUSEDOWN, + JET_SCREEN_MOUSEUP, + JET_SCREEN_MOUSEENTER, + JET_SCREEN_MOUSEEXIT, + JET_SCREEN_INVIEW, + JET_SCREEN_OUTVIEW, + JET_BATCH_EXEC, + JET_MENU_EXEC, + JET_CONSOLE_EXEC, + JET_EXTERNAL_EXEC, + JET_BOOKMARK_MOUSEUP, + JET_LINK_MOUSEUP }; -class CJS_EventHandler -{ -public: - CJS_EventHandler(CJS_Context * pContext); - virtual ~CJS_EventHandler(); - - void OnApp_Init(); - - void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName); - void OnDoc_WillPrint(CPDFSDK_Document* pDoc); - void OnDoc_DidPrint(CPDFSDK_Document* pDoc); - void OnDoc_WillSave(CPDFSDK_Document* pDoc); - void OnDoc_DidSave(CPDFSDK_Document* pDoc); - void OnDoc_WillClose(CPDFSDK_Document* pDoc); - - void OnPage_Open(CPDFSDK_Document* pDoc); - void OnPage_Close(CPDFSDK_Document* pDoc); - void OnPage_InView(CPDFSDK_Document* pTarget); - void OnPage_OutView(CPDFSDK_Document* pTarget); - - void OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc); - void OnField_Format(CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit); - void OnField_Keystroke(CFX_WideString& strChange, const CFX_WideString& strChangeEx, - FX_BOOL KeyDown, FX_BOOL bModifier, int &nSelEnd,int &nSelStart, FX_BOOL bShift, - CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit, - FX_BOOL bFieldFull, FX_BOOL &bRc); - void OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, - FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc); - - void OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget); - void OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget); - void OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget); - void OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget); - void OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value); - void OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value); - - void OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - void OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); - - void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark); - void OnLink_MouseUp(CPDFSDK_Document* pTarget); - - void OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString& strTargetName); - void OnBatchExec(CPDFSDK_Document *pTarget); - void OnConsole_Exec(); - void OnExternal_Exec(); - -public: - void Initial(JS_EVENT_T type); - void Destroy(); - FX_BOOL IsValid(); - - - CFX_WideString& Change(); - CFX_WideString ChangeEx(); - int CommitKey(); - FX_BOOL FieldFull(); - FX_BOOL KeyDown(); - FX_BOOL Modifier(); - const FX_WCHAR* Name(); - const FX_WCHAR* Type(); - FX_BOOL& Rc(); - int& SelEnd(); - int& SelStart(); - FX_BOOL Shift(); - Field* Source(); - Field* Target_Field(); - CFX_WideString& Value(); - FX_BOOL WillCommit(); - CFX_WideString TargetName(); - - JS_EVENT_T EventType() {return m_eEventType;}; - -public: - CJS_Context* m_pJSContext; - JS_EVENT_T m_eEventType; - FX_BOOL m_bValid; - - CFX_WideString m_strTargetName; - CFX_WideString m_strSourceName; - CFX_WideString* m_pWideStrChange; - CFX_WideString m_WideStrChangeDu; - CFX_WideString m_WideStrChangeEx; - int m_nCommitKey; - FX_BOOL m_bKeyDown; - FX_BOOL m_bModifier; - FX_BOOL m_bShift; - int* m_pISelEnd; - int m_nSelEndDu; - int* m_pISelStart; - int m_nSelStartDu; - FX_BOOL m_bWillCommit; - CFX_WideString* m_pValue; - FX_BOOL m_bFieldFull; - FX_BOOL* m_pbRc; - FX_BOOL m_bRcDu; - - CPDFSDK_Document* m_pSourceDoc; - CPDF_Bookmark* m_pTargetBookMark; - CPDFSDK_Document* m_pTargetDoc; - CPDFSDK_Annot* m_pTargetAnnot; +class CJS_EventHandler { + public: + CJS_EventHandler(CJS_Context* pContext); + virtual ~CJS_EventHandler(); + + void OnApp_Init(); + + void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName); + void OnDoc_WillPrint(CPDFSDK_Document* pDoc); + void OnDoc_DidPrint(CPDFSDK_Document* pDoc); + void OnDoc_WillSave(CPDFSDK_Document* pDoc); + void OnDoc_DidSave(CPDFSDK_Document* pDoc); + void OnDoc_WillClose(CPDFSDK_Document* pDoc); + + void OnPage_Open(CPDFSDK_Document* pDoc); + void OnPage_Close(CPDFSDK_Document* pDoc); + void OnPage_InView(CPDFSDK_Document* pTarget); + void OnPage_OutView(CPDFSDK_Document* pTarget); + + void OnField_Calculate(CPDF_FormField* pSource, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc); + void OnField_Format(CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit); + void OnField_Keystroke(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL KeyDown, + FX_BOOL bModifier, + int& nSelEnd, + int& nSelStart, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit, + FX_BOOL bFieldFull, + FX_BOOL& bRc); + void OnField_Validate(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc); + + void OnField_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + void OnField_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + void OnField_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + void OnField_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget); + void OnField_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value); + void OnField_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value); + + void OnScreen_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); + void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen); + void OnScreen_Close(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_InView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + void OnScreen_OutView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen); + + void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark); + void OnLink_MouseUp(CPDFSDK_Document* pTarget); + + void OnMenu_Exec(CPDFSDK_Document* pTarget, + const CFX_WideString& strTargetName); + void OnBatchExec(CPDFSDK_Document* pTarget); + void OnConsole_Exec(); + void OnExternal_Exec(); + + public: + void Initial(JS_EVENT_T type); + void Destroy(); + FX_BOOL IsValid(); + + CFX_WideString& Change(); + CFX_WideString ChangeEx(); + int CommitKey(); + FX_BOOL FieldFull(); + FX_BOOL KeyDown(); + FX_BOOL Modifier(); + const FX_WCHAR* Name(); + const FX_WCHAR* Type(); + FX_BOOL& Rc(); + int& SelEnd(); + int& SelStart(); + FX_BOOL Shift(); + Field* Source(); + Field* Target_Field(); + CFX_WideString& Value(); + FX_BOOL WillCommit(); + CFX_WideString TargetName(); + + JS_EVENT_T EventType() { return m_eEventType; }; + + public: + CJS_Context* m_pJSContext; + JS_EVENT_T m_eEventType; + FX_BOOL m_bValid; + + CFX_WideString m_strTargetName; + CFX_WideString m_strSourceName; + CFX_WideString* m_pWideStrChange; + CFX_WideString m_WideStrChangeDu; + CFX_WideString m_WideStrChangeEx; + int m_nCommitKey; + FX_BOOL m_bKeyDown; + FX_BOOL m_bModifier; + FX_BOOL m_bShift; + int* m_pISelEnd; + int m_nSelEndDu; + int* m_pISelStart; + int m_nSelStartDu; + FX_BOOL m_bWillCommit; + CFX_WideString* m_pValue; + FX_BOOL m_bFieldFull; + FX_BOOL* m_pbRc; + FX_BOOL m_bRcDu; + + CPDFSDK_Document* m_pSourceDoc; + CPDF_Bookmark* m_pTargetBookMark; + CPDFSDK_Document* m_pTargetDoc; + CPDFSDK_Annot* m_pTargetAnnot; }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_EVENTHANDLER_H_ diff --git a/fpdfsdk/include/javascript/JS_GlobalData.h b/fpdfsdk/include/javascript/JS_GlobalData.h index bbc0b12173..46b94a4dda 100644 --- a/fpdfsdk/include/javascript/JS_GlobalData.h +++ b/fpdfsdk/include/javascript/JS_GlobalData.h @@ -9,90 +9,95 @@ #include "../../../core/include/fxcrt/fx_basic.h" -#define JS_GLOBALDATA_TYPE_NUMBER 0 -#define JS_GLOBALDATA_TYPE_BOOLEAN 1 -#define JS_GLOBALDATA_TYPE_STRING 2 -#define JS_GLOBALDATA_TYPE_OBJECT 3 -#define JS_GLOBALDATA_TYPE_NULL 4 +#define JS_GLOBALDATA_TYPE_NUMBER 0 +#define JS_GLOBALDATA_TYPE_BOOLEAN 1 +#define JS_GLOBALDATA_TYPE_STRING 2 +#define JS_GLOBALDATA_TYPE_OBJECT 3 +#define JS_GLOBALDATA_TYPE_NULL 4 class CJS_KeyValue; class CPDFDoc_Environment; -class CJS_GlobalVariableArray -{ -public: - CJS_GlobalVariableArray(); - virtual ~CJS_GlobalVariableArray(); +class CJS_GlobalVariableArray { + public: + CJS_GlobalVariableArray(); + virtual ~CJS_GlobalVariableArray(); - void Add(CJS_KeyValue* p); - int Count() const; - CJS_KeyValue* GetAt(int index) const; - void Copy(const CJS_GlobalVariableArray& array); + void Add(CJS_KeyValue* p); + int Count() const; + CJS_KeyValue* GetAt(int index) const; + void Copy(const CJS_GlobalVariableArray& array); - void Empty(); + void Empty(); -private: - CFX_ArrayTemplate array; + private: + CFX_ArrayTemplate array; }; -class CJS_KeyValue -{ -public: - CJS_KeyValue(){} - virtual ~CJS_KeyValue(){} - - CFX_ByteString sKey; - int nType; //0:int 1:bool 2:string 3:obj - double dData; - bool bData; - CFX_ByteString sData; - CJS_GlobalVariableArray objData; +class CJS_KeyValue { + public: + CJS_KeyValue() {} + virtual ~CJS_KeyValue() {} + + CFX_ByteString sKey; + int nType; // 0:int 1:bool 2:string 3:obj + double dData; + bool bData; + CFX_ByteString sData; + CJS_GlobalVariableArray objData; }; -class CJS_GlobalData_Element -{ -public: - CJS_GlobalData_Element(){} - virtual ~CJS_GlobalData_Element(){} +class CJS_GlobalData_Element { + public: + CJS_GlobalData_Element() {} + virtual ~CJS_GlobalData_Element() {} - CJS_KeyValue data; - FX_BOOL bPersistent; + CJS_KeyValue data; + FX_BOOL bPersistent; }; -class CJS_GlobalData -{ -public: - CJS_GlobalData(CPDFDoc_Environment* pApp); - virtual ~CJS_GlobalData(); - -public: - void SetGlobalVariableNumber(const FX_CHAR* propname, double dData); - void SetGlobalVariableBoolean(const FX_CHAR* propname, bool bData); - void SetGlobalVariableString(const FX_CHAR* propname, const CFX_ByteString& sData); - void SetGlobalVariableObject(const FX_CHAR* propname, const CJS_GlobalVariableArray& array); - void SetGlobalVariableNull(const FX_CHAR* propname); - - FX_BOOL SetGlobalVariablePersistent(const FX_CHAR* propname, FX_BOOL bPersistent); - FX_BOOL DeleteGlobalVariable(const FX_CHAR* propname); - - int32_t GetSize() const; - CJS_GlobalData_Element* GetAt(int index) const; - -private: - void LoadGlobalPersistentVariables(); - void SaveGlobalPersisitentVariables(); - - CJS_GlobalData_Element* GetGlobalVariable(const FX_CHAR* propname); - int FindGlobalVariable(const FX_CHAR* propname); - - void LoadFileBuffer(const FX_WCHAR* sFilePath, uint8_t*& pBuffer, int32_t& nLength); - void WriteFileBuffer(const FX_WCHAR* sFilePath, const FX_CHAR* pBuffer, int32_t nLength); - void MakeByteString(const CFX_ByteString& name, CJS_KeyValue* pData, CFX_BinaryBuf& sData); - -private: - CFX_ArrayTemplate m_arrayGlobalData; - CFX_WideString m_sFilePath; - CPDFDoc_Environment* m_pApp; +class CJS_GlobalData { + public: + CJS_GlobalData(CPDFDoc_Environment* pApp); + virtual ~CJS_GlobalData(); + + public: + void SetGlobalVariableNumber(const FX_CHAR* propname, double dData); + void SetGlobalVariableBoolean(const FX_CHAR* propname, bool bData); + void SetGlobalVariableString(const FX_CHAR* propname, + const CFX_ByteString& sData); + void SetGlobalVariableObject(const FX_CHAR* propname, + const CJS_GlobalVariableArray& array); + void SetGlobalVariableNull(const FX_CHAR* propname); + + FX_BOOL SetGlobalVariablePersistent(const FX_CHAR* propname, + FX_BOOL bPersistent); + FX_BOOL DeleteGlobalVariable(const FX_CHAR* propname); + + int32_t GetSize() const; + CJS_GlobalData_Element* GetAt(int index) const; + + private: + void LoadGlobalPersistentVariables(); + void SaveGlobalPersisitentVariables(); + + CJS_GlobalData_Element* GetGlobalVariable(const FX_CHAR* propname); + int FindGlobalVariable(const FX_CHAR* propname); + + void LoadFileBuffer(const FX_WCHAR* sFilePath, + uint8_t*& pBuffer, + int32_t& nLength); + void WriteFileBuffer(const FX_WCHAR* sFilePath, + const FX_CHAR* pBuffer, + int32_t nLength); + void MakeByteString(const CFX_ByteString& name, + CJS_KeyValue* pData, + CFX_BinaryBuf& sData); + + private: + CFX_ArrayTemplate m_arrayGlobalData; + CFX_WideString m_sFilePath; + CPDFDoc_Environment* m_pApp; }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_GLOBALDATA_H_ diff --git a/fpdfsdk/include/javascript/JS_Object.h b/fpdfsdk/include/javascript/JS_Object.h index abfc818079..fe8a91f471 100644 --- a/fpdfsdk/include/javascript/JS_Object.h +++ b/fpdfsdk/include/javascript/JS_Object.h @@ -7,8 +7,8 @@ #ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_ #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_ -#include "../fsdk_define.h" // For FX_UINT -#include "../fsdk_mgr.h" // For CPDFDoc_Environment +#include "../fsdk_define.h" // For FX_UINT +#include "../fsdk_mgr.h" // For CPDFDoc_Environment #include "../fx_systemhandler.h" // For IFX_SystemHandler #include "../jsapi/fxjs_v8.h" @@ -17,284 +17,233 @@ class CJS_Object; class CJS_Timer; class CJS_Context; -class CJS_EmbedObj -{ -public: - CJS_EmbedObj(CJS_Object* pJSObject); - virtual ~CJS_EmbedObj(); +class CJS_EmbedObj { + public: + CJS_EmbedObj(CJS_Object* pJSObject); + virtual ~CJS_EmbedObj(); - virtual void TimerProc(CJS_Timer* pTimer){}; + virtual void TimerProc(CJS_Timer* pTimer){}; - CJS_Timer* BeginTimer(CPDFDoc_Environment * pApp, FX_UINT nElapse); - void EndTimer(CJS_Timer* pTimer); + CJS_Timer* BeginTimer(CPDFDoc_Environment* pApp, FX_UINT nElapse); + void EndTimer(CJS_Timer* pTimer); - CJS_Object* GetJSObject(){return m_pJSObject;}; - operator CJS_Object* (){return m_pJSObject;}; + CJS_Object* GetJSObject() { return m_pJSObject; }; + operator CJS_Object*() { return m_pJSObject; }; - CPDFSDK_PageView * JSGetPageView(IFXJS_Context* cc); - int MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, const FX_WCHAR* swMsg, const FX_WCHAR* swTitle = NULL, FX_UINT nType = 0, FX_UINT nIcon = 0); - void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg); + CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc); + int MsgBox(CPDFDoc_Environment* pApp, + CPDFSDK_PageView* pPageView, + const FX_WCHAR* swMsg, + const FX_WCHAR* swTitle = NULL, + FX_UINT nType = 0, + FX_UINT nIcon = 0); + void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg); -protected: - CJS_Object* m_pJSObject; + protected: + CJS_Object* m_pJSObject; }; -class CJS_Object -{ -public: - CJS_Object(JSFXObject pObject); - virtual ~CJS_Object(void); +class CJS_Object { + public: + CJS_Object(JSFXObject pObject); + virtual ~CJS_Object(void); - void MakeWeak(); - void Dispose(); + void MakeWeak(); + void Dispose(); - virtual FX_BOOL IsType(const FX_CHAR* sClassName){return TRUE;}; - virtual CFX_ByteString GetClassName(){return "";}; + virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; }; + virtual CFX_ByteString GetClassName() { return ""; }; - virtual FX_BOOL InitInstance(IFXJS_Context* cc){return TRUE;}; - virtual FX_BOOL ExitInstance(){return TRUE;}; + virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; }; + virtual FX_BOOL ExitInstance() { return TRUE; }; - operator JSFXObject () {return v8::Local::New(m_pIsolate, m_pObject);} - operator CJS_EmbedObj* (){return m_pEmbedObj;}; + operator JSFXObject() { + return v8::Local::New(m_pIsolate, m_pObject); + } + operator CJS_EmbedObj*() { return m_pEmbedObj; }; - void SetEmbedObject(CJS_EmbedObj* pObj){m_pEmbedObj = pObj;}; - CJS_EmbedObj * GetEmbedObject(){return m_pEmbedObj;}; + void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj = pObj; }; + CJS_EmbedObj* GetEmbedObject() { return m_pEmbedObj; }; - static CPDFSDK_PageView * JSGetPageView(IFXJS_Context* cc); - static int MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, const FX_WCHAR* swMsg, const FX_WCHAR* swTitle = NULL, FX_UINT nType = 0,FX_UINT nIcon = 0); - static void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg); + static CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc); + static int MsgBox(CPDFDoc_Environment* pApp, + CPDFSDK_PageView* pPageView, + const FX_WCHAR* swMsg, + const FX_WCHAR* swTitle = NULL, + FX_UINT nType = 0, + FX_UINT nIcon = 0); + static void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg); - v8::Isolate* GetIsolate() {return m_pIsolate;} -protected: - CJS_EmbedObj * m_pEmbedObj; - v8::Global m_pObject; - v8::Isolate* m_pIsolate; + v8::Isolate* GetIsolate() { return m_pIsolate; } + + protected: + CJS_EmbedObj* m_pEmbedObj; + v8::Global m_pObject; + v8::Isolate* m_pIsolate; }; -struct JS_TIMER_MAP -{ - FX_UINT nID; - CJS_Timer * pTimer; +struct JS_TIMER_MAP { + FX_UINT nID; + CJS_Timer* pTimer; }; -typedef CFX_ArrayTemplate CTimerMapArray; - -struct JS_TIMER_MAPARRAY -{ -public: - JS_TIMER_MAPARRAY() - { - } - - ~JS_TIMER_MAPARRAY() - { - Reset(); - } - - void Reset() - { - for (int i=0,sz=m_Array.GetSize(); i=0) - { - if (JS_TIMER_MAP * pMap = m_Array.GetAt(i)) - pMap->pTimer = pTimer; - } - else - { - if (JS_TIMER_MAP * pMap = new JS_TIMER_MAP) - { - pMap->nID = nIndex; - pMap->pTimer = pTimer; - m_Array.Add(pMap); - } - } - } - - CJS_Timer * GetAt(FX_UINT nIndex) - { - int i = Find(nIndex); - - if (i>=0) - { - if (JS_TIMER_MAP * pMap = m_Array.GetAt(i)) - return pMap->pTimer; - } - return NULL; - } - - void RemoveAt(FX_UINT nIndex) - { - int i = Find(nIndex); - - if (i>=0) - { - delete m_Array.GetAt(i); - m_Array.RemoveAt(i); - } - //To prevent potential fake memory leak reported by vc6. - if(m_Array.GetSize() == 0) - m_Array.RemoveAll(); - } - - int Find(FX_UINT nIndex) - { - for (int i=0,sz=m_Array.GetSize(); inID == nIndex) - return i; - } - } - - return -1; - } - - CTimerMapArray m_Array; +typedef CFX_ArrayTemplate CTimerMapArray; + +struct JS_TIMER_MAPARRAY { + public: + JS_TIMER_MAPARRAY() {} + + ~JS_TIMER_MAPARRAY() { Reset(); } + + void Reset() { + for (int i = 0, sz = m_Array.GetSize(); i < sz; i++) + delete m_Array.GetAt(i); + + m_Array.RemoveAll(); + } + + void SetAt(FX_UINT nIndex, CJS_Timer* pTimer) { + int i = Find(nIndex); + + if (i >= 0) { + if (JS_TIMER_MAP* pMap = m_Array.GetAt(i)) + pMap->pTimer = pTimer; + } else { + if (JS_TIMER_MAP* pMap = new JS_TIMER_MAP) { + pMap->nID = nIndex; + pMap->pTimer = pTimer; + m_Array.Add(pMap); + } + } + } + + CJS_Timer* GetAt(FX_UINT nIndex) { + int i = Find(nIndex); + + if (i >= 0) { + if (JS_TIMER_MAP* pMap = m_Array.GetAt(i)) + return pMap->pTimer; + } + return NULL; + } + + void RemoveAt(FX_UINT nIndex) { + int i = Find(nIndex); + + if (i >= 0) { + delete m_Array.GetAt(i); + m_Array.RemoveAt(i); + } + // To prevent potential fake memory leak reported by vc6. + if (m_Array.GetSize() == 0) + m_Array.RemoveAll(); + } + + int Find(FX_UINT nIndex) { + for (int i = 0, sz = m_Array.GetSize(); i < sz; i++) { + if (JS_TIMER_MAP* pMap = m_Array.GetAt(i)) { + if (pMap->nID == nIndex) + return i; + } + } + + return -1; + } + + CTimerMapArray m_Array; }; JS_TIMER_MAPARRAY& GetTimeMap(); class CJS_Runtime; -class CJS_Timer -{ -public: - CJS_Timer(CJS_EmbedObj * pObj, CPDFDoc_Environment* pApp): - m_nTimerID(0), - m_pEmbedObj(pObj), - m_bProcessing(FALSE), - m_dwStartTime(0), - m_dwTimeOut(0), - m_dwElapse(0), - m_pRuntime(NULL), - m_nType(0), - m_pApp(pApp) - { - } - - virtual ~CJS_Timer() - { - KillJSTimer(); - } - -public: - FX_UINT SetJSTimer(FX_UINT nElapse) - { - if (m_nTimerID)KillJSTimer(); - IFX_SystemHandler* pHandler = m_pApp->GetSysHandler(); - m_nTimerID = pHandler->SetTimer(nElapse,TimerProc); - GetTimeMap().SetAt(m_nTimerID,this); - m_dwElapse = nElapse; - return m_nTimerID; - }; - - void KillJSTimer() - { - if (m_nTimerID) - { - if (m_pApp == NULL) { - GetTimeMap().RemoveAt(m_nTimerID); - m_nTimerID = 0; - return; - } - IFX_SystemHandler* pHandler = m_pApp->GetSysHandler(); - pHandler->KillTimer(m_nTimerID); - GetTimeMap().RemoveAt(m_nTimerID); - m_nTimerID = 0; - } - }; - - void SetType(int nType) - { - m_nType = nType; - } - - int GetType() const - { - return m_nType; - } - - void SetStartTime(FX_DWORD dwStartTime) - { - m_dwStartTime = dwStartTime; - } - - FX_DWORD GetStartTime() const - { - return m_dwStartTime; - } - - void SetTimeOut(FX_DWORD dwTimeOut) - { - m_dwTimeOut = dwTimeOut; - } - - FX_DWORD GetTimeOut() const - { - return m_dwTimeOut; - } - - void SetRuntime(CJS_Runtime* pRuntime) - { - m_pRuntime = pRuntime; - } - - CJS_Runtime* GetRuntime() const - { - return m_pRuntime; - } - - void SetJScript(const CFX_WideString& script) - { - m_swJScript = script; - } - - CFX_WideString GetJScript() const - { - return m_swJScript; - } - - static void TimerProc(int idEvent) - { - if (CJS_Timer * pTimer = GetTimeMap().GetAt(idEvent)) - { - if (!pTimer->m_bProcessing) - { - pTimer->m_bProcessing = TRUE; - if (pTimer->m_pEmbedObj) pTimer->m_pEmbedObj->TimerProc(pTimer); - pTimer->m_bProcessing = FALSE; - } - else - { - // TRACE(L"BUSY!\n"); - } - } - }; - -private: - FX_UINT m_nTimerID; - CJS_EmbedObj* m_pEmbedObj; - FX_BOOL m_bProcessing; - - //data - FX_DWORD m_dwStartTime; - FX_DWORD m_dwTimeOut; - FX_DWORD m_dwElapse; - CJS_Runtime* m_pRuntime; - CFX_WideString m_swJScript; - int m_nType; //0:Interval; 1:TimeOut - - CPDFDoc_Environment* m_pApp; +class CJS_Timer { + public: + CJS_Timer(CJS_EmbedObj* pObj, CPDFDoc_Environment* pApp) + : m_nTimerID(0), + m_pEmbedObj(pObj), + m_bProcessing(FALSE), + m_dwStartTime(0), + m_dwTimeOut(0), + m_dwElapse(0), + m_pRuntime(NULL), + m_nType(0), + m_pApp(pApp) {} + + virtual ~CJS_Timer() { KillJSTimer(); } + + public: + FX_UINT SetJSTimer(FX_UINT nElapse) { + if (m_nTimerID) + KillJSTimer(); + IFX_SystemHandler* pHandler = m_pApp->GetSysHandler(); + m_nTimerID = pHandler->SetTimer(nElapse, TimerProc); + GetTimeMap().SetAt(m_nTimerID, this); + m_dwElapse = nElapse; + return m_nTimerID; + }; + + void KillJSTimer() { + if (m_nTimerID) { + if (m_pApp == NULL) { + GetTimeMap().RemoveAt(m_nTimerID); + m_nTimerID = 0; + return; + } + IFX_SystemHandler* pHandler = m_pApp->GetSysHandler(); + pHandler->KillTimer(m_nTimerID); + GetTimeMap().RemoveAt(m_nTimerID); + m_nTimerID = 0; + } + }; + + void SetType(int nType) { m_nType = nType; } + + int GetType() const { return m_nType; } + + void SetStartTime(FX_DWORD dwStartTime) { m_dwStartTime = dwStartTime; } + + FX_DWORD GetStartTime() const { return m_dwStartTime; } + + void SetTimeOut(FX_DWORD dwTimeOut) { m_dwTimeOut = dwTimeOut; } + + FX_DWORD GetTimeOut() const { return m_dwTimeOut; } + + void SetRuntime(CJS_Runtime* pRuntime) { m_pRuntime = pRuntime; } + + CJS_Runtime* GetRuntime() const { return m_pRuntime; } + + void SetJScript(const CFX_WideString& script) { m_swJScript = script; } + + CFX_WideString GetJScript() const { return m_swJScript; } + + static void TimerProc(int idEvent) { + if (CJS_Timer* pTimer = GetTimeMap().GetAt(idEvent)) { + if (!pTimer->m_bProcessing) { + pTimer->m_bProcessing = TRUE; + if (pTimer->m_pEmbedObj) + pTimer->m_pEmbedObj->TimerProc(pTimer); + pTimer->m_bProcessing = FALSE; + } else { + // TRACE(L"BUSY!\n"); + } + } + }; + + private: + FX_UINT m_nTimerID; + CJS_EmbedObj* m_pEmbedObj; + FX_BOOL m_bProcessing; + + // data + FX_DWORD m_dwStartTime; + FX_DWORD m_dwTimeOut; + FX_DWORD m_dwElapse; + CJS_Runtime* m_pRuntime; + CFX_WideString m_swJScript; + int m_nType; // 0:Interval; 1:TimeOut + + CPDFDoc_Environment* m_pApp; }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_ diff --git a/fpdfsdk/include/javascript/JS_Runtime.h b/fpdfsdk/include/javascript/JS_Runtime.h index 20d7d63eff..1fb0348263 100644 --- a/fpdfsdk/include/javascript/JS_Runtime.h +++ b/fpdfsdk/include/javascript/JS_Runtime.h @@ -16,63 +16,65 @@ class CJS_Context; class CJS_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator { - void* Allocate(size_t length) override; - void* AllocateUninitialized(size_t length) override; - void Free(void* data, size_t length) override; + void* Allocate(size_t length) override; + void* AllocateUninitialized(size_t length) override; + void Free(void* data, size_t length) override; }; -class CJS_FieldEvent -{ -public: - CFX_WideString sTargetName; - JS_EVENT_T eEventType; - CJS_FieldEvent* pNext; +class CJS_FieldEvent { + public: + CFX_WideString sTargetName; + JS_EVENT_T eEventType; + CJS_FieldEvent* pNext; }; -class CJS_Runtime : public IFXJS_Runtime -{ -public: - CJS_Runtime(CPDFDoc_Environment * pApp); - virtual ~CJS_Runtime(); +class CJS_Runtime : public IFXJS_Runtime { + public: + CJS_Runtime(CPDFDoc_Environment* pApp); + virtual ~CJS_Runtime(); - virtual IFXJS_Context * NewContext(); - virtual void ReleaseContext(IFXJS_Context * pContext); - virtual IFXJS_Context* GetCurrentContext(); + virtual IFXJS_Context* NewContext(); + virtual void ReleaseContext(IFXJS_Context* pContext); + virtual IFXJS_Context* GetCurrentContext(); - virtual void SetReaderDocument(CPDFSDK_Document *pReaderDoc); - virtual CPDFSDK_Document * GetReaderDocument(){return m_pDocument;} + virtual void SetReaderDocument(CPDFSDK_Document* pReaderDoc); + virtual CPDFSDK_Document* GetReaderDocument() { return m_pDocument; } - CPDFDoc_Environment * GetReaderApp(){return m_pApp;} + CPDFDoc_Environment* GetReaderApp() { return m_pApp; } - FX_BOOL InitJSObjects(); + FX_BOOL InitJSObjects(); - FX_BOOL AddEventToLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType); - void RemoveEventInLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType); - void RemoveEventsInLoop(CJS_FieldEvent* pStart); + FX_BOOL AddEventToLoop(const CFX_WideString& sTargetName, + JS_EVENT_T eEventType); + void RemoveEventInLoop(const CFX_WideString& sTargetName, + JS_EVENT_T eEventType); + void RemoveEventsInLoop(CJS_FieldEvent* pStart); - void BeginBlock(){m_bBlocking = TRUE;} - void EndBlock(){m_bBlocking = FALSE;} - FX_BOOL IsBlocking(){return m_bBlocking;} + void BeginBlock() { m_bBlocking = TRUE; } + void EndBlock() { m_bBlocking = FALSE; } + FX_BOOL IsBlocking() { return m_bBlocking; } - operator IJS_Runtime*() {return (IJS_Runtime*)m_isolate;} - v8::Isolate* GetIsolate(){return m_isolate;}; - void SetIsolate(v8::Isolate* isolate){m_isolate = isolate;} + operator IJS_Runtime*() { return (IJS_Runtime*)m_isolate; } + v8::Isolate* GetIsolate() { return m_isolate; }; + void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; } - v8::Local NewJSContext(); + v8::Local NewJSContext(); + virtual FX_BOOL GetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue); + virtual FX_BOOL SetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue); - virtual FX_BOOL GetHValueByName(const CFX_ByteStringC& utf8Name, FXJSE_HVALUE hValue); - virtual FX_BOOL SetHValueByName(const CFX_ByteStringC& utf8Name, FXJSE_HVALUE hValue); -protected: - CFX_ArrayTemplate m_ContextArray; - CPDFDoc_Environment* m_pApp; - CPDFSDK_Document* m_pDocument; - FX_BOOL m_bBlocking; - CJS_FieldEvent* m_pFieldEventPath; + protected: + CFX_ArrayTemplate m_ContextArray; + CPDFDoc_Environment* m_pApp; + CPDFSDK_Document* m_pDocument; + FX_BOOL m_bBlocking; + CJS_FieldEvent* m_pFieldEventPath; - v8::Isolate* m_isolate; - nonstd::unique_ptr m_pArrayBufferAllocator; - v8::Global m_context; + v8::Isolate* m_isolate; + nonstd::unique_ptr m_pArrayBufferAllocator; + v8::Global m_context; }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_ diff --git a/fpdfsdk/include/javascript/JS_Value.h b/fpdfsdk/include/javascript/JS_Value.h index 6186817fa5..1606fb5396 100644 --- a/fpdfsdk/include/javascript/JS_Value.h +++ b/fpdfsdk/include/javascript/JS_Value.h @@ -15,175 +15,179 @@ class CJS_Date; class CJS_Document; class CJS_Object; -class CJS_Value -{ -public: - CJS_Value(v8::Isolate* isolate); - CJS_Value(v8::Isolate* isolate, v8::Local pValue,FXJSVALUETYPE t); - CJS_Value(v8::Isolate* isolate, const int &iValue); - CJS_Value(v8::Isolate* isolate, const double &dValue); - CJS_Value(v8::Isolate* isolate, const float &fValue); - CJS_Value(v8::Isolate* isolate, const bool &bValue); - CJS_Value(v8::Isolate* isolate, JSFXObject); - CJS_Value(v8::Isolate* isolate, CJS_Object*); - CJS_Value(v8::Isolate* isolate, CJS_Document*); - CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr); - CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr); - CJS_Value(v8::Isolate* isolate, CJS_Array& array); - - ~CJS_Value(); - - void SetNull(); - void Attach(v8::Local pValue,FXJSVALUETYPE t); - void Attach(CJS_Value *pValue); - void Detach(); - - - int ToInt() const; - bool ToBool() const; - double ToDouble() const; - float ToFloat() const; - CJS_Object* ToCJSObject() const; - CFX_WideString ToCFXWideString() const; - CFX_ByteString ToCFXByteString() const; - v8::Local ToV8Object() const; - v8::Local ToV8Array() const; - v8::Local ToV8Value() const; - - void operator = (int iValue); - void operator = (bool bValue); - void operator = (double); - void operator = (float); - void operator = (CJS_Object*); - void operator = (CJS_Document*); - void operator = (v8::Local); - void operator = (CJS_Array &); - void operator = (CJS_Date &); - void operator = (const FX_WCHAR* pWstr); - void operator = (const FX_CHAR* pStr); - void operator = (CJS_Value value); - - FX_BOOL IsArrayObject() const; - FX_BOOL IsDateObject() const; - FXJSVALUETYPE GetType() const; - - FX_BOOL ConvertToArray(CJS_Array &) const; - FX_BOOL ConvertToDate(CJS_Date &) const; - - v8::Isolate* GetIsolate() {return m_isolate;} -protected: - v8::Local m_pValue; - FXJSVALUETYPE m_eType; - v8::Isolate* m_isolate; +class CJS_Value { + public: + CJS_Value(v8::Isolate* isolate); + CJS_Value(v8::Isolate* isolate, v8::Local pValue, FXJSVALUETYPE t); + CJS_Value(v8::Isolate* isolate, const int& iValue); + CJS_Value(v8::Isolate* isolate, const double& dValue); + CJS_Value(v8::Isolate* isolate, const float& fValue); + CJS_Value(v8::Isolate* isolate, const bool& bValue); + CJS_Value(v8::Isolate* isolate, JSFXObject); + CJS_Value(v8::Isolate* isolate, CJS_Object*); + CJS_Value(v8::Isolate* isolate, CJS_Document*); + CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr); + CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr); + CJS_Value(v8::Isolate* isolate, CJS_Array& array); + + ~CJS_Value(); + + void SetNull(); + void Attach(v8::Local pValue, FXJSVALUETYPE t); + void Attach(CJS_Value* pValue); + void Detach(); + + int ToInt() const; + bool ToBool() const; + double ToDouble() const; + float ToFloat() const; + CJS_Object* ToCJSObject() const; + CFX_WideString ToCFXWideString() const; + CFX_ByteString ToCFXByteString() const; + v8::Local ToV8Object() const; + v8::Local ToV8Array() const; + v8::Local ToV8Value() const; + + void operator=(int iValue); + void operator=(bool bValue); + void operator=(double); + void operator=(float); + void operator=(CJS_Object*); + void operator=(CJS_Document*); + void operator=(v8::Local); + void operator=(CJS_Array&); + void operator=(CJS_Date&); + void operator=(const FX_WCHAR* pWstr); + void operator=(const FX_CHAR* pStr); + void operator=(CJS_Value value); + + FX_BOOL IsArrayObject() const; + FX_BOOL IsDateObject() const; + FXJSVALUETYPE GetType() const; + + FX_BOOL ConvertToArray(CJS_Array&) const; + FX_BOOL ConvertToDate(CJS_Date&) const; + + v8::Isolate* GetIsolate() { return m_isolate; } + + protected: + v8::Local m_pValue; + FXJSVALUETYPE m_eType; + v8::Isolate* m_isolate; }; -class CJS_Parameters : public CFX_ArrayTemplate -{ -public: - void push_back(const CJS_Value& newElement) { - CFX_ArrayTemplate::Add(newElement); - } - int size() const { - return CFX_ArrayTemplate::GetSize(); - } +class CJS_Parameters : public CFX_ArrayTemplate { + public: + void push_back(const CJS_Value& newElement) { + CFX_ArrayTemplate::Add(newElement); + } + int size() const { return CFX_ArrayTemplate::GetSize(); } }; -class CJS_PropValue: public CJS_Value -{ -public: - CJS_PropValue(const CJS_Value&); - CJS_PropValue(v8::Isolate* isolate); - ~CJS_PropValue(); -public: - FX_BOOL IsSetting(); - FX_BOOL IsGetting(); - void operator<<(int); - void operator>>(int&) const; - void operator<<(bool); - void operator>>(bool&) const; - void operator<<(double); - void operator>>(double&) const; - void operator<<(CJS_Object* pObj); - void operator>>(CJS_Object*& ppObj) const; - void operator<<(CJS_Document* pJsDoc); - void operator>>(CJS_Document*& ppJsDoc) const; - void operator<<(CFX_ByteString); - void operator>>(CFX_ByteString&) const; - void operator<<(CFX_WideString); - void operator>>(CFX_WideString&) const; - void operator<<(const FX_WCHAR* c_string); - void operator<<(JSFXObject); - void operator>>(JSFXObject&) const; - void operator>>(CJS_Array& array) const; - void operator<<(CJS_Array& array); - void operator<<(CJS_Date& date); - void operator>>(CJS_Date& date) const; - operator v8::Local() const; - void StartSetting(); - void StartGetting(); -private: - FX_BOOL m_bIsSetting; +class CJS_PropValue : public CJS_Value { + public: + CJS_PropValue(const CJS_Value&); + CJS_PropValue(v8::Isolate* isolate); + ~CJS_PropValue(); + + public: + FX_BOOL IsSetting(); + FX_BOOL IsGetting(); + void operator<<(int); + void operator>>(int&) const; + void operator<<(bool); + void operator>>(bool&) const; + void operator<<(double); + void operator>>(double&) const; + void operator<<(CJS_Object* pObj); + void operator>>(CJS_Object*& ppObj) const; + void operator<<(CJS_Document* pJsDoc); + void operator>>(CJS_Document*& ppJsDoc) const; + void operator<<(CFX_ByteString); + void operator>>(CFX_ByteString&) const; + void operator<<(CFX_WideString); + void operator>>(CFX_WideString&) const; + void operator<<(const FX_WCHAR* c_string); + void operator<<(JSFXObject); + void operator>>(JSFXObject&) const; + void operator>>(CJS_Array& array) const; + void operator<<(CJS_Array& array); + void operator<<(CJS_Date& date); + void operator>>(CJS_Date& date) const; + operator v8::Local() const; + void StartSetting(); + void StartGetting(); + + private: + FX_BOOL m_bIsSetting; }; -class CJS_Array -{ -public: - CJS_Array(v8::Isolate* isolate); - virtual ~CJS_Array(); - - void Attach(v8::Local pArray); - void GetElement(unsigned index,CJS_Value &value); - void SetElement(unsigned index,CJS_Value value); - int GetLength(); - FX_BOOL IsAttached(); - operator v8::Local(); - - v8::Isolate* GetIsolate() {return m_isolate;} -private: - v8::Local m_pArray; - v8::Isolate* m_isolate; +class CJS_Array { + public: + CJS_Array(v8::Isolate* isolate); + virtual ~CJS_Array(); + + void Attach(v8::Local pArray); + void GetElement(unsigned index, CJS_Value& value); + void SetElement(unsigned index, CJS_Value value); + int GetLength(); + FX_BOOL IsAttached(); + operator v8::Local(); + + v8::Isolate* GetIsolate() { return m_isolate; } + + private: + v8::Local m_pArray; + v8::Isolate* m_isolate; }; -class CJS_Date -{ -friend class CJS_Value; -public: - CJS_Date(v8::Isolate* isolate); - CJS_Date(v8::Isolate* isolate,double dMsec_time); - CJS_Date(v8::Isolate* isolate,int year, int mon, int day,int hour, int min, int sec); - virtual ~CJS_Date(); - void Attach(v8::Local pDate); +class CJS_Date { + friend class CJS_Value; + + public: + CJS_Date(v8::Isolate* isolate); + CJS_Date(v8::Isolate* isolate, double dMsec_time); + CJS_Date(v8::Isolate* isolate, + int year, + int mon, + int day, + int hour, + int min, + int sec); + virtual ~CJS_Date(); + void Attach(v8::Local pDate); - int GetYear(); - void SetYear(int iYear); + int GetYear(); + void SetYear(int iYear); - int GetMonth(); - void SetMonth(int iMonth); + int GetMonth(); + void SetMonth(int iMonth); - int GetDay(); - void SetDay(int iDay); + int GetDay(); + void SetDay(int iDay); - int GetHours(); - void SetHours(int iHours); + int GetHours(); + void SetHours(int iHours); - int GetMinutes(); - void SetMinutes(int minutes); + int GetMinutes(); + void SetMinutes(int minutes); - int GetSeconds(); - void SetSeconds(int seconds); + int GetSeconds(); + void SetSeconds(int seconds); - operator v8::Local(); - operator double() const; + operator v8::Local(); + operator double() const; - CFX_WideString ToString() const; + CFX_WideString ToString() const; - static double MakeDate(int year, int mon, int mday,int hour, int min, int sec,int ms); + static double + MakeDate(int year, int mon, int mday, int hour, int min, int sec, int ms); - FX_BOOL IsValidDate(); + FX_BOOL IsValidDate(); -protected: - v8::Local m_pDate; - v8::Isolate* m_isolate; + protected: + v8::Local m_pDate; + v8::Isolate* m_isolate; }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_ diff --git a/fpdfsdk/include/javascript/PublicMethods.h b/fpdfsdk/include/javascript/PublicMethods.h index cff9e11479..c5d5ea6d46 100644 --- a/fpdfsdk/include/javascript/PublicMethods.h +++ b/fpdfsdk/include/javascript/PublicMethods.h @@ -9,95 +9,177 @@ #include "JS_Define.h" -class CJS_PublicMethods : public CJS_Object -{ -public: - CJS_PublicMethods(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_PublicMethods(void){}; +class CJS_PublicMethods : public CJS_Object { + public: + CJS_PublicMethods(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_PublicMethods(void){}; -public: - static FX_BOOL AFNumber_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFNumber_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFPercent_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFPercent_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFDate_FormatEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFDate_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFDate_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFDate_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFTime_FormatEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); // - static FX_BOOL AFTime_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFTime_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFTime_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFSpecial_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFSpecial_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFSpecial_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);// - static FX_BOOL AFSimple(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFMakeNumber(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFSimple_Calculate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFRange_Validate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFMergeChange(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFParseDateEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - static FX_BOOL AFExtractNums(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); + public: + static FX_BOOL AFNumber_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFNumber_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFPercent_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFPercent_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFDate_FormatEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFDate_KeystrokeEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFDate_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFDate_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFTime_FormatEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); // + static FX_BOOL AFTime_KeystrokeEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFTime_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFTime_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFSpecial_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFSpecial_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFSpecial_KeystrokeEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); // + static FX_BOOL AFSimple(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFMakeNumber(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFSimple_Calculate(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFRange_Validate(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFMergeChange(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFParseDateEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + static FX_BOOL AFExtractNums(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); -public: - JS_STATIC_GLOBAL_FUN(AFNumber_Format); - JS_STATIC_GLOBAL_FUN(AFNumber_Keystroke); - JS_STATIC_GLOBAL_FUN(AFPercent_Format); - JS_STATIC_GLOBAL_FUN(AFPercent_Keystroke); - JS_STATIC_GLOBAL_FUN(AFDate_FormatEx); - JS_STATIC_GLOBAL_FUN(AFDate_KeystrokeEx); - JS_STATIC_GLOBAL_FUN(AFDate_Format); - JS_STATIC_GLOBAL_FUN(AFDate_Keystroke); - JS_STATIC_GLOBAL_FUN(AFTime_FormatEx); - JS_STATIC_GLOBAL_FUN(AFTime_KeystrokeEx); - JS_STATIC_GLOBAL_FUN(AFTime_Format); - JS_STATIC_GLOBAL_FUN(AFTime_Keystroke); - JS_STATIC_GLOBAL_FUN(AFSpecial_Format); - JS_STATIC_GLOBAL_FUN(AFSpecial_Keystroke); - JS_STATIC_GLOBAL_FUN(AFSpecial_KeystrokeEx); - JS_STATIC_GLOBAL_FUN(AFSimple); - JS_STATIC_GLOBAL_FUN(AFMakeNumber); - JS_STATIC_GLOBAL_FUN(AFSimple_Calculate); - JS_STATIC_GLOBAL_FUN(AFRange_Validate); - JS_STATIC_GLOBAL_FUN(AFMergeChange); - JS_STATIC_GLOBAL_FUN(AFParseDateEx); - JS_STATIC_GLOBAL_FUN(AFExtractNums); + public: + JS_STATIC_GLOBAL_FUN(AFNumber_Format); + JS_STATIC_GLOBAL_FUN(AFNumber_Keystroke); + JS_STATIC_GLOBAL_FUN(AFPercent_Format); + JS_STATIC_GLOBAL_FUN(AFPercent_Keystroke); + JS_STATIC_GLOBAL_FUN(AFDate_FormatEx); + JS_STATIC_GLOBAL_FUN(AFDate_KeystrokeEx); + JS_STATIC_GLOBAL_FUN(AFDate_Format); + JS_STATIC_GLOBAL_FUN(AFDate_Keystroke); + JS_STATIC_GLOBAL_FUN(AFTime_FormatEx); + JS_STATIC_GLOBAL_FUN(AFTime_KeystrokeEx); + JS_STATIC_GLOBAL_FUN(AFTime_Format); + JS_STATIC_GLOBAL_FUN(AFTime_Keystroke); + JS_STATIC_GLOBAL_FUN(AFSpecial_Format); + JS_STATIC_GLOBAL_FUN(AFSpecial_Keystroke); + JS_STATIC_GLOBAL_FUN(AFSpecial_KeystrokeEx); + JS_STATIC_GLOBAL_FUN(AFSimple); + JS_STATIC_GLOBAL_FUN(AFMakeNumber); + JS_STATIC_GLOBAL_FUN(AFSimple_Calculate); + JS_STATIC_GLOBAL_FUN(AFRange_Validate); + JS_STATIC_GLOBAL_FUN(AFMergeChange); + JS_STATIC_GLOBAL_FUN(AFParseDateEx); + JS_STATIC_GLOBAL_FUN(AFExtractNums); - JS_STATIC_DECLARE_GLOBAL_FUN(); + JS_STATIC_DECLARE_GLOBAL_FUN(); -public: - static int ParseStringInteger(const CFX_WideString & string,int nStart,int & nSkip, int nMaxStep); - static CFX_WideString ParseStringString(const CFX_WideString& string, int nStart, int& nSkip); - static double MakeRegularDate(const CFX_WideString & value,const CFX_WideString & format, FX_BOOL& bWrongFormat); - static CFX_WideString MakeFormatDate(double dDate,const CFX_WideString & format); - static FX_BOOL ConvertStringToNumber(const FX_WCHAR* swSource, double & dRet, FX_BOOL & bDot); - static double ParseStringToNumber(const FX_WCHAR* swSource); - static double ParseNormalDate(const CFX_WideString & value, FX_BOOL& bWrongFormat); - static double MakeInterDate(CFX_WideString strValue); - static double ParseNumber(const FX_WCHAR* swSource, FX_BOOL& bAllDigits, FX_BOOL& bDot, FX_BOOL& bSign, FX_BOOL& bKXJS); + public: + static int ParseStringInteger(const CFX_WideString& string, + int nStart, + int& nSkip, + int nMaxStep); + static CFX_WideString ParseStringString(const CFX_WideString& string, + int nStart, + int& nSkip); + static double MakeRegularDate(const CFX_WideString& value, + const CFX_WideString& format, + FX_BOOL& bWrongFormat); + static CFX_WideString MakeFormatDate(double dDate, + const CFX_WideString& format); + static FX_BOOL ConvertStringToNumber(const FX_WCHAR* swSource, + double& dRet, + FX_BOOL& bDot); + static double ParseStringToNumber(const FX_WCHAR* swSource); + static double ParseNormalDate(const CFX_WideString& value, + FX_BOOL& bWrongFormat); + static double MakeInterDate(CFX_WideString strValue); + static double ParseNumber(const FX_WCHAR* swSource, + FX_BOOL& bAllDigits, + FX_BOOL& bDot, + FX_BOOL& bSign, + FX_BOOL& bKXJS); -public: - static CFX_WideString StrLTrim(const FX_WCHAR* pStr); - static CFX_WideString StrRTrim(const FX_WCHAR* pStr); - static CFX_WideString StrTrim(const FX_WCHAR* pStr); + public: + static CFX_WideString StrLTrim(const FX_WCHAR* pStr); + static CFX_WideString StrRTrim(const FX_WCHAR* pStr); + static CFX_WideString StrTrim(const FX_WCHAR* pStr); - static CFX_ByteString StrLTrim(const FX_CHAR* pStr); - static CFX_ByteString StrRTrim(const FX_CHAR* pStr); - static CFX_ByteString StrTrim(const FX_CHAR* pStr); + static CFX_ByteString StrLTrim(const FX_CHAR* pStr); + static CFX_ByteString StrRTrim(const FX_CHAR* pStr); + static CFX_ByteString StrTrim(const FX_CHAR* pStr); - static FX_BOOL IsNumber(const FX_CHAR* string); - static FX_BOOL IsNumber(const FX_WCHAR* string); + static FX_BOOL IsNumber(const FX_CHAR* string); + static FX_BOOL IsNumber(const FX_WCHAR* string); - static FX_BOOL IsDigit(char ch); - static FX_BOOL IsDigit(wchar_t ch); - static FX_BOOL IsAlphabetic(wchar_t ch); - static FX_BOOL IsAlphaNumeric(wchar_t ch); + static FX_BOOL IsDigit(char ch); + static FX_BOOL IsDigit(wchar_t ch); + static FX_BOOL IsAlphabetic(wchar_t ch); + static FX_BOOL IsAlphaNumeric(wchar_t ch); - static FX_BOOL maskSatisfied(wchar_t c_Change,wchar_t c_Mask); - static FX_BOOL isReservedMaskChar(wchar_t ch); + static FX_BOOL maskSatisfied(wchar_t c_Change, wchar_t c_Mask); + static FX_BOOL isReservedMaskChar(wchar_t ch); - static double AF_Simple(const FX_WCHAR* sFuction, double dValue1, double dValue2); - static CJS_Array AF_MakeArrayFromList(v8::Isolate* isolate, CJS_Value val); + static double AF_Simple(const FX_WCHAR* sFuction, + double dValue1, + double dValue2); + static CJS_Array AF_MakeArrayFromList(v8::Isolate* isolate, CJS_Value val); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_PUBLICMETHODS_H_ diff --git a/fpdfsdk/include/javascript/app.h b/fpdfsdk/include/javascript/app.h index ac90e62b0d..221a7c1d89 100644 --- a/fpdfsdk/include/javascript/app.h +++ b/fpdfsdk/include/javascript/app.h @@ -15,35 +15,33 @@ class CJS_Runtime; class CJS_Timer; -class TimerObj : public CJS_EmbedObj -{ -public: - TimerObj(CJS_Object* pJSObject); - virtual ~TimerObj(); - -public: - void SetTimer(CJS_Timer* pTimer); - CJS_Timer* GetTimer() const; - -private: - CJS_Timer* m_pTimer; -}; +class TimerObj : public CJS_EmbedObj { + public: + TimerObj(CJS_Object* pJSObject); + virtual ~TimerObj(); -class CJS_TimerObj : public CJS_Object -{ -public: - CJS_TimerObj(JSFXObject pObject) : CJS_Object(pObject) {} - virtual ~CJS_TimerObj(){} + public: + void SetTimer(CJS_Timer* pTimer); + CJS_Timer* GetTimer() const; - DECLARE_JS_CLASS(CJS_TimerObj); + private: + CJS_Timer* m_pTimer; }; +class CJS_TimerObj : public CJS_Object { + public: + CJS_TimerObj(JSFXObject pObject) : CJS_Object(pObject) {} + virtual ~CJS_TimerObj() {} + + DECLARE_JS_CLASS(CJS_TimerObj); +}; // struct APP_MENUITEM_ARRAY; // // struct APP_MENUITEM // { -// APP_MENUITEM() : oSubMenu(NULL), cName(L""), cReturn(L""), bMarked(false), bEnabled(true) +// APP_MENUITEM() : oSubMenu(NULL), cName(L""), cReturn(L""), +// bMarked(false), bEnabled(true) // { // } // CFX_WideString cName; @@ -103,121 +101,206 @@ public: // HMENU hMenu; // }; -class app : public CJS_EmbedObj -{ -public: - app(CJS_Object * pJSObject); - virtual ~app(); - -public: - FX_BOOL activeDocs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL calculate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL formsVersion(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL fullscreen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL language(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL platform(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL runtimeHighlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL viewerType(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL viewerVariation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL viewerVersion(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - - - FX_BOOL alert(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL beep(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL browseForDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL clearInterval(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL clearTimeOut(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL execDialog(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL execMenuItem(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL findComponent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL goBack(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL goForward(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL launchURL(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL mailMsg(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL newFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL newDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL openDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL openFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL popUpMenuEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL popUpMenu(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL response(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL setInterval(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL setTimeOut(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - -private: -// FX_DWORD AppGetTickCount(); - void TimerProc(CJS_Timer* pTimer); - void RunJsScript(CJS_Runtime * pRuntime,const CFX_WideString & wsScript); -// void ParsePopupMenuObj(APP_MENUITEM * ppMenuItem,JSObject * pObj); -// void DeleteMenuItems(APP_MENUITEM_ARRAY * pMenuItems); -// void AddMenuItem(APP_MENUITEM_ARRAY * pMenuItems, HMENU hMenu, MENUITEMINFO MenuItemInfo); -// void InitMenuItemInfo(MENUITEMINFO& MenuItemInfo); -// void DestroyPopUpMenu(); - -// void ParserMenuItem(APP_MENU* pHead, const CJS_Parameters¶ms); -// void AddItemToMenu(APP_MENU* pHead, HMENU hMenu, MENUITEMINFO MenuItemInfo); -// void DestroyMenuItems(APP_MENU* pHead); - -public: - static CFX_WideString SysPathToPDFPath(const CFX_WideString& sOldPath); - -private: - - bool m_bCalculate; - bool m_bRuntimeHighLight; - - CFX_ArrayTemplate m_aTimer; -// APP_MENU* m_pMenuHead; - -public: -// static CReader_App* s_App; +class app : public CJS_EmbedObj { + public: + app(CJS_Object* pJSObject); + virtual ~app(); + + public: + FX_BOOL activeDocs(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL calculate(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL formsVersion(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL fullscreen(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL language(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL platform(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL runtimeHighlight(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL viewerType(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL viewerVariation(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL viewerVersion(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + + FX_BOOL alert(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL beep(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL browseForDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL clearInterval(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL clearTimeOut(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL execDialog(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL execMenuItem(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL findComponent(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL goBack(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL goForward(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL launchURL(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL mailMsg(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL newFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL newDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL openDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL openFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL popUpMenuEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL popUpMenu(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL response(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setInterval(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL setTimeOut(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + + private: + // FX_DWORD AppGetTickCount(); + void TimerProc(CJS_Timer* pTimer); + void RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript); + // void ParsePopupMenuObj(APP_MENUITEM * + //ppMenuItem,JSObject * pObj); + // void DeleteMenuItems(APP_MENUITEM_ARRAY * + //pMenuItems); + // void AddMenuItem(APP_MENUITEM_ARRAY * pMenuItems, HMENU + // hMenu, MENUITEMINFO MenuItemInfo); + // void InitMenuItemInfo(MENUITEMINFO& + // MenuItemInfo); + // void DestroyPopUpMenu(); + + // void ParserMenuItem(APP_MENU* pHead, const + // CJS_Parameters¶ms); + // void AddItemToMenu(APP_MENU* pHead, HMENU hMenu, + // MENUITEMINFO MenuItemInfo); + // void DestroyMenuItems(APP_MENU* + // pHead); + + public: + static CFX_WideString SysPathToPDFPath(const CFX_WideString& sOldPath); + + private: + bool m_bCalculate; + bool m_bRuntimeHighLight; + + CFX_ArrayTemplate m_aTimer; + // APP_MENU* m_pMenuHead; + + public: + // static CReader_App* s_App; }; -class CJS_App : public CJS_Object -{ -public: - CJS_App(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_App(void){}; - - DECLARE_JS_CLASS(CJS_App); - - JS_STATIC_PROP(activeDocs, app); - JS_STATIC_PROP(calculate, app); - JS_STATIC_PROP(formsVersion, app); - JS_STATIC_PROP(fs, app); - JS_STATIC_PROP(fullscreen, app); - JS_STATIC_PROP(language, app); - JS_STATIC_PROP(media, app); - JS_STATIC_PROP(platform, app); - JS_STATIC_PROP(runtimeHighlight, app); - JS_STATIC_PROP(viewerType, app); - JS_STATIC_PROP(viewerVariation, app); - JS_STATIC_PROP(viewerVersion, app); - - JS_STATIC_METHOD(alert, app); - JS_STATIC_METHOD(beep, app); - JS_STATIC_METHOD(browseForDoc, app); - JS_STATIC_METHOD(clearInterval, app); - JS_STATIC_METHOD(clearTimeOut, app); - JS_STATIC_METHOD(execDialog, app); - JS_STATIC_METHOD(execMenuItem, app); - JS_STATIC_METHOD(findComponent, app); - JS_STATIC_METHOD(goBack, app); - JS_STATIC_METHOD(goForward, app); - JS_STATIC_METHOD(launchURL, app); - JS_STATIC_METHOD(mailMsg, app); - JS_STATIC_METHOD(newFDF, app); - JS_STATIC_METHOD(newDoc, app); - JS_STATIC_METHOD(openDoc, app); - JS_STATIC_METHOD(openFDF, app); - JS_STATIC_METHOD(popUpMenuEx, app); - JS_STATIC_METHOD(popUpMenu, app); - JS_STATIC_METHOD(response, app); - JS_STATIC_METHOD(setInterval, app); - JS_STATIC_METHOD(setTimeOut, app); - +class CJS_App : public CJS_Object { + public: + CJS_App(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_App(void){}; + + DECLARE_JS_CLASS(CJS_App); + + JS_STATIC_PROP(activeDocs, app); + JS_STATIC_PROP(calculate, app); + JS_STATIC_PROP(formsVersion, app); + JS_STATIC_PROP(fs, app); + JS_STATIC_PROP(fullscreen, app); + JS_STATIC_PROP(language, app); + JS_STATIC_PROP(media, app); + JS_STATIC_PROP(platform, app); + JS_STATIC_PROP(runtimeHighlight, app); + JS_STATIC_PROP(viewerType, app); + JS_STATIC_PROP(viewerVariation, app); + JS_STATIC_PROP(viewerVersion, app); + + JS_STATIC_METHOD(alert, app); + JS_STATIC_METHOD(beep, app); + JS_STATIC_METHOD(browseForDoc, app); + JS_STATIC_METHOD(clearInterval, app); + JS_STATIC_METHOD(clearTimeOut, app); + JS_STATIC_METHOD(execDialog, app); + JS_STATIC_METHOD(execMenuItem, app); + JS_STATIC_METHOD(findComponent, app); + JS_STATIC_METHOD(goBack, app); + JS_STATIC_METHOD(goForward, app); + JS_STATIC_METHOD(launchURL, app); + JS_STATIC_METHOD(mailMsg, app); + JS_STATIC_METHOD(newFDF, app); + JS_STATIC_METHOD(newDoc, app); + JS_STATIC_METHOD(openDoc, app); + JS_STATIC_METHOD(openFDF, app); + JS_STATIC_METHOD(popUpMenuEx, app); + JS_STATIC_METHOD(popUpMenu, app); + JS_STATIC_METHOD(response, app); + JS_STATIC_METHOD(setInterval, app); + JS_STATIC_METHOD(setTimeOut, app); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_APP_H_ diff --git a/fpdfsdk/include/javascript/color.h b/fpdfsdk/include/javascript/color.h index df863b552f..45704efa80 100644 --- a/fpdfsdk/include/javascript/color.h +++ b/fpdfsdk/include/javascript/color.h @@ -10,71 +10,76 @@ #include "JS_Define.h" // TODO(tsepez): include CPWL_Color.h once its own IWYU is fixed. -class color : public CJS_EmbedObj -{ -public: - color(CJS_Object* pJSObject); - virtual ~color(void); +class color : public CJS_EmbedObj { + public: + color(CJS_Object* pJSObject); + virtual ~color(void); - FX_BOOL black(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL blue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL cyan(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL dkGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL gray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL green(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL ltGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL magenta(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL red(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL transparent(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL white(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL yellow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL black(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL blue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL cyan(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL dkGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL gray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL green(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL ltGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL magenta(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL red(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL transparent(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL white(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL yellow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL convert(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL equal(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); + FX_BOOL convert(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL equal(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); -public: - static void ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array); - static void ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color); + public: + static void ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array); + static void ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color); -private: - CPWL_Color m_crTransparent; - CPWL_Color m_crBlack; - CPWL_Color m_crWhite; - CPWL_Color m_crRed; - CPWL_Color m_crGreen; - CPWL_Color m_crBlue; - CPWL_Color m_crCyan; - CPWL_Color m_crMagenta; - CPWL_Color m_crYellow; - CPWL_Color m_crDKGray; - CPWL_Color m_crGray; - CPWL_Color m_crLTGray; + private: + CPWL_Color m_crTransparent; + CPWL_Color m_crBlack; + CPWL_Color m_crWhite; + CPWL_Color m_crRed; + CPWL_Color m_crGreen; + CPWL_Color m_crBlue; + CPWL_Color m_crCyan; + CPWL_Color m_crMagenta; + CPWL_Color m_crYellow; + CPWL_Color m_crDKGray; + CPWL_Color m_crGray; + CPWL_Color m_crLTGray; }; -class CJS_Color : public CJS_Object -{ -public: - CJS_Color(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Color(void){}; +class CJS_Color : public CJS_Object { + public: + CJS_Color(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Color(void){}; - DECLARE_JS_CLASS(CJS_Color); + DECLARE_JS_CLASS(CJS_Color); - JS_STATIC_PROP(black, color); - JS_STATIC_PROP(blue, color); - JS_STATIC_PROP(cyan, color); - JS_STATIC_PROP(dkGray, color); - JS_STATIC_PROP(gray, color); - JS_STATIC_PROP(green, color); - JS_STATIC_PROP(ltGray, color); - JS_STATIC_PROP(magenta, color); - JS_STATIC_PROP(red, color); - JS_STATIC_PROP(transparent, color); - JS_STATIC_PROP(white, color); - JS_STATIC_PROP(yellow, color); - - JS_STATIC_METHOD(convert,color); - JS_STATIC_METHOD(equal,color); + JS_STATIC_PROP(black, color); + JS_STATIC_PROP(blue, color); + JS_STATIC_PROP(cyan, color); + JS_STATIC_PROP(dkGray, color); + JS_STATIC_PROP(gray, color); + JS_STATIC_PROP(green, color); + JS_STATIC_PROP(ltGray, color); + JS_STATIC_PROP(magenta, color); + JS_STATIC_PROP(red, color); + JS_STATIC_PROP(transparent, color); + JS_STATIC_PROP(white, color); + JS_STATIC_PROP(yellow, color); + JS_STATIC_METHOD(convert, color); + JS_STATIC_METHOD(equal, color); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_COLOR_H_ diff --git a/fpdfsdk/include/javascript/console.h b/fpdfsdk/include/javascript/console.h index 0cbc291b44..a04d87b007 100644 --- a/fpdfsdk/include/javascript/console.h +++ b/fpdfsdk/include/javascript/console.h @@ -9,31 +9,41 @@ #include "JS_Define.h" -class console : public CJS_EmbedObj -{ -public: - console(CJS_Object* pJSObject); - virtual ~console(void); - -public: - FX_BOOL clear(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL hide(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL println(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL show(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); +class console : public CJS_EmbedObj { + public: + console(CJS_Object* pJSObject); + virtual ~console(void); + + public: + FX_BOOL clear(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL hide(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL println(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL show(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); }; -class CJS_Console : public CJS_Object -{ -public: - CJS_Console(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Console(void){}; +class CJS_Console : public CJS_Object { + public: + CJS_Console(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Console(void){}; - DECLARE_JS_CLASS(CJS_Console); + DECLARE_JS_CLASS(CJS_Console); - JS_STATIC_METHOD(clear, console); - JS_STATIC_METHOD(hide, console); - JS_STATIC_METHOD(println, console); - JS_STATIC_METHOD(show, console); + JS_STATIC_METHOD(clear, console); + JS_STATIC_METHOD(hide, console); + JS_STATIC_METHOD(println, console); + JS_STATIC_METHOD(show, console); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_CONSOLE_H_ diff --git a/fpdfsdk/include/javascript/event.h b/fpdfsdk/include/javascript/event.h index 91a38ba487..c7c899e69d 100644 --- a/fpdfsdk/include/javascript/event.h +++ b/fpdfsdk/include/javascript/event.h @@ -9,64 +9,81 @@ #include "JS_Define.h" -class event : public CJS_EmbedObj -{ -public: - event(CJS_Object * pJSObject); - virtual ~event(void); - -public: - FX_BOOL change(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL changeEx(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL commitKey(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL fieldFull(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL keyDown(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL modifier(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL rc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL richChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL richChangeEx(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL selEnd(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL selStart(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL shift(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL target(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL targetName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); - FX_BOOL willCommit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); +class event : public CJS_EmbedObj { + public: + event(CJS_Object* pJSObject); + virtual ~event(void); + public: + FX_BOOL change(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL changeEx(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL commitKey(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL fieldFull(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL keyDown(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL modifier(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL rc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL richChange(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL richChangeEx(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL richValue(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL selEnd(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL selStart(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL shift(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL target(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL targetName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError); + FX_BOOL willCommit(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError); }; -class CJS_Event : public CJS_Object -{ -public: - CJS_Event(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Event(void){}; +class CJS_Event : public CJS_Object { + public: + CJS_Event(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Event(void){}; - DECLARE_JS_CLASS(CJS_Event); + DECLARE_JS_CLASS(CJS_Event); - JS_STATIC_PROP(change, event); - JS_STATIC_PROP(changeEx, event); - JS_STATIC_PROP(commitKey, event); - JS_STATIC_PROP(fieldFull, event); - JS_STATIC_PROP(keyDown, event); - JS_STATIC_PROP(modifier, event); - JS_STATIC_PROP(name, event); - JS_STATIC_PROP(rc, event); - JS_STATIC_PROP(richChange, event); - JS_STATIC_PROP(richChangeEx, event); - JS_STATIC_PROP(richValue, event); - JS_STATIC_PROP(selEnd, event); - JS_STATIC_PROP(selStart, event); - JS_STATIC_PROP(shift, event); - JS_STATIC_PROP(source, event); - JS_STATIC_PROP(target, event); - JS_STATIC_PROP(targetName, event); - JS_STATIC_PROP(type, event); - JS_STATIC_PROP(value, event); - JS_STATIC_PROP(willCommit, event); + JS_STATIC_PROP(change, event); + JS_STATIC_PROP(changeEx, event); + JS_STATIC_PROP(commitKey, event); + JS_STATIC_PROP(fieldFull, event); + JS_STATIC_PROP(keyDown, event); + JS_STATIC_PROP(modifier, event); + JS_STATIC_PROP(name, event); + JS_STATIC_PROP(rc, event); + JS_STATIC_PROP(richChange, event); + JS_STATIC_PROP(richChangeEx, event); + JS_STATIC_PROP(richValue, event); + JS_STATIC_PROP(selEnd, event); + JS_STATIC_PROP(selStart, event); + JS_STATIC_PROP(shift, event); + JS_STATIC_PROP(source, event); + JS_STATIC_PROP(target, event); + JS_STATIC_PROP(targetName, event); + JS_STATIC_PROP(type, event); + JS_STATIC_PROP(value, event); + JS_STATIC_PROP(willCommit, event); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_EVENT_H_ diff --git a/fpdfsdk/include/javascript/global.h b/fpdfsdk/include/javascript/global.h index 83e07f67c3..303ac76a3e 100644 --- a/fpdfsdk/include/javascript/global.h +++ b/fpdfsdk/include/javascript/global.h @@ -13,77 +13,82 @@ class CJS_GlobalData; class CJS_GlobalVariableArray; class CJS_KeyValue; -struct js_global_data -{ - js_global_data() - { - nType = 0; - dData = 0; - bData = FALSE; - sData = ""; - bPersistent = FALSE; - bDeleted = FALSE; - } - - ~js_global_data() - { - pData.Reset(); - } - int nType; //0:int 1:bool 2:string 3:obj - double dData; - bool bData; - CFX_ByteString sData; - v8::Global pData; - bool bPersistent; - bool bDeleted; +struct js_global_data { + js_global_data() { + nType = 0; + dData = 0; + bData = FALSE; + sData = ""; + bPersistent = FALSE; + bDeleted = FALSE; + } + + ~js_global_data() { pData.Reset(); } + int nType; // 0:int 1:bool 2:string 3:obj + double dData; + bool bData; + CFX_ByteString sData; + v8::Global pData; + bool bPersistent; + bool bDeleted; }; -class global_alternate : public CJS_EmbedObj -{ -public: - global_alternate(CJS_Object* pJSObject); - virtual ~global_alternate(); - -public: - FX_BOOL setPersistent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - -public: - FX_BOOL QueryProperty(const FX_WCHAR* propname); - FX_BOOL DoProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CJS_PropValue & vp, CFX_WideString & sError); - FX_BOOL DelProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CFX_WideString & sError); - - void Initial(CPDFDoc_Environment* pApp); - -private: - void UpdateGlobalPersistentVariables(); - void CommitGlobalPersisitentVariables(); - void DestroyGlobalPersisitentVariables(); - FX_BOOL SetGlobalVariables(const FX_CHAR* propname, int nType, - double dData, bool bData, const CFX_ByteString& sData, JSObject pData, bool bDefaultPersistent); - - void ObjectToArray(v8::Local pObj, CJS_GlobalVariableArray& array); - void PutObjectProperty(v8::Local obj, CJS_KeyValue* pData); - -private: - CFX_MapByteStringToPtr m_mapGlobal; - CFX_WideString m_sFilePath; - CJS_GlobalData* m_pGlobalData; - CPDFDoc_Environment* m_pApp; +class global_alternate : public CJS_EmbedObj { + public: + global_alternate(CJS_Object* pJSObject); + virtual ~global_alternate(); + + public: + FX_BOOL setPersistent(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + + public: + FX_BOOL QueryProperty(const FX_WCHAR* propname); + FX_BOOL DoProperty(IFXJS_Context* cc, + const FX_WCHAR* propname, + CJS_PropValue& vp, + CFX_WideString& sError); + FX_BOOL DelProperty(IFXJS_Context* cc, + const FX_WCHAR* propname, + CFX_WideString& sError); + + void Initial(CPDFDoc_Environment* pApp); + + private: + void UpdateGlobalPersistentVariables(); + void CommitGlobalPersisitentVariables(); + void DestroyGlobalPersisitentVariables(); + FX_BOOL SetGlobalVariables(const FX_CHAR* propname, + int nType, + double dData, + bool bData, + const CFX_ByteString& sData, + JSObject pData, + bool bDefaultPersistent); + + void ObjectToArray(v8::Local pObj, + CJS_GlobalVariableArray& array); + void PutObjectProperty(v8::Local obj, CJS_KeyValue* pData); + + private: + CFX_MapByteStringToPtr m_mapGlobal; + CFX_WideString m_sFilePath; + CJS_GlobalData* m_pGlobalData; + CPDFDoc_Environment* m_pApp; }; +class CJS_Global : public CJS_Object { + public: + CJS_Global(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Global(void){}; -class CJS_Global : public CJS_Object -{ -public: - CJS_Global(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Global(void){}; + virtual FX_BOOL InitInstance(IFXJS_Context* cc); - virtual FX_BOOL InitInstance(IFXJS_Context* cc); - - DECLARE_SPECIAL_JS_CLASS(CJS_Global); - - JS_SPECIAL_STATIC_METHOD(setPersistent, global_alternate, global); + DECLARE_SPECIAL_JS_CLASS(CJS_Global); + JS_SPECIAL_STATIC_METHOD(setPersistent, global_alternate, global); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_GLOBAL_H_ diff --git a/fpdfsdk/include/javascript/report.h b/fpdfsdk/include/javascript/report.h index 56f742ce08..a9004fd46a 100644 --- a/fpdfsdk/include/javascript/report.h +++ b/fpdfsdk/include/javascript/report.h @@ -9,28 +9,32 @@ #include "JS_Define.h" -class Report : public CJS_EmbedObj -{ -public: - Report(CJS_Object * pJSObject); - virtual ~Report(); - -public: - FX_BOOL save(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL writeText(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); +class Report : public CJS_EmbedObj { + public: + Report(CJS_Object* pJSObject); + virtual ~Report(); + + public: + FX_BOOL save(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL writeText(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); }; -class CJS_Report : public CJS_Object -{ -public: - CJS_Report(JSFXObject pObject) : CJS_Object(pObject){}; - virtual ~CJS_Report(){}; +class CJS_Report : public CJS_Object { + public: + CJS_Report(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Report(){}; -public: - DECLARE_JS_CLASS(CJS_Report); + public: + DECLARE_JS_CLASS(CJS_Report); - JS_STATIC_METHOD(save, Report) - JS_STATIC_METHOD(writeText, Report); + JS_STATIC_METHOD(save, Report) + JS_STATIC_METHOD(writeText, Report); }; #endif // FPDFSDK_INCLUDE_JAVASCRIPT_REPORT_H_ diff --git a/fpdfsdk/include/javascript/resource.h b/fpdfsdk/include/javascript/resource.h index 433785984d..80629cf2ae 100644 --- a/fpdfsdk/include/javascript/resource.h +++ b/fpdfsdk/include/javascript/resource.h @@ -8,28 +8,28 @@ #define FPDFSDK_INCLUDE_JAVASCRIPT_RESOURCE_H_ #include "../../../core/include/fxcrt/fx_string.h" // For CFX_WideString. -#include "../fsdk_define.h" // For FX_UINT. +#include "../fsdk_define.h" // For FX_UINT. class CJS_Context; -#define IDS_STRING_JSALERT 25613 -#define IDS_STRING_JSPARAMERROR 25614 +#define IDS_STRING_JSALERT 25613 +#define IDS_STRING_JSPARAMERROR 25614 #define IDS_STRING_JSAFNUMBER_KEYSTROKE 25615 -#define IDS_STRING_JSPARAM_TOOLONG 25617 -#define IDS_STRING_JSPARSEDATE 25618 -#define IDS_STRING_JSRANGE1 25619 -#define IDS_STRING_JSRANGE2 25620 -#define IDS_STRING_JSRANGE3 25621 -#define IDS_STRING_NOTSUPPORT 25627 -#define IDS_STRING_JSBUSY 25628 -#define IDS_STRING_JSEVENT 25629 -#define IDS_STRING_RUN 25630 -#define IDS_STRING_JSPRINT1 25632 -#define IDS_STRING_JSPRINT2 25633 -#define IDS_STRING_JSNOGLOBAL 25635 -#define IDS_STRING_JSREADONLY 25636 -#define IDS_STRING_JSTYPEERROR 25637 -#define IDS_STRING_JSVALUEERROR 25638 +#define IDS_STRING_JSPARAM_TOOLONG 25617 +#define IDS_STRING_JSPARSEDATE 25618 +#define IDS_STRING_JSRANGE1 25619 +#define IDS_STRING_JSRANGE2 25620 +#define IDS_STRING_JSRANGE3 25621 +#define IDS_STRING_NOTSUPPORT 25627 +#define IDS_STRING_JSBUSY 25628 +#define IDS_STRING_JSEVENT 25629 +#define IDS_STRING_RUN 25630 +#define IDS_STRING_JSPRINT1 25632 +#define IDS_STRING_JSPRINT2 25633 +#define IDS_STRING_JSNOGLOBAL 25635 +#define IDS_STRING_JSREADONLY 25636 +#define IDS_STRING_JSTYPEERROR 25637 +#define IDS_STRING_JSVALUEERROR 25638 CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id); CFX_WideString JSFormatErrorString(const char* class_name, diff --git a/fpdfsdk/include/javascript/util.h b/fpdfsdk/include/javascript/util.h index ca4db349da..2e65bd3f58 100644 --- a/fpdfsdk/include/javascript/util.h +++ b/fpdfsdk/include/javascript/util.h @@ -11,40 +11,58 @@ #include "JS_Define.h" -class util : public CJS_EmbedObj -{ -public: - util(CJS_Object * pJSObject); - virtual ~util(void); - -public: - FX_BOOL printd(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL printf(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL printx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL scand(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - FX_BOOL byteToChar(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); - -public: - static void printd(const std::wstring &cFormat,CJS_Date Date,bool bXFAPicture, std::wstring &cPurpose); - static void printx(const std::string &cFormat,const std::string &cSource, std::string &cPurpose); - static int ParstDataType(std::wstring* sFormat); +class util : public CJS_EmbedObj { + public: + util(CJS_Object* pJSObject); + virtual ~util(void); + + public: + FX_BOOL printd(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL printf(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL printx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL scand(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + FX_BOOL byteToChar(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError); + + public: + static void printd(const std::wstring& cFormat, + CJS_Date Date, + bool bXFAPicture, + std::wstring& cPurpose); + static void printx(const std::string& cFormat, + const std::string& cSource, + std::string& cPurpose); + static int ParstDataType(std::wstring* sFormat); }; -class CJS_Util : public CJS_Object -{ -public: - CJS_Util(JSFXObject pObject) : CJS_Object(pObject) {}; - virtual ~CJS_Util(void){}; +class CJS_Util : public CJS_Object { + public: + CJS_Util(JSFXObject pObject) : CJS_Object(pObject){}; + virtual ~CJS_Util(void){}; - DECLARE_JS_CLASS(CJS_Util); + DECLARE_JS_CLASS(CJS_Util); - JS_STATIC_METHOD(printd, util); - JS_STATIC_METHOD(printf, util); - JS_STATIC_METHOD(printx, util); - JS_STATIC_METHOD(scand, util); - JS_STATIC_METHOD(byteToChar, util); + JS_STATIC_METHOD(printd, util); + JS_STATIC_METHOD(printf, util); + JS_STATIC_METHOD(printx, util); + JS_STATIC_METHOD(scand, util); + JS_STATIC_METHOD(byteToChar, util); }; -int64_t FX_atoi64(const char *nptr); +int64_t FX_atoi64(const char* nptr); #endif // FPDFSDK_INCLUDE_JAVASCRIPT_UTIL_H_ diff --git a/fpdfsdk/include/jsapi/fxjs_v8.h b/fpdfsdk/include/jsapi/fxjs_v8.h index e291898701..72f2a5de01 100644 --- a/fpdfsdk/include/jsapi/fxjs_v8.h +++ b/fpdfsdk/include/jsapi/fxjs_v8.h @@ -13,127 +13,202 @@ #include #include "../../../core/include/fxcrt/fx_string.h" // For CFX_WideString -typedef v8::Value JSValue; -typedef v8::Local JSObject; -typedef v8::Local JSFXObject; - -enum FXJSOBJTYPE -{ - JS_DYNAMIC = 0, - JS_STATIC = 1, +typedef v8::Value JSValue; +typedef v8::Local JSObject; +typedef v8::Local JSFXObject; + +enum FXJSOBJTYPE { + JS_DYNAMIC = 0, + JS_STATIC = 1, }; -enum FXJSVALUETYPE -{ - VT_unknown, - VT_string, - VT_number, - VT_boolean, - VT_date, - VT_object, - VT_fxobject, - VT_null, - VT_undefined +enum FXJSVALUETYPE { + VT_unknown, + VT_string, + VT_number, + VT_boolean, + VT_date, + VT_object, + VT_fxobject, + VT_null, + VT_undefined }; -struct FXJSErr -{ - const wchar_t* message; - const wchar_t* srcline; - unsigned linnum; +struct FXJSErr { + const wchar_t* message; + const wchar_t* srcline; + unsigned linnum; }; -/* --------------------------------------------- API --------------------------------------------- */ +/* --------------------------------------------- API + * --------------------------------------------- */ typedef v8::Isolate IJS_Runtime; class IFXJS_Context; class IFXJS_Runtime; -typedef void (*LP_CONSTRUCTOR)(IFXJS_Context* cc, v8::Local obj, v8::Local global); +typedef void (*LP_CONSTRUCTOR)(IFXJS_Context* cc, + v8::Local obj, + v8::Local global); typedef void (*LP_DESTRUCTOR)(v8::Local obj); - -int JS_DefineObj(IJS_Runtime* pJSRuntime, const wchar_t* sObjName, FXJSOBJTYPE eObjType, LP_CONSTRUCTOR pConstructor, LP_DESTRUCTOR pDestructor); -int JS_DefineObjMethod(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sMethodName, v8::FunctionCallback pMethodCall); -int JS_DefineObjProperty(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sPropName, v8::AccessorGetterCallback pPropGet, v8::AccessorSetterCallback pPropPut); -int JS_DefineObjAllProperties(IJS_Runtime* pJSRuntime, int nObjDefnID, v8::NamedPropertyQueryCallback pPropQurey, v8::NamedPropertyGetterCallback pPropGet, v8::NamedPropertySetterCallback pPropPut, v8::NamedPropertyDeleterCallback pPropDel); -int JS_DefineObjConst(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sConstName, v8::Local pDefault); -int JS_DefineGlobalMethod(IJS_Runtime* pJSRuntime, const wchar_t* sMethodName, v8::FunctionCallback pMethodCall); -int JS_DefineGlobalConst(IJS_Runtime* pJSRuntime, const wchar_t* sConstName, v8::Local pDefault); - -void JS_InitialRuntime(IJS_Runtime* pJSRuntime,IFXJS_Runtime* pFXRuntime, IFXJS_Context* context, v8::Global& v8PersistentContext); -void JS_ReleaseRuntime(IJS_Runtime* pJSRuntime, v8::Global& v8PersistentContext); -void JS_Initial(unsigned int embedderDataSlot); -void JS_Release(); -int JS_Parse(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, const wchar_t* script, long length, FXJSErr* perror); -int JS_Execute(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, const wchar_t* script, long length, FXJSErr* perror); -v8::Local JS_NewFxDynamicObj(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, int nObjDefnID); -v8::Local JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID); -void JS_SetThisObj(IJS_Runtime* pJSRuntime, int nThisObjID); -v8::Local JS_GetThisObj(IJS_Runtime * pJSRuntime); -int JS_GetObjDefnID(v8::Local pObj); -IJS_Runtime* JS_GetRuntime(v8::Local pObj); -int JS_GetObjDefnID(IJS_Runtime * pJSRuntime, const wchar_t* pObjName); -void JS_Error(v8::Isolate* isolate, const CFX_WideString& message); -unsigned JS_CalcHash(const wchar_t* main, unsigned nLen); -unsigned JS_CalcHash(const wchar_t* main); -const wchar_t* JS_GetTypeof(v8::Local pObj); -void JS_SetPrivate(IJS_Runtime* pJSRuntime, v8::Local pObj, void* p); -void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Local pObj); -void JS_SetPrivate(v8::Local pObj, void* p); -void* JS_GetPrivate(v8::Local pObj); -void JS_FreePrivate(void* p); -void JS_FreePrivate(v8::Local pObj); -v8::Local JS_GetObjectValue(v8::Local pObj); -v8::Local JS_GetObjectElement(IJS_Runtime* pJSRuntime, v8::Local pObj,const wchar_t* PropertyName); -v8::Local JS_GetObjectElementNames(IJS_Runtime* pJSRuntime, v8::Local pObj); -void JS_PutObjectString(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, const wchar_t* sValue); -void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, int nValue); -void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, float fValue); -void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, double dValue); -void JS_PutObjectBoolean(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, bool bValue); -void JS_PutObjectObject(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, v8::Local pPut); -void JS_PutObjectNull(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName); -unsigned JS_PutArrayElement(IJS_Runtime* pJSRuntime, v8::Local pArray,unsigned index,v8::Local pValue,FXJSVALUETYPE eType); -v8::Local JS_GetArrayElement(IJS_Runtime* pJSRuntime, v8::Local pArray,unsigned index); -unsigned JS_GetArrayLength(v8::Local pArray); -v8::Local JS_GetListValue(IJS_Runtime* pJSRuntime, v8::Local pList, int index); - - -v8::Local JS_NewArray(IJS_Runtime* pJSRuntime); -v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime,int number); -v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime,double number); -v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime,float number); -v8::Local JS_NewBoolean(IJS_Runtime* pJSRuntime,bool b); -v8::Local JS_NewObject(IJS_Runtime* pJSRuntime,v8::Local pObj); -v8::Local JS_NewObject2(IJS_Runtime* pJSRuntime,v8::Local pObj); -v8::Local JS_NewString(IJS_Runtime* pJSRuntime,const wchar_t* string); -v8::Local JS_NewString(IJS_Runtime* pJSRuntime,const wchar_t* string, unsigned nLen); -v8::Local JS_NewNull(); -v8::Local JS_NewDate(IJS_Runtime* pJSRuntime,double d); -v8::Local JS_NewValue(IJS_Runtime* pJSRuntime); - - -int JS_ToInt32(IJS_Runtime* pJSRuntime, v8::Local pValue); -bool JS_ToBoolean(IJS_Runtime* pJSRuntime, v8::Local pValue); -double JS_ToNumber(IJS_Runtime* pJSRuntime, v8::Local pValue); -v8::Local JS_ToObject(IJS_Runtime* pJSRuntime, v8::Local pValue); -CFX_WideString JS_ToString(IJS_Runtime* pJSRuntime, v8::Local pValue); -v8::Local JS_ToArray(IJS_Runtime* pJSRuntime, v8::Local pValue); -void JS_ValueCopy(v8::Local& pTo, v8::Local pFrom); - -double JS_GetDateTime(); -int JS_GetYearFromTime(double dt); -int JS_GetMonthFromTime(double dt); -int JS_GetDayFromTime(double dt); -int JS_GetHourFromTime(double dt); -int JS_GetMinFromTime(double dt); -int JS_GetSecFromTime(double dt); -double JS_DateParse(const wchar_t* string); -double JS_MakeDay(int nYear, int nMonth, int nDay); -double JS_MakeTime(int nHour, int nMin, int nSec, int nMs); -double JS_MakeDate(double day, double time); -bool JS_PortIsNan(double d); -double JS_LocalTime(double d); +int JS_DefineObj(IJS_Runtime* pJSRuntime, + const wchar_t* sObjName, + FXJSOBJTYPE eObjType, + LP_CONSTRUCTOR pConstructor, + LP_DESTRUCTOR pDestructor); +int JS_DefineObjMethod(IJS_Runtime* pJSRuntime, + int nObjDefnID, + const wchar_t* sMethodName, + v8::FunctionCallback pMethodCall); +int JS_DefineObjProperty(IJS_Runtime* pJSRuntime, + int nObjDefnID, + const wchar_t* sPropName, + v8::AccessorGetterCallback pPropGet, + v8::AccessorSetterCallback pPropPut); +int JS_DefineObjAllProperties(IJS_Runtime* pJSRuntime, + int nObjDefnID, + v8::NamedPropertyQueryCallback pPropQurey, + v8::NamedPropertyGetterCallback pPropGet, + v8::NamedPropertySetterCallback pPropPut, + v8::NamedPropertyDeleterCallback pPropDel); +int JS_DefineObjConst(IJS_Runtime* pJSRuntime, + int nObjDefnID, + const wchar_t* sConstName, + v8::Local pDefault); +int JS_DefineGlobalMethod(IJS_Runtime* pJSRuntime, + const wchar_t* sMethodName, + v8::FunctionCallback pMethodCall); +int JS_DefineGlobalConst(IJS_Runtime* pJSRuntime, + const wchar_t* sConstName, + v8::Local pDefault); + +void JS_InitialRuntime(IJS_Runtime* pJSRuntime, + IFXJS_Runtime* pFXRuntime, + IFXJS_Context* context, + v8::Global& v8PersistentContext); +void JS_ReleaseRuntime(IJS_Runtime* pJSRuntime, + v8::Global& v8PersistentContext); +void JS_Initial(unsigned int embedderDataSlot); +void JS_Release(); +int JS_Parse(IJS_Runtime* pJSRuntime, + IFXJS_Context* pJSContext, + const wchar_t* script, + long length, + FXJSErr* perror); +int JS_Execute(IJS_Runtime* pJSRuntime, + IFXJS_Context* pJSContext, + const wchar_t* script, + long length, + FXJSErr* perror); +v8::Local JS_NewFxDynamicObj(IJS_Runtime* pJSRuntime, + IFXJS_Context* pJSContext, + int nObjDefnID); +v8::Local JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID); +void JS_SetThisObj(IJS_Runtime* pJSRuntime, int nThisObjID); +v8::Local JS_GetThisObj(IJS_Runtime* pJSRuntime); +int JS_GetObjDefnID(v8::Local pObj); +IJS_Runtime* JS_GetRuntime(v8::Local pObj); +int JS_GetObjDefnID(IJS_Runtime* pJSRuntime, const wchar_t* pObjName); +void JS_Error(v8::Isolate* isolate, const CFX_WideString& message); +unsigned JS_CalcHash(const wchar_t* main, unsigned nLen); +unsigned JS_CalcHash(const wchar_t* main); +const wchar_t* JS_GetTypeof(v8::Local pObj); +void JS_SetPrivate(IJS_Runtime* pJSRuntime, + v8::Local pObj, + void* p); +void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Local pObj); +void JS_SetPrivate(v8::Local pObj, void* p); +void* JS_GetPrivate(v8::Local pObj); +void JS_FreePrivate(void* p); +void JS_FreePrivate(v8::Local pObj); +v8::Local JS_GetObjectValue(v8::Local pObj); +v8::Local JS_GetObjectElement(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName); +v8::Local JS_GetObjectElementNames(IJS_Runtime* pJSRuntime, + v8::Local pObj); +void JS_PutObjectString(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + const wchar_t* sValue); +void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + int nValue); +void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + float fValue); +void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + double dValue); +void JS_PutObjectBoolean(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + bool bValue); +void JS_PutObjectObject(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + v8::Local pPut); +void JS_PutObjectNull(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName); +unsigned JS_PutArrayElement(IJS_Runtime* pJSRuntime, + v8::Local pArray, + unsigned index, + v8::Local pValue, + FXJSVALUETYPE eType); +v8::Local JS_GetArrayElement(IJS_Runtime* pJSRuntime, + v8::Local pArray, + unsigned index); +unsigned JS_GetArrayLength(v8::Local pArray); +v8::Local JS_GetListValue(IJS_Runtime* pJSRuntime, + v8::Local pList, + int index); + +v8::Local JS_NewArray(IJS_Runtime* pJSRuntime); +v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime, int number); +v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime, double number); +v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime, float number); +v8::Local JS_NewBoolean(IJS_Runtime* pJSRuntime, bool b); +v8::Local JS_NewObject(IJS_Runtime* pJSRuntime, + v8::Local pObj); +v8::Local JS_NewObject2(IJS_Runtime* pJSRuntime, + v8::Local pObj); +v8::Local JS_NewString(IJS_Runtime* pJSRuntime, + const wchar_t* string); +v8::Local JS_NewString(IJS_Runtime* pJSRuntime, + const wchar_t* string, + unsigned nLen); +v8::Local JS_NewNull(); +v8::Local JS_NewDate(IJS_Runtime* pJSRuntime, double d); +v8::Local JS_NewValue(IJS_Runtime* pJSRuntime); + +int JS_ToInt32(IJS_Runtime* pJSRuntime, v8::Local pValue); +bool JS_ToBoolean(IJS_Runtime* pJSRuntime, v8::Local pValue); +double JS_ToNumber(IJS_Runtime* pJSRuntime, v8::Local pValue); +v8::Local JS_ToObject(IJS_Runtime* pJSRuntime, + v8::Local pValue); +CFX_WideString JS_ToString(IJS_Runtime* pJSRuntime, + v8::Local pValue); +v8::Local JS_ToArray(IJS_Runtime* pJSRuntime, + v8::Local pValue); +void JS_ValueCopy(v8::Local& pTo, v8::Local pFrom); + +double JS_GetDateTime(); +int JS_GetYearFromTime(double dt); +int JS_GetMonthFromTime(double dt); +int JS_GetDayFromTime(double dt); +int JS_GetHourFromTime(double dt); +int JS_GetMinFromTime(double dt); +int JS_GetSecFromTime(double dt); +double JS_DateParse(const wchar_t* string); +double JS_MakeDay(int nYear, int nMonth, int nDay); +double JS_MakeTime(int nHour, int nMin, int nSec, int nMs); +double JS_MakeDate(double day, double time); +bool JS_PortIsNan(double d); +double JS_LocalTime(double d); #endif // FPDFSDK_INCLUDE_JSAPI_FXJS_V8_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_Button.h b/fpdfsdk/include/pdfwindow/PWL_Button.h index 4937841819..363556762f 100644 --- a/fpdfsdk/include/pdfwindow/PWL_Button.h +++ b/fpdfsdk/include/pdfwindow/PWL_Button.h @@ -9,19 +9,18 @@ #include "PWL_Wnd.h" -class CPWL_Button : public CPWL_Wnd -{ -public: - CPWL_Button(); - virtual ~CPWL_Button(); +class CPWL_Button : public CPWL_Wnd { + public: + CPWL_Button(); + virtual ~CPWL_Button(); - virtual CFX_ByteString GetClassName() const; - virtual void OnCreate(PWL_CREATEPARAM & cp); - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); + virtual CFX_ByteString GetClassName() const; + virtual void OnCreate(PWL_CREATEPARAM& cp); + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); -protected: - FX_BOOL m_bMouseDown; + protected: + FX_BOOL m_bMouseDown; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_BUTTON_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_Caret.h b/fpdfsdk/include/pdfwindow/PWL_Caret.h index 6838bc49e7..7e61eeb66e 100644 --- a/fpdfsdk/include/pdfwindow/PWL_Caret.h +++ b/fpdfsdk/include/pdfwindow/PWL_Caret.h @@ -9,45 +9,43 @@ #include "PWL_Wnd.h" -struct PWL_CARET_INFO -{ -public: - PWL_CARET_INFO() : bVisible(FALSE), ptHead(0,0), ptFoot(0,0) - { - } - - FX_BOOL bVisible; - CPDF_Point ptHead; - CPDF_Point ptFoot; -}; +struct PWL_CARET_INFO { + public: + PWL_CARET_INFO() : bVisible(FALSE), ptHead(0, 0), ptFoot(0, 0) {} + FX_BOOL bVisible; + CPDF_Point ptHead; + CPDF_Point ptFoot; +}; -class CPWL_Caret : public CPWL_Wnd -{ -public: - CPWL_Caret(); - virtual ~CPWL_Caret(); - - virtual CFX_ByteString GetClassName() const; - virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - virtual void InvalidateRect(CPDF_Rect * pRect = NULL); - virtual void SetVisible(FX_BOOL bVisible) {} - virtual void TimerProc(); - void SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot); - CFX_ByteString GetCaretAppearanceStream(const CPDF_Point & ptOffset); - void SetInvalidRect(CPDF_Rect rc) {m_rcInvalid = rc;} - -private: - void GetCaretApp(CFX_ByteTextBuf & sAppStream,const CPDF_Point & ptOffset); - CPDF_Rect GetCaretRect() const; - - FX_BOOL m_bFlash; - CPDF_Point m_ptHead; - CPDF_Point m_ptFoot; - FX_FLOAT m_fWidth; - int32_t m_nDelay; - CPDF_Rect m_rcInvalid; +class CPWL_Caret : public CPWL_Wnd { + public: + CPWL_Caret(); + virtual ~CPWL_Caret(); + + virtual CFX_ByteString GetClassName() const; + virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream); + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + virtual void InvalidateRect(CPDF_Rect* pRect = NULL); + virtual void SetVisible(FX_BOOL bVisible) {} + virtual void TimerProc(); + void SetCaret(FX_BOOL bVisible, + const CPDF_Point& ptHead, + const CPDF_Point& ptFoot); + CFX_ByteString GetCaretAppearanceStream(const CPDF_Point& ptOffset); + void SetInvalidRect(CPDF_Rect rc) { m_rcInvalid = rc; } + + private: + void GetCaretApp(CFX_ByteTextBuf& sAppStream, const CPDF_Point& ptOffset); + CPDF_Rect GetCaretRect() const; + + FX_BOOL m_bFlash; + CPDF_Point m_ptHead; + CPDF_Point m_ptFoot; + FX_FLOAT m_fWidth; + int32_t m_nDelay; + CPDF_Rect m_rcInvalid; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_CARET_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_ComboBox.h b/fpdfsdk/include/pdfwindow/PWL_ComboBox.h index 7a86ccd0c2..98ae7ca986 100644 --- a/fpdfsdk/include/pdfwindow/PWL_ComboBox.h +++ b/fpdfsdk/include/pdfwindow/PWL_ComboBox.h @@ -11,108 +11,108 @@ #include "PWL_ListBox.h" #include "PWL_Wnd.h" -class CPWL_CBEdit : public CPWL_Edit -{ -public: - CPWL_CBEdit(){}; - virtual ~CPWL_CBEdit(){}; +class CPWL_CBEdit : public CPWL_Edit { + public: + CPWL_CBEdit(){}; + virtual ~CPWL_CBEdit(){}; }; -class CPWL_CBListBox : public CPWL_ListBox -{ -public: - CPWL_CBListBox(){}; - virtual ~CPWL_CBListBox(){}; +class CPWL_CBListBox : public CPWL_ListBox { + public: + CPWL_CBListBox(){}; + virtual ~CPWL_CBListBox(){}; -public: - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); + public: + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); - FX_BOOL OnKeyDownWithExit(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag); - FX_BOOL OnCharWithExit(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag); + FX_BOOL OnKeyDownWithExit(FX_WORD nChar, FX_BOOL& bExit, FX_DWORD nFlag); + FX_BOOL OnCharWithExit(FX_WORD nChar, FX_BOOL& bExit, FX_DWORD nFlag); }; -#define PWL_COMBOBOX_BUTTON_WIDTH 13 +#define PWL_COMBOBOX_BUTTON_WIDTH 13 -class CPWL_CBButton : public CPWL_Wnd -{ -public: - CPWL_CBButton(){}; - virtual ~CPWL_CBButton(){}; +class CPWL_CBButton : public CPWL_Wnd { + public: + CPWL_CBButton(){}; + virtual ~CPWL_CBButton(){}; -public: - virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); + public: + virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream); + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); }; -class CPWL_ComboBox : public CPWL_Wnd -{ -public: - CPWL_ComboBox(); - operator CPWL_Edit* () {return m_pEdit;} +class CPWL_ComboBox : public CPWL_Wnd { + public: + CPWL_ComboBox(); + operator CPWL_Edit*() { return m_pEdit; } + + public: + virtual CFX_ByteString GetClassName() const; + virtual void OnCreate(PWL_CREATEPARAM& cp); -public: - virtual CFX_ByteString GetClassName() const; - virtual void OnCreate(PWL_CREATEPARAM & cp); + virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); + virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); - virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); - virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); + virtual void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0); - virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0); + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); + virtual void RePosChildWnd(); - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); - virtual void RePosChildWnd(); + virtual CPDF_Rect GetFocusRect() const; - virtual CPDF_Rect GetFocusRect() const; + virtual void SetFocus(); + virtual void KillFocus(); - virtual void SetFocus(); - virtual void KillFocus(); + FX_BOOL IsModified() const; - FX_BOOL IsModified() const; + public: + void SetFillerNotify(IPWL_Filler_Notify* pNotify); -public: - void SetFillerNotify(IPWL_Filler_Notify* pNotify); + CFX_WideString GetText() const; + void SetText(const FX_WCHAR* text); - CFX_WideString GetText() const; - void SetText(const FX_WCHAR* text); + void AddString(const FX_WCHAR* string); + int32_t GetSelect() const; + void SetSelect(int32_t nItemIndex); - void AddString(const FX_WCHAR* string); - int32_t GetSelect() const; - void SetSelect(int32_t nItemIndex); + void SetEditSel(int32_t nStartChar, int32_t nEndChar); + void GetEditSel(int32_t& nStartChar, int32_t& nEndChar) const; + void Clear(); + void SelectAll(); + FX_BOOL IsPopup() const; - void SetEditSel(int32_t nStartChar,int32_t nEndChar); - void GetEditSel(int32_t & nStartChar, int32_t & nEndChar ) const; - void Clear(); - void SelectAll(); - FX_BOOL IsPopup() const; + void SetSelectText(); - void SetSelectText(); + private: + void CreateEdit(const PWL_CREATEPARAM& cp); + void CreateButton(const PWL_CREATEPARAM& cp); + void CreateListBox(const PWL_CREATEPARAM& cp); -private: - void CreateEdit(const PWL_CREATEPARAM & cp); - void CreateButton(const PWL_CREATEPARAM & cp); - void CreateListBox(const PWL_CREATEPARAM & cp); + void SetPopup(FX_BOOL bPopup); - void SetPopup(FX_BOOL bPopup); + private: + CPWL_CBEdit* m_pEdit; + CPWL_CBButton* m_pButton; + CPWL_CBListBox* m_pList; -private: - CPWL_CBEdit* m_pEdit; - CPWL_CBButton* m_pButton; - CPWL_CBListBox* m_pList; + FX_BOOL m_bPopup; + CPDF_Rect m_rcOldWindow; + int32_t m_nPopupWhere; + int32_t m_nSelectItem; + IPWL_Filler_Notify* m_pFillerNotify; - FX_BOOL m_bPopup; - CPDF_Rect m_rcOldWindow; - int32_t m_nPopupWhere; - int32_t m_nSelectItem; - IPWL_Filler_Notify* m_pFillerNotify; + public: + void AttachFFLData(void* pData) { m_pFormFiller = pData; } -public: - void AttachFFLData(void* pData) {m_pFormFiller = pData;} -private: - void* m_pFormFiller; + private: + void* m_pFormFiller; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_COMBOBOX_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_Edit.h b/fpdfsdk/include/pdfwindow/PWL_Edit.h index b5debac7fc..0281d37ed7 100644 --- a/fpdfsdk/include/pdfwindow/PWL_Edit.h +++ b/fpdfsdk/include/pdfwindow/PWL_Edit.h @@ -15,131 +15,171 @@ class CPWL_Edit; class IPWL_Filler_Notify; class IPWL_SpellCheck; -class IPWL_Filler_Notify -{ -public: - virtual ~IPWL_Filler_Notify() { } - virtual void QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax, - int32_t & nRet, FX_FLOAT & fPopupRet) = 0; //nRet: (0:bottom 1:top) - virtual void OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, int32_t nKeyCode, - CFX_WideString & strChange, const CFX_WideString& strChangeEx, - int nSelStart, int nSelEnd, - FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag) = 0; - virtual void OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_BOOL & bExit, FX_DWORD nFlag) = 0; - - virtual void OnPopupPreOpen(void* pPrivateData, FX_BOOL& bExit, FX_DWORD nFlag) = 0; - virtual void OnPopupPostOpen(void* pPrivateData, FX_BOOL& bExit, FX_DWORD nFlag) = 0; +class IPWL_Filler_Notify { + public: + virtual ~IPWL_Filler_Notify() {} + virtual void QueryWherePopup( + void* pPrivateData, + FX_FLOAT fPopupMin, + FX_FLOAT fPopupMax, + int32_t& nRet, + FX_FLOAT& fPopupRet) = 0; // nRet: (0:bottom 1:top) + virtual void OnBeforeKeyStroke(FX_BOOL bEditOrList, + void* pPrivateData, + int32_t nKeyCode, + CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + int nSelStart, + int nSelEnd, + FX_BOOL bKeyDown, + FX_BOOL& bRC, + FX_BOOL& bExit, + FX_DWORD nFlag) = 0; + virtual void OnAfterKeyStroke(FX_BOOL bEditOrList, + void* pPrivateData, + FX_BOOL& bExit, + FX_DWORD nFlag) = 0; + + virtual void OnPopupPreOpen(void* pPrivateData, + FX_BOOL& bExit, + FX_DWORD nFlag) = 0; + virtual void OnPopupPostOpen(void* pPrivateData, + FX_BOOL& bExit, + FX_DWORD nFlag) = 0; }; -class CPWL_Edit : public CPWL_EditCtrl, public IFX_Edit_OprNotify -{ -public: - CPWL_Edit(); - virtual ~CPWL_Edit(); - -public: - virtual CFX_ByteString GetClassName() const; - virtual void OnDestroy(); - virtual void OnCreated(); - virtual void RePosChildWnd(); - virtual CPDF_Rect GetClientRect() const; - - virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag); - - virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); - virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); - - virtual CPDF_Rect GetFocusRect() const; - -public: - void SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat = PEAH_LEFT, FX_BOOL bPaint = TRUE); //0:left 1:right 2:middle - void SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat = PEAV_TOP, FX_BOOL bPaint = TRUE); //0:top 1:bottom 2:center - - void SetCharArray(int32_t nCharArray); - void SetLimitChar(int32_t nLimitChar); - - void SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint = TRUE); - void SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint = TRUE); - - void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE); - - void EnableSpellCheck(FX_BOOL bEnabled); - - FX_BOOL CanSelectAll() const; - FX_BOOL CanClear() const; - FX_BOOL CanCopy() const; - FX_BOOL CanCut() const; - FX_BOOL CanPaste() const; - - virtual void CopyText(); - virtual void PasteText(); - virtual void CutText(); - - virtual void SetText(const FX_WCHAR* csText); - void ReplaceSel(const FX_WCHAR* csText); - - CFX_ByteString GetTextAppearanceStream(const CPDF_Point & ptOffset) const; - CFX_ByteString GetCaretAppearanceStream(const CPDF_Point & ptOffset) const; - CFX_ByteString GetSelectAppearanceStream(const CPDF_Point & ptOffset) const; - - FX_BOOL IsTextFull() const; - - static FX_FLOAT GetCharArrayAutoFontSize(CPDF_Font* pFont, const CPDF_Rect& rcPlate, int32_t nCharArray); - - void SetFillerNotify(IPWL_Filler_Notify* pNotify) {m_pFillerNotify = pNotify;} - - void GeneratePageObjects(CPDF_PageObjects* pPageObjects, - const CPDF_Point& ptOffset, CFX_ArrayTemplate& ObjArray); - void GeneratePageObjects(CPDF_PageObjects* pPageObjects, - const CPDF_Point& ptOffset); - -protected: - virtual void OnSetFocus(); - virtual void OnKillFocus(); - -protected: - virtual void OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); - virtual void OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); - virtual void OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); - virtual void OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); - virtual void OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); - virtual void OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); - virtual void OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); - virtual void OnAddUndo(IFX_Edit_UndoItem* pUndoItem); - -private: - CPVT_WordRange GetSelectWordRange() const; - virtual void ShowVScrollBar(FX_BOOL bShow); - FX_BOOL IsVScrollBarVisible() const; - void SetParamByFlag(); - - FX_FLOAT GetCharArrayAutoFontSize(int32_t nCharArray); - CPDF_Point GetWordRightBottomPoint(const CPVT_WordPlace& wpWord); - - CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1, const CPVT_WordRange& wr2); - CPVT_WordRange GetLatinWordsRange(const CPDF_Point & point) const; - CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace & place) const; - CPVT_WordRange GetArabicWordsRange(const CPVT_WordPlace & place) const; - CPVT_WordRange GetSameWordsRange(const CPVT_WordPlace & place, FX_BOOL bLatin, FX_BOOL bArabic) const; - - void AjustArabicWords(const CPVT_WordRange& wr); -public: - FX_BOOL IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag); -private: - IPWL_Filler_Notify* m_pFillerNotify; - IPWL_SpellCheck* m_pSpellCheck; - FX_BOOL m_bFocus; - CPDF_Rect m_rcOldWindow; -public: - void AttachFFLData(void* pData) {m_pFormFiller = pData;} -private: - void* m_pFormFiller; +class CPWL_Edit : public CPWL_EditCtrl, public IFX_Edit_OprNotify { + public: + CPWL_Edit(); + virtual ~CPWL_Edit(); + + public: + virtual CFX_ByteString GetClassName() const; + virtual void OnDestroy(); + virtual void OnCreated(); + virtual void RePosChildWnd(); + virtual CPDF_Rect GetClientRect() const; + + virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream); + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMouseWheel(short zDelta, + const CPDF_Point& point, + FX_DWORD nFlag); + + virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); + virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); + + virtual CPDF_Rect GetFocusRect() const; + + public: + void SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat = PEAH_LEFT, + FX_BOOL bPaint = TRUE); // 0:left 1:right 2:middle + void SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat = PEAV_TOP, + FX_BOOL bPaint = TRUE); // 0:top 1:bottom 2:center + + void SetCharArray(int32_t nCharArray); + void SetLimitChar(int32_t nLimitChar); + + void SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint = TRUE); + void SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint = TRUE); + + void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE); + + void EnableSpellCheck(FX_BOOL bEnabled); + + FX_BOOL CanSelectAll() const; + FX_BOOL CanClear() const; + FX_BOOL CanCopy() const; + FX_BOOL CanCut() const; + FX_BOOL CanPaste() const; + + virtual void CopyText(); + virtual void PasteText(); + virtual void CutText(); + + virtual void SetText(const FX_WCHAR* csText); + void ReplaceSel(const FX_WCHAR* csText); + + CFX_ByteString GetTextAppearanceStream(const CPDF_Point& ptOffset) const; + CFX_ByteString GetCaretAppearanceStream(const CPDF_Point& ptOffset) const; + CFX_ByteString GetSelectAppearanceStream(const CPDF_Point& ptOffset) const; + + FX_BOOL IsTextFull() const; + + static FX_FLOAT GetCharArrayAutoFontSize(CPDF_Font* pFont, + const CPDF_Rect& rcPlate, + int32_t nCharArray); + + void SetFillerNotify(IPWL_Filler_Notify* pNotify) { + m_pFillerNotify = pNotify; + } + + void GeneratePageObjects(CPDF_PageObjects* pPageObjects, + const CPDF_Point& ptOffset, + CFX_ArrayTemplate& ObjArray); + void GeneratePageObjects(CPDF_PageObjects* pPageObjects, + const CPDF_Point& ptOffset); + + protected: + virtual void OnSetFocus(); + virtual void OnKillFocus(); + + protected: + virtual void OnInsertWord(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace); + virtual void OnInsertReturn(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace); + virtual void OnBackSpace(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace); + virtual void OnDelete(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace); + virtual void OnClear(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace); + virtual void OnSetText(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace); + virtual void OnInsertText(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace); + virtual void OnAddUndo(IFX_Edit_UndoItem* pUndoItem); + + private: + CPVT_WordRange GetSelectWordRange() const; + virtual void ShowVScrollBar(FX_BOOL bShow); + FX_BOOL IsVScrollBarVisible() const; + void SetParamByFlag(); + + FX_FLOAT GetCharArrayAutoFontSize(int32_t nCharArray); + CPDF_Point GetWordRightBottomPoint(const CPVT_WordPlace& wpWord); + + CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1, + const CPVT_WordRange& wr2); + CPVT_WordRange GetLatinWordsRange(const CPDF_Point& point) const; + CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace& place) const; + CPVT_WordRange GetArabicWordsRange(const CPVT_WordPlace& place) const; + CPVT_WordRange GetSameWordsRange(const CPVT_WordPlace& place, + FX_BOOL bLatin, + FX_BOOL bArabic) const; + + void AjustArabicWords(const CPVT_WordRange& wr); + + public: + FX_BOOL IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag); + + private: + IPWL_Filler_Notify* m_pFillerNotify; + IPWL_SpellCheck* m_pSpellCheck; + FX_BOOL m_bFocus; + CPDF_Rect m_rcOldWindow; + + public: + void AttachFFLData(void* pData) { m_pFormFiller = pData; } + + private: + void* m_pFormFiller; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDIT_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_EditCtrl.h b/fpdfsdk/include/pdfwindow/PWL_EditCtrl.h index 273b3842c8..784ec61140 100644 --- a/fpdfsdk/include/pdfwindow/PWL_EditCtrl.h +++ b/fpdfsdk/include/pdfwindow/PWL_EditCtrl.h @@ -18,159 +18,172 @@ class IFX_Edit; class IPWL_Edit_Notify; struct CPVT_WordPlace; -enum PWL_EDIT_ALIGNFORMAT_H -{ - PEAH_LEFT = 0, - PEAH_MIDDLE, - PEAH_RIGHT +enum PWL_EDIT_ALIGNFORMAT_H { PEAH_LEFT = 0, PEAH_MIDDLE, PEAH_RIGHT }; + +enum PWL_EDIT_ALIGNFORMAT_V { PEAV_TOP = 0, PEAV_CENTER, PEAV_BOTTOM }; + +class IPWL_Edit_Notify { + public: + virtual ~IPWL_Edit_Notify() {} + // when the position of caret is changed in edit + virtual void OnCaretMove(int32_t x1, int32_t y1, int32_t x2, int32_t y2) {} + virtual void OnContentChange(const CPDF_Rect& rcContent) {} + // OprType: 0 InsertWord + // 1 InsertReturn + // 2 BackSpace + // 3 Delete + // 4 Clear + // 5 InsertText + // 6 SetText + virtual void OnInsertWord(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) {} + virtual void OnInsertReturn(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) {} + virtual void OnBackSpace(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) {} + virtual void OnDelete(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) {} + virtual void OnClear(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) {} + virtual void OnInsertText(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) {} + virtual void OnSetText(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) {} + virtual void OnAddUndo(CPWL_Edit* pEdit) {} }; -enum PWL_EDIT_ALIGNFORMAT_V -{ - PEAV_TOP = 0, - PEAV_CENTER, - PEAV_BOTTOM -}; - -class IPWL_Edit_Notify -{ -public: - virtual ~IPWL_Edit_Notify() { } - //when the position of caret is changed in edit - virtual void OnCaretMove(int32_t x1, int32_t y1, int32_t x2, int32_t y2) {} - virtual void OnContentChange(const CPDF_Rect& rcContent){} - //OprType: 0 InsertWord - //1 InsertReturn - //2 BackSpace - //3 Delete - //4 Clear - //5 InsertText - //6 SetText - virtual void OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} - virtual void OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} - virtual void OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} - virtual void OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} - virtual void OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} - virtual void OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} - virtual void OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} - virtual void OnAddUndo(CPWL_Edit* pEdit) {} -}; - -class CPWL_EditCtrl : public CPWL_Wnd, public IFX_Edit_Notify -{ - friend class CPWL_Edit_Notify; - -public: - CPWL_EditCtrl(); - virtual ~CPWL_EditCtrl(); - -public: - virtual void OnCreate(PWL_CREATEPARAM & cp); - virtual void OnCreated(); - - virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); - virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag); - virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0); - - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); - virtual void RePosChildWnd(); - virtual void SetFontSize(FX_FLOAT fFontSize); - virtual FX_FLOAT GetFontSize() const; - -public: - virtual void SetText(const FX_WCHAR* csText); - - virtual void CopyText(); - virtual void PasteText(); - virtual void CutText(); - - CPDF_Rect GetContentRect() const; - void GetCaretPos(int32_t& x, int32_t& y) const; - FX_BOOL IsModified() const; - - CFX_WideString GetText() const; - void SetSel(int32_t nStartChar,int32_t nEndChar); - void GetSel(int32_t & nStartChar, int32_t & nEndChar ) const; - void GetTextRange(const CPDF_Rect& rect, int32_t & nStartChar, int32_t & nEndChar) const; - CFX_WideString GetText(int32_t & nStartChar, int32_t & nEndChar) const; - void Clear(); - void SelectAll(); - - int32_t GetCaret() const; - void SetCaret(int32_t nPos); - int32_t GetTotalWords() const; - - void Paint(); - - void EnableRefresh(FX_BOOL bRefresh); - CPDF_Point GetScrollPos() const; - void SetScrollPos(const CPDF_Point& point); - - void SetEditNotify(IPWL_Edit_Notify* pNotify) {m_pEditNotify = pNotify;} - - void SetCharSet(uint8_t nCharSet){m_nCharSet = nCharSet;} - int32_t GetCharSet() const; - - void SetCodePage(int32_t nCodePage){m_nCodePage = nCodePage;} - int32_t GetCodePage() const {return m_nCodePage;} - - CPDF_Font * GetCaretFont() const; - FX_FLOAT GetCaretFontSize() const; - - FX_BOOL CanUndo() const; - FX_BOOL CanRedo() const; - void Redo(); - void Undo(); - - void SetReadyToInput(); -protected: - virtual void ShowVScrollBar(FX_BOOL bShow); - - virtual void InsertWord(FX_WORD word, int32_t nCharset); - virtual void InsertReturn(); - virtual void InsertText(const FX_WCHAR* csText); - - virtual void SetCursor(); - FX_BOOL IsWndHorV(); - - void Delete(); - void Backspace(); - -protected: - void GetCaretInfo(CPDF_Point & ptHead, CPDF_Point & ptFoot) const; - void SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot); - - void SetEditCaret(FX_BOOL bVisible); - -protected: - virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, - FX_FLOAT fContentMin, FX_FLOAT fContentMax, - FX_FLOAT fSmallStep, FX_FLOAT fBigStep){} - virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, - FX_FLOAT fContentMin, FX_FLOAT fContentMax, - FX_FLOAT fSmallStep, FX_FLOAT fBigStep); - virtual void IOnSetScrollPosX(FX_FLOAT fx){} - virtual void IOnSetScrollPosY(FX_FLOAT fy); - virtual void IOnSetCaret(FX_BOOL bVisible,const CPDF_Point & ptHead,const CPDF_Point & ptFoot, const CPVT_WordPlace& place); - virtual void IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps); - virtual void IOnContentChange(const CPDF_Rect& rcContent); - virtual void IOnInvalidateRect(CPDF_Rect * pRect); - -private: - void CreateEditCaret(const PWL_CREATEPARAM & cp); - -protected: - IFX_Edit* m_pEdit; - CPWL_Caret* m_pEditCaret; - FX_BOOL m_bMouseDown; - IPWL_Edit_Notify* m_pEditNotify; - -private: - int32_t m_nCharSet; - int32_t m_nCodePage; +class CPWL_EditCtrl : public CPWL_Wnd, public IFX_Edit_Notify { + friend class CPWL_Edit_Notify; + + public: + CPWL_EditCtrl(); + virtual ~CPWL_EditCtrl(); + + public: + virtual void OnCreate(PWL_CREATEPARAM& cp); + virtual void OnCreated(); + + virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); + virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag); + virtual void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0); + + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); + virtual void RePosChildWnd(); + virtual void SetFontSize(FX_FLOAT fFontSize); + virtual FX_FLOAT GetFontSize() const; + + public: + virtual void SetText(const FX_WCHAR* csText); + + virtual void CopyText(); + virtual void PasteText(); + virtual void CutText(); + + CPDF_Rect GetContentRect() const; + void GetCaretPos(int32_t& x, int32_t& y) const; + FX_BOOL IsModified() const; + + CFX_WideString GetText() const; + void SetSel(int32_t nStartChar, int32_t nEndChar); + void GetSel(int32_t& nStartChar, int32_t& nEndChar) const; + void GetTextRange(const CPDF_Rect& rect, + int32_t& nStartChar, + int32_t& nEndChar) const; + CFX_WideString GetText(int32_t& nStartChar, int32_t& nEndChar) const; + void Clear(); + void SelectAll(); + + int32_t GetCaret() const; + void SetCaret(int32_t nPos); + int32_t GetTotalWords() const; + + void Paint(); + + void EnableRefresh(FX_BOOL bRefresh); + CPDF_Point GetScrollPos() const; + void SetScrollPos(const CPDF_Point& point); + + void SetEditNotify(IPWL_Edit_Notify* pNotify) { m_pEditNotify = pNotify; } + + void SetCharSet(uint8_t nCharSet) { m_nCharSet = nCharSet; } + int32_t GetCharSet() const; + + void SetCodePage(int32_t nCodePage) { m_nCodePage = nCodePage; } + int32_t GetCodePage() const { return m_nCodePage; } + + CPDF_Font* GetCaretFont() const; + FX_FLOAT GetCaretFontSize() const; + + FX_BOOL CanUndo() const; + FX_BOOL CanRedo() const; + void Redo(); + void Undo(); + + void SetReadyToInput(); + + protected: + virtual void ShowVScrollBar(FX_BOOL bShow); + + virtual void InsertWord(FX_WORD word, int32_t nCharset); + virtual void InsertReturn(); + virtual void InsertText(const FX_WCHAR* csText); + + virtual void SetCursor(); + FX_BOOL IsWndHorV(); + + void Delete(); + void Backspace(); + + protected: + void GetCaretInfo(CPDF_Point& ptHead, CPDF_Point& ptFoot) const; + void SetCaret(FX_BOOL bVisible, + const CPDF_Point& ptHead, + const CPDF_Point& ptFoot); + + void SetEditCaret(FX_BOOL bVisible); + + protected: + virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep) {} + virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep); + virtual void IOnSetScrollPosX(FX_FLOAT fx) {} + virtual void IOnSetScrollPosY(FX_FLOAT fy); + virtual void IOnSetCaret(FX_BOOL bVisible, + const CPDF_Point& ptHead, + const CPDF_Point& ptFoot, + const CPVT_WordPlace& place); + virtual void IOnCaretChange(const CPVT_SecProps& secProps, + const CPVT_WordProps& wordProps); + virtual void IOnContentChange(const CPDF_Rect& rcContent); + virtual void IOnInvalidateRect(CPDF_Rect* pRect); + + private: + void CreateEditCaret(const PWL_CREATEPARAM& cp); + + protected: + IFX_Edit* m_pEdit; + CPWL_Caret* m_pEditCaret; + FX_BOOL m_bMouseDown; + IPWL_Edit_Notify* m_pEditNotify; + + private: + int32_t m_nCharSet; + int32_t m_nCodePage; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDITCTRL_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_FontMap.h b/fpdfsdk/include/pdfwindow/PWL_FontMap.h index 562d5df9c1..0f5124ca02 100644 --- a/fpdfsdk/include/pdfwindow/PWL_FontMap.h +++ b/fpdfsdk/include/pdfwindow/PWL_FontMap.h @@ -13,118 +13,127 @@ class CPDF_Document; class IFX_SystemHandler; -struct CPWL_FontMap_Data -{ - CPDF_Font* pFont; - int32_t nCharset; - CFX_ByteString sFontName; +struct CPWL_FontMap_Data { + CPDF_Font* pFont; + int32_t nCharset; + CFX_ByteString sFontName; }; -struct CPWL_FontMap_Native -{ - int32_t nCharset; - CFX_ByteString sFontName; +struct CPWL_FontMap_Native { + int32_t nCharset; + CFX_ByteString sFontName; }; #ifndef ANSI_CHARSET -#define ANSI_CHARSET 0 -#define DEFAULT_CHARSET 1 -#define SYMBOL_CHARSET 2 -#define SHIFTJIS_CHARSET 128 -#define HANGEUL_CHARSET 129 -#define HANGUL_CHARSET 129 -#define GB2312_CHARSET 134 -#define CHINESEBIG5_CHARSET 136 -#define OEM_CHARSET 255 -#define JOHAB_CHARSET 130 -#define HEBREW_CHARSET 177 -#define ARABIC_CHARSET 178 -#define GREEK_CHARSET 161 -#define TURKISH_CHARSET 162 -#define VIETNAMESE_CHARSET 163 -#define THAI_CHARSET 222 -#define EASTEUROPE_CHARSET 238 -#define RUSSIAN_CHARSET 204 -#define BALTIC_CHARSET 186 +#define ANSI_CHARSET 0 +#define DEFAULT_CHARSET 1 +#define SYMBOL_CHARSET 2 +#define SHIFTJIS_CHARSET 128 +#define HANGEUL_CHARSET 129 +#define HANGUL_CHARSET 129 +#define GB2312_CHARSET 134 +#define CHINESEBIG5_CHARSET 136 +#define OEM_CHARSET 255 +#define JOHAB_CHARSET 130 +#define HEBREW_CHARSET 177 +#define ARABIC_CHARSET 178 +#define GREEK_CHARSET 161 +#define TURKISH_CHARSET 162 +#define VIETNAMESE_CHARSET 163 +#define THAI_CHARSET 222 +#define EASTEUROPE_CHARSET 238 +#define RUSSIAN_CHARSET 204 +#define BALTIC_CHARSET 186 #endif -class CPWL_FontMap : public IFX_Edit_FontMap -{ -public: - CPWL_FontMap(IFX_SystemHandler* pSystemHandler); - virtual ~CPWL_FontMap(); - - virtual CPDF_Font* GetPDFFont(int32_t nFontIndex); - virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex); - virtual int32_t GetWordFontIndex(FX_WORD word, int32_t nCharset, int32_t nFontIndex); - virtual int32_t CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word); - virtual int32_t CharSetFromUnicode(FX_WORD word, int32_t nOldCharset); - -public: - virtual void Initial(const FX_CHAR* fontname = NULL); - void SetSystemHandler(IFX_SystemHandler* pSystemHandler); - - int32_t GetFontMapCount() const; - const CPWL_FontMap_Data* GetFontMapData(int32_t nIndex) const; - -public: - static int32_t GetNativeCharset(); - CFX_ByteString GetNativeFontName(int32_t nCharset); - - static CFX_ByteString GetDefaultFontByCharset(int32_t nCharset); - - CPDF_Font* AddFontToDocument(CPDF_Document* pDoc, CFX_ByteString& sFontName, uint8_t nCharset); - static FX_BOOL IsStandardFont(const CFX_ByteString& sFontName); - CPDF_Font* AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sFontName); - CPDF_Font* AddSystemFont(CPDF_Document* pDoc, CFX_ByteString& sFontName, - uint8_t nCharset); - -protected: - virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset); - virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias); - FX_BOOL KnowWord(int32_t nFontIndex, FX_WORD word); - - virtual CPDF_Document* GetDocument(); - - void Empty(); - int32_t GetFontIndex(const CFX_ByteString& sFontName, int32_t nCharset, FX_BOOL bFind); - int32_t GetPWLFontIndex(FX_WORD word, int32_t nCharset); - int32_t AddFontData(CPDF_Font* pFont, const CFX_ByteString& sFontAlias, int32_t nCharset = DEFAULT_CHARSET); - - CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName, int32_t nCharset); - CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName); - -private: - CFX_ByteString GetFontName(int32_t nFontIndex); - int32_t FindFont(const CFX_ByteString& sFontName, int32_t nCharset = DEFAULT_CHARSET); - - CFX_ByteString GetNativeFont(int32_t nCharset); - -public: - using CharsetFontMap = FPDF_CharsetFontMap; - static const CharsetFontMap defaultTTFMap[]; - -protected: - CFX_ArrayTemplate m_aData; - CFX_ArrayTemplate m_aNativeFont; - -private: - CPDF_Document* m_pPDFDoc; - IFX_SystemHandler* m_pSystemHandler; +class CPWL_FontMap : public IFX_Edit_FontMap { + public: + CPWL_FontMap(IFX_SystemHandler* pSystemHandler); + virtual ~CPWL_FontMap(); + + virtual CPDF_Font* GetPDFFont(int32_t nFontIndex); + virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex); + virtual int32_t GetWordFontIndex(FX_WORD word, + int32_t nCharset, + int32_t nFontIndex); + virtual int32_t CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word); + virtual int32_t CharSetFromUnicode(FX_WORD word, int32_t nOldCharset); + + public: + virtual void Initial(const FX_CHAR* fontname = NULL); + void SetSystemHandler(IFX_SystemHandler* pSystemHandler); + + int32_t GetFontMapCount() const; + const CPWL_FontMap_Data* GetFontMapData(int32_t nIndex) const; + + public: + static int32_t GetNativeCharset(); + CFX_ByteString GetNativeFontName(int32_t nCharset); + + static CFX_ByteString GetDefaultFontByCharset(int32_t nCharset); + + CPDF_Font* AddFontToDocument(CPDF_Document* pDoc, + CFX_ByteString& sFontName, + uint8_t nCharset); + static FX_BOOL IsStandardFont(const CFX_ByteString& sFontName); + CPDF_Font* AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sFontName); + CPDF_Font* AddSystemFont(CPDF_Document* pDoc, + CFX_ByteString& sFontName, + uint8_t nCharset); + + protected: + virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias, + int32_t nCharset); + virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias); + FX_BOOL KnowWord(int32_t nFontIndex, FX_WORD word); + + virtual CPDF_Document* GetDocument(); + + void Empty(); + int32_t GetFontIndex(const CFX_ByteString& sFontName, + int32_t nCharset, + FX_BOOL bFind); + int32_t GetPWLFontIndex(FX_WORD word, int32_t nCharset); + int32_t AddFontData(CPDF_Font* pFont, + const CFX_ByteString& sFontAlias, + int32_t nCharset = DEFAULT_CHARSET); + + CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName, + int32_t nCharset); + CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName); + + private: + CFX_ByteString GetFontName(int32_t nFontIndex); + int32_t FindFont(const CFX_ByteString& sFontName, + int32_t nCharset = DEFAULT_CHARSET); + + CFX_ByteString GetNativeFont(int32_t nCharset); + + public: + using CharsetFontMap = FPDF_CharsetFontMap; + static const CharsetFontMap defaultTTFMap[]; + + protected: + CFX_ArrayTemplate m_aData; + CFX_ArrayTemplate m_aNativeFont; + + private: + CPDF_Document* m_pPDFDoc; + IFX_SystemHandler* m_pSystemHandler; }; -class CPWL_DocFontMap : public CPWL_FontMap -{ -public: - CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, CPDF_Document* pAttachedDoc); - virtual ~CPWL_DocFontMap(); +class CPWL_DocFontMap : public CPWL_FontMap { + public: + CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, + CPDF_Document* pAttachedDoc); + virtual ~CPWL_DocFontMap(); - virtual CPDF_Document* GetDocument(); + virtual CPDF_Document* GetDocument(); -private: - CPDF_Document* m_pAttachedDoc; + private: + CPDF_Document* m_pAttachedDoc; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_Icon.h b/fpdfsdk/include/pdfwindow/PWL_Icon.h index cff4e8ca69..7183f0245c 100644 --- a/fpdfsdk/include/pdfwindow/PWL_Icon.h +++ b/fpdfsdk/include/pdfwindow/PWL_Icon.h @@ -10,51 +10,48 @@ #include "../../../core/include/fxcrt/fx_string.h" #include "PWL_Wnd.h" -class CPWL_Image : public CPWL_Wnd -{ -public: - CPWL_Image(); - virtual ~CPWL_Image(); - - virtual CFX_ByteString GetImageAppStream(); - - virtual void GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale); - virtual void GetImageOffset(FX_FLOAT & x,FX_FLOAT & y); - virtual CPDF_Stream * GetPDFStream(); - -public: - void SetPDFStream(CPDF_Stream* pStream); - void GetImageSize(FX_FLOAT & fWidth,FX_FLOAT & fHeight); - CPDF_Matrix GetImageMatrix(); - CFX_ByteString GetImageAlias(); - void SetImageAlias(const FX_CHAR* sImageAlias); - -protected: - CPDF_Stream* m_pPDFStream; - CFX_ByteString m_sImageAlias; +class CPWL_Image : public CPWL_Wnd { + public: + CPWL_Image(); + virtual ~CPWL_Image(); + + virtual CFX_ByteString GetImageAppStream(); + + virtual void GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale); + virtual void GetImageOffset(FX_FLOAT& x, FX_FLOAT& y); + virtual CPDF_Stream* GetPDFStream(); + + public: + void SetPDFStream(CPDF_Stream* pStream); + void GetImageSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight); + CPDF_Matrix GetImageMatrix(); + CFX_ByteString GetImageAlias(); + void SetImageAlias(const FX_CHAR* sImageAlias); + + protected: + CPDF_Stream* m_pPDFStream; + CFX_ByteString m_sImageAlias; }; -class CPWL_Icon : public CPWL_Image -{ -public: - CPWL_Icon(); - virtual ~CPWL_Icon(); +class CPWL_Icon : public CPWL_Image { + public: + CPWL_Icon(); + virtual ~CPWL_Icon(); - virtual CPDF_IconFit * GetIconFit(){return m_pIconFit;}; + virtual CPDF_IconFit* GetIconFit() { return m_pIconFit; }; - virtual void GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale); - virtual void GetImageOffset(FX_FLOAT & x,FX_FLOAT & y); + virtual void GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale); + virtual void GetImageOffset(FX_FLOAT& x, FX_FLOAT& y); - int32_t GetScaleMethod(); - FX_BOOL IsProportionalScale(); - void GetIconPosition(FX_FLOAT & fLeft, FX_FLOAT & fBottom); - FX_BOOL GetFittingBounds(); + int32_t GetScaleMethod(); + FX_BOOL IsProportionalScale(); + void GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom); + FX_BOOL GetFittingBounds(); - void SetIconFit(CPDF_IconFit * pIconFit){m_pIconFit = pIconFit;}; + void SetIconFit(CPDF_IconFit* pIconFit) { m_pIconFit = pIconFit; }; -private: - CPDF_IconFit * m_pIconFit; + private: + CPDF_IconFit* m_pIconFit; }; - #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_ICON_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_IconList.h b/fpdfsdk/include/pdfwindow/PWL_IconList.h index b8bc3d2957..30a12dcd9b 100644 --- a/fpdfsdk/include/pdfwindow/PWL_IconList.h +++ b/fpdfsdk/include/pdfwindow/PWL_IconList.h @@ -17,112 +17,114 @@ class CPWL_IconList_Content; class CPWL_IconList; class CPWL_Label; -class IPWL_IconList_Notify -{ -public: - virtual ~IPWL_IconList_Notify() { } - virtual void OnNoteListSelChanged(int32_t nItemIndex) = 0; +class IPWL_IconList_Notify { + public: + virtual ~IPWL_IconList_Notify() {} + virtual void OnNoteListSelChanged(int32_t nItemIndex) = 0; }; -class CPWL_IconList_Item : public CPWL_Wnd -{ -public: - CPWL_IconList_Item(); - virtual ~CPWL_IconList_Item(); - - virtual CFX_ByteString GetClassName() const; - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); - virtual void RePosChildWnd(); - - void SetSelect(FX_BOOL bSelected); - FX_BOOL IsSelected() const; - void SetData(void* pData); - void SetIcon(int32_t nIconIndex); - void SetText(const CFX_WideString& str); - void SetIconFillColor(const CPWL_Color& color); - CFX_WideString GetText() const; - -protected: - virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth); - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - - virtual void OnEnabled(); - virtual void OnDisabled(); - -private: - int32_t m_nIconIndex; - void* m_pData; - FX_BOOL m_bSelected; - CPWL_Label* m_pText; - CPWL_Color m_crIcon; +class CPWL_IconList_Item : public CPWL_Wnd { + public: + CPWL_IconList_Item(); + virtual ~CPWL_IconList_Item(); + + virtual CFX_ByteString GetClassName() const; + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); + virtual void RePosChildWnd(); + + void SetSelect(FX_BOOL bSelected); + FX_BOOL IsSelected() const; + void SetData(void* pData); + void SetIcon(int32_t nIconIndex); + void SetText(const CFX_WideString& str); + void SetIconFillColor(const CPWL_Color& color); + CFX_WideString GetText() const; + + protected: + virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth); + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + + virtual void OnEnabled(); + virtual void OnDisabled(); + + private: + int32_t m_nIconIndex; + void* m_pData; + FX_BOOL m_bSelected; + CPWL_Label* m_pText; + CPWL_Color m_crIcon; }; -class CPWL_IconList_Content : public CPWL_ListCtrl -{ -public: - CPWL_IconList_Content(int32_t nListCount); - virtual ~CPWL_IconList_Content(); - - void SetSelect(int32_t nIndex); - int32_t GetSelect() const; - void SetNotify(IPWL_IconList_Notify* pNotify); - void EnableNotify(FX_BOOL bNotify); - void SetListData(int32_t nItemIndex, void* pData); - void SetListIcon(int32_t nItemIndex, int32_t nIconIndex); - void SetListString(int32_t nItemIndex, const CFX_WideString& str); - void SetIconFillColor(const CPWL_Color& color); - CFX_WideString GetListString(int32_t nItemIndex) const; - IPWL_IconList_Notify* GetNotify() const; - void ScrollToItem(int32_t nItemIndex); - -protected: - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); - -private: - CPWL_IconList_Item* GetListItem(int32_t nItemIndex) const; - void SelectItem(int32_t nItemIndex, FX_BOOL bSelect); - int32_t FindItemIndex(const CPDF_Point& point); - - int32_t m_nSelectIndex; - IPWL_IconList_Notify* m_pNotify; - FX_BOOL m_bEnableNotify; - FX_BOOL m_bMouseDown; - int32_t m_nListCount; +class CPWL_IconList_Content : public CPWL_ListCtrl { + public: + CPWL_IconList_Content(int32_t nListCount); + virtual ~CPWL_IconList_Content(); + + void SetSelect(int32_t nIndex); + int32_t GetSelect() const; + void SetNotify(IPWL_IconList_Notify* pNotify); + void EnableNotify(FX_BOOL bNotify); + void SetListData(int32_t nItemIndex, void* pData); + void SetListIcon(int32_t nItemIndex, int32_t nIconIndex); + void SetListString(int32_t nItemIndex, const CFX_WideString& str); + void SetIconFillColor(const CPWL_Color& color); + CFX_WideString GetListString(int32_t nItemIndex) const; + IPWL_IconList_Notify* GetNotify() const; + void ScrollToItem(int32_t nItemIndex); + + protected: + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); + + private: + CPWL_IconList_Item* GetListItem(int32_t nItemIndex) const; + void SelectItem(int32_t nItemIndex, FX_BOOL bSelect); + int32_t FindItemIndex(const CPDF_Point& point); + + int32_t m_nSelectIndex; + IPWL_IconList_Notify* m_pNotify; + FX_BOOL m_bEnableNotify; + FX_BOOL m_bMouseDown; + int32_t m_nListCount; }; -class CPWL_IconList : public CPWL_Wnd -{ -public: - CPWL_IconList(int32_t nListCount); - virtual ~CPWL_IconList(); - - virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag); - - void SetSelect(int32_t nIndex); - void SetTopItem(int32_t nIndex); - int32_t GetSelect() const; - void SetNotify(IPWL_IconList_Notify* pNotify); - void EnableNotify(FX_BOOL bNotify); - void SetListData(int32_t nItemIndex, void* pData); - void SetListIcon(int32_t nItemIndex, int32_t nIconIndex); - void SetListString(int32_t nItemIndex, const CFX_WideString& str); - void SetIconFillColor(const CPWL_Color& color); - CFX_WideString GetListString(int32_t nItemIndex) const; - -protected: - virtual void OnCreated(); - virtual void RePosChildWnd(); - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); - - virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0); - -private: - CPWL_IconList_Content* m_pListContent; - int32_t m_nListCount; +class CPWL_IconList : public CPWL_Wnd { + public: + CPWL_IconList(int32_t nListCount); + virtual ~CPWL_IconList(); + + virtual FX_BOOL OnMouseWheel(short zDelta, + const CPDF_Point& point, + FX_DWORD nFlag); + + void SetSelect(int32_t nIndex); + void SetTopItem(int32_t nIndex); + int32_t GetSelect() const; + void SetNotify(IPWL_IconList_Notify* pNotify); + void EnableNotify(FX_BOOL bNotify); + void SetListData(int32_t nItemIndex, void* pData); + void SetListIcon(int32_t nItemIndex, int32_t nIconIndex); + void SetListString(int32_t nItemIndex, const CFX_WideString& str); + void SetIconFillColor(const CPWL_Color& color); + CFX_WideString GetListString(int32_t nItemIndex) const; + + protected: + virtual void OnCreated(); + virtual void RePosChildWnd(); + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); + + virtual void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0); + + private: + CPWL_IconList_Content* m_pListContent; + int32_t m_nListCount; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_ICONLIST_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_Label.h b/fpdfsdk/include/pdfwindow/PWL_Label.h index 3df547e0b2..b6cb7f557c 100644 --- a/fpdfsdk/include/pdfwindow/PWL_Label.h +++ b/fpdfsdk/include/pdfwindow/PWL_Label.h @@ -11,35 +11,35 @@ class IFX_Edit; -class CPWL_Label : public CPWL_Wnd -{ -public: - CPWL_Label(); - virtual ~CPWL_Label(); - - virtual CFX_ByteString GetClassName() const; - virtual void SetFontSize(FX_FLOAT fFontSize); - virtual FX_FLOAT GetFontSize() const; - - void SetText(const FX_WCHAR* csText); - CFX_WideString GetText() const; - void SetLimitChar(int32_t nLimitChar); - void SetHorzScale(int32_t nHorzScale); - void SetCharSpace(FX_FLOAT fCharSpace); - CPDF_Rect GetContentRect() const; - int32_t GetTotalWords(); - CFX_ByteString GetTextAppearanceStream(const CPDF_Point & ptOffset) const; - -protected: - virtual void OnCreated(); - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); - virtual void RePosChildWnd(); - -private: - void SetParamByFlag(); - - IFX_Edit* m_pEdit; +class CPWL_Label : public CPWL_Wnd { + public: + CPWL_Label(); + virtual ~CPWL_Label(); + + virtual CFX_ByteString GetClassName() const; + virtual void SetFontSize(FX_FLOAT fFontSize); + virtual FX_FLOAT GetFontSize() const; + + void SetText(const FX_WCHAR* csText); + CFX_WideString GetText() const; + void SetLimitChar(int32_t nLimitChar); + void SetHorzScale(int32_t nHorzScale); + void SetCharSpace(FX_FLOAT fCharSpace); + CPDF_Rect GetContentRect() const; + int32_t GetTotalWords(); + CFX_ByteString GetTextAppearanceStream(const CPDF_Point& ptOffset) const; + + protected: + virtual void OnCreated(); + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream); + virtual void RePosChildWnd(); + + private: + void SetParamByFlag(); + + IFX_Edit* m_pEdit; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_LABEL_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_ListBox.h b/fpdfsdk/include/pdfwindow/PWL_ListBox.h index 7c37fb30ef..b9372eff9c 100644 --- a/fpdfsdk/include/pdfwindow/PWL_ListBox.h +++ b/fpdfsdk/include/pdfwindow/PWL_ListBox.h @@ -15,89 +15,107 @@ class CPWL_List_Notify; class CPWL_ListBox; class IPWL_Filler_Notify; -class CPWL_List_Notify : public IFX_List_Notify -{ -public: - CPWL_List_Notify(CPWL_ListBox * pList); - virtual ~CPWL_List_Notify(); - - void IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, - FX_FLOAT fContentMin, FX_FLOAT fContentMax, - FX_FLOAT fSmallStep, FX_FLOAT fBigStep){} - void IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, - FX_FLOAT fContentMin, FX_FLOAT fContentMax, - FX_FLOAT fSmallStep, FX_FLOAT fBigStep); - void IOnSetScrollPosX(FX_FLOAT fx){} - void IOnSetScrollPosY(FX_FLOAT fy); - void IOnSetCaret(FX_BOOL bVisible,const CPDF_Point & ptHead,const CPDF_Point & ptFoot, const CPVT_WordPlace& place); - void IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps); - void IOnInvalidateRect(CPDF_Rect * pRect); - -private: - CPWL_ListBox* m_pList; +class CPWL_List_Notify : public IFX_List_Notify { + public: + CPWL_List_Notify(CPWL_ListBox* pList); + virtual ~CPWL_List_Notify(); + + void IOnSetScrollInfoX(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep) {} + void IOnSetScrollInfoY(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep); + void IOnSetScrollPosX(FX_FLOAT fx) {} + void IOnSetScrollPosY(FX_FLOAT fy); + void IOnSetCaret(FX_BOOL bVisible, + const CPDF_Point& ptHead, + const CPDF_Point& ptFoot, + const CPVT_WordPlace& place); + void IOnCaretChange(const CPVT_SecProps& secProps, + const CPVT_WordProps& wordProps); + void IOnInvalidateRect(CPDF_Rect* pRect); + + private: + CPWL_ListBox* m_pList; }; -class CPWL_ListBox : public CPWL_Wnd -{ -public: - CPWL_ListBox(); - virtual ~CPWL_ListBox(); - - virtual CFX_ByteString GetClassName() const; - virtual void OnCreated(); - virtual void OnDestroy(); - virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - - virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); - virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag); - virtual void KillFocus(); - - virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0); - virtual void RePosChildWnd(); - virtual CFX_WideString GetText() const; - virtual CPDF_Rect GetFocusRect() const; - virtual void SetFontSize(FX_FLOAT fFontSize); - virtual FX_FLOAT GetFontSize() const; - - void OnNotifySelChanged(FX_BOOL bKeyDown, FX_BOOL & bExit , FX_DWORD nFlag); - - void AddString(const FX_WCHAR* string); - void SetTopVisibleIndex(int32_t nItemIndex); - void ScrollToListItem(int32_t nItemIndex); - void ResetContent(); - void Reset(); - void Select(int32_t nItemIndex); - void SetCaret(int32_t nItemIndex); - void SetHoverSel(FX_BOOL bHoverSel); - - int32_t GetCount() const; - FX_BOOL IsMultipleSel() const; - int32_t GetCaretIndex() const; - int32_t GetCurSel() const; - FX_BOOL IsItemSelected(int32_t nItemIndex) const; - int32_t GetTopVisibleIndex() const; - int32_t FindNext(int32_t nIndex,FX_WCHAR nChar) const; - CPDF_Rect GetContentRect() const; - FX_FLOAT GetFirstHeight() const; - CPDF_Rect GetListRect() const; - - void SetFillerNotify(IPWL_Filler_Notify* pNotify) {m_pFillerNotify = pNotify;} - -protected: - IFX_List* m_pList; - CPWL_List_Notify* m_pListNotify; - FX_BOOL m_bMouseDown; - FX_BOOL m_bHoverSel; - IPWL_Filler_Notify* m_pFillerNotify; -public: - void AttachFFLData(void* pData) {m_pFormFiller = pData;} -private: - void* m_pFormFiller; +class CPWL_ListBox : public CPWL_Wnd { + public: + CPWL_ListBox(); + virtual ~CPWL_ListBox(); + + virtual CFX_ByteString GetClassName() const; + virtual void OnCreated(); + virtual void OnDestroy(); + virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream); + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + + virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); + virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMouseWheel(short zDelta, + const CPDF_Point& point, + FX_DWORD nFlag); + virtual void KillFocus(); + + virtual void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0); + virtual void RePosChildWnd(); + virtual CFX_WideString GetText() const; + virtual CPDF_Rect GetFocusRect() const; + virtual void SetFontSize(FX_FLOAT fFontSize); + virtual FX_FLOAT GetFontSize() const; + + void OnNotifySelChanged(FX_BOOL bKeyDown, FX_BOOL& bExit, FX_DWORD nFlag); + + void AddString(const FX_WCHAR* string); + void SetTopVisibleIndex(int32_t nItemIndex); + void ScrollToListItem(int32_t nItemIndex); + void ResetContent(); + void Reset(); + void Select(int32_t nItemIndex); + void SetCaret(int32_t nItemIndex); + void SetHoverSel(FX_BOOL bHoverSel); + + int32_t GetCount() const; + FX_BOOL IsMultipleSel() const; + int32_t GetCaretIndex() const; + int32_t GetCurSel() const; + FX_BOOL IsItemSelected(int32_t nItemIndex) const; + int32_t GetTopVisibleIndex() const; + int32_t FindNext(int32_t nIndex, FX_WCHAR nChar) const; + CPDF_Rect GetContentRect() const; + FX_FLOAT GetFirstHeight() const; + CPDF_Rect GetListRect() const; + + void SetFillerNotify(IPWL_Filler_Notify* pNotify) { + m_pFillerNotify = pNotify; + } + + protected: + IFX_List* m_pList; + CPWL_List_Notify* m_pListNotify; + FX_BOOL m_bMouseDown; + FX_BOOL m_bHoverSel; + IPWL_Filler_Notify* m_pFillerNotify; + + public: + void AttachFFLData(void* pData) { m_pFormFiller = pData; } + + private: + void* m_pFormFiller; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_LISTBOX_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_ListCtrl.h b/fpdfsdk/include/pdfwindow/PWL_ListCtrl.h index c107a0cf5e..cd90692150 100644 --- a/fpdfsdk/include/pdfwindow/PWL_ListCtrl.h +++ b/fpdfsdk/include/pdfwindow/PWL_ListCtrl.h @@ -9,39 +9,39 @@ #include "PWL_Wnd.h" -class CPWL_ListCtrl : public CPWL_Wnd -{ -public: - CPWL_ListCtrl(); - virtual ~CPWL_ListCtrl(); - - void SetScrollPos(const CPDF_Point& point); - CPDF_Point GetScrollPos() const; - CPDF_Rect GetScrollArea() const; - void SetItemSpace(FX_FLOAT fSpace); - void SetTopSpace(FX_FLOAT fSpace); - void SetBottomSpace(FX_FLOAT fSpace); - void ResetFace(); - void ResetContent(int32_t nStart); - int32_t GetItemIndex(CPWL_Wnd* pItem); - FX_FLOAT GetContentsHeight(FX_FLOAT fLimitWidth); - CPDF_Point InToOut(const CPDF_Point& point) const; - CPDF_Point OutToIn(const CPDF_Point& point) const; - CPDF_Rect InToOut(const CPDF_Rect& rect) const; - CPDF_Rect OutToIn(const CPDF_Rect& rect) const; - -protected: - virtual void RePosChildWnd(); - virtual void DrawChildAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - -private: - void ResetAll(FX_BOOL bMove,int32_t nStart); - - CPDF_Rect m_rcContent; - CPDF_Point m_ptScroll; - FX_FLOAT m_fItemSpace; - FX_FLOAT m_fTopSpace; - FX_FLOAT m_fBottomSpace; +class CPWL_ListCtrl : public CPWL_Wnd { + public: + CPWL_ListCtrl(); + virtual ~CPWL_ListCtrl(); + + void SetScrollPos(const CPDF_Point& point); + CPDF_Point GetScrollPos() const; + CPDF_Rect GetScrollArea() const; + void SetItemSpace(FX_FLOAT fSpace); + void SetTopSpace(FX_FLOAT fSpace); + void SetBottomSpace(FX_FLOAT fSpace); + void ResetFace(); + void ResetContent(int32_t nStart); + int32_t GetItemIndex(CPWL_Wnd* pItem); + FX_FLOAT GetContentsHeight(FX_FLOAT fLimitWidth); + CPDF_Point InToOut(const CPDF_Point& point) const; + CPDF_Point OutToIn(const CPDF_Point& point) const; + CPDF_Rect InToOut(const CPDF_Rect& rect) const; + CPDF_Rect OutToIn(const CPDF_Rect& rect) const; + + protected: + virtual void RePosChildWnd(); + virtual void DrawChildAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + + private: + void ResetAll(FX_BOOL bMove, int32_t nStart); + + CPDF_Rect m_rcContent; + CPDF_Point m_ptScroll; + FX_FLOAT m_fItemSpace; + FX_FLOAT m_fTopSpace; + FX_FLOAT m_fBottomSpace; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_LISTCTRL_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_Note.h b/fpdfsdk/include/pdfwindow/PWL_Note.h index 29b7857e20..4f18fa20d0 100644 --- a/fpdfsdk/include/pdfwindow/PWL_Note.h +++ b/fpdfsdk/include/pdfwindow/PWL_Note.h @@ -28,333 +28,342 @@ class IPWL_NoteItem; class IPWL_NoteNotify; class IPopup_Note; -class IPWL_NoteNotify -{ -public: - virtual ~IPWL_NoteNotify() { } - virtual void OnNoteMove(const FX_RECT& rtWin) = 0; - virtual void OnNoteShow(FX_BOOL bShow) = 0; - virtual void OnNoteActivate(FX_BOOL bActive) = 0; - virtual void OnNoteClose() = 0; - virtual void OnItemCreate(IPWL_NoteItem* pItem) = 0; - virtual void OnItemDelete(IPWL_NoteItem* pItem) = 0; - virtual void OnSetAuthorName(IPWL_NoteItem* pItem) = 0; - virtual void OnSetBkColor(IPWL_NoteItem* pItem) = 0; - virtual void OnSetContents(IPWL_NoteItem* pItem) = 0; - virtual void OnSetDateTime(IPWL_NoteItem* pItem) = 0; - virtual void OnSetSubjectName(IPWL_NoteItem* pItem) = 0; - virtual void OnPopupMenu(int32_t x, int32_t y) = 0; - virtual void OnPopupMenu(IPWL_NoteItem* pItem, int32_t x, int32_t y) = 0; +class IPWL_NoteNotify { + public: + virtual ~IPWL_NoteNotify() {} + virtual void OnNoteMove(const FX_RECT& rtWin) = 0; + virtual void OnNoteShow(FX_BOOL bShow) = 0; + virtual void OnNoteActivate(FX_BOOL bActive) = 0; + virtual void OnNoteClose() = 0; + virtual void OnItemCreate(IPWL_NoteItem* pItem) = 0; + virtual void OnItemDelete(IPWL_NoteItem* pItem) = 0; + virtual void OnSetAuthorName(IPWL_NoteItem* pItem) = 0; + virtual void OnSetBkColor(IPWL_NoteItem* pItem) = 0; + virtual void OnSetContents(IPWL_NoteItem* pItem) = 0; + virtual void OnSetDateTime(IPWL_NoteItem* pItem) = 0; + virtual void OnSetSubjectName(IPWL_NoteItem* pItem) = 0; + virtual void OnPopupMenu(int32_t x, int32_t y) = 0; + virtual void OnPopupMenu(IPWL_NoteItem* pItem, int32_t x, int32_t y) = 0; }; -class IPWL_NoteHandler -{ -public: - virtual ~IPWL_NoteHandler() { } - virtual void OnNoteColorChanged(const CPWL_Color& color) = 0; +class IPWL_NoteHandler { + public: + virtual ~IPWL_NoteHandler() {} + virtual void OnNoteColorChanged(const CPWL_Color& color) = 0; }; -class IPWL_NoteItem -{ -public: - virtual ~IPWL_NoteItem() { } - virtual void SetPrivateData(void* pData) = 0; - virtual void SetBkColor(const CPWL_Color& color) = 0; - virtual void SetSubjectName(const CFX_WideString& sName) = 0; - virtual void SetAuthorName(const CFX_WideString& sName) = 0; - virtual void SetDateTime(FX_SYSTEMTIME time) = 0; - virtual void SetContents(const CFX_WideString& sContents) = 0; - - virtual IPWL_NoteItem* CreateSubItem() = 0; - virtual int32_t CountSubItems() const = 0; - virtual IPWL_NoteItem* GetSubItems(int32_t index) const = 0; - virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem) = 0; - virtual void SetFocus() = 0; - - virtual IPWL_NoteItem* GetParentItem() const = 0; - virtual void* GetPrivateData() const = 0; - virtual CFX_WideString GetAuthorName() const = 0; - virtual CPWL_Color GetBkColor() const = 0; - virtual CFX_WideString GetContents() const = 0; - virtual FX_SYSTEMTIME GetDateTime() const = 0; - virtual CFX_WideString GetSubjectName() const = 0; - - virtual CPWL_Edit* GetEdit() const = 0; +class IPWL_NoteItem { + public: + virtual ~IPWL_NoteItem() {} + virtual void SetPrivateData(void* pData) = 0; + virtual void SetBkColor(const CPWL_Color& color) = 0; + virtual void SetSubjectName(const CFX_WideString& sName) = 0; + virtual void SetAuthorName(const CFX_WideString& sName) = 0; + virtual void SetDateTime(FX_SYSTEMTIME time) = 0; + virtual void SetContents(const CFX_WideString& sContents) = 0; + + virtual IPWL_NoteItem* CreateSubItem() = 0; + virtual int32_t CountSubItems() const = 0; + virtual IPWL_NoteItem* GetSubItems(int32_t index) const = 0; + virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem) = 0; + virtual void SetFocus() = 0; + + virtual IPWL_NoteItem* GetParentItem() const = 0; + virtual void* GetPrivateData() const = 0; + virtual CFX_WideString GetAuthorName() const = 0; + virtual CPWL_Color GetBkColor() const = 0; + virtual CFX_WideString GetContents() const = 0; + virtual FX_SYSTEMTIME GetDateTime() const = 0; + virtual CFX_WideString GetSubjectName() const = 0; + + virtual CPWL_Edit* GetEdit() const = 0; }; -class CPWL_Note_Icon : public CPWL_Wnd -{ -public: - CPWL_Note_Icon(); - virtual ~CPWL_Note_Icon(); +class CPWL_Note_Icon : public CPWL_Wnd { + public: + CPWL_Note_Icon(); + virtual ~CPWL_Note_Icon(); - void SetIconType(int32_t nType); + void SetIconType(int32_t nType); -public: + public: + protected: + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); -protected: - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - -private: - int32_t m_nType; + private: + int32_t m_nType; }; -class CPWL_Note_CloseBox : public CPWL_Button -{ -public: - CPWL_Note_CloseBox(); - virtual ~CPWL_Note_CloseBox(); +class CPWL_Note_CloseBox : public CPWL_Button { + public: + CPWL_Note_CloseBox(); + virtual ~CPWL_Note_CloseBox(); -protected: - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); + protected: + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); -private: - FX_BOOL m_bMouseDown; + private: + FX_BOOL m_bMouseDown; }; -class CPWL_Note_LBBox : public CPWL_Wnd -{ -public: - CPWL_Note_LBBox(); - virtual ~CPWL_Note_LBBox(); +class CPWL_Note_LBBox : public CPWL_Wnd { + public: + CPWL_Note_LBBox(); + virtual ~CPWL_Note_LBBox(); -protected: - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); + protected: + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); }; -class CPWL_Note_RBBox : public CPWL_Wnd -{ -public: - CPWL_Note_RBBox(); - virtual ~CPWL_Note_RBBox(); +class CPWL_Note_RBBox : public CPWL_Wnd { + public: + CPWL_Note_RBBox(); + virtual ~CPWL_Note_RBBox(); -protected: - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); + protected: + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); }; -class CPWL_Note_Edit : public CPWL_Edit -{ -public: - CPWL_Note_Edit(); - virtual ~CPWL_Note_Edit(); - - void EnableNotify(FX_BOOL bEnable) {m_bEnableNotify = bEnable;} - virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth); - FX_FLOAT GetItemLeftMargin(); - FX_FLOAT GetItemRightMargin(); - - virtual void SetText(const FX_WCHAR* csText); - -protected: - virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0); - virtual void RePosChildWnd(); - virtual void OnSetFocus(); - virtual void OnKillFocus(); - -private: - FX_BOOL m_bEnableNotify; - FX_FLOAT m_fOldItemHeight; - FX_BOOL m_bSizeChanged; - FX_FLOAT m_fOldMin; - FX_FLOAT m_fOldMax; +class CPWL_Note_Edit : public CPWL_Edit { + public: + CPWL_Note_Edit(); + virtual ~CPWL_Note_Edit(); + + void EnableNotify(FX_BOOL bEnable) { m_bEnableNotify = bEnable; } + virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth); + FX_FLOAT GetItemLeftMargin(); + FX_FLOAT GetItemRightMargin(); + + virtual void SetText(const FX_WCHAR* csText); + + protected: + virtual void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0); + virtual void RePosChildWnd(); + virtual void OnSetFocus(); + virtual void OnKillFocus(); + + private: + FX_BOOL m_bEnableNotify; + FX_FLOAT m_fOldItemHeight; + FX_BOOL m_bSizeChanged; + FX_FLOAT m_fOldMin; + FX_FLOAT m_fOldMax; }; -class CPWL_Note_Options : public CPWL_Wnd -{ -public: - CPWL_Note_Options(); - virtual ~CPWL_Note_Options(); +class CPWL_Note_Options : public CPWL_Wnd { + public: + CPWL_Note_Options(); + virtual ~CPWL_Note_Options(); - CPDF_Rect GetContentRect() const; - virtual void SetTextColor(const CPWL_Color & color); - void SetText(const CFX_WideString& sText); + CPDF_Rect GetContentRect() const; + virtual void SetTextColor(const CPWL_Color& color); + void SetText(const CFX_WideString& sText); -protected: - virtual void RePosChildWnd(); - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); + protected: + virtual void RePosChildWnd(); + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); -private: - CPWL_Label* m_pText; + private: + CPWL_Label* m_pText; }; -class CPWL_Note_Contents : public CPWL_ListCtrl -{ -public: - CPWL_Note_Contents(); - virtual ~CPWL_Note_Contents(); +class CPWL_Note_Contents : public CPWL_ListCtrl { + public: + CPWL_Note_Contents(); + virtual ~CPWL_Note_Contents(); - virtual CFX_ByteString GetClassName() const; - virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0); - virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual CFX_ByteString GetClassName() const; + virtual void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0); + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); - void SetEditFocus(FX_BOOL bLast); - CPWL_Edit* GetEdit() const; + void SetEditFocus(FX_BOOL bLast); + CPWL_Edit* GetEdit() const; -public: - void SetText(const CFX_WideString& sText); - CFX_WideString GetText() const; + public: + void SetText(const CFX_WideString& sText); + CFX_WideString GetText() const; - CPWL_NoteItem* CreateSubItem(); - void DeleteSubItem(IPWL_NoteItem* pNoteItem); - int32_t CountSubItems() const; - IPWL_NoteItem* GetSubItems(int32_t index) const; + CPWL_NoteItem* CreateSubItem(); + void DeleteSubItem(IPWL_NoteItem* pNoteItem); + int32_t CountSubItems() const; + IPWL_NoteItem* GetSubItems(int32_t index) const; - virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point); - void EnableRead(FX_BOOL bEnabled); - void EnableModify(FX_BOOL bEnabled); + virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point); + void EnableRead(FX_BOOL bEnabled); + void EnableModify(FX_BOOL bEnabled); -protected: - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); + protected: + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); -private: - CPWL_Note_Edit* m_pEdit; + private: + CPWL_Note_Edit* m_pEdit; }; -class CPWL_NoteItem : public CPWL_Wnd, public IPWL_NoteItem -{ -public: - CPWL_NoteItem(); - virtual ~CPWL_NoteItem(); - -public: - virtual void SetPrivateData(void* pData); - virtual void SetBkColor(const CPWL_Color& color); - virtual void SetSubjectName(const CFX_WideString& sName); - virtual void SetAuthorName(const CFX_WideString& sName); - virtual void SetDateTime(FX_SYSTEMTIME time); - virtual void SetContents(const CFX_WideString& sContents); - - virtual IPWL_NoteItem* CreateSubItem(); - virtual int32_t CountSubItems() const; - virtual IPWL_NoteItem* GetSubItems(int32_t index) const; - virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem); - virtual void SetFocus(){SetNoteFocus(FALSE);} - - virtual IPWL_NoteItem* GetParentItem() const; - virtual void* GetPrivateData() const; - virtual CFX_WideString GetAuthorName() const; - virtual CPWL_Color GetBkColor() const; - virtual CFX_WideString GetContents() const; - virtual FX_SYSTEMTIME GetDateTime() const; - virtual CFX_WideString GetSubjectName() const; - virtual FX_BOOL IsTopItem() const { return FALSE;} - virtual CPWL_Edit* GetEdit() const; - -public: - virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); - virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual CFX_ByteString GetClassName() const; - virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point); - virtual IPWL_NoteItem* GetFocusedNoteItem() const; - - virtual void ResetSubjectName(int32_t nItemIndex); - void EnableRead(FX_BOOL bEnabled); - void EnableModify(FX_BOOL bEnabled); - -protected: - virtual void RePosChildWnd(); - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); - - virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0); - -public: - virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth); - virtual FX_FLOAT GetItemLeftMargin(); - virtual FX_FLOAT GetItemRightMargin(); - CPWL_NoteItem* CreateNoteItem(); - CPWL_NoteItem* GetParentNoteItem() const; - - void SetNoteFocus(FX_BOOL bLast); - void OnContentsValidate(); - - void OnCreateNoteItem(); - -protected: - void PopupNoteItemMenu(const CPDF_Point& point); - - virtual const CPWL_Note* GetNote() const; - virtual IPWL_NoteNotify* GetNoteNotify() const; - -protected: - CPWL_Label* m_pSubject; - CPWL_Label* m_pDateTime; - CPWL_Note_Contents* m_pContents; - -private: - void* m_pPrivateData; - FX_SYSTEMTIME m_dtNote; - CFX_WideString m_sAuthor; - - FX_FLOAT m_fOldItemHeight; - FX_BOOL m_bSizeChanged; - FX_BOOL m_bAllowModify; +class CPWL_NoteItem : public CPWL_Wnd, public IPWL_NoteItem { + public: + CPWL_NoteItem(); + virtual ~CPWL_NoteItem(); + + public: + virtual void SetPrivateData(void* pData); + virtual void SetBkColor(const CPWL_Color& color); + virtual void SetSubjectName(const CFX_WideString& sName); + virtual void SetAuthorName(const CFX_WideString& sName); + virtual void SetDateTime(FX_SYSTEMTIME time); + virtual void SetContents(const CFX_WideString& sContents); + + virtual IPWL_NoteItem* CreateSubItem(); + virtual int32_t CountSubItems() const; + virtual IPWL_NoteItem* GetSubItems(int32_t index) const; + virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem); + virtual void SetFocus() { SetNoteFocus(FALSE); } + + virtual IPWL_NoteItem* GetParentItem() const; + virtual void* GetPrivateData() const; + virtual CFX_WideString GetAuthorName() const; + virtual CPWL_Color GetBkColor() const; + virtual CFX_WideString GetContents() const; + virtual FX_SYSTEMTIME GetDateTime() const; + virtual CFX_WideString GetSubjectName() const; + virtual FX_BOOL IsTopItem() const { return FALSE; } + virtual CPWL_Edit* GetEdit() const; + + public: + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual CFX_ByteString GetClassName() const; + virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point); + virtual IPWL_NoteItem* GetFocusedNoteItem() const; + + virtual void ResetSubjectName(int32_t nItemIndex); + void EnableRead(FX_BOOL bEnabled); + void EnableModify(FX_BOOL bEnabled); + + protected: + virtual void RePosChildWnd(); + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); + + virtual void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0); + + public: + virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth); + virtual FX_FLOAT GetItemLeftMargin(); + virtual FX_FLOAT GetItemRightMargin(); + CPWL_NoteItem* CreateNoteItem(); + CPWL_NoteItem* GetParentNoteItem() const; + + void SetNoteFocus(FX_BOOL bLast); + void OnContentsValidate(); + + void OnCreateNoteItem(); + + protected: + void PopupNoteItemMenu(const CPDF_Point& point); + + virtual const CPWL_Note* GetNote() const; + virtual IPWL_NoteNotify* GetNoteNotify() const; + + protected: + CPWL_Label* m_pSubject; + CPWL_Label* m_pDateTime; + CPWL_Note_Contents* m_pContents; + + private: + void* m_pPrivateData; + FX_SYSTEMTIME m_dtNote; + CFX_WideString m_sAuthor; + + FX_FLOAT m_fOldItemHeight; + FX_BOOL m_bSizeChanged; + FX_BOOL m_bAllowModify; }; -class CPWL_Note : public CPWL_NoteItem -{ -public: - CPWL_Note(IPopup_Note* pPopupNote, IPWL_NoteNotify* pNoteNotify, IPWL_NoteHandler* pNoteHandler); - virtual ~CPWL_Note(); - -public: - virtual void SetSubjectName(const CFX_WideString& sName); - virtual void SetAuthorName(const CFX_WideString& sName); - virtual CFX_WideString GetAuthorName() const; - virtual void SetBkColor(const CPWL_Color& color); - virtual void ResetSubjectName(int32_t nItemIndex){} - virtual FX_BOOL IsTopItem() const {return TRUE;} - virtual const CPWL_Note* GetNote() const; - virtual IPWL_NoteNotify* GetNoteNotify() const; - -public: - IPWL_NoteItem* Reply(); - void EnableNotify(FX_BOOL bEnabled); - void SetIconType(int32_t nType); - void SetOptionsText(const CFX_WideString& sText); - void EnableRead(FX_BOOL bEnabled); - void EnableModify(FX_BOOL bEnabled); - - CFX_WideString GetReplyString() const; - void SetReplyString(const CFX_WideString& string); - - //0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close / 5-options - int32_t NoteHitTest(const CPDF_Point& point) const; - CPDF_Rect GetCaptionRect() const {return m_rcCaption;} - IPopup_Note* GetPopupNote() const {return m_pPopupNote;} - -public: - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag); - -protected: - virtual void RePosChildWnd(); - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); - - virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0); - - FX_BOOL ResetScrollBar(); - void RePosNoteChildren(); - FX_BOOL ScrollBarShouldVisible(); - -private: - CPWL_Label* m_pAuthor; - CPWL_Note_Icon* m_pIcon; - CPWL_Note_CloseBox* m_pCloseBox; - CPWL_Note_LBBox* m_pLBBox; - CPWL_Note_RBBox* m_pRBBox; - CPWL_ScrollBar* m_pContentsBar; - CPWL_Note_Options* m_pOptions; - IPWL_NoteNotify* m_pNoteNotify; - FX_BOOL m_bResizing; - PWL_SCROLL_INFO m_OldScrollInfo; - CPDF_Rect m_rcCaption; - FX_BOOL m_bEnalbleNotify; - IPopup_Note* m_pPopupNote; - CFX_WideString m_sReplyString; +class CPWL_Note : public CPWL_NoteItem { + public: + CPWL_Note(IPopup_Note* pPopupNote, + IPWL_NoteNotify* pNoteNotify, + IPWL_NoteHandler* pNoteHandler); + virtual ~CPWL_Note(); + + public: + virtual void SetSubjectName(const CFX_WideString& sName); + virtual void SetAuthorName(const CFX_WideString& sName); + virtual CFX_WideString GetAuthorName() const; + virtual void SetBkColor(const CPWL_Color& color); + virtual void ResetSubjectName(int32_t nItemIndex) {} + virtual FX_BOOL IsTopItem() const { return TRUE; } + virtual const CPWL_Note* GetNote() const; + virtual IPWL_NoteNotify* GetNoteNotify() const; + + public: + IPWL_NoteItem* Reply(); + void EnableNotify(FX_BOOL bEnabled); + void SetIconType(int32_t nType); + void SetOptionsText(const CFX_WideString& sText); + void EnableRead(FX_BOOL bEnabled); + void EnableModify(FX_BOOL bEnabled); + + CFX_WideString GetReplyString() const; + void SetReplyString(const CFX_WideString& string); + + // 0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close + // / 5-options + int32_t NoteHitTest(const CPDF_Point& point) const; + CPDF_Rect GetCaptionRect() const { return m_rcCaption; } + IPopup_Note* GetPopupNote() const { return m_pPopupNote; } + + public: + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMouseWheel(short zDelta, + const CPDF_Point& point, + FX_DWORD nFlag); + + protected: + virtual void RePosChildWnd(); + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); + + virtual void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0); + + FX_BOOL ResetScrollBar(); + void RePosNoteChildren(); + FX_BOOL ScrollBarShouldVisible(); + + private: + CPWL_Label* m_pAuthor; + CPWL_Note_Icon* m_pIcon; + CPWL_Note_CloseBox* m_pCloseBox; + CPWL_Note_LBBox* m_pLBBox; + CPWL_Note_RBBox* m_pRBBox; + CPWL_ScrollBar* m_pContentsBar; + CPWL_Note_Options* m_pOptions; + IPWL_NoteNotify* m_pNoteNotify; + FX_BOOL m_bResizing; + PWL_SCROLL_INFO m_OldScrollInfo; + CPDF_Rect m_rcCaption; + FX_BOOL m_bEnalbleNotify; + IPopup_Note* m_pPopupNote; + CFX_WideString m_sReplyString; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_NOTE_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_ScrollBar.h b/fpdfsdk/include/pdfwindow/PWL_ScrollBar.h index 0390222545..a149a01416 100644 --- a/fpdfsdk/include/pdfwindow/PWL_ScrollBar.h +++ b/fpdfsdk/include/pdfwindow/PWL_ScrollBar.h @@ -12,155 +12,150 @@ class CPWL_SBButton; class CPWL_ScrollBar; -struct PWL_SCROLL_INFO -{ -public: - PWL_SCROLL_INFO() : fContentMin(0.0f), fContentMax(0.0f), fPlateWidth(0.0f), fBigStep(0.0f), fSmallStep(0.0f) - { - } - FX_FLOAT fContentMin; - FX_FLOAT fContentMax; - FX_FLOAT fPlateWidth; - FX_FLOAT fBigStep; - FX_FLOAT fSmallStep; +struct PWL_SCROLL_INFO { + public: + PWL_SCROLL_INFO() + : fContentMin(0.0f), + fContentMax(0.0f), + fPlateWidth(0.0f), + fBigStep(0.0f), + fSmallStep(0.0f) {} + FX_FLOAT fContentMin; + FX_FLOAT fContentMax; + FX_FLOAT fPlateWidth; + FX_FLOAT fBigStep; + FX_FLOAT fSmallStep; }; -enum PWL_SCROLLBAR_TYPE -{ - SBT_HSCROLL, - SBT_VSCROLL -}; +enum PWL_SCROLLBAR_TYPE { SBT_HSCROLL, SBT_VSCROLL }; -enum PWL_SBBUTTON_TYPE -{ - PSBT_MIN, - PSBT_MAX, - PSBT_POS -}; +enum PWL_SBBUTTON_TYPE { PSBT_MIN, PSBT_MAX, PSBT_POS }; + +class CPWL_SBButton : public CPWL_Wnd { + public: + CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType, + PWL_SBBUTTON_TYPE eButtonType); + virtual ~CPWL_SBButton(); -class CPWL_SBButton : public CPWL_Wnd -{ -public: - CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,PWL_SBBUTTON_TYPE eButtonType); - virtual ~CPWL_SBButton(); - -public: - virtual CFX_ByteString GetClassName() const; - virtual void OnCreate(PWL_CREATEPARAM & cp); - virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag); - -protected: - PWL_SCROLLBAR_TYPE m_eScrollBarType; - PWL_SBBUTTON_TYPE m_eSBButtonType; - - FX_BOOL m_bMouseDown; + public: + virtual CFX_ByteString GetClassName() const; + virtual void OnCreate(PWL_CREATEPARAM& cp); + virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream); + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag); + + protected: + PWL_SCROLLBAR_TYPE m_eScrollBarType; + PWL_SBBUTTON_TYPE m_eSBButtonType; + + FX_BOOL m_bMouseDown; }; -struct PWL_FLOATRANGE -{ -public: - PWL_FLOATRANGE(); - PWL_FLOATRANGE(FX_FLOAT min,FX_FLOAT max); - void Default(); - void Set(FX_FLOAT min,FX_FLOAT max); - FX_BOOL In(FX_FLOAT x) const; - FX_FLOAT GetWidth() const; - - FX_FLOAT fMin,fMax; +struct PWL_FLOATRANGE { + public: + PWL_FLOATRANGE(); + PWL_FLOATRANGE(FX_FLOAT min, FX_FLOAT max); + void Default(); + void Set(FX_FLOAT min, FX_FLOAT max); + FX_BOOL In(FX_FLOAT x) const; + FX_FLOAT GetWidth() const; + + FX_FLOAT fMin, fMax; }; -struct PWL_SCROLL_PRIVATEDATA -{ -public: - PWL_SCROLL_PRIVATEDATA(); - - void Default(); - void SetScrollRange(FX_FLOAT min,FX_FLOAT max); - void SetClientWidth(FX_FLOAT width); - void SetSmallStep(FX_FLOAT step); - void SetBigStep(FX_FLOAT step); - FX_BOOL SetPos(FX_FLOAT pos); - - void AddSmall(); - void SubSmall(); - void AddBig(); - void SubBig(); - - PWL_FLOATRANGE ScrollRange; - FX_FLOAT fClientWidth; - FX_FLOAT fScrollPos; - FX_FLOAT fBigStep; - FX_FLOAT fSmallStep; +struct PWL_SCROLL_PRIVATEDATA { + public: + PWL_SCROLL_PRIVATEDATA(); + + void Default(); + void SetScrollRange(FX_FLOAT min, FX_FLOAT max); + void SetClientWidth(FX_FLOAT width); + void SetSmallStep(FX_FLOAT step); + void SetBigStep(FX_FLOAT step); + FX_BOOL SetPos(FX_FLOAT pos); + + void AddSmall(); + void SubSmall(); + void AddBig(); + void SubBig(); + + PWL_FLOATRANGE ScrollRange; + FX_FLOAT fClientWidth; + FX_FLOAT fScrollPos; + FX_FLOAT fBigStep; + FX_FLOAT fSmallStep; }; -class CPWL_ScrollBar : public CPWL_Wnd -{ -public: - CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType = SBT_HSCROLL); - virtual ~CPWL_ScrollBar(); - -public: - virtual CFX_ByteString GetClassName() const; - virtual void OnCreate(PWL_CREATEPARAM & cp); - virtual void RePosChildWnd(); - virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0); - - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); - - FX_FLOAT GetScrollBarWidth() const; - PWL_SCROLLBAR_TYPE GetScrollBarType() const {return m_sbType;}; - - void SetNotifyForever(FX_BOOL bForever) {m_bNotifyForever = bForever;} - -protected: - void SetScrollRange(FX_FLOAT fMin,FX_FLOAT fMax,FX_FLOAT fClientWidth); - void SetScrollPos(FX_FLOAT fPos); - void MovePosButton(FX_BOOL bRefresh); - void SetScrollStep(FX_FLOAT fBigStep,FX_FLOAT fSmallStep); - void NotifyScrollWindow(); - CPDF_Rect GetScrollArea() const; - -private: - void CreateButtons(const PWL_CREATEPARAM & cp); - - void OnMinButtonLBDown(const CPDF_Point & point); - void OnMinButtonLBUp(const CPDF_Point & point); - void OnMinButtonMouseMove(const CPDF_Point & point); - - void OnMaxButtonLBDown(const CPDF_Point & point); - void OnMaxButtonLBUp(const CPDF_Point & point); - void OnMaxButtonMouseMove(const CPDF_Point & point); - - void OnPosButtonLBDown(const CPDF_Point & point); - void OnPosButtonLBUp(const CPDF_Point & point); - void OnPosButtonMouseMove(const CPDF_Point & point); - - FX_FLOAT TrueToFace(FX_FLOAT); - FX_FLOAT FaceToTrue(FX_FLOAT); - - virtual void TimerProc(); - -private: - PWL_SCROLLBAR_TYPE m_sbType; - PWL_SCROLL_INFO m_OriginInfo; - CPWL_SBButton* m_pMinButton; - CPWL_SBButton* m_pMaxButton; - CPWL_SBButton* m_pPosButton; - PWL_SCROLL_PRIVATEDATA m_sData; - FX_BOOL m_bMouseDown; - FX_BOOL m_bMinOrMax; - FX_BOOL m_bNotifyForever; - FX_FLOAT m_nOldPos; - FX_FLOAT m_fOldPosButton; +class CPWL_ScrollBar : public CPWL_Wnd { + public: + CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType = SBT_HSCROLL); + virtual ~CPWL_ScrollBar(); + + public: + virtual CFX_ByteString GetClassName() const; + virtual void OnCreate(PWL_CREATEPARAM& cp); + virtual void RePosChildWnd(); + virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream); + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0); + + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); + + FX_FLOAT GetScrollBarWidth() const; + PWL_SCROLLBAR_TYPE GetScrollBarType() const { return m_sbType; }; + + void SetNotifyForever(FX_BOOL bForever) { m_bNotifyForever = bForever; } + + protected: + void SetScrollRange(FX_FLOAT fMin, FX_FLOAT fMax, FX_FLOAT fClientWidth); + void SetScrollPos(FX_FLOAT fPos); + void MovePosButton(FX_BOOL bRefresh); + void SetScrollStep(FX_FLOAT fBigStep, FX_FLOAT fSmallStep); + void NotifyScrollWindow(); + CPDF_Rect GetScrollArea() const; + + private: + void CreateButtons(const PWL_CREATEPARAM& cp); + + void OnMinButtonLBDown(const CPDF_Point& point); + void OnMinButtonLBUp(const CPDF_Point& point); + void OnMinButtonMouseMove(const CPDF_Point& point); + + void OnMaxButtonLBDown(const CPDF_Point& point); + void OnMaxButtonLBUp(const CPDF_Point& point); + void OnMaxButtonMouseMove(const CPDF_Point& point); + + void OnPosButtonLBDown(const CPDF_Point& point); + void OnPosButtonLBUp(const CPDF_Point& point); + void OnPosButtonMouseMove(const CPDF_Point& point); + + FX_FLOAT TrueToFace(FX_FLOAT); + FX_FLOAT FaceToTrue(FX_FLOAT); + + virtual void TimerProc(); + + private: + PWL_SCROLLBAR_TYPE m_sbType; + PWL_SCROLL_INFO m_OriginInfo; + CPWL_SBButton* m_pMinButton; + CPWL_SBButton* m_pMaxButton; + CPWL_SBButton* m_pPosButton; + PWL_SCROLL_PRIVATEDATA m_sData; + FX_BOOL m_bMouseDown; + FX_BOOL m_bMinOrMax; + FX_BOOL m_bNotifyForever; + FX_FLOAT m_nOldPos; + FX_FLOAT m_fOldPosButton; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_SCROLLBAR_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_Signature.h b/fpdfsdk/include/pdfwindow/PWL_Signature.h index d9be322a7d..c48d4e9708 100644 --- a/fpdfsdk/include/pdfwindow/PWL_Signature.h +++ b/fpdfsdk/include/pdfwindow/PWL_Signature.h @@ -13,55 +13,55 @@ class CFX_DIBSource; class CPWL_Label; -class CPWL_Signature_Image : public CPWL_Image -{ -public: - CPWL_Signature_Image(); - virtual ~CPWL_Signature_Image(); +class CPWL_Signature_Image : public CPWL_Image { + public: + CPWL_Signature_Image(); + virtual ~CPWL_Signature_Image(); - void SetImage(CFX_DIBSource* pImage); - CFX_DIBSource* GetImage(); + void SetImage(CFX_DIBSource* pImage); + CFX_DIBSource* GetImage(); -protected: - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); + protected: + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream); - virtual void GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale); + virtual void GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale); -private: - CFX_DIBSource* m_pImage; + private: + CFX_DIBSource* m_pImage; }; -class CPWL_Signature : public CPWL_Wnd -{ -public: - CPWL_Signature(); - virtual ~CPWL_Signature(); +class CPWL_Signature : public CPWL_Wnd { + public: + CPWL_Signature(); + virtual ~CPWL_Signature(); - void SetText(const FX_WCHAR* sText); - void SetDescription(const FX_WCHAR* string); - void SetImage(CFX_DIBSource* pImage); - void SetImageStream(CPDF_Stream * pStream, const FX_CHAR* sImageAlias); + void SetText(const FX_WCHAR* sText); + void SetDescription(const FX_WCHAR* string); + void SetImage(CFX_DIBSource* pImage); + void SetImageStream(CPDF_Stream* pStream, const FX_CHAR* sImageAlias); - void SetTextFlag(FX_BOOL bTextExist); - void SetImageFlag(FX_BOOL bImageExist); - void SetFoxitFlag(FX_BOOL bFlagExist); + void SetTextFlag(FX_BOOL bTextExist); + void SetImageFlag(FX_BOOL bImageExist); + void SetFoxitFlag(FX_BOOL bFlagExist); -protected: - virtual void RePosChildWnd(); - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); + protected: + virtual void RePosChildWnd(); + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream); -private: - CPWL_Label* m_pText; - CPWL_Label* m_pDescription; - CPWL_Signature_Image* m_pImage; + private: + CPWL_Label* m_pText; + CPWL_Label* m_pDescription; + CPWL_Signature_Image* m_pImage; - FX_BOOL m_bTextExist; - FX_BOOL m_bImageExist; - FX_BOOL m_bFlagExist; + FX_BOOL m_bTextExist; + FX_BOOL m_bImageExist; + FX_BOOL m_bFlagExist; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_SIGNATURE_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_SpecialButton.h b/fpdfsdk/include/pdfwindow/PWL_SpecialButton.h index 31787d79ed..8cfe819a67 100644 --- a/fpdfsdk/include/pdfwindow/PWL_SpecialButton.h +++ b/fpdfsdk/include/pdfwindow/PWL_SpecialButton.h @@ -9,48 +9,45 @@ #include "PWL_Button.h" -class CPWL_PushButton : public CPWL_Button -{ -public: - CPWL_PushButton(); - virtual ~CPWL_PushButton(); - - virtual CFX_ByteString GetClassName() const; - virtual CPDF_Rect GetFocusRect() const; +class CPWL_PushButton : public CPWL_Button { + public: + CPWL_PushButton(); + virtual ~CPWL_PushButton(); + + virtual CFX_ByteString GetClassName() const; + virtual CPDF_Rect GetFocusRect() const; }; -class CPWL_CheckBox : public CPWL_Button -{ -public: - CPWL_CheckBox(); - virtual ~CPWL_CheckBox(); +class CPWL_CheckBox : public CPWL_Button { + public: + CPWL_CheckBox(); + virtual ~CPWL_CheckBox(); - virtual CFX_ByteString GetClassName() const; - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); + virtual CFX_ByteString GetClassName() const; + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); - void SetCheck(FX_BOOL bCheck); - FX_BOOL IsChecked() const; + void SetCheck(FX_BOOL bCheck); + FX_BOOL IsChecked() const; -private: - FX_BOOL m_bChecked; + private: + FX_BOOL m_bChecked; }; -class CPWL_RadioButton : public CPWL_Button -{ -public: - CPWL_RadioButton(); - virtual ~CPWL_RadioButton(); +class CPWL_RadioButton : public CPWL_Button { + public: + CPWL_RadioButton(); + virtual ~CPWL_RadioButton(); - virtual CFX_ByteString GetClassName() const; - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); + virtual CFX_ByteString GetClassName() const; + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); - void SetCheck(FX_BOOL bCheck); - FX_BOOL IsChecked() const; + void SetCheck(FX_BOOL bCheck); + FX_BOOL IsChecked() const; -private: - FX_BOOL m_bChecked; + private: + FX_BOOL m_bChecked; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_SPECIALBUTTON_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_Utils.h b/fpdfsdk/include/pdfwindow/PWL_Utils.h index b58f30e399..e797510d50 100644 --- a/fpdfsdk/include/pdfwindow/PWL_Utils.h +++ b/fpdfsdk/include/pdfwindow/PWL_Utils.h @@ -8,236 +8,406 @@ #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_UTILS_H_ #include "../../../core/include/fpdfapi/fpdf_parser.h" // For CPDF_Point. -#include "../../../core/include/fpdfdoc/fpdf_vt.h" // For CPVT_WordRange. +#include "../../../core/include/fpdfdoc/fpdf_vt.h" // For CPVT_WordRange. #include "../fxedit/fx_edit.h" #include "PWL_Wnd.h" class CFX_PathData; struct CPWL_Color; -template T PWL_MIN (const T & i, const T & j) { return ((i < j) ? i : j); } -template T PWL_MAX (const T & i, const T & j) { return ((i > j) ? i : j); } - -#define PWL_PDF2WIN(color) (uint8_t(color*255)) -#define PWL_WIN2PDF(color) ((FX_FLOAT)((FX_FLOAT)color/255.0f)) - -#define PWL_MAKEDWORD(low,high) ((FX_DWORD)((FX_WORD)(low) | (FX_DWORD)(((FX_WORD)(high))<<16))) -#define PWL_GETLOWWORD(dword) ((FX_WORD)(dword)) -#define PWL_GETHIGHWORD(dword) ((FX_WORD)(dword>>16)) - -#define PWL_ICONTYPE_CHECKMARK 0 -#define PWL_ICONTYPE_CIRCLE 1 -#define PWL_ICONTYPE_COMMENT 2 -#define PWL_ICONTYPE_CROSS 3 -#define PWL_ICONTYPE_HELP 4 -#define PWL_ICONTYPE_INSERTTEXT 5 -#define PWL_ICONTYPE_KEY 6 -#define PWL_ICONTYPE_NEWPARAGRAPH 7 -#define PWL_ICONTYPE_TEXTNOTE 8 -#define PWL_ICONTYPE_PARAGRAPH 9 -#define PWL_ICONTYPE_RIGHTARROW 10 -#define PWL_ICONTYPE_RIGHTPOINTER 11 -#define PWL_ICONTYPE_STAR 12 -#define PWL_ICONTYPE_UPARROW 13 -#define PWL_ICONTYPE_UPLEFTARROW 14 - -#define PWL_ICONTYPE_GRAPH 15 -#define PWL_ICONTYPE_PAPERCLIP 16 -#define PWL_ICONTYPE_ATTACHMENT 17 -#define PWL_ICONTYPE_TAG 18 - -#define PWL_ICONTYPE_FOXIT 19 - -#define PWL_ICONTYPE_UNKNOWN -1 - -//checkbox & radiobutton style -#define PCS_CHECK 0 -#define PCS_CIRCLE 1 -#define PCS_CROSS 2 -#define PCS_DIAMOND 3 -#define PCS_SQUARE 4 -#define PCS_STAR 5 - -#define PWL_PI 3.14159265358979f -#define PWL_BEZIER 0.5522847498308f - -//pushbutton layout style -#define PPBL_LABEL 0 -#define PPBL_ICON 1 -#define PPBL_ICONTOPLABELBOTTOM 2 -#define PPBL_LABELTOPICONBOTTOM 3 -#define PPBL_ICONLEFTLABELRIGHT 4 -#define PPBL_LABELLEFTICONRIGHT 5 -#define PPBL_LABELOVERICON 6 - -class CPWL_Point : public CPDF_Point -{ -public: - CPWL_Point() : CPDF_Point(0.0f,0.0f){} - CPWL_Point(FX_FLOAT fx, FX_FLOAT fy) : CPDF_Point(fx,fy) {} - CPWL_Point(const CPWL_Point& point) : CPDF_Point(point.x, point.y) {} +template +T PWL_MIN(const T& i, const T& j) { + return ((i < j) ? i : j); +} +template +T PWL_MAX(const T& i, const T& j) { + return ((i > j) ? i : j); +} + +#define PWL_PDF2WIN(color) (uint8_t(color * 255)) +#define PWL_WIN2PDF(color) ((FX_FLOAT)((FX_FLOAT)color / 255.0f)) + +#define PWL_MAKEDWORD(low, high) \ + ((FX_DWORD)((FX_WORD)(low) | (FX_DWORD)(((FX_WORD)(high)) << 16))) +#define PWL_GETLOWWORD(dword) ((FX_WORD)(dword)) +#define PWL_GETHIGHWORD(dword) ((FX_WORD)(dword >> 16)) + +#define PWL_ICONTYPE_CHECKMARK 0 +#define PWL_ICONTYPE_CIRCLE 1 +#define PWL_ICONTYPE_COMMENT 2 +#define PWL_ICONTYPE_CROSS 3 +#define PWL_ICONTYPE_HELP 4 +#define PWL_ICONTYPE_INSERTTEXT 5 +#define PWL_ICONTYPE_KEY 6 +#define PWL_ICONTYPE_NEWPARAGRAPH 7 +#define PWL_ICONTYPE_TEXTNOTE 8 +#define PWL_ICONTYPE_PARAGRAPH 9 +#define PWL_ICONTYPE_RIGHTARROW 10 +#define PWL_ICONTYPE_RIGHTPOINTER 11 +#define PWL_ICONTYPE_STAR 12 +#define PWL_ICONTYPE_UPARROW 13 +#define PWL_ICONTYPE_UPLEFTARROW 14 + +#define PWL_ICONTYPE_GRAPH 15 +#define PWL_ICONTYPE_PAPERCLIP 16 +#define PWL_ICONTYPE_ATTACHMENT 17 +#define PWL_ICONTYPE_TAG 18 + +#define PWL_ICONTYPE_FOXIT 19 + +#define PWL_ICONTYPE_UNKNOWN -1 + +// checkbox & radiobutton style +#define PCS_CHECK 0 +#define PCS_CIRCLE 1 +#define PCS_CROSS 2 +#define PCS_DIAMOND 3 +#define PCS_SQUARE 4 +#define PCS_STAR 5 + +#define PWL_PI 3.14159265358979f +#define PWL_BEZIER 0.5522847498308f + +// pushbutton layout style +#define PPBL_LABEL 0 +#define PPBL_ICON 1 +#define PPBL_ICONTOPLABELBOTTOM 2 +#define PPBL_LABELTOPICONBOTTOM 3 +#define PPBL_ICONLEFTLABELRIGHT 4 +#define PPBL_LABELLEFTICONRIGHT 5 +#define PPBL_LABELOVERICON 6 + +class CPWL_Point : public CPDF_Point { + public: + CPWL_Point() : CPDF_Point(0.0f, 0.0f) {} + CPWL_Point(FX_FLOAT fx, FX_FLOAT fy) : CPDF_Point(fx, fy) {} + CPWL_Point(const CPWL_Point& point) : CPDF_Point(point.x, point.y) {} }; -enum PWL_PATHDATA_TYPE -{ - PWLPT_MOVETO, - PWLPT_LINETO, - PWLPT_BEZIERTO, - PWLPT_UNKNOWN +enum PWL_PATHDATA_TYPE { + PWLPT_MOVETO, + PWLPT_LINETO, + PWLPT_BEZIERTO, + PWLPT_UNKNOWN }; -enum PWL_PATH_TYPE -{ - PWLPT_PATHDATA, - PWLPT_STREAM -}; +enum PWL_PATH_TYPE { PWLPT_PATHDATA, PWLPT_STREAM }; -class CPWL_PathData -{ -public: - CPWL_PathData() : point(), type(PWLPT_UNKNOWN){} - CPWL_PathData(const CPWL_Point& pt, PWL_PATHDATA_TYPE tp) : point(pt), type(tp) {} +class CPWL_PathData { + public: + CPWL_PathData() : point(), type(PWLPT_UNKNOWN) {} + CPWL_PathData(const CPWL_Point& pt, PWL_PATHDATA_TYPE tp) + : point(pt), type(tp) {} - CPWL_Point point; - PWL_PATHDATA_TYPE type; + CPWL_Point point; + PWL_PATHDATA_TYPE type; }; class IPWL_SpellCheck; -class CPWL_Utils -{ -public: - static CPDF_Rect InflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize); - static CPDF_Rect DeflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize); - static FX_BOOL IntersectRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2); - static FX_BOOL ContainsRect(const CPDF_Rect& rcParent, const CPDF_Rect& rcChild); - static CPDF_Rect ScaleRect(const CPDF_Rect& rcRect,FX_FLOAT fScale); - static CPVT_WordRange OverlapWordRange(const CPVT_WordRange& wr1, const CPVT_WordRange& wr2); - static CPDF_Rect GetCenterSquare(const CPDF_Rect & rect); - static CPWL_Color SubstractColor(const CPWL_Color & sColor,FX_FLOAT fColorSub); - static CPWL_Color DevideColor(const CPWL_Color & sColor,FX_FLOAT fColorDevide); - static CPDF_Rect MaxRect(const CPDF_Rect & rect1,const CPDF_Rect & rect2); - static CPDF_Rect OffsetRect(const CPDF_Rect & rect,FX_FLOAT x,FX_FLOAT y); - static CPDF_Point OffsetPoint(const CPDF_Point & point,FX_FLOAT x,FX_FLOAT y); - static FX_COLORREF PWLColorToFXColor(const CPWL_Color& color, int32_t nTransparancy = 255); - static FX_BOOL IsBlackOrWhite(const CPWL_Color& color); - static CPWL_Color GetReverseColor(const CPWL_Color& color); - - static CFX_ByteString GetColorAppStream(const CPWL_Color & color,const FX_BOOL & bFillOrStroke = TRUE); - static CFX_ByteString GetBorderAppStream(const CPDF_Rect & rect, FX_FLOAT fWidth, - const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom, - int32_t nStyle, const CPWL_Dash & dash); - static CFX_ByteString GetCircleBorderAppStream(const CPDF_Rect & rect, FX_FLOAT fWidth, - const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom, - int32_t nStyle, const CPWL_Dash & dash); - static CFX_ByteString GetRectFillAppStream(const CPDF_Rect & rect,const CPWL_Color & color); - static CFX_ByteString GetCircleFillAppStream(const CPDF_Rect & rect,const CPWL_Color & color); - - static CFX_ByteString GetPushButtonAppStream(const CPDF_Rect & rcBBox, - IFX_Edit_FontMap * pFontMap, - CPDF_Stream * pIconStream, - CPDF_IconFit & IconFit, - const CFX_WideString & sLabel, - const CPWL_Color & crText, - FX_FLOAT fFontSize, - int32_t nLayOut); - static CFX_ByteString GetCheckBoxAppStream(const CPDF_Rect & rcBBox, - int32_t nStyle, - const CPWL_Color & crText); - static CFX_ByteString GetRadioButtonAppStream(const CPDF_Rect & rcBBox, - int32_t nStyle, - const CPWL_Color & crText); - - static CFX_ByteString GetEditAppStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, const CPVT_WordRange * pRange = NULL, - FX_BOOL bContinuous = TRUE, FX_WORD SubWord = 0); - static CFX_ByteString GetEditSelAppStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, - const CPVT_WordRange * pRange = NULL); - static CFX_ByteString GetSpellCheckAppStream(IFX_Edit* pEdit, IPWL_SpellCheck* pSpellCheck, - const CPDF_Point & ptOffset, - const CPVT_WordRange * pRange = NULL); - static CFX_ByteString GetTextAppStream(const CPDF_Rect & rcBBox,IFX_Edit_FontMap * pFontMap, - const CFX_WideString & sText, int32_t nAlignmentH, int32_t nAlignmentV, - FX_FLOAT fFontSize, FX_BOOL bMultiLine, FX_BOOL bAutoReturn, const CPWL_Color & crText); - static CFX_ByteString GetDropButtonAppStream(const CPDF_Rect & rcBBox); - - static void DrawFillRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect, - const CPWL_Color & color, int32_t nTransparancy); - static void DrawFillRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - const CPDF_Rect & rect,const FX_COLORREF & color); - static void DrawStrokeRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect, - const FX_COLORREF & color, FX_FLOAT fWidth); - static void DrawStrokeLine(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - const CPDF_Point & ptMoveTo, const CPDF_Point & ptLineTo, const FX_COLORREF & color, FX_FLOAT fWidth); - static void DrawBorder(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - const CPDF_Rect & rect, FX_FLOAT fWidth, - const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom, - int32_t nStyle, const CPWL_Dash & dash, int32_t nTransparancy); - static void DrawFillArea(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - const CPDF_Point* pPts, int32_t nCount, const FX_COLORREF& color); - static void DrawShadow(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_BOOL bVertical, FX_BOOL bHorizontal, CPDF_Rect rect, - int32_t nTransparancy, int32_t nStartGray, int32_t nEndGray); - static void DrawEditSpellCheck(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, - const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, - IPWL_SpellCheck* pSpellCheck); -public: - static void ConvertCMYK2RGB(FX_FLOAT dC,FX_FLOAT dM,FX_FLOAT dY,FX_FLOAT dK,FX_FLOAT &dR,FX_FLOAT &dG,FX_FLOAT &dB); - static void ConvertRGB2CMYK(FX_FLOAT dR,FX_FLOAT dG,FX_FLOAT dB,FX_FLOAT &dC,FX_FLOAT &dM,FX_FLOAT &dY,FX_FLOAT &dK); - - static void ConvertRGB2GRAY(FX_FLOAT dR,FX_FLOAT dG,FX_FLOAT dB,FX_FLOAT &dGray); - static void ConvertGRAY2RGB(FX_FLOAT dGray,FX_FLOAT &dR,FX_FLOAT &dG,FX_FLOAT &dB); - - static void ConvertCMYK2GRAY(FX_FLOAT dC,FX_FLOAT dM,FX_FLOAT dY,FX_FLOAT dK,FX_FLOAT &dGray); - static void ConvertGRAY2CMYK(FX_FLOAT dGray,FX_FLOAT &dC,FX_FLOAT &dM,FX_FLOAT &dY,FX_FLOAT &dK); - - static void PWLColorToARGB(const CPWL_Color& color, int32_t& alpha, FX_FLOAT& red, FX_FLOAT& green, FX_FLOAT& blue); - -public: - static CFX_ByteString GetIconAppStream(int32_t nType, const CPDF_Rect& rect, const CPWL_Color& crFill, - const CPWL_Color& crStroke = PWL_DEFAULT_BLACKCOLOR); - static void DrawIconAppStream(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - int32_t nType, const CPDF_Rect & rect, const CPWL_Color& crFill, - const CPWL_Color& crStroke, const int32_t nTransparancy); - -private: - static CFX_ByteString GetAppStreamFromArray(const CPWL_PathData* pPathData, int32_t nCount); - static void GetPathDataFromArray(CFX_PathData& path, const CPWL_PathData* pPathData, int32_t nCount); - - static CFX_ByteString GetAppStream_Check(const CPDF_Rect & rcBBox, const CPWL_Color & crText); - static CFX_ByteString GetAppStream_Circle(const CPDF_Rect & rcBBox, const CPWL_Color & crText); - static CFX_ByteString GetAppStream_Cross(const CPDF_Rect & rcBBox, const CPWL_Color & crText); - static CFX_ByteString GetAppStream_Diamond(const CPDF_Rect & rcBBox, const CPWL_Color & crText); - static CFX_ByteString GetAppStream_Square(const CPDF_Rect & rcBBox, const CPWL_Color & crText); - static CFX_ByteString GetAppStream_Star(const CPDF_Rect & rcBBox, const CPWL_Color & crText); - - static CFX_ByteString GetAP_Check(const CPDF_Rect & crBBox); - static CFX_ByteString GetAP_Circle(const CPDF_Rect & crBBox); - static CFX_ByteString GetAP_Cross(const CPDF_Rect & crBBox); - static CFX_ByteString GetAP_Diamond(const CPDF_Rect & crBBox); - static CFX_ByteString GetAP_Square(const CPDF_Rect & crBBox); - static CFX_ByteString GetAP_Star(const CPDF_Rect & crBBox); - static CFX_ByteString GetAP_HalfCircle(const CPDF_Rect & crBBox,FX_FLOAT fRotate); - - static void GetGraphics_Checkmark(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Circle(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Comment(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Cross(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Help(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_InsertText(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Key(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_NewParagraph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_TextNote(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Paragraph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_RightArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_RightPointer(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Star(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_UpArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_UpLeftArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Graph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Paperclip(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Attachment(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Tag(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); - static void GetGraphics_Foxit(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); +class CPWL_Utils { + public: + static CPDF_Rect InflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize); + static CPDF_Rect DeflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize); + static FX_BOOL IntersectRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2); + static FX_BOOL ContainsRect(const CPDF_Rect& rcParent, + const CPDF_Rect& rcChild); + static CPDF_Rect ScaleRect(const CPDF_Rect& rcRect, FX_FLOAT fScale); + static CPVT_WordRange OverlapWordRange(const CPVT_WordRange& wr1, + const CPVT_WordRange& wr2); + static CPDF_Rect GetCenterSquare(const CPDF_Rect& rect); + static CPWL_Color SubstractColor(const CPWL_Color& sColor, + FX_FLOAT fColorSub); + static CPWL_Color DevideColor(const CPWL_Color& sColor, + FX_FLOAT fColorDevide); + static CPDF_Rect MaxRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2); + static CPDF_Rect OffsetRect(const CPDF_Rect& rect, FX_FLOAT x, FX_FLOAT y); + static CPDF_Point OffsetPoint(const CPDF_Point& point, + FX_FLOAT x, + FX_FLOAT y); + static FX_COLORREF PWLColorToFXColor(const CPWL_Color& color, + int32_t nTransparancy = 255); + static FX_BOOL IsBlackOrWhite(const CPWL_Color& color); + static CPWL_Color GetReverseColor(const CPWL_Color& color); + + static CFX_ByteString GetColorAppStream(const CPWL_Color& color, + const FX_BOOL& bFillOrStroke = TRUE); + static CFX_ByteString GetBorderAppStream(const CPDF_Rect& rect, + FX_FLOAT fWidth, + const CPWL_Color& color, + const CPWL_Color& crLeftTop, + const CPWL_Color& crRightBottom, + int32_t nStyle, + const CPWL_Dash& dash); + static CFX_ByteString GetCircleBorderAppStream( + const CPDF_Rect& rect, + FX_FLOAT fWidth, + const CPWL_Color& color, + const CPWL_Color& crLeftTop, + const CPWL_Color& crRightBottom, + int32_t nStyle, + const CPWL_Dash& dash); + static CFX_ByteString GetRectFillAppStream(const CPDF_Rect& rect, + const CPWL_Color& color); + static CFX_ByteString GetCircleFillAppStream(const CPDF_Rect& rect, + const CPWL_Color& color); + + static CFX_ByteString GetPushButtonAppStream(const CPDF_Rect& rcBBox, + IFX_Edit_FontMap* pFontMap, + CPDF_Stream* pIconStream, + CPDF_IconFit& IconFit, + const CFX_WideString& sLabel, + const CPWL_Color& crText, + FX_FLOAT fFontSize, + int32_t nLayOut); + static CFX_ByteString GetCheckBoxAppStream(const CPDF_Rect& rcBBox, + int32_t nStyle, + const CPWL_Color& crText); + static CFX_ByteString GetRadioButtonAppStream(const CPDF_Rect& rcBBox, + int32_t nStyle, + const CPWL_Color& crText); + + static CFX_ByteString GetEditAppStream(IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange = NULL, + FX_BOOL bContinuous = TRUE, + FX_WORD SubWord = 0); + static CFX_ByteString GetEditSelAppStream( + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange = NULL); + static CFX_ByteString GetSpellCheckAppStream( + IFX_Edit* pEdit, + IPWL_SpellCheck* pSpellCheck, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange = NULL); + static CFX_ByteString GetTextAppStream(const CPDF_Rect& rcBBox, + IFX_Edit_FontMap* pFontMap, + const CFX_WideString& sText, + int32_t nAlignmentH, + int32_t nAlignmentV, + FX_FLOAT fFontSize, + FX_BOOL bMultiLine, + FX_BOOL bAutoReturn, + const CPWL_Color& crText); + static CFX_ByteString GetDropButtonAppStream(const CPDF_Rect& rcBBox); + + static void DrawFillRect(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rect, + const CPWL_Color& color, + int32_t nTransparancy); + static void DrawFillRect(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rect, + const FX_COLORREF& color); + static void DrawStrokeRect(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rect, + const FX_COLORREF& color, + FX_FLOAT fWidth); + static void DrawStrokeLine(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Point& ptMoveTo, + const CPDF_Point& ptLineTo, + const FX_COLORREF& color, + FX_FLOAT fWidth); + static void DrawBorder(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rect, + FX_FLOAT fWidth, + const CPWL_Color& color, + const CPWL_Color& crLeftTop, + const CPWL_Color& crRightBottom, + int32_t nStyle, + const CPWL_Dash& dash, + int32_t nTransparancy); + static void DrawFillArea(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Point* pPts, + int32_t nCount, + const FX_COLORREF& color); + static void DrawShadow(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_BOOL bVertical, + FX_BOOL bHorizontal, + CPDF_Rect rect, + int32_t nTransparancy, + int32_t nStartGray, + int32_t nEndGray); + static void DrawEditSpellCheck(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + IFX_Edit* pEdit, + const CPDF_Rect& rcClip, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + IPWL_SpellCheck* pSpellCheck); + + public: + static void ConvertCMYK2RGB(FX_FLOAT dC, + FX_FLOAT dM, + FX_FLOAT dY, + FX_FLOAT dK, + FX_FLOAT& dR, + FX_FLOAT& dG, + FX_FLOAT& dB); + static void ConvertRGB2CMYK(FX_FLOAT dR, + FX_FLOAT dG, + FX_FLOAT dB, + FX_FLOAT& dC, + FX_FLOAT& dM, + FX_FLOAT& dY, + FX_FLOAT& dK); + + static void ConvertRGB2GRAY(FX_FLOAT dR, + FX_FLOAT dG, + FX_FLOAT dB, + FX_FLOAT& dGray); + static void ConvertGRAY2RGB(FX_FLOAT dGray, + FX_FLOAT& dR, + FX_FLOAT& dG, + FX_FLOAT& dB); + + static void ConvertCMYK2GRAY(FX_FLOAT dC, + FX_FLOAT dM, + FX_FLOAT dY, + FX_FLOAT dK, + FX_FLOAT& dGray); + static void ConvertGRAY2CMYK(FX_FLOAT dGray, + FX_FLOAT& dC, + FX_FLOAT& dM, + FX_FLOAT& dY, + FX_FLOAT& dK); + + static void PWLColorToARGB(const CPWL_Color& color, + int32_t& alpha, + FX_FLOAT& red, + FX_FLOAT& green, + FX_FLOAT& blue); + + public: + static CFX_ByteString GetIconAppStream( + int32_t nType, + const CPDF_Rect& rect, + const CPWL_Color& crFill, + const CPWL_Color& crStroke = PWL_DEFAULT_BLACKCOLOR); + static void DrawIconAppStream(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + int32_t nType, + const CPDF_Rect& rect, + const CPWL_Color& crFill, + const CPWL_Color& crStroke, + const int32_t nTransparancy); + + private: + static CFX_ByteString GetAppStreamFromArray(const CPWL_PathData* pPathData, + int32_t nCount); + static void GetPathDataFromArray(CFX_PathData& path, + const CPWL_PathData* pPathData, + int32_t nCount); + + static CFX_ByteString GetAppStream_Check(const CPDF_Rect& rcBBox, + const CPWL_Color& crText); + static CFX_ByteString GetAppStream_Circle(const CPDF_Rect& rcBBox, + const CPWL_Color& crText); + static CFX_ByteString GetAppStream_Cross(const CPDF_Rect& rcBBox, + const CPWL_Color& crText); + static CFX_ByteString GetAppStream_Diamond(const CPDF_Rect& rcBBox, + const CPWL_Color& crText); + static CFX_ByteString GetAppStream_Square(const CPDF_Rect& rcBBox, + const CPWL_Color& crText); + static CFX_ByteString GetAppStream_Star(const CPDF_Rect& rcBBox, + const CPWL_Color& crText); + + static CFX_ByteString GetAP_Check(const CPDF_Rect& crBBox); + static CFX_ByteString GetAP_Circle(const CPDF_Rect& crBBox); + static CFX_ByteString GetAP_Cross(const CPDF_Rect& crBBox); + static CFX_ByteString GetAP_Diamond(const CPDF_Rect& crBBox); + static CFX_ByteString GetAP_Square(const CPDF_Rect& crBBox); + static CFX_ByteString GetAP_Star(const CPDF_Rect& crBBox); + static CFX_ByteString GetAP_HalfCircle(const CPDF_Rect& crBBox, + FX_FLOAT fRotate); + + static void GetGraphics_Checkmark(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Circle(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Comment(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Cross(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Help(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_InsertText(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Key(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_NewParagraph(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_TextNote(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Paragraph(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_RightArrow(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_RightPointer(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Star(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_UpArrow(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_UpLeftArrow(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Graph(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Paperclip(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Attachment(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Tag(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); + static void GetGraphics_Foxit(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type); }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_UTILS_H_ diff --git a/fpdfsdk/include/pdfwindow/PWL_Wnd.h b/fpdfsdk/include/pdfwindow/PWL_Wnd.h index 67b28cf424..235786b1b7 100644 --- a/fpdfsdk/include/pdfwindow/PWL_Wnd.h +++ b/fpdfsdk/include/pdfwindow/PWL_Wnd.h @@ -21,444 +21,455 @@ class IFX_SystemHandler; class IPWL_Provider; class IPWL_SpellCheck; -//window styles -#define PWS_CHILD 0x80000000L -#define PWS_BORDER 0x40000000L -#define PWS_BACKGROUND 0x20000000L -#define PWS_HSCROLL 0x10000000L -#define PWS_VSCROLL 0x08000000L -#define PWS_VISIBLE 0x04000000L -#define PWS_DISABLE 0x02000000L -#define PWS_READONLY 0x01000000L -#define PWS_AUTOFONTSIZE 0x00800000L -#define PWS_AUTOTRANSPARENT 0x00400000L -#define PWS_NOREFRESHCLIP 0x00200000L - -//edit and label styles -#define PES_MULTILINE 0x0001L -#define PES_PASSWORD 0x0002L -#define PES_LEFT 0x0004L -#define PES_RIGHT 0x0008L -#define PES_MIDDLE 0x0010L -#define PES_TOP 0x0020L -#define PES_BOTTOM 0x0040L -#define PES_CENTER 0x0080L -#define PES_CHARARRAY 0x0100L -#define PES_AUTOSCROLL 0x0200L -#define PES_AUTORETURN 0x0400L -#define PES_UNDO 0x0800L -#define PES_RICH 0x1000L -#define PES_SPELLCHECK 0x2000L -#define PES_TEXTOVERFLOW 0x4000L -#define PES_NOREAD 0x8000L - -//listbox styles -#define PLBS_MULTIPLESEL 0x0001L -#define PLBS_HOVERSEL 0x0008L - -//combobox styles -#define PCBS_ALLOWCUSTOMTEXT 0x0001L - -//richedit styles -#define PRES_MULTILINE 0x0001L -#define PRES_AUTORETURN 0x0002L -#define PRES_AUTOSCROLL 0x0004L -#define PRES_SPELLCHECK 0x0008L -#define PRES_UNDO 0x0100L -#define PRES_MULTIPAGES 0x0200L -#define PRES_TEXTOVERFLOW 0x0400L - -//border style -#define PBS_SOLID 0 -#define PBS_DASH 1 -#define PBS_BEVELED 2 -#define PBS_INSET 3 -#define PBS_UNDERLINED 4 -#define PBS_SHADOW 5 - -//notification messages -#define PNM_ADDCHILD 0x00000000L -#define PNM_REMOVECHILD 0x00000001L -#define PNM_SETSCROLLINFO 0x00000002L -#define PNM_SETSCROLLPOS 0x00000003L -#define PNM_SCROLLWINDOW 0x00000004L -#define PNM_LBUTTONDOWN 0x00000005L -#define PNM_LBUTTONUP 0x00000006L -#define PNM_MOUSEMOVE 0x00000007L -#define PNM_NOTERESET 0x00000008L -#define PNM_SETCARETINFO 0x00000009L -#define PNM_SELCHANGED 0x0000000AL -#define PNM_NOTEEDITCHANGED 0x0000000BL - -#define PWL_CLASSNAME_EDIT "CPWL_Edit" - -struct CPWL_Dash -{ - CPWL_Dash(int32_t dash, int32_t gap, int32_t phase) : nDash(dash), nGap(gap), nPhase(phase) - {} - - int32_t nDash; - int32_t nGap; - int32_t nPhase; +// window styles +#define PWS_CHILD 0x80000000L +#define PWS_BORDER 0x40000000L +#define PWS_BACKGROUND 0x20000000L +#define PWS_HSCROLL 0x10000000L +#define PWS_VSCROLL 0x08000000L +#define PWS_VISIBLE 0x04000000L +#define PWS_DISABLE 0x02000000L +#define PWS_READONLY 0x01000000L +#define PWS_AUTOFONTSIZE 0x00800000L +#define PWS_AUTOTRANSPARENT 0x00400000L +#define PWS_NOREFRESHCLIP 0x00200000L + +// edit and label styles +#define PES_MULTILINE 0x0001L +#define PES_PASSWORD 0x0002L +#define PES_LEFT 0x0004L +#define PES_RIGHT 0x0008L +#define PES_MIDDLE 0x0010L +#define PES_TOP 0x0020L +#define PES_BOTTOM 0x0040L +#define PES_CENTER 0x0080L +#define PES_CHARARRAY 0x0100L +#define PES_AUTOSCROLL 0x0200L +#define PES_AUTORETURN 0x0400L +#define PES_UNDO 0x0800L +#define PES_RICH 0x1000L +#define PES_SPELLCHECK 0x2000L +#define PES_TEXTOVERFLOW 0x4000L +#define PES_NOREAD 0x8000L + +// listbox styles +#define PLBS_MULTIPLESEL 0x0001L +#define PLBS_HOVERSEL 0x0008L + +// combobox styles +#define PCBS_ALLOWCUSTOMTEXT 0x0001L + +// richedit styles +#define PRES_MULTILINE 0x0001L +#define PRES_AUTORETURN 0x0002L +#define PRES_AUTOSCROLL 0x0004L +#define PRES_SPELLCHECK 0x0008L +#define PRES_UNDO 0x0100L +#define PRES_MULTIPAGES 0x0200L +#define PRES_TEXTOVERFLOW 0x0400L + +// border style +#define PBS_SOLID 0 +#define PBS_DASH 1 +#define PBS_BEVELED 2 +#define PBS_INSET 3 +#define PBS_UNDERLINED 4 +#define PBS_SHADOW 5 + +// notification messages +#define PNM_ADDCHILD 0x00000000L +#define PNM_REMOVECHILD 0x00000001L +#define PNM_SETSCROLLINFO 0x00000002L +#define PNM_SETSCROLLPOS 0x00000003L +#define PNM_SCROLLWINDOW 0x00000004L +#define PNM_LBUTTONDOWN 0x00000005L +#define PNM_LBUTTONUP 0x00000006L +#define PNM_MOUSEMOVE 0x00000007L +#define PNM_NOTERESET 0x00000008L +#define PNM_SETCARETINFO 0x00000009L +#define PNM_SELCHANGED 0x0000000AL +#define PNM_NOTEEDITCHANGED 0x0000000BL + +#define PWL_CLASSNAME_EDIT "CPWL_Edit" + +struct CPWL_Dash { + CPWL_Dash(int32_t dash, int32_t gap, int32_t phase) + : nDash(dash), nGap(gap), nPhase(phase) {} + + int32_t nDash; + int32_t nGap; + int32_t nPhase; }; -struct CPWL_Color -{ - CPWL_Color(int32_t type = COLORTYPE_TRANSPARENT, FX_FLOAT color1 = 0.0f, FX_FLOAT color2 = 0.0f, FX_FLOAT color3 = 0.0f, FX_FLOAT color4 = 0.0f) - : nColorType(type), fColor1(color1), fColor2(color2), fColor3(color3), fColor4(color4) - {} - - CPWL_Color(int32_t r, int32_t g, int32_t b) : - nColorType(COLORTYPE_RGB), fColor1(r/255.0f), fColor2(g/255.0f), fColor3(b/255.0f), fColor4(0) - {} - - void ConvertColorType(int32_t other_nColorType); - - /* - COLORTYPE_TRANSPARENT - COLORTYPE_RGB - COLORTYPE_CMYK - COLORTYPE_GRAY - */ - int32_t nColorType; - FX_FLOAT fColor1,fColor2,fColor3,fColor4; +struct CPWL_Color { + CPWL_Color(int32_t type = COLORTYPE_TRANSPARENT, + FX_FLOAT color1 = 0.0f, + FX_FLOAT color2 = 0.0f, + FX_FLOAT color3 = 0.0f, + FX_FLOAT color4 = 0.0f) + : nColorType(type), + fColor1(color1), + fColor2(color2), + fColor3(color3), + fColor4(color4) {} + + CPWL_Color(int32_t r, int32_t g, int32_t b) + : nColorType(COLORTYPE_RGB), + fColor1(r / 255.0f), + fColor2(g / 255.0f), + fColor3(b / 255.0f), + fColor4(0) {} + + void ConvertColorType(int32_t other_nColorType); + + /* + COLORTYPE_TRANSPARENT + COLORTYPE_RGB + COLORTYPE_CMYK + COLORTYPE_GRAY + */ + int32_t nColorType; + FX_FLOAT fColor1, fColor2, fColor3, fColor4; }; -inline FX_BOOL operator == (const CPWL_Color &c1, const CPWL_Color &c2) -{ - return c1.nColorType == c2.nColorType && - c1.fColor1 - c2.fColor1 < 0.0001 && c1.fColor1 - c2.fColor1 > -0.0001 && - c1.fColor2 - c2.fColor2 < 0.0001 && c1.fColor2 - c2.fColor2 > -0.0001 && - c1.fColor3 - c2.fColor3 < 0.0001 && c1.fColor3 - c2.fColor3 > -0.0001 && - c1.fColor4 - c2.fColor4 < 0.0001 && c1.fColor4 - c2.fColor4 > -0.0001; +inline FX_BOOL operator==(const CPWL_Color& c1, const CPWL_Color& c2) { + return c1.nColorType == c2.nColorType && c1.fColor1 - c2.fColor1 < 0.0001 && + c1.fColor1 - c2.fColor1 > -0.0001 && + c1.fColor2 - c2.fColor2 < 0.0001 && + c1.fColor2 - c2.fColor2 > -0.0001 && + c1.fColor3 - c2.fColor3 < 0.0001 && + c1.fColor3 - c2.fColor3 > -0.0001 && + c1.fColor4 - c2.fColor4 < 0.0001 && c1.fColor4 - c2.fColor4 > -0.0001; } -inline FX_BOOL operator != (const CPWL_Color &c1, const CPWL_Color &c2) -{ - return !operator == (c1, c2); +inline FX_BOOL operator!=(const CPWL_Color& c1, const CPWL_Color& c2) { + return !operator==(c1, c2); } -#define PWL_SCROLLBAR_WIDTH 12.0f -#define PWL_SCROLLBAR_BUTTON_WIDTH 9.0f -#define PWL_SCROLLBAR_POSBUTTON_MINWIDTH 2.0f -#define PWL_SCROLLBAR_TRANSPARANCY 150 -#define PWL_SCROLLBAR_BKCOLOR CPWL_Color(COLORTYPE_RGB,220.0f/255.0f,220.0f/255.0f,220.0f/255.0f) -#define PWL_DEFAULT_SELTEXTCOLOR CPWL_Color(COLORTYPE_RGB,1,1,1) -#define PWL_DEFAULT_SELBACKCOLOR CPWL_Color(COLORTYPE_RGB,0,51.0f/255.0f,113.0f/255.0f) -#define PWL_DEFAULT_BACKCOLOR PWL_DEFAULT_SELTEXTCOLOR -#define PWL_DEFAULT_TEXTCOLOR CPWL_Color(COLORTYPE_RGB,0,0,0) -#define PWL_DEFAULT_FONTSIZE 9.0f -#define PWL_DEFAULT_BLACKCOLOR CPWL_Color(COLORTYPE_GRAY,0) -#define PWL_DEFAULT_WHITECOLOR CPWL_Color(COLORTYPE_GRAY,1) -#define PWL_DEFAULT_HEAVYGRAYCOLOR CPWL_Color(COLORTYPE_GRAY,0.50) -#define PWL_DEFAULT_LIGHTGRAYCOLOR CPWL_Color(COLORTYPE_GRAY,0.75) -#define PWL_TRIANGLE_HALFLEN 2.0f -#define PWL_CBBUTTON_TRIANGLE_HALFLEN 3.0f -#define PWL_INVALIDATE_INFLATE 2 - -class IPWL_SpellCheck -{ -public: - virtual ~IPWL_SpellCheck() { } - virtual FX_BOOL CheckWord(const FX_CHAR* sWord) = 0; - virtual void SuggestWords(const FX_CHAR* sWord, CFX_ByteStringArray & sSuggest) = 0; +#define PWL_SCROLLBAR_WIDTH 12.0f +#define PWL_SCROLLBAR_BUTTON_WIDTH 9.0f +#define PWL_SCROLLBAR_POSBUTTON_MINWIDTH 2.0f +#define PWL_SCROLLBAR_TRANSPARANCY 150 +#define PWL_SCROLLBAR_BKCOLOR \ + CPWL_Color(COLORTYPE_RGB, 220.0f / 255.0f, 220.0f / 255.0f, 220.0f / 255.0f) +#define PWL_DEFAULT_SELTEXTCOLOR CPWL_Color(COLORTYPE_RGB, 1, 1, 1) +#define PWL_DEFAULT_SELBACKCOLOR \ + CPWL_Color(COLORTYPE_RGB, 0, 51.0f / 255.0f, 113.0f / 255.0f) +#define PWL_DEFAULT_BACKCOLOR PWL_DEFAULT_SELTEXTCOLOR +#define PWL_DEFAULT_TEXTCOLOR CPWL_Color(COLORTYPE_RGB, 0, 0, 0) +#define PWL_DEFAULT_FONTSIZE 9.0f +#define PWL_DEFAULT_BLACKCOLOR CPWL_Color(COLORTYPE_GRAY, 0) +#define PWL_DEFAULT_WHITECOLOR CPWL_Color(COLORTYPE_GRAY, 1) +#define PWL_DEFAULT_HEAVYGRAYCOLOR CPWL_Color(COLORTYPE_GRAY, 0.50) +#define PWL_DEFAULT_LIGHTGRAYCOLOR CPWL_Color(COLORTYPE_GRAY, 0.75) +#define PWL_TRIANGLE_HALFLEN 2.0f +#define PWL_CBBUTTON_TRIANGLE_HALFLEN 3.0f +#define PWL_INVALIDATE_INFLATE 2 + +class IPWL_SpellCheck { + public: + virtual ~IPWL_SpellCheck() {} + virtual FX_BOOL CheckWord(const FX_CHAR* sWord) = 0; + virtual void SuggestWords(const FX_CHAR* sWord, + CFX_ByteStringArray& sSuggest) = 0; }; -class IPWL_Provider -{ -public: - virtual ~IPWL_Provider() { } - - //get a matrix which map user space to CWnd client space - virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData) = 0; - - /* - 0 L"&Undo\tCtrl+Z" - 1 L"&Redo\tCtrl+Shift+Z" - 2 L"Cu&t\tCtrl+X" - 3 L"&Copy\tCtrl+C" - 4 L"&Paste\tCtrl+V" - 5 L"&Delete" - 6 L"&Select All\tCtrl+A" - */ - virtual CFX_WideString LoadPopupMenuString(int32_t nIndex) = 0; +class IPWL_Provider { + public: + virtual ~IPWL_Provider() {} + + // get a matrix which map user space to CWnd client space + virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData) = 0; + + /* + 0 L"&Undo\tCtrl+Z" + 1 L"&Redo\tCtrl+Shift+Z" + 2 L"Cu&t\tCtrl+X" + 3 L"&Copy\tCtrl+C" + 4 L"&Paste\tCtrl+V" + 5 L"&Delete" + 6 L"&Select All\tCtrl+A" + */ + virtual CFX_WideString LoadPopupMenuString(int32_t nIndex) = 0; }; -class IPWL_FocusHandler -{ -public: - virtual ~IPWL_FocusHandler() { } - virtual void OnSetFocus(CPWL_Wnd* pWnd) = 0; - virtual void OnKillFocus(CPWL_Wnd* pWnd) = 0; +class IPWL_FocusHandler { + public: + virtual ~IPWL_FocusHandler() {} + virtual void OnSetFocus(CPWL_Wnd* pWnd) = 0; + virtual void OnKillFocus(CPWL_Wnd* pWnd) = 0; }; -struct PWL_CREATEPARAM -{ -public: - PWL_CREATEPARAM() : rcRectWnd(0,0,0,0), - pSystemHandler(NULL), - pFontMap(NULL), - pProvider(NULL), - pFocusHandler(NULL), - dwFlags(0), - sBackgroundColor(), - hAttachedWnd(NULL), - pSpellCheck(NULL), - nBorderStyle(PBS_SOLID), - dwBorderWidth(1), - sBorderColor(), - sTextColor(), - sTextStrokeColor(), - nTransparency(255), - fFontSize(PWL_DEFAULT_FONTSIZE), - sDash(3,0,0), - pAttachedData(NULL), - pParentWnd(NULL), - pMsgControl(NULL), - eCursorType(FXCT_ARROW), - mtChild(1,0,0,1,0,0) - { - } - - CPDF_Rect rcRectWnd; //required - IFX_SystemHandler* pSystemHandler; //required - IFX_Edit_FontMap* pFontMap; //required for text window - IPWL_Provider* pProvider; //required for self coordinate - IPWL_FocusHandler* pFocusHandler; //optional - FX_DWORD dwFlags; //optional - CPWL_Color sBackgroundColor; //optional - FX_HWND hAttachedWnd; //required for no-reader framework - IPWL_SpellCheck* pSpellCheck; //required for spellchecking - int32_t nBorderStyle; //optional - int32_t dwBorderWidth; //optional - CPWL_Color sBorderColor; //optional - CPWL_Color sTextColor; //optional - CPWL_Color sTextStrokeColor; //optional - int32_t nTransparency; //optional - FX_FLOAT fFontSize; //optional - CPWL_Dash sDash; //optional - void* pAttachedData; //optional - CPWL_Wnd* pParentWnd; //ignore - CPWL_MsgControl* pMsgControl; //ignore - int32_t eCursorType; //ignore - CPDF_Matrix mtChild; //ignore +struct PWL_CREATEPARAM { + public: + PWL_CREATEPARAM() + : rcRectWnd(0, 0, 0, 0), + pSystemHandler(NULL), + pFontMap(NULL), + pProvider(NULL), + pFocusHandler(NULL), + dwFlags(0), + sBackgroundColor(), + hAttachedWnd(NULL), + pSpellCheck(NULL), + nBorderStyle(PBS_SOLID), + dwBorderWidth(1), + sBorderColor(), + sTextColor(), + sTextStrokeColor(), + nTransparency(255), + fFontSize(PWL_DEFAULT_FONTSIZE), + sDash(3, 0, 0), + pAttachedData(NULL), + pParentWnd(NULL), + pMsgControl(NULL), + eCursorType(FXCT_ARROW), + mtChild(1, 0, 0, 1, 0, 0) {} + + CPDF_Rect rcRectWnd; // required + IFX_SystemHandler* pSystemHandler; // required + IFX_Edit_FontMap* pFontMap; // required for text window + IPWL_Provider* pProvider; // required for self coordinate + IPWL_FocusHandler* pFocusHandler; // optional + FX_DWORD dwFlags; // optional + CPWL_Color sBackgroundColor; // optional + FX_HWND hAttachedWnd; // required for no-reader framework + IPWL_SpellCheck* pSpellCheck; // required for spellchecking + int32_t nBorderStyle; // optional + int32_t dwBorderWidth; // optional + CPWL_Color sBorderColor; // optional + CPWL_Color sTextColor; // optional + CPWL_Color sTextStrokeColor; // optional + int32_t nTransparency; // optional + FX_FLOAT fFontSize; // optional + CPWL_Dash sDash; // optional + void* pAttachedData; // optional + CPWL_Wnd* pParentWnd; // ignore + CPWL_MsgControl* pMsgControl; // ignore + int32_t eCursorType; // ignore + CPDF_Matrix mtChild; // ignore }; -class CPWL_Timer -{ -public: - CPWL_Timer(CPWL_TimerHandler* pAttached, IFX_SystemHandler* pSystemHandler); - virtual ~CPWL_Timer(); +class CPWL_Timer { + public: + CPWL_Timer(CPWL_TimerHandler* pAttached, IFX_SystemHandler* pSystemHandler); + virtual ~CPWL_Timer(); - int32_t SetPWLTimer(int32_t nElapse); - void KillPWLTimer(); - static void TimerProc(int32_t idEvent); + int32_t SetPWLTimer(int32_t nElapse); + void KillPWLTimer(); + static void TimerProc(int32_t idEvent); -private: - int32_t m_nTimerID; - CPWL_TimerHandler* m_pAttached; - IFX_SystemHandler* m_pSystemHandler; + private: + int32_t m_nTimerID; + CPWL_TimerHandler* m_pAttached; + IFX_SystemHandler* m_pSystemHandler; }; -class CPWL_TimerHandler -{ -public: - CPWL_TimerHandler(); - virtual ~CPWL_TimerHandler(); +class CPWL_TimerHandler { + public: + CPWL_TimerHandler(); + virtual ~CPWL_TimerHandler(); - void BeginTimer(int32_t nElapse); - void EndTimer(); - virtual void TimerProc(); - virtual IFX_SystemHandler* GetSystemHandler() const = 0; + void BeginTimer(int32_t nElapse); + void EndTimer(); + virtual void TimerProc(); + virtual IFX_SystemHandler* GetSystemHandler() const = 0; -private: - CPWL_Timer* m_pTimer; + private: + CPWL_Timer* m_pTimer; }; -class CPWL_Wnd : public CPWL_TimerHandler -{ - friend class CPWL_MsgControl; -public: - CPWL_Wnd(); - virtual ~CPWL_Wnd(); - - void Create(const PWL_CREATEPARAM & cp); - virtual CFX_ByteString GetClassName() const; - void Destroy(); - void Move(const CPDF_Rect & rcNew,FX_BOOL bReset,FX_BOOL bRefresh); - virtual void InvalidateRect(CPDF_Rect* pRect = NULL); - - void GetAppearanceStream(CFX_ByteString & sAppStream); - void DrawAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - - virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); - virtual FX_BOOL OnKeyUp(FX_WORD nChar, FX_DWORD nFlag); - virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnRButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnRButtonDown(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag); - virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag); - - virtual void SetFocus(); - virtual void KillFocus(); - void SetCapture(); - void ReleaseCapture(); - - virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0); - virtual void SetTextColor(const CPWL_Color & color); - virtual void SetTextStrokeColor(const CPWL_Color & color); - virtual void SetVisible(FX_BOOL bVisible); - - virtual CPDF_Rect GetFocusRect() const; - virtual CPWL_Color GetBackgroundColor() const; - virtual CPWL_Color GetBorderColor() const; - virtual CPWL_Color GetTextColor() const; - virtual CPWL_Color GetTextStrokeColor() const; - virtual FX_FLOAT GetFontSize() const; - virtual int32_t GetInnerBorderWidth() const; - virtual CPWL_Color GetBorderLeftTopColor(int32_t nBorderStyle) const; - virtual CPWL_Color GetBorderRightBottomColor(int32_t nBorderStyle) const; - - virtual FX_BOOL IsModified() const {return FALSE;} - - virtual void SetFontSize(FX_FLOAT fFontSize); - - void SetBackgroundColor(const CPWL_Color & color); - void SetBorderColor(const CPWL_Color & color); - void SetBorderWidth(int32_t nBorderWidth); - void SetClipRect(const CPDF_Rect & rect); - void SetBorderStyle(int32_t eBorderStyle); - void SetBorderDash(const CPWL_Dash & sDash); - - CPDF_Rect GetOriginWindowRect() const; - virtual CPDF_Rect GetWindowRect() const; - virtual CPDF_Rect GetClientRect() const; - CPDF_Point GetCenterPoint() const; - CPDF_Rect GetClientCenterSquare() const; - CPDF_Rect GetWindowCenterSquare() const; - int32_t GetBorderWidth() const; - FX_BOOL IsVisible() const {return m_bVisible;} - FX_BOOL HasFlag(FX_DWORD dwFlags) const; - void AddFlag(FX_DWORD dwFlags); - void RemoveFlag(FX_DWORD dwFlags); - CPDF_Rect GetClipRect() const; - CPWL_Wnd* GetParentWindow() const; - int32_t GetBorderStyle() const; - CPWL_Dash GetBorderDash() const; - void* GetAttachedData() const; - - FX_BOOL WndHitTest(const CPDF_Point & point) const; - FX_BOOL ClientHitTest(const CPDF_Point & point) const; - FX_BOOL IsCaptureMouse() const; - - const CPWL_Wnd* GetFocused() const; - FX_BOOL IsFocused() const; - FX_BOOL IsReadOnly() const; - CPWL_ScrollBar* GetVScrollBar() const; - - IFX_Edit_FontMap* GetFontMap() const; - IPWL_Provider* GetProvider() const; - virtual IFX_SystemHandler* GetSystemHandler() const; - IPWL_FocusHandler* GetFocusHandler() const; - - int32_t GetTransparency(); - void SetTransparency(int32_t nTransparency); - - CPDF_Matrix GetChildToRoot() const; - CPDF_Matrix GetChildMatrix() const; - void SetChildMatrix(const CPDF_Matrix& mt); - CPDF_Matrix GetWindowMatrix() const; - - virtual CPDF_Point ChildToParent(const CPDF_Point& point) const; - virtual CPDF_Rect ChildToParent(const CPDF_Rect& rect) const; - virtual CPDF_Point ParentToChild(const CPDF_Point& point) const; - virtual CPDF_Rect ParentToChild(const CPDF_Rect& rect) const; - - //those methods only implemented by listctrl item - virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth) {return 0;} - virtual FX_FLOAT GetItemLeftMargin() {return 0;} - virtual FX_FLOAT GetItemRightMargin() {return 0;} - - void EnableWindow(FX_BOOL bEnable); - FX_BOOL IsEnabled(); - virtual void SetCursor(); - -protected: - virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); - virtual void RePosChildWnd(); - void GetAppearanceStream(CFX_ByteTextBuf & sAppStream); - virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); - virtual void GetChildAppearanceStream(CFX_ByteTextBuf & sAppStream); - - virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - virtual void DrawChildAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); - - virtual void OnCreate(PWL_CREATEPARAM & cp); - virtual void OnCreated(); - virtual void OnDestroy(); - - virtual void OnSetFocus(); - virtual void OnKillFocus(); - - virtual void OnEnabled(); - virtual void OnDisabled(); - - void SetNotifyFlag(FX_BOOL bNotifying = TRUE){m_bNotifying = bNotifying;}; - - FX_BOOL IsValid() const; - PWL_CREATEPARAM GetCreationParam() const; - FX_BOOL IsNotifying() const {return m_bNotifying;} - - void InvalidateRectMove(const CPDF_Rect & rcOld, const CPDF_Rect & rcNew); - - void PWLtoWnd(const CPDF_Point & point, int32_t& x, int32_t& y) const; - FX_RECT PWLtoWnd(const CPDF_Rect & rect) const; - FX_HWND GetAttachedHWnd() const; - - FX_BOOL IsWndCaptureMouse(const CPWL_Wnd * pWnd) const; - FX_BOOL IsWndCaptureKeyboard(const CPWL_Wnd * pWnd) const; - const CPWL_Wnd* GetRootWnd() const; - - FX_BOOL IsCTRLpressed(FX_DWORD nFlag) const; - FX_BOOL IsSHIFTpressed(FX_DWORD nFlag) const; - FX_BOOL IsALTpressed(FX_DWORD nFlag) const; - FX_BOOL IsINSERTpressed(FX_DWORD nFlag) const; - -private: - void AddChild(CPWL_Wnd * pWnd); - void RemoveChild(CPWL_Wnd * pWnd); - - void CreateScrollBar(const PWL_CREATEPARAM & cp); - void CreateVScrollBar(const PWL_CREATEPARAM & cp); - - void AjustStyle(); - void CreateMsgControl(); - void DestroyMsgControl(); - - CPWL_MsgControl* GetMsgControl() const; - -protected: - CFX_ArrayTemplate m_aChildren; +class CPWL_Wnd : public CPWL_TimerHandler { + friend class CPWL_MsgControl; + + public: + CPWL_Wnd(); + virtual ~CPWL_Wnd(); + + void Create(const PWL_CREATEPARAM& cp); + virtual CFX_ByteString GetClassName() const; + void Destroy(); + void Move(const CPDF_Rect& rcNew, FX_BOOL bReset, FX_BOOL bRefresh); + virtual void InvalidateRect(CPDF_Rect* pRect = NULL); + + void GetAppearanceStream(CFX_ByteString& sAppStream); + void DrawAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); + + virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); + virtual FX_BOOL OnKeyUp(FX_WORD nChar, FX_DWORD nFlag); + virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnRButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnRButtonDown(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag); + virtual FX_BOOL OnMouseWheel(short zDelta, + const CPDF_Point& point, + FX_DWORD nFlag); + + virtual void SetFocus(); + virtual void KillFocus(); + void SetCapture(); + void ReleaseCapture(); + + virtual void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0); + virtual void SetTextColor(const CPWL_Color& color); + virtual void SetTextStrokeColor(const CPWL_Color& color); + virtual void SetVisible(FX_BOOL bVisible); + + virtual CPDF_Rect GetFocusRect() const; + virtual CPWL_Color GetBackgroundColor() const; + virtual CPWL_Color GetBorderColor() const; + virtual CPWL_Color GetTextColor() const; + virtual CPWL_Color GetTextStrokeColor() const; + virtual FX_FLOAT GetFontSize() const; + virtual int32_t GetInnerBorderWidth() const; + virtual CPWL_Color GetBorderLeftTopColor(int32_t nBorderStyle) const; + virtual CPWL_Color GetBorderRightBottomColor(int32_t nBorderStyle) const; + + virtual FX_BOOL IsModified() const { return FALSE; } + + virtual void SetFontSize(FX_FLOAT fFontSize); + + void SetBackgroundColor(const CPWL_Color& color); + void SetBorderColor(const CPWL_Color& color); + void SetBorderWidth(int32_t nBorderWidth); + void SetClipRect(const CPDF_Rect& rect); + void SetBorderStyle(int32_t eBorderStyle); + void SetBorderDash(const CPWL_Dash& sDash); + + CPDF_Rect GetOriginWindowRect() const; + virtual CPDF_Rect GetWindowRect() const; + virtual CPDF_Rect GetClientRect() const; + CPDF_Point GetCenterPoint() const; + CPDF_Rect GetClientCenterSquare() const; + CPDF_Rect GetWindowCenterSquare() const; + int32_t GetBorderWidth() const; + FX_BOOL IsVisible() const { return m_bVisible; } + FX_BOOL HasFlag(FX_DWORD dwFlags) const; + void AddFlag(FX_DWORD dwFlags); + void RemoveFlag(FX_DWORD dwFlags); + CPDF_Rect GetClipRect() const; + CPWL_Wnd* GetParentWindow() const; + int32_t GetBorderStyle() const; + CPWL_Dash GetBorderDash() const; + void* GetAttachedData() const; + + FX_BOOL WndHitTest(const CPDF_Point& point) const; + FX_BOOL ClientHitTest(const CPDF_Point& point) const; + FX_BOOL IsCaptureMouse() const; + + const CPWL_Wnd* GetFocused() const; + FX_BOOL IsFocused() const; + FX_BOOL IsReadOnly() const; + CPWL_ScrollBar* GetVScrollBar() const; + + IFX_Edit_FontMap* GetFontMap() const; + IPWL_Provider* GetProvider() const; + virtual IFX_SystemHandler* GetSystemHandler() const; + IPWL_FocusHandler* GetFocusHandler() const; + + int32_t GetTransparency(); + void SetTransparency(int32_t nTransparency); + + CPDF_Matrix GetChildToRoot() const; + CPDF_Matrix GetChildMatrix() const; + void SetChildMatrix(const CPDF_Matrix& mt); + CPDF_Matrix GetWindowMatrix() const; + + virtual CPDF_Point ChildToParent(const CPDF_Point& point) const; + virtual CPDF_Rect ChildToParent(const CPDF_Rect& rect) const; + virtual CPDF_Point ParentToChild(const CPDF_Point& point) const; + virtual CPDF_Rect ParentToChild(const CPDF_Rect& rect) const; + + // those methods only implemented by listctrl item + virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth) { return 0; } + virtual FX_FLOAT GetItemLeftMargin() { return 0; } + virtual FX_FLOAT GetItemRightMargin() { return 0; } + + void EnableWindow(FX_BOOL bEnable); + FX_BOOL IsEnabled(); + virtual void SetCursor(); + + protected: + virtual void CreateChildWnd(const PWL_CREATEPARAM& cp); + virtual void RePosChildWnd(); + void GetAppearanceStream(CFX_ByteTextBuf& sAppStream); + virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream); + virtual void GetChildAppearanceStream(CFX_ByteTextBuf& sAppStream); + + virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + virtual void DrawChildAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device); + + virtual void OnCreate(PWL_CREATEPARAM& cp); + virtual void OnCreated(); + virtual void OnDestroy(); + + virtual void OnSetFocus(); + virtual void OnKillFocus(); + + virtual void OnEnabled(); + virtual void OnDisabled(); + + void SetNotifyFlag(FX_BOOL bNotifying = TRUE) { m_bNotifying = bNotifying; }; + + FX_BOOL IsValid() const; + PWL_CREATEPARAM GetCreationParam() const; + FX_BOOL IsNotifying() const { return m_bNotifying; } + + void InvalidateRectMove(const CPDF_Rect& rcOld, const CPDF_Rect& rcNew); + + void PWLtoWnd(const CPDF_Point& point, int32_t& x, int32_t& y) const; + FX_RECT PWLtoWnd(const CPDF_Rect& rect) const; + FX_HWND GetAttachedHWnd() const; + + FX_BOOL IsWndCaptureMouse(const CPWL_Wnd* pWnd) const; + FX_BOOL IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const; + const CPWL_Wnd* GetRootWnd() const; + + FX_BOOL IsCTRLpressed(FX_DWORD nFlag) const; + FX_BOOL IsSHIFTpressed(FX_DWORD nFlag) const; + FX_BOOL IsALTpressed(FX_DWORD nFlag) const; + FX_BOOL IsINSERTpressed(FX_DWORD nFlag) const; + + private: + void AddChild(CPWL_Wnd* pWnd); + void RemoveChild(CPWL_Wnd* pWnd); + + void CreateScrollBar(const PWL_CREATEPARAM& cp); + void CreateVScrollBar(const PWL_CREATEPARAM& cp); + + void AjustStyle(); + void CreateMsgControl(); + void DestroyMsgControl(); + + CPWL_MsgControl* GetMsgControl() const; + + protected: + CFX_ArrayTemplate m_aChildren; -private: - PWL_CREATEPARAM m_sPrivateParam; + private: + PWL_CREATEPARAM m_sPrivateParam; - CPWL_ScrollBar* m_pVScrollBar; + CPWL_ScrollBar* m_pVScrollBar; - CPDF_Rect m_rcWindow; - CPDF_Rect m_rcClip; + CPDF_Rect m_rcWindow; + CPDF_Rect m_rcClip; - FX_BOOL m_bCreated; - FX_BOOL m_bVisible; - FX_BOOL m_bNotifying; - FX_BOOL m_bEnabled; + FX_BOOL m_bCreated; + FX_BOOL m_bVisible; + FX_BOOL m_bNotifying; + FX_BOOL m_bEnabled; }; #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_WND_H_ diff --git a/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp b/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp index 53efe9fe3a..cb6d51939e 100644 --- a/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp +++ b/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp @@ -7,293 +7,280 @@ #include "../../include/formfiller/FormFiller.h" #include "../../include/formfiller/FFL_CBA_Fontmap.h" -CBA_FontMap::CBA_FontMap(CPDFSDK_Annot* pAnnot, IFX_SystemHandler* pSystemHandler) : - CPWL_FontMap(pSystemHandler), - m_pDocument(NULL), - m_pAnnotDict(NULL), - m_pDefaultFont(NULL), - m_sAPType("N") -{ - ASSERT(pAnnot != NULL); - - CPDF_Page* pPage = pAnnot->GetPDFPage(); - - m_pDocument = pPage->m_pDocument; - m_pAnnotDict = pAnnot->GetPDFAnnot()->GetAnnotDict(); +CBA_FontMap::CBA_FontMap(CPDFSDK_Annot* pAnnot, + IFX_SystemHandler* pSystemHandler) + : CPWL_FontMap(pSystemHandler), + m_pDocument(NULL), + m_pAnnotDict(NULL), + m_pDefaultFont(NULL), + m_sAPType("N") { + ASSERT(pAnnot != NULL); + + CPDF_Page* pPage = pAnnot->GetPDFPage(); + + m_pDocument = pPage->m_pDocument; + m_pAnnotDict = pAnnot->GetPDFAnnot()->GetAnnotDict(); } -CBA_FontMap::CBA_FontMap(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict, - IFX_SystemHandler* pSystemHandler) : - CPWL_FontMap(pSystemHandler), - m_pDocument(pDocument), - m_pAnnotDict(pAnnotDict), - m_pDefaultFont(NULL), - m_sAPType("N") -{ +CBA_FontMap::CBA_FontMap(CPDF_Document* pDocument, + CPDF_Dictionary* pAnnotDict, + IFX_SystemHandler* pSystemHandler) + : CPWL_FontMap(pSystemHandler), + m_pDocument(pDocument), + m_pAnnotDict(pAnnotDict), + m_pDefaultFont(NULL), + m_sAPType("N") {} + +CBA_FontMap::~CBA_FontMap() {} + +void CBA_FontMap::Reset() { + Empty(); + m_pDefaultFont = NULL; + m_sDefaultFontName = ""; } -CBA_FontMap::~CBA_FontMap() -{ +void CBA_FontMap::Initial(const FX_CHAR* fontname) { + int32_t nCharset = DEFAULT_CHARSET; + + if (!m_pDefaultFont) { + m_pDefaultFont = GetAnnotDefaultFont(m_sDefaultFontName); + if (m_pDefaultFont) { + if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont()) + nCharset = pSubstFont->m_Charset; + else { + if (m_sDefaultFontName == "Wingdings" || + m_sDefaultFontName == "Wingdings2" || + m_sDefaultFontName == "Wingdings3" || + m_sDefaultFontName == "Webdings") + nCharset = SYMBOL_CHARSET; + else + nCharset = ANSI_CHARSET; + } + AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset); + AddFontToAnnotDict(m_pDefaultFont, m_sDefaultFontName); + } + } + + if (nCharset != ANSI_CHARSET) + CPWL_FontMap::Initial(fontname); } -void CBA_FontMap::Reset() -{ - Empty(); - m_pDefaultFont = NULL; - m_sDefaultFontName = ""; -} - -void CBA_FontMap::Initial(const FX_CHAR* fontname) -{ - int32_t nCharset = DEFAULT_CHARSET; - - if (!m_pDefaultFont) - { - m_pDefaultFont = GetAnnotDefaultFont(m_sDefaultFontName); - if (m_pDefaultFont) - { - if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont()) - nCharset = pSubstFont->m_Charset; - else - { - if (m_sDefaultFontName == "Wingdings" || m_sDefaultFontName == "Wingdings2" || - m_sDefaultFontName == "Wingdings3" || m_sDefaultFontName == "Webdings") - nCharset = SYMBOL_CHARSET; - else - nCharset = ANSI_CHARSET; - } - AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset); - AddFontToAnnotDict(m_pDefaultFont, m_sDefaultFontName); - } - } - - if (nCharset != ANSI_CHARSET) - CPWL_FontMap::Initial(fontname); -} +void CBA_FontMap::SetDefaultFont(CPDF_Font* pFont, + const CFX_ByteString& sFontName) { + ASSERT(pFont != NULL); -void CBA_FontMap::SetDefaultFont(CPDF_Font * pFont, const CFX_ByteString & sFontName) -{ - ASSERT(pFont != NULL); + if (m_pDefaultFont) + return; - if (m_pDefaultFont) return; + m_pDefaultFont = pFont; + m_sDefaultFontName = sFontName; - m_pDefaultFont = pFont; - m_sDefaultFontName = sFontName; + // if (m_sDefaultFontName.IsEmpty()) + // m_sDefaultFontName = pFont->GetFontTypeName(); -// if (m_sDefaultFontName.IsEmpty()) -// m_sDefaultFontName = pFont->GetFontTypeName(); - - int32_t nCharset = DEFAULT_CHARSET; - if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont()) - nCharset = pSubstFont->m_Charset; - AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset); + int32_t nCharset = DEFAULT_CHARSET; + if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont()) + nCharset = pSubstFont->m_Charset; + AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset); } -CPDF_Font* CBA_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset) -{ - ASSERT(m_pAnnotDict != NULL); +CPDF_Font* CBA_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, + int32_t nCharset) { + ASSERT(m_pAnnotDict != NULL); - if (m_pAnnotDict->GetString("Subtype") == "Widget") - { - CPDF_Document* pDocument = GetDocument(); - ASSERT(pDocument != NULL); + if (m_pAnnotDict->GetString("Subtype") == "Widget") { + CPDF_Document* pDocument = GetDocument(); + ASSERT(pDocument != NULL); - CPDF_Dictionary * pRootDict = pDocument->GetRoot(); - if (!pRootDict) return NULL; + CPDF_Dictionary* pRootDict = pDocument->GetRoot(); + if (!pRootDict) + return NULL; - CPDF_Dictionary* pAcroFormDict = pRootDict->GetDict("AcroForm"); - if (!pAcroFormDict) return NULL; + CPDF_Dictionary* pAcroFormDict = pRootDict->GetDict("AcroForm"); + if (!pAcroFormDict) + return NULL; - CPDF_Dictionary * pDRDict = pAcroFormDict->GetDict("DR"); - if (!pDRDict) return NULL; + CPDF_Dictionary* pDRDict = pAcroFormDict->GetDict("DR"); + if (!pDRDict) + return NULL; - return FindResFontSameCharset(pDRDict, sFontAlias, nCharset); - } + return FindResFontSameCharset(pDRDict, sFontAlias, nCharset); + } - return NULL; + return NULL; } -CPDF_Document* CBA_FontMap::GetDocument() -{ - return m_pDocument; +CPDF_Document* CBA_FontMap::GetDocument() { + return m_pDocument; } -CPDF_Font* CBA_FontMap::FindResFontSameCharset(CPDF_Dictionary* pResDict, CFX_ByteString& sFontAlias, - int32_t nCharset) -{ - if (!pResDict) return NULL; - - CPDF_Document* pDocument = GetDocument(); - ASSERT(pDocument != NULL); - - CPDF_Dictionary* pFonts = pResDict->GetDict("Font"); - if (pFonts == NULL) return NULL; - - CPDF_Font* pFind = NULL; - - FX_POSITION pos = pFonts->GetStartPos(); - while (pos) - { - CPDF_Object* pObj = NULL; - CFX_ByteString csKey; - pObj = pFonts->GetNextElement(pos, csKey); - if (pObj == NULL) continue; - - CPDF_Object* pDirect = pObj->GetDirect(); - if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) continue; - - CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; - if (pElement->GetString("Type") != "Font") continue; - - CPDF_Font* pFont = pDocument->LoadFont(pElement); - if (pFont == NULL) continue; - const CFX_SubstFont* pSubst = pFont->GetSubstFont(); - if (pSubst == NULL) continue; - if (pSubst->m_Charset == nCharset) - { - sFontAlias = csKey; - pFind = pFont; - } - } - return pFind; +CPDF_Font* CBA_FontMap::FindResFontSameCharset(CPDF_Dictionary* pResDict, + CFX_ByteString& sFontAlias, + int32_t nCharset) { + if (!pResDict) + return NULL; + + CPDF_Document* pDocument = GetDocument(); + ASSERT(pDocument != NULL); + + CPDF_Dictionary* pFonts = pResDict->GetDict("Font"); + if (pFonts == NULL) + return NULL; + + CPDF_Font* pFind = NULL; + + FX_POSITION pos = pFonts->GetStartPos(); + while (pos) { + CPDF_Object* pObj = NULL; + CFX_ByteString csKey; + pObj = pFonts->GetNextElement(pos, csKey); + if (pObj == NULL) + continue; + + CPDF_Object* pDirect = pObj->GetDirect(); + if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) + continue; + + CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect; + if (pElement->GetString("Type") != "Font") + continue; + + CPDF_Font* pFont = pDocument->LoadFont(pElement); + if (pFont == NULL) + continue; + const CFX_SubstFont* pSubst = pFont->GetSubstFont(); + if (pSubst == NULL) + continue; + if (pSubst->m_Charset == nCharset) { + sFontAlias = csKey; + pFind = pFont; + } + } + return pFind; } -void CBA_FontMap::AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias) -{ - AddFontToAnnotDict(pFont, sFontAlias); +void CBA_FontMap::AddedFont(CPDF_Font* pFont, + const CFX_ByteString& sFontAlias) { + AddFontToAnnotDict(pFont, sFontAlias); } -void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, const CFX_ByteString& sAlias) -{ - if (!pFont) return; - - ASSERT(m_pAnnotDict != NULL); - ASSERT(m_pDocument != NULL); - - CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDict("AP"); - - if (pAPDict == NULL) - { - pAPDict = FX_NEW CPDF_Dictionary; - m_pAnnotDict->SetAt("AP", pAPDict); - } - - //to avoid checkbox and radiobutton - CPDF_Object* pObject = pAPDict->GetElement(m_sAPType); - if (pObject && pObject->GetType() == PDFOBJ_DICTIONARY) - return; - - CPDF_Stream* pStream = pAPDict->GetStream(m_sAPType); - if (pStream == NULL) - { - pStream = new CPDF_Stream(NULL, 0, NULL); - int32_t objnum = m_pDocument->AddIndirectObject(pStream); - pAPDict->SetAtReference(m_sAPType, m_pDocument, objnum); - } - - CPDF_Dictionary * pStreamDict = pStream->GetDict(); - - if (!pStreamDict) - { - pStreamDict = FX_NEW CPDF_Dictionary; - pStream->InitStream(NULL, 0, pStreamDict); - } - - if (pStreamDict) - { - CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources"); - if (!pStreamResList) - { - pStreamResList = FX_NEW CPDF_Dictionary(); - pStreamDict->SetAt("Resources", pStreamResList); - } - - if (pStreamResList) - { - CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDict("Font"); - if (!pStreamResFontList) - { - pStreamResFontList = new CPDF_Dictionary; - int32_t objnum = m_pDocument->AddIndirectObject(pStreamResFontList); - pStreamResList->SetAtReference("Font", m_pDocument, objnum); - } - if (!pStreamResFontList->KeyExist(sAlias)) - pStreamResFontList->SetAtReference(sAlias, m_pDocument, pFont->GetFontDict()); - } - } +void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, + const CFX_ByteString& sAlias) { + if (!pFont) + return; + + ASSERT(m_pAnnotDict != NULL); + ASSERT(m_pDocument != NULL); + + CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDict("AP"); + + if (pAPDict == NULL) { + pAPDict = FX_NEW CPDF_Dictionary; + m_pAnnotDict->SetAt("AP", pAPDict); + } + + // to avoid checkbox and radiobutton + CPDF_Object* pObject = pAPDict->GetElement(m_sAPType); + if (pObject && pObject->GetType() == PDFOBJ_DICTIONARY) + return; + + CPDF_Stream* pStream = pAPDict->GetStream(m_sAPType); + if (pStream == NULL) { + pStream = new CPDF_Stream(NULL, 0, NULL); + int32_t objnum = m_pDocument->AddIndirectObject(pStream); + pAPDict->SetAtReference(m_sAPType, m_pDocument, objnum); + } + + CPDF_Dictionary* pStreamDict = pStream->GetDict(); + + if (!pStreamDict) { + pStreamDict = FX_NEW CPDF_Dictionary; + pStream->InitStream(NULL, 0, pStreamDict); + } + + if (pStreamDict) { + CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources"); + if (!pStreamResList) { + pStreamResList = FX_NEW CPDF_Dictionary(); + pStreamDict->SetAt("Resources", pStreamResList); + } + + if (pStreamResList) { + CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDict("Font"); + if (!pStreamResFontList) { + pStreamResFontList = new CPDF_Dictionary; + int32_t objnum = m_pDocument->AddIndirectObject(pStreamResFontList); + pStreamResList->SetAtReference("Font", m_pDocument, objnum); + } + if (!pStreamResFontList->KeyExist(sAlias)) + pStreamResFontList->SetAtReference(sAlias, m_pDocument, + pFont->GetFontDict()); + } + } } -CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString &sAlias) -{ - ASSERT(m_pAnnotDict != NULL); - ASSERT(m_pDocument != NULL); - - CPDF_Dictionary* pAcroFormDict = NULL; - - FX_BOOL bWidget = (m_pAnnotDict->GetString("Subtype") == "Widget"); - - if (bWidget) - { - if (CPDF_Dictionary * pRootDict = m_pDocument->GetRoot()) - pAcroFormDict = pRootDict->GetDict("AcroForm"); - } - - CFX_ByteString sDA; - CPDF_Object* pObj; - if ((pObj = FPDF_GetFieldAttr(m_pAnnotDict, "DA"))) - sDA = pObj->GetString(); - - if (bWidget) - { - if (sDA.IsEmpty()) - { - pObj = FPDF_GetFieldAttr(pAcroFormDict, "DA"); - sDA = pObj ? pObj->GetString() : CFX_ByteString(); - } - } - - CPDF_Dictionary * pFontDict = NULL; - - if (!sDA.IsEmpty()) - { - CPDF_SimpleParser syntax(sDA); - syntax.FindTagParam("Tf", 2); - CFX_ByteString sFontName = syntax.GetWord(); - sAlias = PDF_NameDecode(sFontName).Mid(1); - - if (CPDF_Dictionary * pDRDict = m_pAnnotDict->GetDict("DR")) - if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDict("Font")) - pFontDict = pDRFontDict->GetDict(sAlias); - - if (!pFontDict) - if (CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDict("AP")) - if (CPDF_Dictionary* pNormalDict = pAPDict->GetDict("N")) - if (CPDF_Dictionary* pNormalResDict = pNormalDict->GetDict("Resources")) - if (CPDF_Dictionary* pResFontDict = pNormalResDict->GetDict("Font")) - pFontDict = pResFontDict->GetDict(sAlias); - - if (bWidget) - { - if (!pFontDict) - { - if (pAcroFormDict) - { - if (CPDF_Dictionary * pDRDict = pAcroFormDict->GetDict("DR")) - if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDict("Font")) - pFontDict = pDRFontDict->GetDict(sAlias); - } - } - } - } - - return pFontDict ? m_pDocument->LoadFont(pFontDict) : nullptr; +CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString& sAlias) { + ASSERT(m_pAnnotDict != NULL); + ASSERT(m_pDocument != NULL); + + CPDF_Dictionary* pAcroFormDict = NULL; + + FX_BOOL bWidget = (m_pAnnotDict->GetString("Subtype") == "Widget"); + + if (bWidget) { + if (CPDF_Dictionary* pRootDict = m_pDocument->GetRoot()) + pAcroFormDict = pRootDict->GetDict("AcroForm"); + } + + CFX_ByteString sDA; + CPDF_Object* pObj; + if ((pObj = FPDF_GetFieldAttr(m_pAnnotDict, "DA"))) + sDA = pObj->GetString(); + + if (bWidget) { + if (sDA.IsEmpty()) { + pObj = FPDF_GetFieldAttr(pAcroFormDict, "DA"); + sDA = pObj ? pObj->GetString() : CFX_ByteString(); + } + } + + CPDF_Dictionary* pFontDict = NULL; + + if (!sDA.IsEmpty()) { + CPDF_SimpleParser syntax(sDA); + syntax.FindTagParam("Tf", 2); + CFX_ByteString sFontName = syntax.GetWord(); + sAlias = PDF_NameDecode(sFontName).Mid(1); + + if (CPDF_Dictionary* pDRDict = m_pAnnotDict->GetDict("DR")) + if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDict("Font")) + pFontDict = pDRFontDict->GetDict(sAlias); + + if (!pFontDict) + if (CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDict("AP")) + if (CPDF_Dictionary* pNormalDict = pAPDict->GetDict("N")) + if (CPDF_Dictionary* pNormalResDict = + pNormalDict->GetDict("Resources")) + if (CPDF_Dictionary* pResFontDict = pNormalResDict->GetDict("Font")) + pFontDict = pResFontDict->GetDict(sAlias); + + if (bWidget) { + if (!pFontDict) { + if (pAcroFormDict) { + if (CPDF_Dictionary* pDRDict = pAcroFormDict->GetDict("DR")) + if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDict("Font")) + pFontDict = pDRFontDict->GetDict(sAlias); + } + } + } + } + + return pFontDict ? m_pDocument->LoadFont(pFontDict) : nullptr; } -void CBA_FontMap::SetAPType(const CFX_ByteString& sAPType) -{ - m_sAPType = sAPType; +void CBA_FontMap::SetAPType(const CFX_ByteString& sAPType) { + m_sAPType = sAPType; - Reset(); - Initial(); + Reset(); + Initial(); } - diff --git a/fpdfsdk/src/formfiller/FFL_CheckBox.cpp b/fpdfsdk/src/formfiller/FFL_CheckBox.cpp index 55d2d45bc2..42c6251d68 100644 --- a/fpdfsdk/src/formfiller/FFL_CheckBox.cpp +++ b/fpdfsdk/src/formfiller/FFL_CheckBox.cpp @@ -8,137 +8,122 @@ #include "../../include/formfiller/FFL_FormFiller.h" #include "../../include/formfiller/FFL_CheckBox.h" +/* ------------------------------- CFFL_CheckBox ------------------------------- + */ -/* ------------------------------- CFFL_CheckBox ------------------------------- */ +CFFL_CheckBox::CFFL_CheckBox(CPDFDoc_Environment* pApp, CPDFSDK_Widget* pWidget) + : CFFL_Button(pApp, pWidget) {} -CFFL_CheckBox::CFFL_CheckBox(CPDFDoc_Environment* pApp, CPDFSDK_Widget* pWidget) : - CFFL_Button(pApp, pWidget) -{ -} - -CFFL_CheckBox::~CFFL_CheckBox() -{ -} +CFFL_CheckBox::~CFFL_CheckBox() {} -CPWL_Wnd* CFFL_CheckBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) -{ - CPWL_CheckBox* pWnd = new CPWL_CheckBox(); - pWnd->Create(cp); +CPWL_Wnd* CFFL_CheckBox::NewPDFWindow(const PWL_CREATEPARAM& cp, + CPDFSDK_PageView* pPageView) { + CPWL_CheckBox* pWnd = new CPWL_CheckBox(); + pWnd->Create(cp); - ASSERT(m_pWidget != NULL); - pWnd->SetCheck(m_pWidget->IsChecked()); + ASSERT(m_pWidget != NULL); + pWnd->SetCheck(m_pWidget->IsChecked()); - return pWnd; + return pWnd; } -FX_BOOL CFFL_CheckBox::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags) -{ - switch (nKeyCode) - { - case FWL_VKEY_Return: - case FWL_VKEY_Space: - return TRUE; - default: - return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags); - } +FX_BOOL CFFL_CheckBox::OnKeyDown(CPDFSDK_Annot* pAnnot, + FX_UINT nKeyCode, + FX_UINT nFlags) { + switch (nKeyCode) { + case FWL_VKEY_Return: + case FWL_VKEY_Space: + return TRUE; + default: + return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags); + } } -FX_BOOL CFFL_CheckBox::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) -{ - switch (nChar) - { - case FWL_VKEY_Return: - case FWL_VKEY_Space: - { - CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); - ASSERT(pIFormFiller != NULL); - - CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); - ASSERT(pPageView != NULL); - - FX_BOOL bReset = FALSE; - FX_BOOL bExit = FALSE; - - pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit,nFlags); - - if (bReset) return TRUE; - if (bExit) return TRUE; - - CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); - - if (CPWL_CheckBox * pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE)) - pWnd->SetCheck(!pWnd->IsChecked()); - - CommitData(pPageView,nFlags); - return TRUE; - } - default: - return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); - } +FX_BOOL CFFL_CheckBox::OnChar(CPDFSDK_Annot* pAnnot, + FX_UINT nChar, + FX_UINT nFlags) { + switch (nChar) { + case FWL_VKEY_Return: + case FWL_VKEY_Space: { + CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); + ASSERT(pIFormFiller != NULL); + + CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); + ASSERT(pPageView != NULL); + + FX_BOOL bReset = FALSE; + FX_BOOL bExit = FALSE; + + pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit, nFlags); + + if (bReset) + return TRUE; + if (bExit) + return TRUE; + + CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); + + if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE)) + pWnd->SetCheck(!pWnd->IsChecked()); + + CommitData(pPageView, nFlags); + return TRUE; + } + default: + return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); + } } -FX_BOOL CFFL_CheckBox::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point); +FX_BOOL CFFL_CheckBox::OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point); - if (IsValid()) - { - if (CPWL_CheckBox * pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE)) - { - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - pWnd->SetCheck(!pWidget->IsChecked()); - // pWnd->SetCheck(!pWnd->IsChecked()); - } + if (IsValid()) { + if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE)) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + pWnd->SetCheck(!pWidget->IsChecked()); + // pWnd->SetCheck(!pWnd->IsChecked()); + } - if (!CommitData(pPageView, nFlags)) return FALSE; - } + if (!CommitData(pPageView, nFlags)) + return FALSE; + } - return TRUE; + return TRUE; } -FX_BOOL CFFL_CheckBox::IsDataChanged(CPDFSDK_PageView* pPageView) -{ +FX_BOOL CFFL_CheckBox::IsDataChanged(CPDFSDK_PageView* pPageView) { + ASSERT(m_pWidget != NULL); - ASSERT(m_pWidget != NULL); + if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE)) { + return pWnd->IsChecked() != m_pWidget->IsChecked(); + } - if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE)) - { - return pWnd->IsChecked() != m_pWidget->IsChecked(); - } - - return FALSE; + return FALSE; } -void CFFL_CheckBox::SaveData(CPDFSDK_PageView* pPageView) -{ - - ASSERT(m_pWidget != NULL); - - if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE)) - { - - FX_BOOL bNewChecked = pWnd->IsChecked(); - - - if (bNewChecked) - { - CPDF_FormField* pField = m_pWidget->GetFormField(); - ASSERT(pField != NULL); - - for (int32_t i=0,sz=pField->CountControls(); iGetControl(i)) - { - if (pCtrl->IsChecked()) - { - break; - } - } - } - } - - m_pWidget->SetCheck(bNewChecked, FALSE); - m_pWidget->UpdateField(); - SetChangeMark(); - } - +void CFFL_CheckBox::SaveData(CPDFSDK_PageView* pPageView) { + ASSERT(m_pWidget != NULL); + + if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE)) { + FX_BOOL bNewChecked = pWnd->IsChecked(); + + if (bNewChecked) { + CPDF_FormField* pField = m_pWidget->GetFormField(); + ASSERT(pField != NULL); + + for (int32_t i = 0, sz = pField->CountControls(); i < sz; i++) { + if (CPDF_FormControl* pCtrl = pField->GetControl(i)) { + if (pCtrl->IsChecked()) { + break; + } + } + } + } + + m_pWidget->SetCheck(bNewChecked, FALSE); + m_pWidget->UpdateField(); + SetChangeMark(); + } } diff --git a/fpdfsdk/src/formfiller/FFL_ComboBox.cpp b/fpdfsdk/src/formfiller/FFL_ComboBox.cpp index 96574d66cb..1477e24c44 100644 --- a/fpdfsdk/src/formfiller/FFL_ComboBox.cpp +++ b/fpdfsdk/src/formfiller/FFL_ComboBox.cpp @@ -10,409 +10,358 @@ #include "../../include/formfiller/FFL_CBA_Fontmap.h" #include "../../include/formfiller/FFL_ComboBox.h" - -/* ------------------------------- CFFL_ComboBox ------------------------------- */ - -CFFL_ComboBox::CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot) : - CFFL_FormFiller(pApp, pAnnot), m_pFontMap( NULL ) -{ - m_State.nIndex = 0; - m_State.nStart = 0; - m_State.nEnd = 0; +/* ------------------------------- CFFL_ComboBox ------------------------------- + */ + +CFFL_ComboBox::CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot) + : CFFL_FormFiller(pApp, pAnnot), m_pFontMap(NULL) { + m_State.nIndex = 0; + m_State.nStart = 0; + m_State.nEnd = 0; } -CFFL_ComboBox::~CFFL_ComboBox() -{ - delete m_pFontMap; +CFFL_ComboBox::~CFFL_ComboBox() { + delete m_pFontMap; } -PWL_CREATEPARAM CFFL_ComboBox::GetCreateParam() -{ - PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam(); +PWL_CREATEPARAM CFFL_ComboBox::GetCreateParam() { + PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam(); - ASSERT(m_pWidget != NULL); + ASSERT(m_pWidget != NULL); - int nFlags = m_pWidget->GetFieldFlags(); + int nFlags = m_pWidget->GetFieldFlags(); - if (nFlags & FIELDFLAG_EDIT) - { - cp.dwFlags |= PCBS_ALLOWCUSTOMTEXT; - } + if (nFlags & FIELDFLAG_EDIT) { + cp.dwFlags |= PCBS_ALLOWCUSTOMTEXT; + } - if (!m_pFontMap) - { - m_pFontMap = new CBA_FontMap(m_pWidget, GetSystemHandler()); - m_pFontMap->Initial(); - } + if (!m_pFontMap) { + m_pFontMap = new CBA_FontMap(m_pWidget, GetSystemHandler()); + m_pFontMap->Initial(); + } - cp.pFontMap = m_pFontMap; - cp.pFocusHandler = this; + cp.pFontMap = m_pFontMap; + cp.pFocusHandler = this; - return cp; + return cp; } -CPWL_Wnd* CFFL_ComboBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) -{ - CPWL_ComboBox * pWnd = new CPWL_ComboBox(); - pWnd->AttachFFLData(this); - pWnd->Create(cp); - - CFFL_IFormFiller* pFormFiller = m_pApp->GetIFormFiller(); - pWnd->SetFillerNotify(pFormFiller); - - int32_t nCurSel = m_pWidget->GetSelectedIndex(0); - CFX_WideString swText; - if (nCurSel < 0) - swText = m_pWidget->GetValue(); - else - swText = m_pWidget->GetOptionLabel(nCurSel); - - for (int32_t i=0,sz=m_pWidget->CountOptions(); iAddString(m_pWidget->GetOptionLabel(i).c_str()); - } - - pWnd->SetSelect(nCurSel); - pWnd->SetText(swText.c_str()); - return pWnd; +CPWL_Wnd* CFFL_ComboBox::NewPDFWindow(const PWL_CREATEPARAM& cp, + CPDFSDK_PageView* pPageView) { + CPWL_ComboBox* pWnd = new CPWL_ComboBox(); + pWnd->AttachFFLData(this); + pWnd->Create(cp); + + CFFL_IFormFiller* pFormFiller = m_pApp->GetIFormFiller(); + pWnd->SetFillerNotify(pFormFiller); + + int32_t nCurSel = m_pWidget->GetSelectedIndex(0); + CFX_WideString swText; + if (nCurSel < 0) + swText = m_pWidget->GetValue(); + else + swText = m_pWidget->GetOptionLabel(nCurSel); + + for (int32_t i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) { + pWnd->AddString(m_pWidget->GetOptionLabel(i).c_str()); + } + + pWnd->SetSelect(nCurSel); + pWnd->SetText(swText.c_str()); + return pWnd; } - -FX_BOOL CFFL_ComboBox::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) -{ - return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); +FX_BOOL CFFL_ComboBox::OnChar(CPDFSDK_Annot* pAnnot, + FX_UINT nChar, + FX_UINT nFlags) { + return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); } -FX_BOOL CFFL_ComboBox::IsDataChanged(CPDFSDK_PageView* pPageView) -{ - CPWL_ComboBox* pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE); - if (!pWnd) - return FALSE; +FX_BOOL CFFL_ComboBox::IsDataChanged(CPDFSDK_PageView* pPageView) { + CPWL_ComboBox* pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE); + if (!pWnd) + return FALSE; - int32_t nCurSel = pWnd->GetSelect(); - if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT)) - return nCurSel != m_pWidget->GetSelectedIndex(0); + int32_t nCurSel = pWnd->GetSelect(); + if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT)) + return nCurSel != m_pWidget->GetSelectedIndex(0); - if (nCurSel >= 0) - return nCurSel != m_pWidget->GetSelectedIndex(0); + if (nCurSel >= 0) + return nCurSel != m_pWidget->GetSelectedIndex(0); - return pWnd->GetText() != m_pWidget->GetValue(); + return pWnd->GetText() != m_pWidget->GetValue(); } -void CFFL_ComboBox::SaveData(CPDFSDK_PageView* pPageView) -{ - ASSERT(m_pWidget != NULL); - - if (CPWL_ComboBox* pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) - { - CFX_WideString swText = pWnd->GetText(); - int32_t nCurSel = pWnd->GetSelect(); - - //mantis:0004157 - FX_BOOL bSetValue = TRUE; - - if (m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT) - { - if (nCurSel >= 0) - { - if (swText != m_pWidget->GetOptionLabel(nCurSel)) - bSetValue = TRUE; - else - bSetValue = FALSE; - } - else - bSetValue = TRUE; - } - else - bSetValue = FALSE; +void CFFL_ComboBox::SaveData(CPDFSDK_PageView* pPageView) { + ASSERT(m_pWidget != NULL); - CFX_WideString sOldValue; + if (CPWL_ComboBox* pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) { + CFX_WideString swText = pWnd->GetText(); + int32_t nCurSel = pWnd->GetSelect(); + // mantis:0004157 + FX_BOOL bSetValue = TRUE; - if (bSetValue) - { - sOldValue = m_pWidget->GetValue(); - m_pWidget->SetValue(swText, FALSE); - } + if (m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT) { + if (nCurSel >= 0) { + if (swText != m_pWidget->GetOptionLabel(nCurSel)) + bSetValue = TRUE; else - { - m_pWidget->GetSelectedIndex(0); - m_pWidget->SetOptionSelection(nCurSel, TRUE, FALSE); - } - - m_pWidget->ResetFieldAppearance(TRUE); - m_pWidget->UpdateField(); - SetChangeMark(); - - m_pWidget->GetPDFPage(); + bSetValue = FALSE; + } else + bSetValue = TRUE; + } else + bSetValue = FALSE; + + CFX_WideString sOldValue; + + if (bSetValue) { + sOldValue = m_pWidget->GetValue(); + m_pWidget->SetValue(swText, FALSE); + } else { + m_pWidget->GetSelectedIndex(0); + m_pWidget->SetOptionSelection(nCurSel, TRUE, FALSE); + } + m_pWidget->ResetFieldAppearance(TRUE); + m_pWidget->UpdateField(); + SetChangeMark(); - } + m_pWidget->GetPDFPage(); + } } - void CFFL_ComboBox::GetActionData( CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, PDFSDK_FieldAction& fa) -{ - switch (type) - { +void CFFL_ComboBox::GetActionData(CPDFSDK_PageView* pPageView, + CPDF_AAction::AActionType type, + PDFSDK_FieldAction& fa) { + switch (type) { case CPDF_AAction::KeyStroke: - if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) - { - if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) - { - fa.bFieldFull = pEdit->IsTextFull(); - int nSelStart = 0; - int nSelEnd = 0; - pEdit->GetSel(nSelStart, nSelEnd); - fa.nSelEnd = nSelEnd; - fa.nSelStart = nSelStart; - fa.sValue = pEdit->GetText(); - fa.sChangeEx = GetSelectExportText(); - - if (fa.bFieldFull) - { - fa.sChange = L""; - fa.sChangeEx = L""; - } - } + if (CPWL_ComboBox* pComboBox = + (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) { + if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) { + fa.bFieldFull = pEdit->IsTextFull(); + int nSelStart = 0; + int nSelEnd = 0; + pEdit->GetSel(nSelStart, nSelEnd); + fa.nSelEnd = nSelEnd; + fa.nSelStart = nSelStart; + fa.sValue = pEdit->GetText(); + fa.sChangeEx = GetSelectExportText(); + + if (fa.bFieldFull) { + fa.sChange = L""; + fa.sChangeEx = L""; + } } - break; + } + break; case CPDF_AAction::Validate: - if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) - { - if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) - { - fa.sValue = pEdit->GetText(); - } + if (CPWL_ComboBox* pComboBox = + (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) { + if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) { + fa.sValue = pEdit->GetText(); } - break; + } + break; case CPDF_AAction::LoseFocus: case CPDF_AAction::GetFocus: - ASSERT(m_pWidget != NULL); - fa.sValue = m_pWidget->GetValue(); - break; + ASSERT(m_pWidget != NULL); + fa.sValue = m_pWidget->GetValue(); + break; default: - break; - } + break; + } } - - -void CFFL_ComboBox::SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, - const PDFSDK_FieldAction& fa) -{ - switch (type) - { +void CFFL_ComboBox::SetActionData(CPDFSDK_PageView* pPageView, + CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& fa) { + switch (type) { case CPDF_AAction::KeyStroke: - if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) - { - if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) - { - pEdit->SetSel(fa.nSelStart, fa.nSelEnd); - pEdit->ReplaceSel(fa.sChange.c_str()); - } + if (CPWL_ComboBox* pComboBox = + (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) { + if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) { + pEdit->SetSel(fa.nSelStart, fa.nSelEnd); + pEdit->ReplaceSel(fa.sChange.c_str()); } - break; + } + break; default: - break; - } + break; + } } -FX_BOOL CFFL_ComboBox::IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld, - const PDFSDK_FieldAction& faNew) -{ - switch (type) - { +FX_BOOL CFFL_ComboBox::IsActionDataChanged(CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& faOld, + const PDFSDK_FieldAction& faNew) { + switch (type) { case CPDF_AAction::KeyStroke: - return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) || faOld.nSelStart != faNew.nSelStart || - faOld.sChange != faNew.sChange; + return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) || + faOld.nSelStart != faNew.nSelStart || + faOld.sChange != faNew.sChange; default: - break; - } + break; + } - return FALSE; + return FALSE; } -void CFFL_ComboBox::SaveState(CPDFSDK_PageView* pPageView) -{ - ASSERT(pPageView != NULL); +void CFFL_ComboBox::SaveState(CPDFSDK_PageView* pPageView) { + ASSERT(pPageView != NULL); - if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) - { - m_State.nIndex = pComboBox->GetSelect(); + if (CPWL_ComboBox* pComboBox = + (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) { + m_State.nIndex = pComboBox->GetSelect(); - if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) - { - pEdit->GetSel(m_State.nStart, m_State.nEnd); - m_State.sValue = pEdit->GetText(); - } + if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) { + pEdit->GetSel(m_State.nStart, m_State.nEnd); + m_State.sValue = pEdit->GetText(); } + } } -void CFFL_ComboBox::RestoreState(CPDFSDK_PageView* pPageView) -{ - ASSERT(pPageView != NULL); - - if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, TRUE)) - { - if (m_State.nIndex >= 0) - pComboBox->SetSelect(m_State.nIndex); - else - { - if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) - { - pEdit->SetText(m_State.sValue.c_str()); - pEdit->SetSel(m_State.nStart, m_State.nEnd); - } - } +void CFFL_ComboBox::RestoreState(CPDFSDK_PageView* pPageView) { + ASSERT(pPageView != NULL); + + if (CPWL_ComboBox* pComboBox = + (CPWL_ComboBox*)GetPDFWindow(pPageView, TRUE)) { + if (m_State.nIndex >= 0) + pComboBox->SetSelect(m_State.nIndex); + else { + if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) { + pEdit->SetText(m_State.sValue.c_str()); + pEdit->SetSel(m_State.nStart, m_State.nEnd); + } } + } } -CPWL_Wnd* CFFL_ComboBox::ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue) -{ - if (bRestoreValue) - SaveState(pPageView); +CPWL_Wnd* CFFL_ComboBox::ResetPDFWindow(CPDFSDK_PageView* pPageView, + FX_BOOL bRestoreValue) { + if (bRestoreValue) + SaveState(pPageView); - DestroyPDFWindow(pPageView); + DestroyPDFWindow(pPageView); - CPWL_Wnd* pRet = NULL; + CPWL_Wnd* pRet = NULL; - if (bRestoreValue) - { - RestoreState(pPageView); - pRet = GetPDFWindow(pPageView, FALSE); - } - else - pRet = GetPDFWindow(pPageView, TRUE); + if (bRestoreValue) { + RestoreState(pPageView); + pRet = GetPDFWindow(pPageView, FALSE); + } else + pRet = GetPDFWindow(pPageView, TRUE); - m_pWidget->UpdateField(); + m_pWidget->UpdateField(); - return pRet; + return pRet; } -void CFFL_ComboBox::OnKeyStroke(FX_BOOL bKeyDown, FX_UINT nFlag) -{ - ASSERT(m_pWidget != NULL); +void CFFL_ComboBox::OnKeyStroke(FX_BOOL bKeyDown, FX_UINT nFlag) { + ASSERT(m_pWidget != NULL); - int nFlags = m_pWidget->GetFieldFlags(); + int nFlags = m_pWidget->GetFieldFlags(); - if (nFlags & FIELDFLAG_COMMITONSELCHANGE) - { - if (m_bValid) - { - CPDFSDK_PageView* pPageView = GetCurPageView(); - ASSERT(pPageView != NULL); + if (nFlags & FIELDFLAG_COMMITONSELCHANGE) { + if (m_bValid) { + CPDFSDK_PageView* pPageView = GetCurPageView(); + ASSERT(pPageView != NULL); - if (CommitData(pPageView, nFlag)) - { - DestroyPDFWindow(pPageView); - m_bValid = FALSE; - } - } + if (CommitData(pPageView, nFlag)) { + DestroyPDFWindow(pPageView); + m_bValid = FALSE; + } } + } } -FX_BOOL CFFL_ComboBox::IsFieldFull(CPDFSDK_PageView* pPageView) -{ - if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) - { - if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) - { - return pEdit->IsTextFull(); - } - } - - return FALSE; +FX_BOOL CFFL_ComboBox::IsFieldFull(CPDFSDK_PageView* pPageView) { + if (CPWL_ComboBox* pComboBox = + (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) { + if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) { + return pEdit->IsTextFull(); + } + } + + return FALSE; } -void CFFL_ComboBox::OnSetFocus(CPWL_Wnd* pWnd) -{ - ASSERT(m_pApp != NULL); +void CFFL_ComboBox::OnSetFocus(CPWL_Wnd* pWnd) { + ASSERT(m_pApp != NULL); - ASSERT(pWnd != NULL); + ASSERT(pWnd != NULL); - if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) - { - CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; - pEdit->SetCharSet(134); - pEdit->SetCodePage(936); + if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) { + CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; + pEdit->SetCharSet(134); + pEdit->SetCodePage(936); - pEdit->SetReadyToInput(); - CFX_WideString wsText = pEdit->GetText(); - int nCharacters = wsText.GetLength(); - CFX_ByteString bsUTFText = wsText.UTF16LE_Encode(); - unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str(); - m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer, nCharacters, TRUE); + pEdit->SetReadyToInput(); + CFX_WideString wsText = pEdit->GetText(); + int nCharacters = wsText.GetLength(); + CFX_ByteString bsUTFText = wsText.UTF16LE_Encode(); + unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str(); + m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer, + nCharacters, TRUE); - pEdit->SetEditNotify(this); - } + pEdit->SetEditNotify(this); + } } -void CFFL_ComboBox::OnKillFocus(CPWL_Wnd* pWnd) -{ - ASSERT(m_pApp != NULL); +void CFFL_ComboBox::OnKillFocus(CPWL_Wnd* pWnd) { + ASSERT(m_pApp != NULL); } -FX_BOOL CFFL_ComboBox::CanCopy(CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); +FX_BOOL CFFL_ComboBox::CanCopy(CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); - return FALSE; + return FALSE; } -FX_BOOL CFFL_ComboBox::CanCut(CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); +FX_BOOL CFFL_ComboBox::CanCut(CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); - return FALSE; + return FALSE; } -FX_BOOL CFFL_ComboBox::CanPaste(CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); +FX_BOOL CFFL_ComboBox::CanPaste(CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); - return FALSE; + return FALSE; } -void CFFL_ComboBox::DoCopy(CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); +void CFFL_ComboBox::DoCopy(CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); } -void CFFL_ComboBox::DoCut(CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); +void CFFL_ComboBox::DoCut(CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); } -void CFFL_ComboBox::DoPaste(CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); +void CFFL_ComboBox::DoPaste(CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); } -void CFFL_ComboBox::OnAddUndo(CPWL_Edit* pEdit) -{ - ASSERT(pEdit != NULL); +void CFFL_ComboBox::OnAddUndo(CPWL_Edit* pEdit) { + ASSERT(pEdit != NULL); } -CFX_WideString CFFL_ComboBox::GetSelectExportText() -{ - CFX_WideString swRet; - - int nExport = -1; - CPDFSDK_PageView *pPageView = GetCurPageView(); - if (CPWL_ComboBox * pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) - { - nExport = pComboBox->GetSelect(); - } - - if (nExport >= 0) - { - if (CPDF_FormField * pFormField = m_pWidget->GetFormField()) - { - swRet = pFormField->GetOptionValue(nExport); - if (swRet.IsEmpty()) - swRet = pFormField->GetOptionLabel(nExport); - } +CFX_WideString CFFL_ComboBox::GetSelectExportText() { + CFX_WideString swRet; + + int nExport = -1; + CPDFSDK_PageView* pPageView = GetCurPageView(); + if (CPWL_ComboBox* pComboBox = + (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) { + nExport = pComboBox->GetSelect(); + } + + if (nExport >= 0) { + if (CPDF_FormField* pFormField = m_pWidget->GetFormField()) { + swRet = pFormField->GetOptionValue(nExport); + if (swRet.IsEmpty()) + swRet = pFormField->GetOptionLabel(nExport); } + } - return swRet; + return swRet; } diff --git a/fpdfsdk/src/formfiller/FFL_FormFiller.cpp b/fpdfsdk/src/formfiller/FFL_FormFiller.cpp index 717d1a57b1..5eef5bc370 100644 --- a/fpdfsdk/src/formfiller/FFL_FormFiller.cpp +++ b/fpdfsdk/src/formfiller/FFL_FormFiller.cpp @@ -4,831 +4,763 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - #include "../../include/formfiller/FFL_FormFiller.h" #include "../../include/formfiller/FFL_Notify.h" #include "../../include/formfiller/FFL_CBA_Fontmap.h" -#define GetRed(rgb) ((uint8_t)(rgb)) -#define GetGreen(rgb) ((uint8_t)(((FX_WORD)(rgb)) >> 8)) -#define GetBlue(rgb) ((uint8_t)((rgb)>>16)) +#define GetRed(rgb) ((uint8_t)(rgb)) +#define GetGreen(rgb) ((uint8_t)(((FX_WORD)(rgb)) >> 8)) +#define GetBlue(rgb) ((uint8_t)((rgb) >> 16)) -#define FFL_HINT_ELAPSE 800 +#define FFL_HINT_ELAPSE 800 /* ------------------------- CFFL_FormFiller ------------------------- */ -CFFL_FormFiller::CFFL_FormFiller(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot) - : m_pApp(pApp), - m_pAnnot(pAnnot), - m_bValid(FALSE), - m_ptOldPos(0,0) -{ - m_pWidget = (CPDFSDK_Widget*) pAnnot; -} - -CFFL_FormFiller::~CFFL_FormFiller() -{ - 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(); +CFFL_FormFiller::CFFL_FormFiller(CPDFDoc_Environment* pApp, + CPDFSDK_Annot* pAnnot) + : m_pApp(pApp), m_pAnnot(pAnnot), m_bValid(FALSE), m_ptOldPos(0, 0) { + m_pWidget = (CPDFSDK_Widget*)pAnnot; } -void CFFL_FormFiller::SetWindowRect(CPDFSDK_PageView* pPageView, const CPDF_Rect& rcWindow) -{ - if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) - { - pWnd->Move(CPDF_Rect(rcWindow), TRUE, FALSE); - } +CFFL_FormFiller::~CFFL_FormFiller() { + 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(); } -CPDF_Rect CFFL_FormFiller::GetWindowRect(CPDFSDK_PageView* pPageView) -{ - if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) - { - return pWnd->GetWindowRect(); - } - - return CPDF_Rect(0,0,0,0); +void CFFL_FormFiller::SetWindowRect(CPDFSDK_PageView* pPageView, + const CPDF_Rect& rcWindow) { + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + pWnd->Move(CPDF_Rect(rcWindow), TRUE, FALSE); + } } -FX_RECT CFFL_FormFiller::GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) -{ - ASSERT(pPageView != NULL); - ASSERT(pAnnot != NULL); +CPDF_Rect CFFL_FormFiller::GetWindowRect(CPDFSDK_PageView* pPageView) { + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + return pWnd->GetWindowRect(); + } - CPDF_Rect rcAnnot = m_pWidget->GetRect(); + return CPDF_Rect(0, 0, 0, 0); +} - if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) - { - CPDF_Rect rcWindow = pWnd->GetWindowRect(); - rcAnnot = PWLtoFFL(rcWindow); - } +FX_RECT CFFL_FormFiller::GetViewBBox(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) { + ASSERT(pPageView != NULL); + ASSERT(pAnnot != NULL); - CPDF_Rect rcWin = rcAnnot; + CPDF_Rect rcAnnot = m_pWidget->GetRect(); - CPDF_Rect rcFocus = GetFocusBox(pPageView); - if (!rcFocus.IsEmpty()) - rcWin.Union(rcFocus); + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + CPDF_Rect rcWindow = pWnd->GetWindowRect(); + rcAnnot = PWLtoFFL(rcWindow); + } - CPDF_Rect rect = CPWL_Utils::InflateRect(rcWin,1); + CPDF_Rect rcWin = rcAnnot; - return rect.GetOutterRect(); -} + CPDF_Rect rcFocus = GetFocusBox(pPageView); + if (!rcFocus.IsEmpty()) + rcWin.Union(rcFocus); -void CFFL_FormFiller::OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags) -{ - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); + CPDF_Rect rect = CPWL_Utils::InflateRect(rcWin, 1); - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE)) - { - CPDF_Matrix mt = GetCurMatrix(); - mt.Concat(*pUser2Device); - pWnd->DrawAppearance(pDevice,&mt); - } - else - { - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - if (CFFL_IFormFiller::IsVisible(pWidget)) - pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); - } + return rect.GetOutterRect(); } -void CFFL_FormFiller::OnDrawDeactive(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags) -{ +void CFFL_FormFiller::OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags) { + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); + + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + CPDF_Matrix mt = GetCurMatrix(); + mt.Concat(*pUser2Device); + pWnd->DrawAppearance(pDevice, &mt); + } else { CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); + if (CFFL_IFormFiller::IsVisible(pWidget)) + pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); + } } - -void CFFL_FormFiller::OnCreate(CPDFSDK_Annot* pAnnot) -{ +void CFFL_FormFiller::OnDrawDeactive(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); } -void CFFL_FormFiller::OnLoad(CPDFSDK_Annot* pAnnot) -{ -} +void CFFL_FormFiller::OnCreate(CPDFSDK_Annot* pAnnot) {} -void CFFL_FormFiller::OnDelete(CPDFSDK_Annot* pAnnot) -{ -} +void CFFL_FormFiller::OnLoad(CPDFSDK_Annot* pAnnot) {} -void CFFL_FormFiller::OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) -{ -} +void CFFL_FormFiller::OnDelete(CPDFSDK_Annot* pAnnot) {} + +void CFFL_FormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) {} -void CFFL_FormFiller::OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) -{ - EndTimer(); - ASSERT(m_pWidget != NULL); +void CFFL_FormFiller::OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) { + EndTimer(); + ASSERT(m_pWidget != NULL); } -FX_BOOL CFFL_FormFiller::OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, TRUE)) - { - m_bValid = TRUE; - FX_RECT rect = GetViewBBox(pPageView,pAnnot); - InvalidateRect(rect.left, rect.top, rect.right, rect.bottom); +FX_BOOL CFFL_FormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) { + m_bValid = TRUE; + FX_RECT rect = GetViewBBox(pPageView, pAnnot); + InvalidateRect(rect.left, rect.top, rect.right, rect.bottom); - if(!rect.Contains((int)point.x, (int)point.y)) - return FALSE; + if (!rect.Contains((int)point.x, (int)point.y)) + return FALSE; - return pWnd->OnLButtonDown(WndtoPWL(pPageView, point),nFlags); - } + return pWnd->OnLButtonDown(WndtoPWL(pPageView, point), nFlags); + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_FormFiller::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE)) - { - FX_RECT rcFFL = GetViewBBox(pPageView, pAnnot); - InvalidateRect(rcFFL.left, rcFFL.top, rcFFL.right, rcFFL.bottom); - pWnd->OnLButtonUp(WndtoPWL(pPageView, point),nFlags); - return TRUE; - } +FX_BOOL CFFL_FormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + FX_RECT rcFFL = GetViewBBox(pPageView, pAnnot); + InvalidateRect(rcFFL.left, rcFFL.top, rcFFL.right, rcFFL.bottom); + pWnd->OnLButtonUp(WndtoPWL(pPageView, point), nFlags); + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_FormFiller::OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE)) - { - pWnd->OnLButtonDblClk(WndtoPWL(pPageView, point),nFlags); - return TRUE; - } +FX_BOOL CFFL_FormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + pWnd->OnLButtonDblClk(WndtoPWL(pPageView, point), nFlags); + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_FormFiller::OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - if ((m_ptOldPos.x != point.x) || (m_ptOldPos.y != point.y)) - { - m_ptOldPos = point; - } +FX_BOOL CFFL_FormFiller::OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + if ((m_ptOldPos.x != point.x) || (m_ptOldPos.y != point.y)) { + m_ptOldPos = point; + } - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE)) - { - pWnd->OnMouseMove(WndtoPWL(pPageView, point),nFlags); - return TRUE; - } + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + pWnd->OnMouseMove(WndtoPWL(pPageView, point), nFlags); + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_FormFiller::OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point) -{ - if (!IsValid()) return FALSE; +FX_BOOL CFFL_FormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + short zDelta, + const CPDF_Point& point) { + if (!IsValid()) + return FALSE; - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, TRUE)) - { - return pWnd->OnMouseWheel(zDelta, WndtoPWL(pPageView, point),nFlags); - } + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) { + return pWnd->OnMouseWheel(zDelta, WndtoPWL(pPageView, point), nFlags); + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_FormFiller::OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, TRUE)) - { - pWnd->OnRButtonDown(WndtoPWL(pPageView, point),nFlags); - return TRUE; - } +FX_BOOL CFFL_FormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) { + pWnd->OnRButtonDown(WndtoPWL(pPageView, point), nFlags); + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_FormFiller::OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE)) - { - pWnd->OnRButtonUp(WndtoPWL(pPageView, point),nFlags); - return TRUE; - } +FX_BOOL CFFL_FormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + pWnd->OnRButtonUp(WndtoPWL(pPageView, point), nFlags); + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_FormFiller::OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE)) - { - pWnd->OnRButtonDblClk(WndtoPWL(pPageView, point),nFlags); - return TRUE; - } +FX_BOOL CFFL_FormFiller::OnRButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + pWnd->OnRButtonDblClk(WndtoPWL(pPageView, point), nFlags); + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_FormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags) -{ - if (IsValid()) - { - CPDFSDK_PageView* pPageView = GetCurPageView(); - ASSERT(pPageView != NULL); +FX_BOOL CFFL_FormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot, + FX_UINT nKeyCode, + FX_UINT nFlags) { + if (IsValid()) { + CPDFSDK_PageView* pPageView = GetCurPageView(); + ASSERT(pPageView != NULL); - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE)) - { - return pWnd->OnKeyDown(nKeyCode,nFlags); - } + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + return pWnd->OnKeyDown(nKeyCode, nFlags); } + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_FormFiller::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) -{ - if (IsValid()) - { - CPDFSDK_PageView* pPageView = GetCurPageView(); - ASSERT(pPageView != NULL); +FX_BOOL CFFL_FormFiller::OnChar(CPDFSDK_Annot* pAnnot, + FX_UINT nChar, + FX_UINT nFlags) { + if (IsValid()) { + CPDFSDK_PageView* pPageView = GetCurPageView(); + ASSERT(pPageView != NULL); - if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE)) - { - return pWnd->OnChar(nChar,nFlags); - } + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + return pWnd->OnChar(nChar, nFlags); } + } - return FALSE; + return FALSE; } -void CFFL_FormFiller::OnDeSelected(CPDFSDK_Annot* pAnnot) -{ - ASSERT(FALSE); +void CFFL_FormFiller::OnDeSelected(CPDFSDK_Annot* pAnnot) { + ASSERT(FALSE); } -void CFFL_FormFiller::OnSelected(CPDFSDK_Annot* pAnnot) -{ - ASSERT(FALSE); +void CFFL_FormFiller::OnSelected(CPDFSDK_Annot* pAnnot) { + ASSERT(FALSE); } -FX_BOOL CFFL_FormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) -{ - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - CPDFXFA_Page* pPage = pWidget->GetPDFXFAPage(); - CPDFSDK_Document* pDoc = m_pApp->GetSDKDocument(); - CPDFSDK_PageView* pPageView = pDoc->GetPageView(pPage); - if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) - pWnd->SetFocus(); +FX_BOOL CFFL_FormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + CPDFXFA_Page* pPage = pWidget->GetPDFXFAPage(); + CPDFSDK_Document* pDoc = m_pApp->GetSDKDocument(); + CPDFSDK_PageView* pPageView = pDoc->GetPageView(pPage); + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) + pWnd->SetFocus(); - m_bValid = TRUE; - FX_RECT rcRect = GetViewBBox(pPageView,pAnnot); - InvalidateRect(rcRect.left, rcRect.top, rcRect.right, rcRect.bottom); - return TRUE; + m_bValid = TRUE; + FX_RECT rcRect = GetViewBBox(pPageView, pAnnot); + InvalidateRect(rcRect.left, rcRect.top, rcRect.right, rcRect.bottom); + return TRUE; } -FX_BOOL CFFL_FormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) -{ - if (!IsValid()) - return TRUE; +FX_BOOL CFFL_FormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) { + if (!IsValid()) + return TRUE; - CPDFSDK_PageView* pPageView = GetCurPageView(); - CommitData(pPageView, nFlag); + CPDFSDK_PageView* pPageView = GetCurPageView(); + CommitData(pPageView, nFlag); - if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) - pWnd->KillFocus(); + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) + pWnd->KillFocus(); - switch (m_pWidget->GetFieldType()) - { + switch (m_pWidget->GetFieldType()) { case FIELDTYPE_PUSHBUTTON: case FIELDTYPE_CHECKBOX: case FIELDTYPE_RADIOBUTTON: - EscapeFiller(pPageView, TRUE); - break; + EscapeFiller(pPageView, TRUE); + break; default: - EscapeFiller(pPageView, FALSE); - break; - } - return TRUE; + EscapeFiller(pPageView, FALSE); + break; + } + return TRUE; } -FX_BOOL CFFL_FormFiller::IsValid() const -{ - return m_bValid; +FX_BOOL CFFL_FormFiller::IsValid() const { + return m_bValid; } -PWL_CREATEPARAM CFFL_FormFiller::GetCreateParam() -{ - ASSERT(m_pApp != NULL); +PWL_CREATEPARAM CFFL_FormFiller::GetCreateParam() { + ASSERT(m_pApp != NULL); - PWL_CREATEPARAM cp; - cp.pParentWnd = NULL; - cp.pProvider = this; - cp.rcRectWnd = GetPDFWindowRect(); + PWL_CREATEPARAM cp; + cp.pParentWnd = NULL; + cp.pProvider = this; + cp.rcRectWnd = GetPDFWindowRect(); - FX_DWORD dwCreateFlags = PWS_BORDER | PWS_BACKGROUND | PWS_VISIBLE; - FX_DWORD dwFieldFlag = m_pWidget->GetFieldFlags(); - if (dwFieldFlag & FIELDFLAG_READONLY) - { - dwCreateFlags |= PWS_READONLY; - } + FX_DWORD dwCreateFlags = PWS_BORDER | PWS_BACKGROUND | PWS_VISIBLE; + FX_DWORD dwFieldFlag = m_pWidget->GetFieldFlags(); + if (dwFieldFlag & FIELDFLAG_READONLY) { + dwCreateFlags |= PWS_READONLY; + } - FX_COLORREF color; - if (m_pWidget->GetFillColor(color)) - { - cp.sBackgroundColor = CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color)); - } + FX_COLORREF color; + if (m_pWidget->GetFillColor(color)) { + cp.sBackgroundColor = + CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color)); + } - if (m_pWidget->GetBorderColor(color)) - { - cp.sBorderColor = CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color)); - } + if (m_pWidget->GetBorderColor(color)) { + cp.sBorderColor = + CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color)); + } - cp.sTextColor = CPWL_Color(COLORTYPE_GRAY,0); + cp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0); - if (m_pWidget->GetTextColor(color)) - { - cp.sTextColor = CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color)); - } + if (m_pWidget->GetTextColor(color)) { + cp.sTextColor = CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color)); + } - cp.fFontSize = m_pWidget->GetFontSize(); - cp.dwBorderWidth = m_pWidget->GetBorderWidth(); + cp.fFontSize = m_pWidget->GetFontSize(); + cp.dwBorderWidth = m_pWidget->GetBorderWidth(); - int nBorderStyle = m_pWidget->GetBorderStyle(); + int nBorderStyle = m_pWidget->GetBorderStyle(); - switch (nBorderStyle) - { + switch (nBorderStyle) { case BBS_SOLID: - cp.nBorderStyle = PBS_SOLID; - break; + cp.nBorderStyle = PBS_SOLID; + break; case BBS_DASH: - cp.nBorderStyle = PBS_DASH; - cp.sDash = CPWL_Dash(3,3,0); - break; + cp.nBorderStyle = PBS_DASH; + cp.sDash = CPWL_Dash(3, 3, 0); + break; case BBS_BEVELED: - cp.nBorderStyle = PBS_BEVELED; - cp.dwBorderWidth *= 2; - break; + cp.nBorderStyle = PBS_BEVELED; + cp.dwBorderWidth *= 2; + break; case BBS_INSET: - cp.nBorderStyle = PBS_INSET; - cp.dwBorderWidth *= 2; - break; + cp.nBorderStyle = PBS_INSET; + cp.dwBorderWidth *= 2; + break; case BBS_UNDERLINE: - cp.nBorderStyle = PBS_UNDERLINED; - break; - } + cp.nBorderStyle = PBS_UNDERLINED; + break; + } - if (cp.fFontSize <= 0) - { - dwCreateFlags |= PWS_AUTOFONTSIZE; - } + if (cp.fFontSize <= 0) { + dwCreateFlags |= PWS_AUTOFONTSIZE; + } - cp.dwFlags = dwCreateFlags; - cp.pSystemHandler = m_pApp->GetSysHandler(); - return cp; + cp.dwFlags = dwCreateFlags; + cp.pSystemHandler = m_pApp->GetSysHandler(); + return cp; } -CPWL_Wnd* CFFL_FormFiller::GetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bNew) -{ - ASSERT(pPageView); +CPWL_Wnd* CFFL_FormFiller::GetPDFWindow(CPDFSDK_PageView* pPageView, + FX_BOOL bNew) { + ASSERT(pPageView); - auto it = m_Maps.find(pPageView); - const bool found = it != m_Maps.end(); - CPWL_Wnd* pWnd = found ? it->second : nullptr; - if (!bNew) - return 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 (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 (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; - 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); + m_Maps[pPageView] = pWnd; + } - return pWnd; + return pWnd; } -void CFFL_FormFiller::DestroyPDFWindow(CPDFSDK_PageView* pPageView) -{ - auto it = m_Maps.find(pPageView); - if (it == m_Maps.end()) - return; +void CFFL_FormFiller::DestroyPDFWindow(CPDFSDK_PageView* pPageView) { + auto it = m_Maps.find(pPageView); + if (it == m_Maps.end()) + return; - CPWL_Wnd* pWnd = it->second; - CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData(); - 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.erase(it); + m_Maps.erase(it); } -CPDF_Matrix CFFL_FormFiller::GetWindowMatrix(void* pAttachedData) -{ - if (CFFL_PrivateData* pPrivateData = (CFFL_PrivateData*)pAttachedData) - { - if (pPrivateData->pPageView) - { - CPDF_Matrix mtPageView; - pPrivateData->pPageView->GetCurrentMatrix(mtPageView); - CPDF_Matrix mt = GetCurMatrix(); - mt.Concat(mtPageView); +CPDF_Matrix CFFL_FormFiller::GetWindowMatrix(void* pAttachedData) { + if (CFFL_PrivateData* pPrivateData = (CFFL_PrivateData*)pAttachedData) { + if (pPrivateData->pPageView) { + CPDF_Matrix mtPageView; + pPrivateData->pPageView->GetCurrentMatrix(mtPageView); + CPDF_Matrix mt = GetCurMatrix(); + mt.Concat(mtPageView); - return mt; - } + return mt; } - return CPDF_Matrix(1,0,0,1,0,0); + } + return CPDF_Matrix(1, 0, 0, 1, 0, 0); } -CPDF_Matrix CFFL_FormFiller::GetCurMatrix() -{ - CPDF_Matrix mt; - - ASSERT(m_pWidget != NULL); +CPDF_Matrix CFFL_FormFiller::GetCurMatrix() { + CPDF_Matrix mt; - CPDF_Rect rcDA ; - m_pWidget->GetPDFAnnot()->GetRect(rcDA); + ASSERT(m_pWidget != NULL); + CPDF_Rect rcDA; + m_pWidget->GetPDFAnnot()->GetRect(rcDA); - switch (m_pWidget->GetRotate()) - { + switch (m_pWidget->GetRotate()) { default: case 0: - mt = CPDF_Matrix(1,0,0,1,0,0); - break; + mt = CPDF_Matrix(1, 0, 0, 1, 0, 0); + break; case 90: - mt = CPDF_Matrix(0,1,-1,0,rcDA.right - rcDA.left,0); - break; + mt = CPDF_Matrix(0, 1, -1, 0, rcDA.right - rcDA.left, 0); + break; case 180: - mt = CPDF_Matrix(-1,0,0,-1,rcDA.right - rcDA.left,rcDA.top - rcDA.bottom); - break; + mt = CPDF_Matrix(-1, 0, 0, -1, rcDA.right - rcDA.left, + rcDA.top - rcDA.bottom); + break; case 270: - mt = CPDF_Matrix(0,-1,1,0,0,rcDA.top - rcDA.bottom); - break; - } - mt.e += rcDA.left; - mt.f += rcDA.bottom; + mt = CPDF_Matrix(0, -1, 1, 0, 0, rcDA.top - rcDA.bottom); + break; + } + mt.e += rcDA.left; + mt.f += rcDA.bottom; - return mt; + return mt; } -CFX_WideString CFFL_FormFiller::LoadPopupMenuString(int nIndex) -{ - ASSERT(m_pApp != NULL); +CFX_WideString CFFL_FormFiller::LoadPopupMenuString(int nIndex) { + ASSERT(m_pApp != NULL); - return L""; + return L""; } -CPDF_Rect CFFL_FormFiller::GetPDFWindowRect() const -{ - CPDF_Rect rectAnnot; - m_pWidget->GetPDFAnnot()->GetRect(rectAnnot); +CPDF_Rect CFFL_FormFiller::GetPDFWindowRect() const { + CPDF_Rect rectAnnot; + m_pWidget->GetPDFAnnot()->GetRect(rectAnnot); - FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left; - FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom; - if ((m_pWidget->GetRotate() / 90) & 0x01) - return CPDF_Rect(0, 0, fHeight, fWidth); + FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left; + FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom; + if ((m_pWidget->GetRotate() / 90) & 0x01) + return CPDF_Rect(0, 0, fHeight, fWidth); - return CPDF_Rect(0, 0, fWidth, fHeight); + return CPDF_Rect(0, 0, fWidth, fHeight); } -CPDFSDK_PageView* CFFL_FormFiller::GetCurPageView() -{ - CPDFXFA_Page* pPage = m_pAnnot->GetPDFXFAPage(); - CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument(); - if (!pSDKDoc) - return NULL; - return pSDKDoc->GetPageView(pPage); +CPDFSDK_PageView* CFFL_FormFiller::GetCurPageView() { + CPDFXFA_Page* pPage = m_pAnnot->GetPDFXFAPage(); + CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument(); + if (!pSDKDoc) + return NULL; + return pSDKDoc->GetPageView(pPage); } -CPDF_Rect CFFL_FormFiller::GetFocusBox(CPDFSDK_PageView* pPageView) -{ - if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) - { - CPDF_Rect rcFocus = FFLtoWnd(pPageView, PWLtoFFL(pWnd->GetFocusRect())); - CPDF_Rect rcPage = pPageView->GetPDFPage()->GetPageBBox(); - if (rcPage.Contains(rcFocus)) - return rcFocus; - } - return CPDF_Rect(0,0,0,0); +CPDF_Rect CFFL_FormFiller::GetFocusBox(CPDFSDK_PageView* pPageView) { + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) { + CPDF_Rect rcFocus = FFLtoWnd(pPageView, PWLtoFFL(pWnd->GetFocusRect())); + CPDF_Rect rcPage = pPageView->GetPDFPage()->GetPageBBox(); + if (rcPage.Contains(rcFocus)) + return rcFocus; + } + return CPDF_Rect(0, 0, 0, 0); } -CPDF_Rect CFFL_FormFiller::FFLtoPWL(const CPDF_Rect& rect) -{ - CPDF_Matrix mt; - mt.SetReverse(GetCurMatrix()); +CPDF_Rect CFFL_FormFiller::FFLtoPWL(const CPDF_Rect& rect) { + CPDF_Matrix mt; + mt.SetReverse(GetCurMatrix()); - CPDF_Rect temp = rect; - mt.TransformRect(temp); + CPDF_Rect temp = rect; + mt.TransformRect(temp); - return temp; + return temp; } -CPDF_Rect CFFL_FormFiller::PWLtoFFL(const CPDF_Rect& rect) -{ - CPDF_Matrix mt = GetCurMatrix(); +CPDF_Rect CFFL_FormFiller::PWLtoFFL(const CPDF_Rect& rect) { + CPDF_Matrix mt = GetCurMatrix(); - CPDF_Rect temp = rect; - mt.TransformRect(temp); + CPDF_Rect temp = rect; + mt.TransformRect(temp); - return temp; + return temp; } -CPDF_Point CFFL_FormFiller::FFLtoPWL(const CPDF_Point& point) -{ - CPDF_Matrix mt; - mt.SetReverse(GetCurMatrix()); +CPDF_Point CFFL_FormFiller::FFLtoPWL(const CPDF_Point& point) { + CPDF_Matrix mt; + mt.SetReverse(GetCurMatrix()); - CPDF_Point pt = point; - mt.Transform(pt.x,pt.y); + CPDF_Point pt = point; + mt.Transform(pt.x, pt.y); - return pt; + return pt; } -CPDF_Point CFFL_FormFiller::PWLtoFFL(const CPDF_Point & point) -{ - CPDF_Matrix mt = GetCurMatrix(); +CPDF_Point CFFL_FormFiller::PWLtoFFL(const CPDF_Point& point) { + CPDF_Matrix mt = GetCurMatrix(); - CPDF_Point pt = point; - mt.Transform(pt.x,pt.y); - - return pt; -} - -CPDF_Point CFFL_FormFiller::WndtoPWL(CPDFSDK_PageView* pPageView, const CPDF_Point& pt) -{ - return FFLtoPWL(pt); -} - -CPDF_Rect CFFL_FormFiller::FFLtoWnd(CPDFSDK_PageView* pPageView, const CPDF_Rect & rect) -{ - return rect; -} - -FX_BOOL CFFL_FormFiller::CommitData(CPDFSDK_PageView* pPageView, FX_UINT nFlag) -{ - if (IsDataChanged(pPageView)) - { - FX_BOOL bRC = TRUE; - FX_BOOL bExit = FALSE; - CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); - pIFormFiller->OnKeyStrokeCommit(m_pWidget, pPageView, bRC, bExit, nFlag); - if (bExit) - return TRUE; - if (!bRC) - { - ResetPDFWindow(pPageView, FALSE); - return TRUE; - } - - pIFormFiller->OnValidate(m_pWidget, pPageView, bRC, bExit, nFlag); - if (bExit) - return TRUE; - if (!bRC) - { - ResetPDFWindow(pPageView, FALSE); - return TRUE; - } - - SaveData(pPageView); - pIFormFiller->OnCalculate(m_pWidget, pPageView, bExit,nFlag); - if (bExit) - return TRUE; - - pIFormFiller->OnFormat(m_pWidget, pPageView, bExit,nFlag); - } - return TRUE; -} + CPDF_Point pt = point; + mt.Transform(pt.x, pt.y); -FX_BOOL CFFL_FormFiller::IsDataChanged(CPDFSDK_PageView* pPageView) -{ - return FALSE; + return pt; } -void CFFL_FormFiller::SaveData(CPDFSDK_PageView* pPageView) -{ +CPDF_Point CFFL_FormFiller::WndtoPWL(CPDFSDK_PageView* pPageView, + const CPDF_Point& pt) { + return FFLtoPWL(pt); } -FX_BOOL CFFL_FormFiller::IsFieldFull(CPDFSDK_PageView* pPageView) -{ - return FALSE; +CPDF_Rect CFFL_FormFiller::FFLtoWnd(CPDFSDK_PageView* pPageView, + const CPDF_Rect& rect) { + return rect; } -void CFFL_FormFiller::SetChangeMark() -{ - m_pApp->FFI_OnChange(); -} +FX_BOOL CFFL_FormFiller::CommitData(CPDFSDK_PageView* pPageView, + FX_UINT nFlag) { + if (IsDataChanged(pPageView)) { + FX_BOOL bRC = TRUE; + FX_BOOL bExit = FALSE; + CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); + pIFormFiller->OnKeyStrokeCommit(m_pWidget, pPageView, bRC, bExit, nFlag); + if (bExit) + return TRUE; + if (!bRC) { + ResetPDFWindow(pPageView, FALSE); + return TRUE; + } -void CFFL_FormFiller::GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, - PDFSDK_FieldAction& fa) -{ - fa.sValue = m_pWidget->GetValue(); -} + pIFormFiller->OnValidate(m_pWidget, pPageView, bRC, bExit, nFlag); + if (bExit) + return TRUE; + if (!bRC) { + ResetPDFWindow(pPageView, FALSE); + return TRUE; + } -void CFFL_FormFiller::SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, - const PDFSDK_FieldAction& fa) -{ -} + SaveData(pPageView); + pIFormFiller->OnCalculate(m_pWidget, pPageView, bExit, nFlag); + if (bExit) + return TRUE; -FX_BOOL CFFL_FormFiller::IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld, - const PDFSDK_FieldAction& faNew) -{ - return FALSE; + pIFormFiller->OnFormat(m_pWidget, pPageView, bExit, nFlag); + } + return TRUE; } -void CFFL_FormFiller::SaveState(CPDFSDK_PageView* pPageView) -{ +FX_BOOL CFFL_FormFiller::IsDataChanged(CPDFSDK_PageView* pPageView) { + return FALSE; } -void CFFL_FormFiller::RestoreState(CPDFSDK_PageView* pPageView) -{ -} +void CFFL_FormFiller::SaveData(CPDFSDK_PageView* pPageView) {} -CPWL_Wnd* CFFL_FormFiller::ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue) -{ - return GetPDFWindow(pPageView, FALSE); +FX_BOOL CFFL_FormFiller::IsFieldFull(CPDFSDK_PageView* pPageView) { + return FALSE; } -void CFFL_FormFiller::TimerProc() -{ - +void CFFL_FormFiller::SetChangeMark() { + m_pApp->FFI_OnChange(); } -IFX_SystemHandler* CFFL_FormFiller::GetSystemHandler() const -{ - return m_pApp->GetSysHandler(); +void CFFL_FormFiller::GetActionData(CPDFSDK_PageView* pPageView, + CPDF_AAction::AActionType type, + PDFSDK_FieldAction& fa) { + fa.sValue = m_pWidget->GetValue(); } -void CFFL_FormFiller::OnKeyStroke(FX_BOOL bKeyDown) -{ +void CFFL_FormFiller::SetActionData(CPDFSDK_PageView* pPageView, + CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& fa) {} + +FX_BOOL CFFL_FormFiller::IsActionDataChanged(CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& faOld, + const PDFSDK_FieldAction& faNew) { + return FALSE; } -void CFFL_FormFiller::EscapeFiller(CPDFSDK_PageView* pPageView, FX_BOOL bDestroyPDFWindow) -{ - m_bValid = FALSE; +void CFFL_FormFiller::SaveState(CPDFSDK_PageView* pPageView) {} - FX_RECT rcRect = GetViewBBox(pPageView, m_pWidget); - InvalidateRect(rcRect.left, rcRect.top, rcRect.right, rcRect.bottom); +void CFFL_FormFiller::RestoreState(CPDFSDK_PageView* pPageView) {} - if(bDestroyPDFWindow) - DestroyPDFWindow(pPageView); +CPWL_Wnd* CFFL_FormFiller::ResetPDFWindow(CPDFSDK_PageView* pPageView, + FX_BOOL bRestoreValue) { + return GetPDFWindow(pPageView, FALSE); } -FX_BOOL CFFL_FormFiller::CanCopy(CPDFSDK_Document* pDocument) -{ - return FALSE; -} +void CFFL_FormFiller::TimerProc() {} -FX_BOOL CFFL_FormFiller::CanCut(CPDFSDK_Document* pDocument) -{ - return FALSE; +IFX_SystemHandler* CFFL_FormFiller::GetSystemHandler() const { + return m_pApp->GetSysHandler(); } -FX_BOOL CFFL_FormFiller::CanPaste(CPDFSDK_Document* pDocument) -{ - return FALSE; -} +void CFFL_FormFiller::OnKeyStroke(FX_BOOL bKeyDown) {} -void CFFL_FormFiller::DoCopy(CPDFSDK_Document* pDocument) -{ -} +void CFFL_FormFiller::EscapeFiller(CPDFSDK_PageView* pPageView, + FX_BOOL bDestroyPDFWindow) { + m_bValid = FALSE; -void CFFL_FormFiller::DoCut(CPDFSDK_Document* pDocument) -{ -} + FX_RECT rcRect = GetViewBBox(pPageView, m_pWidget); + InvalidateRect(rcRect.left, rcRect.top, rcRect.right, rcRect.bottom); -void CFFL_FormFiller::DoPaste(CPDFSDK_Document* pDocument) -{ + if (bDestroyPDFWindow) + DestroyPDFWindow(pPageView); } -void CFFL_FormFiller::InvalidateRect(double left, double top, double right, double bottom) -{ - CPDFXFA_Page* pPage = m_pWidget->GetPDFXFAPage(); - m_pApp->FFI_Invalidate(pPage, left, top, right, bottom); +FX_BOOL CFFL_FormFiller::CanCopy(CPDFSDK_Document* pDocument) { + return FALSE; } -/* ------------------------- CFFL_Button ------------------------- */ - -CFFL_Button::CFFL_Button(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget) : - CFFL_FormFiller(pApp, pWidget), - m_bMouseIn(FALSE), - m_bMouseDown(FALSE) -{ +FX_BOOL CFFL_FormFiller::CanCut(CPDFSDK_Document* pDocument) { + return FALSE; } -CFFL_Button::~CFFL_Button() -{ +FX_BOOL CFFL_FormFiller::CanPaste(CPDFSDK_Document* pDocument) { + return FALSE; } -void CFFL_Button::OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) -{ - m_bMouseIn = TRUE; - FX_RECT rect = GetViewBBox(pPageView,pAnnot); - InvalidateRect(rect.left, rect.top, rect.right, rect.bottom); -} +void CFFL_FormFiller::DoCopy(CPDFSDK_Document* pDocument) {} -void CFFL_Button::OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) -{ - m_bMouseIn = FALSE; +void CFFL_FormFiller::DoCut(CPDFSDK_Document* pDocument) {} - FX_RECT rect = GetViewBBox(pPageView,pAnnot); - InvalidateRect(rect.left, rect.top, rect.right, rect.bottom); - EndTimer(); - ASSERT(m_pWidget != NULL); +void CFFL_FormFiller::DoPaste(CPDFSDK_Document* pDocument) {} + +void CFFL_FormFiller::InvalidateRect(double left, + double top, + double right, + double bottom) { + CPDFXFA_Page* pPage = m_pWidget->GetPDFXFAPage(); + m_pApp->FFI_Invalidate(pPage, left, top, right, bottom); } -FX_BOOL CFFL_Button::OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - CPDF_Rect rcAnnot = pAnnot->GetRect(); - if(!rcAnnot.Contains(point.x, point.y)) - return FALSE; +/* ------------------------- CFFL_Button ------------------------- */ - m_bMouseDown = TRUE; - m_bValid = TRUE; - FX_RECT rect = GetViewBBox(pPageView, pAnnot); - InvalidateRect(rect.left, rect.top, rect.right, rect.bottom); - return TRUE; -} +CFFL_Button::CFFL_Button(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget) + : CFFL_FormFiller(pApp, pWidget), m_bMouseIn(FALSE), m_bMouseDown(FALSE) {} -FX_BOOL CFFL_Button::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - CPDF_Rect rcAnnot = pAnnot->GetRect(); - if(!rcAnnot.Contains(point.x, point.y)) - return FALSE; +CFFL_Button::~CFFL_Button() {} - m_bMouseDown = FALSE; - m_pWidget->GetPDFPage(); +void CFFL_Button::OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) { + m_bMouseIn = TRUE; + FX_RECT rect = GetViewBBox(pPageView, pAnnot); + InvalidateRect(rect.left, rect.top, rect.right, rect.bottom); +} +void CFFL_Button::OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) { + m_bMouseIn = FALSE; - FX_RECT rect = GetViewBBox(pPageView, pAnnot); - InvalidateRect(rect.left, rect.top, rect.right, rect.bottom); - return TRUE; + FX_RECT rect = GetViewBBox(pPageView, pAnnot); + InvalidateRect(rect.left, rect.top, rect.right, rect.bottom); + EndTimer(); + ASSERT(m_pWidget != NULL); } -FX_BOOL CFFL_Button::OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - ASSERT(m_pApp != NULL); +FX_BOOL CFFL_Button::OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + CPDF_Rect rcAnnot = pAnnot->GetRect(); + if (!rcAnnot.Contains(point.x, point.y)) + return FALSE; - return TRUE; + m_bMouseDown = TRUE; + m_bValid = TRUE; + FX_RECT rect = GetViewBBox(pPageView, pAnnot); + InvalidateRect(rect.left, rect.top, rect.right, rect.bottom); + return TRUE; } -void CFFL_Button::OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags) -{ - ASSERT(pPageView != NULL); - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - CPDF_FormControl* pCtrl = pWidget->GetFormControl(); - CPDF_FormControl::HighlightingMode eHM = pCtrl->GetHighlightingMode(); - - if (eHM == CPDF_FormControl::Push) - { - if (m_bMouseDown) - { - if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Down)) - pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Down, NULL); - else - pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); - } - else if (m_bMouseIn) - { - if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Rollover)) - pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Rollover, NULL); - else - pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); - } - else - { - pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); - } +FX_BOOL CFFL_Button::OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + CPDF_Rect rcAnnot = pAnnot->GetRect(); + if (!rcAnnot.Contains(point.x, point.y)) + return FALSE; + + m_bMouseDown = FALSE; + m_pWidget->GetPDFPage(); + + FX_RECT rect = GetViewBBox(pPageView, pAnnot); + InvalidateRect(rect.left, rect.top, rect.right, rect.bottom); + return TRUE; +} + +FX_BOOL CFFL_Button::OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + ASSERT(m_pApp != NULL); + + return TRUE; +} + +void CFFL_Button::OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags) { + ASSERT(pPageView != NULL); + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + CPDF_FormControl* pCtrl = pWidget->GetFormControl(); + CPDF_FormControl::HighlightingMode eHM = pCtrl->GetHighlightingMode(); + + if (eHM == CPDF_FormControl::Push) { + if (m_bMouseDown) { + if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Down)) + pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Down, NULL); + else + pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, + NULL); + } else if (m_bMouseIn) { + if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Rollover)) + pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Rollover, + NULL); + else + pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, + NULL); + } else { + pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); } - else - pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); + } else + pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); } - -void CFFL_Button::OnDrawDeactive(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags) -{ - OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); +void CFFL_Button::OnDrawDeactive(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags) { + OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); } diff --git a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp index bb9316da20..278169e878 100644 --- a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp +++ b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp @@ -13,1254 +13,1189 @@ #include "../../include/formfiller/FFL_RadioButton.h" #include "../../include/formfiller/FFL_TextField.h" -#define FFL_MAXLISTBOXHEIGHT 140.0f +#define FFL_MAXLISTBOXHEIGHT 140.0f // HHOOK CFFL_IFormFiller::m_hookSheet = NULL; // MSG CFFL_IFormFiller::g_Msg; -/* ----------------------------- CFFL_IFormFiller ----------------------------- */ +/* ----------------------------- CFFL_IFormFiller ----------------------------- + */ -CFFL_IFormFiller::CFFL_IFormFiller(CPDFDoc_Environment* pApp) : - m_pApp(pApp), - m_bNotifying(FALSE) -{ -} +CFFL_IFormFiller::CFFL_IFormFiller(CPDFDoc_Environment* pApp) + : m_pApp(pApp), m_bNotifying(FALSE) {} -CFFL_IFormFiller::~CFFL_IFormFiller() -{ - for (auto& it : m_Maps) - delete it.second; - m_Maps.clear(); +CFFL_IFormFiller::~CFFL_IFormFiller() { + 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) -{ - CPDF_Rect rc = pAnnot->GetRect(); - if(rc.Contains(point.x, point.y)) - return TRUE; - return FALSE; +FX_BOOL CFFL_IFormFiller::Annot_HitTest(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CPDF_Point point) { + CPDF_Rect rc = pAnnot->GetRect(); + if (rc.Contains(point.x, point.y)) + return TRUE; + return FALSE; } -FX_RECT CFFL_IFormFiller::GetViewBBox(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot) -{ - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - return pFormFiller->GetViewBBox(pPageView, pAnnot); +FX_RECT CFFL_IFormFiller::GetViewBBox(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) + return pFormFiller->GetViewBBox(pPageView, pAnnot); - ASSERT(pPageView != NULL); + ASSERT(pPageView != NULL); - CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); - CPDF_Rect rcAnnot; - pPDFAnnot->GetRect(rcAnnot); + CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); + CPDF_Rect rcAnnot; + pPDFAnnot->GetRect(rcAnnot); - CPDF_Rect rcWin = CPWL_Utils::InflateRect(rcAnnot, 1); - return rcWin.GetOutterRect(); + CPDF_Rect rcWin = CPWL_Utils::InflateRect(rcAnnot, 1); + return rcWin.GetOutterRect(); } -void CFFL_IFormFiller::OnDraw(CPDFSDK_PageView* pPageView, /*HDC hDC,*/ CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - /*const CRect& rcWindow,*/ FX_DWORD dwFlags) -{ - ASSERT(pPageView != NULL); - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - - if (IsVisible(pWidget)) - { - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - if (pFormFiller->IsValid()) - { - pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); - pAnnot->GetPDFPage(); - - CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument(); - if (pDocument->GetFocusAnnot() == pAnnot) - { - CPDF_Rect rcFocus = pFormFiller->GetFocusBox(pPageView); - if (!rcFocus.IsEmpty()) - { - CFX_PathData path; - path.SetPointCount(5); - path.SetPoint(0, rcFocus.left, rcFocus.top, FXPT_MOVETO); - path.SetPoint(1, rcFocus.left, rcFocus.bottom, FXPT_LINETO); - path.SetPoint(2, rcFocus.right, rcFocus.bottom, FXPT_LINETO); - path.SetPoint(3, rcFocus.right, rcFocus.top, FXPT_LINETO); - path.SetPoint(4, rcFocus.left, rcFocus.top, FXPT_LINETO); - - CFX_GraphStateData gsd; - gsd.SetDashCount(1); - gsd.m_DashArray[0] = 1.0f; - gsd.m_DashPhase = 0; - gsd.m_LineWidth = 1.0f; - pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255,0,0,0), FXFILL_ALTERNATE); - } - } - return; - } +void CFFL_IFormFiller::OnDraw(CPDFSDK_PageView* pPageView, + /*HDC hDC,*/ CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + /*const CRect& rcWindow,*/ FX_DWORD dwFlags) { + ASSERT(pPageView != NULL); + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + + if (IsVisible(pWidget)) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + if (pFormFiller->IsValid()) { + pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); + pAnnot->GetPDFPage(); + + CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument(); + if (pDocument->GetFocusAnnot() == pAnnot) { + CPDF_Rect rcFocus = pFormFiller->GetFocusBox(pPageView); + if (!rcFocus.IsEmpty()) { + CFX_PathData path; + path.SetPointCount(5); + path.SetPoint(0, rcFocus.left, rcFocus.top, FXPT_MOVETO); + path.SetPoint(1, rcFocus.left, rcFocus.bottom, FXPT_LINETO); + path.SetPoint(2, rcFocus.right, rcFocus.bottom, FXPT_LINETO); + path.SetPoint(3, rcFocus.right, rcFocus.top, FXPT_LINETO); + path.SetPoint(4, rcFocus.left, rcFocus.top, FXPT_LINETO); + + CFX_GraphStateData gsd; + gsd.SetDashCount(1); + gsd.m_DashArray[0] = 1.0f; + gsd.m_DashPhase = 0; + gsd.m_LineWidth = 1.0f; + pDevice->DrawPath(&path, pUser2Device, &gsd, 0, + ArgbEncode(255, 0, 0, 0), FXFILL_ALTERNATE); + } } - - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); - else - pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); - - if (!IsReadOnly(pWidget) && IsFillingAllowed(pWidget)) - pWidget->DrawShadow(pDevice, pPageView); + return; + } } -} -void CFFL_IFormFiller::OnCreate(CPDFSDK_Annot* pAnnot) -{ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - pFormFiller->OnCreate(pAnnot); - } -} + pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, pUser2Device, + dwFlags); + else + pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); -void CFFL_IFormFiller::OnLoad(CPDFSDK_Annot* pAnnot) -{ - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - pFormFiller->OnLoad(pAnnot); - } + if (!IsReadOnly(pWidget) && IsFillingAllowed(pWidget)) + pWidget->DrawShadow(pDevice, pPageView); + } } -void CFFL_IFormFiller::OnDelete(CPDFSDK_Annot* pAnnot) -{ - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - pFormFiller->OnDelete(pAnnot); - } +void CFFL_IFormFiller::OnCreate(CPDFSDK_Annot* pAnnot) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + pFormFiller->OnCreate(pAnnot); + } +} - UnRegisterFormFiller(pAnnot); +void CFFL_IFormFiller::OnLoad(CPDFSDK_Annot* pAnnot) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + pFormFiller->OnLoad(pAnnot); + } } -void CFFL_IFormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); +void CFFL_IFormFiller::OnDelete(CPDFSDK_Annot* pAnnot) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + pFormFiller->OnDelete(pAnnot); + } - if (!m_bNotifying) - { - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - if (pWidget->GetAAction(CPDF_AAction::CursorEnter)) - { - m_bNotifying = TRUE; + UnRegisterFormFiller(pAnnot); +} - int nValueAge = pWidget->GetValueAge(); +void CFFL_IFormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlag) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - pWidget->ClearAppModified(); + if (!m_bNotifying) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + if (pWidget->GetAAction(CPDF_AAction::CursorEnter)) { + m_bNotifying = TRUE; - ASSERT(pPageView != NULL); + int nValueAge = pWidget->GetValueAge(); + pWidget->ClearAppModified(); + ASSERT(pPageView != NULL); - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - pWidget->OnAAction(CPDF_AAction::CursorEnter, fa, pPageView ); - m_bNotifying = FALSE; + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); + pWidget->OnAAction(CPDF_AAction::CursorEnter, fa, pPageView); + m_bNotifying = FALSE; - //if ( !IsValidAnnot(pPageView, pAnnot) ) return; + // if ( !IsValidAnnot(pPageView, pAnnot) ) return; - if (pWidget->IsAppModified()) - { - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) - { - pFormFiller->ResetPDFWindow(pPageView, pWidget->GetValueAge() == nValueAge); - } - } + if (pWidget->IsAppModified()) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { + pFormFiller->ResetPDFWindow(pPageView, + pWidget->GetValueAge() == nValueAge); } + } } + } - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) - { - pFormFiller->OnMouseEnter(pPageView, pAnnot); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) { + pFormFiller->OnMouseEnter(pPageView, pAnnot); + } } -void CFFL_IFormFiller::OnMouseExit(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - - if (!m_bNotifying) - { - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - if (pWidget->GetAAction(CPDF_AAction::CursorExit)) - { - m_bNotifying = TRUE; - pWidget->GetAppearanceAge(); - int nValueAge = pWidget->GetValueAge(); - pWidget->ClearAppModified(); - - ASSERT(pPageView != NULL); +void CFFL_IFormFiller::OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlag) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); + if (!m_bNotifying) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + if (pWidget->GetAAction(CPDF_AAction::CursorExit)) { + m_bNotifying = TRUE; + pWidget->GetAppearanceAge(); + int nValueAge = pWidget->GetValueAge(); + pWidget->ClearAppModified(); + ASSERT(pPageView != NULL); - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - pWidget->OnAAction(CPDF_AAction::CursorExit, fa, pPageView); - m_bNotifying = FALSE; + pWidget->OnAAction(CPDF_AAction::CursorExit, fa, pPageView); + m_bNotifying = FALSE; - //if (!IsValidAnnot(pPageView, pAnnot)) return; + // if (!IsValidAnnot(pPageView, pAnnot)) return; - if (pWidget->IsAppModified()) - { - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) - { - pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); - } - } + if (pWidget->IsAppModified()) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { + pFormFiller->ResetPDFWindow(pPageView, + nValueAge == pWidget->GetValueAge()); } + } } + } - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - pFormFiller->OnMouseExit(pPageView, pAnnot); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + pFormFiller->OnMouseExit(pPageView, pAnnot); + } } -FX_BOOL CFFL_IFormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - - if (!m_bNotifying) - { - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - if (Annot_HitTest(pPageView, pAnnot, point) && pWidget->GetAAction(CPDF_AAction::ButtonDown)) - { - m_bNotifying = TRUE; - pWidget->GetAppearanceAge(); - int nValueAge = pWidget->GetValueAge(); - pWidget->ClearAppModified(); - - ASSERT(pPageView != NULL); - +FX_BOOL CFFL_IFormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); + if (!m_bNotifying) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + if (Annot_HitTest(pPageView, pAnnot, point) && + pWidget->GetAAction(CPDF_AAction::ButtonDown)) { + m_bNotifying = TRUE; + pWidget->GetAppearanceAge(); + int nValueAge = pWidget->GetValueAge(); + pWidget->ClearAppModified(); + + ASSERT(pPageView != NULL); + + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlags); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlags); + pWidget->OnAAction(CPDF_AAction::ButtonDown, fa, pPageView); + m_bNotifying = FALSE; + + if (!IsValidAnnot(pPageView, pAnnot)) + return TRUE; - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlags); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlags); - pWidget->OnAAction(CPDF_AAction::ButtonDown, fa, pPageView); - m_bNotifying = FALSE; - - if (!IsValidAnnot(pPageView, pAnnot)) return TRUE; - - if (pWidget->IsAppModified()) - { - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) - { - pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); - } - } + if (pWidget->IsAppModified()) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { + pFormFiller->ResetPDFWindow(pPageView, + nValueAge == pWidget->GetValueAge()); } + } } + } - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - return pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + return pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_IFormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument(); +FX_BOOL CFFL_IFormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument(); - switch (pWidget->GetFieldType()) - { + switch (pWidget->GetFieldType()) { case FIELDTYPE_PUSHBUTTON: case FIELDTYPE_CHECKBOX: case FIELDTYPE_RADIOBUTTON: - if (GetViewBBox(pPageView, pAnnot).Contains((int)point.x, (int)point.y)) - pDocument->SetFocusAnnot(pAnnot); - break; - default: + if (GetViewBBox(pPageView, pAnnot).Contains((int)point.x, (int)point.y)) pDocument->SetFocusAnnot(pAnnot); - break; - } - - FX_BOOL bRet = FALSE; - - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - bRet = pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point); - } - - if (pDocument->GetFocusAnnot() == pAnnot) - { - FX_BOOL bExit = FALSE; - FX_BOOL bReset = FALSE; - OnButtonUp(pWidget, pPageView, bReset, bExit,nFlags); - if (bExit) return TRUE; - - OnClick(pWidget, pPageView, bReset, bExit, nFlags); - if (bExit) return TRUE; - } - return bRet; + break; + default: + pDocument->SetFocusAnnot(pAnnot); + break; + } + + FX_BOOL bRet = FALSE; + + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + bRet = pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point); + } + + if (pDocument->GetFocusAnnot() == pAnnot) { + FX_BOOL bExit = FALSE; + FX_BOOL bReset = FALSE; + OnButtonUp(pWidget, pPageView, bReset, bExit, nFlags); + if (bExit) + return TRUE; + + OnClick(pWidget, pPageView, bReset, bExit, nFlags); + if (bExit) + return TRUE; + } + return bRet; } -void CFFL_IFormFiller::OnButtonUp(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit,FX_UINT nFlag) -{ - ASSERT(pWidget != NULL); - - if (!m_bNotifying) - { - if (pWidget->GetAAction(CPDF_AAction::ButtonUp)) - { - m_bNotifying = TRUE; - int nAge = pWidget->GetAppearanceAge(); - int nValueAge = pWidget->GetValueAge(); +void CFFL_IFormFiller::OnButtonUp(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bReset, + FX_BOOL& bExit, + FX_UINT nFlag) { + ASSERT(pWidget != NULL); - ASSERT(pPageView != NULL); -// CReader_DocView* pDocView = pPageView->GetDocView(); -// ASSERT(pDocView != NULL); + if (!m_bNotifying) { + if (pWidget->GetAAction(CPDF_AAction::ButtonUp)) { + m_bNotifying = TRUE; + int nAge = pWidget->GetAppearanceAge(); + int nValueAge = pWidget->GetValueAge(); + ASSERT(pPageView != NULL); + // CReader_DocView* pDocView = pPageView->GetDocView(); + // ASSERT(pDocView != NULL); + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); + pWidget->OnAAction(CPDF_AAction::ButtonUp, fa, pPageView); + m_bNotifying = FALSE; - pWidget->OnAAction(CPDF_AAction::ButtonUp, fa, pPageView); - m_bNotifying = FALSE; - - if (!IsValidAnnot(pPageView, pWidget)) - { - bExit = TRUE; - return; - } - - if (nAge != pWidget->GetAppearanceAge()) - { - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) - { - pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); - } + if (!IsValidAnnot(pPageView, pWidget)) { + bExit = TRUE; + return; + } - bReset = TRUE; - } + if (nAge != pWidget->GetAppearanceAge()) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { + pFormFiller->ResetPDFWindow(pPageView, + nValueAge == pWidget->GetValueAge()); } + + bReset = TRUE; + } } + } } -FX_BOOL CFFL_IFormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); +FX_BOOL CFFL_IFormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - return pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + return pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_IFormFiller::OnMouseMove(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); +FX_BOOL CFFL_IFormFiller::OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - //change cursor - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) - { - return pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point); - } + // change cursor + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) { + return pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_IFormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); +FX_BOOL CFFL_IFormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + short zDelta, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - return pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + return pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point); + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_IFormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); +FX_BOOL CFFL_IFormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - return pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + return pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_IFormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); +FX_BOOL CFFL_IFormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - return pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + return pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_IFormFiller::OnRButtonDblClk(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); +FX_BOOL CFFL_IFormFiller::OnRButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - return pFormFiller->OnRButtonDblClk(pPageView, pAnnot, nFlags, point); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + return pFormFiller->OnRButtonDblClk(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_IFormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); +FX_BOOL CFFL_IFormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot, + FX_UINT nKeyCode, + FX_UINT nFlags) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - return pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlags); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + return pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlags); + } - return FALSE; + return FALSE; } -FX_BOOL CFFL_IFormFiller::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) -{ - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - if (nChar == FWL_VKEY_Tab) - return TRUE; +FX_BOOL CFFL_IFormFiller::OnChar(CPDFSDK_Annot* pAnnot, + FX_UINT nChar, + FX_UINT nFlags) { + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); + if (nChar == FWL_VKEY_Tab) + return TRUE; - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - return pFormFiller->OnChar(pAnnot, nChar, nFlags); + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) + return pFormFiller->OnChar(pAnnot, nChar, nFlags); - return FALSE; + return FALSE; } -void CFFL_IFormFiller::OnDeSelected(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); +void CFFL_IFormFiller::OnDeSelected(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - pFormFiller->OnDeSelected(pAnnot); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + pFormFiller->OnDeSelected(pAnnot); + } } -void CFFL_IFormFiller::OnSelected(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); +void CFFL_IFormFiller::OnSelected(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - pFormFiller->OnSelected(pAnnot); - } + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + pFormFiller->OnSelected(pAnnot); + } } -FX_BOOL CFFL_IFormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag) -{ - if (!pAnnot) - return FALSE; +FX_BOOL CFFL_IFormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) { + if (!pAnnot) + return FALSE; - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - if (!m_bNotifying) - { - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - if (pWidget->GetAAction(CPDF_AAction::GetFocus)) - { - m_bNotifying = TRUE; - pWidget->GetAppearanceAge(); - - int nValueAge = pWidget->GetValueAge(); - pWidget->ClearAppModified(); - - CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); - ASSERT(pPageView != NULL); - - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - - CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, TRUE); - if(!pFormFiller) return FALSE; - pFormFiller->GetActionData(pPageView, CPDF_AAction::GetFocus, fa); - pWidget->OnAAction(CPDF_AAction::GetFocus, fa, pPageView); - m_bNotifying = FALSE; - - if (pWidget->IsAppModified()) - { - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) - { - pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); - } - } - } - } + if (!m_bNotifying) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + if (pWidget->GetAAction(CPDF_AAction::GetFocus)) { + m_bNotifying = TRUE; + pWidget->GetAppearanceAge(); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) - return pFormFiller->OnSetFocus(pAnnot, nFlag); + int nValueAge = pWidget->GetValueAge(); + pWidget->ClearAppModified(); - return TRUE; -} + CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); + ASSERT(pPageView != NULL); -FX_BOOL CFFL_IFormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag) -{ - if(!pAnnot) return FALSE; - ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) - { - if (pFormFiller->OnKillFocus(pAnnot, nFlag)) - { - if (!m_bNotifying) - { - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - if (pWidget->GetAAction(CPDF_AAction::LoseFocus)) - { - m_bNotifying = TRUE; - pWidget->ClearAppModified(); - - CPDFSDK_PageView* pPageView = pWidget->GetPageView(); - ASSERT(pPageView != NULL); - - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - - pFormFiller->GetActionData(pPageView, CPDF_AAction::LoseFocus, fa); - - pWidget->OnAAction(CPDF_AAction::LoseFocus, fa, pPageView); - m_bNotifying = FALSE; - - } - } + CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, TRUE); + if (!pFormFiller) + return FALSE; + pFormFiller->GetActionData(pPageView, CPDF_AAction::GetFocus, fa); + pWidget->OnAAction(CPDF_AAction::GetFocus, fa, pPageView); + m_bNotifying = FALSE; + + if (pWidget->IsAppModified()) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { + pFormFiller->ResetPDFWindow(pPageView, + nValueAge == pWidget->GetValueAge()); } - else - return FALSE; + } } + } - return TRUE; -} + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) + return pFormFiller->OnSetFocus(pAnnot, nFlag); -FX_BOOL CFFL_IFormFiller::IsVisible(CPDFSDK_Widget* pWidget) -{ - return pWidget->IsVisible(); + return TRUE; } -FX_BOOL CFFL_IFormFiller::IsReadOnly(CPDFSDK_Widget* pWidget) -{ - ASSERT(pWidget != NULL); +FX_BOOL CFFL_IFormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) { + if (!pAnnot) + return FALSE; + ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); - int nFieldFlags = pWidget->GetFieldFlags(); + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) { + if (pFormFiller->OnKillFocus(pAnnot, nFlag)) { + if (!m_bNotifying) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + if (pWidget->GetAAction(CPDF_AAction::LoseFocus)) { + m_bNotifying = TRUE; + pWidget->ClearAppModified(); - return (nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY; -} + CPDFSDK_PageView* pPageView = pWidget->GetPageView(); + ASSERT(pPageView != NULL); -FX_BOOL CFFL_IFormFiller::IsFillingAllowed(CPDFSDK_Widget* pWidget) -{ - if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON) - return TRUE; + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - CPDF_Page* pPage = pWidget->GetPDFPage(); - CPDF_Document* pDocument = pPage->m_pDocument; - FX_DWORD dwPermissions = pDocument->GetUserPermissions(); - return (dwPermissions & FPDFPERM_FILL_FORM) || - (dwPermissions & FPDFPERM_ANNOT_FORM) || - (dwPermissions & FPDFPERM_MODIFY); -} + pFormFiller->GetActionData(pPageView, CPDF_AAction::LoseFocus, fa); -CFFL_FormFiller* CFFL_IFormFiller::GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister) -{ - auto it = m_Maps.find(pAnnot); - if (it != m_Maps.end()) - return it->second; + pWidget->OnAAction(CPDF_AAction::LoseFocus, fa, pPageView); + m_bNotifying = FALSE; + } + } + } else + return FALSE; + } - if (!bRegister) - return nullptr; + return TRUE; +} - 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; - } +FX_BOOL CFFL_IFormFiller::IsVisible(CPDFSDK_Widget* pWidget) { + return pWidget->IsVisible(); +} - if (!pFormFiller) - return nullptr; +FX_BOOL CFFL_IFormFiller::IsReadOnly(CPDFSDK_Widget* pWidget) { + ASSERT(pWidget != NULL); - m_Maps[pAnnot] = pFormFiller; - return pFormFiller; -} + int nFieldFlags = pWidget->GetFieldFlags(); -void CFFL_IFormFiller::RemoveFormFiller(CPDFSDK_Annot* pAnnot) -{ - if ( pAnnot != NULL ) - { - UnRegisterFormFiller( pAnnot ); - } + return (nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY; } -void CFFL_IFormFiller::UnRegisterFormFiller(CPDFSDK_Annot* pAnnot) -{ - auto it = m_Maps.find(pAnnot); - if (it == m_Maps.end()) - return; +FX_BOOL CFFL_IFormFiller::IsFillingAllowed(CPDFSDK_Widget* pWidget) { + if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON) + return TRUE; - delete it->second; - m_Maps.erase(it); + CPDF_Page* pPage = pWidget->GetPDFPage(); + CPDF_Document* pDocument = pPage->m_pDocument; + FX_DWORD dwPermissions = pDocument->GetUserPermissions(); + return (dwPermissions & FPDFPERM_FILL_FORM) || + (dwPermissions & FPDFPERM_ANNOT_FORM) || + (dwPermissions & FPDFPERM_MODIFY); } -void CFFL_IFormFiller::SetFocusAnnotTab(CPDFSDK_Annot* pWidget, FX_BOOL bSameField, FX_BOOL bNext) -{ +CFFL_FormFiller* CFFL_IFormFiller::GetFormFiller(CPDFSDK_Annot* pAnnot, + FX_BOOL bRegister) { + 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) + return nullptr; + m_Maps[pAnnot] = pFormFiller; + return pFormFiller; } -void CFFL_IFormFiller::QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax, int32_t & nRet, FX_FLOAT & fPopupRet) -{ - ASSERT(pPrivateData != NULL); +void CFFL_IFormFiller::RemoveFormFiller(CPDFSDK_Annot* pAnnot) { + if (pAnnot != NULL) { + UnRegisterFormFiller(pAnnot); + } +} - CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; +void CFFL_IFormFiller::UnRegisterFormFiller(CPDFSDK_Annot* 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) {} +void CFFL_IFormFiller::QueryWherePopup(void* pPrivateData, + FX_FLOAT fPopupMin, + FX_FLOAT fPopupMax, + int32_t& nRet, + FX_FLOAT& fPopupRet) { + ASSERT(pPrivateData != NULL); - CPDF_Rect rcPageView(0,0,0,0); - rcPageView.right = pData->pWidget->GetPDFPage()->GetPageWidth(); - rcPageView.bottom = pData->pWidget->GetPDFPage()->GetPageHeight(); - rcPageView.Normalize(); + CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; + CPDF_Rect rcPageView(0, 0, 0, 0); + rcPageView.right = pData->pWidget->GetPDFPage()->GetPageWidth(); + rcPageView.bottom = pData->pWidget->GetPDFPage()->GetPageHeight(); + rcPageView.Normalize(); - ASSERT(pData->pWidget != NULL); - CPDF_Rect rcAnnot = pData->pWidget->GetRect(); + ASSERT(pData->pWidget != NULL); + CPDF_Rect rcAnnot = pData->pWidget->GetRect(); - FX_FLOAT fTop = 0.0f; - FX_FLOAT fBottom = 0.0f; + FX_FLOAT fTop = 0.0f; + FX_FLOAT fBottom = 0.0f; - CPDFSDK_Widget * pWidget = (CPDFSDK_Widget*)pData->pWidget; - switch (pWidget->GetRotate() / 90) - { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pData->pWidget; + switch (pWidget->GetRotate() / 90) { default: case 0: - fTop = rcPageView.top - rcAnnot.top; - fBottom = rcAnnot.bottom - rcPageView.bottom; - break; + fTop = rcPageView.top - rcAnnot.top; + fBottom = rcAnnot.bottom - rcPageView.bottom; + break; case 1: - fTop = rcAnnot.left - rcPageView.left; - fBottom = rcPageView.right - rcAnnot.right; - break; + fTop = rcAnnot.left - rcPageView.left; + fBottom = rcPageView.right - rcAnnot.right; + break; case 2: - fTop = rcAnnot.bottom - rcPageView.bottom; - fBottom = rcPageView.top - rcAnnot.top; - break; + fTop = rcAnnot.bottom - rcPageView.bottom; + fBottom = rcPageView.top - rcAnnot.top; + break; case 3: - fTop = rcPageView.right - rcAnnot.right; - fBottom = rcAnnot.left - rcPageView.left; - break; - } - - FX_FLOAT fFactHeight = 0; - FX_BOOL bBottom = TRUE; - FX_FLOAT fMaxListBoxHeight = 0; - if (fPopupMax > FFL_MAXLISTBOXHEIGHT) - { - if (fPopupMin > FFL_MAXLISTBOXHEIGHT) - { - fMaxListBoxHeight = fPopupMin; - } - else - { - fMaxListBoxHeight = FFL_MAXLISTBOXHEIGHT; - } + fTop = rcPageView.right - rcAnnot.right; + fBottom = rcAnnot.left - rcPageView.left; + break; + } + + FX_FLOAT fFactHeight = 0; + FX_BOOL bBottom = TRUE; + FX_FLOAT fMaxListBoxHeight = 0; + if (fPopupMax > FFL_MAXLISTBOXHEIGHT) { + if (fPopupMin > FFL_MAXLISTBOXHEIGHT) { + fMaxListBoxHeight = fPopupMin; + } else { + fMaxListBoxHeight = FFL_MAXLISTBOXHEIGHT; } - else - fMaxListBoxHeight = fPopupMax; - - if (fBottom > fMaxListBoxHeight) - { - fFactHeight = fMaxListBoxHeight; + } else + fMaxListBoxHeight = fPopupMax; + + if (fBottom > fMaxListBoxHeight) { + fFactHeight = fMaxListBoxHeight; + bBottom = TRUE; + } else { + if (fTop > fMaxListBoxHeight) { + fFactHeight = fMaxListBoxHeight; + bBottom = FALSE; + } else { + if (fTop > fBottom) { + fFactHeight = fTop; + bBottom = FALSE; + } else { + fFactHeight = fBottom; bBottom = TRUE; + } } - else - { - if (fTop > fMaxListBoxHeight) - { - fFactHeight = fMaxListBoxHeight; - bBottom = FALSE; - } - else - { - if (fTop > fBottom) - { - fFactHeight = fTop; - bBottom = FALSE; - } - else - { - fFactHeight = fBottom; - bBottom = TRUE; - } - } - } + } + + nRet = bBottom ? 0 : 1; + fPopupRet = fFactHeight; +} - nRet = bBottom ? 0 : 1; - fPopupRet = fFactHeight; +void CFFL_IFormFiller::OnSetWindowRect(void* pPrivateData, + const CPDF_Rect& rcWindow) { + ASSERT(pPrivateData != NULL); + + CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; + + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, TRUE)) { + CPDF_Rect rcOld = + pFormFiller->PWLtoFFL(pFormFiller->GetWindowRect(pData->pPageView)); + CPDF_Rect rcNew = pFormFiller->PWLtoFFL(rcWindow); + pFormFiller->SetWindowRect(pData->pPageView, rcWindow); + + CPDF_Rect unRect = rcOld; + unRect.Union(rcNew); + // FX_RECT rcRect = unRect.GetOutterRect(); + unRect.left = (FX_FLOAT)(unRect.left - 0.5); + unRect.right = (FX_FLOAT)(unRect.right + 0.5); + unRect.top = (FX_FLOAT)(unRect.top + 0.5); + unRect.bottom = (FX_FLOAT)(unRect.bottom - 0.5); + m_pApp->FFI_Invalidate(pData->pWidget->GetPDFXFAPage(), unRect.left, + unRect.top, unRect.right, unRect.bottom); + } } -void CFFL_IFormFiller::OnSetWindowRect(void* pPrivateData, const CPDF_Rect & rcWindow) -{ - ASSERT(pPrivateData != NULL); +void CFFL_IFormFiller::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) { + ASSERT(pPrivateData != NULL); + CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; + ASSERT(pData->pWidget != NULL); + + CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); + ASSERT(pFormFiller != NULL); + + pFormFiller->OnKeyStroke(bKeyDown); +} - CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; +void CFFL_IFormFiller::OnKeyStrokeCommit(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bRC, + FX_BOOL& bExit, + FX_DWORD nFlag) { + if (!m_bNotifying) { + ASSERT(pWidget != NULL); + if (pWidget->GetAAction(CPDF_AAction::KeyStroke)) { + m_bNotifying = TRUE; + pWidget->ClearAppModified(); - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, TRUE)) - { + ASSERT(pPageView != NULL); - CPDF_Rect rcOld = pFormFiller->PWLtoFFL(pFormFiller->GetWindowRect(pData->pPageView)); - CPDF_Rect rcNew = pFormFiller->PWLtoFFL(rcWindow); - pFormFiller->SetWindowRect(pData->pPageView, rcWindow); + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); + fa.bWillCommit = TRUE; + fa.bKeyDown = TRUE; + fa.bRC = TRUE; - CPDF_Rect unRect = rcOld; - unRect.Union(rcNew); - //FX_RECT rcRect = unRect.GetOutterRect(); - unRect.left = (FX_FLOAT)(unRect.left - 0.5); - unRect.right = (FX_FLOAT)(unRect.right + 0.5); - unRect.top = (FX_FLOAT)(unRect.top + 0.5); - unRect.bottom = (FX_FLOAT)(unRect.bottom -0.5); - m_pApp->FFI_Invalidate(pData->pWidget->GetPDFXFAPage(), unRect.left, unRect.top, unRect.right, unRect.bottom); - } -} + CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE); + ASSERT(pFormFiller != NULL); -void CFFL_IFormFiller::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) -{ - ASSERT(pPrivateData != NULL); - CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; - ASSERT(pData->pWidget != NULL); + pFormFiller->GetActionData(pPageView, CPDF_AAction::KeyStroke, fa); + pFormFiller->SaveState(pPageView); - CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); - ASSERT(pFormFiller != NULL); + PDFSDK_FieldAction faOld = fa; + pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pPageView); - pFormFiller->OnKeyStroke(bKeyDown); + bRC = fa.bRC; + // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, + // pWidget); + + m_bNotifying = FALSE; + } + } } -void CFFL_IFormFiller::OnKeyStrokeCommit(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag) -{ - if (!m_bNotifying) - { - ASSERT(pWidget != NULL); - if (pWidget->GetAAction(CPDF_AAction::KeyStroke)) - { - m_bNotifying = TRUE; - pWidget->ClearAppModified(); +void CFFL_IFormFiller::OnValidate(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bRC, + FX_BOOL& bExit, + FX_DWORD nFlag) { + if (!m_bNotifying) { + ASSERT(pWidget != NULL); + if (pWidget->GetAAction(CPDF_AAction::Validate)) { + m_bNotifying = TRUE; + pWidget->ClearAppModified(); - ASSERT(pPageView != NULL); + ASSERT(pPageView != NULL); + // CReader_DocView* pDocView = pPageView->GetDocView(); + // ASSERT(pDocView != NULL); - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - fa.bWillCommit = TRUE; - fa.bKeyDown = TRUE; - fa.bRC = TRUE; + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); + fa.bKeyDown = TRUE; + fa.bRC = TRUE; - CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE); - ASSERT(pFormFiller != NULL); + CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE); + ASSERT(pFormFiller != NULL); - pFormFiller->GetActionData(pPageView, CPDF_AAction::KeyStroke, fa); - pFormFiller->SaveState(pPageView); + pFormFiller->GetActionData(pPageView, CPDF_AAction::Validate, fa); + pFormFiller->SaveState(pPageView); - PDFSDK_FieldAction faOld = fa; - pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pPageView); + PDFSDK_FieldAction faOld = fa; + pWidget->OnAAction(CPDF_AAction::Validate, fa, pPageView); - bRC = fa.bRC; -// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget); + bRC = fa.bRC; + // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, + // pWidget); - m_bNotifying = FALSE; - } + m_bNotifying = FALSE; } + } } -void CFFL_IFormFiller::OnValidate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag) -{ - if (!m_bNotifying) - { - ASSERT(pWidget != NULL); - if (pWidget->GetAAction(CPDF_AAction::Validate)) - { - m_bNotifying = TRUE; - pWidget->ClearAppModified(); +void CFFL_IFormFiller::OnCalculate(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bExit, + FX_DWORD nFlag) { + if (!m_bNotifying) { + ASSERT(pWidget != NULL); + ASSERT(pPageView != NULL); + // CReader_DocView* pDocView = pPageView->GetDocView(); + // ASSERT(pDocView != NULL); + CPDFSDK_Document* pDocument = pPageView->GetSDKDocument(); + ASSERT(pDocument != NULL); + + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - ASSERT(pPageView != NULL); -// CReader_DocView* pDocView = pPageView->GetDocView(); -// ASSERT(pDocView != NULL); + pInterForm->OnCalculate(pWidget->GetFormField()); + // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, + // pWidget); + m_bNotifying = FALSE; + } +} - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - fa.bKeyDown = TRUE; - fa.bRC = TRUE; +void CFFL_IFormFiller::OnFormat(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bExit, + FX_DWORD nFlag) { + if (!m_bNotifying) { + ASSERT(pWidget != NULL); + ASSERT(pPageView != NULL); + // CReader_DocView* pDocView = pPageView->GetDocView(); + // ASSERT(pDocView != NULL); + CPDFSDK_Document* pDocument = pPageView->GetSDKDocument(); + ASSERT(pDocument != NULL); - CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE); - ASSERT(pFormFiller != NULL); + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - pFormFiller->GetActionData(pPageView, CPDF_AAction::Validate, fa); - pFormFiller->SaveState(pPageView); + FX_BOOL bFormated = FALSE; + CFX_WideString sValue = + pInterForm->OnFormat(pWidget->GetFormField(), bFormated); - PDFSDK_FieldAction faOld = fa; - pWidget->OnAAction(CPDF_AAction::Validate, fa, pPageView); + // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, + // pWidget); - bRC = fa.bRC; -// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget); + if (bExit) + return; - m_bNotifying = FALSE; - } + if (bFormated) { + pInterForm->ResetFieldAppearance(pWidget->GetFormField(), sValue.c_str(), + TRUE); + pInterForm->UpdateField(pWidget->GetFormField()); } + + m_bNotifying = FALSE; + } } -void CFFL_IFormFiller::OnCalculate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag) -{ - if (!m_bNotifying) - { - ASSERT(pWidget != NULL); - ASSERT(pPageView != NULL); -// CReader_DocView* pDocView = pPageView->GetDocView(); -// ASSERT(pDocView != NULL); - CPDFSDK_Document* pDocument = pPageView->GetSDKDocument(); - ASSERT(pDocument != NULL); +void CFFL_IFormFiller::OnClick(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bReset, + FX_BOOL& bExit, + FX_UINT nFlag) { + ASSERT(pWidget != NULL); + + if (!m_bNotifying) { + if (pWidget->HasXFAAAction(PDFSDK_XFA_Click)) { + m_bNotifying = TRUE; + int nAge = pWidget->GetAppearanceAge(); + int nValueAge = pWidget->GetValueAge(); + + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + pWidget->OnXFAAAction(PDFSDK_XFA_Click, fa, pPageView); + m_bNotifying = FALSE; - pInterForm->OnCalculate(pWidget->GetFormField()); + if (!IsValidAnnot(pPageView, pWidget)) { + bExit = TRUE; + return; + } -// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget); + if (nAge != pWidget->GetAppearanceAge()) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { + pFormFiller->ResetPDFWindow(pPageView, + nValueAge == pWidget->GetValueAge()); + } - m_bNotifying = FALSE; + bReset = TRUE; + } } + } } -void CFFL_IFormFiller::OnFormat(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag) -{ - if (!m_bNotifying) - { - ASSERT(pWidget != NULL); - ASSERT(pPageView != NULL); -// CReader_DocView* pDocView = pPageView->GetDocView(); -// ASSERT(pDocView != NULL); - CPDFSDK_Document* pDocument = pPageView->GetSDKDocument(); - ASSERT(pDocument != NULL); +void CFFL_IFormFiller::OnFull(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bReset, + FX_BOOL& bExit, + FX_UINT nFlag) { + ASSERT(pWidget != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + if (!m_bNotifying) { + if (pWidget->HasXFAAAction(PDFSDK_XFA_Full)) { + m_bNotifying = TRUE; + int nAge = pWidget->GetAppearanceAge(); + int nValueAge = pWidget->GetValueAge(); - FX_BOOL bFormated = FALSE; - CFX_WideString sValue = pInterForm->OnFormat(pWidget->GetFormField(), bFormated); + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); -// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget); + pWidget->OnXFAAAction(PDFSDK_XFA_Full, fa, pPageView); + m_bNotifying = FALSE; - if (bExit) return; + if (!IsValidAnnot(pPageView, pWidget)) { + bExit = TRUE; + return; + } - if (bFormated) - { - pInterForm->ResetFieldAppearance(pWidget->GetFormField(), sValue.c_str(), TRUE); - pInterForm->UpdateField(pWidget->GetFormField()); + if (nAge != pWidget->GetAppearanceAge()) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { + pFormFiller->ResetPDFWindow(pPageView, + nValueAge == pWidget->GetValueAge()); } - m_bNotifying = FALSE; + bReset = TRUE; + } } + } } -void CFFL_IFormFiller::OnClick(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit, FX_UINT nFlag) -{ - ASSERT(pWidget != NULL); - - if (!m_bNotifying) - { - if (pWidget->HasXFAAAction(PDFSDK_XFA_Click)) - { - m_bNotifying = TRUE; - int nAge = pWidget->GetAppearanceAge(); - int nValueAge = pWidget->GetValueAge(); - - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - - pWidget->OnXFAAAction(PDFSDK_XFA_Click, fa, pPageView); - m_bNotifying = FALSE; - - if (!IsValidAnnot(pPageView, pWidget)) - { - bExit = TRUE; - return; - } - - if (nAge != pWidget->GetAppearanceAge()) - { - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) - { - pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); - } - - bReset = TRUE; - } - } - } +void CFFL_IFormFiller::OnPopupPreOpen(void* pPrivateData, + FX_BOOL& bExit, + FX_DWORD nFlag) { + ASSERT(pPrivateData != NULL); + CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; + ASSERT(pData->pWidget != NULL); + + FX_BOOL bTempReset = FALSE; + FX_BOOL bTempExit = FALSE; + this->OnPreOpen(pData->pWidget, pData->pPageView, bTempReset, bTempExit, + nFlag); + + if (bTempReset || bTempExit) { + bExit = TRUE; + } } -void CFFL_IFormFiller::OnFull(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit, FX_UINT nFlag) -{ - ASSERT(pWidget != NULL); - - if (!m_bNotifying) - { - if (pWidget->HasXFAAAction(PDFSDK_XFA_Full)) - { - m_bNotifying = TRUE; - int nAge = pWidget->GetAppearanceAge(); - int nValueAge = pWidget->GetValueAge(); - - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - - pWidget->OnXFAAAction(PDFSDK_XFA_Full, fa, pPageView); - m_bNotifying = FALSE; - - if (!IsValidAnnot(pPageView, pWidget)) - { - bExit = TRUE; - return; - } - - if (nAge != pWidget->GetAppearanceAge()) - { - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) - { - pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); - } - - bReset = TRUE; - } - } - } +void CFFL_IFormFiller::OnPopupPostOpen(void* pPrivateData, + FX_BOOL& bExit, + FX_DWORD nFlag) { + ASSERT(pPrivateData != NULL); + CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; + ASSERT(pData->pWidget != NULL); + + FX_BOOL bTempReset = FALSE; + FX_BOOL bTempExit = FALSE; + this->OnPostOpen(pData->pWidget, pData->pPageView, bTempReset, bTempExit, + nFlag); + + if (bTempReset || bTempExit) { + bExit = TRUE; + } } -void CFFL_IFormFiller::OnPopupPreOpen(void* pPrivateData, FX_BOOL& bExit, FX_DWORD nFlag) -{ - ASSERT(pPrivateData != NULL); - CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; - ASSERT(pData->pWidget != NULL); - - FX_BOOL bTempReset = FALSE; - FX_BOOL bTempExit = FALSE; - this->OnPreOpen(pData->pWidget, pData->pPageView, bTempReset, bTempExit, nFlag); +void CFFL_IFormFiller::OnPreOpen(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bReset, + FX_BOOL& bExit, + FX_UINT nFlag) { + ASSERT(pWidget != NULL); - if (bTempReset || bTempExit) - { - bExit = TRUE; - } -} + if (!m_bNotifying) { + if (pWidget->HasXFAAAction(PDFSDK_XFA_PreOpen)) { + m_bNotifying = TRUE; + int nAge = pWidget->GetAppearanceAge(); + int nValueAge = pWidget->GetValueAge(); -void CFFL_IFormFiller::OnPopupPostOpen(void* pPrivateData, FX_BOOL& bExit, FX_DWORD nFlag) -{ - ASSERT(pPrivateData != NULL); - CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; - ASSERT(pData->pWidget != NULL); + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - FX_BOOL bTempReset = FALSE; - FX_BOOL bTempExit = FALSE; - this->OnPostOpen(pData->pWidget, pData->pPageView, bTempReset, bTempExit, nFlag); + pWidget->OnXFAAAction(PDFSDK_XFA_PreOpen, fa, pPageView); + m_bNotifying = FALSE; - if (bTempReset || bTempExit) - { - bExit = TRUE; - } -} + if (!IsValidAnnot(pPageView, pWidget)) { + bExit = TRUE; + return; + } -void CFFL_IFormFiller::OnPreOpen(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit, FX_UINT nFlag) -{ - ASSERT(pWidget != NULL); - - if (!m_bNotifying) - { - if (pWidget->HasXFAAAction(PDFSDK_XFA_PreOpen)) - { - m_bNotifying = TRUE; - int nAge = pWidget->GetAppearanceAge(); - int nValueAge = pWidget->GetValueAge(); - - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - - pWidget->OnXFAAAction(PDFSDK_XFA_PreOpen, fa, pPageView); - m_bNotifying = FALSE; - - if (!IsValidAnnot(pPageView, pWidget)) - { - bExit = TRUE; - return; - } - - if (nAge != pWidget->GetAppearanceAge()) - { - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) - { - pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); - } - - bReset = TRUE; - } - } - } -} + if (nAge != pWidget->GetAppearanceAge()) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { + pFormFiller->ResetPDFWindow(pPageView, + nValueAge == pWidget->GetValueAge()); + } -void CFFL_IFormFiller::OnPostOpen(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit, FX_UINT nFlag) -{ - ASSERT(pWidget != NULL); - - if (!m_bNotifying) - { - if (pWidget->HasXFAAAction(PDFSDK_XFA_PostOpen)) - { - m_bNotifying = TRUE; - int nAge = pWidget->GetAppearanceAge(); - int nValueAge = pWidget->GetValueAge(); - - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - - pWidget->OnXFAAAction(PDFSDK_XFA_PostOpen, fa, pPageView); - m_bNotifying = FALSE; - - if (!IsValidAnnot(pPageView, pWidget)) - { - bExit = TRUE; - return; - } - - if (nAge != pWidget->GetAppearanceAge()) - { - if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) - { - pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge()); - } - - bReset = TRUE; - } - } - } + bReset = TRUE; + } + } + } } -FX_BOOL CFFL_IFormFiller::IsValidAnnot(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot) -{ - if(pPageView) - return pPageView->IsValidAnnot(pAnnot->GetPDFAnnot()); +void CFFL_IFormFiller::OnPostOpen(CPDFSDK_Widget* pWidget, + CPDFSDK_PageView* pPageView, + FX_BOOL& bReset, + FX_BOOL& bExit, + FX_UINT nFlag) { + ASSERT(pWidget != NULL); - return FALSE; -} + if (!m_bNotifying) { + if (pWidget->HasXFAAAction(PDFSDK_XFA_PostOpen)) { + m_bNotifying = TRUE; + int nAge = pWidget->GetAppearanceAge(); + int nValueAge = pWidget->GetValueAge(); -void CFFL_IFormFiller::BeforeUndo(CPDFSDK_Document* pDocument) -{ + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); -} + pWidget->OnXFAAAction(PDFSDK_XFA_PostOpen, fa, pPageView); + m_bNotifying = FALSE; -void CFFL_IFormFiller::BeforeRedo(CPDFSDK_Document* pDocument) -{ - BeforeUndo(pDocument); -} + if (!IsValidAnnot(pPageView, pWidget)) { + bExit = TRUE; + return; + } -void CFFL_IFormFiller::AfterUndo(CPDFSDK_Document* pDocument) -{ -} + if (nAge != pWidget->GetAppearanceAge()) { + if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) { + pFormFiller->ResetPDFWindow(pPageView, + nValueAge == pWidget->GetValueAge()); + } -void CFFL_IFormFiller::AfterRedo(CPDFSDK_Document* pDocument) -{ + bReset = TRUE; + } + } + } } -FX_BOOL CFFL_IFormFiller::CanCopy(CPDFSDK_Document* pDocument) -{ +FX_BOOL CFFL_IFormFiller::IsValidAnnot(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) { + if (pPageView) + return pPageView->IsValidAnnot(pAnnot->GetPDFAnnot()); - return FALSE; + return FALSE; } -FX_BOOL CFFL_IFormFiller::CanCut(CPDFSDK_Document* pDocument) -{ +void CFFL_IFormFiller::BeforeUndo(CPDFSDK_Document* pDocument) {} - return FALSE; +void CFFL_IFormFiller::BeforeRedo(CPDFSDK_Document* pDocument) { + BeforeUndo(pDocument); } -FX_BOOL CFFL_IFormFiller::CanPaste(CPDFSDK_Document* pDocument) -{ +void CFFL_IFormFiller::AfterUndo(CPDFSDK_Document* pDocument) {} + +void CFFL_IFormFiller::AfterRedo(CPDFSDK_Document* pDocument) {} - return FALSE; +FX_BOOL CFFL_IFormFiller::CanCopy(CPDFSDK_Document* pDocument) { + return FALSE; } -void CFFL_IFormFiller::DoCopy(CPDFSDK_Document* pDocument) -{ +FX_BOOL CFFL_IFormFiller::CanCut(CPDFSDK_Document* pDocument) { + return FALSE; } -void CFFL_IFormFiller::DoCut(CPDFSDK_Document* pDocument) -{ +FX_BOOL CFFL_IFormFiller::CanPaste(CPDFSDK_Document* pDocument) { + return FALSE; } -void CFFL_IFormFiller::DoPaste(CPDFSDK_Document* pDocument) -{ +void CFFL_IFormFiller::DoCopy(CPDFSDK_Document* pDocument) {} + +void CFFL_IFormFiller::DoCut(CPDFSDK_Document* pDocument) {} + +void CFFL_IFormFiller::DoPaste(CPDFSDK_Document* pDocument) {} +void CFFL_IFormFiller::OnBeforeKeyStroke(FX_BOOL bEditOrList, + void* pPrivateData, + int32_t nKeyCode, + CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + int nSelStart, + int nSelEnd, + FX_BOOL bKeyDown, + FX_BOOL& bRC, + FX_BOOL& bExit, + FX_DWORD nFlag) { + ASSERT(pPrivateData != NULL); + CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; + ASSERT(pData->pWidget != NULL); + + CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); + ASSERT(pFormFiller != NULL); + + if (pFormFiller->IsFieldFull(pData->pPageView)) { + FX_BOOL bFullExit = FALSE; + FX_BOOL bFullReset = FALSE; + OnFull(pData->pWidget, pData->pPageView, bFullReset, bFullExit, nFlag); + + if (bFullReset || bFullExit) { + bExit = TRUE; + return; + } + } + + if (!m_bNotifying) { + if (pData->pWidget->GetAAction(CPDF_AAction::KeyStroke)) { + m_bNotifying = TRUE; + int nAge = pData->pWidget->GetAppearanceAge(); + int nValueAge = pData->pWidget->GetValueAge(); + + ASSERT(pData->pPageView != NULL); + CPDFSDK_Document* pDocument = pData->pPageView->GetSDKDocument(); + + PDFSDK_FieldAction fa; + fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); + fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); + fa.sChange = strChange; + fa.sChangeEx = strChangeEx; + fa.bKeyDown = bKeyDown; + fa.bWillCommit = FALSE; + fa.bRC = TRUE; + fa.nSelStart = nSelStart; + fa.nSelEnd = nSelEnd; + + pFormFiller->GetActionData(pData->pPageView, CPDF_AAction::KeyStroke, fa); + pFormFiller->SaveState(pData->pPageView); + + if (pData->pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, + pData->pPageView)) { + if (!IsValidAnnot(pData->pPageView, pData->pWidget)) { + bExit = TRUE; + m_bNotifying = FALSE; + return; + } -} -void CFFL_IFormFiller::OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, int32_t nKeyCode, - CFX_WideString & strChange, const CFX_WideString& strChangeEx, - int nSelStart, int nSelEnd, - FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag) -{ - ASSERT(pPrivateData != NULL); - CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; - ASSERT(pData->pWidget != NULL); - - CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); - ASSERT(pFormFiller != NULL); - - if (pFormFiller->IsFieldFull(pData->pPageView)) - { - FX_BOOL bFullExit = FALSE; - FX_BOOL bFullReset = FALSE; - OnFull(pData->pWidget, pData->pPageView, bFullReset, bFullExit, nFlag); - - if (bFullReset || bFullExit) - { - bExit = TRUE; - return; - } - } - - if (!m_bNotifying) - { - if (pData->pWidget->GetAAction(CPDF_AAction::KeyStroke)) - { - m_bNotifying = TRUE; - int nAge = pData->pWidget->GetAppearanceAge(); - int nValueAge = pData->pWidget->GetValueAge(); - - ASSERT(pData->pPageView != NULL); - CPDFSDK_Document* pDocument = pData->pPageView->GetSDKDocument(); - - PDFSDK_FieldAction fa; - fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); - fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); - fa.sChange = strChange; - fa.sChangeEx = strChangeEx; - fa.bKeyDown = bKeyDown; - fa.bWillCommit = FALSE; - fa.bRC = TRUE; - fa.nSelStart = nSelStart; - fa.nSelEnd = nSelEnd; - - - pFormFiller->GetActionData(pData->pPageView, CPDF_AAction::KeyStroke, fa); - pFormFiller->SaveState(pData->pPageView); - - if (pData->pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pData->pPageView)) - { - if (!IsValidAnnot(pData->pPageView, pData->pWidget)) - { - bExit = TRUE; - m_bNotifying = FALSE; - return; - } - - if (nAge != pData->pWidget->GetAppearanceAge()) - { - CPWL_Wnd* pWnd = pFormFiller->ResetPDFWindow(pData->pPageView, nValueAge == pData->pWidget->GetValueAge()); - pData = (CFFL_PrivateData*)pWnd->GetAttachedData(); - bExit = TRUE; - } - - if (fa.bRC) - { - pFormFiller->SetActionData(pData->pPageView, CPDF_AAction::KeyStroke, fa); - bRC = FALSE; - } - else - { - pFormFiller->RestoreState(pData->pPageView); - bRC = FALSE; - } - - if (pDocument->GetFocusAnnot() != pData->pWidget) - { - pFormFiller->CommitData(pData->pPageView,nFlag); - bExit = TRUE; - } - } - else - { - if (!IsValidAnnot(pData->pPageView, pData->pWidget)) - { - bExit = TRUE; - m_bNotifying = FALSE; - return; - } - } - - m_bNotifying = FALSE; - } - } + if (nAge != pData->pWidget->GetAppearanceAge()) { + CPWL_Wnd* pWnd = pFormFiller->ResetPDFWindow( + pData->pPageView, nValueAge == pData->pWidget->GetValueAge()); + pData = (CFFL_PrivateData*)pWnd->GetAttachedData(); + bExit = TRUE; + } + + if (fa.bRC) { + pFormFiller->SetActionData(pData->pPageView, CPDF_AAction::KeyStroke, + fa); + bRC = FALSE; + } else { + pFormFiller->RestoreState(pData->pPageView); + bRC = FALSE; + } + + if (pDocument->GetFocusAnnot() != pData->pWidget) { + pFormFiller->CommitData(pData->pPageView, nFlag); + bExit = TRUE; + } + } else { + if (!IsValidAnnot(pData->pPageView, pData->pWidget)) { + bExit = TRUE; + m_bNotifying = FALSE; + return; + } + } + + m_bNotifying = FALSE; + } + } } -void CFFL_IFormFiller::OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_BOOL & bExit,FX_DWORD nFlag) -{ - ASSERT(pPrivateData != NULL); - CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; - ASSERT(pData->pWidget != NULL); +void CFFL_IFormFiller::OnAfterKeyStroke(FX_BOOL bEditOrList, + void* pPrivateData, + FX_BOOL& bExit, + FX_DWORD nFlag) { + ASSERT(pPrivateData != NULL); + CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; + ASSERT(pData->pWidget != NULL); - CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); - ASSERT(pFormFiller != NULL); + CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); + ASSERT(pFormFiller != NULL); - if (!bEditOrList) - pFormFiller->OnKeyStroke(bExit); + if (!bEditOrList) + pFormFiller->OnKeyStroke(bExit); } diff --git a/fpdfsdk/src/formfiller/FFL_ListBox.cpp b/fpdfsdk/src/formfiller/FFL_ListBox.cpp index c105cfcbdd..0735f48cf3 100644 --- a/fpdfsdk/src/formfiller/FFL_ListBox.cpp +++ b/fpdfsdk/src/formfiller/FFL_ListBox.cpp @@ -12,286 +12,237 @@ //#include "../../include/formfiller/FFL_Undo.h" #include "../../include/formfiller/FFL_CBA_Fontmap.h" +#define FFL_DEFAULTLISTBOXFONTSIZE 12.0f -#define FFL_DEFAULTLISTBOXFONTSIZE 12.0f +/* ------------------------------- CFFL_ListBox ------------------------------- + */ +CFFL_ListBox::CFFL_ListBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget) + : CFFL_FormFiller(pApp, pWidget), m_pFontMap(NULL) {} -/* ------------------------------- CFFL_ListBox ------------------------------- */ - -CFFL_ListBox::CFFL_ListBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget) : - CFFL_FormFiller(pApp, pWidget), - m_pFontMap(NULL) -{ +CFFL_ListBox::~CFFL_ListBox() { + delete m_pFontMap; } -CFFL_ListBox::~CFFL_ListBox() -{ - delete m_pFontMap; +PWL_CREATEPARAM CFFL_ListBox::GetCreateParam() { + PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam(); + + ASSERT(m_pWidget != NULL); + FX_DWORD dwFieldFlag = m_pWidget->GetFieldFlags(); + + if (dwFieldFlag & FIELDFLAG_MULTISELECT) { + cp.dwFlags |= PLBS_MULTIPLESEL; + } + + cp.dwFlags |= PWS_VSCROLL; + + if (cp.dwFlags & PWS_AUTOFONTSIZE) + cp.fFontSize = FFL_DEFAULTLISTBOXFONTSIZE; + + if (!m_pFontMap) { + m_pFontMap = new CBA_FontMap(m_pWidget, m_pApp->GetSysHandler()); + m_pFontMap->Initial(); + } + cp.pFontMap = m_pFontMap; + + return cp; } -PWL_CREATEPARAM CFFL_ListBox::GetCreateParam() -{ - PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam(); +CPWL_Wnd* CFFL_ListBox::NewPDFWindow(const PWL_CREATEPARAM& cp, + CPDFSDK_PageView* pPageView) { + CPWL_ListBox* pWnd = new CPWL_ListBox(); + pWnd->AttachFFLData(this); + pWnd->Create(cp); - ASSERT(m_pWidget != NULL); - FX_DWORD dwFieldFlag = m_pWidget->GetFieldFlags(); + ASSERT(m_pApp != NULL); + CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); + pWnd->SetFillerNotify(pIFormFiller); - if (dwFieldFlag & FIELDFLAG_MULTISELECT) - { - cp.dwFlags |= PLBS_MULTIPLESEL; - } + for (int32_t i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) + pWnd->AddString(m_pWidget->GetOptionLabel(i).c_str()); - cp.dwFlags |= PWS_VSCROLL; + if (pWnd->HasFlag(PLBS_MULTIPLESEL)) { + m_OriginSelections.clear(); - if (cp.dwFlags & PWS_AUTOFONTSIZE) - cp.fFontSize = FFL_DEFAULTLISTBOXFONTSIZE; + FX_BOOL bSetCaret = FALSE; + for (int32_t i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) { + if (m_pWidget->IsOptionSelected(i)) { + if (!bSetCaret) { + pWnd->SetCaret(i); + bSetCaret = TRUE; + } + pWnd->Select(i); + m_OriginSelections.insert(i); + } + } + } else { + for (int i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) { + if (m_pWidget->IsOptionSelected(i)) { + pWnd->Select(i); + break; + } + } + } - if (!m_pFontMap) - { - m_pFontMap = new CBA_FontMap(m_pWidget, m_pApp->GetSysHandler()); - m_pFontMap->Initial(); - } - cp.pFontMap = m_pFontMap; + pWnd->SetTopVisibleIndex(m_pWidget->GetTopVisibleIndex()); - return cp; + return pWnd; } -CPWL_Wnd* CFFL_ListBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) -{ - CPWL_ListBox* pWnd = new CPWL_ListBox(); - pWnd->AttachFFLData(this); - pWnd->Create(cp); - - ASSERT(m_pApp != NULL); - CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); - pWnd->SetFillerNotify(pIFormFiller); - - for (int32_t i=0,sz=m_pWidget->CountOptions(); iAddString(m_pWidget->GetOptionLabel(i).c_str()); - - if (pWnd->HasFlag(PLBS_MULTIPLESEL)) - { - m_OriginSelections.clear(); - - FX_BOOL bSetCaret = FALSE; - for (int32_t i=0,sz=m_pWidget->CountOptions(); iIsOptionSelected(i)) - { - if (!bSetCaret) - { - pWnd->SetCaret(i); - bSetCaret = TRUE; - } - pWnd->Select(i); - m_OriginSelections.insert(i); - } - } - } - else - { - for (int i=0,sz=m_pWidget->CountOptions(); iIsOptionSelected(i)) - { - pWnd->Select(i); - break; - } - } - } - - pWnd->SetTopVisibleIndex(m_pWidget->GetTopVisibleIndex()); - - return pWnd; +FX_BOOL CFFL_ListBox::OnChar(CPDFSDK_Annot* pAnnot, + FX_UINT nChar, + FX_UINT nFlags) { + return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); } +FX_BOOL CFFL_ListBox::IsDataChanged(CPDFSDK_PageView* pPageView) { + CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE); + if (!pListBox) + return FALSE; -FX_BOOL CFFL_ListBox::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) -{ - return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); + 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); } -FX_BOOL CFFL_ListBox::IsDataChanged(CPDFSDK_PageView* pPageView) -{ - CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE); - if (!pListBox) - return FALSE; +void CFFL_ListBox::SaveData(CPDFSDK_PageView* pPageView) { + ASSERT(m_pWidget != NULL); - 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++; - } + if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) { + CFX_IntArray aOldSelect, aNewSelect; + + { + for (int i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) { + if (m_pWidget->IsOptionSelected(i)) { + aOldSelect.Add(i); } + } + } + + int32_t nNewTopIndex = pListBox->GetTopVisibleIndex(); - return nSelCount != m_OriginSelections.size(); + m_pWidget->ClearSelection(FALSE); + + if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) { + for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; i++) { + if (pListBox->IsItemSelected(i)) { + m_pWidget->SetOptionSelection(i, TRUE, FALSE); + aNewSelect.Add(i); + } + } + } else { + m_pWidget->SetOptionSelection(pListBox->GetCurSel(), TRUE, FALSE); + aNewSelect.Add(pListBox->GetCurSel()); } - return pListBox->GetCurSel() != m_pWidget->GetSelectedIndex(0); -} -void CFFL_ListBox::SaveData(CPDFSDK_PageView* pPageView) -{ - ASSERT(m_pWidget != NULL); - - if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) - { - CFX_IntArray aOldSelect, aNewSelect; - - { - for (int i=0,sz=m_pWidget->CountOptions(); iIsOptionSelected(i)) - { - aOldSelect.Add(i); - } - } - } - - - int32_t nNewTopIndex = pListBox->GetTopVisibleIndex(); - - m_pWidget->ClearSelection(FALSE); - - if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) - { - for (int32_t i=0,sz=pListBox->GetCount(); iIsItemSelected(i)) - { - m_pWidget->SetOptionSelection(i, TRUE, FALSE); - aNewSelect.Add(i); - } - } - } - else - { - m_pWidget->SetOptionSelection(pListBox->GetCurSel(), TRUE, FALSE); - aNewSelect.Add(pListBox->GetCurSel()); - } - - m_pWidget->SetTopVisibleIndex(nNewTopIndex); - m_pWidget->ResetFieldAppearance(TRUE); - m_pWidget->UpdateField(); - SetChangeMark(); - } + m_pWidget->SetTopVisibleIndex(nNewTopIndex); + m_pWidget->ResetFieldAppearance(TRUE); + m_pWidget->UpdateField(); + SetChangeMark(); + } } -void CFFL_ListBox::GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, - PDFSDK_FieldAction& fa) -{ - switch (type) - { - case CPDF_AAction::Validate: - if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) - { - fa.sValue = L""; - } - else - { - if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) - { - ASSERT(m_pWidget != NULL); - int32_t nCurSel = pListBox->GetCurSel(); - if (nCurSel >= 0) - fa.sValue = m_pWidget->GetOptionLabel(nCurSel); - } - } - break; - case CPDF_AAction::LoseFocus: - case CPDF_AAction::GetFocus: - if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) - { - fa.sValue = L""; - } - else - { - ASSERT(m_pWidget != NULL); - int32_t nCurSel = m_pWidget->GetSelectedIndex(0); - if (nCurSel >= 0) - fa.sValue = m_pWidget->GetOptionLabel(nCurSel); - } - break; - default: - break; - } +void CFFL_ListBox::GetActionData(CPDFSDK_PageView* pPageView, + CPDF_AAction::AActionType type, + PDFSDK_FieldAction& fa) { + switch (type) { + case CPDF_AAction::Validate: + if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) { + fa.sValue = L""; + } else { + if (CPWL_ListBox* pListBox = + (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) { + ASSERT(m_pWidget != NULL); + int32_t nCurSel = pListBox->GetCurSel(); + if (nCurSel >= 0) + fa.sValue = m_pWidget->GetOptionLabel(nCurSel); + } + } + break; + case CPDF_AAction::LoseFocus: + case CPDF_AAction::GetFocus: + if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) { + fa.sValue = L""; + } else { + ASSERT(m_pWidget != NULL); + int32_t nCurSel = m_pWidget->GetSelectedIndex(0); + if (nCurSel >= 0) + fa.sValue = m_pWidget->GetOptionLabel(nCurSel); + } + break; + default: + break; + } } +void CFFL_ListBox::SetActionData(CPDFSDK_PageView* pPageView, + CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& fa) {} -void CFFL_ListBox::SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, - const PDFSDK_FieldAction& fa) -{ -} +void CFFL_ListBox::SaveState(CPDFSDK_PageView* pPageView) { + ASSERT(pPageView != NULL); -void CFFL_ListBox::SaveState(CPDFSDK_PageView* pPageView) -{ - ASSERT(pPageView != NULL); - - if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) - { - for (int32_t i=0,sz=pListBox->GetCount(); iIsItemSelected(i)) - { - m_State.Add(i); - } - } - } + if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) { + for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; i++) { + if (pListBox->IsItemSelected(i)) { + m_State.Add(i); + } + } + } } -void CFFL_ListBox::RestoreState(CPDFSDK_PageView* pPageView) -{ - if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) - { - for (int i=0,sz=m_State.GetSize(); iSelect(m_State[i]); - } +void CFFL_ListBox::RestoreState(CPDFSDK_PageView* pPageView) { + if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) { + for (int i = 0, sz = m_State.GetSize(); i < sz; i++) + pListBox->Select(m_State[i]); + } } -CPWL_Wnd* CFFL_ListBox::ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue) -{ - if (bRestoreValue) - SaveState(pPageView); +CPWL_Wnd* CFFL_ListBox::ResetPDFWindow(CPDFSDK_PageView* pPageView, + FX_BOOL bRestoreValue) { + if (bRestoreValue) + SaveState(pPageView); - DestroyPDFWindow(pPageView); + DestroyPDFWindow(pPageView); - CPWL_Wnd* pRet = NULL; + CPWL_Wnd* pRet = NULL; - if (bRestoreValue) - { - RestoreState(pPageView); - pRet = GetPDFWindow(pPageView, FALSE); - } - else - pRet = GetPDFWindow(pPageView, TRUE); + if (bRestoreValue) { + RestoreState(pPageView); + pRet = GetPDFWindow(pPageView, FALSE); + } else + pRet = GetPDFWindow(pPageView, TRUE); - m_pWidget->UpdateField(); + m_pWidget->UpdateField(); - return pRet; + return pRet; } -void CFFL_ListBox::OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag) -{ - ASSERT(m_pWidget != NULL); - - int nFlags = m_pWidget->GetFieldFlags(); - - if (nFlags & FIELDFLAG_COMMITONSELCHANGE) - { - if (m_bValid) - { - CPDFSDK_PageView* pPageView = GetCurPageView(); - ASSERT(pPageView != NULL); - - if (CommitData(pPageView, nFlag)) - { - DestroyPDFWindow(pPageView); - m_bValid = FALSE; - } - } - } -} +void CFFL_ListBox::OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag) { + ASSERT(m_pWidget != NULL); + + int nFlags = m_pWidget->GetFieldFlags(); + if (nFlags & FIELDFLAG_COMMITONSELCHANGE) { + if (m_bValid) { + CPDFSDK_PageView* pPageView = GetCurPageView(); + ASSERT(pPageView != NULL); + + if (CommitData(pPageView, nFlag)) { + DestroyPDFWindow(pPageView); + m_bValid = FALSE; + } + } + } +} diff --git a/fpdfsdk/src/formfiller/FFL_Notify.cpp b/fpdfsdk/src/formfiller/FFL_Notify.cpp index 58a2202b61..e348f8e0b9 100644 --- a/fpdfsdk/src/formfiller/FFL_Notify.cpp +++ b/fpdfsdk/src/formfiller/FFL_Notify.cpp @@ -10,164 +10,168 @@ // #include "../../include/formfiller/FFL_ComboBox.h" // #include "../../include/formfiller/FFL_Module.h" -/* -------------------------------- CFFL_Notify ------------------------------ */ +/* -------------------------------- CFFL_Notify ------------------------------ + */ //#pragma warning(disable: 4800) -CFFL_Notify::CFFL_Notify(CFFL_FormFiller * pFormFiller) : - m_bDoActioning(FALSE), - m_nNotifyFlag(0) -{ - ASSERT(pFormFiller != NULL); +CFFL_Notify::CFFL_Notify(CFFL_FormFiller* pFormFiller) + : m_bDoActioning(FALSE), m_nNotifyFlag(0) { + ASSERT(pFormFiller != NULL); } -CFFL_Notify::~CFFL_Notify() -{ -} +CFFL_Notify::~CFFL_Notify() {} -void CFFL_Notify::BeforeNotify() -{ - m_nNotifyFlag ++; +void CFFL_Notify::BeforeNotify() { + m_nNotifyFlag++; } - -void CFFL_Notify::AfterNotify() -{ - m_nNotifyFlag --; +void CFFL_Notify::AfterNotify() { + m_nNotifyFlag--; } -FX_BOOL CFFL_Notify::OnMouseUp(FX_BOOL & bExit) -{ - BeforeNotify(); - FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::ButtonUp, bExit); - AfterNotify(); - return bRet; +FX_BOOL CFFL_Notify::OnMouseUp(FX_BOOL& bExit) { + BeforeNotify(); + FX_BOOL bRet = + FALSE; // DoAAction(CPDF_AAction::AActionType::ButtonUp, bExit); + AfterNotify(); + return bRet; } -FX_BOOL CFFL_Notify::OnMouseDown(FX_BOOL & bExit) -{ - BeforeNotify(); - FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::ButtonDown, bExit); - AfterNotify(); - return bRet; +FX_BOOL CFFL_Notify::OnMouseDown(FX_BOOL& bExit) { + BeforeNotify(); + FX_BOOL bRet = + FALSE; // DoAAction(CPDF_AAction::AActionType::ButtonDown, bExit); + AfterNotify(); + return bRet; } -FX_BOOL CFFL_Notify::OnMouseEnter(FX_BOOL & bExit) -{ - BeforeNotify(); - FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::CursorEnter, bExit); - AfterNotify(); - return bRet; +FX_BOOL CFFL_Notify::OnMouseEnter(FX_BOOL& bExit) { + BeforeNotify(); + FX_BOOL bRet = + FALSE; // DoAAction(CPDF_AAction::AActionType::CursorEnter, bExit); + AfterNotify(); + return bRet; } -FX_BOOL CFFL_Notify::OnMouseExit(FX_BOOL & bExit) -{ - BeforeNotify(); - FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::CursorExit, bExit); - AfterNotify(); - return bRet; +FX_BOOL CFFL_Notify::OnMouseExit(FX_BOOL& bExit) { + BeforeNotify(); + FX_BOOL bRet = + FALSE; // DoAAction(CPDF_AAction::AActionType::CursorExit, bExit); + AfterNotify(); + return bRet; } -FX_BOOL CFFL_Notify::OnSetFocus(FX_BOOL & bExit) -{ - BeforeNotify(); - FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::GetFocus, bExit); - AfterNotify(); - return bRet; +FX_BOOL CFFL_Notify::OnSetFocus(FX_BOOL& bExit) { + BeforeNotify(); + FX_BOOL bRet = + FALSE; // DoAAction(CPDF_AAction::AActionType::GetFocus, bExit); + AfterNotify(); + return bRet; } -FX_BOOL CFFL_Notify::OnKillFocus(FX_BOOL & bExit) -{ - BeforeNotify(); - FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::LoseFocus, bExit); - AfterNotify(); - return bRet; +FX_BOOL CFFL_Notify::OnKillFocus(FX_BOOL& bExit) { + BeforeNotify(); + FX_BOOL bRet = + FALSE; // DoAAction(CPDF_AAction::AActionType::LoseFocus, bExit); + AfterNotify(); + return bRet; } -FX_BOOL CFFL_Notify::OnCalculate() -{ - return TRUE; +FX_BOOL CFFL_Notify::OnCalculate() { + return TRUE; } -FX_BOOL CFFL_Notify::OnFormat(int iCommitKey) -{ - return TRUE; +FX_BOOL CFFL_Notify::OnFormat(int iCommitKey) { + return TRUE; } -FX_BOOL CFFL_Notify::OnKeyStroke(CPDF_FormField* pFormField, int nCommitKey, CFX_WideString& strValue, CFX_WideString& strChange, - const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL bModifier, - FX_BOOL bShift, FX_BOOL bWillCommit, FX_BOOL bFieldFull, - int& nSelStart, int& nSelEnd, FX_BOOL& bRC) -{ - return TRUE; +FX_BOOL CFFL_Notify::OnKeyStroke(CPDF_FormField* pFormField, + int nCommitKey, + CFX_WideString& strValue, + CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + FX_BOOL bWillCommit, + FX_BOOL bFieldFull, + int& nSelStart, + int& nSelEnd, + FX_BOOL& bRC) { + return TRUE; } -FX_BOOL CFFL_Notify::OnValidate(CPDF_FormField* pFormField, CFX_WideString& strValue, CFX_WideString & strChange, - const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL bModifier, - FX_BOOL bShift, FX_BOOL & bRC) -{ - return TRUE; +FX_BOOL CFFL_Notify::OnValidate(CPDF_FormField* pFormField, + CFX_WideString& strValue, + CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + FX_BOOL& bRC) { + return TRUE; } -FX_BOOL CFFL_Notify::DoAAction(CPDF_AAction::AActionType eAAT, FX_BOOL & bExit) -{ - if (m_bDoActioning) - return FALSE; +FX_BOOL CFFL_Notify::DoAAction(CPDF_AAction::AActionType eAAT, FX_BOOL& bExit) { + if (m_bDoActioning) + return FALSE; - CPDF_Action action; - if (!FindAAction(eAAT, action)) - return FALSE; + CPDF_Action action; + if (!FindAAction(eAAT, action)) + return FALSE; - m_bDoActioning = TRUE; - ExecuteActionTree(eAAT,action,bExit); - m_bDoActioning = FALSE; - return TRUE; + m_bDoActioning = TRUE; + ExecuteActionTree(eAAT, action, bExit); + m_bDoActioning = FALSE; + return TRUE; } -FX_BOOL CFFL_Notify::ExecuteActionTree(CPDF_AAction::AActionType eAAT,CPDF_Action & action, FX_BOOL& bExit) -{ - if (!ExecuteAction(eAAT,action,bExit)) return FALSE; - if (bExit) return TRUE; +FX_BOOL CFFL_Notify::ExecuteActionTree(CPDF_AAction::AActionType eAAT, + CPDF_Action& action, + FX_BOOL& bExit) { + if (!ExecuteAction(eAAT, action, bExit)) + return FALSE; + if (bExit) + return TRUE; - for (int32_t i=0,sz=action.GetSubActionsCount(); iCreate(cp); +CPWL_Wnd* CFFL_PushButton::NewPDFWindow(const PWL_CREATEPARAM& cp, + CPDFSDK_PageView* pPageView) { + CPWL_PushButton* pWnd = new CPWL_PushButton(); + pWnd->Create(cp); - return pWnd; + return pWnd; } - -FX_BOOL CFFL_PushButton::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) -{ - return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); +FX_BOOL CFFL_PushButton::OnChar(CPDFSDK_Annot* pAnnot, + FX_UINT nChar, + FX_UINT nFlags) { + return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); } -void CFFL_PushButton::OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, - CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_DWORD dwFlags) -{ - CFFL_Button::OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); +void CFFL_PushButton::OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags) { + CFFL_Button::OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); } - - diff --git a/fpdfsdk/src/formfiller/FFL_RadioButton.cpp b/fpdfsdk/src/formfiller/FFL_RadioButton.cpp index 1f73e8ccaa..7c4f9a9e49 100644 --- a/fpdfsdk/src/formfiller/FFL_RadioButton.cpp +++ b/fpdfsdk/src/formfiller/FFL_RadioButton.cpp @@ -9,129 +9,124 @@ #include "../../include/formfiller/FFL_RadioButton.h" //#include "../include/FFL_Undo.h" -/* ------------------------------- CFFL_RadioButton ------------------------------- */ +/* ------------------------------- CFFL_RadioButton + * ------------------------------- */ -CFFL_RadioButton::CFFL_RadioButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget) : - CFFL_Button(pApp, pWidget) -{ -} +CFFL_RadioButton::CFFL_RadioButton(CPDFDoc_Environment* pApp, + CPDFSDK_Annot* pWidget) + : CFFL_Button(pApp, pWidget) {} -CFFL_RadioButton::~CFFL_RadioButton() -{ -} +CFFL_RadioButton::~CFFL_RadioButton() {} -CPWL_Wnd* CFFL_RadioButton::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) -{ - CPWL_RadioButton* pWnd = new CPWL_RadioButton(); - pWnd->Create(cp); +CPWL_Wnd* CFFL_RadioButton::NewPDFWindow(const PWL_CREATEPARAM& cp, + CPDFSDK_PageView* pPageView) { + CPWL_RadioButton* pWnd = new CPWL_RadioButton(); + pWnd->Create(cp); - ASSERT(m_pWidget != NULL); - pWnd->SetCheck(m_pWidget->IsChecked()); + ASSERT(m_pWidget != NULL); + pWnd->SetCheck(m_pWidget->IsChecked()); - return pWnd; + return pWnd; } -FX_BOOL CFFL_RadioButton::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags) -{ - switch (nKeyCode) - { - case FWL_VKEY_Return: - case FWL_VKEY_Space: - return TRUE; - default: - return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags); - } +FX_BOOL CFFL_RadioButton::OnKeyDown(CPDFSDK_Annot* pAnnot, + FX_UINT nKeyCode, + FX_UINT nFlags) { + switch (nKeyCode) { + case FWL_VKEY_Return: + case FWL_VKEY_Space: + return TRUE; + default: + return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags); + } } -FX_BOOL CFFL_RadioButton::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) -{ - switch (nChar) - { - case FWL_VKEY_Return: - case FWL_VKEY_Space: - { - CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); - ASSERT(pIFormFiller != NULL); - - CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); - ASSERT(pPageView != NULL); - - FX_BOOL bReset = FALSE; - FX_BOOL bExit = FALSE; - - pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit,nFlags); - - if (bReset) return TRUE; - if (bExit) return TRUE; - - CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); - - if (CPWL_RadioButton * pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE)) - pWnd->SetCheck(TRUE); - CommitData(pPageView,nFlags); - return TRUE; - } - default: - return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); - } +FX_BOOL CFFL_RadioButton::OnChar(CPDFSDK_Annot* pAnnot, + FX_UINT nChar, + FX_UINT nFlags) { + switch (nChar) { + case FWL_VKEY_Return: + case FWL_VKEY_Space: { + CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); + ASSERT(pIFormFiller != NULL); + + CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); + ASSERT(pPageView != NULL); + + FX_BOOL bReset = FALSE; + FX_BOOL bExit = FALSE; + + pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit, nFlags); + + if (bReset) + return TRUE; + if (bExit) + return TRUE; + + CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); + + if (CPWL_RadioButton* pWnd = + (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE)) + pWnd->SetCheck(TRUE); + CommitData(pPageView, nFlags); + return TRUE; + } + default: + return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); + } } -FX_BOOL CFFL_RadioButton::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) -{ - CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point); +FX_BOOL CFFL_RadioButton::OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_UINT nFlags, + const CPDF_Point& point) { + CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point); - if (IsValid()) - { - if (CPWL_RadioButton * pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE)) - pWnd->SetCheck(TRUE); + if (IsValid()) { + if (CPWL_RadioButton* pWnd = + (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE)) + pWnd->SetCheck(TRUE); - if (!CommitData(pPageView,nFlags)) return FALSE; - } + if (!CommitData(pPageView, nFlags)) + return FALSE; + } - return TRUE; + return TRUE; } -FX_BOOL CFFL_RadioButton::IsDataChanged(CPDFSDK_PageView* pPageView) -{ - ASSERT(m_pWidget != NULL); +FX_BOOL CFFL_RadioButton::IsDataChanged(CPDFSDK_PageView* pPageView) { + ASSERT(m_pWidget != NULL); - if (CPWL_RadioButton* pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE)) - { - return pWnd->IsChecked() != m_pWidget->IsChecked(); - } + if (CPWL_RadioButton* pWnd = + (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE)) { + return pWnd->IsChecked() != m_pWidget->IsChecked(); + } - return FALSE; + return FALSE; } -void CFFL_RadioButton::SaveData(CPDFSDK_PageView* pPageView) -{ - ASSERT(m_pWidget != NULL); - - if (CPWL_RadioButton* pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE)) - { - - FX_BOOL bNewChecked = pWnd->IsChecked(); - - if (bNewChecked) - { - CPDF_FormField* pField = m_pWidget->GetFormField(); - ASSERT(pField != NULL); - - for (int32_t i=0,sz=pField->CountControls(); iGetControl(i)) - { - if (pCtrl->IsChecked()) - { - break; - } - } - } - } - - m_pWidget->SetCheck(bNewChecked, FALSE); - m_pWidget->UpdateField(); - SetChangeMark(); - } +void CFFL_RadioButton::SaveData(CPDFSDK_PageView* pPageView) { + ASSERT(m_pWidget != NULL); + + if (CPWL_RadioButton* pWnd = + (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE)) { + FX_BOOL bNewChecked = pWnd->IsChecked(); + + if (bNewChecked) { + CPDF_FormField* pField = m_pWidget->GetFormField(); + ASSERT(pField != NULL); + + for (int32_t i = 0, sz = pField->CountControls(); i < sz; i++) { + if (CPDF_FormControl* pCtrl = pField->GetControl(i)) { + if (pCtrl->IsChecked()) { + break; + } + } + } + } + + m_pWidget->SetCheck(bNewChecked, FALSE); + m_pWidget->UpdateField(); + SetChangeMark(); + } } - diff --git a/fpdfsdk/src/formfiller/FFL_TextField.cpp b/fpdfsdk/src/formfiller/FFL_TextField.cpp index dbcf4e5739..38d74f065c 100644 --- a/fpdfsdk/src/formfiller/FFL_TextField.cpp +++ b/fpdfsdk/src/formfiller/FFL_TextField.cpp @@ -7,380 +7,317 @@ #include "../../include/formfiller/FFL_TextField.h" #include "../../include/formfiller/FFL_CBA_Fontmap.h" -/* ------------------------------- CFFL_TextField ------------------------------- */ +/* ------------------------------- CFFL_TextField + * ------------------------------- */ -CFFL_TextField::CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot) : - CFFL_FormFiller(pApp, pAnnot), - m_pFontMap(NULL)//, - //m_pSpellCheck(NULL) +CFFL_TextField::CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot) + : CFFL_FormFiller(pApp, pAnnot), + m_pFontMap(NULL) //, +// m_pSpellCheck(NULL) { - m_State.nStart = m_State.nEnd = 0; + m_State.nStart = m_State.nEnd = 0; } -CFFL_TextField::~CFFL_TextField() -{ - delete m_pFontMap; +CFFL_TextField::~CFFL_TextField() { + delete m_pFontMap; } -PWL_CREATEPARAM CFFL_TextField::GetCreateParam() -{ - PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam(); - - ASSERT(m_pWidget != NULL); - int nFlags = m_pWidget->GetFieldFlags(); +PWL_CREATEPARAM CFFL_TextField::GetCreateParam() { + PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam(); + ASSERT(m_pWidget != NULL); + int nFlags = m_pWidget->GetFieldFlags(); - if (nFlags & FIELDFLAG_PASSWORD) - { - cp.dwFlags |= PES_PASSWORD; - } + if (nFlags & FIELDFLAG_PASSWORD) { + cp.dwFlags |= PES_PASSWORD; + } - if (!(nFlags & FIELDFLAG_DONOTSPELLCHECK)) - { - } + if (!(nFlags & FIELDFLAG_DONOTSPELLCHECK)) { + } - if (nFlags & FIELDFLAG_MULTILINE) - { - cp.dwFlags |= PES_MULTILINE | PES_AUTORETURN | PES_TOP; + if (nFlags & FIELDFLAG_MULTILINE) { + cp.dwFlags |= PES_MULTILINE | PES_AUTORETURN | PES_TOP; - if (!(nFlags & FIELDFLAG_DONOTSCROLL)) - { - cp.dwFlags |= PWS_VSCROLL | PES_AUTOSCROLL; - } + if (!(nFlags & FIELDFLAG_DONOTSCROLL)) { + cp.dwFlags |= PWS_VSCROLL | PES_AUTOSCROLL; } - else - { - cp.dwFlags |= PES_CENTER; + } else { + cp.dwFlags |= PES_CENTER; - if (!(nFlags & FIELDFLAG_DONOTSCROLL)) - { - cp.dwFlags |= PES_AUTOSCROLL; - } + if (!(nFlags & FIELDFLAG_DONOTSCROLL)) { + cp.dwFlags |= PES_AUTOSCROLL; } + } - if (nFlags & FIELDFLAG_COMB) - { - cp.dwFlags |= PES_CHARARRAY; - } + if (nFlags & FIELDFLAG_COMB) { + cp.dwFlags |= PES_CHARARRAY; + } - if (nFlags & FIELDFLAG_RICHTEXT) - { - cp.dwFlags |= PES_RICH; - } + if (nFlags & FIELDFLAG_RICHTEXT) { + cp.dwFlags |= PES_RICH; + } - cp.dwFlags |= PES_UNDO; + cp.dwFlags |= PES_UNDO; - switch (m_pWidget->GetAlignment()) - { + switch (m_pWidget->GetAlignment()) { default: case BF_ALIGN_LEFT: - cp.dwFlags |= PES_LEFT; - break; + cp.dwFlags |= PES_LEFT; + break; case BF_ALIGN_MIDDLE: - cp.dwFlags |= PES_MIDDLE; - break; + cp.dwFlags |= PES_MIDDLE; + break; case BF_ALIGN_RIGHT: - cp.dwFlags |= PES_RIGHT; - break; - } + cp.dwFlags |= PES_RIGHT; + break; + } + + if (!m_pFontMap) { + m_pFontMap = new CBA_FontMap(m_pWidget, m_pApp->GetSysHandler()); + m_pFontMap->Initial(); + } + cp.pFontMap = m_pFontMap; + cp.pFocusHandler = this; + + return cp; +} - if (!m_pFontMap) - { - m_pFontMap = new CBA_FontMap(m_pWidget, m_pApp->GetSysHandler()); - m_pFontMap->Initial(); +CPWL_Wnd* CFFL_TextField::NewPDFWindow(const PWL_CREATEPARAM& cp, + CPDFSDK_PageView* pPageView) { + CPWL_Edit* pWnd = new CPWL_Edit(); + pWnd->AttachFFLData(this); + pWnd->Create(cp); + + ASSERT(m_pApp != NULL); + CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); + pWnd->SetFillerNotify(pIFormFiller); + + ASSERT(m_pWidget != NULL); + int32_t nMaxLen = m_pWidget->GetMaxLen(); + CFX_WideString swValue = m_pWidget->GetValue(); + + if (nMaxLen > 0) { + if (pWnd->HasFlag(PES_CHARARRAY)) { + pWnd->SetCharArray(nMaxLen); + pWnd->SetAlignFormatV(PEAV_CENTER); + } else { + pWnd->SetLimitChar(nMaxLen); } - cp.pFontMap = m_pFontMap; - cp.pFocusHandler = this; + } - return cp; + pWnd->SetText(swValue.c_str()); + return pWnd; } -CPWL_Wnd* CFFL_TextField::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) -{ - CPWL_Edit * pWnd = new CPWL_Edit(); - pWnd->AttachFFLData(this); - pWnd->Create(cp); - - - - ASSERT(m_pApp != NULL); - CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); - pWnd->SetFillerNotify(pIFormFiller); - - ASSERT(m_pWidget != NULL); - int32_t nMaxLen = m_pWidget->GetMaxLen(); - CFX_WideString swValue = m_pWidget->GetValue(); - - if (nMaxLen > 0) - { - if (pWnd->HasFlag(PES_CHARARRAY)) - { - pWnd->SetCharArray(nMaxLen); - pWnd->SetAlignFormatV(PEAV_CENTER); - } - else - { - pWnd->SetLimitChar(nMaxLen); +FX_BOOL CFFL_TextField::OnChar(CPDFSDK_Annot* pAnnot, + FX_UINT nChar, + FX_UINT nFlags) { + switch (nChar) { + case FWL_VKEY_Return: + if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_MULTILINE)) { + CPDFSDK_PageView* pPageView = GetCurPageView(); + ASSERT(pPageView != NULL); + m_bValid = !m_bValid; + CPDF_Rect rcAnnot = pAnnot->GetRect(); + m_pApp->FFI_Invalidate(pAnnot->GetPDFXFAPage(), rcAnnot.left, + rcAnnot.top, rcAnnot.right, rcAnnot.bottom); + + if (m_bValid) { + if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) + pWnd->SetFocus(); + } else { + if (CommitData(pPageView, nFlags)) { + DestroyPDFWindow(pPageView); + return TRUE; + } else { + return FALSE; + } } + } + break; + case FWL_VKEY_Escape: { + CPDFSDK_PageView* pPageView = GetCurPageView(); + ASSERT(pPageView != NULL); + EscapeFiller(pPageView, TRUE); + return TRUE; } + } - pWnd->SetText(swValue.c_str()); - return pWnd; -} - - -FX_BOOL CFFL_TextField::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) -{ - switch (nChar) - { - case FWL_VKEY_Return: - if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_MULTILINE)) - { - CPDFSDK_PageView* pPageView = GetCurPageView(); - ASSERT(pPageView != NULL); - m_bValid = !m_bValid; - CPDF_Rect rcAnnot = pAnnot->GetRect(); - m_pApp->FFI_Invalidate(pAnnot->GetPDFXFAPage(), rcAnnot.left, rcAnnot.top, rcAnnot.right, rcAnnot.bottom); - - if (m_bValid) - { - if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) - pWnd->SetFocus(); - } - else - { - if (CommitData(pPageView, nFlags)) - { - DestroyPDFWindow(pPageView); - return TRUE; - } - else - { - return FALSE; - } - } - } - break; - case FWL_VKEY_Escape: - { - CPDFSDK_PageView* pPageView = GetCurPageView(); - ASSERT(pPageView != NULL); - EscapeFiller(pPageView,TRUE); - return TRUE; - } - } - - return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); + return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); } -FX_BOOL CFFL_TextField::IsDataChanged(CPDFSDK_PageView* pPageView) -{ - ASSERT(m_pWidget != NULL); +FX_BOOL CFFL_TextField::IsDataChanged(CPDFSDK_PageView* pPageView) { + ASSERT(m_pWidget != NULL); - if (CPWL_Edit * pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) - return pEdit->GetText() != m_pWidget->GetValue(); + if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) + return pEdit->GetText() != m_pWidget->GetValue(); - return FALSE; + return FALSE; } -void CFFL_TextField::SaveData(CPDFSDK_PageView* pPageView) -{ - ASSERT(m_pWidget != NULL); +void CFFL_TextField::SaveData(CPDFSDK_PageView* pPageView) { + ASSERT(m_pWidget != NULL); - if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) - { - CFX_WideString sOldValue = m_pWidget->GetValue(); - CFX_WideString sNewValue = pWnd->GetText(); + if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { + CFX_WideString sOldValue = m_pWidget->GetValue(); + CFX_WideString sNewValue = pWnd->GetText(); - m_pWidget->SetValue(sNewValue, FALSE); - m_pWidget->ResetFieldAppearance(TRUE); - m_pWidget->UpdateField(); - SetChangeMark(); - } + m_pWidget->SetValue(sNewValue, FALSE); + m_pWidget->ResetFieldAppearance(TRUE); + m_pWidget->UpdateField(); + SetChangeMark(); + } } -void CFFL_TextField::GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, - PDFSDK_FieldAction& fa) -{ - switch (type) - { +void CFFL_TextField::GetActionData(CPDFSDK_PageView* pPageView, + CPDF_AAction::AActionType type, + PDFSDK_FieldAction& fa) { + switch (type) { case CPDF_AAction::KeyStroke: - if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) - { - fa.bFieldFull = pWnd->IsTextFull(); + if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { + fa.bFieldFull = pWnd->IsTextFull(); - fa.sValue = pWnd->GetText(); + fa.sValue = pWnd->GetText(); - if (fa.bFieldFull) - { - fa.sChange = L""; - fa.sChangeEx = L""; - } + if (fa.bFieldFull) { + fa.sChange = L""; + fa.sChangeEx = L""; } - break; + } + break; case CPDF_AAction::Validate: - if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) - { - fa.sValue = pWnd->GetText(); - } - break; + if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { + fa.sValue = pWnd->GetText(); + } + break; case CPDF_AAction::LoseFocus: case CPDF_AAction::GetFocus: - ASSERT(m_pWidget != NULL); - fa.sValue = m_pWidget->GetValue(); - break; + ASSERT(m_pWidget != NULL); + fa.sValue = m_pWidget->GetValue(); + break; default: - break; - } + break; + } } -void CFFL_TextField::SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, - const PDFSDK_FieldAction& fa) -{ - switch (type) - { +void CFFL_TextField::SetActionData(CPDFSDK_PageView* pPageView, + CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& fa) { + switch (type) { case CPDF_AAction::KeyStroke: - if (CPWL_Edit * pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) - { - pEdit->SetFocus(); - pEdit->SetSel(fa.nSelStart, fa.nSelEnd); - pEdit->ReplaceSel(fa.sChange.c_str()); - } - break; + if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { + pEdit->SetFocus(); + pEdit->SetSel(fa.nSelStart, fa.nSelEnd); + pEdit->ReplaceSel(fa.sChange.c_str()); + } + break; default: - break; - } + break; + } } - -FX_BOOL CFFL_TextField::IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld, - const PDFSDK_FieldAction& faNew) -{ - switch (type) - { +FX_BOOL CFFL_TextField::IsActionDataChanged(CPDF_AAction::AActionType type, + const PDFSDK_FieldAction& faOld, + const PDFSDK_FieldAction& faNew) { + switch (type) { case CPDF_AAction::KeyStroke: - return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) || faOld.nSelStart != faNew.nSelStart || - faOld.sChange != faNew.sChange; + return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) || + faOld.nSelStart != faNew.nSelStart || + faOld.sChange != faNew.sChange; default: - break; - } + break; + } - return FALSE; + return FALSE; } -void CFFL_TextField::SaveState(CPDFSDK_PageView* pPageView) -{ - ASSERT(pPageView != NULL); +void CFFL_TextField::SaveState(CPDFSDK_PageView* pPageView) { + ASSERT(pPageView != NULL); - if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) - { - pWnd->GetSel(m_State.nStart, m_State.nEnd); - m_State.sValue = pWnd->GetText(); - } + if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { + pWnd->GetSel(m_State.nStart, m_State.nEnd); + m_State.sValue = pWnd->GetText(); + } } -void CFFL_TextField::RestoreState(CPDFSDK_PageView* pPageView) -{ - ASSERT(pPageView != NULL); +void CFFL_TextField::RestoreState(CPDFSDK_PageView* pPageView) { + ASSERT(pPageView != NULL); - if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, TRUE)) - { - pWnd->SetText(m_State.sValue.c_str()); - pWnd->SetSel(m_State.nStart, m_State.nEnd); - } + if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, TRUE)) { + pWnd->SetText(m_State.sValue.c_str()); + pWnd->SetSel(m_State.nStart, m_State.nEnd); + } } -CPWL_Wnd* CFFL_TextField::ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue) -{ - if (bRestoreValue) - SaveState(pPageView); +CPWL_Wnd* CFFL_TextField::ResetPDFWindow(CPDFSDK_PageView* pPageView, + FX_BOOL bRestoreValue) { + if (bRestoreValue) + SaveState(pPageView); - DestroyPDFWindow(pPageView); + DestroyPDFWindow(pPageView); - CPWL_Wnd* pRet = NULL; + CPWL_Wnd* pRet = NULL; - if (bRestoreValue) - { - RestoreState(pPageView); - pRet = GetPDFWindow(pPageView, FALSE); - } - else - pRet = GetPDFWindow(pPageView, TRUE); + if (bRestoreValue) { + RestoreState(pPageView); + pRet = GetPDFWindow(pPageView, FALSE); + } else + pRet = GetPDFWindow(pPageView, TRUE); - m_pWidget->UpdateField(); + m_pWidget->UpdateField(); - return pRet; + return pRet; } -FX_BOOL CFFL_TextField::IsFieldFull(CPDFSDK_PageView* pPageView) -{ - if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) - { - return pWnd->IsTextFull(); - } +FX_BOOL CFFL_TextField::IsFieldFull(CPDFSDK_PageView* pPageView) { + if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) { + return pWnd->IsTextFull(); + } - return FALSE; + return FALSE; } -void CFFL_TextField::OnSetFocus(CPWL_Wnd* pWnd) -{ - ASSERT(m_pApp != NULL); +void CFFL_TextField::OnSetFocus(CPWL_Wnd* pWnd) { + ASSERT(m_pApp != NULL); - ASSERT(pWnd != NULL); + ASSERT(pWnd != NULL); - if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) - { - CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; - pEdit->SetCharSet(134); - pEdit->SetCodePage(936); + if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) { + CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; + pEdit->SetCharSet(134); + pEdit->SetCodePage(936); - pEdit->SetReadyToInput(); - CFX_WideString wsText = pEdit->GetText(); - int nCharacters = wsText.GetLength(); - CFX_ByteString bsUTFText = wsText.UTF16LE_Encode(); - unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str(); - m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer, nCharacters, TRUE); + pEdit->SetReadyToInput(); + CFX_WideString wsText = pEdit->GetText(); + int nCharacters = wsText.GetLength(); + CFX_ByteString bsUTFText = wsText.UTF16LE_Encode(); + unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str(); + m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer, + nCharacters, TRUE); - pEdit->SetEditNotify(this); - //pUndo->BeginEdit(pDocument); - } + pEdit->SetEditNotify(this); + // pUndo->BeginEdit(pDocument); + } } -void CFFL_TextField::OnKillFocus(CPWL_Wnd* pWnd) -{ +void CFFL_TextField::OnKillFocus(CPWL_Wnd* pWnd) {} +FX_BOOL CFFL_TextField::CanCopy(CPDFSDK_Document* pDocument) { + return FALSE; } -FX_BOOL CFFL_TextField::CanCopy(CPDFSDK_Document* pDocument) -{ - return FALSE; +FX_BOOL CFFL_TextField::CanCut(CPDFSDK_Document* pDocument) { + return FALSE; } -FX_BOOL CFFL_TextField::CanCut(CPDFSDK_Document* pDocument) -{ - return FALSE; -} - -FX_BOOL CFFL_TextField::CanPaste(CPDFSDK_Document* pDocument) -{ - return FALSE; +FX_BOOL CFFL_TextField::CanPaste(CPDFSDK_Document* pDocument) { + return FALSE; } -void CFFL_TextField::DoCopy(CPDFSDK_Document* pDocument) -{ +void CFFL_TextField::DoCopy(CPDFSDK_Document* pDocument) {} -} +void CFFL_TextField::DoCut(CPDFSDK_Document* pDocument) {} -void CFFL_TextField::DoCut(CPDFSDK_Document* pDocument) -{ -} - -void CFFL_TextField::DoPaste(CPDFSDK_Document* pDocument) -{ - -} - -void CFFL_TextField::OnAddUndo(CPWL_Edit* pEdit) -{ -} +void CFFL_TextField::DoPaste(CPDFSDK_Document* pDocument) {} +void CFFL_TextField::OnAddUndo(CPWL_Edit* pEdit) {} diff --git a/fpdfsdk/src/formfiller/FFL_Utils.cpp b/fpdfsdk/src/formfiller/FFL_Utils.cpp index 8d2d76d73c..d2ce56ac52 100644 --- a/fpdfsdk/src/formfiller/FFL_Utils.cpp +++ b/fpdfsdk/src/formfiller/FFL_Utils.cpp @@ -9,106 +9,91 @@ #include "../../include/formfiller/FormFiller.h" #include "../../include/formfiller/FFL_Utils.h" -CPDF_Rect CFFL_Utils::MaxRect(const CPDF_Rect & rect1,const CPDF_Rect & rect2) -{ - CPDF_Rect rcRet; +CPDF_Rect CFFL_Utils::MaxRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2) { + CPDF_Rect rcRet; - rcRet.left = std::min(rect1.left, rect2.left); - rcRet.bottom = std::min(rect1.bottom, rect2.bottom); - rcRet.right = std::max(rect1.right, rect2.right); - rcRet.top = std::max(rect1.top, rect2.top); + rcRet.left = std::min(rect1.left, rect2.left); + rcRet.bottom = std::min(rect1.bottom, rect2.bottom); + rcRet.right = std::max(rect1.right, rect2.right); + rcRet.top = std::max(rect1.top, rect2.top); - return rcRet; + return rcRet; } -CPDF_Rect CFFL_Utils::InflateRect(const CPDF_Rect & crRect,const FX_FLOAT & fSize) -{ - CPDF_Rect crNew(crRect.left - fSize, - crRect.bottom - fSize, - crRect.right + fSize, - crRect.top + fSize); - crNew.Normalize(); - return crNew; +CPDF_Rect CFFL_Utils::InflateRect(const CPDF_Rect& crRect, + const FX_FLOAT& fSize) { + CPDF_Rect crNew(crRect.left - fSize, crRect.bottom - fSize, + crRect.right + fSize, crRect.top + fSize); + crNew.Normalize(); + return crNew; } -CPDF_Rect CFFL_Utils::DeflateRect(const CPDF_Rect & crRect,const FX_FLOAT & fSize) -{ - CPDF_Rect crNew(crRect.left + fSize, - crRect.bottom + fSize, - crRect.right - fSize, - crRect.top - fSize); - crNew.Normalize(); - return crNew; +CPDF_Rect CFFL_Utils::DeflateRect(const CPDF_Rect& crRect, + const FX_FLOAT& fSize) { + CPDF_Rect crNew(crRect.left + fSize, crRect.bottom + fSize, + crRect.right - fSize, crRect.top - fSize); + crNew.Normalize(); + return crNew; } -FX_BOOL CFFL_Utils::TraceObject(CPDF_Object* pObj) -{ - if (!pObj) return FALSE; - - FX_DWORD dwObjNum = pObj->GetObjNum(); - switch (pObj->GetType()) - { - case PDFOBJ_ARRAY: - { - CPDF_Array* pArray = (CPDF_Array*)pObj; - for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) - { - CPDF_Object* pElement = pArray->GetElementValue(i); - TraceObject(pElement); - } - } - break; - - case PDFOBJ_DICTIONARY: - { - CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj; - - FX_POSITION fPos = pDict->GetStartPos(); - CFX_ByteString csKey; - do - { - CPDF_Object* pElement = pDict->GetNextElement(fPos, csKey); - //TRACE(csKey + "\n"); - if (!pElement) break; - TraceObject(pElement); - }while (TRUE); - } - break; - - case PDFOBJ_STREAM: - { - CPDF_Stream* pStream = (CPDF_Stream*)pObj; - CPDF_Dictionary* pDict = pStream->GetDict(); - TraceObject(pDict); - } - break; - - case PDFOBJ_REFERENCE: - { - CPDF_Object* pDirectObj = pObj->GetDirect(); - TraceObject(pDirectObj); - } - break; - - case PDFOBJ_BOOLEAN: - break; - case PDFOBJ_NUMBER: - //TRACE("%d\n",(int32_t)pObj); - break; - case PDFOBJ_STRING: - //TRACE(((CPDF_String*)pObj)->GetString() + "\n"); - break; - case PDFOBJ_NAME: - //TRACE(((CPDF_Name*)pObj)->GetString() + "\n"); - break; - case PDFOBJ_NULL: -// case PDFOBJ_KEYWORD: -// case PDFOBJ_EOF: - default: - break; - } - if (dwObjNum == 0) return FALSE; - - return TRUE; +FX_BOOL CFFL_Utils::TraceObject(CPDF_Object* pObj) { + if (!pObj) + return FALSE; + + FX_DWORD dwObjNum = pObj->GetObjNum(); + switch (pObj->GetType()) { + case PDFOBJ_ARRAY: { + CPDF_Array* pArray = (CPDF_Array*)pObj; + for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { + CPDF_Object* pElement = pArray->GetElementValue(i); + TraceObject(pElement); + } + } break; + + case PDFOBJ_DICTIONARY: { + CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj; + + FX_POSITION fPos = pDict->GetStartPos(); + CFX_ByteString csKey; + do { + CPDF_Object* pElement = pDict->GetNextElement(fPos, csKey); + // TRACE(csKey + "\n"); + if (!pElement) + break; + TraceObject(pElement); + } while (TRUE); + } break; + + case PDFOBJ_STREAM: { + CPDF_Stream* pStream = (CPDF_Stream*)pObj; + CPDF_Dictionary* pDict = pStream->GetDict(); + TraceObject(pDict); + } break; + + case PDFOBJ_REFERENCE: { + CPDF_Object* pDirectObj = pObj->GetDirect(); + TraceObject(pDirectObj); + } break; + + case PDFOBJ_BOOLEAN: + break; + case PDFOBJ_NUMBER: + // TRACE("%d\n",(int32_t)pObj); + break; + case PDFOBJ_STRING: + // TRACE(((CPDF_String*)pObj)->GetString() + "\n"); + break; + case PDFOBJ_NAME: + // TRACE(((CPDF_Name*)pObj)->GetString() + "\n"); + break; + case PDFOBJ_NULL: + // case PDFOBJ_KEYWORD: + // case PDFOBJ_EOF: + default: + break; + } + if (dwObjNum == 0) + return FALSE; + + return TRUE; } - diff --git a/fpdfsdk/src/fpdf_dataavail.cpp b/fpdfsdk/src/fpdf_dataavail.cpp index 2121f2678a..0d5602fcf0 100644 --- a/fpdfsdk/src/fpdf_dataavail.cpp +++ b/fpdfsdk/src/fpdf_dataavail.cpp @@ -11,160 +11,138 @@ #include "../include/fpdfxfa/fpdfxfa_app.h" extern void ProcessParseError(FX_DWORD err_code); -class CFPDF_FileAvailWrap : public IFX_FileAvail -{ -public: - CFPDF_FileAvailWrap() - { - m_pfileAvail = NULL; - } - - void Set(FX_FILEAVAIL* pfileAvail) - { - m_pfileAvail = pfileAvail; - } - - virtual FX_BOOL IsDataAvail( FX_FILESIZE offset, FX_DWORD size) - { - return m_pfileAvail->IsDataAvail(m_pfileAvail, offset, size); - } - -private: - FX_FILEAVAIL* m_pfileAvail; +class CFPDF_FileAvailWrap : public IFX_FileAvail { + public: + CFPDF_FileAvailWrap() { m_pfileAvail = NULL; } + + void Set(FX_FILEAVAIL* pfileAvail) { m_pfileAvail = pfileAvail; } + + virtual FX_BOOL IsDataAvail(FX_FILESIZE offset, FX_DWORD size) { + return m_pfileAvail->IsDataAvail(m_pfileAvail, offset, size); + } + + private: + FX_FILEAVAIL* m_pfileAvail; }; -class CFPDF_FileAccessWrap : public IFX_FileRead -{ -public: - CFPDF_FileAccessWrap() - { - m_pFileAccess = NULL; - } - - void Set(FPDF_FILEACCESS* pFile) - { - m_pFileAccess = pFile; - } - - virtual FX_FILESIZE GetSize() - { - return m_pFileAccess->m_FileLen; - } - - virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) - { - return m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset, (uint8_t*)buffer, size); - } - - virtual void Release() - { - } - -private: - FPDF_FILEACCESS* m_pFileAccess; +class CFPDF_FileAccessWrap : public IFX_FileRead { + public: + CFPDF_FileAccessWrap() { m_pFileAccess = NULL; } + + void Set(FPDF_FILEACCESS* pFile) { m_pFileAccess = pFile; } + + virtual FX_FILESIZE GetSize() { return m_pFileAccess->m_FileLen; } + + virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) { + return m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset, + (uint8_t*)buffer, size); + } + + virtual void Release() {} + + private: + FPDF_FILEACCESS* m_pFileAccess; }; -class CFPDF_DownloadHintsWrap : public IFX_DownloadHints -{ -public: - CFPDF_DownloadHintsWrap(FX_DOWNLOADHINTS* pDownloadHints) - { - m_pDownloadHints = pDownloadHints; - } -public: - virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) - { - m_pDownloadHints->AddSegment(m_pDownloadHints, offset, size); - } -private: - FX_DOWNLOADHINTS* m_pDownloadHints; +class CFPDF_DownloadHintsWrap : public IFX_DownloadHints { + public: + CFPDF_DownloadHintsWrap(FX_DOWNLOADHINTS* pDownloadHints) { + m_pDownloadHints = pDownloadHints; + } + + public: + virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) { + m_pDownloadHints->AddSegment(m_pDownloadHints, offset, size); + } + + private: + FX_DOWNLOADHINTS* m_pDownloadHints; }; -class CFPDF_DataAvail -{ -public: - CFPDF_DataAvail() - { - m_pDataAvail = NULL; - } - - ~CFPDF_DataAvail() - { - delete m_pDataAvail; - } - - IPDF_DataAvail* m_pDataAvail; - CFPDF_FileAvailWrap m_FileAvail; - CFPDF_FileAccessWrap m_FileRead; +class CFPDF_DataAvail { + public: + CFPDF_DataAvail() { m_pDataAvail = NULL; } + + ~CFPDF_DataAvail() { delete m_pDataAvail; } + + IPDF_DataAvail* m_pDataAvail; + CFPDF_FileAvailWrap m_FileAvail; + CFPDF_FileAccessWrap m_FileRead; }; -DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail, FPDF_FILEACCESS* file) -{ - CFPDF_DataAvail* pAvail = FX_NEW CFPDF_DataAvail; - pAvail->m_FileAvail.Set(file_avail); - pAvail->m_FileRead.Set(file); - pAvail->m_pDataAvail = IPDF_DataAvail::Create(&pAvail->m_FileAvail, &pAvail->m_FileRead); - return pAvail; +DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail, + FPDF_FILEACCESS* file) { + CFPDF_DataAvail* pAvail = FX_NEW CFPDF_DataAvail; + pAvail->m_FileAvail.Set(file_avail); + pAvail->m_FileRead.Set(file); + pAvail->m_pDataAvail = + IPDF_DataAvail::Create(&pAvail->m_FileAvail, &pAvail->m_FileRead); + return pAvail; } -DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail) -{ - delete (CFPDF_DataAvail*)avail; +DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail) { + delete (CFPDF_DataAvail*)avail; } -DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints) -{ - if (avail == NULL || hints == NULL) return 0; - CFPDF_DownloadHintsWrap hints_wrap(hints); - return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsDocAvail(&hints_wrap); +DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail, + FX_DOWNLOADHINTS* hints) { + if (avail == NULL || hints == NULL) + return 0; + CFPDF_DownloadHintsWrap hints_wrap(hints); + return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsDocAvail(&hints_wrap); } -extern void CheckUnSupportError(CPDF_Document * pDoc, FX_DWORD err_code); - -DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) -{ - if (avail == NULL) return NULL; - CPDF_Parser* pParser = FX_NEW CPDF_Parser; - pParser->SetPassword(password); - - FX_DWORD err_code = pParser->StartAsynParse(((CFPDF_DataAvail*)avail)->m_pDataAvail->GetFileRead()); - if (err_code) { - delete pParser; - ProcessParseError(err_code); - return NULL; - } - ((CFPDF_DataAvail*)avail)->m_pDataAvail->SetDocument(pParser->GetDocument()); - CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS); - CPDF_Document* pPDFDoc = pParser->GetDocument(); - CPDFXFA_App* pApp = CPDFXFA_App::GetInstance(); - CPDFXFA_Document* pDocument = FX_NEW CPDFXFA_Document(pPDFDoc, pApp); - return pDocument; +extern void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code); + +DLLEXPORT FPDF_DOCUMENT STDCALL +FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) { + if (avail == NULL) + return NULL; + CPDF_Parser* pParser = FX_NEW CPDF_Parser; + pParser->SetPassword(password); + + FX_DWORD err_code = pParser->StartAsynParse( + ((CFPDF_DataAvail*)avail)->m_pDataAvail->GetFileRead()); + if (err_code) { + delete pParser; + ProcessParseError(err_code); + return NULL; + } + ((CFPDF_DataAvail*)avail)->m_pDataAvail->SetDocument(pParser->GetDocument()); + CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS); + CPDF_Document* pPDFDoc = pParser->GetDocument(); + CPDFXFA_App* pApp = CPDFXFA_App::GetInstance(); + CPDFXFA_Document* pDocument = FX_NEW CPDFXFA_Document(pPDFDoc, pApp); + return pDocument; } -DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc) -{ - if (doc == NULL) return 0; - CPDF_Document* pDoc = ((CPDFXFA_Document*)doc)->GetPDFDoc(); - return ((CPDF_Parser*)pDoc->GetParser())->GetFirstPageNo(); +DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc) { + if (doc == NULL) + return 0; + CPDF_Document* pDoc = ((CPDFXFA_Document*)doc)->GetPDFDoc(); + return ((CPDF_Parser*)pDoc->GetParser())->GetFirstPageNo(); } -DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail, int page_index, FX_DOWNLOADHINTS* hints) -{ - if (avail == NULL || hints == NULL) return 0; - CFPDF_DownloadHintsWrap hints_wrap(hints); - return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsPageAvail(page_index, &hints_wrap); +DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail, + int page_index, + FX_DOWNLOADHINTS* hints) { + if (avail == NULL || hints == NULL) + return 0; + CFPDF_DownloadHintsWrap hints_wrap(hints); + return ((CFPDF_DataAvail*)avail) + ->m_pDataAvail->IsPageAvail(page_index, &hints_wrap); } -DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints) -{ - if (avail == NULL || hints == NULL) return -1; - CFPDF_DownloadHintsWrap hints_wrap(hints); - return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsFormAvail(&hints_wrap); +DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail, + FX_DOWNLOADHINTS* hints) { + if (avail == NULL || hints == NULL) + return -1; + CFPDF_DownloadHintsWrap hints_wrap(hints); + return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsFormAvail(&hints_wrap); } -DLLEXPORT FPDF_BOOL STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail) -{ - if (avail == NULL) return -1; - return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsLinearizedPDF(); - +DLLEXPORT FPDF_BOOL STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail) { + if (avail == NULL) + return -1; + return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsLinearizedPDF(); } diff --git a/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp b/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp index d2f0b78b52..292ff79d05 100644 --- a/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp +++ b/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp @@ -7,8 +7,7 @@ #include "../../testing/embedder_test.h" #include "testing/gtest/include/gtest/gtest.h" -class FPDFDataAvailEmbeddertest : public EmbedderTest { -}; +class FPDFDataAvailEmbeddertest : public EmbedderTest {}; TEST_F(FPDFDataAvailEmbeddertest, TrailerUnterminated) { // Document doesn't even open under XFA but must not crash. diff --git a/fpdfsdk/src/fpdf_ext.cpp b/fpdfsdk/src/fpdf_ext.cpp index cc359e95b4..a198f9f63c 100644 --- a/fpdfsdk/src/fpdf_ext.cpp +++ b/fpdfsdk/src/fpdf_ext.cpp @@ -9,230 +9,199 @@ #include "../include/fsdk_define.h" #include "../include/fpdfxfa/fpdfxfa_doc.h" -#define FPDFSDK_UNSUPPORT_CALL 100 - -class CFSDK_UnsupportInfo_Adapter -{ -public: - CFSDK_UnsupportInfo_Adapter(UNSUPPORT_INFO* unsp_info){ m_unsp_info = unsp_info;} -// FX_BOOL NeedToPauseNow(); - void ReportError(int nErrorType); - -private: - UNSUPPORT_INFO* m_unsp_info; +#define FPDFSDK_UNSUPPORT_CALL 100 + +class CFSDK_UnsupportInfo_Adapter { + public: + CFSDK_UnsupportInfo_Adapter(UNSUPPORT_INFO* unsp_info) { + m_unsp_info = unsp_info; + } + // FX_BOOL NeedToPauseNow(); + void ReportError(int nErrorType); + + private: + UNSUPPORT_INFO* m_unsp_info; }; -void CFSDK_UnsupportInfo_Adapter::ReportError(int nErrorType) -{ - if(m_unsp_info && m_unsp_info->FSDK_UnSupport_Handler) - { - m_unsp_info->FSDK_UnSupport_Handler(m_unsp_info,nErrorType); - } +void CFSDK_UnsupportInfo_Adapter::ReportError(int nErrorType) { + if (m_unsp_info && m_unsp_info->FSDK_UnSupport_Handler) { + m_unsp_info->FSDK_UnSupport_Handler(m_unsp_info, nErrorType); + } } -void FreeUnsupportInfo(void* pData) -{ - CFSDK_UnsupportInfo_Adapter * pAdapter = (CFSDK_UnsupportInfo_Adapter *)pData; - delete pAdapter; +void FreeUnsupportInfo(void* pData) { + CFSDK_UnsupportInfo_Adapter* pAdapter = (CFSDK_UnsupportInfo_Adapter*)pData; + delete pAdapter; } -FX_BOOL FPDF_UnSupportError(int nError) -{ - CFSDK_UnsupportInfo_Adapter * pAdapter = (CFSDK_UnsupportInfo_Adapter *)CPDF_ModuleMgr::Get()->GetPrivateData((void *)FPDFSDK_UNSUPPORT_CALL); +FX_BOOL FPDF_UnSupportError(int nError) { + CFSDK_UnsupportInfo_Adapter* pAdapter = + (CFSDK_UnsupportInfo_Adapter*)CPDF_ModuleMgr::Get()->GetPrivateData( + (void*)FPDFSDK_UNSUPPORT_CALL); - if(!pAdapter) - return FALSE; - pAdapter->ReportError(nError); - return TRUE; + if (!pAdapter) + return FALSE; + pAdapter->ReportError(nError); + return TRUE; } -DLLEXPORT FPDF_BOOL STDCALL FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info) -{ - if (!unsp_info || unsp_info->version!=1) - return FALSE; - CFSDK_UnsupportInfo_Adapter * pAdapter = new CFSDK_UnsupportInfo_Adapter(unsp_info); +DLLEXPORT FPDF_BOOL STDCALL +FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info) { + if (!unsp_info || unsp_info->version != 1) + return FALSE; + CFSDK_UnsupportInfo_Adapter* pAdapter = + new CFSDK_UnsupportInfo_Adapter(unsp_info); - CPDF_ModuleMgr::Get()->SetPrivateData((void *)FPDFSDK_UNSUPPORT_CALL,pAdapter, &FreeUnsupportInfo); + CPDF_ModuleMgr::Get()->SetPrivateData((void*)FPDFSDK_UNSUPPORT_CALL, pAdapter, + &FreeUnsupportInfo); - return TRUE; + return TRUE; } -void CheckUnSupportAnnot(CPDF_Document * pDoc, CPDF_Annot* pPDFAnnot) -{ - CFX_ByteString cbSubType = pPDFAnnot->GetSubType(); - if(cbSubType.Compare("3D") == 0) - { - FPDF_UnSupportError(FPDF_UNSP_ANNOT_3DANNOT); - } - else if(cbSubType.Compare("Screen") ==0) - { - CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict(); - CFX_ByteString cbString; - if(pAnnotDict->KeyExist("IT")) - cbString = pAnnotDict->GetString("IT"); - if(cbString.Compare("Img") != 0) - FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_MEDIA); +void CheckUnSupportAnnot(CPDF_Document* pDoc, CPDF_Annot* pPDFAnnot) { + CFX_ByteString cbSubType = pPDFAnnot->GetSubType(); + if (cbSubType.Compare("3D") == 0) { + FPDF_UnSupportError(FPDF_UNSP_ANNOT_3DANNOT); + } else if (cbSubType.Compare("Screen") == 0) { + CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict(); + CFX_ByteString cbString; + if (pAnnotDict->KeyExist("IT")) + cbString = pAnnotDict->GetString("IT"); + if (cbString.Compare("Img") != 0) + FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_MEDIA); + } else if (cbSubType.Compare("Movie") == 0) { + FPDF_UnSupportError(FPDF_UNSP_ANNOT_MOVIE); + } else if (cbSubType.Compare("Sound") == 0) { + FPDF_UnSupportError(FPDF_UNSP_ANNOT_SOUND); + } else if (cbSubType.Compare("RichMedia") == 0) { + FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA); + } else if (cbSubType.Compare("FileAttachment") == 0) { + FPDF_UnSupportError(FPDF_UNSP_ANNOT_ATTACHMENT); + } else if (cbSubType.Compare("Widget") == 0) { + CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict(); + CFX_ByteString cbString; + if (pAnnotDict->KeyExist("FT")) { + cbString = pAnnotDict->GetString("FT"); } - else if(cbSubType.Compare("Movie") ==0) - { - FPDF_UnSupportError(FPDF_UNSP_ANNOT_MOVIE); + if (cbString.Compare("Sig") == 0) { + FPDF_UnSupportError(FPDF_UNSP_ANNOT_SIG); } - else if(cbSubType.Compare("Sound") ==0) - { - FPDF_UnSupportError(FPDF_UNSP_ANNOT_SOUND); - } - else if(cbSubType.Compare("RichMedia") ==0) - { - FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA); - } - else if(cbSubType.Compare("FileAttachment") ==0) - { - FPDF_UnSupportError(FPDF_UNSP_ANNOT_ATTACHMENT); + } +} + +FX_BOOL CheckSharedForm(CXML_Element* pElement, CFX_ByteString cbName) { + int count = pElement->CountAttrs(); + int i = 0; + for (i = 0; i < count; i++) { + CFX_ByteString space, name; + CFX_WideString value; + pElement->GetAttrByIndex(i, space, name, value); + if (space == FX_BSTRC("xmlns") && name == FX_BSTRC("adhocwf") && + value == L"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/") { + CXML_Element* pVersion = pElement->GetElement("adhocwf", cbName); + if (!pVersion) + continue; + CFX_WideString wsContent = pVersion->GetContent(0); // == 1.1 + int nType = wsContent.GetInteger(); + switch (nType) { + case 1: + FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_ACROBAT); + break; + case 2: + FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM); + break; + case 0: + FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_EMAIL); + break; + } } - else if(cbSubType.Compare("Widget") ==0) - { - CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict(); - CFX_ByteString cbString; - if(pAnnotDict->KeyExist("FT")) - { - cbString = pAnnotDict->GetString("FT"); - } - if(cbString.Compare("Sig") == 0) - { - FPDF_UnSupportError(FPDF_UNSP_ANNOT_SIG); - } + } + + FX_DWORD nCount = pElement->CountChildren(); + for (i = 0; i < (int)nCount; i++) { + CXML_Element::ChildType childType = pElement->GetChildType(i); + if (childType == CXML_Element::Element) { + CXML_Element* pChild = pElement->GetElement(i); + if (CheckSharedForm(pChild, cbName)) + return TRUE; } - + } + return FALSE; } -FX_BOOL CheckSharedForm(CXML_Element * pElement, CFX_ByteString cbName) -{ - int count = pElement->CountAttrs(); - int i=0; - for (i = 0; i < count; i++) - { - CFX_ByteString space, name; - CFX_WideString value; - pElement->GetAttrByIndex(i, space, name, value); - if (space == FX_BSTRC("xmlns") && name == FX_BSTRC("adhocwf") && value == L"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/") - { - CXML_Element *pVersion = pElement->GetElement("adhocwf",cbName); - if (!pVersion) - continue; - CFX_WideString wsContent = pVersion->GetContent(0); // == 1.1 - int nType = wsContent.GetInteger(); - switch(nType) - { - case 1: - FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_ACROBAT); - break; - case 2: - FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM); - break; - case 0: - FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_EMAIL); - break; - } - } +void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code) { + // Security + if (err_code == FPDF_ERR_SECURITY) { + FPDF_UnSupportError(FPDF_UNSP_DOC_SECURITY); + return; + } + if (!pDoc) + return; + + // Portfolios and Packages + CPDF_Dictionary* pRootDict = pDoc->GetRoot(); + if (pRootDict) { + CFX_ByteString cbString; + if (pRootDict->KeyExist("Collection")) { + FPDF_UnSupportError(FPDF_UNSP_DOC_PORTABLECOLLECTION); + return; } - - FX_DWORD nCount = pElement->CountChildren(); - for(i=0; i<(int)nCount; i++) - { - CXML_Element::ChildType childType = pElement->GetChildType(i); - if(childType == CXML_Element::Element) - { - CXML_Element * pChild = pElement->GetElement(i); - if(CheckSharedForm(pChild, cbName)) - return TRUE; + if (pRootDict->KeyExist("Names")) { + CPDF_Dictionary* pNameDict = pRootDict->GetDict("Names"); + if (pNameDict && pNameDict->KeyExist("EmbeddedFiles")) { + FPDF_UnSupportError(FPDF_UNSP_DOC_ATTACHMENT); + return; + } else if (pNameDict && pNameDict->KeyExist("JavaScript")) { + CPDF_Dictionary* pJSDict = pNameDict->GetDict("JavaScript"); + CPDF_Array* pArray = pJSDict ? pJSDict->GetArray("Names") : NULL; + if (pArray) { + int nCount = pArray->GetCount(); + for (int i = 0; i < nCount; i++) { + CFX_ByteString cbStr = pArray->GetString(i); + if (cbStr.Compare("com.adobe.acrobat.SharedReview.Register") == 0) { + FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDREVIEW); + return; + } + } } + } } - return FALSE; -} - -void CheckUnSupportError(CPDF_Document * pDoc, FX_DWORD err_code) -{ - // Security - if(err_code == FPDF_ERR_SECURITY) - { - FPDF_UnSupportError(FPDF_UNSP_DOC_SECURITY); - return ; - } - if(!pDoc) - return ; - - // Portfolios and Packages - CPDF_Dictionary * pRootDict = pDoc->GetRoot(); - if(pRootDict) - { - CFX_ByteString cbString; - if(pRootDict->KeyExist("Collection")) - { - FPDF_UnSupportError(FPDF_UNSP_DOC_PORTABLECOLLECTION); - return ; - } - if(pRootDict->KeyExist("Names")) - { - CPDF_Dictionary* pNameDict = pRootDict->GetDict("Names"); - if (pNameDict && pNameDict->KeyExist("EmbeddedFiles")) - { - FPDF_UnSupportError(FPDF_UNSP_DOC_ATTACHMENT); - return; - } - else if (pNameDict && pNameDict->KeyExist("JavaScript")) - { - CPDF_Dictionary* pJSDict = pNameDict->GetDict("JavaScript"); - CPDF_Array * pArray = pJSDict ? pJSDict->GetArray("Names") : NULL; - if (pArray) { - int nCount = pArray->GetCount(); - for(int i=0; iGetString(i); - if(cbStr.Compare("com.adobe.acrobat.SharedReview.Register") == 0) - { - FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDREVIEW); - return; - } - } - } - } - } - } - - // SharedForm - CPDF_Metadata metaData; - metaData.LoadDoc(pDoc); - CXML_Element * pElement = metaData.GetRoot(); - if(pElement) - CheckSharedForm(pElement, "workflowType"); + } + + // SharedForm + CPDF_Metadata metaData; + metaData.LoadDoc(pDoc); + CXML_Element* pElement = metaData.GetRoot(); + if (pElement) + CheckSharedForm(pElement, "workflowType"); } -DLLEXPORT int FPDFDoc_GetPageMode(FPDF_DOCUMENT document) -{ - if (!document) - return PAGEMODE_UNKNOWN; - - CPDF_Dictionary *pRoot = (((CPDFXFA_Document*)document)->GetPDFDoc())->GetRoot(); - if (!pRoot) - return PAGEMODE_UNKNOWN; - - CPDF_Object* pName = pRoot->GetElement("PageMode"); - if (!pName) - return PAGEMODE_USENONE; - - CFX_ByteString strPageMode = pName->GetString(); - if (strPageMode.IsEmpty()||strPageMode.EqualNoCase("UseNone")) - return PAGEMODE_USENONE; - if (strPageMode.EqualNoCase("UseOutlines")) - return PAGEMODE_USEOUTLINES; - if (strPageMode.EqualNoCase("UseThumbs")) - return PAGEMODE_USETHUMBS; - if (strPageMode.EqualNoCase("FullScreen")) - return PAGEMODE_FULLSCREEN; - if (strPageMode.EqualNoCase("UseOC")) - return PAGEMODE_USEOC; - if (strPageMode.EqualNoCase("UseAttachments")) - return PAGEMODE_USEATTACHMENTS; +DLLEXPORT int FPDFDoc_GetPageMode(FPDF_DOCUMENT document) { + if (!document) + return PAGEMODE_UNKNOWN; + CPDF_Dictionary* pRoot = + (((CPDFXFA_Document*)document)->GetPDFDoc())->GetRoot(); + if (!pRoot) return PAGEMODE_UNKNOWN; + + CPDF_Object* pName = pRoot->GetElement("PageMode"); + if (!pName) + return PAGEMODE_USENONE; + + CFX_ByteString strPageMode = pName->GetString(); + if (strPageMode.IsEmpty() || strPageMode.EqualNoCase("UseNone")) + return PAGEMODE_USENONE; + if (strPageMode.EqualNoCase("UseOutlines")) + return PAGEMODE_USEOUTLINES; + if (strPageMode.EqualNoCase("UseThumbs")) + return PAGEMODE_USETHUMBS; + if (strPageMode.EqualNoCase("FullScreen")) + return PAGEMODE_FULLSCREEN; + if (strPageMode.EqualNoCase("UseOC")) + return PAGEMODE_USEOC; + if (strPageMode.EqualNoCase("UseAttachments")) + return PAGEMODE_USEATTACHMENTS; + + return PAGEMODE_UNKNOWN; } diff --git a/fpdfsdk/src/fpdf_flatten.cpp b/fpdfsdk/src/fpdf_flatten.cpp index 9ef6117fe2..5514b2b32b 100644 --- a/fpdfsdk/src/fpdf_flatten.cpp +++ b/fpdfsdk/src/fpdf_flatten.cpp @@ -15,544 +15,525 @@ typedef CFX_ArrayTemplate CPDF_RectArray; enum FPDF_TYPE { MAX, MIN }; enum FPDF_VALUE { TOP, LEFT, RIGHT, BOTTOM }; -FX_BOOL IsValiableRect(CPDF_Rect rect, CPDF_Rect rcPage) -{ - if ( rect.left - rect.right > 0.000001f || - rect.bottom - rect.top > 0.000001f) - return FALSE; - - if (rect.left == 0.0f && - rect.top == 0.0f && - rect.right == 0.0f && - rect.bottom == 0.0f) - return FALSE; - - if (!rcPage.IsEmpty()) - { - if (rect.left - rcPage.left < -10.000001f || - rect.right - rcPage.right > 10.000001f || - rect.top - rcPage.top > 10.000001f || - rect.bottom - rcPage.bottom < -10.000001f) - return FALSE; - } - - return TRUE; +FX_BOOL IsValiableRect(CPDF_Rect rect, CPDF_Rect rcPage) { + if (rect.left - rect.right > 0.000001f || rect.bottom - rect.top > 0.000001f) + return FALSE; + + if (rect.left == 0.0f && rect.top == 0.0f && rect.right == 0.0f && + rect.bottom == 0.0f) + return FALSE; + + if (!rcPage.IsEmpty()) { + if (rect.left - rcPage.left < -10.000001f || + rect.right - rcPage.right > 10.000001f || + rect.top - rcPage.top > 10.000001f || + rect.bottom - rcPage.bottom < -10.000001f) + return FALSE; + } + + return TRUE; } +FX_BOOL GetContentsRect(CPDF_Document* pDoc, + CPDF_Dictionary* pDict, + CPDF_RectArray* pRectArray) { + CPDF_Page* pPDFPage = FX_NEW CPDF_Page; + pPDFPage->Load(pDoc, pDict, FALSE); + pPDFPage->ParseContent(); -FX_BOOL GetContentsRect( CPDF_Document * pDoc, CPDF_Dictionary* pDict, CPDF_RectArray * pRectArray ) -{ - CPDF_Page* pPDFPage = FX_NEW CPDF_Page; - pPDFPage->Load( pDoc, pDict, FALSE ); - pPDFPage->ParseContent(); + FX_POSITION pos = pPDFPage->GetFirstObjectPosition(); - FX_POSITION pos = pPDFPage->GetFirstObjectPosition(); + while (pos) { + CPDF_PageObject* pPageObject = pPDFPage->GetNextObject(pos); + if (!pPageObject) + continue; - while (pos) - { - CPDF_PageObject* pPageObject = pPDFPage->GetNextObject(pos); - if (!pPageObject)continue; + CPDF_Rect rc; + rc.left = pPageObject->m_Left; + rc.right = pPageObject->m_Right; + rc.bottom = pPageObject->m_Bottom; + rc.top = pPageObject->m_Top; - CPDF_Rect rc; - rc.left = pPageObject->m_Left; - rc.right = pPageObject->m_Right; - rc.bottom = pPageObject->m_Bottom; - rc.top = pPageObject->m_Top; + if (IsValiableRect(rc, pDict->GetRect("MediaBox"))) { + pRectArray->Add(rc); + } + } - if (IsValiableRect(rc, pDict->GetRect("MediaBox"))) - { - pRectArray->Add(rc); - } - } + delete pPDFPage; + return TRUE; +} - delete pPDFPage; - return TRUE; +void ParserStream(CPDF_Dictionary* pPageDic, + CPDF_Dictionary* pStream, + CPDF_RectArray* pRectArray, + CPDF_ObjectArray* pObjectArray) { + if (!pStream) + return; + CPDF_Rect rect; + if (pStream->KeyExist("Rect")) + rect = pStream->GetRect("Rect"); + else if (pStream->KeyExist("BBox")) + rect = pStream->GetRect("BBox"); + + if (IsValiableRect(rect, pPageDic->GetRect("MediaBox"))) + pRectArray->Add(rect); + + pObjectArray->Add(pStream); } +int ParserAnnots(CPDF_Document* pSourceDoc, + CPDF_Dictionary* pPageDic, + CPDF_RectArray* pRectArray, + CPDF_ObjectArray* pObjectArray, + int nUsage) { + if (!pSourceDoc || !pPageDic) + return FLATTEN_FAIL; + + GetContentsRect(pSourceDoc, pPageDic, pRectArray); + CPDF_Array* pAnnots = pPageDic->GetArray("Annots"); + if (!pAnnots) + return FLATTEN_NOTHINGTODO; + + FX_DWORD dwSize = pAnnots->GetCount(); + for (int i = 0; i < (int)dwSize; i++) { + CPDF_Object* pObj = pAnnots->GetElementValue(i); + if (!pObj || pObj->GetType() != PDFOBJ_DICTIONARY) + continue; + + CPDF_Dictionary* pAnnotDic = (CPDF_Dictionary*)pObj; + CFX_ByteString sSubtype = pAnnotDic->GetString("Subtype"); + if (sSubtype == "Popup") + continue; + + int nAnnotFlag = pAnnotDic->GetInteger("F"); + if (nAnnotFlag & ANNOTFLAG_HIDDEN) + continue; + + if (nUsage == FLAT_NORMALDISPLAY) { + if (nAnnotFlag & ANNOTFLAG_INVISIBLE) + continue; + + ParserStream(pPageDic, pAnnotDic, pRectArray, pObjectArray); + } else { + if (nAnnotFlag & ANNOTFLAG_PRINT) + ParserStream(pPageDic, pAnnotDic, pRectArray, pObjectArray); + } + } + return FLATTEN_SUCCESS; +} -void ParserStream( CPDF_Dictionary * pPageDic, CPDF_Dictionary* pStream, CPDF_RectArray * pRectArray, CPDF_ObjectArray * pObjectArray ) -{ - if (!pStream)return; - CPDF_Rect rect; - if (pStream->KeyExist("Rect")) - rect = pStream->GetRect("Rect"); - else if (pStream->KeyExist("BBox")) - rect = pStream->GetRect("BBox"); +FX_FLOAT GetMinMaxValue(CPDF_RectArray& array, + FPDF_TYPE type, + FPDF_VALUE value) { + int nRects = array.GetSize(); + FX_FLOAT fRet = 0.0f; - if (IsValiableRect(rect, pPageDic->GetRect("MediaBox"))) - pRectArray->Add(rect); + if (nRects <= 0) + return 0.0f; - pObjectArray->Add(pStream); -} + FX_FLOAT* pArray = new FX_FLOAT[nRects]; + switch (value) { + case LEFT: { + for (int i = 0; i < nRects; i++) + pArray[i] = CPDF_Rect(array.GetAt(i)).left; + break; + } + case TOP: { + for (int i = 0; i < nRects; i++) + pArray[i] = CPDF_Rect(array.GetAt(i)).top; -int ParserAnnots( CPDF_Document* pSourceDoc, CPDF_Dictionary * pPageDic, CPDF_RectArray * pRectArray, CPDF_ObjectArray * pObjectArray, int nUsage) -{ - if (!pSourceDoc || !pPageDic) - return FLATTEN_FAIL; + break; + } + case RIGHT: { + for (int i = 0; i < nRects; i++) + pArray[i] = CPDF_Rect(array.GetAt(i)).right; - GetContentsRect( pSourceDoc, pPageDic, pRectArray ); - CPDF_Array* pAnnots = pPageDic->GetArray("Annots"); - if (!pAnnots) - return FLATTEN_NOTHINGTODO; + break; + } + case BOTTOM: { + for (int i = 0; i < nRects; i++) + pArray[i] = CPDF_Rect(array.GetAt(i)).bottom; - FX_DWORD dwSize = pAnnots->GetCount(); - for (int i = 0; i < (int)dwSize; i++) - { - CPDF_Object* pObj = pAnnots->GetElementValue(i); - if (!pObj || pObj->GetType() != PDFOBJ_DICTIONARY) - continue; + break; + } + default: + break; + } + fRet = pArray[0]; + if (type == MAX) { + for (int i = 1; i < nRects; i++) + if (fRet <= pArray[i]) + fRet = pArray[i]; + } else { + for (int i = 1; i < nRects; i++) + if (fRet >= pArray[i]) + fRet = pArray[i]; + } + delete[] pArray; + return fRet; +} - CPDF_Dictionary* pAnnotDic = (CPDF_Dictionary*)pObj; - CFX_ByteString sSubtype = pAnnotDic->GetString("Subtype"); - if (sSubtype == "Popup") - continue; +CPDF_Rect CalculateRect(CPDF_RectArray* pRectArray) { + CPDF_Rect rcRet; - int nAnnotFlag = pAnnotDic->GetInteger("F"); - if (nAnnotFlag & ANNOTFLAG_HIDDEN) - continue; + rcRet.left = GetMinMaxValue(*pRectArray, MIN, LEFT); + rcRet.top = GetMinMaxValue(*pRectArray, MAX, TOP); + rcRet.right = GetMinMaxValue(*pRectArray, MAX, RIGHT); + rcRet.bottom = GetMinMaxValue(*pRectArray, MIN, BOTTOM); - if(nUsage == FLAT_NORMALDISPLAY) - { - if (nAnnotFlag & ANNOTFLAG_INVISIBLE) - continue; + return rcRet; +} - ParserStream( pPageDic, pAnnotDic, pRectArray, pObjectArray ); - } - else - { - if (nAnnotFlag & ANNOTFLAG_PRINT) - ParserStream( pPageDic, pAnnotDic, pRectArray, pObjectArray ); - } +void SetPageContents(CFX_ByteString key, + CPDF_Dictionary* pPage, + CPDF_Document* pDocument) { + CPDF_Object* pContentsObj = pPage->GetStream("Contents"); + if (!pContentsObj) { + pContentsObj = pPage->GetArray("Contents"); + } + + if (!pContentsObj) { + // Create a new contents dictionary + if (!key.IsEmpty()) { + CPDF_Stream* pNewContents = + FX_NEW CPDF_Stream(NULL, 0, FX_NEW CPDF_Dictionary); + if (!pNewContents) + return; + pPage->SetAtReference("Contents", pDocument, + pDocument->AddIndirectObject(pNewContents)); + + CFX_ByteString sStream; + sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str()); + pNewContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, + FALSE); + } + return; + } + + int iType = pContentsObj->GetType(); + CPDF_Array* pContentsArray = NULL; + + switch (iType) { + case PDFOBJ_STREAM: { + pContentsArray = FX_NEW CPDF_Array; + CPDF_Stream* pContents = (CPDF_Stream*)pContentsObj; + FX_DWORD dwObjNum = pDocument->AddIndirectObject(pContents); + CPDF_StreamAcc acc; + acc.LoadAllData(pContents); + CFX_ByteString sStream = "q\n"; + CFX_ByteString sBody = + CFX_ByteString((const FX_CHAR*)acc.GetData(), acc.GetSize()); + sStream = sStream + sBody + "\nQ"; + pContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, + FALSE); + pContentsArray->AddReference(pDocument, dwObjNum); + break; + } + + case PDFOBJ_ARRAY: { + pContentsArray = (CPDF_Array*)pContentsObj; + break; } - return FLATTEN_SUCCESS; + default: + break; + } + + if (!pContentsArray) + return; + + FX_DWORD dwObjNum = pDocument->AddIndirectObject(pContentsArray); + pPage->SetAtReference("Contents", pDocument, dwObjNum); + + if (!key.IsEmpty()) { + CPDF_Stream* pNewContents = + FX_NEW CPDF_Stream(NULL, 0, FX_NEW CPDF_Dictionary); + dwObjNum = pDocument->AddIndirectObject(pNewContents); + pContentsArray->AddReference(pDocument, dwObjNum); + + CFX_ByteString sStream; + sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str()); + pNewContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, + FALSE); + } } +CFX_AffineMatrix GetMatrix(CPDF_Rect rcAnnot, + CPDF_Rect rcStream, + CFX_AffineMatrix matrix) { + if (rcStream.IsEmpty()) + return CFX_AffineMatrix(); + + matrix.TransformRect(rcStream); + rcStream.Normalize(); -FX_FLOAT GetMinMaxValue( CPDF_RectArray& array, FPDF_TYPE type, FPDF_VALUE value) -{ - int nRects = array.GetSize(); - FX_FLOAT fRet = 0.0f; - - if (nRects <= 0)return 0.0f; - - FX_FLOAT* pArray = new FX_FLOAT[nRects]; - switch(value) - { - case LEFT: - { - for (int i = 0; i < nRects; i++) - pArray[i] = CPDF_Rect(array.GetAt(i)).left; - - break; - } - case TOP: - { - for (int i = 0; i < nRects; i++) - pArray[i] = CPDF_Rect(array.GetAt(i)).top; - - break; - } - case RIGHT: - { - for (int i = 0; i < nRects; i++) - pArray[i] = CPDF_Rect(array.GetAt(i)).right; - - break; - } - case BOTTOM: - { - for (int i = 0; i < nRects; i++) - pArray[i] = CPDF_Rect(array.GetAt(i)).bottom; - - break; - } - default: - break; - } - fRet = pArray[0]; - if (type == MAX) - { - for (int i = 1; i < nRects; i++) - if (fRet <= pArray[i]) - fRet = pArray[i]; - } - else - { - for (int i = 1; i < nRects; i++) - if (fRet >= pArray[i]) - fRet = pArray[i]; - } - delete[] pArray; - return fRet; + FX_FLOAT a = rcAnnot.Width() / rcStream.Width(); + FX_FLOAT d = rcAnnot.Height() / rcStream.Height(); + + FX_FLOAT e = rcAnnot.left - rcStream.left * a; + FX_FLOAT f = rcAnnot.bottom - rcStream.bottom * d; + return CFX_AffineMatrix(a, 0, 0, d, e, f); } -CPDF_Rect CalculateRect( CPDF_RectArray * pRectArray ) -{ +void GetOffset(FX_FLOAT& fa, + FX_FLOAT& fd, + FX_FLOAT& fe, + FX_FLOAT& ff, + CPDF_Rect rcAnnot, + CPDF_Rect rcStream, + CFX_AffineMatrix matrix) { + FX_FLOAT fStreamWidth = 0.0f; + FX_FLOAT fStreamHeight = 0.0f; + + if (matrix.a != 0 && matrix.d != 0) { + fStreamWidth = rcStream.right - rcStream.left; + fStreamHeight = rcStream.top - rcStream.bottom; + } else { + fStreamWidth = rcStream.top - rcStream.bottom; + fStreamHeight = rcStream.right - rcStream.left; + } + + FX_FLOAT x1 = + matrix.a * rcStream.left + matrix.c * rcStream.bottom + matrix.e; + FX_FLOAT y1 = + matrix.b * rcStream.left + matrix.d * rcStream.bottom + matrix.f; + FX_FLOAT x2 = matrix.a * rcStream.left + matrix.c * rcStream.top + matrix.e; + FX_FLOAT y2 = matrix.b * rcStream.left + matrix.d * rcStream.top + matrix.f; + FX_FLOAT x3 = + matrix.a * rcStream.right + matrix.c * rcStream.bottom + matrix.e; + FX_FLOAT y3 = + matrix.b * rcStream.right + matrix.d * rcStream.bottom + matrix.f; + FX_FLOAT x4 = matrix.a * rcStream.right + matrix.c * rcStream.top + matrix.e; + FX_FLOAT y4 = matrix.b * rcStream.right + matrix.d * rcStream.top + matrix.f; + + FX_FLOAT left = FX_MIN(FX_MIN(x1, x2), FX_MIN(x3, x4)); + FX_FLOAT bottom = FX_MIN(FX_MIN(y1, y2), FX_MIN(y3, y4)); + + fa = (rcAnnot.right - rcAnnot.left) / fStreamWidth; + fd = (rcAnnot.top - rcAnnot.bottom) / fStreamHeight; + fe = rcAnnot.left - left * fa; + ff = rcAnnot.bottom - bottom * fd; +} - CPDF_Rect rcRet; +DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { + if (!page) { + return FLATTEN_FAIL; + } + + CPDF_Page* pPage = ((CPDFXFA_Page*)(page))->GetPDFPage(); + if (!pPage) + return FLATTEN_FAIL; + + CPDF_Document* pDocument = pPage->m_pDocument; + CPDF_Dictionary* pPageDict = pPage->m_pFormDict; + + if (!pDocument || !pPageDict) { + return FLATTEN_FAIL; + } + + CPDF_ObjectArray ObjectArray; + CPDF_RectArray RectArray; + + int iRet = FLATTEN_FAIL; + iRet = ParserAnnots(pDocument, pPageDict, &RectArray, &ObjectArray, nFlag); + if (iRet == FLATTEN_NOTHINGTODO || iRet == FLATTEN_FAIL) + return iRet; + + CPDF_Rect rcOriginalCB; + CPDF_Rect rcMerger = CalculateRect(&RectArray); + CPDF_Rect rcOriginalMB = pPageDict->GetRect("MediaBox"); + + if (pPageDict->KeyExist("CropBox")) + rcOriginalMB = pPageDict->GetRect("CropBox"); + + if (rcOriginalMB.IsEmpty()) { + rcOriginalMB = CPDF_Rect(0.0f, 0.0f, 612.0f, 792.0f); + } + + rcMerger.left = + rcMerger.left < rcOriginalMB.left ? rcOriginalMB.left : rcMerger.left; + rcMerger.right = + rcMerger.right > rcOriginalMB.right ? rcOriginalMB.right : rcMerger.right; + rcMerger.top = + rcMerger.top > rcOriginalMB.top ? rcOriginalMB.top : rcMerger.top; + rcMerger.bottom = rcMerger.bottom < rcOriginalMB.bottom ? rcOriginalMB.bottom + : rcMerger.bottom; + + if (pPageDict->KeyExist("ArtBox")) + rcOriginalCB = pPageDict->GetRect("ArtBox"); + else + rcOriginalCB = rcOriginalMB; + + if (!rcOriginalMB.IsEmpty()) { + CPDF_Array* pMediaBox = FX_NEW CPDF_Array(); + + pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.left)); + pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.bottom)); + pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.right)); + pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.top)); + + pPageDict->SetAt("MediaBox", pMediaBox); + } + + if (!rcOriginalCB.IsEmpty()) { + CPDF_Array* pCropBox = FX_NEW CPDF_Array(); + pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.left)); + pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.bottom)); + pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.right)); + pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.top)); + pPageDict->SetAt("ArtBox", pCropBox); + } + + CPDF_Dictionary* pRes = NULL; + pRes = pPageDict->GetDict("Resources"); + if (!pRes) { + pRes = FX_NEW CPDF_Dictionary; + pPageDict->SetAt("Resources", pRes); + } + + CPDF_Stream* pNewXObject = + FX_NEW CPDF_Stream(NULL, 0, FX_NEW CPDF_Dictionary); + FX_DWORD dwObjNum = pDocument->AddIndirectObject(pNewXObject); + CPDF_Dictionary* pPageXObject = pRes->GetDict("XObject"); + if (!pPageXObject) { + pPageXObject = FX_NEW CPDF_Dictionary; + pRes->SetAt("XObject", pPageXObject); + } + + CFX_ByteString key = ""; + int nStreams = ObjectArray.GetSize(); + + if (nStreams > 0) { + for (int iKey = 0; /*iKey < 100*/; iKey++) { + char sExtend[5] = {}; + FXSYS_itoa(iKey, sExtend, 10); + key = CFX_ByteString("FFT") + CFX_ByteString(sExtend); + + if (!pPageXObject->KeyExist(key)) + break; + } + } + + SetPageContents(key, pPageDict, pDocument); + + CPDF_Dictionary* pNewXORes = NULL; + + if (!key.IsEmpty()) { + pPageXObject->SetAtReference(key, pDocument, dwObjNum); + CPDF_Dictionary* pNewOXbjectDic = pNewXObject->GetDict(); + pNewXORes = FX_NEW CPDF_Dictionary; + pNewOXbjectDic->SetAt("Resources", pNewXORes); + pNewOXbjectDic->SetAtName("Type", "XObject"); + pNewOXbjectDic->SetAtName("Subtype", "Form"); + pNewOXbjectDic->SetAtInteger("FormType", 1); + pNewOXbjectDic->SetAtName("Name", "FRM"); + CPDF_Rect rcBBox = pPageDict->GetRect("ArtBox"); + pNewOXbjectDic->SetAtRect("BBox", rcBBox); + } + + for (int i = 0; i < nStreams; i++) { + CPDF_Dictionary* pAnnotDic = ObjectArray.GetAt(i); + if (!pAnnotDic) + continue; + + CPDF_Rect rcAnnot = pAnnotDic->GetRect("Rect"); + rcAnnot.Normalize(); + + CFX_ByteString sAnnotState = pAnnotDic->GetString("AS"); + CPDF_Dictionary* pAnnotAP = pAnnotDic->GetDict("AP"); + if (!pAnnotAP) + continue; + + CPDF_Stream* pAPStream = pAnnotAP->GetStream("N"); + if (!pAPStream) { + CPDF_Dictionary* pAPDic = pAnnotAP->GetDict("N"); + if (!pAPDic) + continue; + + if (!sAnnotState.IsEmpty()) { + pAPStream = pAPDic->GetStream(sAnnotState); + } else { + FX_POSITION pos = pAPDic->GetStartPos(); + if (pos) { + CFX_ByteString sKey; + CPDF_Object* pFirstObj = pAPDic->GetNextElement(pos, sKey); + if (pFirstObj) { + if (pFirstObj->GetType() == PDFOBJ_REFERENCE) + pFirstObj = pFirstObj->GetDirect(); + + if (pFirstObj->GetType() != PDFOBJ_STREAM) + continue; + + pAPStream = (CPDF_Stream*)pFirstObj; + } + } + } + } - rcRet.left = GetMinMaxValue(*pRectArray, MIN, LEFT); - rcRet.top = GetMinMaxValue(*pRectArray, MAX, TOP); - rcRet.right = GetMinMaxValue(*pRectArray, MAX, RIGHT); - rcRet.bottom = GetMinMaxValue(*pRectArray, MIN, BOTTOM); + if (!pAPStream) + continue; - return rcRet; -} + CPDF_Dictionary* pAPDic = pAPStream->GetDict(); + CFX_AffineMatrix matrix = pAPDic->GetMatrix("Matrix"); + CPDF_Rect rcStream; + if (pAPDic->KeyExist("Rect")) + rcStream = pAPDic->GetRect("Rect"); + else if (pAPDic->KeyExist("BBox")) + rcStream = pAPDic->GetRect("BBox"); -void SetPageContents(CFX_ByteString key, CPDF_Dictionary* pPage, CPDF_Document* pDocument) -{ - CPDF_Object* pContentsObj = pPage->GetStream("Contents"); - if (!pContentsObj) - { - pContentsObj = pPage->GetArray("Contents"); - } - - if (!pContentsObj) - { - //Create a new contents dictionary - if (!key.IsEmpty()) - { - CPDF_Stream* pNewContents = FX_NEW CPDF_Stream(NULL, 0, FX_NEW CPDF_Dictionary); - if (!pNewContents)return; - pPage->SetAtReference("Contents", pDocument, pDocument->AddIndirectObject(pNewContents)); - - CFX_ByteString sStream; - sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str()); - pNewContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, FALSE); - } - return; - } - - int iType = pContentsObj->GetType(); - CPDF_Array* pContentsArray = NULL; - - switch(iType) - { - case PDFOBJ_STREAM: - { - pContentsArray = FX_NEW CPDF_Array; - CPDF_Stream* pContents = (CPDF_Stream*)pContentsObj; - FX_DWORD dwObjNum = pDocument->AddIndirectObject(pContents); - CPDF_StreamAcc acc; - acc.LoadAllData(pContents); - CFX_ByteString sStream = "q\n"; - CFX_ByteString sBody = CFX_ByteString((const FX_CHAR*)acc.GetData(), acc.GetSize()); - sStream = sStream + sBody + "\nQ"; - pContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, FALSE); - pContentsArray->AddReference(pDocument, dwObjNum); - break; - } - - case PDFOBJ_ARRAY: - { - pContentsArray = (CPDF_Array*)pContentsObj; - break; - } - default: - break; - } - - if (!pContentsArray)return; - - FX_DWORD dwObjNum = pDocument->AddIndirectObject(pContentsArray); - pPage->SetAtReference("Contents", pDocument, dwObjNum); - - if (!key.IsEmpty()) - { - CPDF_Stream* pNewContents = FX_NEW CPDF_Stream(NULL, 0, FX_NEW CPDF_Dictionary); - dwObjNum = pDocument->AddIndirectObject(pNewContents); - pContentsArray->AddReference(pDocument, dwObjNum); - - CFX_ByteString sStream; - sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str()); - pNewContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, FALSE); - } -} + if (rcStream.IsEmpty()) + continue; -CFX_AffineMatrix GetMatrix(CPDF_Rect rcAnnot, CPDF_Rect rcStream, CFX_AffineMatrix matrix) -{ - if(rcStream.IsEmpty()) - return CFX_AffineMatrix(); + CPDF_Object* pObj = pAPStream; - matrix.TransformRect(rcStream); - rcStream.Normalize(); + if (pObj) { + CPDF_Dictionary* pObjDic = pObj->GetDict(); + if (pObjDic) { + pObjDic->SetAtName("Type", "XObject"); + pObjDic->SetAtName("Subtype", "Form"); + } + } - FX_FLOAT a = rcAnnot.Width()/rcStream.Width(); - FX_FLOAT d = rcAnnot.Height()/rcStream.Height(); + CPDF_Dictionary* pXObject = pNewXORes->GetDict("XObject"); + if (!pXObject) { + pXObject = FX_NEW CPDF_Dictionary; + pNewXORes->SetAt("XObject", pXObject); + } - FX_FLOAT e = rcAnnot.left - rcStream.left * a; - FX_FLOAT f = rcAnnot.bottom - rcStream.bottom * d; - return CFX_AffineMatrix(a, 0, 0, d, e, f); -} + CFX_ByteString sFormName; + sFormName.Format("F%d", i); + FX_DWORD dwObjNum = pDocument->AddIndirectObject(pObj); + pXObject->SetAtReference(sFormName, pDocument, dwObjNum); + + CPDF_StreamAcc acc; + acc.LoadAllData(pNewXObject); + + const uint8_t* pData = acc.GetData(); + CFX_ByteString sStream(pData, acc.GetSize()); + CFX_ByteString sTemp; + + if (matrix.IsIdentity()) { + matrix.a = 1.0f; + matrix.b = 0.0f; + matrix.c = 0.0f; + matrix.d = 1.0f; + matrix.e = 0.0f; + matrix.f = 0.0f; + } -void GetOffset(FX_FLOAT& fa, FX_FLOAT& fd, FX_FLOAT& fe, FX_FLOAT& ff, CPDF_Rect rcAnnot, CPDF_Rect rcStream, CFX_AffineMatrix matrix) -{ - FX_FLOAT fStreamWidth = 0.0f; - FX_FLOAT fStreamHeight = 0.0f; - - - - if (matrix.a != 0 && matrix.d != 0) - { - fStreamWidth = rcStream.right - rcStream.left; - fStreamHeight = rcStream.top - rcStream.bottom; - } - else - { - fStreamWidth = rcStream.top - rcStream.bottom; - fStreamHeight = rcStream.right - rcStream.left; - } - - FX_FLOAT x1 = matrix.a * rcStream.left + matrix.c * rcStream.bottom + matrix.e; - FX_FLOAT y1 = matrix.b * rcStream.left + matrix.d * rcStream.bottom + matrix.f; - FX_FLOAT x2 = matrix.a * rcStream.left + matrix.c * rcStream.top + matrix.e; - FX_FLOAT y2 = matrix.b * rcStream.left + matrix.d * rcStream.top + matrix.f; - FX_FLOAT x3 = matrix.a * rcStream.right + matrix.c * rcStream.bottom + matrix.e; - FX_FLOAT y3 = matrix.b * rcStream.right + matrix.d * rcStream.bottom + matrix.f; - FX_FLOAT x4 = matrix.a * rcStream.right + matrix.c * rcStream.top + matrix.e; - FX_FLOAT y4 = matrix.b * rcStream.right + matrix.d * rcStream.top + matrix.f; - - FX_FLOAT left = FX_MIN(FX_MIN(x1, x2), FX_MIN(x3, x4)); - FX_FLOAT bottom = FX_MIN(FX_MIN(y1, y2), FX_MIN(y3, y4)); - - fa = (rcAnnot.right - rcAnnot.left)/fStreamWidth; - fd = (rcAnnot.top - rcAnnot.bottom)/fStreamHeight; - fe = rcAnnot.left - left * fa; - ff = rcAnnot.bottom - bottom * fd; -} + CFX_AffineMatrix m = GetMatrix(rcAnnot, rcStream, matrix); + sTemp.Format("q %f 0 0 %f %f %f cm /%s Do Q\n", m.a, m.d, m.e, m.f, + sFormName.c_str()); + sStream += sTemp; + + pNewXObject->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, + FALSE); + } + pPageDict->RemoveAt("Annots"); + ObjectArray.RemoveAll(); + RectArray.RemoveAll(); -DLLEXPORT int STDCALL FPDFPage_Flatten( FPDF_PAGE page, int nFlag) -{ - if (!page) - { - return FLATTEN_FAIL; - } - - CPDF_Page * pPage = ((CPDFXFA_Page*)( page ))->GetPDFPage(); - if (!pPage) - return FLATTEN_FAIL; - - CPDF_Document * pDocument = pPage->m_pDocument; - CPDF_Dictionary * pPageDict = pPage->m_pFormDict; - - if ( !pDocument || !pPageDict ) - { - return FLATTEN_FAIL; - } - - CPDF_ObjectArray ObjectArray; - CPDF_RectArray RectArray; - - int iRet = FLATTEN_FAIL; - iRet = ParserAnnots( pDocument, pPageDict, &RectArray, &ObjectArray, nFlag); - if (iRet == FLATTEN_NOTHINGTODO || iRet == FLATTEN_FAIL) - return iRet; - - CPDF_Rect rcOriginalCB; - CPDF_Rect rcMerger = CalculateRect( &RectArray ); - CPDF_Rect rcOriginalMB = pPageDict->GetRect("MediaBox"); - - if (pPageDict->KeyExist("CropBox")) - rcOriginalMB = pPageDict->GetRect("CropBox"); - - if (rcOriginalMB.IsEmpty()) - { - rcOriginalMB = CPDF_Rect(0.0f, 0.0f, 612.0f, 792.0f); - } - - rcMerger.left = rcMerger.left < rcOriginalMB.left? rcOriginalMB.left : rcMerger.left; - rcMerger.right = rcMerger.right > rcOriginalMB.right? rcOriginalMB.right : rcMerger.right; - rcMerger.top = rcMerger.top > rcOriginalMB.top? rcOriginalMB.top : rcMerger.top; - rcMerger.bottom = rcMerger.bottom < rcOriginalMB.bottom? rcOriginalMB.bottom : rcMerger.bottom; - - if (pPageDict->KeyExist("ArtBox")) - rcOriginalCB = pPageDict->GetRect("ArtBox"); - else - rcOriginalCB = rcOriginalMB; - - if (!rcOriginalMB.IsEmpty()) - { - CPDF_Array* pMediaBox = FX_NEW CPDF_Array(); - - pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.left)); - pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.bottom)); - pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.right)); - pMediaBox->Add(FX_NEW CPDF_Number(rcOriginalMB.top)); - - pPageDict->SetAt("MediaBox",pMediaBox); - } - - if (!rcOriginalCB.IsEmpty()) - { - CPDF_Array* pCropBox = FX_NEW CPDF_Array(); - pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.left)); - pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.bottom)); - pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.right)); - pCropBox->Add(FX_NEW CPDF_Number(rcOriginalCB.top)); - pPageDict->SetAt("ArtBox", pCropBox); - } - - CPDF_Dictionary* pRes = NULL; - pRes = pPageDict->GetDict("Resources"); - if (!pRes) - { - pRes = FX_NEW CPDF_Dictionary; - pPageDict->SetAt( "Resources", pRes ); - } - - CPDF_Stream* pNewXObject = FX_NEW CPDF_Stream(NULL, 0, FX_NEW CPDF_Dictionary); - FX_DWORD dwObjNum = pDocument->AddIndirectObject(pNewXObject); - CPDF_Dictionary* pPageXObject = pRes->GetDict("XObject"); - if (!pPageXObject) - { - pPageXObject = FX_NEW CPDF_Dictionary; - pRes->SetAt("XObject", pPageXObject); - } - - CFX_ByteString key = ""; - int nStreams = ObjectArray.GetSize(); - - if (nStreams > 0) - { - for (int iKey = 0; /*iKey < 100*/; iKey++) - { - char sExtend[5] = {}; - FXSYS_itoa(iKey, sExtend, 10); - key = CFX_ByteString("FFT") + CFX_ByteString(sExtend); - - if (!pPageXObject->KeyExist(key)) - break; - } - } - - SetPageContents(key, pPageDict, pDocument); - - CPDF_Dictionary* pNewXORes = NULL; - - if (!key.IsEmpty()) - { - pPageXObject->SetAtReference(key, pDocument, dwObjNum); - CPDF_Dictionary* pNewOXbjectDic = pNewXObject->GetDict(); - pNewXORes = FX_NEW CPDF_Dictionary; - pNewOXbjectDic->SetAt("Resources", pNewXORes); - pNewOXbjectDic->SetAtName("Type", "XObject"); - pNewOXbjectDic->SetAtName("Subtype", "Form"); - pNewOXbjectDic->SetAtInteger("FormType", 1); - pNewOXbjectDic->SetAtName("Name", "FRM"); - CPDF_Rect rcBBox = pPageDict->GetRect("ArtBox"); - pNewOXbjectDic->SetAtRect("BBox", rcBBox); - } - - for (int i = 0; i < nStreams; i++) - { - CPDF_Dictionary* pAnnotDic = ObjectArray.GetAt(i); - if (!pAnnotDic)continue; - - CPDF_Rect rcAnnot = pAnnotDic->GetRect("Rect"); - rcAnnot.Normalize(); - - CFX_ByteString sAnnotState = pAnnotDic->GetString("AS"); - CPDF_Dictionary* pAnnotAP = pAnnotDic->GetDict("AP"); - if (!pAnnotAP)continue; - - CPDF_Stream* pAPStream = pAnnotAP->GetStream("N"); - if (!pAPStream) - { - CPDF_Dictionary* pAPDic = pAnnotAP->GetDict("N"); - if (!pAPDic)continue; - - if (!sAnnotState.IsEmpty()) - { - pAPStream = pAPDic->GetStream(sAnnotState); - } - else - { - FX_POSITION pos = pAPDic->GetStartPos(); - if (pos) - { - CFX_ByteString sKey; - CPDF_Object* pFirstObj = pAPDic->GetNextElement(pos, sKey); - if (pFirstObj) - { - if (pFirstObj->GetType() == PDFOBJ_REFERENCE) - pFirstObj = pFirstObj->GetDirect(); - - if (pFirstObj->GetType() != PDFOBJ_STREAM) - continue; - - pAPStream = (CPDF_Stream*)pFirstObj; - } - } - } - } - - if (!pAPStream)continue; - - CPDF_Dictionary* pAPDic = pAPStream->GetDict(); - CFX_AffineMatrix matrix = pAPDic->GetMatrix("Matrix"); - - CPDF_Rect rcStream; - if (pAPDic->KeyExist("Rect")) - rcStream = pAPDic->GetRect("Rect"); - else if (pAPDic->KeyExist("BBox")) - rcStream = pAPDic->GetRect("BBox"); - - if (rcStream.IsEmpty())continue; - - CPDF_Object* pObj = pAPStream; - - if (pObj) - { - CPDF_Dictionary* pObjDic = pObj->GetDict(); - if (pObjDic) - { - pObjDic->SetAtName("Type", "XObject"); - pObjDic->SetAtName("Subtype", "Form"); - } - } - - CPDF_Dictionary* pXObject = pNewXORes->GetDict("XObject"); - if (!pXObject) - { - pXObject = FX_NEW CPDF_Dictionary; - pNewXORes->SetAt("XObject", pXObject); - } - - CFX_ByteString sFormName; - sFormName.Format("F%d", i); - FX_DWORD dwObjNum = pDocument->AddIndirectObject(pObj); - pXObject->SetAtReference(sFormName, pDocument, dwObjNum); - - CPDF_StreamAcc acc; - acc.LoadAllData(pNewXObject); - - const uint8_t* pData = acc.GetData(); - CFX_ByteString sStream(pData, acc.GetSize()); - CFX_ByteString sTemp; - - if (matrix.IsIdentity()) - { - matrix.a = 1.0f; - matrix.b = 0.0f; - matrix.c = 0.0f; - matrix.d = 1.0f; - matrix.e = 0.0f; - matrix.f = 0.0f; - } - - CFX_AffineMatrix m = GetMatrix(rcAnnot, rcStream, matrix); - sTemp.Format("q %f 0 0 %f %f %f cm /%s Do Q\n", m.a, m.d, m.e, m.f, sFormName.c_str()); - sStream += sTemp; - - pNewXObject->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, FALSE); - } - pPageDict->RemoveAt( "Annots" ); - - ObjectArray.RemoveAll(); - RectArray.RemoveAll(); - - return FLATTEN_SUCCESS; + return FLATTEN_SUCCESS; } diff --git a/fpdfsdk/src/fpdf_progressive.cpp b/fpdfsdk/src/fpdf_progressive.cpp index f47cd7dde6..9167a77c46 100644 --- a/fpdfsdk/src/fpdf_progressive.cpp +++ b/fpdfsdk/src/fpdf_progressive.cpp @@ -11,100 +11,104 @@ #include "../include/fpdfxfa/fpdfxfa_doc.h" #include "../include/fpdfxfa/fpdfxfa_page.h" -DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start( FPDF_BITMAP bitmap, FPDF_PAGE page, - int start_x, int start_y, int size_x, - int size_y, int rotate, int flags, - IFSDK_PAUSE * pause ) -{ - if (bitmap == NULL || page == NULL) - return FPDF_RENDER_FAILED; - - if (!pause) - return FPDF_RENDER_FAILED; - - if (pause->version !=1) - return FPDF_RENDER_FAILED; - - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) - return FPDF_RENDER_FAILED; - -// FXMT_CSLOCK_OBJ(&pPage->m_PageLock); - - CRenderContext* pContext = FX_NEW CRenderContext; - pPage->SetPrivateData((void*)1, pContext, DropContext ); +DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap, + FPDF_PAGE page, + int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + int flags, + IFSDK_PAUSE* pause) { + if (bitmap == NULL || page == NULL) + return FPDF_RENDER_FAILED; + + if (!pause) + return FPDF_RENDER_FAILED; + + if (pause->version != 1) + return FPDF_RENDER_FAILED; + + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return FPDF_RENDER_FAILED; + + // FXMT_CSLOCK_OBJ(&pPage->m_PageLock); + + CRenderContext* pContext = FX_NEW CRenderContext; + pPage->SetPrivateData((void*)1, pContext, DropContext); #ifdef _SKIA_SUPPORT_ - pContext->m_pDevice = FX_NEW CFX_SkiaDevice; - if (flags & FPDF_REVERSE_BYTE_ORDER) - ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap,0,TRUE); - else - ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap); + pContext->m_pDevice = FX_NEW CFX_SkiaDevice; + if (flags & FPDF_REVERSE_BYTE_ORDER) + ((CFX_SkiaDevice*)pContext->m_pDevice) + ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE); + else + ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap); #else - pContext->m_pDevice = FX_NEW CFX_FxgeDevice; - if (flags & FPDF_REVERSE_BYTE_ORDER) - ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap,0,TRUE); - else - ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap); + pContext->m_pDevice = FX_NEW CFX_FxgeDevice; + if (flags & FPDF_REVERSE_BYTE_ORDER) + ((CFX_FxgeDevice*)pContext->m_pDevice) + ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE); + else + ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap); #endif - IFSDK_PAUSE_Adapter IPauseAdapter(pause); - - FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, - rotate, flags,FALSE, &IPauseAdapter); - - if ( pContext->m_pRenderer ) - { - CPDF_ProgressiveRenderer::RenderStatus status = CPDF_ProgressiveRenderer::Failed; - status = pContext->m_pRenderer->GetStatus(); - return status; - } - return FPDF_RENDER_FAILED; + IFSDK_PAUSE_Adapter IPauseAdapter(pause); + + FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, + rotate, flags, FALSE, &IPauseAdapter); + + if (pContext->m_pRenderer) { + CPDF_ProgressiveRenderer::RenderStatus status = + CPDF_ProgressiveRenderer::Failed; + status = pContext->m_pRenderer->GetStatus(); + return status; + } + return FPDF_RENDER_FAILED; } -DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page,IFSDK_PAUSE * pause) -{ - if (page == NULL) - return FPDF_RENDER_FAILED; +DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page, + IFSDK_PAUSE* pause) { + if (page == NULL) + return FPDF_RENDER_FAILED; - if (!pause) - return FPDF_RENDER_FAILED; + if (!pause) + return FPDF_RENDER_FAILED; - if (pause->version !=1) - return FPDF_RENDER_FAILED; + if (pause->version != 1) + return FPDF_RENDER_FAILED; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) - return FPDF_RENDER_FAILED; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return FPDF_RENDER_FAILED; -// FXMT_CSLOCK_OBJ(&pPage->m_PageLock); + // FXMT_CSLOCK_OBJ(&pPage->m_PageLock); - CRenderContext * pContext = (CRenderContext*)pPage->GetPrivateData((void*)1); - if (pContext && pContext->m_pRenderer) - { - IFSDK_PAUSE_Adapter IPauseAdapter(pause); - pContext->m_pRenderer->Continue(&IPauseAdapter); + CRenderContext* pContext = (CRenderContext*)pPage->GetPrivateData((void*)1); + if (pContext && pContext->m_pRenderer) { + IFSDK_PAUSE_Adapter IPauseAdapter(pause); + pContext->m_pRenderer->Continue(&IPauseAdapter); - CPDF_ProgressiveRenderer::RenderStatus status = CPDF_ProgressiveRenderer::Failed; - status = pContext->m_pRenderer->GetStatus(); - return status; - } - return FPDF_RENDER_FAILED; + CPDF_ProgressiveRenderer::RenderStatus status = + CPDF_ProgressiveRenderer::Failed; + status = pContext->m_pRenderer->GetStatus(); + return status; + } + return FPDF_RENDER_FAILED; } - -DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page) -{ - if (page == NULL) return; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return; - -// FXMT_CSLOCK_OBJ(&pPage->m_PageLock); - - CRenderContext * pContext = (CRenderContext*)pPage->GetPrivateData((void*)1); - if (pContext) - { - pContext->m_pDevice->RestoreState(); - delete pContext; - pPage->RemovePrivateData((void*)1); - } +DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page) { + if (page == NULL) + return; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return; + + // FXMT_CSLOCK_OBJ(&pPage->m_PageLock); + + CRenderContext* pContext = (CRenderContext*)pPage->GetPrivateData((void*)1); + if (pContext) { + pContext->m_pDevice->RestoreState(); + delete pContext; + pPage->RemovePrivateData((void*)1); + } } - diff --git a/fpdfsdk/src/fpdf_searchex.cpp b/fpdfsdk/src/fpdf_searchex.cpp index e012d30590..9747316305 100644 --- a/fpdfsdk/src/fpdf_searchex.cpp +++ b/fpdfsdk/src/fpdf_searchex.cpp @@ -8,11 +8,9 @@ #include "../../core/include/fpdftext/fpdf_text.h" -DLLEXPORT int STDCALL FPDFText_GetCharIndexFromTextIndex( - FPDF_TEXTPAGE text_page, - int nTextIndex) -{ - if (!text_page) - return -1; - return ((IPDF_TextPage*)text_page)->CharIndexFromTextIndex(nTextIndex); +DLLEXPORT int STDCALL +FPDFText_GetCharIndexFromTextIndex(FPDF_TEXTPAGE text_page, int nTextIndex) { + if (!text_page) + return -1; + return ((IPDF_TextPage*)text_page)->CharIndexFromTextIndex(nTextIndex); } diff --git a/fpdfsdk/src/fpdf_sysfontinfo.cpp b/fpdfsdk/src/fpdf_sysfontinfo.cpp index 6b7d6fbe4c..a0fdb5083d 100644 --- a/fpdfsdk/src/fpdf_sysfontinfo.cpp +++ b/fpdfsdk/src/fpdf_sysfontinfo.cpp @@ -8,167 +8,181 @@ #include "../include/fsdk_define.h" #include "../include/pdfwindow/PWL_FontMap.h" -class CFX_ExternalFontInfo final : public IFX_SystemFontInfo -{ -public: - CFX_ExternalFontInfo(FPDF_SYSFONTINFO* pInfo) : m_pInfo(pInfo) { } - - virtual void Release() override - { - if (m_pInfo->Release) - m_pInfo->Release(m_pInfo); - delete this; - } - - virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper) override - { - if (m_pInfo->EnumFonts) { - m_pInfo->EnumFonts(m_pInfo, pMapper); - return TRUE; - } - return FALSE; - } - - virtual void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* family, int& iExact) override - { - if (m_pInfo->MapFont) - return m_pInfo->MapFont(m_pInfo, weight, bItalic, charset, pitch_family, family, &iExact); - return NULL; - } - - virtual void* GetFont(const FX_CHAR* family) override - { - if (m_pInfo->GetFont) - return m_pInfo->GetFont(m_pInfo, family); - return NULL; - } - - virtual FX_DWORD GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size) override - { - if (m_pInfo->GetFontData) - return m_pInfo->GetFontData(m_pInfo, hFont, table, buffer, size); - return 0; - } - - virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) override - { - if (m_pInfo->GetFaceName == NULL) return FALSE; - FX_DWORD size = m_pInfo->GetFaceName(m_pInfo, hFont, NULL, 0); - if (size == 0) return FALSE; - char* buffer = FX_Alloc(char, size); - size = m_pInfo->GetFaceName(m_pInfo, hFont, buffer, size); - name = CFX_ByteString(buffer, size); - FX_Free(buffer); - return TRUE; - } - - virtual FX_BOOL GetFontCharset(void* hFont, int& charset) override - { - if (m_pInfo->GetFontCharset) { - charset = m_pInfo->GetFontCharset(m_pInfo, hFont); - return TRUE; - } - return FALSE; - } - - virtual void DeleteFont(void* hFont) override - { - if (m_pInfo->DeleteFont) - m_pInfo->DeleteFont(m_pInfo, hFont); - } - -private: - ~CFX_ExternalFontInfo() { } - - FPDF_SYSFONTINFO* const m_pInfo; +class CFX_ExternalFontInfo final : public IFX_SystemFontInfo { + public: + CFX_ExternalFontInfo(FPDF_SYSFONTINFO* pInfo) : m_pInfo(pInfo) {} + + virtual void Release() override { + if (m_pInfo->Release) + m_pInfo->Release(m_pInfo); + delete this; + } + + virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper) override { + if (m_pInfo->EnumFonts) { + m_pInfo->EnumFonts(m_pInfo, pMapper); + return TRUE; + } + return FALSE; + } + + virtual void* MapFont(int weight, + FX_BOOL bItalic, + int charset, + int pitch_family, + const FX_CHAR* family, + int& iExact) override { + if (m_pInfo->MapFont) + return m_pInfo->MapFont(m_pInfo, weight, bItalic, charset, pitch_family, + family, &iExact); + return NULL; + } + + virtual void* GetFont(const FX_CHAR* family) override { + if (m_pInfo->GetFont) + return m_pInfo->GetFont(m_pInfo, family); + return NULL; + } + + virtual FX_DWORD GetFontData(void* hFont, + FX_DWORD table, + uint8_t* buffer, + FX_DWORD size) override { + if (m_pInfo->GetFontData) + return m_pInfo->GetFontData(m_pInfo, hFont, table, buffer, size); + return 0; + } + + virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) override { + if (m_pInfo->GetFaceName == NULL) + return FALSE; + FX_DWORD size = m_pInfo->GetFaceName(m_pInfo, hFont, NULL, 0); + if (size == 0) + return FALSE; + char* buffer = FX_Alloc(char, size); + size = m_pInfo->GetFaceName(m_pInfo, hFont, buffer, size); + name = CFX_ByteString(buffer, size); + FX_Free(buffer); + return TRUE; + } + + virtual FX_BOOL GetFontCharset(void* hFont, int& charset) override { + if (m_pInfo->GetFontCharset) { + charset = m_pInfo->GetFontCharset(m_pInfo, hFont); + return TRUE; + } + return FALSE; + } + + virtual void DeleteFont(void* hFont) override { + if (m_pInfo->DeleteFont) + m_pInfo->DeleteFont(m_pInfo, hFont); + } + + private: + ~CFX_ExternalFontInfo() {} + + FPDF_SYSFONTINFO* const m_pInfo; }; -DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper, const char* name, int charset) -{ - ((CFX_FontMapper*)mapper)->AddInstalledFont(name, charset); +DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper, + const char* name, + int charset) { + ((CFX_FontMapper*)mapper)->AddInstalledFont(name, charset); } -DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfoExt) -{ - if (pFontInfoExt->version != 1) - return; +DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfoExt) { + if (pFontInfoExt->version != 1) + return; - CFX_GEModule::Get()->GetFontMgr()->SetSystemFontInfo( - new CFX_ExternalFontInfo(pFontInfoExt)); + CFX_GEModule::Get()->GetFontMgr()->SetSystemFontInfo( + new CFX_ExternalFontInfo(pFontInfoExt)); } -DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap() -{ - return CPWL_FontMap::defaultTTFMap; +DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap() { + return CPWL_FontMap::defaultTTFMap; } -struct FPDF_SYSFONTINFO_DEFAULT : public FPDF_SYSFONTINFO -{ - IFX_SystemFontInfo* m_pFontInfo; +struct FPDF_SYSFONTINFO_DEFAULT : public FPDF_SYSFONTINFO { + IFX_SystemFontInfo* m_pFontInfo; }; -static void DefaultRelease(struct _FPDF_SYSFONTINFO* pThis) -{ - ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->Release(); +static void DefaultRelease(struct _FPDF_SYSFONTINFO* pThis) { + ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->Release(); } -static void DefaultEnumFonts(struct _FPDF_SYSFONTINFO* pThis, void* pMapper) -{ - ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->EnumFontList((CFX_FontMapper*)pMapper); +static void DefaultEnumFonts(struct _FPDF_SYSFONTINFO* pThis, void* pMapper) { + ((FPDF_SYSFONTINFO_DEFAULT*)pThis) + ->m_pFontInfo->EnumFontList((CFX_FontMapper*)pMapper); } -static void* DefaultMapFont(struct _FPDF_SYSFONTINFO* pThis, int weight, int bItalic, int charset, int pitch_family, const char* family, int* bExact) -{ - return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->MapFont(weight, bItalic, charset, pitch_family, family, *bExact); +static void* DefaultMapFont(struct _FPDF_SYSFONTINFO* pThis, + int weight, + int bItalic, + int charset, + int pitch_family, + const char* family, + int* bExact) { + return ((FPDF_SYSFONTINFO_DEFAULT*)pThis) + ->m_pFontInfo->MapFont(weight, bItalic, charset, pitch_family, family, + *bExact); } -void* DefaultGetFont(struct _FPDF_SYSFONTINFO* pThis, const char* family) -{ - return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFont(family); +void* DefaultGetFont(struct _FPDF_SYSFONTINFO* pThis, const char* family) { + return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFont(family); } -static unsigned long DefaultGetFontData(struct _FPDF_SYSFONTINFO* pThis, void* hFont, - unsigned int table, unsigned char* buffer, unsigned long buf_size) -{ - return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFontData(hFont, table, buffer, buf_size); +static unsigned long DefaultGetFontData(struct _FPDF_SYSFONTINFO* pThis, + void* hFont, + unsigned int table, + unsigned char* buffer, + unsigned long buf_size) { + return ((FPDF_SYSFONTINFO_DEFAULT*)pThis) + ->m_pFontInfo->GetFontData(hFont, table, buffer, buf_size); } -static unsigned long DefaultGetFaceName(struct _FPDF_SYSFONTINFO* pThis, void* hFont, char* buffer, unsigned long buf_size) -{ - CFX_ByteString name; - if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFaceName(hFont, name)) return 0; - if (name.GetLength() >= (long)buf_size) return name.GetLength() + 1; - FXSYS_strcpy(buffer, name); - return name.GetLength() + 1; +static unsigned long DefaultGetFaceName(struct _FPDF_SYSFONTINFO* pThis, + void* hFont, + char* buffer, + unsigned long buf_size) { + CFX_ByteString name; + if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis) + ->m_pFontInfo->GetFaceName(hFont, name)) + return 0; + if (name.GetLength() >= (long)buf_size) + return name.GetLength() + 1; + FXSYS_strcpy(buffer, name); + return name.GetLength() + 1; } -static int DefaultGetFontCharset(struct _FPDF_SYSFONTINFO* pThis, void* hFont) -{ - int charset; - if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFontCharset(hFont, charset)) return 0; - return charset; +static int DefaultGetFontCharset(struct _FPDF_SYSFONTINFO* pThis, void* hFont) { + int charset; + if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis) + ->m_pFontInfo->GetFontCharset(hFont, charset)) + return 0; + return charset; } -static void DefaultDeleteFont(struct _FPDF_SYSFONTINFO* pThis, void* hFont) -{ - ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->DeleteFont(hFont); +static void DefaultDeleteFont(struct _FPDF_SYSFONTINFO* pThis, void* hFont) { + ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->DeleteFont(hFont); } -DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo() -{ - IFX_SystemFontInfo* pFontInfo = IFX_SystemFontInfo::CreateDefault(); - if (pFontInfo == NULL) return NULL; - - FPDF_SYSFONTINFO_DEFAULT* pFontInfoExt = FX_Alloc(FPDF_SYSFONTINFO_DEFAULT, 1); - pFontInfoExt->DeleteFont = DefaultDeleteFont; - pFontInfoExt->EnumFonts = DefaultEnumFonts; - pFontInfoExt->GetFaceName = DefaultGetFaceName; - pFontInfoExt->GetFont = DefaultGetFont; - pFontInfoExt->GetFontCharset = DefaultGetFontCharset; - pFontInfoExt->GetFontData = DefaultGetFontData; - pFontInfoExt->MapFont = DefaultMapFont; - pFontInfoExt->Release = DefaultRelease; - pFontInfoExt->version = 1; - pFontInfoExt->m_pFontInfo = pFontInfo; - return pFontInfoExt; +DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo() { + IFX_SystemFontInfo* pFontInfo = IFX_SystemFontInfo::CreateDefault(); + if (pFontInfo == NULL) + return NULL; + + FPDF_SYSFONTINFO_DEFAULT* pFontInfoExt = + FX_Alloc(FPDF_SYSFONTINFO_DEFAULT, 1); + pFontInfoExt->DeleteFont = DefaultDeleteFont; + pFontInfoExt->EnumFonts = DefaultEnumFonts; + pFontInfoExt->GetFaceName = DefaultGetFaceName; + pFontInfoExt->GetFont = DefaultGetFont; + pFontInfoExt->GetFontCharset = DefaultGetFontCharset; + pFontInfoExt->GetFontData = DefaultGetFontData; + pFontInfoExt->MapFont = DefaultMapFont; + pFontInfoExt->Release = DefaultRelease; + pFontInfoExt->version = 1; + pFontInfoExt->m_pFontInfo = pFontInfo; + return pFontInfoExt; } diff --git a/fpdfsdk/src/fpdf_transformpage.cpp b/fpdfsdk/src/fpdf_transformpage.cpp index e49d74e1cb..ad5f7fd37b 100644 --- a/fpdfsdk/src/fpdf_transformpage.cpp +++ b/fpdfsdk/src/fpdf_transformpage.cpp @@ -9,326 +9,332 @@ #include "../include/fpdfxfa/fpdfxfa_doc.h" #include "../include/fpdfxfa/fpdfxfa_page.h" -DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page, float left, float bottom, float right, float top) -{ - if(!page) - return; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return; - CPDF_Dictionary* pPageDict = pPage->m_pFormDict; - CPDF_Array* pMediaBoxArray = FX_NEW CPDF_Array; - pMediaBoxArray->Add(FX_NEW CPDF_Number(left)); - pMediaBoxArray->Add(FX_NEW CPDF_Number(bottom)); - pMediaBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(right))); - pMediaBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(top))); - - pPageDict->SetAt("MediaBox", pMediaBoxArray); +DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page, + float left, + float bottom, + float right, + float top) { + if (!page) + return; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return; + CPDF_Dictionary* pPageDict = pPage->m_pFormDict; + CPDF_Array* pMediaBoxArray = FX_NEW CPDF_Array; + pMediaBoxArray->Add(FX_NEW CPDF_Number(left)); + pMediaBoxArray->Add(FX_NEW CPDF_Number(bottom)); + pMediaBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(right))); + pMediaBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(top))); + + pPageDict->SetAt("MediaBox", pMediaBoxArray); } - -DLLEXPORT void STDCALL FPDFPage_SetCropBox(FPDF_PAGE page, float left, float bottom, float right, float top) -{ - if(!page) - return; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return; - CPDF_Dictionary* pPageDict = pPage->m_pFormDict; - CPDF_Array* pCropBoxArray = FX_NEW CPDF_Array; - pCropBoxArray->Add(FX_NEW CPDF_Number(left)); - pCropBoxArray->Add(FX_NEW CPDF_Number(bottom)); - pCropBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(right))); - pCropBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(top))); - - - pPageDict->SetAt("CropBox", pCropBoxArray); +DLLEXPORT void STDCALL FPDFPage_SetCropBox(FPDF_PAGE page, + float left, + float bottom, + float right, + float top) { + if (!page) + return; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return; + CPDF_Dictionary* pPageDict = pPage->m_pFormDict; + CPDF_Array* pCropBoxArray = FX_NEW CPDF_Array; + pCropBoxArray->Add(FX_NEW CPDF_Number(left)); + pCropBoxArray->Add(FX_NEW CPDF_Number(bottom)); + pCropBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(right))); + pCropBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(top))); + + pPageDict->SetAt("CropBox", pCropBoxArray); } - -DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page, float* left, float* bottom, float* right, float* top) -{ - if(!page) - return FALSE; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return FALSE; - CPDF_Dictionary* pPageDict = pPage->m_pFormDict; - CPDF_Array* pArray = pPageDict->GetArray("MediaBox"); - if(pArray) - { - *left = pArray->GetFloat(0); - *bottom = pArray->GetFloat(1); - *right = pArray->GetFloat(2); - *top = pArray->GetFloat(3); - return TRUE; - } - return FALSE; +DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page, + float* left, + float* bottom, + float* right, + float* top) { + if (!page) + return FALSE; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return FALSE; + CPDF_Dictionary* pPageDict = pPage->m_pFormDict; + CPDF_Array* pArray = pPageDict->GetArray("MediaBox"); + if (pArray) { + *left = pArray->GetFloat(0); + *bottom = pArray->GetFloat(1); + *right = pArray->GetFloat(2); + *top = pArray->GetFloat(3); + return TRUE; + } + return FALSE; } -DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page, float* left, float* bottom, float* right, float* top) -{ - if(!page) - return FALSE; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return FALSE; - CPDF_Dictionary* pPageDict = pPage->m_pFormDict; - CPDF_Array* pArray = pPageDict->GetArray("CropBox"); - if(pArray) - { - *left = pArray->GetFloat(0); - *bottom = pArray->GetFloat(1); - *right = pArray->GetFloat(2); - *top = pArray->GetFloat(3); - return TRUE; - } - return FALSE; +DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page, + float* left, + float* bottom, + float* right, + float* top) { + if (!page) + return FALSE; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return FALSE; + CPDF_Dictionary* pPageDict = pPage->m_pFormDict; + CPDF_Array* pArray = pPageDict->GetArray("CropBox"); + if (pArray) { + *left = pArray->GetFloat(0); + *bottom = pArray->GetFloat(1); + *right = pArray->GetFloat(2); + *top = pArray->GetFloat(3); + return TRUE; + } + return FALSE; } -DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, FS_MATRIX* matrix, FS_RECTF* clipRect) -{ - if(!page) - return FALSE; - - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) - return FALSE; - - CFX_ByteTextBuf textBuf; - textBuf<<"q "; - CFX_FloatRect rect(clipRect->left, clipRect->bottom, clipRect->right, clipRect->top); - rect.Normalize(); - CFX_ByteString bsClipping; - bsClipping.Format("%f %f %f %f re W* n ", rect.left, rect.bottom, rect.Width(), rect.Height()); - textBuf<a, matrix->b,matrix->c,matrix->d,matrix->e,matrix->f); - textBuf<m_pFormDict; - CPDF_Object* pContentObj = pPageDic ? pPageDic->GetElement("Contents") : NULL; - if(!pContentObj) - pContentObj = pPageDic ? pPageDic->GetArray("Contents") : NULL; - if(!pContentObj) - return FALSE; - - CPDF_Dictionary* pDic = FX_NEW CPDF_Dictionary; - CPDF_Stream* pStream = FX_NEW CPDF_Stream(NULL,0, pDic); - pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize(), FALSE, FALSE); - CPDF_Document* pDoc = pPage->m_pDocument; - if(!pDoc) - return FALSE; - pDoc->AddIndirectObject(pStream); - - pDic = new CPDF_Dictionary; - CPDF_Stream* pEndStream = new CPDF_Stream(NULL,0, pDic); - pEndStream->SetData((const uint8_t*)" Q", 2, FALSE, FALSE); - pDoc->AddIndirectObject(pEndStream); - - CPDF_Array* pContentArray = NULL; - if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY) - { - pContentArray = (CPDF_Array*)pContentObj; - CPDF_Reference* pRef = FX_NEW CPDF_Reference(pDoc, pStream->GetObjNum()); - pContentArray->InsertAt(0, pRef); - pContentArray->AddReference(pDoc,pEndStream); - - } - else if(pContentObj && pContentObj->GetType() == PDFOBJ_REFERENCE) - { - CPDF_Reference* pReference = (CPDF_Reference*)pContentObj; - CPDF_Object* pDirectObj = pReference->GetDirect(); - if(pDirectObj != NULL) - { - if(pDirectObj->GetType() == PDFOBJ_ARRAY) - { - pContentArray = (CPDF_Array*)pDirectObj; - CPDF_Reference* pRef = FX_NEW CPDF_Reference(pDoc, pStream->GetObjNum()); - pContentArray->InsertAt(0, pRef); - pContentArray->AddReference(pDoc,pEndStream); - - } - else if(pDirectObj->GetType() == PDFOBJ_STREAM) - { - pContentArray = FX_NEW CPDF_Array(); - pContentArray->AddReference(pDoc,pStream->GetObjNum()); - pContentArray->AddReference(pDoc,pDirectObj->GetObjNum()); - pContentArray->AddReference(pDoc, pEndStream); - pPageDic->SetAtReference("Contents", pDoc, pDoc->AddIndirectObject(pContentArray)); - } - } - } - - //Need to transform the patterns as well. - CPDF_Dictionary* pRes = pPageDic->GetDict(FX_BSTRC("Resources")); - if(pRes) - { - CPDF_Dictionary* pPattenDict = pRes->GetDict(FX_BSTRC("Pattern")); - if(pPattenDict) - { - FX_POSITION pos = pPattenDict->GetStartPos(); - while(pos) - { - CPDF_Dictionary* pDict = NULL; - CFX_ByteString key; - CPDF_Object* pObj = pPattenDict->GetNextElement(pos, key); - if(pObj->GetType() == PDFOBJ_REFERENCE) - pObj = pObj->GetDirect(); - if(pObj->GetType() == PDFOBJ_DICTIONARY) - { - pDict = (CPDF_Dictionary*)pObj; - } - else if(pObj->GetType() == PDFOBJ_STREAM) - { - pDict = ((CPDF_Stream*)pObj)->GetDict(); - } - else - continue; - - CFX_AffineMatrix m = pDict->GetMatrix(FX_BSTRC("Matrix")); - CFX_AffineMatrix t = *(CFX_AffineMatrix*)matrix; - m.Concat(t); - pDict->SetAtMatrix(FX_BSTRC("Matrix"), m); - } - } - } - - return TRUE; +DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, + FS_MATRIX* matrix, + FS_RECTF* clipRect) { + if (!page) + return FALSE; + + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return FALSE; + + CFX_ByteTextBuf textBuf; + textBuf << "q "; + CFX_FloatRect rect(clipRect->left, clipRect->bottom, clipRect->right, + clipRect->top); + rect.Normalize(); + CFX_ByteString bsClipping; + bsClipping.Format("%f %f %f %f re W* n ", rect.left, rect.bottom, + rect.Width(), rect.Height()); + textBuf << bsClipping; + + CFX_ByteString bsMatix; + bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b, matrix->c, + matrix->d, matrix->e, matrix->f); + textBuf << bsMatix; + + CPDF_Dictionary* pPageDic = pPage->m_pFormDict; + CPDF_Object* pContentObj = pPageDic ? pPageDic->GetElement("Contents") : NULL; + if (!pContentObj) + pContentObj = pPageDic ? pPageDic->GetArray("Contents") : NULL; + if (!pContentObj) + return FALSE; + + CPDF_Dictionary* pDic = FX_NEW CPDF_Dictionary; + CPDF_Stream* pStream = FX_NEW CPDF_Stream(NULL, 0, pDic); + pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize(), FALSE, FALSE); + CPDF_Document* pDoc = pPage->m_pDocument; + if (!pDoc) + return FALSE; + pDoc->AddIndirectObject(pStream); + + pDic = new CPDF_Dictionary; + CPDF_Stream* pEndStream = new CPDF_Stream(NULL, 0, pDic); + pEndStream->SetData((const uint8_t*)" Q", 2, FALSE, FALSE); + pDoc->AddIndirectObject(pEndStream); + + CPDF_Array* pContentArray = NULL; + if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY) { + pContentArray = (CPDF_Array*)pContentObj; + CPDF_Reference* pRef = FX_NEW CPDF_Reference(pDoc, pStream->GetObjNum()); + pContentArray->InsertAt(0, pRef); + pContentArray->AddReference(pDoc, pEndStream); + + } else if (pContentObj && pContentObj->GetType() == PDFOBJ_REFERENCE) { + CPDF_Reference* pReference = (CPDF_Reference*)pContentObj; + CPDF_Object* pDirectObj = pReference->GetDirect(); + if (pDirectObj != NULL) { + if (pDirectObj->GetType() == PDFOBJ_ARRAY) { + pContentArray = (CPDF_Array*)pDirectObj; + CPDF_Reference* pRef = + FX_NEW CPDF_Reference(pDoc, pStream->GetObjNum()); + pContentArray->InsertAt(0, pRef); + pContentArray->AddReference(pDoc, pEndStream); + + } else if (pDirectObj->GetType() == PDFOBJ_STREAM) { + pContentArray = FX_NEW CPDF_Array(); + pContentArray->AddReference(pDoc, pStream->GetObjNum()); + pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); + pContentArray->AddReference(pDoc, pEndStream); + pPageDic->SetAtReference("Contents", pDoc, + pDoc->AddIndirectObject(pContentArray)); + } + } + } + + // Need to transform the patterns as well. + CPDF_Dictionary* pRes = pPageDic->GetDict(FX_BSTRC("Resources")); + if (pRes) { + CPDF_Dictionary* pPattenDict = pRes->GetDict(FX_BSTRC("Pattern")); + if (pPattenDict) { + FX_POSITION pos = pPattenDict->GetStartPos(); + while (pos) { + CPDF_Dictionary* pDict = NULL; + CFX_ByteString key; + CPDF_Object* pObj = pPattenDict->GetNextElement(pos, key); + if (pObj->GetType() == PDFOBJ_REFERENCE) + pObj = pObj->GetDirect(); + if (pObj->GetType() == PDFOBJ_DICTIONARY) { + pDict = (CPDF_Dictionary*)pObj; + } else if (pObj->GetType() == PDFOBJ_STREAM) { + pDict = ((CPDF_Stream*)pObj)->GetDict(); + } else + continue; + + CFX_AffineMatrix m = pDict->GetMatrix(FX_BSTRC("Matrix")); + CFX_AffineMatrix t = *(CFX_AffineMatrix*)matrix; + m.Concat(t); + pDict->SetAtMatrix(FX_BSTRC("Matrix"), m); + } + } + } + + return TRUE; } -DLLEXPORT void STDCALL FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object,double a, double b, double c, double d, double e, double f) -{ - CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object; - if(pPageObj == NULL) - return; - CFX_AffineMatrix matrix((FX_FLOAT)a,(FX_FLOAT)b,(FX_FLOAT)c,(FX_FLOAT)d,(FX_FLOAT)e,(FX_FLOAT)f); - - //Special treatment to shading object, because the ClipPath for shading object is already transformed. - if(pPageObj->m_Type != PDFPAGE_SHADING) - pPageObj->TransformClipPath(matrix); - pPageObj->TransformGeneralState(matrix); +DLLEXPORT void STDCALL +FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object, + double a, + double b, + double c, + double d, + double e, + double f) { + CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object; + if (pPageObj == NULL) + return; + CFX_AffineMatrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d, + (FX_FLOAT)e, (FX_FLOAT)f); + + // Special treatment to shading object, because the ClipPath for shading + // object is already transformed. + if (pPageObj->m_Type != PDFPAGE_SHADING) + pPageObj->TransformClipPath(matrix); + pPageObj->TransformGeneralState(matrix); } - -DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left, float bottom, float right, float top) -{ - CPDF_ClipPath* pNewClipPath = FX_NEW CPDF_ClipPath(); - pNewClipPath->GetModify(); - CPDF_Path Path; - Path.GetModify(); - Path.AppendRect(left, bottom, right, top); - pNewClipPath->AppendPath(Path, FXFILL_ALTERNATE, FALSE); - return pNewClipPath; +DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left, + float bottom, + float right, + float top) { + CPDF_ClipPath* pNewClipPath = FX_NEW CPDF_ClipPath(); + pNewClipPath->GetModify(); + CPDF_Path Path; + Path.GetModify(); + Path.AppendRect(left, bottom, right, top); + pNewClipPath->AppendPath(Path, FXFILL_ALTERNATE, FALSE); + return pNewClipPath; } -DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath) -{ - delete (CPDF_ClipPath*)clipPath; +DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath) { + delete (CPDF_ClipPath*)clipPath; } -void OutputPath(CFX_ByteTextBuf& buf, CPDF_Path path) -{ - const CFX_PathData* pPathData = path; - if (pPathData == NULL) return; - - FX_PATHPOINT* pPoints = pPathData->GetPoints(); - - if (path.IsRect()) { - buf << (pPoints[0].m_PointX) << " " << (pPoints[0].m_PointY) << " " - << (pPoints[2].m_PointX - pPoints[0].m_PointX) << " " - << (pPoints[2].m_PointY - pPoints[0].m_PointY) << " re\n"; - return; - } - - CFX_ByteString temp; - for (int i = 0; i < pPathData->GetPointCount(); i ++) { - buf << (pPoints[i].m_PointX) << " " << (pPoints[i].m_PointY); - int point_type = pPoints[i].m_Flag & FXPT_TYPE; - if (point_type == FXPT_MOVETO) - buf << " m\n"; - else if (point_type == FXPT_BEZIERTO) { - buf << " " << (pPoints[i+1].m_PointX) << " " << (pPoints[i+1].m_PointY) << " " << - (pPoints[i+2].m_PointX) << " " << (pPoints[i+2].m_PointY); - if (pPoints[i+2].m_Flag & FXPT_CLOSEFIGURE) - buf << " c h\n"; - else - buf << " c\n"; - i += 2; - } else if (point_type == FXPT_LINETO) { - if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE) - buf << " l h\n"; - else - buf << " l\n"; - } - } +void OutputPath(CFX_ByteTextBuf& buf, CPDF_Path path) { + const CFX_PathData* pPathData = path; + if (pPathData == NULL) + return; + + FX_PATHPOINT* pPoints = pPathData->GetPoints(); + + if (path.IsRect()) { + buf << (pPoints[0].m_PointX) << " " << (pPoints[0].m_PointY) << " " + << (pPoints[2].m_PointX - pPoints[0].m_PointX) << " " + << (pPoints[2].m_PointY - pPoints[0].m_PointY) << " re\n"; + return; + } + + CFX_ByteString temp; + for (int i = 0; i < pPathData->GetPointCount(); i++) { + buf << (pPoints[i].m_PointX) << " " << (pPoints[i].m_PointY); + int point_type = pPoints[i].m_Flag & FXPT_TYPE; + if (point_type == FXPT_MOVETO) + buf << " m\n"; + else if (point_type == FXPT_BEZIERTO) { + buf << " " << (pPoints[i + 1].m_PointX) << " " + << (pPoints[i + 1].m_PointY) << " " << (pPoints[i + 2].m_PointX) + << " " << (pPoints[i + 2].m_PointY); + if (pPoints[i + 2].m_Flag & FXPT_CLOSEFIGURE) + buf << " c h\n"; + else + buf << " c\n"; + i += 2; + } else if (point_type == FXPT_LINETO) { + if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE) + buf << " l h\n"; + else + buf << " l\n"; + } + } } -DLLEXPORT void STDCALL FPDFPage_InsertClipPath(FPDF_PAGE page,FPDF_CLIPPATH clipPath) -{ - if(!page) - return; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return; - CPDF_Dictionary* pPageDic = pPage->m_pFormDict; - CPDF_Object* pContentObj = pPageDic ? pPageDic->GetElement("Contents") : NULL; - if(!pContentObj) - pContentObj = pPageDic ? pPageDic->GetArray("Contents") : NULL; - if(!pContentObj) - return; - - CFX_ByteTextBuf strClip; - CPDF_ClipPath* pClipPath = (CPDF_ClipPath*)clipPath; - FX_DWORD i; - for (i = 0; i < pClipPath->GetPathCount(); i ++) { - CPDF_Path path = pClipPath->GetPath(i); - int iClipType = pClipPath->GetClipType(i); - if (path.GetPointCount() == 0) { - // Empty clipping (totally clipped out) - strClip << "0 0 m W n "; - } else { - OutputPath(strClip, path); - if (iClipType == FXFILL_WINDING) - strClip << "W n\n"; - else - strClip << "W* n\n"; - } - } - CPDF_Dictionary* pDic = FX_NEW CPDF_Dictionary; - CPDF_Stream* pStream = FX_NEW CPDF_Stream(NULL,0, pDic); - pStream->SetData(strClip.GetBuffer(), strClip.GetSize(), FALSE, FALSE); - CPDF_Document* pDoc = pPage->m_pDocument; - if(!pDoc) - return; - pDoc->AddIndirectObject(pStream); - - CPDF_Array* pContentArray = NULL; - if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY) - { - pContentArray = (CPDF_Array*)pContentObj; - CPDF_Reference* pRef = FX_NEW CPDF_Reference(pDoc, pStream->GetObjNum()); - pContentArray->InsertAt(0, pRef); - - } - else if(pContentObj && pContentObj->GetType() == PDFOBJ_REFERENCE) - { - CPDF_Reference* pReference = (CPDF_Reference*)pContentObj; - CPDF_Object* pDirectObj = pReference->GetDirect(); - if(pDirectObj != NULL) - { - if(pDirectObj->GetType() == PDFOBJ_ARRAY) - { - pContentArray = (CPDF_Array*)pDirectObj; - CPDF_Reference* pRef = FX_NEW CPDF_Reference(pDoc, pStream->GetObjNum()); - pContentArray->InsertAt(0, pRef); - - } - else if(pDirectObj->GetType() == PDFOBJ_STREAM) - { - pContentArray = FX_NEW CPDF_Array(); - pContentArray->AddReference(pDoc,pStream->GetObjNum()); - pContentArray->AddReference(pDoc,pDirectObj->GetObjNum()); - pPageDic->SetAtReference("Contents", pDoc, pDoc->AddIndirectObject(pContentArray)); - } - } - } +DLLEXPORT void STDCALL FPDFPage_InsertClipPath(FPDF_PAGE page, + FPDF_CLIPPATH clipPath) { + if (!page) + return; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return; + CPDF_Dictionary* pPageDic = pPage->m_pFormDict; + CPDF_Object* pContentObj = pPageDic ? pPageDic->GetElement("Contents") : NULL; + if (!pContentObj) + pContentObj = pPageDic ? pPageDic->GetArray("Contents") : NULL; + if (!pContentObj) + return; + + CFX_ByteTextBuf strClip; + CPDF_ClipPath* pClipPath = (CPDF_ClipPath*)clipPath; + FX_DWORD i; + for (i = 0; i < pClipPath->GetPathCount(); i++) { + CPDF_Path path = pClipPath->GetPath(i); + int iClipType = pClipPath->GetClipType(i); + if (path.GetPointCount() == 0) { + // Empty clipping (totally clipped out) + strClip << "0 0 m W n "; + } else { + OutputPath(strClip, path); + if (iClipType == FXFILL_WINDING) + strClip << "W n\n"; + else + strClip << "W* n\n"; + } + } + CPDF_Dictionary* pDic = FX_NEW CPDF_Dictionary; + CPDF_Stream* pStream = FX_NEW CPDF_Stream(NULL, 0, pDic); + pStream->SetData(strClip.GetBuffer(), strClip.GetSize(), FALSE, FALSE); + CPDF_Document* pDoc = pPage->m_pDocument; + if (!pDoc) + return; + pDoc->AddIndirectObject(pStream); + + CPDF_Array* pContentArray = NULL; + if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY) { + pContentArray = (CPDF_Array*)pContentObj; + CPDF_Reference* pRef = FX_NEW CPDF_Reference(pDoc, pStream->GetObjNum()); + pContentArray->InsertAt(0, pRef); + + } else if (pContentObj && pContentObj->GetType() == PDFOBJ_REFERENCE) { + CPDF_Reference* pReference = (CPDF_Reference*)pContentObj; + CPDF_Object* pDirectObj = pReference->GetDirect(); + if (pDirectObj != NULL) { + if (pDirectObj->GetType() == PDFOBJ_ARRAY) { + pContentArray = (CPDF_Array*)pDirectObj; + CPDF_Reference* pRef = + FX_NEW CPDF_Reference(pDoc, pStream->GetObjNum()); + pContentArray->InsertAt(0, pRef); + + } else if (pDirectObj->GetType() == PDFOBJ_STREAM) { + pContentArray = FX_NEW CPDF_Array(); + pContentArray->AddReference(pDoc, pStream->GetObjNum()); + pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); + pPageDic->SetAtReference("Contents", pDoc, + pDoc->AddIndirectObject(pContentArray)); + } + } + } } - diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp index 5128847e87..4688e49412 100644 --- a/fpdfsdk/src/fpdfdoc.cpp +++ b/fpdfsdk/src/fpdfdoc.cpp @@ -11,289 +11,293 @@ static int THISMODULE = 0; -static CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree, CPDF_Bookmark bookmark, const CFX_WideString& title) -{ - if (bookmark && bookmark.GetTitle().CompareNoCase(title.c_str()) == 0) { - // First check this item - return bookmark; - } - // go into children items - CPDF_Bookmark child = tree.GetFirstChild(bookmark); - while (child) { - // check if this item - CPDF_Bookmark found = FindBookmark(tree, child, title); - if (found) - return found; - child = tree.GetNextSibling(child); - } - return CPDF_Bookmark(); +static CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree, + CPDF_Bookmark bookmark, + const CFX_WideString& title) { + if (bookmark && bookmark.GetTitle().CompareNoCase(title.c_str()) == 0) { + // First check this item + return bookmark; + } + // go into children items + CPDF_Bookmark child = tree.GetFirstChild(bookmark); + while (child) { + // check if this item + CPDF_Bookmark found = FindBookmark(tree, child, title); + if (found) + return found; + child = tree.GetNextSibling(child); + } + return CPDF_Bookmark(); } -DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) -{ - if (!document || !pDict) - return NULL; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_BookmarkTree tree(pDoc); - CPDF_Bookmark bookmark = CPDF_Bookmark((CPDF_Dictionary*)pDict); - return tree.GetFirstChild(bookmark).GetDict(); +DLLEXPORT FPDF_BOOKMARK STDCALL +FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) { + if (!document || !pDict) + return NULL; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + CPDF_BookmarkTree tree(pDoc); + CPDF_Bookmark bookmark = CPDF_Bookmark((CPDF_Dictionary*)pDict); + return tree.GetFirstChild(bookmark).GetDict(); } -DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) -{ - if (!document || !pDict) - return NULL; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_BookmarkTree tree(pDoc); - CPDF_Bookmark bookmark = CPDF_Bookmark((CPDF_Dictionary*)pDict); - return tree.GetNextSibling(bookmark).GetDict(); +DLLEXPORT FPDF_BOOKMARK STDCALL +FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) { + if (!document || !pDict) + return NULL; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + CPDF_BookmarkTree tree(pDoc); + CPDF_Bookmark bookmark = CPDF_Bookmark((CPDF_Dictionary*)pDict); + return tree.GetNextSibling(bookmark).GetDict(); } -DLLEXPORT unsigned long STDCALL FPDFBookmark_GetTitle(FPDF_BOOKMARK pDict, void* buffer, unsigned long buflen) -{ - if (!pDict) - return 0; - CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); - CFX_WideString title = bookmark.GetTitle(); - CFX_ByteString encodedTitle = title.UTF16LE_Encode(); - unsigned long len = encodedTitle.GetLength(); - if (buffer && buflen >= len) { - FXSYS_memcpy(buffer, encodedTitle.c_str(), len); - } - return len; +DLLEXPORT unsigned long STDCALL FPDFBookmark_GetTitle(FPDF_BOOKMARK pDict, + void* buffer, + unsigned long buflen) { + if (!pDict) + return 0; + CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); + CFX_WideString title = bookmark.GetTitle(); + CFX_ByteString encodedTitle = title.UTF16LE_Encode(); + unsigned long len = encodedTitle.GetLength(); + if (buffer && buflen >= len) { + FXSYS_memcpy(buffer, encodedTitle.c_str(), len); + } + return len; } -DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document, FPDF_WIDESTRING title) -{ - if (!document) - return NULL; - if (!title || title[0] == 0) - return NULL; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_BookmarkTree tree(pDoc); - FX_STRSIZE len = CFX_WideString::WStringLength(title); - CFX_WideString encodedTitle = CFX_WideString::FromUTF16LE(title, len); - return FindBookmark(tree, CPDF_Bookmark(), encodedTitle).GetDict(); +DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document, + FPDF_WIDESTRING title) { + if (!document) + return NULL; + if (!title || title[0] == 0) + return NULL; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + CPDF_BookmarkTree tree(pDoc); + FX_STRSIZE len = CFX_WideString::WStringLength(title); + CFX_WideString encodedTitle = CFX_WideString::FromUTF16LE(title, len); + return FindBookmark(tree, CPDF_Bookmark(), encodedTitle).GetDict(); } -DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) -{ - if (!document) - return NULL; - if (!pDict) - return NULL; - CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); - CPDF_Document* pDoc = (CPDF_Document*)document; - CPDF_Dest dest = bookmark.GetDest(pDoc); - if (dest) - return dest.GetObject(); - // If this bookmark is not directly associated with a dest, we try to get action - CPDF_Action action = bookmark.GetAction(); - if (!action) - return NULL; - return action.GetDest(pDoc).GetObject(); +DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, + FPDF_BOOKMARK pDict) { + if (!document) + return NULL; + if (!pDict) + return NULL; + CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); + CPDF_Document* pDoc = (CPDF_Document*)document; + CPDF_Dest dest = bookmark.GetDest(pDoc); + if (dest) + return dest.GetObject(); + // If this bookmark is not directly associated with a dest, we try to get + // action + CPDF_Action action = bookmark.GetAction(); + if (!action) + return NULL; + return action.GetDest(pDoc).GetObject(); } -DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict) -{ - if (!pDict) - return NULL; - CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); - return bookmark.GetAction().GetDict(); +DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict) { + if (!pDict) + return NULL; + CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); + return bookmark.GetAction().GetDict(); } -DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) -{ - if (!pDict) - return 0; - CPDF_Action action((CPDF_Dictionary*)pDict); - CPDF_Action::ActionType type = action.GetType(); - switch (type) { - case CPDF_Action::GoTo: - return PDFACTION_GOTO; - case CPDF_Action::GoToR: - return PDFACTION_REMOTEGOTO; - case CPDF_Action::URI: - return PDFACTION_URI; - case CPDF_Action::Launch: - return PDFACTION_LAUNCH; - default: - return PDFACTION_UNSUPPORTED; - } - return PDFACTION_UNSUPPORTED; +DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) { + if (!pDict) + return 0; + CPDF_Action action((CPDF_Dictionary*)pDict); + CPDF_Action::ActionType type = action.GetType(); + switch (type) { + case CPDF_Action::GoTo: + return PDFACTION_GOTO; + case CPDF_Action::GoToR: + return PDFACTION_REMOTEGOTO; + case CPDF_Action::URI: + return PDFACTION_URI; + case CPDF_Action::Launch: + return PDFACTION_LAUNCH; + default: + return PDFACTION_UNSUPPORTED; + } + return PDFACTION_UNSUPPORTED; } -DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTION pDict) -{ - if (!document) - return NULL; - if (!pDict) - return NULL; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_Action action((CPDF_Dictionary*)pDict); - return action.GetDest(pDoc).GetObject(); +DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, + FPDF_ACTION pDict) { + if (!document) + return NULL; + if (!pDict) + return NULL; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + CPDF_Action action((CPDF_Dictionary*)pDict); + return action.GetDest(pDoc).GetObject(); } -DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FPDF_ACTION pDict, - void* buffer, unsigned long buflen) -{ - if (!document) - return 0; - if (!pDict) - return 0; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_Action action((CPDF_Dictionary*)pDict); - CFX_ByteString path = action.GetURI(pDoc); - unsigned long len = path.GetLength() + 1; - if (buffer != NULL && buflen >= len) - FXSYS_memcpy(buffer, path.c_str(), len); - return len; +DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, + FPDF_ACTION pDict, + void* buffer, + unsigned long buflen) { + if (!document) + return 0; + if (!pDict) + return 0; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + CPDF_Action action((CPDF_Dictionary*)pDict); + CFX_ByteString path = action.GetURI(pDoc); + unsigned long len = path.GetLength() + 1; + if (buffer != NULL && buflen >= len) + FXSYS_memcpy(buffer, path.c_str(), len); + return len; } -DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST pDict) -{ - if (!document) - return 0; - if (!pDict) - return 0; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_Dest dest((CPDF_Array*)pDict); - return dest.GetPageIndex(pDoc); +DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, + FPDF_DEST pDict) { + if (!document) + return 0; + if (!pDict) + return 0; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + CPDF_Dest dest((CPDF_Array*)pDict); + return dest.GetPageIndex(pDoc); } -static void ReleaseLinkList(void* data) -{ - delete (CPDF_LinkList*)data; +static void ReleaseLinkList(void* data) { + delete (CPDF_LinkList*)data; } -DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, double y) -{ - if (!page) - return NULL; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) - return NULL; - // Link list is stored with the document - CPDF_Document* pDoc = pPage->m_pDocument; - CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&THISMODULE); - if (!pLinkList) { - pLinkList = FX_NEW CPDF_LinkList(pDoc); - pDoc->SetPrivateData(&THISMODULE, pLinkList, ReleaseLinkList); - } - return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y).GetDict(); +DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, + double x, + double y) { + if (!page) + return NULL; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return NULL; + // Link list is stored with the document + CPDF_Document* pDoc = pPage->m_pDocument; + CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&THISMODULE); + if (!pLinkList) { + pLinkList = FX_NEW CPDF_LinkList(pDoc); + pDoc->SetPrivateData(&THISMODULE, pLinkList, ReleaseLinkList); + } + return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y).GetDict(); } -DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK pDict) -{ - if (!document) - return NULL; - if (!pDict) - return NULL; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_Link link((CPDF_Dictionary*)pDict); - FPDF_DEST dest = link.GetDest(pDoc).GetObject(); - if (dest) - return dest; - // If this link is not directly associated with a dest, we try to get action - CPDF_Action action = link.GetAction(); - if (!action) - return NULL; - return action.GetDest(pDoc).GetObject(); +DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, + FPDF_LINK pDict) { + if (!document) + return NULL; + if (!pDict) + return NULL; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + CPDF_Link link((CPDF_Dictionary*)pDict); + FPDF_DEST dest = link.GetDest(pDoc).GetObject(); + if (dest) + return dest; + // If this link is not directly associated with a dest, we try to get action + CPDF_Action action = link.GetAction(); + if (!action) + return NULL; + return action.GetDest(pDoc).GetObject(); } -DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict) -{ - if (!pDict) - return NULL; - CPDF_Link link((CPDF_Dictionary*)pDict); - return link.GetAction().GetDict(); +DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict) { + if (!pDict) + return NULL; + CPDF_Link link((CPDF_Dictionary*)pDict); + return link.GetAction().GetDict(); } -DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, int* startPos, FPDF_LINK* linkAnnot) -{ - if(!page || !startPos || !linkAnnot) - return FALSE; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if(!pPage->m_pFormDict) - return FALSE; - CPDF_Array* pAnnots = pPage->m_pFormDict->GetArray("Annots"); - if(!pAnnots) - return FALSE; - for (int i = *startPos; i < (int)pAnnots->GetCount(); i++) { - CPDF_Dictionary* pDict = (CPDF_Dictionary*)pAnnots->GetElementValue(i); - if (!pDict || pDict->GetType() != PDFOBJ_DICTIONARY) - continue; - if(pDict->GetString(FX_BSTRC("Subtype")).Equal(FX_BSTRC("Link"))) { - *startPos = i + 1; - *linkAnnot = (FPDF_LINK)pDict; - return TRUE; - } - } +DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, + int* startPos, + FPDF_LINK* linkAnnot) { + if (!page || !startPos || !linkAnnot) + return FALSE; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage->m_pFormDict) return FALSE; + CPDF_Array* pAnnots = pPage->m_pFormDict->GetArray("Annots"); + if (!pAnnots) + return FALSE; + for (int i = *startPos; i < (int)pAnnots->GetCount(); i++) { + CPDF_Dictionary* pDict = (CPDF_Dictionary*)pAnnots->GetElementValue(i); + if (!pDict || pDict->GetType() != PDFOBJ_DICTIONARY) + continue; + if (pDict->GetString(FX_BSTRC("Subtype")).Equal(FX_BSTRC("Link"))) { + *startPos = i + 1; + *linkAnnot = (FPDF_LINK)pDict; + return TRUE; + } + } + return FALSE; } -DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot, FS_RECTF* rect) -{ - if(!linkAnnot || !rect) - return FALSE; - CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot; - CPDF_Rect rt = pAnnotDict->GetRect(FX_BSTRC("Rect")); - rect->left = rt.left; - rect->bottom = rt.bottom; - rect->right = rt.right; - rect->top = rt.top; - return TRUE; +DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot, + FS_RECTF* rect) { + if (!linkAnnot || !rect) + return FALSE; + CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot; + CPDF_Rect rt = pAnnotDict->GetRect(FX_BSTRC("Rect")); + rect->left = rt.left; + rect->bottom = rt.bottom; + rect->right = rt.right; + rect->top = rt.top; + return TRUE; } -DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot) -{ - if(!linkAnnot) - return 0; - CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot; - CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints")); - if (!pArray) - return 0; - return pArray->GetCount() / 8; +DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot) { + if (!linkAnnot) + return 0; + CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot; + CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints")); + if (!pArray) + return 0; + return pArray->GetCount() / 8; } -DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, int quadIndex, FS_QUADPOINTSF* quadPoints) -{ - if(!linkAnnot || !quadPoints) - return FALSE; - CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot; - CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints")); - if (pArray) { - if (quadIndex < 0 || quadIndex >= (int)pArray->GetCount()/8 || ((quadIndex*8+7) >= (int)pArray->GetCount())) - return FALSE; - quadPoints->x1 = pArray->GetNumber(quadIndex*8); - quadPoints->y1 = pArray->GetNumber(quadIndex*8+1); - quadPoints->x2 = pArray->GetNumber(quadIndex*8+2); - quadPoints->y2 = pArray->GetNumber(quadIndex*8+3); - quadPoints->x3 = pArray->GetNumber(quadIndex*8+4); - quadPoints->y3 = pArray->GetNumber(quadIndex*8+5); - quadPoints->x4 = pArray->GetNumber(quadIndex*8+6); - quadPoints->y4 = pArray->GetNumber(quadIndex*8+7); - return TRUE; - } +DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, + int quadIndex, + FS_QUADPOINTSF* quadPoints) { + if (!linkAnnot || !quadPoints) return FALSE; + CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot; + CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints")); + if (pArray) { + if (quadIndex < 0 || quadIndex >= (int)pArray->GetCount() / 8 || + ((quadIndex * 8 + 7) >= (int)pArray->GetCount())) + return FALSE; + quadPoints->x1 = pArray->GetNumber(quadIndex * 8); + quadPoints->y1 = pArray->GetNumber(quadIndex * 8 + 1); + quadPoints->x2 = pArray->GetNumber(quadIndex * 8 + 2); + quadPoints->y2 = pArray->GetNumber(quadIndex * 8 + 3); + quadPoints->x3 = pArray->GetNumber(quadIndex * 8 + 4); + quadPoints->y3 = pArray->GetNumber(quadIndex * 8 + 5); + quadPoints->x4 = pArray->GetNumber(quadIndex * 8 + 6); + quadPoints->y4 = pArray->GetNumber(quadIndex * 8 + 7); + return TRUE; + } + return FALSE; } -DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc, FPDF_BYTESTRING tag, - void* buffer, unsigned long buflen) -{ - if (!doc || !tag) - return 0; - CPDF_Document* pDoc = ((CPDFXFA_Document*)doc)->GetPDFDoc(); - // Get info dictionary - CPDF_Dictionary* pInfo = pDoc->GetInfo(); - if (!pInfo) - return 0; - CFX_WideString text = pInfo->GetUnicodeText(tag); - // Use UTF-16LE encoding - CFX_ByteString encodedText = text.UTF16LE_Encode(); - unsigned long len = encodedText.GetLength(); - if (buffer && buflen >= len) { - FXSYS_memcpy(buffer, encodedText.c_str(), len); - } - return len; +DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc, + FPDF_BYTESTRING tag, + void* buffer, + unsigned long buflen) { + if (!doc || !tag) + return 0; + CPDF_Document* pDoc = ((CPDFXFA_Document*)doc)->GetPDFDoc(); + // Get info dictionary + CPDF_Dictionary* pInfo = pDoc->GetInfo(); + if (!pInfo) + return 0; + CFX_WideString text = pInfo->GetUnicodeText(tag); + // Use UTF-16LE encoding + CFX_ByteString encodedText = text.UTF16LE_Encode(); + unsigned long len = encodedText.GetLength(); + if (buffer && buflen >= len) { + FXSYS_memcpy(buffer, encodedText.c_str(), len); + } + return len; } diff --git a/fpdfsdk/src/fpdfdoc_embeddertest.cpp b/fpdfsdk/src/fpdfdoc_embeddertest.cpp index 1f11bef214..9c9fac8d15 100644 --- a/fpdfsdk/src/fpdfdoc_embeddertest.cpp +++ b/fpdfsdk/src/fpdfdoc_embeddertest.cpp @@ -7,8 +7,7 @@ #include "../../testing/embedder_test.h" #include "testing/gtest/include/gtest/gtest.h" -class FPDFDocEmbeddertest : public EmbedderTest { -}; +class FPDFDocEmbeddertest : public EmbedderTest {}; TEST_F(FPDFDocEmbeddertest, DestGetPageIndex) { EXPECT_TRUE(OpenDocument("testing/resources/named_dests.pdf")); diff --git a/fpdfsdk/src/fpdfeditimg.cpp b/fpdfsdk/src/fpdfeditimg.cpp index a6951d20d3..bfd9adea36 100644 --- a/fpdfsdk/src/fpdfeditimg.cpp +++ b/fpdfsdk/src/fpdfeditimg.cpp @@ -9,70 +9,77 @@ #include "../include/fpdfxfa/fpdfxfa_doc.h" #include "../include/fpdfxfa/fpdfxfa_page.h" -DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document) -{ - if (!document) - return NULL; - CPDF_ImageObject* pImageObj = FX_NEW CPDF_ImageObject; - CPDF_Image* pImg = FX_NEW CPDF_Image(((CPDFXFA_Document *)document)->GetPDFDoc()); - pImageObj->m_pImage = pImg; - return pImageObj; +DLLEXPORT FPDF_PAGEOBJECT STDCALL +FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document) { + if (!document) + return NULL; + CPDF_ImageObject* pImageObj = FX_NEW CPDF_ImageObject; + CPDF_Image* pImg = + FX_NEW CPDF_Image(((CPDFXFA_Document*)document)->GetPDFDoc()); + pImageObj->m_pImage = pImg; + return pImageObj; } -DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages, int nCount,FPDF_PAGEOBJECT image_object, FPDF_FILEACCESS* fileAccess) -{ - if (!image_object || !fileAccess || !pages) - return FALSE; +DLLEXPORT FPDF_BOOL STDCALL +FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages, + int nCount, + FPDF_PAGEOBJECT image_object, + FPDF_FILEACCESS* fileAccess) { + if (!image_object || !fileAccess || !pages) + return FALSE; - IFX_FileRead* pFile = FX_NEW CPDF_CustomAccess(fileAccess); + IFX_FileRead* pFile = FX_NEW CPDF_CustomAccess(fileAccess); - CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object; - pImgObj->m_GeneralState.GetModify(); - for (int index=0;indexGetPDFPage(); - if (!pPage) - continue; - pImgObj->m_pImage->ResetCache(pPage,NULL); - } - pImgObj->m_pImage->SetJpegImage(pFile); + CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object; + pImgObj->m_GeneralState.GetModify(); + for (int index = 0; index < nCount; index++) { + CPDF_Page* pPage = ((CPDFXFA_Page*)pages[index])->GetPDFPage(); + if (!pPage) + continue; + pImgObj->m_pImage->ResetCache(pPage, NULL); + } + pImgObj->m_pImage->SetJpegImage(pFile); - return TRUE; + return TRUE; } - -DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetMatrix (FPDF_PAGEOBJECT image_object, - double a, double b, double c, double d, double e, double f) -{ - if (!image_object) - return FALSE; - CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object; - pImgObj->m_Matrix.a = (FX_FLOAT)a; - pImgObj->m_Matrix.b = (FX_FLOAT)b; - pImgObj->m_Matrix.c = (FX_FLOAT)c; - pImgObj->m_Matrix.d = (FX_FLOAT)d; - pImgObj->m_Matrix.e = (FX_FLOAT)e; - pImgObj->m_Matrix.f = (FX_FLOAT)f; - pImgObj->CalcBoundingBox(); - return TRUE; +DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetMatrix(FPDF_PAGEOBJECT image_object, + double a, + double b, + double c, + double d, + double e, + double f) { + if (!image_object) + return FALSE; + CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object; + pImgObj->m_Matrix.a = (FX_FLOAT)a; + pImgObj->m_Matrix.b = (FX_FLOAT)b; + pImgObj->m_Matrix.c = (FX_FLOAT)c; + pImgObj->m_Matrix.d = (FX_FLOAT)d; + pImgObj->m_Matrix.e = (FX_FLOAT)e; + pImgObj->m_Matrix.f = (FX_FLOAT)f; + pImgObj->CalcBoundingBox(); + return TRUE; } -DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages,int nCount,FPDF_PAGEOBJECT image_object,FPDF_BITMAP bitmap) -{ - if (!image_object || !bitmap || !pages) - return FALSE; - CFX_DIBitmap* pBmp = NULL; - pBmp = (CFX_DIBitmap*)bitmap; - CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object; - pImgObj->m_GeneralState.GetModify(); - for (int index=0;indexGetPDFPage(); - if (!pPage) continue; - pImgObj->m_pImage->ResetCache(pPage,NULL); - } - pImgObj->m_pImage->SetImage(pBmp,FALSE); - pImgObj->CalcBoundingBox(); - return TRUE; +DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages, + int nCount, + FPDF_PAGEOBJECT image_object, + FPDF_BITMAP bitmap) { + if (!image_object || !bitmap || !pages) + return FALSE; + CFX_DIBitmap* pBmp = NULL; + pBmp = (CFX_DIBitmap*)bitmap; + CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object; + pImgObj->m_GeneralState.GetModify(); + for (int index = 0; index < nCount; index++) { + CPDF_Page* pPage = ((CPDFXFA_Page*)pages[index])->GetPDFPage(); + if (!pPage) + continue; + pImgObj->m_pImage->ResetCache(pPage, NULL); + } + pImgObj->m_pImage->SetImage(pBmp, FALSE); + pImgObj->CalcBoundingBox(); + return TRUE; } - diff --git a/fpdfsdk/src/fpdfeditpage.cpp b/fpdfsdk/src/fpdfeditpage.cpp index d1068ae3be..a8447ce730 100644 --- a/fpdfsdk/src/fpdfeditpage.cpp +++ b/fpdfsdk/src/fpdfeditpage.cpp @@ -17,323 +17,333 @@ #include #endif -DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument() -{ - CPDF_Document* pDoc = FX_NEW CPDF_Document; - if (!pDoc) - return NULL; - pDoc->CreateNewDoc(); - time_t currentTime; - - CFX_ByteString DateStr; - - if(FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) - { - if ( -1 != time( ¤tTime ) ) - { - tm * pTM = localtime( ¤tTime ); - if ( pTM ) - { - DateStr.Format( "D:%04d%02d%02d%02d%02d%02d", pTM->tm_year+1900, pTM->tm_mon+1, - pTM->tm_mday, pTM->tm_hour, pTM->tm_min, pTM->tm_sec ); - } - } - } - - CPDF_Dictionary* pInfoDict = NULL; - pInfoDict = pDoc->GetInfo(); - if (pInfoDict) - { - if(FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) - pInfoDict->SetAt("CreationDate", new CPDF_String(DateStr)); - pInfoDict->SetAt("Creator",FX_NEW CPDF_String(L"PDFium")); - } - - CPDFXFA_App* pApp = CPDFXFA_App::GetInstance(); - CPDFXFA_Document* document = FX_NEW CPDFXFA_Document(pDoc, pApp); - return document; +DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument() { + CPDF_Document* pDoc = FX_NEW CPDF_Document; + if (!pDoc) + return NULL; + pDoc->CreateNewDoc(); + time_t currentTime; + + CFX_ByteString DateStr; + + if (FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) { + if (-1 != time(¤tTime)) { + tm* pTM = localtime(¤tTime); + if (pTM) { + DateStr.Format("D:%04d%02d%02d%02d%02d%02d", pTM->tm_year + 1900, + pTM->tm_mon + 1, pTM->tm_mday, pTM->tm_hour, pTM->tm_min, + pTM->tm_sec); + } + } + } + + CPDF_Dictionary* pInfoDict = NULL; + pInfoDict = pDoc->GetInfo(); + if (pInfoDict) { + if (FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) + pInfoDict->SetAt("CreationDate", new CPDF_String(DateStr)); + pInfoDict->SetAt("Creator", FX_NEW CPDF_String(L"PDFium")); + } + + CPDFXFA_App* pApp = CPDFXFA_App::GetInstance(); + CPDFXFA_Document* document = FX_NEW CPDFXFA_Document(pDoc, pApp); + return document; } -DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index) -{ - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - if (pDoc == NULL) - return; - if (page_index < 0 || page_index >= pDoc->GetPageCount()) - return; +DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index) { + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + if (pDoc == NULL) + return; + if (page_index < 0 || page_index >= pDoc->GetPageCount()) + return; - pDoc->DeletePage(page_index); + pDoc->DeletePage(page_index); } -DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document, int page_index, double width, double height) -{ - if (!document) - return NULL; - -// CPDF_Parser* pParser = (CPDF_Parser*)document; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - if(page_index < 0) - page_index = 0; - if(pDoc->GetPageCount()GetPageCount(); -// if (page_index < 0 || page_index >= pDoc->GetPageCount()) -// return NULL; - - CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(page_index); - if(!pPageDict) - return NULL; - CPDF_Array* pMediaBoxArray = FX_NEW CPDF_Array; - pMediaBoxArray->Add(FX_NEW CPDF_Number(0)); - pMediaBoxArray->Add(FX_NEW CPDF_Number(0)); - pMediaBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(width))); - pMediaBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(height))); - - pPageDict->SetAt("MediaBox", pMediaBoxArray); - pPageDict->SetAt("Rotate", FX_NEW CPDF_Number(0)); - pPageDict->SetAt("Resources", FX_NEW CPDF_Dictionary); - -// CPDF_Page* pPage = FX_NEW CPDF_Page; -// pPage->Load(pDoc,pPageDict); -// pPage->ParseContent(); - - CPDFXFA_Page* pPage = FX_NEW CPDFXFA_Page((CPDFXFA_Document*)document, page_index); - pPage->LoadPDFPage(pPageDict); - - return pPage; +DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document, + int page_index, + double width, + double height) { + if (!document) + return NULL; + + // CPDF_Parser* pParser = (CPDF_Parser*)document; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + if (page_index < 0) + page_index = 0; + if (pDoc->GetPageCount() < page_index) + page_index = pDoc->GetPageCount(); + // if (page_index < 0 || page_index >= pDoc->GetPageCount()) + // return NULL; + + CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(page_index); + if (!pPageDict) + return NULL; + CPDF_Array* pMediaBoxArray = FX_NEW CPDF_Array; + pMediaBoxArray->Add(FX_NEW CPDF_Number(0)); + pMediaBoxArray->Add(FX_NEW CPDF_Number(0)); + pMediaBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(width))); + pMediaBoxArray->Add(FX_NEW CPDF_Number(FX_FLOAT(height))); + + pPageDict->SetAt("MediaBox", pMediaBoxArray); + pPageDict->SetAt("Rotate", FX_NEW CPDF_Number(0)); + pPageDict->SetAt("Resources", FX_NEW CPDF_Dictionary); + + // CPDF_Page* pPage = FX_NEW CPDF_Page; + // pPage->Load(pDoc,pPageDict); + // pPage->ParseContent(); + + CPDFXFA_Page* pPage = + FX_NEW CPDFXFA_Page((CPDFXFA_Document*)document, page_index); + pPage->LoadPDFPage(pPageDict); + + return pPage; } -DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page) -{ - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect() - || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) - { - return -1; - } - CPDF_Dictionary* pDict = pPage->m_pFormDict; - - int rotate = 0; - if(pDict != NULL) - { - if (pDict->KeyExist("Rotate")) - rotate = pDict->GetElement("Rotate")->GetDirect()? pDict->GetElement("Rotate")->GetDirect()->GetInteger() / 90 : 0; - else - { - if(pDict->KeyExist("Parent")) - { - CPDF_Dictionary* pPages = (CPDF_Dictionary*)pDict->GetElement("Parent")->GetDirect(); - while(pPages) - { - if(pPages->KeyExist("Rotate")) - { - rotate = pPages->GetElement("Rotate")->GetDirect()? pPages->GetElement("Rotate")->GetDirect()->GetInteger() / 90 : 0; - break; - } - else if(pPages->KeyExist("Parent")) - pPages = (CPDF_Dictionary*)pPages->GetElement("Parent")->GetDirect(); - else break; - } - } - } - } - else - { - return -1; - } - - return rotate; +DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page) { + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || + !pPage->m_pFormDict->GetElement("Type")->GetDirect() || + pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare( + "Page")) { + return -1; + } + CPDF_Dictionary* pDict = pPage->m_pFormDict; + + int rotate = 0; + if (pDict != NULL) { + if (pDict->KeyExist("Rotate")) + rotate = pDict->GetElement("Rotate")->GetDirect() + ? pDict->GetElement("Rotate")->GetDirect()->GetInteger() / 90 + : 0; + else { + if (pDict->KeyExist("Parent")) { + CPDF_Dictionary* pPages = + (CPDF_Dictionary*)pDict->GetElement("Parent")->GetDirect(); + while (pPages) { + if (pPages->KeyExist("Rotate")) { + rotate = + pPages->GetElement("Rotate")->GetDirect() + ? pPages->GetElement("Rotate")->GetDirect()->GetInteger() / + 90 + : 0; + break; + } else if (pPages->KeyExist("Parent")) + pPages = + (CPDF_Dictionary*)pPages->GetElement("Parent")->GetDirect(); + else + break; + } + } + } + } else { + return -1; + } + + return rotate; } -DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_obj) -{ - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect() - || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) - { - return; - } - CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_obj; - if(pPageObj == NULL) - return; - FX_POSITION LastPersition = pPage->GetLastObjectPosition(); - - pPage->InsertObject(LastPersition, pPageObj); - switch(pPageObj->m_Type) - { - case FPDF_PAGEOBJ_PATH: - { - CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj; - pPathObj->CalcBoundingBox(); - break; - } - case FPDF_PAGEOBJ_TEXT: - { - // CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj; - // pPathObj->CalcBoundingBox(); - break; - } - case FPDF_PAGEOBJ_IMAGE: - { - CPDF_ImageObject* pImageObj = (CPDF_ImageObject*)pPageObj; - pImageObj->CalcBoundingBox(); - break; - } - case FPDF_PAGEOBJ_SHADING: - { - CPDF_ShadingObject* pShadingObj = (CPDF_ShadingObject*)pPageObj; - pShadingObj->CalcBoundingBox(); - break; - } - case FPDF_PAGEOBJ_FORM: - { - CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj; - pFormObj->CalcBoundingBox(); - break; - } - default: - break; - } - - // pPage->ParseContent(); - //pPage->GenerateContent(); - +DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page, + FPDF_PAGEOBJECT page_obj) { + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || + !pPage->m_pFormDict->GetElement("Type")->GetDirect() || + pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare( + "Page")) { + return; + } + CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_obj; + if (pPageObj == NULL) + return; + FX_POSITION LastPersition = pPage->GetLastObjectPosition(); + + pPage->InsertObject(LastPersition, pPageObj); + switch (pPageObj->m_Type) { + case FPDF_PAGEOBJ_PATH: { + CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj; + pPathObj->CalcBoundingBox(); + break; + } + case FPDF_PAGEOBJ_TEXT: { + // CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj; + // pPathObj->CalcBoundingBox(); + break; + } + case FPDF_PAGEOBJ_IMAGE: { + CPDF_ImageObject* pImageObj = (CPDF_ImageObject*)pPageObj; + pImageObj->CalcBoundingBox(); + break; + } + case FPDF_PAGEOBJ_SHADING: { + CPDF_ShadingObject* pShadingObj = (CPDF_ShadingObject*)pPageObj; + pShadingObj->CalcBoundingBox(); + break; + } + case FPDF_PAGEOBJ_FORM: { + CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj; + pFormObj->CalcBoundingBox(); + break; + } + default: + break; + } + + // pPage->ParseContent(); + // pPage->GenerateContent(); } -DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page) -{ - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect() - || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) - { - return -1; - } - return pPage->CountObjects(); -// return 0; +DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page) { + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || + !pPage->m_pFormDict->GetElement("Type")->GetDirect() || + pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare( + "Page")) { + return -1; + } + return pPage->CountObjects(); + // return 0; } -DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page, int index) -{ - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") - || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) - { - return NULL; - } - return pPage->GetObjectByIndex(index); -// return NULL; +DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page, + int index) { + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || + pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare( + "Page")) { + return NULL; + } + return pPage->GetObjectByIndex(index); + // return NULL; } -DLLEXPORT FPDF_BOOL STDCALL FPDFPage_HasTransparency(FPDF_PAGE page) -{ - if(!page) return FALSE; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return FALSE; +DLLEXPORT FPDF_BOOL STDCALL FPDFPage_HasTransparency(FPDF_PAGE page) { + if (!page) + return FALSE; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return FALSE; - return pPage->BackgroundAlphaNeeded(); + return pPage->BackgroundAlphaNeeded(); } -DLLEXPORT FPDF_BOOL STDCALL FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject) -{ - if(!pageObject) return FALSE; - CPDF_PageObject* pPageObj = (CPDF_PageObject*)pageObject; - - const CPDF_GeneralStateData* pGeneralState = pPageObj->m_GeneralState; - int blend_type = pGeneralState ? pGeneralState->m_BlendType : FXDIB_BLEND_NORMAL; - if (blend_type != FXDIB_BLEND_NORMAL) return TRUE; - - CPDF_Dictionary* pSMaskDict = pGeneralState ? (CPDF_Dictionary*)pGeneralState->m_pSoftMask : NULL; - if(pSMaskDict) return TRUE; - - if(pGeneralState && pGeneralState->m_FillAlpha != 1.0f) - return TRUE; - - if(pPageObj->m_Type == PDFPAGE_PATH) - { - if(pGeneralState && pGeneralState->m_StrokeAlpha != 1.0f) - return TRUE; - } - - if(pPageObj->m_Type == PDFPAGE_FORM) - { - CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj; - if(pFormObj->m_pForm && (pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED)) - return TRUE; - if(pFormObj->m_pForm && (!(pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED) && (pFormObj->m_pForm->m_Transparency & PDFTRANS_GROUP))) - return TRUE; - } - return FALSE; +DLLEXPORT FPDF_BOOL STDCALL +FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject) { + if (!pageObject) + return FALSE; + CPDF_PageObject* pPageObj = (CPDF_PageObject*)pageObject; + + const CPDF_GeneralStateData* pGeneralState = pPageObj->m_GeneralState; + int blend_type = + pGeneralState ? pGeneralState->m_BlendType : FXDIB_BLEND_NORMAL; + if (blend_type != FXDIB_BLEND_NORMAL) + return TRUE; + + CPDF_Dictionary* pSMaskDict = + pGeneralState ? (CPDF_Dictionary*)pGeneralState->m_pSoftMask : NULL; + if (pSMaskDict) + return TRUE; + + if (pGeneralState && pGeneralState->m_FillAlpha != 1.0f) + return TRUE; + + if (pPageObj->m_Type == PDFPAGE_PATH) { + if (pGeneralState && pGeneralState->m_StrokeAlpha != 1.0f) + return TRUE; + } + + if (pPageObj->m_Type == PDFPAGE_FORM) { + CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj; + if (pFormObj->m_pForm && + (pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED)) + return TRUE; + if (pFormObj->m_pForm && + (!(pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED) && + (pFormObj->m_pForm->m_Transparency & PDFTRANS_GROUP))) + return TRUE; + } + return FALSE; } -DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GenerateContent(FPDF_PAGE page) -{ - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect() - || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) - { - return FALSE; - } - CPDF_PageContentGenerate CG(pPage); - CG.GenerateContent(); - - return TRUE; +DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GenerateContent(FPDF_PAGE page) { + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || + !pPage->m_pFormDict->GetElement("Type")->GetDirect() || + pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare( + "Page")) { + return FALSE; + } + CPDF_PageContentGenerate CG(pPage); + CG.GenerateContent(); + + return TRUE; } DLLEXPORT void STDCALL FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object, - double a, double b, double c, double d, double e, double f) -{ - CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object; - if(pPageObj == NULL) - return; -//PDF_ImageObject* pImageObj = FX_NEW CPDF_ImageObject; - CFX_AffineMatrix matrix((FX_FLOAT)a,(FX_FLOAT)b,(FX_FLOAT)c,(FX_FLOAT)d,(FX_FLOAT)e,(FX_FLOAT)f); - pPageObj->Transform(matrix); + double a, + double b, + double c, + double d, + double e, + double f) { + CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object; + if (pPageObj == NULL) + return; + // PDF_ImageObject* pImageObj = FX_NEW CPDF_ImageObject; + CFX_AffineMatrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d, + (FX_FLOAT)e, (FX_FLOAT)f); + pPageObj->Transform(matrix); } DLLEXPORT void STDCALL FPDFPage_TransformAnnots(FPDF_PAGE page, - double a, double b, double c, double d, double e, double f) -{ - if(page == NULL) - return; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return; - CPDF_AnnotList AnnotList(pPage); - for (int i=0; iGetRect(rect); - CFX_AffineMatrix matrix((FX_FLOAT)a,(FX_FLOAT)b,(FX_FLOAT)c,(FX_FLOAT)d,(FX_FLOAT)e,(FX_FLOAT)f); - rect.Transform(&matrix); - CPDF_Array *pRectArray = NULL; - pRectArray = pAnnot->GetAnnotDict()->GetArray("Rect"); - if (!pRectArray) pRectArray=CPDF_Array::Create(); - pRectArray->SetAt(0, new CPDF_Number(rect.left)); - pRectArray->SetAt(1, new CPDF_Number(rect.bottom)); - pRectArray->SetAt(2, new CPDF_Number(rect.right)); - pRectArray->SetAt(3, new CPDF_Number(rect.top)); - pAnnot->GetAnnotDict()->SetAt("Rect",pRectArray); - - //Transform AP's rectangle - //To Do - - } - + double a, + double b, + double c, + double d, + double e, + double f) { + if (page == NULL) + return; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return; + CPDF_AnnotList AnnotList(pPage); + for (int i = 0; i < AnnotList.Count(); i++) { + CPDF_Annot* pAnnot = AnnotList.GetAt(i); + // transformAnnots Rectangle + CPDF_Rect rect; + pAnnot->GetRect(rect); + CFX_AffineMatrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d, + (FX_FLOAT)e, (FX_FLOAT)f); + rect.Transform(&matrix); + CPDF_Array* pRectArray = NULL; + pRectArray = pAnnot->GetAnnotDict()->GetArray("Rect"); + if (!pRectArray) + pRectArray = CPDF_Array::Create(); + pRectArray->SetAt(0, new CPDF_Number(rect.left)); + pRectArray->SetAt(1, new CPDF_Number(rect.bottom)); + pRectArray->SetAt(2, new CPDF_Number(rect.right)); + pRectArray->SetAt(3, new CPDF_Number(rect.top)); + pAnnot->GetAnnotDict()->SetAt("Rect", pRectArray); + + // Transform AP's rectangle + // To Do + } } -DLLEXPORT void STDCALL FPDFPage_SetRotation(FPDF_PAGE page, int rotate) -{ - if (page == NULL) - return; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return; - - if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect() - || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) - { - return; - } - CPDF_Dictionary* pDict = pPage->m_pFormDict; - rotate %=4; - - pDict->SetAt("Rotate", FX_NEW CPDF_Number(rotate * 90)); +DLLEXPORT void STDCALL FPDFPage_SetRotation(FPDF_PAGE page, int rotate) { + if (page == NULL) + return; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return; + + if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || + !pPage->m_pFormDict->GetElement("Type")->GetDirect() || + pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare( + "Page")) { + return; + } + CPDF_Dictionary* pDict = pPage->m_pFormDict; + rotate %= 4; + + pDict->SetAt("Rotate", FX_NEW CPDF_Number(rotate * 90)); } diff --git a/fpdfsdk/src/fpdfformfill.cpp b/fpdfsdk/src/fpdfformfill.cpp index aa1c04a5c4..369f9b4279 100644 --- a/fpdfsdk/src/fpdfformfill.cpp +++ b/fpdfsdk/src/fpdfformfill.cpp @@ -12,603 +12,656 @@ #include "../include/fpdfxfa/fpdfxfa_page.h" #include "../include/fpdfxfa/fpdfxfa_app.h" - #include "../include/javascript/IJavaScript.h" namespace { -CPDFSDK_Document* FormHandleToSDKDoc(FPDF_FORMHANDLE hHandle) -{ - CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle; - return pEnv ? pEnv->GetSDKDocument() : nullptr; +CPDFSDK_Document* FormHandleToSDKDoc(FPDF_FORMHANDLE hHandle) { + CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle; + return pEnv ? pEnv->GetSDKDocument() : nullptr; } -CPDFSDK_InterForm* FormHandleToInterForm(FPDF_FORMHANDLE hHandle) -{ - CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); - return pSDKDoc ? pSDKDoc->GetInterForm() : nullptr; +CPDFSDK_InterForm* FormHandleToInterForm(FPDF_FORMHANDLE hHandle) { + CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); + return pSDKDoc ? pSDKDoc->GetInterForm() : nullptr; } -CPDFSDK_PageView* FormHandleToPageView(FPDF_FORMHANDLE hHandle, FPDF_PAGE page) -{ - if (!page) - return nullptr; +CPDFSDK_PageView* FormHandleToPageView(FPDF_FORMHANDLE hHandle, + FPDF_PAGE page) { + if (!page) + return nullptr; - CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); - return pSDKDoc ? pSDKDoc->GetPageView((CPDFXFA_Page*)page, TRUE) : nullptr; + CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); + return pSDKDoc ? pSDKDoc->GetPageView((CPDFXFA_Page*)page, TRUE) : nullptr; } } // namespace -DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint( - FPDF_FORMHANDLE hHandle, FPDF_PAGE page, double page_x, double page_y) -{ - if(!page || !hHandle) - return -1; - CPDF_Page * pPage = ((CPDFXFA_Page*) page)->GetPDFPage(); - if (pPage) - { - CPDF_InterForm * pInterForm = NULL; - pInterForm = new CPDF_InterForm(pPage->m_pDocument,FALSE); - if (!pInterForm) - return -1; - CPDF_FormControl* pFormCtrl = pInterForm->GetControlAtPoint(pPage, (FX_FLOAT)page_x, (FX_FLOAT)page_y); - if(!pFormCtrl) - { - delete pInterForm; - return -1; - } - CPDF_FormField* pFormField = pFormCtrl->GetField(); - if(!pFormField) - { - delete pInterForm; - return -1; - } - - int nType = pFormField->GetFieldType(); - delete pInterForm; - return nType; +DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle, + FPDF_PAGE page, + double page_x, + double page_y) { + if (!page || !hHandle) + return -1; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (pPage) { + CPDF_InterForm* pInterForm = NULL; + pInterForm = new CPDF_InterForm(pPage->m_pDocument, FALSE); + if (!pInterForm) + return -1; + CPDF_FormControl* pFormCtrl = pInterForm->GetControlAtPoint( + pPage, (FX_FLOAT)page_x, (FX_FLOAT)page_y); + if (!pFormCtrl) { + delete pInterForm; + return -1; + } + CPDF_FormField* pFormField = pFormCtrl->GetField(); + if (!pFormField) { + delete pInterForm; + return -1; } - IXFA_PageView* pPageView = ((CPDFXFA_Page*)page)->GetXFAPageView(); - if (pPageView) - { - IXFA_WidgetHandler* pWidgetHandler = NULL; - IXFA_DocView* pDocView = pPageView->GetDocView(); - if (!pDocView) - return -1; - - pWidgetHandler = pDocView->GetWidgetHandler(); - if (!pWidgetHandler) - return -1; - - IXFA_Widget* pXFAAnnot = NULL; - IXFA_WidgetIterator* pWidgetIterator = pPageView->CreateWidgetIterator(XFA_TRAVERSEWAY_Form, XFA_WIDGETFILTER_Viewable|XFA_WIDGETFILTER_AllType); - if (!pWidgetIterator) - return -1; - pXFAAnnot = pWidgetIterator->MoveToNext(); - while (pXFAAnnot) { - CFX_RectF rcBBox; - pWidgetHandler->GetBBox (pXFAAnnot, rcBBox, 0); - CFX_FloatRect rcWidget(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width, rcBBox.top+rcBBox.height); - rcWidget.left -= 1.0f; - rcWidget.right += 1.0f; - rcWidget.bottom -= 1.0f; - rcWidget.top += 1.0f; - - if (rcWidget.Contains(static_cast(page_x), - static_cast(page_y))) { - pWidgetIterator->Release(); - return FPDF_FORMFIELD_XFA; - } - pXFAAnnot = pWidgetIterator->MoveToNext(); - } - + int nType = pFormField->GetFieldType(); + delete pInterForm; + return nType; + } + + IXFA_PageView* pPageView = ((CPDFXFA_Page*)page)->GetXFAPageView(); + if (pPageView) { + IXFA_WidgetHandler* pWidgetHandler = NULL; + IXFA_DocView* pDocView = pPageView->GetDocView(); + if (!pDocView) + return -1; + + pWidgetHandler = pDocView->GetWidgetHandler(); + if (!pWidgetHandler) + return -1; + + IXFA_Widget* pXFAAnnot = NULL; + IXFA_WidgetIterator* pWidgetIterator = pPageView->CreateWidgetIterator( + XFA_TRAVERSEWAY_Form, + XFA_WIDGETFILTER_Viewable | XFA_WIDGETFILTER_AllType); + if (!pWidgetIterator) + return -1; + pXFAAnnot = pWidgetIterator->MoveToNext(); + while (pXFAAnnot) { + CFX_RectF rcBBox; + pWidgetHandler->GetBBox(pXFAAnnot, rcBBox, 0); + CFX_FloatRect rcWidget(rcBBox.left, rcBBox.top, + rcBBox.left + rcBBox.width, + rcBBox.top + rcBBox.height); + rcWidget.left -= 1.0f; + rcWidget.right += 1.0f; + rcWidget.bottom -= 1.0f; + rcWidget.top += 1.0f; + + if (rcWidget.Contains(static_cast(page_x), + static_cast(page_y))) { pWidgetIterator->Release(); + return FPDF_FORMFIELD_XFA; + } + pXFAAnnot = pWidgetIterator->MoveToNext(); } - return -1; -} - -DLLEXPORT FPDF_FORMHANDLE STDCALL FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document, FPDF_FORMFILLINFO* formInfo) -{ - if (!document || !formInfo || formInfo->version != 2) - return nullptr; - - CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; - CPDFDoc_Environment* pEnv = new CPDFDoc_Environment(pDocument, formInfo); - pEnv->SetSDKDocument(pDocument->GetSDKDocument(pEnv)); + pWidgetIterator->Release(); + } - CPDFXFA_App* pApp = CPDFXFA_App::GetInstance(); - pApp->AddFormFillEnv(pEnv); - - return pEnv; + return -1; } -DLLEXPORT void STDCALL FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle) -{ - if (!hHandle) - return; - CPDFXFA_App* pApp = CPDFXFA_App::GetInstance(); - pApp->RemoveFormFillEnv((CPDFDoc_Environment*)hHandle); - delete (CPDFDoc_Environment*)hHandle; -} +DLLEXPORT FPDF_FORMHANDLE STDCALL +FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document, + FPDF_FORMFILLINFO* formInfo) { + if (!document || !formInfo || formInfo->version != 2) + return nullptr; -DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y) -{ - CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); - if (!pPageView) - return FALSE; + CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; + CPDFDoc_Environment* pEnv = new CPDFDoc_Environment(pDocument, formInfo); + pEnv->SetSDKDocument(pDocument->GetSDKDocument(pEnv)); - CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y); - return pPageView->OnMouseMove(pt, modifier); -} - -DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y) -{ - CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); - if (!pPageView) - return FALSE; + CPDFXFA_App* pApp = CPDFXFA_App::GetInstance(); + pApp->AddFormFillEnv(pEnv); - CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y); - return pPageView->OnLButtonDown(pt, modifier); + return pEnv; } -DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y) -{ - CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); - if (!pPageView) - return FALSE; - - CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y); - return pPageView->OnLButtonUp(pt, modifier); +DLLEXPORT void STDCALL +FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle) { + if (!hHandle) + return; + CPDFXFA_App* pApp = CPDFXFA_App::GetInstance(); + pApp->RemoveFormFillEnv((CPDFDoc_Environment*)hHandle); + delete (CPDFDoc_Environment*)hHandle; } -DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonDown(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y) -{ - CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); - if (!pPageView) - return FALSE; +DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle, + FPDF_PAGE page, + int modifier, + double page_x, + double page_y) { + CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); + if (!pPageView) + return FALSE; - CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y); - return pPageView->OnRButtonDown(pt, modifier); + CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y); + return pPageView->OnMouseMove(pt, modifier); } -DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonUp(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y) -{ - CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); - if (!pPageView) - return FALSE; +DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle, + FPDF_PAGE page, + int modifier, + double page_x, + double page_y) { + CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); + if (!pPageView) + return FALSE; - CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y); - return pPageView->OnRButtonUp(pt, modifier); + CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y); + return pPageView->OnLButtonDown(pt, modifier); } -DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int nKeyCode, int modifier) -{ - CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); - if (!pPageView) - return FALSE; +DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle, + FPDF_PAGE page, + int modifier, + double page_x, + double page_y) { + CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); + if (!pPageView) + return FALSE; - return pPageView->OnKeyDown(nKeyCode, modifier); + CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y); + return pPageView->OnLButtonUp(pt, modifier); } -DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int nKeyCode, int modifier) -{ - CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); - if (!pPageView) - return FALSE; +DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonDown(FPDF_FORMHANDLE hHandle, + FPDF_PAGE page, + int modifier, + double page_x, + double page_y) { + CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); + if (!pPageView) + return FALSE; - return pPageView->OnKeyUp(nKeyCode, modifier); + CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y); + return pPageView->OnRButtonDown(pt, modifier); } -DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int nChar, int modifier) -{ - CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); - if (!pPageView) - return FALSE; +DLLEXPORT FPDF_BOOL STDCALL FORM_OnRButtonUp(FPDF_FORMHANDLE hHandle, + FPDF_PAGE page, + int modifier, + double page_x, + double page_y) { + CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); + if (!pPageView) + return FALSE; - return pPageView->OnChar(nChar, modifier); + CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y); + return pPageView->OnRButtonUp(pt, modifier); } -DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle) -{ - CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); - if (!pSDKDoc) - return FALSE; - - return pSDKDoc->KillFocusAnnot(0); -} - -DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle, FPDF_BITMAP bitmap, FPDF_PAGE page, - int start_x, int start_y, int size_x, int size_y, int rotate, int flags) -{ - if (!hHandle || !page) - return ; - - CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; - CPDFXFA_Document* pDocument = pPage->GetDocument(); - if (!pDocument) - return; - CPDF_Document* pPDFDoc = pDocument->GetPDFDoc(); - if (!pPDFDoc) - return; - - CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle; - CPDFSDK_Document* pFXDoc = pEnv->GetSDKDocument(); - if (!pFXDoc) - return; - - CFX_AffineMatrix matrix; - pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate); +DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle, + FPDF_PAGE page, + int nKeyCode, + int modifier) { + CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); + if (!pPageView) + return FALSE; + + return pPageView->OnKeyDown(nKeyCode, modifier); +} + +DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle, + FPDF_PAGE page, + int nKeyCode, + int modifier) { + CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); + if (!pPageView) + return FALSE; + + return pPageView->OnKeyUp(nKeyCode, modifier); +} + +DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle, + FPDF_PAGE page, + int nChar, + int modifier) { + CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page); + if (!pPageView) + return FALSE; + + return pPageView->OnChar(nChar, modifier); +} + +DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle) { + CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); + if (!pSDKDoc) + return FALSE; + + return pSDKDoc->KillFocusAnnot(0); +} + +DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle, + FPDF_BITMAP bitmap, + FPDF_PAGE page, + int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + int flags) { + if (!hHandle || !page) + return; + + CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; + CPDFXFA_Document* pDocument = pPage->GetDocument(); + if (!pDocument) + return; + CPDF_Document* pPDFDoc = pDocument->GetPDFDoc(); + if (!pPDFDoc) + return; + + CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle; + CPDFSDK_Document* pFXDoc = pEnv->GetSDKDocument(); + if (!pFXDoc) + return; + + CFX_AffineMatrix matrix; + pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate); - FX_RECT clip; - clip.left = start_x; - clip.right = start_x + size_x; - clip.top = start_y; - clip.bottom = start_y + size_y; + FX_RECT clip; + clip.left = start_x; + clip.right = start_x + size_x; + clip.top = start_y; + clip.bottom = start_y + size_y; #ifdef _SKIA_SUPPORT_ - nonstd::unique_ptr pDevice(new CFX_SkiaDevice); + nonstd::unique_ptr pDevice(new CFX_SkiaDevice); #else - nonstd::unique_ptr pDevice(new CFX_FxgeDevice); + nonstd::unique_ptr pDevice(new CFX_FxgeDevice); #endif - if (!pDevice) - return; - pDevice->Attach((CFX_DIBitmap*)bitmap); - pDevice->SaveState(); - pDevice->SetClip_Rect(&clip); - - CPDF_RenderOptions options; - if (flags & FPDF_LCD_TEXT) - options.m_Flags |= RENDER_CLEARTYPE; - else - options.m_Flags &= ~RENDER_CLEARTYPE; - - //Grayscale output - if (flags & FPDF_GRAYSCALE) - { - options.m_ColorMode = RENDER_COLOR_GRAY; - options.m_ForeColor = 0; - options.m_BackColor = 0xffffff; - } - options.m_AddFlags = flags >> 8; - options.m_pOCContext = FX_NEW CPDF_OCContext(pPDFDoc); - - if (CPDFSDK_PageView* pPageView = pFXDoc->GetPageView((CPDFXFA_Page*)page)) - pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options, &clip); - - pDevice->RestoreState(); - - delete options.m_pOCContext; - options.m_pOCContext = NULL; -} -DLLEXPORT void STDCALL FPDF_Widget_Undo(FPDF_DOCUMENT document, FPDF_WIDGET hWidget) -{ - if (NULL == hWidget || NULL == document) - return; - - CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; - if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && pDocument->GetDocType() != XFA_DOCTYPE_Static) - return; - - IXFA_MenuHandler* pXFAMenuHander = CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); - if (pXFAMenuHander == NULL) - return; - - pXFAMenuHander->Undo((IXFA_Widget*)hWidget); - -} -DLLEXPORT void STDCALL FPDF_Widget_Redo(FPDF_DOCUMENT document, FPDF_WIDGET hWidget) -{ - if (NULL == hWidget || NULL == document) - return; - - CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; - if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && pDocument->GetDocType() != XFA_DOCTYPE_Static) - return; - - IXFA_MenuHandler* pXFAMenuHander = CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); - if (pXFAMenuHander == NULL) - return; - - pXFAMenuHander->Redo((IXFA_Widget*)hWidget); -} - -DLLEXPORT void STDCALL FPDF_Widget_SelectAll(FPDF_DOCUMENT document, FPDF_WIDGET hWidget) -{ - if (NULL == hWidget || NULL == document) - return; - - CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; - if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && pDocument->GetDocType() != XFA_DOCTYPE_Static) - return; - - IXFA_MenuHandler* pXFAMenuHander = CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); - if (pXFAMenuHander == NULL) - return; - - pXFAMenuHander->SelectAll((IXFA_Widget*)hWidget); -} -DLLEXPORT void STDCALL FPDF_Widget_Copy(FPDF_DOCUMENT document, FPDF_WIDGET hWidget, FPDF_WIDESTRING wsText, FPDF_DWORD* size) -{ - if (NULL == hWidget || NULL == document) - return; - - CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; - if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && pDocument->GetDocType() != XFA_DOCTYPE_Static) - return; - - IXFA_MenuHandler* pXFAMenuHander = CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); - if (pXFAMenuHander == NULL) - return; - - CFX_WideString wsCpText; - pXFAMenuHander->Copy((IXFA_Widget*)hWidget, wsCpText); - - CFX_ByteString bsCpText = wsCpText.UTF16LE_Encode(); - int len = bsCpText.GetLength()/sizeof(unsigned short); - if (wsText == NULL) { - *size = len; - return; - } - - int real_size = len < *size ? len : *size; - if (real_size > 0) - { - FXSYS_memcpy((void*)wsText,bsCpText.GetBuffer(real_size*sizeof(unsigned short)),real_size*sizeof(unsigned short)); - bsCpText.ReleaseBuffer(real_size*sizeof(unsigned short)); - } - *size = real_size; -} -DLLEXPORT void STDCALL FPDF_Widget_Cut(FPDF_DOCUMENT document, FPDF_WIDGET hWidget, FPDF_WIDESTRING wsText, FPDF_DWORD* size) -{ - if (NULL == hWidget || NULL == document) - return; - CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; - if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && pDocument->GetDocType() != XFA_DOCTYPE_Static) - return; - - IXFA_MenuHandler* pXFAMenuHander = CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); - if (pXFAMenuHander == NULL) - return; - - CFX_WideString wsCpText; - pXFAMenuHander->Cut((IXFA_Widget*)hWidget, wsCpText); - - CFX_ByteString bsCpText = wsCpText.UTF16LE_Encode(); - int len = bsCpText.GetLength()/sizeof(unsigned short); - if (wsText == NULL) { - *size = len; - return; - } - - int real_size = len < *size ? len : *size; - if (real_size > 0) - { - FXSYS_memcpy((void*)wsText,bsCpText.GetBuffer(real_size*sizeof(unsigned short)),real_size*sizeof(unsigned short)); - bsCpText.ReleaseBuffer(real_size*sizeof(unsigned short)); - } - *size = real_size; -} -DLLEXPORT void STDCALL FPDF_Widget_Paste(FPDF_DOCUMENT document, FPDF_WIDGET hWidget, FPDF_WIDESTRING wsText, FPDF_DWORD size) -{ - if (NULL == hWidget || NULL == document) - return; - - CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; - if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && pDocument->GetDocType() != XFA_DOCTYPE_Static) - return; - - IXFA_MenuHandler* pXFAMenuHander = CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); - if (pXFAMenuHander == NULL) - return; - - CFX_WideString wstr = CFX_WideString::FromUTF16LE(wsText, size); - pXFAMenuHander->Paste((IXFA_Widget*)hWidget, wstr); - -} -DLLEXPORT void STDCALL FPDF_Widget_ReplaceSpellCheckWord(FPDF_DOCUMENT document, FPDF_WIDGET hWidget, float x, float y, FPDF_BYTESTRING bsText) -{ - if (NULL == hWidget || NULL == document) - return; - - CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; - if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && pDocument->GetDocType() != XFA_DOCTYPE_Static) - return; - - IXFA_MenuHandler* pXFAMenuHander = CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); - if (pXFAMenuHander == NULL) - return; - - CFX_PointF ptPopup; - ptPopup.x = x; - ptPopup.y = y; - CFX_ByteStringC bs(bsText); - pXFAMenuHander->ReplaceSpellCheckWord((IXFA_Widget*)hWidget,ptPopup,bs); - -} -DLLEXPORT void STDCALL FPDF_Widget_GetSpellCheckWords(FPDF_DOCUMENT document, FPDF_WIDGET hWidget, float x, float y, FPDF_STRINGHANDLE* stringHandle) -{ - if (NULL == hWidget || NULL == document) - return; - - CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; - if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && pDocument->GetDocType() != XFA_DOCTYPE_Static) - return; - - IXFA_MenuHandler* pXFAMenuHander = CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); - if (pXFAMenuHander == NULL) - return; - - CFX_ByteStringArray* sSuggestWords = FX_NEW CFX_ByteStringArray; - CFX_PointF ptPopup; - ptPopup.x = x; - ptPopup.y = y; - pXFAMenuHander->GetSuggestWords((IXFA_Widget*)hWidget, ptPopup, *sSuggestWords); - *stringHandle = (FPDF_STRINGHANDLE)sSuggestWords; -} -DLLEXPORT int STDCALL FPDF_StringHandleCounts(FPDF_STRINGHANDLE stringHandle) -{ - if (stringHandle == NULL) - return -1; - CFX_ByteStringArray* sSuggestWords = (CFX_ByteStringArray*)stringHandle; - return sSuggestWords->GetSize(); -} -DLLEXPORT FPDF_BOOL STDCALL FPDF_StringHandleGetStringByIndex(FPDF_STRINGHANDLE stringHandle, int index, FPDF_BYTESTRING bsText, FPDF_DWORD* size) -{ - if (stringHandle == NULL || size == NULL) - return FALSE; - int count = FPDF_StringHandleCounts(stringHandle); - if (index < 0|| index >= count) - return FALSE; - - CFX_ByteStringArray sSuggestWords = *(CFX_ByteStringArray*)stringHandle; - int len = sSuggestWords[index].GetLength(); - - if (bsText == NULL) { - *size = len; - return TRUE; - } - - int real_size = len < *size ? len : *size; - if (real_size > 0) - FXSYS_memcpy((void*)bsText, (const FX_CHAR*)(sSuggestWords[index]), real_size); - *size = real_size; - - return TRUE; -} -DLLEXPORT void STDCALL FPDF_StringHandleRelease(FPDF_STRINGHANDLE stringHandle) -{ - if (stringHandle == NULL) - return; - CFX_ByteStringArray* sSuggestWords = (CFX_ByteStringArray*)stringHandle; - delete sSuggestWords; -} - -DLLEXPORT FPDF_BOOL STDCALL FPDF_StringHandleAddString(FPDF_STRINGHANDLE stringHandle, FPDF_BYTESTRING bsText, FPDF_DWORD size) -{ - if (stringHandle == NULL || bsText == NULL || size <= 0) - return FALSE; - - CFX_ByteStringArray* stringArr = (CFX_ByteStringArray*)stringHandle; - CFX_ByteString bsStr(bsText, size); - - stringArr->Add(bsStr); + if (!pDevice) + return; + pDevice->Attach((CFX_DIBitmap*)bitmap); + pDevice->SaveState(); + pDevice->SetClip_Rect(&clip); + + CPDF_RenderOptions options; + if (flags & FPDF_LCD_TEXT) + options.m_Flags |= RENDER_CLEARTYPE; + else + options.m_Flags &= ~RENDER_CLEARTYPE; + + // Grayscale output + if (flags & FPDF_GRAYSCALE) { + options.m_ColorMode = RENDER_COLOR_GRAY; + options.m_ForeColor = 0; + options.m_BackColor = 0xffffff; + } + options.m_AddFlags = flags >> 8; + options.m_pOCContext = FX_NEW CPDF_OCContext(pPDFDoc); + + if (CPDFSDK_PageView* pPageView = pFXDoc->GetPageView((CPDFXFA_Page*)page)) + pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options, &clip); + + pDevice->RestoreState(); + + delete options.m_pOCContext; + options.m_pOCContext = NULL; +} +DLLEXPORT void STDCALL FPDF_Widget_Undo(FPDF_DOCUMENT document, + FPDF_WIDGET hWidget) { + if (NULL == hWidget || NULL == document) + return; + + CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; + if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && + pDocument->GetDocType() != XFA_DOCTYPE_Static) + return; + + IXFA_MenuHandler* pXFAMenuHander = + CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); + if (pXFAMenuHander == NULL) + return; + + pXFAMenuHander->Undo((IXFA_Widget*)hWidget); +} +DLLEXPORT void STDCALL FPDF_Widget_Redo(FPDF_DOCUMENT document, + FPDF_WIDGET hWidget) { + if (NULL == hWidget || NULL == document) + return; + + CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; + if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && + pDocument->GetDocType() != XFA_DOCTYPE_Static) + return; + + IXFA_MenuHandler* pXFAMenuHander = + CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); + if (pXFAMenuHander == NULL) + return; + + pXFAMenuHander->Redo((IXFA_Widget*)hWidget); +} + +DLLEXPORT void STDCALL FPDF_Widget_SelectAll(FPDF_DOCUMENT document, + FPDF_WIDGET hWidget) { + if (NULL == hWidget || NULL == document) + return; + + CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; + if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && + pDocument->GetDocType() != XFA_DOCTYPE_Static) + return; + + IXFA_MenuHandler* pXFAMenuHander = + CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); + if (pXFAMenuHander == NULL) + return; + + pXFAMenuHander->SelectAll((IXFA_Widget*)hWidget); +} +DLLEXPORT void STDCALL FPDF_Widget_Copy(FPDF_DOCUMENT document, + FPDF_WIDGET hWidget, + FPDF_WIDESTRING wsText, + FPDF_DWORD* size) { + if (NULL == hWidget || NULL == document) + return; + + CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; + if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && + pDocument->GetDocType() != XFA_DOCTYPE_Static) + return; + + IXFA_MenuHandler* pXFAMenuHander = + CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); + if (pXFAMenuHander == NULL) + return; + + CFX_WideString wsCpText; + pXFAMenuHander->Copy((IXFA_Widget*)hWidget, wsCpText); + + CFX_ByteString bsCpText = wsCpText.UTF16LE_Encode(); + int len = bsCpText.GetLength() / sizeof(unsigned short); + if (wsText == NULL) { + *size = len; + return; + } + + int real_size = len < *size ? len : *size; + if (real_size > 0) { + FXSYS_memcpy((void*)wsText, + bsCpText.GetBuffer(real_size * sizeof(unsigned short)), + real_size * sizeof(unsigned short)); + bsCpText.ReleaseBuffer(real_size * sizeof(unsigned short)); + } + *size = real_size; +} +DLLEXPORT void STDCALL FPDF_Widget_Cut(FPDF_DOCUMENT document, + FPDF_WIDGET hWidget, + FPDF_WIDESTRING wsText, + FPDF_DWORD* size) { + if (NULL == hWidget || NULL == document) + return; + CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; + if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && + pDocument->GetDocType() != XFA_DOCTYPE_Static) + return; + + IXFA_MenuHandler* pXFAMenuHander = + CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); + if (pXFAMenuHander == NULL) + return; + + CFX_WideString wsCpText; + pXFAMenuHander->Cut((IXFA_Widget*)hWidget, wsCpText); + + CFX_ByteString bsCpText = wsCpText.UTF16LE_Encode(); + int len = bsCpText.GetLength() / sizeof(unsigned short); + if (wsText == NULL) { + *size = len; + return; + } + + int real_size = len < *size ? len : *size; + if (real_size > 0) { + FXSYS_memcpy((void*)wsText, + bsCpText.GetBuffer(real_size * sizeof(unsigned short)), + real_size * sizeof(unsigned short)); + bsCpText.ReleaseBuffer(real_size * sizeof(unsigned short)); + } + *size = real_size; +} +DLLEXPORT void STDCALL FPDF_Widget_Paste(FPDF_DOCUMENT document, + FPDF_WIDGET hWidget, + FPDF_WIDESTRING wsText, + FPDF_DWORD size) { + if (NULL == hWidget || NULL == document) + return; + + CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; + if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && + pDocument->GetDocType() != XFA_DOCTYPE_Static) + return; + + IXFA_MenuHandler* pXFAMenuHander = + CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); + if (pXFAMenuHander == NULL) + return; + + CFX_WideString wstr = CFX_WideString::FromUTF16LE(wsText, size); + pXFAMenuHander->Paste((IXFA_Widget*)hWidget, wstr); +} +DLLEXPORT void STDCALL +FPDF_Widget_ReplaceSpellCheckWord(FPDF_DOCUMENT document, + FPDF_WIDGET hWidget, + float x, + float y, + FPDF_BYTESTRING bsText) { + if (NULL == hWidget || NULL == document) + return; + + CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; + if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && + pDocument->GetDocType() != XFA_DOCTYPE_Static) + return; + + IXFA_MenuHandler* pXFAMenuHander = + CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); + if (pXFAMenuHander == NULL) + return; + + CFX_PointF ptPopup; + ptPopup.x = x; + ptPopup.y = y; + CFX_ByteStringC bs(bsText); + pXFAMenuHander->ReplaceSpellCheckWord((IXFA_Widget*)hWidget, ptPopup, bs); +} +DLLEXPORT void STDCALL +FPDF_Widget_GetSpellCheckWords(FPDF_DOCUMENT document, + FPDF_WIDGET hWidget, + float x, + float y, + FPDF_STRINGHANDLE* stringHandle) { + if (NULL == hWidget || NULL == document) + return; + + CPDFXFA_Document* pDocument = (CPDFXFA_Document*)document; + if (pDocument->GetDocType() != XFA_DOCTYPE_Dynamic && + pDocument->GetDocType() != XFA_DOCTYPE_Static) + return; + + IXFA_MenuHandler* pXFAMenuHander = + CPDFXFA_App::GetInstance()->GetXFAApp()->GetMenuHandler(); + if (pXFAMenuHander == NULL) + return; + + CFX_ByteStringArray* sSuggestWords = FX_NEW CFX_ByteStringArray; + CFX_PointF ptPopup; + ptPopup.x = x; + ptPopup.y = y; + pXFAMenuHander->GetSuggestWords((IXFA_Widget*)hWidget, ptPopup, + *sSuggestWords); + *stringHandle = (FPDF_STRINGHANDLE)sSuggestWords; +} +DLLEXPORT int STDCALL FPDF_StringHandleCounts(FPDF_STRINGHANDLE stringHandle) { + if (stringHandle == NULL) + return -1; + CFX_ByteStringArray* sSuggestWords = (CFX_ByteStringArray*)stringHandle; + return sSuggestWords->GetSize(); +} +DLLEXPORT FPDF_BOOL STDCALL +FPDF_StringHandleGetStringByIndex(FPDF_STRINGHANDLE stringHandle, + int index, + FPDF_BYTESTRING bsText, + FPDF_DWORD* size) { + if (stringHandle == NULL || size == NULL) + return FALSE; + int count = FPDF_StringHandleCounts(stringHandle); + if (index < 0 || index >= count) + return FALSE; + + CFX_ByteStringArray sSuggestWords = *(CFX_ByteStringArray*)stringHandle; + int len = sSuggestWords[index].GetLength(); + + if (bsText == NULL) { + *size = len; return TRUE; -} - -DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle, int fieldType, unsigned long color) -{ - if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle)) - pInterForm->SetHighlightColor(color, fieldType); -} - -DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle, unsigned char alpha) -{ - if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle)) - pInterForm->SetHighlightAlpha(alpha); -} - -DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle) -{ - if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle)) - pInterForm->RemoveAllHighLight(); -} - -DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle) -{ - if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page)) - pPageView->SetValid(TRUE); -} + } -DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle) -{ - if (!hHandle || !page) - return; + int real_size = len < *size ? len : *size; + if (real_size > 0) + FXSYS_memcpy((void*)bsText, (const FX_CHAR*)(sSuggestWords[index]), + real_size); + *size = real_size; - CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetSDKDocument(); - if (!pSDKDoc) - return; - - CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; - CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE); - if (pPageView) - { - pPageView->SetValid(FALSE); - // ReMovePageView() takes care of the delete for us. - pSDKDoc->ReMovePageView(pPage); - } + return TRUE; } - -DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle) -{ - CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); - if (pSDKDoc && ((CPDFDoc_Environment*)hHandle)->IsJSInitiated()) - pSDKDoc->ProcJavascriptFun(); -} - -DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle) -{ - CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); - if (pSDKDoc && ((CPDFDoc_Environment*)hHandle)->IsJSInitiated()) - pSDKDoc->ProcOpenAction(); -} - -DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle, int aaType) -{ - CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); - if (!pSDKDoc) - return; - - CPDF_Document* pDoc = pSDKDoc->GetDocument()->GetPDFDoc(); - CPDF_Dictionary* pDic = pDoc->GetRoot(); - if (!pDic) - return; - CPDF_AAction aa = pDic->GetDict(FX_BSTRC("AA")); - if(aa.ActionExist((CPDF_AAction::AActionType)aaType)) - { - CPDF_Action action = aa.GetAction((CPDF_AAction::AActionType)aaType); - CPDFSDK_ActionHandler *pActionHandler = ((CPDFDoc_Environment*)hHandle)->GetActionHander(); - ASSERT(pActionHandler != NULL); - pActionHandler->DoAction_Document(action, (CPDF_AAction::AActionType)aaType, pSDKDoc); - } -} - -DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page, FPDF_FORMHANDLE hHandle, int aaType) -{ - if(!hHandle || !page) - return; - CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetSDKDocument(); - CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; - CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE); - if(pPageView) - { - CPDFDoc_Environment *pEnv = pSDKDoc->GetEnv(); - CPDFSDK_ActionHandler *pActionHandler = pEnv->GetActionHander(); - CPDF_Dictionary *pPageDict = pPage->GetPDFPage()->m_pFormDict; - CPDF_AAction aa = pPageDict->GetDict(FX_BSTRC("AA")); - - FX_BOOL bExistOAAction = FALSE; - FX_BOOL bExistCAAction = FALSE; - if (FPDFPAGE_AACTION_OPEN == aaType) - { - bExistOAAction = aa.ActionExist(CPDF_AAction::OpenPage); - if (bExistOAAction) - { - CPDF_Action action = aa.GetAction(CPDF_AAction::OpenPage); - pActionHandler->DoAction_Page(action, CPDF_AAction::OpenPage, pSDKDoc); - } - } - else - { - bExistCAAction = aa.ActionExist(CPDF_AAction::ClosePage); - if (bExistCAAction) - { - CPDF_Action action = aa.GetAction(CPDF_AAction::ClosePage); - pActionHandler->DoAction_Page(action, CPDF_AAction::ClosePage, pSDKDoc); - } - } +DLLEXPORT void STDCALL +FPDF_StringHandleRelease(FPDF_STRINGHANDLE stringHandle) { + if (stringHandle == NULL) + return; + CFX_ByteStringArray* sSuggestWords = (CFX_ByteStringArray*)stringHandle; + delete sSuggestWords; +} + +DLLEXPORT FPDF_BOOL STDCALL +FPDF_StringHandleAddString(FPDF_STRINGHANDLE stringHandle, + FPDF_BYTESTRING bsText, + FPDF_DWORD size) { + if (stringHandle == NULL || bsText == NULL || size <= 0) + return FALSE; + + CFX_ByteStringArray* stringArr = (CFX_ByteStringArray*)stringHandle; + CFX_ByteString bsStr(bsText, size); + + stringArr->Add(bsStr); + return TRUE; +} + +DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle, + int fieldType, + unsigned long color) { + if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle)) + pInterForm->SetHighlightColor(color, fieldType); +} + +DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle, + unsigned char alpha) { + if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle)) + pInterForm->SetHighlightAlpha(alpha); +} + +DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle) { + if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle)) + pInterForm->RemoveAllHighLight(); +} + +DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page, + FPDF_FORMHANDLE hHandle) { + if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page)) + pPageView->SetValid(TRUE); +} + +DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page, + FPDF_FORMHANDLE hHandle) { + if (!hHandle || !page) + return; + + CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetSDKDocument(); + if (!pSDKDoc) + return; + + CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; + CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE); + if (pPageView) { + pPageView->SetValid(FALSE); + // ReMovePageView() takes care of the delete for us. + pSDKDoc->ReMovePageView(pPage); + } +} + +DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle) { + CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); + if (pSDKDoc && ((CPDFDoc_Environment*)hHandle)->IsJSInitiated()) + pSDKDoc->ProcJavascriptFun(); +} + +DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle) { + CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); + if (pSDKDoc && ((CPDFDoc_Environment*)hHandle)->IsJSInitiated()) + pSDKDoc->ProcOpenAction(); +} + +DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle, + int aaType) { + CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle); + if (!pSDKDoc) + return; + + CPDF_Document* pDoc = pSDKDoc->GetDocument()->GetPDFDoc(); + CPDF_Dictionary* pDic = pDoc->GetRoot(); + if (!pDic) + return; + CPDF_AAction aa = pDic->GetDict(FX_BSTRC("AA")); + if (aa.ActionExist((CPDF_AAction::AActionType)aaType)) { + CPDF_Action action = aa.GetAction((CPDF_AAction::AActionType)aaType); + CPDFSDK_ActionHandler* pActionHandler = + ((CPDFDoc_Environment*)hHandle)->GetActionHander(); + ASSERT(pActionHandler != NULL); + pActionHandler->DoAction_Document(action, (CPDF_AAction::AActionType)aaType, + pSDKDoc); + } +} + +DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page, + FPDF_FORMHANDLE hHandle, + int aaType) { + if (!hHandle || !page) + return; + CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetSDKDocument(); + CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; + CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE); + if (pPageView) { + CPDFDoc_Environment* pEnv = pSDKDoc->GetEnv(); + CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander(); + CPDF_Dictionary* pPageDict = pPage->GetPDFPage()->m_pFormDict; + CPDF_AAction aa = pPageDict->GetDict(FX_BSTRC("AA")); + + FX_BOOL bExistOAAction = FALSE; + FX_BOOL bExistCAAction = FALSE; + if (FPDFPAGE_AACTION_OPEN == aaType) { + bExistOAAction = aa.ActionExist(CPDF_AAction::OpenPage); + if (bExistOAAction) { + CPDF_Action action = aa.GetAction(CPDF_AAction::OpenPage); + pActionHandler->DoAction_Page(action, CPDF_AAction::OpenPage, pSDKDoc); + } + } else { + bExistCAAction = aa.ActionExist(CPDF_AAction::ClosePage); + if (bExistCAAction) { + CPDF_Action action = aa.GetAction(CPDF_AAction::ClosePage); + pActionHandler->DoAction_Page(action, CPDF_AAction::ClosePage, pSDKDoc); + } } + } } diff --git a/fpdfsdk/src/fpdfformfill_embeddertest.cpp b/fpdfsdk/src/fpdfformfill_embeddertest.cpp index 1c38770edb..6baad11531 100644 --- a/fpdfsdk/src/fpdfformfill_embeddertest.cpp +++ b/fpdfsdk/src/fpdfformfill_embeddertest.cpp @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - #include "../../public/fpdf_formfill.h" #include "../../testing/embedder_test.h" #include "../../testing/embedder_test_mock_delegate.h" @@ -13,8 +12,7 @@ using testing::_; using testing::Return; -class FPDFFormFillEmbeddertest : public EmbedderTest { -}; +class FPDFFormFillEmbeddertest : public EmbedderTest {}; TEST_F(FPDFFormFillEmbeddertest, FirstTest) { EmbedderTestMockDelegate mock; diff --git a/fpdfsdk/src/fpdfppo.cpp b/fpdfsdk/src/fpdfppo.cpp index 93766ee2cf..d3899156a2 100644 --- a/fpdfsdk/src/fpdfppo.cpp +++ b/fpdfsdk/src/fpdfppo.cpp @@ -8,455 +8,419 @@ #include "../include/fsdk_define.h" #include "../include/fpdfxfa/fpdfxfa_doc.h" -class CPDF_PageOrganizer -{ -public: - CPDF_PageOrganizer(); - ~CPDF_PageOrganizer(); - -public: - FX_BOOL PDFDocInit(CPDF_Document *pDestPDFDoc, CPDF_Document *pSrcPDFDoc); - FX_BOOL ExportPage(CPDF_Document *pSrcPDFDoc, CFX_WordArray* nPageNum, CPDF_Document *pDestPDFDoc, int nIndex); - CPDF_Object* PageDictGetInheritableTag(CPDF_Dictionary *pDict, CFX_ByteString nSrctag); - FX_BOOL UpdateReference(CPDF_Object *pObj, CPDF_Document *pDoc, CFX_MapPtrToPtr* pMapPtrToPtr); - int GetNewObjId(CPDF_Document *pDoc, CFX_MapPtrToPtr* pMapPtrToPtr, CPDF_Reference *pRef); - +class CPDF_PageOrganizer { + public: + CPDF_PageOrganizer(); + ~CPDF_PageOrganizer(); + + public: + FX_BOOL PDFDocInit(CPDF_Document* pDestPDFDoc, CPDF_Document* pSrcPDFDoc); + FX_BOOL ExportPage(CPDF_Document* pSrcPDFDoc, + CFX_WordArray* nPageNum, + CPDF_Document* pDestPDFDoc, + int nIndex); + CPDF_Object* PageDictGetInheritableTag(CPDF_Dictionary* pDict, + CFX_ByteString nSrctag); + FX_BOOL UpdateReference(CPDF_Object* pObj, + CPDF_Document* pDoc, + CFX_MapPtrToPtr* pMapPtrToPtr); + int GetNewObjId(CPDF_Document* pDoc, + CFX_MapPtrToPtr* pMapPtrToPtr, + CPDF_Reference* pRef); }; +CPDF_PageOrganizer::CPDF_PageOrganizer() {} -CPDF_PageOrganizer::CPDF_PageOrganizer() -{ - -} - -CPDF_PageOrganizer::~CPDF_PageOrganizer() -{ - -} +CPDF_PageOrganizer::~CPDF_PageOrganizer() {} -FX_BOOL CPDF_PageOrganizer::PDFDocInit(CPDF_Document *pDestPDFDoc, CPDF_Document *pSrcPDFDoc) -{ - if(!pDestPDFDoc || !pSrcPDFDoc) - return false; +FX_BOOL CPDF_PageOrganizer::PDFDocInit(CPDF_Document* pDestPDFDoc, + CPDF_Document* pSrcPDFDoc) { + if (!pDestPDFDoc || !pSrcPDFDoc) + return false; - CPDF_Dictionary* pNewRoot = pDestPDFDoc->GetRoot(); - if(!pNewRoot) return FALSE; + CPDF_Dictionary* pNewRoot = pDestPDFDoc->GetRoot(); + if (!pNewRoot) + return FALSE; - //Set the document information//////////////////////////////////////////// + // Set the document information//////////////////////////////////////////// - CPDF_Dictionary* DInfoDict = pDestPDFDoc->GetInfo(); + CPDF_Dictionary* DInfoDict = pDestPDFDoc->GetInfo(); - if(!DInfoDict) - return FALSE; + if (!DInfoDict) + return FALSE; - CFX_ByteString producerstr; - producerstr.Format("PDFium"); - DInfoDict->SetAt("Producer", new CPDF_String(producerstr)); + CFX_ByteString producerstr; + producerstr.Format("PDFium"); + DInfoDict->SetAt("Producer", new CPDF_String(producerstr)); + + // Set type//////////////////////////////////////////////////////////////// + CFX_ByteString cbRootType = pNewRoot->GetString("Type", ""); + if (cbRootType.Equal("")) { + pNewRoot->SetAt("Type", new CPDF_Name("Catalog")); + } + + CPDF_Dictionary* pNewPages = + (CPDF_Dictionary*)(pNewRoot->GetElement("Pages") + ? pNewRoot->GetElement("Pages")->GetDirect() + : NULL); + if (!pNewPages) { + pNewPages = new CPDF_Dictionary; + FX_DWORD NewPagesON = pDestPDFDoc->AddIndirectObject(pNewPages); + pNewRoot->SetAt("Pages", new CPDF_Reference(pDestPDFDoc, NewPagesON)); + } + + CFX_ByteString cbPageType = pNewPages->GetString("Type", ""); + if (cbPageType.Equal("")) { + pNewPages->SetAt("Type", new CPDF_Name("Pages")); + } + + CPDF_Array* pKeysArray = pNewPages->GetArray("Kids"); + if (pKeysArray == NULL) { + CPDF_Array* pNewKids = new CPDF_Array; + FX_DWORD Kidsobjnum = -1; + Kidsobjnum = + pDestPDFDoc->AddIndirectObject(pNewKids); //, Kidsobjnum, Kidsgennum); + + pNewPages->SetAt( + "Kids", new CPDF_Reference(pDestPDFDoc, Kidsobjnum)); //, Kidsgennum)); + pNewPages->SetAt("Count", new CPDF_Number(0)); + } + + return true; +} - //Set type//////////////////////////////////////////////////////////////// - CFX_ByteString cbRootType = pNewRoot->GetString("Type",""); - if( cbRootType.Equal("") ) - { - pNewRoot->SetAt("Type", new CPDF_Name("Catalog")); +FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc, + CFX_WordArray* nPageNum, + CPDF_Document* pDestPDFDoc, + int nIndex) { + int curpage = nIndex; + + CFX_MapPtrToPtr* pMapPtrToPtr = new CFX_MapPtrToPtr; + pMapPtrToPtr->InitHashTable(1001); + + for (int i = 0; i < nPageNum->GetSize(); i++) { + CPDF_Dictionary* pCurPageDict = pDestPDFDoc->CreateNewPage(curpage); + CPDF_Dictionary* pSrcPageDict = pSrcPDFDoc->GetPage(nPageNum->GetAt(i) - 1); + if (!pSrcPageDict || !pCurPageDict) { + delete pMapPtrToPtr; + return FALSE; } - CPDF_Dictionary* pNewPages = (CPDF_Dictionary*)(pNewRoot->GetElement("Pages")? pNewRoot->GetElement("Pages")->GetDirect() : NULL); - if(!pNewPages) - { - pNewPages = new CPDF_Dictionary; - FX_DWORD NewPagesON = pDestPDFDoc->AddIndirectObject(pNewPages); - pNewRoot->SetAt("Pages", new CPDF_Reference(pDestPDFDoc, NewPagesON)); + // Clone the page dictionary/////////// + FX_POSITION SrcPos = pSrcPageDict->GetStartPos(); + while (SrcPos) { + CFX_ByteString cbSrcKeyStr; + CPDF_Object* pObj = pSrcPageDict->GetNextElement(SrcPos, cbSrcKeyStr); + if (cbSrcKeyStr.Compare(("Type")) && cbSrcKeyStr.Compare(("Parent"))) { + if (pCurPageDict->KeyExist(cbSrcKeyStr)) + pCurPageDict->RemoveAt(cbSrcKeyStr); + pCurPageDict->SetAt(cbSrcKeyStr, pObj->Clone()); + } } - CFX_ByteString cbPageType = pNewPages->GetString("Type",""); - if(cbPageType.Equal("")) - { - pNewPages->SetAt("Type", new CPDF_Name("Pages")); + // inheritable item/////////////////////// + CPDF_Object* pInheritable = NULL; + // 1 MediaBox //required + if (!pCurPageDict->KeyExist("MediaBox")) { + pInheritable = PageDictGetInheritableTag(pSrcPageDict, "MediaBox"); + if (!pInheritable) { + // Search the "CropBox" from source page dictionary, if not exists,we + // take the letter size. + pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox"); + if (pInheritable) + pCurPageDict->SetAt("MediaBox", pInheritable->Clone()); + else { + // Make the default size to be letter size (8.5'x11') + CPDF_Array* pArray = new CPDF_Array; + pArray->AddNumber(0); + pArray->AddNumber(0); + pArray->AddNumber(612); + pArray->AddNumber(792); + pCurPageDict->SetAt("MediaBox", pArray); + } + } else + pCurPageDict->SetAt("MediaBox", pInheritable->Clone()); } - - CPDF_Array* pKeysArray = pNewPages->GetArray("Kids"); - if(pKeysArray == NULL) - { - CPDF_Array* pNewKids = new CPDF_Array; - FX_DWORD Kidsobjnum = -1; - Kidsobjnum = pDestPDFDoc->AddIndirectObject(pNewKids);//, Kidsobjnum, Kidsgennum); - - pNewPages->SetAt("Kids", new CPDF_Reference(pDestPDFDoc, Kidsobjnum));//, Kidsgennum)); - pNewPages->SetAt("Count", new CPDF_Number(0)); + // 2 Resources //required + if (!pCurPageDict->KeyExist("Resources")) { + pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Resources"); + if (!pInheritable) { + delete pMapPtrToPtr; + return FALSE; + } + pCurPageDict->SetAt("Resources", pInheritable->Clone()); + } + // 3 CropBox //Optional + if (!pCurPageDict->KeyExist("CropBox")) { + pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox"); + if (pInheritable) + pCurPageDict->SetAt("CropBox", pInheritable->Clone()); + } + // 4 Rotate //Optional + if (!pCurPageDict->KeyExist("Rotate")) { + pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Rotate"); + if (pInheritable) + pCurPageDict->SetAt("Rotate", pInheritable->Clone()); } - return true; -} - -FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document *pSrcPDFDoc, CFX_WordArray* nPageNum, - CPDF_Document *pDestPDFDoc,int nIndex) -{ - int curpage =nIndex; - - CFX_MapPtrToPtr* pMapPtrToPtr = new CFX_MapPtrToPtr; - pMapPtrToPtr->InitHashTable(1001); + ///////////////////////////////////////////// + // Update the reference + FX_DWORD dwOldPageObj = pSrcPageDict->GetObjNum(); + FX_DWORD dwNewPageObj = pCurPageDict->GetObjNum(); - for(int i=0; iGetSize(); i++) - { + pMapPtrToPtr->SetAt((void*)(uintptr_t)dwOldPageObj, + (void*)(uintptr_t)dwNewPageObj); - CPDF_Dictionary* pCurPageDict = pDestPDFDoc->CreateNewPage(curpage); - CPDF_Dictionary* pSrcPageDict = pSrcPDFDoc->GetPage(nPageNum->GetAt(i)-1); - if(!pSrcPageDict || !pCurPageDict) - { - delete pMapPtrToPtr; - return FALSE; - } + UpdateReference(pCurPageDict, pDestPDFDoc, pMapPtrToPtr); + curpage++; + } - // Clone the page dictionary/////////// - FX_POSITION SrcPos = pSrcPageDict->GetStartPos(); - while (SrcPos) - { - CFX_ByteString cbSrcKeyStr; - CPDF_Object* pObj = pSrcPageDict->GetNextElement(SrcPos, cbSrcKeyStr); - if(cbSrcKeyStr.Compare(("Type")) && cbSrcKeyStr.Compare(("Parent"))) - { - if(pCurPageDict->KeyExist(cbSrcKeyStr)) - pCurPageDict->RemoveAt(cbSrcKeyStr); - pCurPageDict->SetAt(cbSrcKeyStr, pObj->Clone()); - } - } + delete pMapPtrToPtr; + return TRUE; +} - //inheritable item/////////////////////// - CPDF_Object* pInheritable = NULL; - //1 MediaBox //required - if(!pCurPageDict->KeyExist("MediaBox")) - { - - pInheritable = PageDictGetInheritableTag(pSrcPageDict, "MediaBox"); - if(!pInheritable) - { - //Search the "CropBox" from source page dictionary, if not exists,we take the letter size. - pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox"); - if(pInheritable) - pCurPageDict->SetAt("MediaBox", pInheritable->Clone()); - else - { - //Make the default size to be letter size (8.5'x11') - CPDF_Array* pArray = new CPDF_Array; - pArray->AddNumber(0); - pArray->AddNumber(0); - pArray->AddNumber(612); - pArray->AddNumber(792); - pCurPageDict->SetAt("MediaBox", pArray); - } - } - else - pCurPageDict->SetAt("MediaBox", pInheritable->Clone()); - } - //2 Resources //required - if(!pCurPageDict->KeyExist("Resources")) - { - pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Resources"); - if(!pInheritable) - { - delete pMapPtrToPtr; - return FALSE; - } - pCurPageDict->SetAt("Resources", pInheritable->Clone()); - } - //3 CropBox //Optional - if(!pCurPageDict->KeyExist("CropBox")) - { - pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox"); - if(pInheritable) - pCurPageDict->SetAt("CropBox", pInheritable->Clone()); - } - //4 Rotate //Optional - if(!pCurPageDict->KeyExist("Rotate")) - { - pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Rotate"); - if(pInheritable) - pCurPageDict->SetAt("Rotate", pInheritable->Clone()); - } +CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag( + CPDF_Dictionary* pDict, + CFX_ByteString nSrctag) { + if (!pDict || !pDict->KeyExist("Type") || nSrctag.IsEmpty()) + return NULL; - ///////////////////////////////////////////// - //Update the reference - FX_DWORD dwOldPageObj = pSrcPageDict->GetObjNum(); - FX_DWORD dwNewPageObj = pCurPageDict->GetObjNum(); + CPDF_Object* pType = pDict->GetElement("Type")->GetDirect(); + if (!pType || pType->GetType() != PDFOBJ_NAME) + return NULL; - pMapPtrToPtr->SetAt((void*)(uintptr_t)dwOldPageObj, (void*)(uintptr_t)dwNewPageObj); + if (pType->GetString().Compare("Page")) + return NULL; - UpdateReference(pCurPageDict, pDestPDFDoc, pMapPtrToPtr); - curpage++; - } + if (!pDict->KeyExist("Parent")) + return NULL; + CPDF_Object* pParent = pDict->GetElement("Parent")->GetDirect(); + if (!pParent || pParent->GetType() != PDFOBJ_DICTIONARY) + return NULL; - delete pMapPtrToPtr; - return TRUE; + CPDF_Dictionary* pp = (CPDF_Dictionary*)pParent; + + if (pDict->KeyExist((const char*)nSrctag)) + return pDict->GetElement((const char*)nSrctag); + while (pp) { + if (pp->KeyExist((const char*)nSrctag)) + return pp->GetElement((const char*)nSrctag); + if (pp->KeyExist("Parent")) { + pp = (CPDF_Dictionary*)pp->GetElement("Parent")->GetDirect(); + if (pp->GetType() == PDFOBJ_NULL) + break; + } else + break; + } + + return NULL; } -CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag(CPDF_Dictionary *pDict, CFX_ByteString nSrctag) -{ - if(!pDict || !pDict->KeyExist("Type") || nSrctag.IsEmpty()) - return NULL; - - CPDF_Object* pType = pDict->GetElement("Type")->GetDirect(); - if(!pType || pType->GetType() != PDFOBJ_NAME) return NULL; - - if(pType->GetString().Compare("Page")) return NULL; - - if(!pDict->KeyExist("Parent")) return NULL; - CPDF_Object* pParent = pDict->GetElement("Parent")->GetDirect(); - if(!pParent || pParent->GetType() != PDFOBJ_DICTIONARY) return NULL; - - CPDF_Dictionary* pp = (CPDF_Dictionary*)pParent; - - if(pDict->KeyExist((const char*)nSrctag)) - return pDict->GetElement((const char*)nSrctag); - while (pp) - { - if (pp->KeyExist((const char*)nSrctag)) - return pp->GetElement((const char*)nSrctag); - if (pp->KeyExist("Parent")) - { - pp = (CPDF_Dictionary*)pp->GetElement("Parent")->GetDirect(); - if (pp->GetType() == PDFOBJ_NULL) - break; - } - else - break; +FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj, + CPDF_Document* pDoc, + CFX_MapPtrToPtr* pMapPtrToPtr) { + switch (pObj->GetType()) { + case PDFOBJ_REFERENCE: { + CPDF_Reference* pReference = (CPDF_Reference*)pObj; + int newobjnum = GetNewObjId(pDoc, pMapPtrToPtr, pReference); + if (newobjnum == 0) + return FALSE; + pReference->SetRef(pDoc, newobjnum); //, 0); + break; } - - return NULL; -} - -FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object *pObj, CPDF_Document *pDoc, - CFX_MapPtrToPtr* pMapPtrToPtr) -{ - switch (pObj->GetType()) - { - case PDFOBJ_REFERENCE: - { - CPDF_Reference* pReference = (CPDF_Reference*)pObj; - int newobjnum = GetNewObjId(pDoc, pMapPtrToPtr, pReference); - if (newobjnum == 0) return FALSE; - pReference->SetRef(pDoc, newobjnum);//, 0); - break; - } - case PDFOBJ_DICTIONARY: - { - CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj; - - FX_POSITION pos = pDict->GetStartPos(); - while(pos) - { - CFX_ByteString key(""); - CPDF_Object* pNextObj = pDict->GetNextElement(pos, key); - if (!FXSYS_strcmp(key, "Parent") || !FXSYS_strcmp(key, "Prev") || !FXSYS_strcmp(key, "First")) - continue; - if(pNextObj) - { - if(!UpdateReference(pNextObj, pDoc, pMapPtrToPtr)) - pDict->RemoveAt(key); - } - else - return FALSE; - } - break; - } - case PDFOBJ_ARRAY: - { - CPDF_Array* pArray = (CPDF_Array*)pObj; - FX_DWORD count = pArray->GetCount(); - for(FX_DWORD i = 0; i < count; i ++) - { - CPDF_Object* pNextObj = pArray->GetElement(i); - if(pNextObj) - { - if(!UpdateReference(pNextObj, pDoc, pMapPtrToPtr)) - return FALSE; - } - else - return FALSE; - } - break; - } - case PDFOBJ_STREAM: - { - CPDF_Stream* pStream = (CPDF_Stream*)pObj; - CPDF_Dictionary* pDict = pStream->GetDict(); - if(pDict) - { - if(!UpdateReference(pDict, pDoc, pMapPtrToPtr)) - return FALSE; - } - else - return FALSE; - break; - } - default: break; + case PDFOBJ_DICTIONARY: { + CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj; + + FX_POSITION pos = pDict->GetStartPos(); + while (pos) { + CFX_ByteString key(""); + CPDF_Object* pNextObj = pDict->GetNextElement(pos, key); + if (!FXSYS_strcmp(key, "Parent") || !FXSYS_strcmp(key, "Prev") || + !FXSYS_strcmp(key, "First")) + continue; + if (pNextObj) { + if (!UpdateReference(pNextObj, pDoc, pMapPtrToPtr)) + pDict->RemoveAt(key); + } else + return FALSE; + } + break; } - - return TRUE; -} - -int CPDF_PageOrganizer::GetNewObjId(CPDF_Document *pDoc, CFX_MapPtrToPtr* pMapPtrToPtr, - CPDF_Reference *pRef) -{ - if(!pRef) - return 0; - - size_t dwObjnum = pRef->GetRefObjNum(); - size_t dwNewObjNum = 0; - - pMapPtrToPtr->Lookup((void*)dwObjnum, (void*&)dwNewObjNum); - if(dwNewObjNum) - { - return (int)dwNewObjNum; + case PDFOBJ_ARRAY: { + CPDF_Array* pArray = (CPDF_Array*)pObj; + FX_DWORD count = pArray->GetCount(); + for (FX_DWORD i = 0; i < count; i++) { + CPDF_Object* pNextObj = pArray->GetElement(i); + if (pNextObj) { + if (!UpdateReference(pNextObj, pDoc, pMapPtrToPtr)) + return FALSE; + } else + return FALSE; + } + break; } - - CPDF_Object* pDirect = pRef->GetDirect(); - if(!pDirect) - { - return 0; + case PDFOBJ_STREAM: { + CPDF_Stream* pStream = (CPDF_Stream*)pObj; + CPDF_Dictionary* pDict = pStream->GetDict(); + if (pDict) { + if (!UpdateReference(pDict, pDoc, pMapPtrToPtr)) + return FALSE; + } else + return FALSE; + break; } + default: + break; + } - CPDF_Object* pClone = pDirect->Clone(); - if(!pClone) - { - return 0; - } + return TRUE; +} - if(pClone->GetType() == PDFOBJ_DICTIONARY) - { - CPDF_Dictionary* pDictClone = (CPDF_Dictionary*)pClone; - if(pDictClone->KeyExist("Type")) - { - CFX_ByteString strType = pDictClone->GetString("Type"); - if(!FXSYS_stricmp(strType, "Pages")) - { - pDictClone->Release(); - return 4; - } - else if(!FXSYS_stricmp(strType, "Page")) - { - pDictClone->Release(); - return 0; - } - } - } +int CPDF_PageOrganizer::GetNewObjId(CPDF_Document* pDoc, + CFX_MapPtrToPtr* pMapPtrToPtr, + CPDF_Reference* pRef) { + if (!pRef) + return 0; - dwNewObjNum = pDoc->AddIndirectObject(pClone); - pMapPtrToPtr->SetAt((void*)dwObjnum, (void*)dwNewObjNum); - if(!UpdateReference(pClone, pDoc, pMapPtrToPtr)) - { - pClone->Release(); + size_t dwObjnum = pRef->GetRefObjNum(); + size_t dwNewObjNum = 0; + + pMapPtrToPtr->Lookup((void*)dwObjnum, (void*&)dwNewObjNum); + if (dwNewObjNum) { + return (int)dwNewObjNum; + } + + CPDF_Object* pDirect = pRef->GetDirect(); + if (!pDirect) { + return 0; + } + + CPDF_Object* pClone = pDirect->Clone(); + if (!pClone) { + return 0; + } + + if (pClone->GetType() == PDFOBJ_DICTIONARY) { + CPDF_Dictionary* pDictClone = (CPDF_Dictionary*)pClone; + if (pDictClone->KeyExist("Type")) { + CFX_ByteString strType = pDictClone->GetString("Type"); + if (!FXSYS_stricmp(strType, "Pages")) { + pDictClone->Release(); + return 4; + } else if (!FXSYS_stricmp(strType, "Page")) { + pDictClone->Release(); return 0; + } } + } - return (int)dwNewObjNum; -} + dwNewObjNum = pDoc->AddIndirectObject(pClone); + pMapPtrToPtr->SetAt((void*)dwObjnum, (void*)dwNewObjNum); + if (!UpdateReference(pClone, pDoc, pMapPtrToPtr)) { + pClone->Release(); + return 0; + } -FPDF_BOOL ParserPageRangeString(CFX_ByteString rangstring, CFX_WordArray* pageArray,int nCount) -{ - if(rangstring.GetLength() != 0) - { - rangstring.Remove(' '); - int nLength = rangstring.GetLength(); - CFX_ByteString cbCompareString("0123456789-,"); - for(int i=0; i nCount) - return FALSE; - - pageArray->Add((FX_WORD)lPageNum); - } - else - { - int nStartPageNum = atol(cbMidRange.Mid(0,nMid)); - if (nStartPageNum ==0) - return FALSE; - - nMid = nMid+1; - int nEnd = cbMidRange.GetLength()-nMid; - if (nEnd ==0) - return FALSE; - - int nEndPageNum = atol(cbMidRange.Mid(nMid,nEnd)); - if (nStartPageNum < 0 ||nStartPageNum >nEndPageNum|| nEndPageNum > nCount) - return FALSE; - - for (int nIndex = nStartPageNum; nIndex <= nEndPageNum; ++nIndex) - pageArray->Add(nIndex); - } - nStringFrom = nStringTo + 1; - } - } - return TRUE; + return (int)dwNewObjNum; } -DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc,FPDF_DOCUMENT src_doc, - FPDF_BYTESTRING pagerange, int index) -{ - if(dest_doc == NULL || src_doc == NULL ) +FPDF_BOOL ParserPageRangeString(CFX_ByteString rangstring, + CFX_WordArray* pageArray, + int nCount) { + if (rangstring.GetLength() != 0) { + rangstring.Remove(' '); + int nLength = rangstring.GetLength(); + CFX_ByteString cbCompareString("0123456789-,"); + for (int i = 0; i < nLength; i++) { + if (cbCompareString.Find(rangstring[i]) == -1) return FALSE; - CFX_WordArray pageArray; - CPDFXFA_Document* pSrcDoc = (CPDFXFA_Document*)src_doc; - CPDF_Document* pSrcPDFDoc = pSrcDoc->GetPDFDoc(); - int nCount = pSrcPDFDoc->GetPageCount(); - if(pagerange) - { - if(ParserPageRangeString(pagerange,&pageArray,nCount) == FALSE) - return FALSE; } - else - { - for(int i=1; i<=nCount; i++) - { - pageArray.Add(i); - } + CFX_ByteString cbMidRange; + int nStringFrom = 0; + int nStringTo = 0; + while (nStringTo < nLength) { + nStringTo = rangstring.Find(',', nStringFrom); + if (nStringTo == -1) { + nStringTo = nLength; + } + cbMidRange = rangstring.Mid(nStringFrom, nStringTo - nStringFrom); + + int nMid = cbMidRange.Find('-'); + if (nMid == -1) { + long lPageNum = atol(cbMidRange); + if (lPageNum <= 0 || lPageNum > nCount) + return FALSE; + + pageArray->Add((FX_WORD)lPageNum); + } else { + int nStartPageNum = atol(cbMidRange.Mid(0, nMid)); + if (nStartPageNum == 0) + return FALSE; + + nMid = nMid + 1; + int nEnd = cbMidRange.GetLength() - nMid; + if (nEnd == 0) + return FALSE; + + int nEndPageNum = atol(cbMidRange.Mid(nMid, nEnd)); + if (nStartPageNum < 0 || nStartPageNum > nEndPageNum || + nEndPageNum > nCount) + return FALSE; + + for (int nIndex = nStartPageNum; nIndex <= nEndPageNum; ++nIndex) + pageArray->Add(nIndex); + } + nStringFrom = nStringTo + 1; } + } + return TRUE; +} - CPDFXFA_Document* pDestDoc = (CPDFXFA_Document*)dest_doc; - CPDF_Document* pDestPDFDoc = pDestDoc->GetPDFDoc(); - CPDF_PageOrganizer pageOrg; +DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc, + FPDF_DOCUMENT src_doc, + FPDF_BYTESTRING pagerange, + int index) { + if (dest_doc == NULL || src_doc == NULL) + return FALSE; + CFX_WordArray pageArray; + CPDFXFA_Document* pSrcDoc = (CPDFXFA_Document*)src_doc; + CPDF_Document* pSrcPDFDoc = pSrcDoc->GetPDFDoc(); + int nCount = pSrcPDFDoc->GetPageCount(); + if (pagerange) { + if (ParserPageRangeString(pagerange, &pageArray, nCount) == FALSE) + return FALSE; + } else { + for (int i = 1; i <= nCount; i++) { + pageArray.Add(i); + } + } - pageOrg.PDFDocInit(pDestPDFDoc,pSrcPDFDoc); + CPDFXFA_Document* pDestDoc = (CPDFXFA_Document*)dest_doc; + CPDF_Document* pDestPDFDoc = pDestDoc->GetPDFDoc(); + CPDF_PageOrganizer pageOrg; - if(pageOrg.ExportPage(pSrcPDFDoc,&pageArray,pDestPDFDoc,index)) - return TRUE; - return FALSE; -} + pageOrg.PDFDocInit(pDestPDFDoc, pSrcPDFDoc); -DLLEXPORT FPDF_BOOL STDCALL FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc, FPDF_DOCUMENT src_doc) -{ - if(src_doc == NULL || dest_doc == NULL) - return false; - CPDFXFA_Document* pSrcDoc = (CPDFXFA_Document*)src_doc; - CPDF_Document* pSrcPDFDoc = pSrcDoc->GetPDFDoc(); - CPDF_Dictionary* pSrcDict = pSrcPDFDoc->GetRoot(); - pSrcDict = pSrcDict->GetDict(FX_BSTRC("ViewerPreferences")); - if(!pSrcDict) - return FALSE; - CPDFXFA_Document* pDstDoc = (CPDFXFA_Document*)dest_doc; - CPDF_Document* pDstPDFDoc = pDstDoc->GetPDFDoc(); - CPDF_Dictionary* pDstDict = pDstPDFDoc->GetRoot(); - if(!pDstDict) - return FALSE; - pDstDict->SetAt(FX_BSTRC("ViewerPreferences"), pSrcDict->Clone(TRUE)); + if (pageOrg.ExportPage(pSrcPDFDoc, &pageArray, pDestPDFDoc, index)) return TRUE; + return FALSE; } +DLLEXPORT FPDF_BOOL STDCALL FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc, + FPDF_DOCUMENT src_doc) { + if (src_doc == NULL || dest_doc == NULL) + return false; + CPDFXFA_Document* pSrcDoc = (CPDFXFA_Document*)src_doc; + CPDF_Document* pSrcPDFDoc = pSrcDoc->GetPDFDoc(); + CPDF_Dictionary* pSrcDict = pSrcPDFDoc->GetRoot(); + pSrcDict = pSrcDict->GetDict(FX_BSTRC("ViewerPreferences")); + if (!pSrcDict) + return FALSE; + CPDFXFA_Document* pDstDoc = (CPDFXFA_Document*)dest_doc; + CPDF_Document* pDstPDFDoc = pDstDoc->GetPDFDoc(); + CPDF_Dictionary* pDstDict = pDstPDFDoc->GetRoot(); + if (!pDstDict) + return FALSE; + pDstDict->SetAt(FX_BSTRC("ViewerPreferences"), pSrcDict->Clone(TRUE)); + return TRUE; +} diff --git a/fpdfsdk/src/fpdfsave.cpp b/fpdfsdk/src/fpdfsave.cpp index bea5392670..14f73095fa 100644 --- a/fpdfsdk/src/fpdfsave.cpp +++ b/fpdfsdk/src/fpdfsave.cpp @@ -18,339 +18,320 @@ #include #endif -class CFX_IFileWrite final : public IFX_StreamWrite -{ +class CFX_IFileWrite final : public IFX_StreamWrite { + public: + CFX_IFileWrite(); + FX_BOOL Init(FPDF_FILEWRITE* pFileWriteStruct); + virtual FX_BOOL WriteBlock(const void* pData, size_t size) override; + virtual void Release() override {} + + protected: + FPDF_FILEWRITE* m_pFileWriteStruct; +}; -public: - CFX_IFileWrite(); - FX_BOOL Init( FPDF_FILEWRITE * pFileWriteStruct ); - virtual FX_BOOL WriteBlock(const void* pData, size_t size) override; - virtual void Release() override {} +CFX_IFileWrite::CFX_IFileWrite() { + m_pFileWriteStruct = NULL; +} -protected: - FPDF_FILEWRITE* m_pFileWriteStruct; -}; +FX_BOOL CFX_IFileWrite::Init(FPDF_FILEWRITE* pFileWriteStruct) { + if (!pFileWriteStruct) + return FALSE; -CFX_IFileWrite::CFX_IFileWrite() -{ - m_pFileWriteStruct = NULL; + m_pFileWriteStruct = pFileWriteStruct; + return TRUE; } -FX_BOOL CFX_IFileWrite::Init( FPDF_FILEWRITE * pFileWriteStruct ) -{ - if (!pFileWriteStruct) - return FALSE; +FX_BOOL CFX_IFileWrite::WriteBlock(const void* pData, size_t size) { + if (!m_pFileWriteStruct) + return FALSE; - m_pFileWriteStruct = pFileWriteStruct; - return TRUE; + m_pFileWriteStruct->WriteBlock(m_pFileWriteStruct, pData, size); + return TRUE; } -FX_BOOL CFX_IFileWrite::WriteBlock(const void* pData, size_t size) -{ - if (!m_pFileWriteStruct) - return FALSE; +#define XFA_DATASETS 0 +#define XFA_FORMS 1 - m_pFileWriteStruct->WriteBlock( m_pFileWriteStruct, pData, size ); +FX_BOOL _SaveXFADocumentData(CPDFXFA_Document* pDocument, + CFX_PtrArray& fileList) { + if (!pDocument) + return FALSE; + if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA && + pDocument->GetDocType() != DOCTYPE_STATIC_XFA) + return TRUE; + if (!CPDFXFA_App::GetInstance()->GetXFAApp()) return TRUE; -} -#define XFA_DATASETS 0 -#define XFA_FORMS 1 - -FX_BOOL _SaveXFADocumentData(CPDFXFA_Document* pDocument, CFX_PtrArray& fileList) -{ - if (!pDocument) - return FALSE; - if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA && pDocument->GetDocType() != DOCTYPE_STATIC_XFA) - return TRUE; - if (!CPDFXFA_App::GetInstance()->GetXFAApp()) - return TRUE; - - IXFA_DocView* pXFADocView = pDocument->GetXFADocView(); - if (NULL == pXFADocView) - return TRUE; - - IXFA_DocHandler *pXFADocHandler = CPDFXFA_App::GetInstance()->GetXFAApp()->GetDocHandler(); - CPDF_Document * pPDFDocument = pDocument->GetPDFDoc(); - if (pDocument == NULL) - return FALSE; - - CPDF_Dictionary* pRoot = pPDFDocument->GetRoot(); - if (pRoot == NULL) - return FALSE; - CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); - if (NULL == pAcroForm) - return FALSE; - CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); - if (pXFA == NULL) - return TRUE; - if(pXFA->GetType() != PDFOBJ_ARRAY) - return FALSE; - CPDF_Array* pArray = pXFA->GetArray(); - if (NULL == pArray) - return FALSE; - int size = pArray->GetCount(); - int iFormIndex = -1; - int iDataSetsIndex = -1; - int iTemplate = -1; - int iLast = size - 2; - for (int i = 0; i < size - 1; i++) - { - CPDF_Object* pPDFObj = pArray->GetElement(i); - if (pPDFObj->GetType() != PDFOBJ_STRING) - continue; - if (pPDFObj->GetString() == "form") - iFormIndex = i+1; - else if (pPDFObj->GetString() == "datasets") - iDataSetsIndex = i+1; - else if (pPDFObj->GetString() == FX_BSTRC("template")) - iTemplate = i + 1; - } - IXFA_ChecksumContext* pContext = NULL; + IXFA_DocView* pXFADocView = pDocument->GetXFADocView(); + if (NULL == pXFADocView) + return TRUE; + + IXFA_DocHandler* pXFADocHandler = + CPDFXFA_App::GetInstance()->GetXFAApp()->GetDocHandler(); + CPDF_Document* pPDFDocument = pDocument->GetPDFDoc(); + if (pDocument == NULL) + return FALSE; + + CPDF_Dictionary* pRoot = pPDFDocument->GetRoot(); + if (pRoot == NULL) + return FALSE; + CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); + if (NULL == pAcroForm) + return FALSE; + CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); + if (pXFA == NULL) + return TRUE; + if (pXFA->GetType() != PDFOBJ_ARRAY) + return FALSE; + CPDF_Array* pArray = pXFA->GetArray(); + if (NULL == pArray) + return FALSE; + int size = pArray->GetCount(); + int iFormIndex = -1; + int iDataSetsIndex = -1; + int iTemplate = -1; + int iLast = size - 2; + for (int i = 0; i < size - 1; i++) { + CPDF_Object* pPDFObj = pArray->GetElement(i); + if (pPDFObj->GetType() != PDFOBJ_STRING) + continue; + if (pPDFObj->GetString() == "form") + iFormIndex = i + 1; + else if (pPDFObj->GetString() == "datasets") + iDataSetsIndex = i + 1; + else if (pPDFObj->GetString() == FX_BSTRC("template")) + iTemplate = i + 1; + } + IXFA_ChecksumContext* pContext = NULL; #define XFA_USECKSUM #ifdef XFA_USECKSUM - //Checksum - pContext = XFA_Checksum_Create(); - FXSYS_assert(pContext); - pContext->StartChecksum(); - - //template - if (iTemplate > -1) - { - CPDF_Stream *pTemplateStream = pArray->GetStream(iTemplate); - CPDF_StreamAcc streamAcc; - streamAcc.LoadAllData(pTemplateStream); - uint8_t* pData = (uint8_t*)streamAcc.GetData(); - FX_DWORD dwSize2 = streamAcc.GetSize(); - IFX_FileStream *pTemplate = FX_CreateMemoryStream(pData, dwSize2); - pContext->UpdateChecksum((IFX_FileRead*)pTemplate); - pTemplate->Release(); - } + // Checksum + pContext = XFA_Checksum_Create(); + FXSYS_assert(pContext); + pContext->StartChecksum(); + + // template + if (iTemplate > -1) { + CPDF_Stream* pTemplateStream = pArray->GetStream(iTemplate); + CPDF_StreamAcc streamAcc; + streamAcc.LoadAllData(pTemplateStream); + uint8_t* pData = (uint8_t*)streamAcc.GetData(); + FX_DWORD dwSize2 = streamAcc.GetSize(); + IFX_FileStream* pTemplate = FX_CreateMemoryStream(pData, dwSize2); + pContext->UpdateChecksum((IFX_FileRead*)pTemplate); + pTemplate->Release(); + } #endif - CPDF_Stream* pFormStream = NULL; - CPDF_Stream* pDataSetsStream = NULL; - if (iFormIndex != -1) - { - //Get form CPDF_Stream - CPDF_Object* pFormPDFObj = pArray->GetElement(iFormIndex); - if (pFormPDFObj->GetType() == PDFOBJ_REFERENCE) - { - CPDF_Reference* pFormRefObj = (CPDF_Reference*)pFormPDFObj; - CPDF_Object* pFormDircetObj = pFormPDFObj->GetDirect(); - if (NULL != pFormDircetObj && pFormDircetObj->GetType() == PDFOBJ_STREAM) - { - pFormStream = (CPDF_Stream*)pFormDircetObj; - } - } - else if (pFormPDFObj->GetType() == PDFOBJ_STREAM) - { - pFormStream = (CPDF_Stream*)pFormPDFObj; - } + CPDF_Stream* pFormStream = NULL; + CPDF_Stream* pDataSetsStream = NULL; + if (iFormIndex != -1) { + // Get form CPDF_Stream + CPDF_Object* pFormPDFObj = pArray->GetElement(iFormIndex); + if (pFormPDFObj->GetType() == PDFOBJ_REFERENCE) { + CPDF_Reference* pFormRefObj = (CPDF_Reference*)pFormPDFObj; + CPDF_Object* pFormDircetObj = pFormPDFObj->GetDirect(); + if (NULL != pFormDircetObj && + pFormDircetObj->GetType() == PDFOBJ_STREAM) { + pFormStream = (CPDF_Stream*)pFormDircetObj; + } + } else if (pFormPDFObj->GetType() == PDFOBJ_STREAM) { + pFormStream = (CPDF_Stream*)pFormPDFObj; } - - if (iDataSetsIndex != -1) - { - //Get datasets CPDF_Stream - CPDF_Object* pDataSetsPDFObj = pArray->GetElement(iDataSetsIndex); - if (pDataSetsPDFObj->GetType() == PDFOBJ_REFERENCE) - { - CPDF_Reference* pDataSetsRefObj = (CPDF_Reference*)pDataSetsPDFObj; - CPDF_Object* pDataSetsDircetObj = pDataSetsRefObj->GetDirect(); - if (NULL != pDataSetsDircetObj && pDataSetsDircetObj->GetType() == PDFOBJ_STREAM) - { - pDataSetsStream = (CPDF_Stream*)pDataSetsDircetObj; - } - } - else if (pDataSetsPDFObj->GetType() == PDFOBJ_STREAM) - { - pDataSetsStream = (CPDF_Stream*)pDataSetsPDFObj; - } + } + + if (iDataSetsIndex != -1) { + // Get datasets CPDF_Stream + CPDF_Object* pDataSetsPDFObj = pArray->GetElement(iDataSetsIndex); + if (pDataSetsPDFObj->GetType() == PDFOBJ_REFERENCE) { + CPDF_Reference* pDataSetsRefObj = (CPDF_Reference*)pDataSetsPDFObj; + CPDF_Object* pDataSetsDircetObj = pDataSetsRefObj->GetDirect(); + if (NULL != pDataSetsDircetObj && + pDataSetsDircetObj->GetType() == PDFOBJ_STREAM) { + pDataSetsStream = (CPDF_Stream*)pDataSetsDircetObj; + } + } else if (pDataSetsPDFObj->GetType() == PDFOBJ_STREAM) { + pDataSetsStream = (CPDF_Stream*)pDataSetsPDFObj; } - //end - //L"datasets" - { - IFX_FileStream* pDsfileWrite = FX_CreateMemoryStream(); - if ( NULL == pDsfileWrite ) - { - pContext->Release(); - pDsfileWrite->Release(); - return FALSE; - } - if (pXFADocHandler->SavePackage(pXFADocView->GetDoc(), CFX_WideStringC(L"datasets"), pDsfileWrite) && pDsfileWrite->GetSize()>0) - { + } + // end + // L"datasets" + { + IFX_FileStream* pDsfileWrite = FX_CreateMemoryStream(); + if (NULL == pDsfileWrite) { + pContext->Release(); + pDsfileWrite->Release(); + return FALSE; + } + if (pXFADocHandler->SavePackage(pXFADocView->GetDoc(), + CFX_WideStringC(L"datasets"), + pDsfileWrite) && + pDsfileWrite->GetSize() > 0) { #ifdef XFA_USECKSUM - //Datasets - pContext->UpdateChecksum((IFX_FileRead*)pDsfileWrite); - pContext->FinishChecksum(); + // Datasets + pContext->UpdateChecksum((IFX_FileRead*)pDsfileWrite); + pContext->FinishChecksum(); #endif - CPDF_Dictionary* pDataDict = FX_NEW CPDF_Dictionary; - if (iDataSetsIndex != -1) - { - if (pDataSetsStream) - pDataSetsStream->InitStream(pDsfileWrite, pDataDict); - } - else - { - CPDF_Stream* pData = FX_NEW CPDF_Stream(NULL, 0, NULL); - pData->InitStream(pDsfileWrite, pDataDict); - FX_DWORD AppStreamobjnum = pPDFDocument->AddIndirectObject(pData); - CPDF_Reference* pRef = (CPDF_Reference*)pPDFDocument->GetIndirectObject(AppStreamobjnum); - { - iLast = pArray->GetCount() -2; - pArray->InsertAt(iLast,CPDF_String::Create("datasets")); - pArray->InsertAt(iLast+1, pData, pPDFDocument); - } - } - fileList.Add(pDsfileWrite); - } - } - - - //L"form" - { - - IFX_FileStream* pfileWrite = FX_CreateMemoryStream(); - if (NULL == pfileWrite) + CPDF_Dictionary* pDataDict = FX_NEW CPDF_Dictionary; + if (iDataSetsIndex != -1) { + if (pDataSetsStream) + pDataSetsStream->InitStream(pDsfileWrite, pDataDict); + } else { + CPDF_Stream* pData = FX_NEW CPDF_Stream(NULL, 0, NULL); + pData->InitStream(pDsfileWrite, pDataDict); + FX_DWORD AppStreamobjnum = pPDFDocument->AddIndirectObject(pData); + CPDF_Reference* pRef = + (CPDF_Reference*)pPDFDocument->GetIndirectObject(AppStreamobjnum); { - pContext->Release(); - return FALSE; + iLast = pArray->GetCount() - 2; + pArray->InsertAt(iLast, CPDF_String::Create("datasets")); + pArray->InsertAt(iLast + 1, pData, pPDFDocument); } - if(pXFADocHandler->SavePackage(pXFADocView->GetDoc(), CFX_WideStringC(L"form"), pfileWrite, pContext) && pfileWrite > 0) + } + fileList.Add(pDsfileWrite); + } + } + + // L"form" + { + IFX_FileStream* pfileWrite = FX_CreateMemoryStream(); + if (NULL == pfileWrite) { + pContext->Release(); + return FALSE; + } + if (pXFADocHandler->SavePackage(pXFADocView->GetDoc(), + CFX_WideStringC(L"form"), pfileWrite, + pContext) && + pfileWrite > 0) { + CPDF_Dictionary* pDataDict = FX_NEW CPDF_Dictionary; + if (iFormIndex != -1) { + if (pFormStream) + pFormStream->InitStream(pfileWrite, pDataDict); + } else { + CPDF_Stream* pData = FX_NEW CPDF_Stream(NULL, 0, NULL); + pData->InitStream(pfileWrite, pDataDict); + FX_DWORD AppStreamobjnum = pPDFDocument->AddIndirectObject(pData); + CPDF_Reference* pRef = + (CPDF_Reference*)pPDFDocument->GetIndirectObject(AppStreamobjnum); { - CPDF_Dictionary* pDataDict = FX_NEW CPDF_Dictionary; - if (iFormIndex != -1) - { - if (pFormStream) - pFormStream->InitStream(pfileWrite, pDataDict); - } - else - { - CPDF_Stream* pData = FX_NEW CPDF_Stream(NULL, 0, NULL); - pData->InitStream(pfileWrite, pDataDict); - FX_DWORD AppStreamobjnum = pPDFDocument->AddIndirectObject(pData); - CPDF_Reference* pRef = (CPDF_Reference*)pPDFDocument->GetIndirectObject(AppStreamobjnum); - { - iLast = pArray->GetCount() -2; - pArray->InsertAt(iLast, CPDF_String::Create("form")); - pArray->InsertAt(iLast+1, pData, pPDFDocument); - } - } - fileList.Add(pfileWrite); + iLast = pArray->GetCount() - 2; + pArray->InsertAt(iLast, CPDF_String::Create("form")); + pArray->InsertAt(iLast + 1, pData, pPDFDocument); } + } + fileList.Add(pfileWrite); } - pContext->Release(); - return TRUE; + } + pContext->Release(); + return TRUE; } +FX_BOOL _SendPostSaveToXFADoc(CPDFXFA_Document* pDocument) { + if (!pDocument) + return FALSE; -FX_BOOL _SendPostSaveToXFADoc(CPDFXFA_Document* pDocument) -{ - if (!pDocument) - return FALSE; - - if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA && pDocument->GetDocType() != DOCTYPE_STATIC_XFA) - return TRUE; - - IXFA_DocView* pXFADocView = pDocument->GetXFADocView(); - if (NULL == pXFADocView) - return FALSE; - IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler(); + if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA && + pDocument->GetDocType() != DOCTYPE_STATIC_XFA) + return TRUE; - CXFA_WidgetAcc* pWidgetAcc = NULL; - IXFA_WidgetAccIterator* pWidgetAccIterator = pXFADocView->CreateWidgetAccIterator(); + IXFA_DocView* pXFADocView = pDocument->GetXFADocView(); + if (NULL == pXFADocView) + return FALSE; + IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler(); + + CXFA_WidgetAcc* pWidgetAcc = NULL; + IXFA_WidgetAccIterator* pWidgetAccIterator = + pXFADocView->CreateWidgetAccIterator(); + pWidgetAcc = pWidgetAccIterator->MoveToNext(); + while (pWidgetAcc) { + CXFA_EventParam preParam; + preParam.m_eType = XFA_EVENT_PostSave; + pWidgetHander->ProcessEvent(pWidgetAcc, &preParam); pWidgetAcc = pWidgetAccIterator->MoveToNext(); - while(pWidgetAcc) - { - CXFA_EventParam preParam; - preParam.m_eType = XFA_EVENT_PostSave; - pWidgetHander->ProcessEvent(pWidgetAcc,&preParam); - pWidgetAcc = pWidgetAccIterator->MoveToNext(); - } - pWidgetAccIterator->Release(); - pXFADocView->UpdateDocView(); - pDocument->_ClearChangeMark(); - return TRUE; + } + pWidgetAccIterator->Release(); + pXFADocView->UpdateDocView(); + pDocument->_ClearChangeMark(); + return TRUE; } - -FX_BOOL _SendPreSaveToXFADoc(CPDFXFA_Document* pDocument, CFX_PtrArray& fileList) -{ - if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA && pDocument->GetDocType() != DOCTYPE_STATIC_XFA) - return TRUE; - IXFA_DocView* pXFADocView = pDocument->GetXFADocView(); - if (NULL == pXFADocView) - return TRUE; - IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler(); - CXFA_WidgetAcc* pWidgetAcc = NULL; - IXFA_WidgetAccIterator* pWidgetAccIterator = pXFADocView->CreateWidgetAccIterator(); +FX_BOOL _SendPreSaveToXFADoc(CPDFXFA_Document* pDocument, + CFX_PtrArray& fileList) { + if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA && + pDocument->GetDocType() != DOCTYPE_STATIC_XFA) + return TRUE; + IXFA_DocView* pXFADocView = pDocument->GetXFADocView(); + if (NULL == pXFADocView) + return TRUE; + IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler(); + CXFA_WidgetAcc* pWidgetAcc = NULL; + IXFA_WidgetAccIterator* pWidgetAccIterator = + pXFADocView->CreateWidgetAccIterator(); + pWidgetAcc = pWidgetAccIterator->MoveToNext(); + while (pWidgetAcc) { + CXFA_EventParam preParam; + preParam.m_eType = XFA_EVENT_PreSave; + pWidgetHander->ProcessEvent(pWidgetAcc, &preParam); pWidgetAcc = pWidgetAccIterator->MoveToNext(); - while(pWidgetAcc) - { - CXFA_EventParam preParam; - preParam.m_eType = XFA_EVENT_PreSave; - pWidgetHander->ProcessEvent(pWidgetAcc, &preParam); - pWidgetAcc = pWidgetAccIterator->MoveToNext(); - } - pWidgetAccIterator->Release(); - pXFADocView->UpdateDocView(); - return _SaveXFADocumentData(pDocument, fileList); + } + pWidgetAccIterator->Release(); + pXFADocView->UpdateDocView(); + return _SaveXFADocumentData(pDocument, fileList); } -FPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document, FPDF_FILEWRITE * pFileWrite,FPDF_DWORD flags, FPDF_BOOL bSetVersion, - int fileVerion) -{ - CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; - - CFX_PtrArray fileList; - - _SendPreSaveToXFADoc(pDoc, fileList); - - CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); - if (!pPDFDoc) - return 0; - - if ( flags < FPDF_INCREMENTAL || flags > FPDF_REMOVE_SECURITY ) - { - flags = 0; - } - - CPDF_Creator FileMaker(pPDFDoc); - if (bSetVersion) - FileMaker.SetFileVersion(fileVerion); - if (flags == FPDF_REMOVE_SECURITY) - { - flags = 0; - FileMaker.RemoveSecurity(); - } - CFX_IFileWrite* pStreamWrite = NULL; - FX_BOOL bRet; - pStreamWrite = new CFX_IFileWrite; - pStreamWrite->Init( pFileWrite ); - bRet = FileMaker.Create(pStreamWrite, flags); - - _SendPostSaveToXFADoc(pDoc); - //pDoc->_ClearChangeMark(); - - for (int i = 0; i < fileList.GetSize(); i++) - { - IFX_FileStream* pFile = (IFX_FileStream*)fileList.GetAt(i); - pFile->Release(); - } - fileList.RemoveAll(); - - delete pStreamWrite; - return bRet; +FPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document, + FPDF_FILEWRITE* pFileWrite, + FPDF_DWORD flags, + FPDF_BOOL bSetVersion, + int fileVerion) { + CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; + + CFX_PtrArray fileList; + + _SendPreSaveToXFADoc(pDoc, fileList); + + CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); + if (!pPDFDoc) + return 0; + + if (flags < FPDF_INCREMENTAL || flags > FPDF_REMOVE_SECURITY) { + flags = 0; + } + + CPDF_Creator FileMaker(pPDFDoc); + if (bSetVersion) + FileMaker.SetFileVersion(fileVerion); + if (flags == FPDF_REMOVE_SECURITY) { + flags = 0; + FileMaker.RemoveSecurity(); + } + CFX_IFileWrite* pStreamWrite = NULL; + FX_BOOL bRet; + pStreamWrite = new CFX_IFileWrite; + pStreamWrite->Init(pFileWrite); + bRet = FileMaker.Create(pStreamWrite, flags); + + _SendPostSaveToXFADoc(pDoc); + // pDoc->_ClearChangeMark(); + + for (int i = 0; i < fileList.GetSize(); i++) { + IFX_FileStream* pFile = (IFX_FileStream*)fileList.GetAt(i); + pFile->Release(); + } + fileList.RemoveAll(); + + delete pStreamWrite; + return bRet; } -DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite, - FPDF_DWORD flags ) -{ - return _FPDF_Doc_Save(document, pFileWrite, flags, FALSE , 0); +DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy(FPDF_DOCUMENT document, + FPDF_FILEWRITE* pFileWrite, + FPDF_DWORD flags) { + return _FPDF_Doc_Save(document, pFileWrite, flags, FALSE, 0); } -DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite, - FPDF_DWORD flags, int fileVersion) -{ - return _FPDF_Doc_Save(document, pFileWrite, flags, TRUE , fileVersion); +DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document, + FPDF_FILEWRITE* pFileWrite, + FPDF_DWORD flags, + int fileVersion) { + return _FPDF_Doc_Save(document, pFileWrite, flags, TRUE, fileVersion); } - diff --git a/fpdfsdk/src/fpdftext.cpp b/fpdfsdk/src/fpdftext.cpp index 7b07a13890..fad2b8479f 100644 --- a/fpdfsdk/src/fpdftext.cpp +++ b/fpdfsdk/src/fpdftext.cpp @@ -14,240 +14,281 @@ #include #endif - // jabdelmalek: commented out to build on Linux. Not used. - // extern HANDLE g_hModule; +// jabdelmalek: commented out to build on Linux. Not used. +// extern HANDLE g_hModule; -DLLEXPORT FPDF_TEXTPAGE STDCALL FPDFText_LoadPage(FPDF_PAGE page) -{ - if (!page) return NULL; - IPDF_TextPage* textpage=NULL; - CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; - if (!pPage->GetPDFPage()) return NULL; - CPDFXFA_Document* pDoc = pPage->GetDocument(); - CPDF_ViewerPreferences viewRef(pDoc->GetPDFDoc()); - textpage=IPDF_TextPage::CreateTextPage((CPDF_Page*)pPage->GetPDFPage(),viewRef.IsDirectionR2L()); - textpage->ParseTextPage(); - - return textpage; -} -DLLEXPORT void STDCALL FPDFText_ClosePage(FPDF_TEXTPAGE text_page) -{ - delete (IPDF_TextPage*)text_page; -} -DLLEXPORT int STDCALL FPDFText_CountChars(FPDF_TEXTPAGE text_page) -{ - if (!text_page) return -1; - IPDF_TextPage* textpage=(IPDF_TextPage*)text_page; - return textpage->CountChars(); -} -DLLEXPORT unsigned int STDCALL FPDFText_GetUnicode(FPDF_TEXTPAGE text_page, int index) -{ - if (!text_page) return -1; - IPDF_TextPage* textpage=(IPDF_TextPage*)text_page; - - if (index<0 || index>=textpage->CountChars()) return 0; +DLLEXPORT FPDF_TEXTPAGE STDCALL FPDFText_LoadPage(FPDF_PAGE page) { + if (!page) + return NULL; + IPDF_TextPage* textpage = NULL; + CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; + if (!pPage->GetPDFPage()) + return NULL; + CPDFXFA_Document* pDoc = pPage->GetDocument(); + CPDF_ViewerPreferences viewRef(pDoc->GetPDFDoc()); + textpage = IPDF_TextPage::CreateTextPage((CPDF_Page*)pPage->GetPDFPage(), + viewRef.IsDirectionR2L()); + textpage->ParseTextPage(); - FPDF_CHAR_INFO charinfo; - textpage->GetCharInfo(index,charinfo); - return charinfo.m_Unicode; + return textpage; } -DLLEXPORT double STDCALL FPDFText_GetFontSize(FPDF_TEXTPAGE text_page, int index) -{ - if (!text_page) return 0; - IPDF_TextPage* textpage=(IPDF_TextPage*)text_page; +DLLEXPORT void STDCALL FPDFText_ClosePage(FPDF_TEXTPAGE text_page) { + delete (IPDF_TextPage*)text_page; +} +DLLEXPORT int STDCALL FPDFText_CountChars(FPDF_TEXTPAGE text_page) { + if (!text_page) + return -1; + IPDF_TextPage* textpage = (IPDF_TextPage*)text_page; + return textpage->CountChars(); +} +DLLEXPORT unsigned int STDCALL FPDFText_GetUnicode(FPDF_TEXTPAGE text_page, + int index) { + if (!text_page) + return -1; + IPDF_TextPage* textpage = (IPDF_TextPage*)text_page; - if (index<0 || index>=textpage->CountChars()) return 0; + if (index < 0 || index >= textpage->CountChars()) + return 0; - FPDF_CHAR_INFO charinfo; - textpage->GetCharInfo(index,charinfo); - return charinfo.m_FontSize; + FPDF_CHAR_INFO charinfo; + textpage->GetCharInfo(index, charinfo); + return charinfo.m_Unicode; } +DLLEXPORT double STDCALL FPDFText_GetFontSize(FPDF_TEXTPAGE text_page, + int index) { + if (!text_page) + return 0; + IPDF_TextPage* textpage = (IPDF_TextPage*)text_page; -DLLEXPORT void STDCALL FPDFText_GetCharBox(FPDF_TEXTPAGE text_page, int index,double* left, - double* right, double* bottom, double* top) -{ - if (!text_page) return; - IPDF_TextPage* textpage=(IPDF_TextPage*)text_page; + if (index < 0 || index >= textpage->CountChars()) + return 0; - if (index<0 || index>=textpage->CountChars()) return ; - FPDF_CHAR_INFO charinfo; - textpage->GetCharInfo(index,charinfo); - *left=charinfo.m_CharBox.left; - *right=charinfo.m_CharBox.right; - *bottom=charinfo.m_CharBox.bottom; - *top=charinfo.m_CharBox.top; + FPDF_CHAR_INFO charinfo; + textpage->GetCharInfo(index, charinfo); + return charinfo.m_FontSize; } -//select -DLLEXPORT int STDCALL FPDFText_GetCharIndexAtPos(FPDF_TEXTPAGE text_page,double x,double y,double xTorelance,double yTorelance) -{ - if (!text_page) return -3; - IPDF_TextPage* textpage=(IPDF_TextPage*)text_page; - return textpage->GetIndexAtPos((FX_FLOAT)x,(FX_FLOAT)y,(FX_FLOAT)xTorelance,(FX_FLOAT)yTorelance); +DLLEXPORT void STDCALL FPDFText_GetCharBox(FPDF_TEXTPAGE text_page, + int index, + double* left, + double* right, + double* bottom, + double* top) { + if (!text_page) + return; + IPDF_TextPage* textpage = (IPDF_TextPage*)text_page; + + if (index < 0 || index >= textpage->CountChars()) + return; + FPDF_CHAR_INFO charinfo; + textpage->GetCharInfo(index, charinfo); + *left = charinfo.m_CharBox.left; + *right = charinfo.m_CharBox.right; + *bottom = charinfo.m_CharBox.bottom; + *top = charinfo.m_CharBox.top; } -DLLEXPORT int STDCALL FPDFText_GetText(FPDF_TEXTPAGE text_page,int start,int count,unsigned short* result) -{ - if (!text_page) return 0; - IPDF_TextPage* textpage=(IPDF_TextPage*)text_page; +// select +DLLEXPORT int STDCALL FPDFText_GetCharIndexAtPos(FPDF_TEXTPAGE text_page, + double x, + double y, + double xTorelance, + double yTorelance) { + if (!text_page) + return -3; + IPDF_TextPage* textpage = (IPDF_TextPage*)text_page; + return textpage->GetIndexAtPos((FX_FLOAT)x, (FX_FLOAT)y, (FX_FLOAT)xTorelance, + (FX_FLOAT)yTorelance); +} - if (start>=textpage->CountChars()) return 0; +DLLEXPORT int STDCALL FPDFText_GetText(FPDF_TEXTPAGE text_page, + int start, + int count, + unsigned short* result) { + if (!text_page) + return 0; + IPDF_TextPage* textpage = (IPDF_TextPage*)text_page; - CFX_WideString str=textpage->GetPageText(start,count); - if(str.GetLength()>count) - str = str.Left(count); + if (start >= textpage->CountChars()) + return 0; - CFX_ByteString cbUTF16str = str.UTF16LE_Encode(); - FXSYS_memcpy(result,cbUTF16str.GetBuffer(cbUTF16str.GetLength()),cbUTF16str.GetLength()); - cbUTF16str.ReleaseBuffer(cbUTF16str.GetLength()); + CFX_WideString str = textpage->GetPageText(start, count); + if (str.GetLength() > count) + str = str.Left(count); - return cbUTF16str.GetLength()/sizeof(unsigned short); -} + CFX_ByteString cbUTF16str = str.UTF16LE_Encode(); + FXSYS_memcpy(result, cbUTF16str.GetBuffer(cbUTF16str.GetLength()), + cbUTF16str.GetLength()); + cbUTF16str.ReleaseBuffer(cbUTF16str.GetLength()); -DLLEXPORT int STDCALL FPDFText_CountRects(FPDF_TEXTPAGE text_page,int start,int count) -{ - if (!text_page) return 0; - IPDF_TextPage* textpage=(IPDF_TextPage*)text_page; - return textpage->CountRects(start,count); + return cbUTF16str.GetLength() / sizeof(unsigned short); +} +DLLEXPORT int STDCALL FPDFText_CountRects(FPDF_TEXTPAGE text_page, + int start, + int count) { + if (!text_page) + return 0; + IPDF_TextPage* textpage = (IPDF_TextPage*)text_page; + return textpage->CountRects(start, count); } -DLLEXPORT void STDCALL FPDFText_GetRect(FPDF_TEXTPAGE text_page,int rect_index, double* left,double* top, - double* right, double* bottom) -{ - if (!text_page) return; - IPDF_TextPage* textpage=(IPDF_TextPage*)text_page; - CFX_FloatRect rect; - textpage->GetRect(rect_index,rect.left,rect.top,rect.right,rect.bottom); - *left=rect.left; - *top=rect.top; - *right=rect.right; - *bottom=rect.bottom; +DLLEXPORT void STDCALL FPDFText_GetRect(FPDF_TEXTPAGE text_page, + int rect_index, + double* left, + double* top, + double* right, + double* bottom) { + if (!text_page) + return; + IPDF_TextPage* textpage = (IPDF_TextPage*)text_page; + CFX_FloatRect rect; + textpage->GetRect(rect_index, rect.left, rect.top, rect.right, rect.bottom); + *left = rect.left; + *top = rect.top; + *right = rect.right; + *bottom = rect.bottom; } -DLLEXPORT int STDCALL FPDFText_GetBoundedText(FPDF_TEXTPAGE text_page,double left, double top, - double right, double bottom,unsigned short* buffer,int buflen) -{ - if (!text_page) return 0; - IPDF_TextPage* textpage=(IPDF_TextPage*)text_page; - CFX_FloatRect rect((FX_FLOAT)left,(FX_FLOAT)bottom,(FX_FLOAT)right,(FX_FLOAT)top); - CFX_WideString str=textpage->GetTextByRect(rect); - - if (buflen<=0 || buffer==NULL) - { - return str.GetLength(); - } +DLLEXPORT int STDCALL FPDFText_GetBoundedText(FPDF_TEXTPAGE text_page, + double left, + double top, + double right, + double bottom, + unsigned short* buffer, + int buflen) { + if (!text_page) + return 0; + IPDF_TextPage* textpage = (IPDF_TextPage*)text_page; + CFX_FloatRect rect((FX_FLOAT)left, (FX_FLOAT)bottom, (FX_FLOAT)right, + (FX_FLOAT)top); + CFX_WideString str = textpage->GetTextByRect(rect); - CFX_ByteString cbUTF16Str = str.UTF16LE_Encode(); - int len = cbUTF16Str.GetLength()/sizeof(unsigned short); - int size = buflen > len ? len : buflen; - FXSYS_memcpy(buffer,cbUTF16Str.GetBuffer(size*sizeof(unsigned short)),size*sizeof(unsigned short)); - cbUTF16Str.ReleaseBuffer(size*sizeof(unsigned short)); + if (buflen <= 0 || buffer == NULL) { + return str.GetLength(); + } - return size; + CFX_ByteString cbUTF16Str = str.UTF16LE_Encode(); + int len = cbUTF16Str.GetLength() / sizeof(unsigned short); + int size = buflen > len ? len : buflen; + FXSYS_memcpy(buffer, cbUTF16Str.GetBuffer(size * sizeof(unsigned short)), + size * sizeof(unsigned short)); + cbUTF16Str.ReleaseBuffer(size * sizeof(unsigned short)); + return size; } -//Search +// Search //-1 for end -DLLEXPORT FPDF_SCHHANDLE STDCALL FPDFText_FindStart(FPDF_TEXTPAGE text_page,FPDF_WIDESTRING findwhat,unsigned long flags,int start_index) -{ - if (!text_page) return NULL; - IPDF_TextPageFind* textpageFind=NULL; - textpageFind=IPDF_TextPageFind::CreatePageFind((IPDF_TextPage*)text_page); - FX_STRSIZE len = CFX_WideString::WStringLength(findwhat); - textpageFind->FindFirst(CFX_WideString::FromUTF16LE(findwhat, len),flags,start_index); - return textpageFind; -} -DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindNext(FPDF_SCHHANDLE handle) -{ - if (!handle) return FALSE; - IPDF_TextPageFind* textpageFind=(IPDF_TextPageFind*)handle; - return textpageFind->FindNext(); -} -DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindPrev(FPDF_SCHHANDLE handle) -{ - if (!handle) return FALSE; - IPDF_TextPageFind* textpageFind=(IPDF_TextPageFind*)handle; - return textpageFind->FindPrev(); -} -DLLEXPORT int STDCALL FPDFText_GetSchResultIndex(FPDF_SCHHANDLE handle) -{ - if (!handle) return 0; - IPDF_TextPageFind* textpageFind=(IPDF_TextPageFind*)handle; - return textpageFind->GetCurOrder(); -} -DLLEXPORT int STDCALL FPDFText_GetSchCount(FPDF_SCHHANDLE handle) -{ - if (!handle) return 0; - IPDF_TextPageFind* textpageFind=(IPDF_TextPageFind*)handle; - return textpageFind->GetMatchedCount(); -} -DLLEXPORT void STDCALL FPDFText_FindClose(FPDF_SCHHANDLE handle) -{ - if (!handle) return; - IPDF_TextPageFind* textpageFind=(IPDF_TextPageFind*)handle; - delete textpageFind; - handle=NULL; -} - -//web link -DLLEXPORT FPDF_PAGELINK STDCALL FPDFLink_LoadWebLinks(FPDF_TEXTPAGE text_page) -{ - if (!text_page) return NULL; - IPDF_LinkExtract* pageLink=NULL; - pageLink=IPDF_LinkExtract::CreateLinkExtract(); - pageLink->ExtractLinks((IPDF_TextPage*)text_page); - return pageLink; -} -DLLEXPORT int STDCALL FPDFLink_CountWebLinks(FPDF_PAGELINK link_page) -{ - if (!link_page) return 0; - IPDF_LinkExtract* pageLink=(IPDF_LinkExtract*)link_page; - return pageLink->CountLinks(); -} -DLLEXPORT int STDCALL FPDFLink_GetURL(FPDF_PAGELINK link_page,int link_index, unsigned short* buffer,int buflen) -{ - if (!link_page) return 0; - IPDF_LinkExtract* pageLink=(IPDF_LinkExtract*)link_page; - CFX_WideString url=pageLink->GetURL(link_index); - - CFX_ByteString cbUTF16URL = url.UTF16LE_Encode(); - int len= cbUTF16URL.GetLength()/sizeof(unsigned short); - if (buffer==NULL || buflen<=0) - return len; - int size=len0) - { - FXSYS_memcpy(buffer,cbUTF16URL.GetBuffer(size*sizeof(unsigned short)),size*sizeof(unsigned short)); - cbUTF16URL.ReleaseBuffer(size*sizeof(unsigned short)); - } - return size; -} -DLLEXPORT int STDCALL FPDFLink_CountRects(FPDF_PAGELINK link_page,int link_index) -{ - if (!link_page) return 0; - IPDF_LinkExtract* pageLink=(IPDF_LinkExtract*)link_page; - CFX_RectArray rectArray; - pageLink->GetRects(link_index,rectArray); - return rectArray.GetSize(); -} -DLLEXPORT void STDCALL FPDFLink_GetRect(FPDF_PAGELINK link_page,int link_index, int rect_index, double* left, - double* top,double* right, double* bottom) -{ - if (!link_page) return; - IPDF_LinkExtract* pageLink=(IPDF_LinkExtract*)link_page; - CFX_RectArray rectArray; - pageLink->GetRects(link_index,rectArray); - if (rect_index >= 0 && rect_index < rectArray.GetSize()) { - CFX_FloatRect rect=rectArray.GetAt(rect_index); - *left=rect.left; - *right=rect.right; - *top=rect.top; - *bottom=rect.bottom; - } -} -DLLEXPORT void STDCALL FPDFLink_CloseWebLinks(FPDF_PAGELINK link_page) -{ - delete (IPDF_LinkExtract*)link_page; +DLLEXPORT FPDF_SCHHANDLE STDCALL FPDFText_FindStart(FPDF_TEXTPAGE text_page, + FPDF_WIDESTRING findwhat, + unsigned long flags, + int start_index) { + if (!text_page) + return NULL; + IPDF_TextPageFind* textpageFind = NULL; + textpageFind = IPDF_TextPageFind::CreatePageFind((IPDF_TextPage*)text_page); + FX_STRSIZE len = CFX_WideString::WStringLength(findwhat); + textpageFind->FindFirst(CFX_WideString::FromUTF16LE(findwhat, len), flags, + start_index); + return textpageFind; +} +DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindNext(FPDF_SCHHANDLE handle) { + if (!handle) + return FALSE; + IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle; + return textpageFind->FindNext(); +} +DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindPrev(FPDF_SCHHANDLE handle) { + if (!handle) + return FALSE; + IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle; + return textpageFind->FindPrev(); +} +DLLEXPORT int STDCALL FPDFText_GetSchResultIndex(FPDF_SCHHANDLE handle) { + if (!handle) + return 0; + IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle; + return textpageFind->GetCurOrder(); } +DLLEXPORT int STDCALL FPDFText_GetSchCount(FPDF_SCHHANDLE handle) { + if (!handle) + return 0; + IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle; + return textpageFind->GetMatchedCount(); +} +DLLEXPORT void STDCALL FPDFText_FindClose(FPDF_SCHHANDLE handle) { + if (!handle) + return; + IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle; + delete textpageFind; + handle = NULL; +} + +// web link +DLLEXPORT FPDF_PAGELINK STDCALL FPDFLink_LoadWebLinks(FPDF_TEXTPAGE text_page) { + if (!text_page) + return NULL; + IPDF_LinkExtract* pageLink = NULL; + pageLink = IPDF_LinkExtract::CreateLinkExtract(); + pageLink->ExtractLinks((IPDF_TextPage*)text_page); + return pageLink; +} +DLLEXPORT int STDCALL FPDFLink_CountWebLinks(FPDF_PAGELINK link_page) { + if (!link_page) + return 0; + IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page; + return pageLink->CountLinks(); +} +DLLEXPORT int STDCALL FPDFLink_GetURL(FPDF_PAGELINK link_page, + int link_index, + unsigned short* buffer, + int buflen) { + if (!link_page) + return 0; + IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page; + CFX_WideString url = pageLink->GetURL(link_index); + CFX_ByteString cbUTF16URL = url.UTF16LE_Encode(); + int len = cbUTF16URL.GetLength() / sizeof(unsigned short); + if (buffer == NULL || buflen <= 0) + return len; + int size = len < buflen ? len : buflen; + if (size > 0) { + FXSYS_memcpy(buffer, cbUTF16URL.GetBuffer(size * sizeof(unsigned short)), + size * sizeof(unsigned short)); + cbUTF16URL.ReleaseBuffer(size * sizeof(unsigned short)); + } + return size; +} +DLLEXPORT int STDCALL FPDFLink_CountRects(FPDF_PAGELINK link_page, + int link_index) { + if (!link_page) + return 0; + IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page; + CFX_RectArray rectArray; + pageLink->GetRects(link_index, rectArray); + return rectArray.GetSize(); +} +DLLEXPORT void STDCALL FPDFLink_GetRect(FPDF_PAGELINK link_page, + int link_index, + int rect_index, + double* left, + double* top, + double* right, + double* bottom) { + if (!link_page) + return; + IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page; + CFX_RectArray rectArray; + pageLink->GetRects(link_index, rectArray); + if (rect_index >= 0 && rect_index < rectArray.GetSize()) { + CFX_FloatRect rect = rectArray.GetAt(rect_index); + *left = rect.left; + *right = rect.right; + *top = rect.top; + *bottom = rect.bottom; + } +} +DLLEXPORT void STDCALL FPDFLink_CloseWebLinks(FPDF_PAGELINK link_page) { + delete (IPDF_LinkExtract*)link_page; +} diff --git a/fpdfsdk/src/fpdftext_embeddertest.cpp b/fpdfsdk/src/fpdftext_embeddertest.cpp index 8384a41944..dd3737a40e 100644 --- a/fpdfsdk/src/fpdftext_embeddertest.cpp +++ b/fpdfsdk/src/fpdftext_embeddertest.cpp @@ -25,8 +25,7 @@ static bool check_unsigned_shorts(const char* expected, } // namespace -class FPDFTextEmbeddertest : public EmbedderTest { -}; +class FPDFTextEmbeddertest : public EmbedderTest {}; TEST_F(FPDFTextEmbeddertest, Text) { EXPECT_TRUE(OpenDocument("testing/resources/hello_world.pdf")); @@ -63,18 +62,14 @@ TEST_F(FPDFTextEmbeddertest, Text) { EXPECT_NEAR(49.844, bottom, 0.001); EXPECT_NEAR(55.520, top, 0.001); - EXPECT_EQ(4, FPDFText_GetCharIndexAtPos( - textpage, 42.0, 50.0, 1.0, 1.0)); - EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos( - textpage, 0.0, 0.0, 1.0, 1.0)); - EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos( - textpage, 199.0, 199.0, 1.0, 1.0)); + EXPECT_EQ(4, FPDFText_GetCharIndexAtPos(textpage, 42.0, 50.0, 1.0, 1.0)); + EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, 0.0, 0.0, 1.0, 1.0)); + EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, 199.0, 199.0, 1.0, 1.0)); // Test out of range indicies. - EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos( - textpage, 42.0, 10000000.0, 1.0, 1.0)); - EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos( - textpage, -1.0, 50.0, 1.0, 1.0)); + EXPECT_EQ(-1, + FPDFText_GetCharIndexAtPos(textpage, 42.0, 10000000.0, 1.0, 1.0)); + EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, -1.0, 50.0, 1.0, 1.0)); // Count does not include the terminating NUL in the string literal. EXPECT_EQ(2, FPDFText_CountRects(textpage, 0, sizeof(expected) - 1)); @@ -110,25 +105,24 @@ TEST_F(FPDFTextEmbeddertest, Text) { EXPECT_EQ(0.0, bottom); EXPECT_EQ(0.0, top); - EXPECT_EQ(9, FPDFText_GetBoundedText( - textpage, 41.0, 56.0, 82.0, 48.0, 0, 0)); + EXPECT_EQ(9, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0, 0, 0)); // Extract starting at character 4 as above. memset(fixed_buffer, 0xbd, sizeof(fixed_buffer)); - EXPECT_EQ(1, FPDFText_GetBoundedText( - textpage, 41.0, 56.0, 82.0, 48.0, fixed_buffer, 1)); + EXPECT_EQ(1, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0, + fixed_buffer, 1)); EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 1)); EXPECT_EQ(0xbdbd, fixed_buffer[1]); memset(fixed_buffer, 0xbd, sizeof(fixed_buffer)); - EXPECT_EQ(9, FPDFText_GetBoundedText( - textpage, 41.0, 56.0, 82.0, 48.0, fixed_buffer, 9)); + EXPECT_EQ(9, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0, + fixed_buffer, 9)); EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 9)); EXPECT_EQ(0xbdbd, fixed_buffer[9]); memset(fixed_buffer, 0xbd, sizeof(fixed_buffer)); - EXPECT_EQ(10, FPDFText_GetBoundedText( - textpage, 41.0, 56.0, 82.0, 48.0, fixed_buffer, 128)); + EXPECT_EQ(10, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0, + fixed_buffer, 128)); EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 9)); EXPECT_EQ(0u, fixed_buffer[9]); EXPECT_EQ(0xbdbd, fixed_buffer[10]); @@ -146,10 +140,10 @@ TEST_F(FPDFTextEmbeddertest, TextSearch) { EXPECT_NE(nullptr, textpage); // Avoid issues with system wchar_t width vs. FPDF_WideString. - const unsigned short nope[] = { 'n', 'o', 'p', 'e', '\0' }; - const unsigned short world[] = { 'w', 'o', 'r', 'l', 'd', '\0' }; - const unsigned short world_caps[] = { 'W', 'O', 'R', 'L', 'D', '\0' }; - const unsigned short world_substr[] = { 'o', 'r', 'l', 'd', '\0' }; + const unsigned short nope[] = {'n', 'o', 'p', 'e', '\0'}; + const unsigned short world[] = {'w', 'o', 'r', 'l', 'd', '\0'}; + const unsigned short world_caps[] = {'W', 'O', 'R', 'L', 'D', '\0'}; + const unsigned short world_substr[] = {'o', 'r', 'l', 'd', '\0'}; // No occurences of "nope" in test page. FPDF_SCHHANDLE search = FPDFText_FindStart(textpage, nope, 0, 0); @@ -203,8 +197,8 @@ TEST_F(FPDFTextEmbeddertest, TextSearch) { FPDFText_FindClose(search); // Exact search unaffected by case sensitiity and whole word flags. - search = FPDFText_FindStart( - textpage, world, FPDF_MATCHCASE | FPDF_MATCHWHOLEWORD, 0); + search = FPDFText_FindStart(textpage, world, + FPDF_MATCHCASE | FPDF_MATCHWHOLEWORD, 0); EXPECT_NE(nullptr, search); EXPECT_TRUE(FPDFText_FindNext(search)); EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); @@ -293,27 +287,28 @@ TEST_F(FPDFTextEmbeddertest, WebLinks) { // Check buffer that doesn't have space for a terminating NUL. memset(fixed_buffer, 0xbd, sizeof(fixed_buffer)); - EXPECT_EQ(sizeof(expected_url) - 1, FPDFLink_GetURL( - pagelink, 0, fixed_buffer, sizeof(expected_url) - 1)); - EXPECT_TRUE(check_unsigned_shorts( - expected_url, fixed_buffer, sizeof(expected_url) - 1)); + EXPECT_EQ( + sizeof(expected_url) - 1, + FPDFLink_GetURL(pagelink, 0, fixed_buffer, sizeof(expected_url) - 1)); + EXPECT_TRUE(check_unsigned_shorts(expected_url, fixed_buffer, + sizeof(expected_url) - 1)); EXPECT_EQ(0xbdbd, fixed_buffer[sizeof(expected_url) - 1]); // Retreive link with exactly-sized buffer. memset(fixed_buffer, 0xbd, sizeof(fixed_buffer)); - EXPECT_EQ(sizeof(expected_url), FPDFLink_GetURL( - pagelink, 0, fixed_buffer, sizeof(expected_url))); - EXPECT_TRUE(check_unsigned_shorts( - expected_url, fixed_buffer, sizeof(expected_url))); + EXPECT_EQ(sizeof(expected_url), + FPDFLink_GetURL(pagelink, 0, fixed_buffer, sizeof(expected_url))); + EXPECT_TRUE( + check_unsigned_shorts(expected_url, fixed_buffer, sizeof(expected_url))); EXPECT_EQ(0u, fixed_buffer[sizeof(expected_url) - 1]); EXPECT_EQ(0xbdbd, fixed_buffer[sizeof(expected_url)]); // Retreive link with ample-sized-buffer. memset(fixed_buffer, 0xbd, sizeof(fixed_buffer)); - EXPECT_EQ(sizeof(expected_url), FPDFLink_GetURL( - pagelink, 0, fixed_buffer, 128)); - EXPECT_TRUE(check_unsigned_shorts( - expected_url, fixed_buffer, sizeof(expected_url))); + EXPECT_EQ(sizeof(expected_url), + FPDFLink_GetURL(pagelink, 0, fixed_buffer, 128)); + EXPECT_TRUE( + check_unsigned_shorts(expected_url, fixed_buffer, sizeof(expected_url))); EXPECT_EQ(0u, fixed_buffer[sizeof(expected_url) - 1]); EXPECT_EQ(0xbdbd, fixed_buffer[sizeof(expected_url)]); diff --git a/fpdfsdk/src/fpdfview.cpp b/fpdfsdk/src/fpdfview.cpp index d66252018a..159440de59 100644 --- a/fpdfsdk/src/fpdfview.cpp +++ b/fpdfsdk/src/fpdfview.cpp @@ -21,432 +21,433 @@ #include "../include/fpdfxfa/fpdfxfa_page.h" #include "../include/fpdfxfa/fpdfxfa_util.h" -CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) -{ - m_pFS = pFS; - m_nCurPos = 0; +CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) { + m_pFS = pFS; + m_nCurPos = 0; } -IFX_FileStream* CFPDF_FileStream::Retain() -{ - return this; +IFX_FileStream* CFPDF_FileStream::Retain() { + return this; } -void CFPDF_FileStream::Release() -{ - if (m_pFS && m_pFS->Release) - m_pFS->Release(m_pFS->clientData); - delete this; +void CFPDF_FileStream::Release() { + if (m_pFS && m_pFS->Release) + m_pFS->Release(m_pFS->clientData); + delete this; } -FX_FILESIZE CFPDF_FileStream::GetSize() -{ - if (m_pFS && m_pFS->GetSize) - return (FX_FILESIZE)m_pFS->GetSize(m_pFS->clientData); - return 0; +FX_FILESIZE CFPDF_FileStream::GetSize() { + if (m_pFS && m_pFS->GetSize) + return (FX_FILESIZE)m_pFS->GetSize(m_pFS->clientData); + return 0; } -FX_BOOL CFPDF_FileStream::IsEOF() -{ - return m_nCurPos >= GetSize(); +FX_BOOL CFPDF_FileStream::IsEOF() { + return m_nCurPos >= GetSize(); } -FX_BOOL CFPDF_FileStream::ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) -{ - if (!buffer || !size || !m_pFS->ReadBlock) return FALSE; - - if (m_pFS->ReadBlock(m_pFS->clientData, (FPDF_DWORD)offset, buffer, (FPDF_DWORD)size) == 0) - { - m_nCurPos = offset + size; - return TRUE; - } - return FALSE; +FX_BOOL CFPDF_FileStream::ReadBlock(void* buffer, + FX_FILESIZE offset, + size_t size) { + if (!buffer || !size || !m_pFS->ReadBlock) + return FALSE; + + if (m_pFS->ReadBlock(m_pFS->clientData, (FPDF_DWORD)offset, buffer, + (FPDF_DWORD)size) == 0) { + m_nCurPos = offset + size; + return TRUE; + } + return FALSE; } -size_t CFPDF_FileStream::ReadBlock(void* buffer, size_t size) -{ - if (!buffer || !size || !m_pFS->ReadBlock) return 0; - - FX_FILESIZE nSize = GetSize(); - if (m_nCurPos >= nSize) return 0; - FX_FILESIZE dwAvail = nSize - m_nCurPos; - if (dwAvail < (FX_FILESIZE)size) size = (size_t)dwAvail; - if (m_pFS->ReadBlock(m_pFS->clientData, (FPDF_DWORD)m_nCurPos, buffer, (FPDF_DWORD)size) == 0) - { - m_nCurPos += size; - return size; - } - - return 0; +size_t CFPDF_FileStream::ReadBlock(void* buffer, size_t size) { + if (!buffer || !size || !m_pFS->ReadBlock) + return 0; + + FX_FILESIZE nSize = GetSize(); + if (m_nCurPos >= nSize) + return 0; + FX_FILESIZE dwAvail = nSize - m_nCurPos; + if (dwAvail < (FX_FILESIZE)size) + size = (size_t)dwAvail; + if (m_pFS->ReadBlock(m_pFS->clientData, (FPDF_DWORD)m_nCurPos, buffer, + (FPDF_DWORD)size) == 0) { + m_nCurPos += size; + return size; + } + + return 0; } -FX_BOOL CFPDF_FileStream::WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size) -{ - if (!m_pFS || !m_pFS->WriteBlock) return FALSE; - - if(m_pFS->WriteBlock(m_pFS->clientData, (FPDF_DWORD)offset, buffer, (FPDF_DWORD)size) == 0) - { - m_nCurPos = offset + size; - return TRUE; - } - return FALSE; +FX_BOOL CFPDF_FileStream::WriteBlock(const void* buffer, + FX_FILESIZE offset, + size_t size) { + if (!m_pFS || !m_pFS->WriteBlock) + return FALSE; + + if (m_pFS->WriteBlock(m_pFS->clientData, (FPDF_DWORD)offset, buffer, + (FPDF_DWORD)size) == 0) { + m_nCurPos = offset + size; + return TRUE; + } + return FALSE; } -FX_BOOL CFPDF_FileStream::Flush() -{ - if (!m_pFS || !m_pFS->Flush) return TRUE; +FX_BOOL CFPDF_FileStream::Flush() { + if (!m_pFS || !m_pFS->Flush) + return TRUE; - return m_pFS->Flush(m_pFS->clientData) == 0; + return m_pFS->Flush(m_pFS->clientData) == 0; } -CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) -{ - m_FileAccess = *pFileAccess; - m_BufferOffset = (FX_DWORD)-1; +CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) { + m_FileAccess = *pFileAccess; + m_BufferOffset = (FX_DWORD)-1; } -FX_BOOL CPDF_CustomAccess::GetByte(FX_DWORD pos, uint8_t& ch) -{ - if (pos >= m_FileAccess.m_FileLen) return FALSE; - if (m_BufferOffset == (FX_DWORD)-1 || pos < m_BufferOffset || pos >= m_BufferOffset + 512) { - // Need to read from file access - m_BufferOffset = pos; - int size = 512; - if (pos + 512 > m_FileAccess.m_FileLen) - size = m_FileAccess.m_FileLen - pos; - if (!m_FileAccess.m_GetBlock(m_FileAccess.m_Param, m_BufferOffset, m_Buffer, size)) - return FALSE; - } - ch = m_Buffer[pos - m_BufferOffset]; - return TRUE; +FX_BOOL CPDF_CustomAccess::GetByte(FX_DWORD pos, uint8_t& ch) { + if (pos >= m_FileAccess.m_FileLen) + return FALSE; + if (m_BufferOffset == (FX_DWORD)-1 || pos < m_BufferOffset || + pos >= m_BufferOffset + 512) { + // Need to read from file access + m_BufferOffset = pos; + int size = 512; + if (pos + 512 > m_FileAccess.m_FileLen) + size = m_FileAccess.m_FileLen - pos; + if (!m_FileAccess.m_GetBlock(m_FileAccess.m_Param, m_BufferOffset, m_Buffer, + size)) + return FALSE; + } + ch = m_Buffer[pos - m_BufferOffset]; + return TRUE; } -FX_BOOL CPDF_CustomAccess::GetBlock(FX_DWORD pos, uint8_t* pBuf, FX_DWORD size) -{ - if (pos + size > m_FileAccess.m_FileLen) return FALSE; - return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, pos, pBuf, size); +FX_BOOL CPDF_CustomAccess::GetBlock(FX_DWORD pos, + uint8_t* pBuf, + FX_DWORD size) { + if (pos + size > m_FileAccess.m_FileLen) + return FALSE; + return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, pos, pBuf, size); } -FX_BOOL CPDF_CustomAccess::ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) -{ - if (offset < 0) { - return FALSE; - } - FX_SAFE_FILESIZE newPos = pdfium::base::checked_cast(size); - newPos += offset; - if (!newPos.IsValid() || newPos.ValueOrDie() > m_FileAccess.m_FileLen) { - return FALSE; - } - return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, offset,(uint8_t*) buffer, size); +FX_BOOL CPDF_CustomAccess::ReadBlock(void* buffer, + FX_FILESIZE offset, + size_t size) { + if (offset < 0) { + return FALSE; + } + FX_SAFE_FILESIZE newPos = + pdfium::base::checked_cast(size); + newPos += offset; + if (!newPos.IsValid() || newPos.ValueOrDie() > m_FileAccess.m_FileLen) { + return FALSE; + } + return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, offset, (uint8_t*)buffer, + size); } -//0 bit: FPDF_POLICY_MACHINETIME_ACCESS +// 0 bit: FPDF_POLICY_MACHINETIME_ACCESS static FX_DWORD foxit_sandbox_policy = 0xFFFFFFFF; -void FSDK_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable) -{ - switch(policy) - { - case FPDF_POLICY_MACHINETIME_ACCESS: - { - if(enable) - foxit_sandbox_policy |= 0x01; - else - foxit_sandbox_policy &= 0xFFFFFFFE; - } - break; - default: - break; - } +void FSDK_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable) { + switch (policy) { + case FPDF_POLICY_MACHINETIME_ACCESS: { + if (enable) + foxit_sandbox_policy |= 0x01; + else + foxit_sandbox_policy &= 0xFFFFFFFE; + } break; + default: + break; + } } -FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy) -{ - switch(policy) - { - case FPDF_POLICY_MACHINETIME_ACCESS: - { - if(foxit_sandbox_policy&0x01) - return TRUE; - else - return FALSE; - } - break; - default: - break; - } - return FALSE; +FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy) { + switch (policy) { + case FPDF_POLICY_MACHINETIME_ACCESS: { + if (foxit_sandbox_policy & 0x01) + return TRUE; + else + return FALSE; + } break; + default: + break; + } + return FALSE; } CCodec_ModuleMgr* g_pCodecModule = nullptr; -DLLEXPORT void STDCALL FPDF_InitLibrary() -{ - g_pCodecModule = new CCodec_ModuleMgr(); +DLLEXPORT void STDCALL FPDF_InitLibrary() { + g_pCodecModule = new CCodec_ModuleMgr(); - CFX_GEModule::Create(); - CFX_GEModule::Get()->SetCodecModule(g_pCodecModule); + CFX_GEModule::Create(); + CFX_GEModule::Get()->SetCodecModule(g_pCodecModule); - CPDF_ModuleMgr::Create(); - CPDF_ModuleMgr::Get()->SetCodecModule(g_pCodecModule); - CPDF_ModuleMgr::Get()->InitPageModule(); - CPDF_ModuleMgr::Get()->InitRenderModule(); + CPDF_ModuleMgr::Create(); + CPDF_ModuleMgr::Get()->SetCodecModule(g_pCodecModule); + CPDF_ModuleMgr::Get()->InitPageModule(); + CPDF_ModuleMgr::Get()->InitRenderModule(); - CPDFXFA_App::GetInstance()->Initialize(); + CPDFXFA_App::GetInstance()->Initialize(); } -DLLEXPORT void STDCALL FPDF_DestroyLibrary() -{ - CPDFXFA_App::ReleaseInstance(); - CPDF_ModuleMgr::Destroy(); - CFX_GEModule::Destroy(); +DLLEXPORT void STDCALL FPDF_DestroyLibrary() { + CPDFXFA_App::ReleaseInstance(); + CPDF_ModuleMgr::Destroy(); + CFX_GEModule::Destroy(); - delete g_pCodecModule; - g_pCodecModule = nullptr; + delete g_pCodecModule; + g_pCodecModule = nullptr; } #ifndef _WIN32 int g_LastError; -void SetLastError(int err) -{ - g_LastError = err; +void SetLastError(int err) { + g_LastError = err; } -int GetLastError() -{ - return g_LastError; +int GetLastError() { + return g_LastError; } #endif -void ProcessParseError(FX_DWORD err_code) -{ - // Translate FPDFAPI error code to FPDFVIEW error code - switch (err_code) { - case PDFPARSE_ERROR_FILE: - err_code = FPDF_ERR_FILE; - break; - case PDFPARSE_ERROR_FORMAT: - err_code = FPDF_ERR_FORMAT; - break; - case PDFPARSE_ERROR_PASSWORD: - err_code = FPDF_ERR_PASSWORD; - break; - case PDFPARSE_ERROR_HANDLER: - err_code = FPDF_ERR_SECURITY; - break; - } - SetLastError(err_code); +void ProcessParseError(FX_DWORD err_code) { + // Translate FPDFAPI error code to FPDFVIEW error code + switch (err_code) { + case PDFPARSE_ERROR_FILE: + err_code = FPDF_ERR_FILE; + break; + case PDFPARSE_ERROR_FORMAT: + err_code = FPDF_ERR_FORMAT; + break; + case PDFPARSE_ERROR_PASSWORD: + err_code = FPDF_ERR_PASSWORD; + break; + case PDFPARSE_ERROR_HANDLER: + err_code = FPDF_ERR_SECURITY; + break; + } + SetLastError(err_code); } -DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable) -{ - return FSDK_SetSandBoxPolicy(policy, enable); +DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy, + FPDF_BOOL enable) { + return FSDK_SetSandBoxPolicy(policy, enable); } -DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path, FPDF_BYTESTRING password) -{ - CPDF_Parser* pParser = FX_NEW CPDF_Parser; - pParser->SetPassword(password); - - FX_DWORD err_code = pParser->StartParse((const FX_CHAR*)file_path); - if (err_code) { - delete pParser; - ProcessParseError(err_code); - return NULL; - } - CPDF_Document* pPDFDoc = pParser->GetDocument(); - if (!pPDFDoc) - return NULL; - - CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); - CPDFXFA_Document* pDocument = FX_NEW CPDFXFA_Document(pPDFDoc, pProvider); - return pDocument; +DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path, + FPDF_BYTESTRING password) { + CPDF_Parser* pParser = FX_NEW CPDF_Parser; + pParser->SetPassword(password); + + FX_DWORD err_code = pParser->StartParse((const FX_CHAR*)file_path); + if (err_code) { + delete pParser; + ProcessParseError(err_code); + return NULL; + } + CPDF_Document* pPDFDoc = pParser->GetDocument(); + if (!pPDFDoc) + return NULL; + + CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); + CPDFXFA_Document* pDocument = FX_NEW CPDFXFA_Document(pPDFDoc, pProvider); + return pDocument; } -DLLEXPORT FPDF_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document, int* docType) -{ - if (!document) - return FALSE; +DLLEXPORT FPDF_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document, + int* docType) { + if (!document) + return FALSE; - CPDF_Document *pdfDoc = (static_cast(document))->GetPDFDoc(); - if (!pdfDoc) - return FALSE; + CPDF_Document* pdfDoc = + (static_cast(document))->GetPDFDoc(); + if (!pdfDoc) + return FALSE; - CPDF_Dictionary* pRoot = pdfDoc->GetRoot(); - if (!pRoot) - return FALSE; + CPDF_Dictionary* pRoot = pdfDoc->GetRoot(); + if (!pRoot) + return FALSE; - CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); - if (!pAcroForm) - return FALSE; + CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); + if (!pAcroForm) + return FALSE; - CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); - if (!pXFA) - return FALSE; + CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); + if (!pXFA) + return FALSE; - FX_BOOL bDynamicXFA = pRoot->GetBoolean("NeedsRendering", FALSE); + FX_BOOL bDynamicXFA = pRoot->GetBoolean("NeedsRendering", FALSE); - if (bDynamicXFA) - *docType = DOCTYPE_DYNIMIC_XFA; - else - *docType = DOCTYPE_STATIC_XFA; + if (bDynamicXFA) + *docType = DOCTYPE_DYNIMIC_XFA; + else + *docType = DOCTYPE_STATIC_XFA; - return TRUE; + return TRUE; } -DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) -{ - return document && (static_cast(document))->LoadXFADoc(); +DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) { + return document && (static_cast(document))->LoadXFADoc(); } +extern void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code); -extern void CheckUnSupportError(CPDF_Document * pDoc, FX_DWORD err_code); - -class CMemFile final : public IFX_FileRead -{ -public: - CMemFile(uint8_t* pBuf, FX_FILESIZE size):m_pBuf(pBuf),m_size(size) {} - - virtual void Release() {delete this;} - virtual FX_FILESIZE GetSize() {return m_size;} - virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) - { - if (offset < 0) { - return FALSE; - } - FX_SAFE_FILESIZE newPos = pdfium::base::checked_cast(size); - newPos += offset; - if (!newPos.IsValid() || newPos.ValueOrDie() > (FX_DWORD)m_size) { - return FALSE; - } - FXSYS_memcpy(buffer, m_pBuf+offset, size); - return TRUE; - } -private: - uint8_t* m_pBuf; - FX_FILESIZE m_size; +class CMemFile final : public IFX_FileRead { + public: + CMemFile(uint8_t* pBuf, FX_FILESIZE size) : m_pBuf(pBuf), m_size(size) {} + + virtual void Release() { delete this; } + virtual FX_FILESIZE GetSize() { return m_size; } + virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) { + if (offset < 0) { + return FALSE; + } + FX_SAFE_FILESIZE newPos = + pdfium::base::checked_cast(size); + newPos += offset; + if (!newPos.IsValid() || newPos.ValueOrDie() > (FX_DWORD)m_size) { + return FALSE; + } + FXSYS_memcpy(buffer, m_pBuf + offset, size); + return TRUE; + } + + private: + uint8_t* m_pBuf; + FX_FILESIZE m_size; }; -DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf, int size, FPDF_BYTESTRING password) -{ - CPDF_Parser* pParser = FX_NEW CPDF_Parser; - pParser->SetPassword(password); - CMemFile* pMemFile = new CMemFile((uint8_t*)data_buf, size); - FX_DWORD err_code = pParser->StartParse(pMemFile); - if (err_code) { - delete pParser; - ProcessParseError(err_code); - return NULL; - } - CPDF_Document * pDoc = NULL; - pDoc = pParser?pParser->GetDocument():NULL; - CheckUnSupportError(pDoc, err_code); - CPDF_Document* pPDFDoc = pParser->GetDocument(); - if (!pPDFDoc) - return NULL; - - CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); - CPDFXFA_Document* pDocument = FX_NEW CPDFXFA_Document(pPDFDoc, pProvider); - return pDocument; +DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf, + int size, + FPDF_BYTESTRING password) { + CPDF_Parser* pParser = FX_NEW CPDF_Parser; + pParser->SetPassword(password); + CMemFile* pMemFile = new CMemFile((uint8_t*)data_buf, size); + FX_DWORD err_code = pParser->StartParse(pMemFile); + if (err_code) { + delete pParser; + ProcessParseError(err_code); + return NULL; + } + CPDF_Document* pDoc = NULL; + pDoc = pParser ? pParser->GetDocument() : NULL; + CheckUnSupportError(pDoc, err_code); + CPDF_Document* pPDFDoc = pParser->GetDocument(); + if (!pPDFDoc) + return NULL; + + CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); + CPDFXFA_Document* pDocument = FX_NEW CPDFXFA_Document(pPDFDoc, pProvider); + return pDocument; } -DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, FPDF_BYTESTRING password) -{ - CPDF_Parser* pParser = FX_NEW CPDF_Parser; - pParser->SetPassword(password); - CPDF_CustomAccess* pFile = FX_NEW CPDF_CustomAccess(pFileAccess); - FX_DWORD err_code = pParser->StartParse(pFile); - if (err_code) { - delete pParser; - ProcessParseError(err_code); - return NULL; - } - CPDF_Document * pDoc = NULL; - pDoc = pParser?pParser->GetDocument():NULL; - CheckUnSupportError(pDoc, err_code); - CPDF_Document* pPDFDoc = pParser->GetDocument(); - if (!pPDFDoc) - return NULL; - - CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); - CPDFXFA_Document* pDocument = FX_NEW CPDFXFA_Document(pPDFDoc, pProvider); - return pDocument; +DLLEXPORT FPDF_DOCUMENT STDCALL +FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, + FPDF_BYTESTRING password) { + CPDF_Parser* pParser = FX_NEW CPDF_Parser; + pParser->SetPassword(password); + CPDF_CustomAccess* pFile = FX_NEW CPDF_CustomAccess(pFileAccess); + FX_DWORD err_code = pParser->StartParse(pFile); + if (err_code) { + delete pParser; + ProcessParseError(err_code); + return NULL; + } + CPDF_Document* pDoc = NULL; + pDoc = pParser ? pParser->GetDocument() : NULL; + CheckUnSupportError(pDoc, err_code); + CPDF_Document* pPDFDoc = pParser->GetDocument(); + if (!pPDFDoc) + return NULL; + + CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); + CPDFXFA_Document* pDocument = FX_NEW CPDFXFA_Document(pPDFDoc, pProvider); + return pDocument; } -DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, int* fileVersion) -{ - if(!doc||!fileVersion) return FALSE; - *fileVersion = 0; - CPDFXFA_Document* pDoc = (CPDFXFA_Document*)doc; - CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); - if (!pPDFDoc) return (FX_DWORD)-1; - CPDF_Parser* pParser = (CPDF_Parser*)pPDFDoc->GetParser(); - - if(!pParser) - return FALSE; - *fileVersion = pParser->GetFileVersion(); - return TRUE; +DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, + int* fileVersion) { + if (!doc || !fileVersion) + return FALSE; + *fileVersion = 0; + CPDFXFA_Document* pDoc = (CPDFXFA_Document*)doc; + CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); + if (!pPDFDoc) + return (FX_DWORD)-1; + CPDF_Parser* pParser = (CPDF_Parser*)pPDFDoc->GetParser(); + + if (!pParser) + return FALSE; + *fileVersion = pParser->GetFileVersion(); + return TRUE; } -// jabdelmalek: changed return type from FX_DWORD to build on Linux (and match header). -DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) -{ - if (document == NULL) return 0; - CPDFXFA_Document*pDoc = (CPDFXFA_Document*)document; - CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); - if (!pPDFDoc) return (FX_DWORD)-1; - CPDF_Parser* pParser = (CPDF_Parser*)pPDFDoc->GetParser(); - CPDF_Dictionary* pDict = pParser->GetEncryptDict(); - if (pDict == NULL) return (FX_DWORD)-1; - - return pDict->GetInteger("P"); +// jabdelmalek: changed return type from FX_DWORD to build on Linux (and match +// header). +DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { + if (document == NULL) + return 0; + CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; + CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); + if (!pPDFDoc) + return (FX_DWORD)-1; + CPDF_Parser* pParser = (CPDF_Parser*)pPDFDoc->GetParser(); + CPDF_Dictionary* pDict = pParser->GetEncryptDict(); + if (pDict == NULL) + return (FX_DWORD)-1; + + return pDict->GetInteger("P"); } -DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) -{ - if (document == NULL) return -1; - CPDF_Document*pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); - CPDF_Dictionary* pDict = pParser->GetEncryptDict(); - if (pDict == NULL) return -1; +DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { + if (document == NULL) + return -1; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); + CPDF_Dictionary* pDict = pParser->GetEncryptDict(); + if (pDict == NULL) + return -1; - return pDict->GetInteger("R"); + return pDict->GetInteger("R"); } -DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) -{ - if (document == NULL) return 0; - CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; - return pDoc->GetPageCount(); -// return ((CPDF_Document*)document)->GetPageCount(); +DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { + if (document == NULL) + return 0; + CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; + return pDoc->GetPageCount(); + // return ((CPDF_Document*)document)->GetPageCount(); } -DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, int page_index) -{ - if (document == NULL) return NULL; - CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; - if (page_index < 0 || page_index >= pDoc->GetPageCount()) return NULL; -// CPDF_Parser* pParser = (CPDF_Parser*)document; - return pDoc->GetPage(page_index); +DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, + int page_index) { + if (document == NULL) + return NULL; + CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; + if (page_index < 0 || page_index >= pDoc->GetPageCount()) + return NULL; + // CPDF_Parser* pParser = (CPDF_Parser*)document; + return pDoc->GetPage(page_index); } -DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) -{ - if (!page) - return 0.0; - return ((CPDFXFA_Page*)page)->GetPageWidth(); -// return ((CPDF_Page*)page)->GetPageWidth(); +DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) { + if (!page) + return 0.0; + return ((CPDFXFA_Page*)page)->GetPageWidth(); + // return ((CPDF_Page*)page)->GetPageWidth(); } -DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) -{ - if (!page) return 0.0; -// return ((CPDF_Page*)page)->GetPageHeight(); - return ((CPDFXFA_Page*)page)->GetPageHeight(); +DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) { + if (!page) + return 0.0; + // return ((CPDF_Page*)page)->GetPageHeight(); + return ((CPDFXFA_Page*)page)->GetPageHeight(); } -void DropContext(void* data) -{ - delete (CRenderContext*)data; +void DropContext(void* data) { + delete (CRenderContext*)data; } #if defined(_DEBUG) || defined(DEBUG) @@ -454,580 +455,640 @@ void DropContext(void* data) #endif #if defined(_WIN32) -DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc, FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y, - int rotate, int flags) -{ - if (page==NULL) return; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return; - - CRenderContext* pContext = FX_NEW CRenderContext; - pPage->SetPrivateData((void*)1, pContext, DropContext); +DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc, + FPDF_PAGE page, + int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + int flags) { + if (page == NULL) + return; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return; + + CRenderContext* pContext = FX_NEW CRenderContext; + pPage->SetPrivateData((void*)1, pContext, DropContext); #ifndef _WIN32_WCE - CFX_DIBitmap* pBitmap = NULL; - FX_BOOL bBackgroundAlphaNeeded=FALSE; - bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded(); - if (bBackgroundAlphaNeeded) - { - - pBitmap = FX_NEW CFX_DIBitmap; - pBitmap->Create(size_x, size_y, FXDIB_Argb); - pBitmap->Clear(0x00ffffff); + CFX_DIBitmap* pBitmap = NULL; + FX_BOOL bBackgroundAlphaNeeded = FALSE; + bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded(); + if (bBackgroundAlphaNeeded) { + pBitmap = FX_NEW CFX_DIBitmap; + pBitmap->Create(size_x, size_y, FXDIB_Argb); + pBitmap->Clear(0x00ffffff); #ifdef _SKIA_SUPPORT_ - pContext->m_pDevice = FX_NEW CFX_SkiaDevice; - ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap); + pContext->m_pDevice = FX_NEW CFX_SkiaDevice; + ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap); #else - pContext->m_pDevice = FX_NEW CFX_FxgeDevice; - ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap); + pContext->m_pDevice = FX_NEW CFX_FxgeDevice; + ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap); #endif - } - else - pContext->m_pDevice = FX_NEW CFX_WindowsDevice(dc); - - FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, - rotate, flags, TRUE, NULL); - - if (bBackgroundAlphaNeeded) - { - if (pBitmap) - { - CFX_WindowsDevice WinDC(dc); - - if (WinDC.GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) - { - CFX_DIBitmap* pDst = FX_NEW CFX_DIBitmap; - int pitch = pBitmap->GetPitch(); - pDst->Create(size_x, size_y, FXDIB_Rgb32); - FXSYS_memset(pDst->GetBuffer(), -1, pitch*size_y); - pDst->CompositeBitmap(0, 0, size_x, size_y, pBitmap, 0, 0, FXDIB_BLEND_NORMAL, NULL, FALSE, NULL); - WinDC.StretchDIBits(pDst,0,0,size_x,size_y); - delete pDst; - } - else - WinDC.SetDIBits(pBitmap,0,0); - - } - } + } else + pContext->m_pDevice = FX_NEW CFX_WindowsDevice(dc); + + FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, + rotate, flags, TRUE, NULL); + + if (bBackgroundAlphaNeeded) { + if (pBitmap) { + CFX_WindowsDevice WinDC(dc); + + if (WinDC.GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) { + CFX_DIBitmap* pDst = FX_NEW CFX_DIBitmap; + int pitch = pBitmap->GetPitch(); + pDst->Create(size_x, size_y, FXDIB_Rgb32); + FXSYS_memset(pDst->GetBuffer(), -1, pitch * size_y); + pDst->CompositeBitmap(0, 0, size_x, size_y, pBitmap, 0, 0, + FXDIB_BLEND_NORMAL, NULL, FALSE, NULL); + WinDC.StretchDIBits(pDst, 0, 0, size_x, size_y); + delete pDst; + } else + WinDC.SetDIBits(pBitmap, 0, 0); + } + } #else - // get clip region - RECT rect, cliprect; - rect.left = start_x; - rect.top = start_y; - rect.right = start_x + size_x; - rect.bottom = start_y + size_y; - GetClipBox(dc, &cliprect); - IntersectRect(&rect, &rect, &cliprect); - int width = rect.right - rect.left; - int height = rect.bottom - rect.top; + // get clip region + RECT rect, cliprect; + rect.left = start_x; + rect.top = start_y; + rect.right = start_x + size_x; + rect.bottom = start_y + size_y; + GetClipBox(dc, &cliprect); + IntersectRect(&rect, &rect, &cliprect); + int width = rect.right - rect.left; + int height = rect.bottom - rect.top; #ifdef DEBUG_TRACE - { - char str[128]; - memset(str, 0, sizeof(str)); - FXSYS_snprintf(str, sizeof(str) - 1, "Rendering DIB %d x %d", width, height); - CPDF_ModuleMgr::Get()->ReportError(999, str); - } + { + char str[128]; + memset(str, 0, sizeof(str)); + FXSYS_snprintf(str, sizeof(str) - 1, "Rendering DIB %d x %d", width, + height); + CPDF_ModuleMgr::Get()->ReportError(999, str); + } #endif - // Create a DIB section - LPVOID pBuffer; - BITMAPINFOHEADER bmih; - FXSYS_memset(&bmih, 0, sizeof bmih); - bmih.biSize = sizeof bmih; - bmih.biBitCount = 24; - bmih.biHeight = -height; - bmih.biPlanes = 1; - bmih.biWidth = width; - pContext->m_hBitmap = CreateDIBSection(dc, (BITMAPINFO*)&bmih, DIB_RGB_COLORS, &pBuffer, NULL, 0); - if (pContext->m_hBitmap == NULL) { + // Create a DIB section + LPVOID pBuffer; + BITMAPINFOHEADER bmih; + FXSYS_memset(&bmih, 0, sizeof bmih); + bmih.biSize = sizeof bmih; + bmih.biBitCount = 24; + bmih.biHeight = -height; + bmih.biPlanes = 1; + bmih.biWidth = width; + pContext->m_hBitmap = CreateDIBSection(dc, (BITMAPINFO*)&bmih, DIB_RGB_COLORS, + &pBuffer, NULL, 0); + if (pContext->m_hBitmap == NULL) { #if defined(DEBUG) || defined(_DEBUG) - char str[128]; - memset(str, 0, sizeof(str)); - FXSYS_snprintf(str, sizeof(str) - 1, "Error CreateDIBSection: %d x %d, error code = %d", width, height, GetLastError()); - CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, str); + char str[128]; + memset(str, 0, sizeof(str)); + FXSYS_snprintf(str, sizeof(str) - 1, + "Error CreateDIBSection: %d x %d, error code = %d", width, + height, GetLastError()); + CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, str); #else - CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, NULL); + CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, NULL); #endif - } - FXSYS_memset(pBuffer, 0xff, height*((width*3+3)/4*4)); + } + FXSYS_memset(pBuffer, 0xff, height * ((width * 3 + 3) / 4 * 4)); #ifdef DEBUG_TRACE - { - CPDF_ModuleMgr::Get()->ReportError(999, "DIBSection created"); - } + { CPDF_ModuleMgr::Get()->ReportError(999, "DIBSection created"); } #endif - // Create a device with this external buffer - pContext->m_pBitmap = new CFX_DIBitmap; - pContext->m_pBitmap->Create(width, height, FXDIB_Rgb, (uint8_t*)pBuffer); - pContext->m_pDevice = new CPDF_FxgeDevice; - ((CPDF_FxgeDevice*)pContext->m_pDevice)->Attach(pContext->m_pBitmap); + // Create a device with this external buffer + pContext->m_pBitmap = new CFX_DIBitmap; + pContext->m_pBitmap->Create(width, height, FXDIB_Rgb, (uint8_t*)pBuffer); + pContext->m_pDevice = new CPDF_FxgeDevice; + ((CPDF_FxgeDevice*)pContext->m_pDevice)->Attach(pContext->m_pBitmap); #ifdef DEBUG_TRACE - CPDF_ModuleMgr::Get()->ReportError(999, "Ready for PDF rendering"); + CPDF_ModuleMgr::Get()->ReportError(999, "Ready for PDF rendering"); #endif - // output to bitmap device - FPDF_RenderPage_Retail(pContext, page, start_x - rect.left, - start_y - rect.top, size_x, size_y, rotate, flags); + // output to bitmap device + FPDF_RenderPage_Retail(pContext, page, start_x - rect.left, + start_y - rect.top, size_x, size_y, rotate, flags); #ifdef DEBUG_TRACE - CPDF_ModuleMgr::Get()->ReportError(999, "Finished PDF rendering"); + CPDF_ModuleMgr::Get()->ReportError(999, "Finished PDF rendering"); #endif - // Now output to real device - HDC hMemDC = CreateCompatibleDC(dc); - if (hMemDC == NULL) { + // Now output to real device + HDC hMemDC = CreateCompatibleDC(dc); + if (hMemDC == NULL) { #if defined(DEBUG) || defined(_DEBUG) - char str[128]; - memset(str, 0, sizeof(str)); - FXSYS_snprintf(str, sizeof(str) - 1, "Error CreateCompatibleDC. Error code = %d", GetLastError()); - CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, str); + char str[128]; + memset(str, 0, sizeof(str)); + FXSYS_snprintf(str, sizeof(str) - 1, + "Error CreateCompatibleDC. Error code = %d", GetLastError()); + CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, str); #else - CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, NULL); + CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, NULL); #endif - } + } - HGDIOBJ hOldBitmap = SelectObject(hMemDC, pContext->m_hBitmap); + HGDIOBJ hOldBitmap = SelectObject(hMemDC, pContext->m_hBitmap); #ifdef DEBUG_TRACE - CPDF_ModuleMgr::Get()->ReportError(999, "Ready for screen rendering"); + CPDF_ModuleMgr::Get()->ReportError(999, "Ready for screen rendering"); #endif - BitBlt(dc, rect.left, rect.top, width, height, hMemDC, 0, 0, SRCCOPY); - SelectObject(hMemDC, hOldBitmap); - DeleteDC(hMemDC); + BitBlt(dc, rect.left, rect.top, width, height, hMemDC, 0, 0, SRCCOPY); + SelectObject(hMemDC, hOldBitmap); + DeleteDC(hMemDC); #ifdef DEBUG_TRACE - CPDF_ModuleMgr::Get()->ReportError(999, "Finished screen rendering"); + CPDF_ModuleMgr::Get()->ReportError(999, "Finished screen rendering"); #endif #endif - if (bBackgroundAlphaNeeded) { - delete pBitmap; - pBitmap = NULL; - } - delete pContext; - pPage->RemovePrivateData((void*)1); + if (bBackgroundAlphaNeeded) { + delete pBitmap; + pBitmap = NULL; + } + delete pContext; + pPage->RemovePrivateData((void*)1); } #endif -DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y, - int size_x, int size_y, int rotate, int flags) -{ - if (bitmap == NULL || page == NULL) return; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return; - - CRenderContext* pContext = FX_NEW CRenderContext; - pPage->SetPrivateData((void*)1, pContext, DropContext); +DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap, + FPDF_PAGE page, + int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + int flags) { + if (bitmap == NULL || page == NULL) + return; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (!pPage) + return; + + CRenderContext* pContext = FX_NEW CRenderContext; + pPage->SetPrivateData((void*)1, pContext, DropContext); #ifdef _SKIA_SUPPORT_ - pContext->m_pDevice = FX_NEW CFX_SkiaDevice; + pContext->m_pDevice = FX_NEW CFX_SkiaDevice; - if (flags & FPDF_REVERSE_BYTE_ORDER) - ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap,0,TRUE); - else - ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap); + if (flags & FPDF_REVERSE_BYTE_ORDER) + ((CFX_SkiaDevice*)pContext->m_pDevice) + ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE); + else + ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap); #else - pContext->m_pDevice = FX_NEW CFX_FxgeDevice; + pContext->m_pDevice = FX_NEW CFX_FxgeDevice; - if (flags & FPDF_REVERSE_BYTE_ORDER) - ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap,0,TRUE); - else - ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap); + if (flags & FPDF_REVERSE_BYTE_ORDER) + ((CFX_FxgeDevice*)pContext->m_pDevice) + ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE); + else + ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap); #endif - FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, - rotate, flags, TRUE, NULL); + FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, + rotate, flags, TRUE, NULL); - delete pContext; - pPage->RemovePrivateData((void*)1); + delete pContext; + pPage->RemovePrivateData((void*)1); } -DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) -{ - if (!page) return; +DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) { + if (!page) + return; - CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; - pPage->Release(); + CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; + pPage->Release(); } -DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) -{ - if (!document) - return; +DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) { + if (!document) + return; - CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; - delete pDoc; + CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; + delete pDoc; } -DLLEXPORT unsigned long STDCALL FPDF_GetLastError() -{ - return GetLastError(); +DLLEXPORT unsigned long STDCALL FPDF_GetLastError() { + return GetLastError(); } -DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y, - int rotate, int device_x, int device_y, double* page_x, double* page_y) -{ - if (page == NULL || page_x == NULL || page_y == NULL) return; - CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; - - pPage->DeviceToPage(start_x, start_y, size_x, size_y, rotate, device_x, device_y, page_x, page_y); +DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page, + int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + int device_x, + int device_y, + double* page_x, + double* page_y) { + if (page == NULL || page_x == NULL || page_y == NULL) + return; + CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; + + pPage->DeviceToPage(start_x, start_y, size_x, size_y, rotate, device_x, + device_y, page_x, page_y); } -DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y, - int rotate, double page_x, double page_y, int* device_x, int* device_y) -{ - if (page == NULL || device_x == NULL || device_y == NULL) return; - CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; - pPage->PageToDevice(start_x, start_y, size_x, size_y, rotate, page_x, page_y, device_x, device_y); +DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page, + int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + double page_x, + double page_y, + int* device_x, + int* device_y) { + if (page == NULL || device_x == NULL || device_y == NULL) + return; + CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; + pPage->PageToDevice(start_x, start_y, size_x, size_y, rotate, page_x, page_y, + device_x, device_y); } -DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width, int height, int alpha) -{ - nonstd::unique_ptr pBitmap(new CFX_DIBitmap); - if (!pBitmap->Create(width, height, alpha ? FXDIB_Argb : FXDIB_Rgb32)) { - return NULL; - } - return pBitmap.release(); +DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width, + int height, + int alpha) { + nonstd::unique_ptr pBitmap(new CFX_DIBitmap); + if (!pBitmap->Create(width, height, alpha ? FXDIB_Argb : FXDIB_Rgb32)) { + return NULL; + } + return pBitmap.release(); } -DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_CreateEx(int width, int height, int format, void* first_scan, int stride) -{ - FXDIB_Format fx_format; - switch (format) { - case FPDFBitmap_Gray: - fx_format = FXDIB_8bppRgb; - break; - case FPDFBitmap_BGR: - fx_format = FXDIB_Rgb; - break; - case FPDFBitmap_BGRx: - fx_format = FXDIB_Rgb32; - break; - case FPDFBitmap_BGRA: - fx_format = FXDIB_Argb; - break; - default: - return NULL; - } - CFX_DIBitmap* pBitmap = new CFX_DIBitmap; - pBitmap->Create(width, height, fx_format, (uint8_t*)first_scan, stride); - return pBitmap; +DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_CreateEx(int width, + int height, + int format, + void* first_scan, + int stride) { + FXDIB_Format fx_format; + switch (format) { + case FPDFBitmap_Gray: + fx_format = FXDIB_8bppRgb; + break; + case FPDFBitmap_BGR: + fx_format = FXDIB_Rgb; + break; + case FPDFBitmap_BGRx: + fx_format = FXDIB_Rgb32; + break; + case FPDFBitmap_BGRA: + fx_format = FXDIB_Argb; + break; + default: + return NULL; + } + CFX_DIBitmap* pBitmap = new CFX_DIBitmap; + pBitmap->Create(width, height, fx_format, (uint8_t*)first_scan, stride); + return pBitmap; } -DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap, int left, int top, int width, int height, FPDF_DWORD color) -{ - if (bitmap == NULL) return; +DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap, + int left, + int top, + int width, + int height, + FPDF_DWORD color) { + if (bitmap == NULL) + return; #ifdef _SKIA_SUPPORT_ - CFX_SkiaDevice device; + CFX_SkiaDevice device; #else - CFX_FxgeDevice device; + CFX_FxgeDevice device; #endif - device.Attach((CFX_DIBitmap*)bitmap); - if (!((CFX_DIBitmap*)bitmap)->HasAlpha()) color |= 0xFF000000; - FX_RECT rect(left, top, left+width, top+height); - device.FillRect(&rect, color); + device.Attach((CFX_DIBitmap*)bitmap); + if (!((CFX_DIBitmap*)bitmap)->HasAlpha()) + color |= 0xFF000000; + FX_RECT rect(left, top, left + width, top + height); + device.FillRect(&rect, color); } -DLLEXPORT void* STDCALL FPDFBitmap_GetBuffer(FPDF_BITMAP bitmap) -{ - if (bitmap == NULL) return NULL; - return ((CFX_DIBitmap*)bitmap)->GetBuffer(); +DLLEXPORT void* STDCALL FPDFBitmap_GetBuffer(FPDF_BITMAP bitmap) { + if (bitmap == NULL) + return NULL; + return ((CFX_DIBitmap*)bitmap)->GetBuffer(); } -DLLEXPORT int STDCALL FPDFBitmap_GetWidth(FPDF_BITMAP bitmap) -{ - if (bitmap == NULL) return 0; - return ((CFX_DIBitmap*)bitmap)->GetWidth(); +DLLEXPORT int STDCALL FPDFBitmap_GetWidth(FPDF_BITMAP bitmap) { + if (bitmap == NULL) + return 0; + return ((CFX_DIBitmap*)bitmap)->GetWidth(); } -DLLEXPORT int STDCALL FPDFBitmap_GetHeight(FPDF_BITMAP bitmap) -{ - if (bitmap == NULL) return 0; - return ((CFX_DIBitmap*)bitmap)->GetHeight(); +DLLEXPORT int STDCALL FPDFBitmap_GetHeight(FPDF_BITMAP bitmap) { + if (bitmap == NULL) + return 0; + return ((CFX_DIBitmap*)bitmap)->GetHeight(); } -DLLEXPORT int STDCALL FPDFBitmap_GetStride(FPDF_BITMAP bitmap) -{ - if (bitmap == NULL) return 0; - return ((CFX_DIBitmap*)bitmap)->GetPitch(); +DLLEXPORT int STDCALL FPDFBitmap_GetStride(FPDF_BITMAP bitmap) { + if (bitmap == NULL) + return 0; + return ((CFX_DIBitmap*)bitmap)->GetPitch(); } -DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap) -{ - delete (CFX_DIBitmap*)bitmap; +DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap) { + delete (CFX_DIBitmap*)bitmap; } -void FPDF_RenderPage_Retail(CRenderContext* pContext, FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y, - int rotate, int flags,FX_BOOL bNeedToRestore, IFSDK_PAUSE_Adapter * pause ) -{ - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (pPage == NULL) return; - - if (!pContext->m_pOptions) - pContext->m_pOptions = new CPDF_RenderOptions; - - if (flags & FPDF_LCD_TEXT) - pContext->m_pOptions->m_Flags |= RENDER_CLEARTYPE; - else - pContext->m_pOptions->m_Flags &= ~RENDER_CLEARTYPE; - if (flags & FPDF_NO_NATIVETEXT) - pContext->m_pOptions->m_Flags |= RENDER_NO_NATIVETEXT; - if (flags & FPDF_RENDER_LIMITEDIMAGECACHE) - pContext->m_pOptions->m_Flags |= RENDER_LIMITEDIMAGECACHE; - if (flags & FPDF_RENDER_FORCEHALFTONE) - pContext->m_pOptions->m_Flags |= RENDER_FORCE_HALFTONE; - //Grayscale output - if (flags & FPDF_GRAYSCALE) - { - pContext->m_pOptions->m_ColorMode = RENDER_COLOR_GRAY; - pContext->m_pOptions->m_ForeColor = 0; - pContext->m_pOptions->m_BackColor = 0xffffff; - } - const CPDF_OCContext::UsageType usage = (flags & FPDF_PRINTING) ? CPDF_OCContext::Print : CPDF_OCContext::View; - pContext->m_pOptions->m_AddFlags = flags >> 8; - pContext->m_pOptions->m_pOCContext = new CPDF_OCContext(pPage->m_pDocument, usage); - - CFX_AffineMatrix matrix; - pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate); - - FX_RECT clip; - clip.left = start_x; - clip.right = start_x + size_x; - clip.top = start_y; - clip.bottom = start_y + size_y; - pContext->m_pDevice->SaveState(); - pContext->m_pDevice->SetClip_Rect(&clip); - - pContext->m_pContext = FX_NEW CPDF_RenderContext; - pContext->m_pContext->Create(pPage); - pContext->m_pContext->AppendObjectList(pPage, &matrix); - - if (flags & FPDF_ANNOT) { - pContext->m_pAnnots = FX_NEW CPDF_AnnotList(pPage); - FX_BOOL bPrinting = pContext->m_pDevice->GetDeviceClass() != FXDC_DISPLAY; - pContext->m_pAnnots->DisplayAnnots(pPage, pContext->m_pContext, bPrinting, &matrix, TRUE, NULL); - } - - pContext->m_pRenderer = FX_NEW CPDF_ProgressiveRenderer; - pContext->m_pRenderer->Start(pContext->m_pContext, pContext->m_pDevice, pContext->m_pOptions, pause); - if (bNeedToRestore) - { - pContext->m_pDevice->RestoreState(); - } - -//#endif +void FPDF_RenderPage_Retail(CRenderContext* pContext, + FPDF_PAGE page, + int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + int flags, + FX_BOOL bNeedToRestore, + IFSDK_PAUSE_Adapter* pause) { + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if (pPage == NULL) + return; + + if (!pContext->m_pOptions) + pContext->m_pOptions = new CPDF_RenderOptions; + + if (flags & FPDF_LCD_TEXT) + pContext->m_pOptions->m_Flags |= RENDER_CLEARTYPE; + else + pContext->m_pOptions->m_Flags &= ~RENDER_CLEARTYPE; + if (flags & FPDF_NO_NATIVETEXT) + pContext->m_pOptions->m_Flags |= RENDER_NO_NATIVETEXT; + if (flags & FPDF_RENDER_LIMITEDIMAGECACHE) + pContext->m_pOptions->m_Flags |= RENDER_LIMITEDIMAGECACHE; + if (flags & FPDF_RENDER_FORCEHALFTONE) + pContext->m_pOptions->m_Flags |= RENDER_FORCE_HALFTONE; + // Grayscale output + if (flags & FPDF_GRAYSCALE) { + pContext->m_pOptions->m_ColorMode = RENDER_COLOR_GRAY; + pContext->m_pOptions->m_ForeColor = 0; + pContext->m_pOptions->m_BackColor = 0xffffff; + } + const CPDF_OCContext::UsageType usage = + (flags & FPDF_PRINTING) ? CPDF_OCContext::Print : CPDF_OCContext::View; + pContext->m_pOptions->m_AddFlags = flags >> 8; + pContext->m_pOptions->m_pOCContext = + new CPDF_OCContext(pPage->m_pDocument, usage); + + CFX_AffineMatrix matrix; + pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate); + + FX_RECT clip; + clip.left = start_x; + clip.right = start_x + size_x; + clip.top = start_y; + clip.bottom = start_y + size_y; + pContext->m_pDevice->SaveState(); + pContext->m_pDevice->SetClip_Rect(&clip); + + pContext->m_pContext = FX_NEW CPDF_RenderContext; + pContext->m_pContext->Create(pPage); + pContext->m_pContext->AppendObjectList(pPage, &matrix); + + if (flags & FPDF_ANNOT) { + pContext->m_pAnnots = FX_NEW CPDF_AnnotList(pPage); + FX_BOOL bPrinting = pContext->m_pDevice->GetDeviceClass() != FXDC_DISPLAY; + pContext->m_pAnnots->DisplayAnnots(pPage, pContext->m_pContext, bPrinting, + &matrix, TRUE, NULL); + } + + pContext->m_pRenderer = FX_NEW CPDF_ProgressiveRenderer; + pContext->m_pRenderer->Start(pContext->m_pContext, pContext->m_pDevice, + pContext->m_pOptions, pause); + if (bNeedToRestore) { + pContext->m_pDevice->RestoreState(); + } + + //#endif } -DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, int page_index, double* width, double* height) -{ -// CPDF_Document* pDoc = (CPDF_Document*)document; -// if(pDoc == NULL) -// return FALSE; -// -// CPDF_Dictionary* pDict = pDoc->GetPage(page_index); -// if (pDict == NULL) return FALSE; -// -// CPDF_Page page; -// page.Load(pDoc, pDict); -// *width = page.GetPageWidth(); -// *height = page.GetPageHeight(); - - CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; - if (pDoc == NULL) - return FALSE; - - int count = pDoc->GetPageCount(); - if (page_index < 0 || page_index >= count) - return FALSE; - - CPDFXFA_Page* pPage = pDoc->GetPage(page_index); - if (!pPage) - return FALSE; - - *width = pPage->GetPageWidth(); - *height = pPage->GetPageHeight(); - - return TRUE; +DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, + int page_index, + double* width, + double* height) { + // CPDF_Document* pDoc = (CPDF_Document*)document; + // if(pDoc == NULL) + // return FALSE; + // + // CPDF_Dictionary* pDict = pDoc->GetPage(page_index); + // if (pDict == NULL) return FALSE; + // + // CPDF_Page page; + // page.Load(pDoc, pDict); + // *width = page.GetPageWidth(); + // *height = page.GetPageHeight(); + + CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; + if (pDoc == NULL) + return FALSE; + + int count = pDoc->GetPageCount(); + if (page_index < 0 || page_index >= count) + return FALSE; + + CPDFXFA_Page* pPage = pDoc->GetPage(page_index); + if (!pPage) + return FALSE; + + *width = pPage->GetPageWidth(); + *height = pPage->GetPageHeight(); + + return TRUE; } -DLLEXPORT FPDF_BOOL STDCALL FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) -{ - CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; - if (!pDoc) return TRUE; - CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); - if (!pPDFDoc) return TRUE; - CPDF_ViewerPreferences viewRef(pPDFDoc); - return viewRef.PrintScaling(); +DLLEXPORT FPDF_BOOL STDCALL +FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) { + CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; + if (!pDoc) + return TRUE; + CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); + if (!pPDFDoc) + return TRUE; + CPDF_ViewerPreferences viewRef(pPDFDoc); + return viewRef.PrintScaling(); } -DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) -{ - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - if (!pDoc) return 1; - CPDF_ViewerPreferences viewRef(pDoc); - return viewRef.NumCopies(); +DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) { + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + if (!pDoc) + return 1; + CPDF_ViewerPreferences viewRef(pDoc); + return viewRef.NumCopies(); } -DLLEXPORT FPDF_PAGERANGE STDCALL FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) -{ - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - if (!pDoc) return NULL; - CPDF_ViewerPreferences viewRef(pDoc); - return viewRef.PrintPageRange(); +DLLEXPORT FPDF_PAGERANGE STDCALL +FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) { + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + if (!pDoc) + return NULL; + CPDF_ViewerPreferences viewRef(pDoc); + return viewRef.PrintPageRange(); } -DLLEXPORT FPDF_DUPLEXTYPE STDCALL FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) -{ - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - if (!pDoc) return DuplexUndefined; - CPDF_ViewerPreferences viewRef(pDoc); - CFX_ByteString duplex = viewRef.Duplex(); - if (FX_BSTRC("Simplex") == duplex) - return Simplex; - if (FX_BSTRC("DuplexFlipShortEdge") == duplex) - return DuplexFlipShortEdge; - if (FX_BSTRC("DuplexFlipLongEdge") == duplex) - return DuplexFlipLongEdge; +DLLEXPORT FPDF_DUPLEXTYPE STDCALL +FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) { + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + if (!pDoc) return DuplexUndefined; + CPDF_ViewerPreferences viewRef(pDoc); + CFX_ByteString duplex = viewRef.Duplex(); + if (FX_BSTRC("Simplex") == duplex) + return Simplex; + if (FX_BSTRC("DuplexFlipShortEdge") == duplex) + return DuplexFlipShortEdge; + if (FX_BSTRC("DuplexFlipLongEdge") == duplex) + return DuplexFlipLongEdge; + return DuplexUndefined; } -DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) -{ - if (!document) return 0; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - - CPDF_Dictionary* pRoot = pDoc->GetRoot(); - if (!pRoot) return 0; - - CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); - int count = nameTree.GetCount(); - CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); - if (pDest) - count += pDest->GetCount(); - return count; +DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) { + if (!document) + return 0; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + + CPDF_Dictionary* pRoot = pDoc->GetRoot(); + if (!pRoot) + return 0; + + CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); + int count = nameTree.GetCount(); + CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); + if (pDest) + count += pDest->GetCount(); + return count; } -DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,FPDF_BYTESTRING name) -{ - if (!document) - return NULL; - if (!name || name[0] == 0) - return NULL; - - CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; - CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); - if (!pPDFDoc) - return NULL; - CPDF_NameTree name_tree(pPDFDoc, FX_BSTRC("Dests")); - return name_tree.LookupNamedDest(pPDFDoc, name); +DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, + FPDF_BYTESTRING name) { + if (!document) + return NULL; + if (!name || name[0] == 0) + return NULL; + + CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document; + CPDF_Document* pPDFDoc = pDoc->GetPDFDoc(); + if (!pPDFDoc) + return NULL; + CPDF_NameTree name_tree(pPDFDoc, FX_BSTRC("Dests")); + return name_tree.LookupNamedDest(pPDFDoc, name); } -FPDF_RESULT FPDF_BStr_Init(FPDF_BSTR* str) -{ - if (!str) - return -1; +FPDF_RESULT FPDF_BStr_Init(FPDF_BSTR* str) { + if (!str) + return -1; - FXSYS_memset(str, 0, sizeof(FPDF_BSTR)); - return 0; + FXSYS_memset(str, 0, sizeof(FPDF_BSTR)); + return 0; } -FPDF_RESULT FPDF_BStr_Set(FPDF_BSTR* str, FPDF_LPCSTR bstr, int length) -{ - if (!str) return -1; - if (!bstr || !length) - return -1; - if (length == -1) - length = FXSYS_strlen(bstr); - - if (length == 0) - { - if (str->str) - { - FX_Free(str->str); - str->str = NULL; - } - str->len = 0; - return 0; - } - - if (str->str && str->len < length) - str->str = FX_Realloc(char, str->str, length+1); - else if (!str->str) - str->str = FX_Alloc(char, length+1); - - str->str[length] = 0; - if (str->str == NULL) - return -1; - - FXSYS_memcpy(str->str, bstr, length); - str->len = length; - - return 0; +FPDF_RESULT FPDF_BStr_Set(FPDF_BSTR* str, FPDF_LPCSTR bstr, int length) { + if (!str) + return -1; + if (!bstr || !length) + return -1; + if (length == -1) + length = FXSYS_strlen(bstr); + + if (length == 0) { + if (str->str) { + FX_Free(str->str); + str->str = NULL; + } + str->len = 0; + return 0; + } + + if (str->str && str->len < length) + str->str = FX_Realloc(char, str->str, length + 1); + else if (!str->str) + str->str = FX_Alloc(char, length + 1); + + str->str[length] = 0; + if (str->str == NULL) + return -1; + + FXSYS_memcpy(str->str, bstr, length); + str->len = length; + + return 0; } -FPDF_RESULT FPDF_BStr_Clear(FPDF_BSTR* str) -{ - if(!str) - return -1; - - if (str->str) - { - FX_Free(str->str); - str->str = NULL; - } - str->len = 0; - return 0; +FPDF_RESULT FPDF_BStr_Clear(FPDF_BSTR* str) { + if (!str) + return -1; + + if (str->str) { + FX_Free(str->str); + str->str = NULL; + } + str->len = 0; + return 0; } -DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, int index, void* buffer, long* buflen) -{ - if (!buffer) - *buflen = 0; - if (!document || index < 0) return NULL; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - - CPDF_Dictionary* pRoot = pDoc->GetRoot(); - if (!pRoot) return NULL; - - CPDF_Object* pDestObj = NULL; - CFX_ByteString bsName; - CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); - int count = nameTree.GetCount(); - if (index >= count) { - CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); - if (!pDest) return NULL; - if (index >= count + pDest->GetCount()) return NULL; - index -= count; - FX_POSITION pos = pDest->GetStartPos(); - int i = 0; - while (pos) { - pDestObj = pDest->GetNextElement(pos, bsName); - if (!pDestObj) continue; - if (i == index) break; - i++; - } - } else { - pDestObj = nameTree.LookupValue(index, bsName); - } - if (!pDestObj) return NULL; - if (pDestObj->GetType() == PDFOBJ_DICTIONARY) { - pDestObj = ((CPDF_Dictionary*)pDestObj)->GetArray(FX_BSTRC("D")); - if (!pDestObj) return NULL; - } - if (pDestObj->GetType() != PDFOBJ_ARRAY) return NULL; - CFX_WideString wsName = PDF_DecodeText(bsName); - CFX_ByteString utf16Name = wsName.UTF16LE_Encode(); - unsigned int len = utf16Name.GetLength(); - if (!buffer) { - *buflen = len; - } else if (*buflen >= len) { - memcpy(buffer, utf16Name.c_str(), len); - *buflen = len; - } else { - *buflen = -1; +DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, + int index, + void* buffer, + long* buflen) { + if (!buffer) + *buflen = 0; + if (!document || index < 0) + return NULL; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + + CPDF_Dictionary* pRoot = pDoc->GetRoot(); + if (!pRoot) + return NULL; + + CPDF_Object* pDestObj = NULL; + CFX_ByteString bsName; + CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); + int count = nameTree.GetCount(); + if (index >= count) { + CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); + if (!pDest) + return NULL; + if (index >= count + pDest->GetCount()) + return NULL; + index -= count; + FX_POSITION pos = pDest->GetStartPos(); + int i = 0; + while (pos) { + pDestObj = pDest->GetNextElement(pos, bsName); + if (!pDestObj) + continue; + if (i == index) + break; + i++; } - return (FPDF_DEST)pDestObj; + } else { + pDestObj = nameTree.LookupValue(index, bsName); + } + if (!pDestObj) + return NULL; + if (pDestObj->GetType() == PDFOBJ_DICTIONARY) { + pDestObj = ((CPDF_Dictionary*)pDestObj)->GetArray(FX_BSTRC("D")); + if (!pDestObj) + return NULL; + } + if (pDestObj->GetType() != PDFOBJ_ARRAY) + return NULL; + CFX_WideString wsName = PDF_DecodeText(bsName); + CFX_ByteString utf16Name = wsName.UTF16LE_Encode(); + unsigned int len = utf16Name.GetLength(); + if (!buffer) { + *buflen = len; + } else if (*buflen >= len) { + memcpy(buffer, utf16Name.c_str(), len); + *buflen = len; + } else { + *buflen = -1; + } + return (FPDF_DEST)pDestObj; } diff --git a/fpdfsdk/src/fpdfview_embeddertest.cpp b/fpdfsdk/src/fpdfview_embeddertest.cpp index d58399a9b1..e369ed8404 100644 --- a/fpdfsdk/src/fpdfview_embeddertest.cpp +++ b/fpdfsdk/src/fpdfview_embeddertest.cpp @@ -14,8 +14,7 @@ TEST(fpdf, CApiTest) { EXPECT_TRUE(CheckPDFiumCApi()); } -class FPDFViewEmbeddertest : public EmbedderTest { -}; +class FPDFViewEmbeddertest : public EmbedderTest {}; TEST_F(FPDFViewEmbeddertest, Document) { EXPECT_TRUE(OpenDocument("testing/resources/about_blank.pdf")); @@ -54,7 +53,7 @@ TEST_F(FPDFViewEmbeddertest, NamedDests) { FPDF_DEST dest; // Query the size of the first item. - buffer_size = 2000000; // Absurdly large, check not used for this case. + buffer_size = 2000000; // Absurdly large, check not used for this case. dest = FPDF_GetNamedDest(document(), 0, nullptr, &buffer_size); EXPECT_NE(nullptr, dest); EXPECT_EQ(12u, buffer_size); @@ -104,9 +103,8 @@ TEST_F(FPDFViewEmbeddertest, NamedDests) { dest = FPDF_GetNamedDest(document(), 4, fixed_buffer, &buffer_size); EXPECT_NE(nullptr, dest); EXPECT_EQ(30u, buffer_size); - EXPECT_EQ( - std::string("F\0i\0r\0s\0t\0A\0l\0t\0e\0r\0n\0a\0t\0e\0\0\0", 30), - std::string(fixed_buffer, buffer_size)); + EXPECT_EQ(std::string("F\0i\0r\0s\0t\0A\0l\0t\0e\0r\0n\0a\0t\0e\0\0\0", 30), + std::string(fixed_buffer, buffer_size)); // Try to retrieve sixth item with ample buffer. Item istaken from the // old-style Dests dictionary object but has a sub-dictionary in @@ -115,9 +113,8 @@ TEST_F(FPDFViewEmbeddertest, NamedDests) { dest = FPDF_GetNamedDest(document(), 5, fixed_buffer, &buffer_size); EXPECT_NE(nullptr, dest); EXPECT_EQ(28u, buffer_size); - EXPECT_EQ( - std::string("L\0a\0s\0t\0A\0l\0t\0e\0r\0n\0a\0t\0e\0\0\0", 28), - std::string(fixed_buffer, buffer_size)); + EXPECT_EQ(std::string("L\0a\0s\0t\0A\0l\0t\0e\0r\0n\0a\0t\0e\0\0\0", 28), + std::string(fixed_buffer, buffer_size)); // Try to retrieve non-existent item with ample buffer. buffer_size = sizeof(fixed_buffer); diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp index 72fc91e708..a53381876a 100644 --- a/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp +++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp @@ -15,546 +15,542 @@ CPDFXFA_App* CPDFXFA_App::g_pApp = NULL; -CPDFXFA_App* CPDFXFA_App::GetInstance() -{ - if (!g_pApp) { - g_pApp = FX_NEW CPDFXFA_App(); - } - return g_pApp; +CPDFXFA_App* CPDFXFA_App::GetInstance() { + if (!g_pApp) { + g_pApp = FX_NEW CPDFXFA_App(); + } + return g_pApp; } -void CPDFXFA_App::ReleaseInstance() -{ - delete g_pApp; - g_pApp = NULL; +void CPDFXFA_App::ReleaseInstance() { + delete g_pApp; + g_pApp = NULL; } -CJS_RuntimeFactory* g_GetJSRuntimeFactory() -{ - static CJS_RuntimeFactory g_JSRuntimeFactory; - return &g_JSRuntimeFactory; +CJS_RuntimeFactory* g_GetJSRuntimeFactory() { + static CJS_RuntimeFactory g_JSRuntimeFactory; + return &g_JSRuntimeFactory; } -CPDFXFA_App::CPDFXFA_App() : - m_bInitRuntime(FALSE), - m_pXFAApp(NULL), - m_pFontMgr(NULL), - m_hJSERuntime(NULL), - m_csAppType(JS_STR_VIEWERTYPE_STANDARD) -{ - m_pJSRuntimeFactory = g_GetJSRuntimeFactory(); - m_pJSRuntimeFactory->AddRef(); - m_pEnvList.RemoveAll(); +CPDFXFA_App::CPDFXFA_App() + : m_bInitRuntime(FALSE), + m_pXFAApp(NULL), + m_pFontMgr(NULL), + m_hJSERuntime(NULL), + m_csAppType(JS_STR_VIEWERTYPE_STANDARD) { + m_pJSRuntimeFactory = g_GetJSRuntimeFactory(); + m_pJSRuntimeFactory->AddRef(); + m_pEnvList.RemoveAll(); } -CPDFXFA_App::~CPDFXFA_App() -{ - delete m_pFontMgr; - m_pFontMgr = NULL; +CPDFXFA_App::~CPDFXFA_App() { + delete m_pFontMgr; + m_pFontMgr = NULL; - delete m_pXFAApp; - m_pXFAApp = NULL; + delete m_pXFAApp; + m_pXFAApp = NULL; - m_pJSRuntimeFactory->Release(); - FXJSE_Runtime_Release(m_hJSERuntime); - m_hJSERuntime = NULL; + m_pJSRuntimeFactory->Release(); + FXJSE_Runtime_Release(m_hJSERuntime); + m_hJSERuntime = NULL; - FXJSE_Finalize(); - BC_Library_Destory(); + FXJSE_Finalize(); + BC_Library_Destory(); } -FX_BOOL CPDFXFA_App::Initialize() -{ - BC_Library_Init(); - FXJSE_Initialize(); +FX_BOOL CPDFXFA_App::Initialize() { + BC_Library_Init(); + FXJSE_Initialize(); - m_hJSERuntime = FXJSE_Runtime_Create(); - if (!m_hJSERuntime) - return FALSE; + m_hJSERuntime = FXJSE_Runtime_Create(); + if (!m_hJSERuntime) + return FALSE; - m_pXFAApp = IXFA_App::Create(this); - if (!m_pXFAApp) - return FALSE; + m_pXFAApp = IXFA_App::Create(this); + if (!m_pXFAApp) + return FALSE; - m_pFontMgr = IXFA_FontMgr::CreateDefault(); - if (!m_pFontMgr) - return FALSE; + m_pFontMgr = IXFA_FontMgr::CreateDefault(); + if (!m_pFontMgr) + return FALSE; - m_pXFAApp->SetDefaultFontMgr(m_pFontMgr); - return TRUE; + m_pXFAApp->SetDefaultFontMgr(m_pFontMgr); + return TRUE; } FX_BOOL CPDFXFA_App::InitRuntime(FX_BOOL bReset) { - if (bReset) { - m_bInitRuntime = FALSE; - return TRUE; - } - if (m_bInitRuntime) { - return TRUE; - } - m_bInitRuntime = TRUE; - return FALSE; + if (bReset) { + m_bInitRuntime = FALSE; + return TRUE; + } + if (m_bInitRuntime) { + return TRUE; + } + m_bInitRuntime = TRUE; + return FALSE; } -FX_BOOL CPDFXFA_App::AddFormFillEnv(CPDFDoc_Environment* pEnv) -{ - if (!pEnv) return FALSE; +FX_BOOL CPDFXFA_App::AddFormFillEnv(CPDFDoc_Environment* pEnv) { + if (!pEnv) + return FALSE; - m_pEnvList.Add(pEnv); - return TRUE; + m_pEnvList.Add(pEnv); + return TRUE; } -FX_BOOL CPDFXFA_App::RemoveFormFillEnv(CPDFDoc_Environment* pEnv) -{ - if (!pEnv) return FALSE; +FX_BOOL CPDFXFA_App::RemoveFormFillEnv(CPDFDoc_Environment* pEnv) { + if (!pEnv) + return FALSE; - int nFind = m_pEnvList.Find(pEnv); - if (nFind != -1) { - m_pEnvList.RemoveAt(nFind); - return TRUE; - } + int nFind = m_pEnvList.Find(pEnv); + if (nFind != -1) { + m_pEnvList.RemoveAt(nFind); + return TRUE; + } - return FALSE; + return FALSE; } -void CPDFXFA_App::ReleaseRuntime() -{ - v8::Global context; - JS_ReleaseRuntime((IJS_Runtime*)m_hJSERuntime, context); +void CPDFXFA_App::ReleaseRuntime() { + v8::Global context; + JS_ReleaseRuntime((IJS_Runtime*)m_hJSERuntime, context); } -void CPDFXFA_App::GetAppType(CFX_WideString &wsAppType) -{ - wsAppType = m_csAppType; +void CPDFXFA_App::GetAppType(CFX_WideString& wsAppType) { + wsAppType = m_csAppType; } -void CPDFXFA_App::GetAppName(CFX_WideString& wsName) -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - { - wsName = pEnv->FFI_GetAppName(); - } +void CPDFXFA_App::GetAppName(CFX_WideString& wsName) { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) { + wsName = pEnv->FFI_GetAppName(); + } } -void CPDFXFA_App::SetAppType(const CFX_WideStringC& wsAppType) -{ - m_csAppType = wsAppType; +void CPDFXFA_App::SetAppType(const CFX_WideStringC& wsAppType) { + m_csAppType = wsAppType; } -void CPDFXFA_App::GetLanguage(CFX_WideString &wsLanguage) -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - { - wsLanguage = pEnv->FFI_GetLanguage(); - } +void CPDFXFA_App::GetLanguage(CFX_WideString& wsLanguage) { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) { + wsLanguage = pEnv->FFI_GetLanguage(); + } } -void CPDFXFA_App::GetPlatform(CFX_WideString &wsPlatform) -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - { - wsPlatform = pEnv->FFI_GetPlatform(); - } +void CPDFXFA_App::GetPlatform(CFX_WideString& wsPlatform) { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) { + wsPlatform = pEnv->FFI_GetPlatform(); + } } -void CPDFXFA_App::GetVariation(CFX_WideString &wsVariation) -{ - wsVariation = JS_STR_VIEWERVARIATION; +void CPDFXFA_App::GetVariation(CFX_WideString& wsVariation) { + wsVariation = JS_STR_VIEWERVARIATION; } -void CPDFXFA_App::GetVersion(CFX_WideString &wsVersion) -{ - wsVersion = JS_STR_VIEWERVERSION_XFA; +void CPDFXFA_App::GetVersion(CFX_WideString& wsVersion) { + wsVersion = JS_STR_VIEWERVERSION_XFA; } -void CPDFXFA_App::Beep(FX_DWORD dwType) -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - { - pEnv->JS_appBeep(dwType); - } +void CPDFXFA_App::Beep(FX_DWORD dwType) { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) { + pEnv->JS_appBeep(dwType); + } } -int32_t CPDFXFA_App::MsgBox(const CFX_WideStringC& wsMessage, const CFX_WideStringC& wsTitle, FX_DWORD dwIconType, FX_DWORD dwButtonType) -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (!pEnv) - return -1; - - FX_DWORD iconType = 0; - int iButtonType = 0; - switch (dwIconType) - { +int32_t CPDFXFA_App::MsgBox(const CFX_WideStringC& wsMessage, + const CFX_WideStringC& wsTitle, + FX_DWORD dwIconType, + FX_DWORD dwButtonType) { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (!pEnv) + return -1; + + FX_DWORD iconType = 0; + int iButtonType = 0; + switch (dwIconType) { case XFA_MBICON_Error: - iconType |= 0; - break; + iconType |= 0; + break; case XFA_MBICON_Warning: - iconType |= 1; - break; + iconType |= 1; + break; case XFA_MBICON_Question: - iconType |= 2; - break; + iconType |= 2; + break; case XFA_MBICON_Status: - iconType |= 3; - break; - } - switch (dwButtonType) - { - case XFA_MB_OK: - iButtonType |= 0; - break; + iconType |= 3; + break; + } + switch (dwButtonType) { + case XFA_MB_OK: + iButtonType |= 0; + break; case XFA_MB_OKCancel: - iButtonType |= 1; - break; + iButtonType |= 1; + break; case XFA_MB_YesNo: - iButtonType |= 2; - break; + iButtonType |= 2; + break; case XFA_MB_YesNoCancel: - iButtonType |= 3; - break; - } - int32_t iRet = pEnv->JS_appAlert(wsMessage.GetPtr(), wsTitle.GetPtr(), iButtonType, iconType); - switch (iRet) - { + iButtonType |= 3; + break; + } + int32_t iRet = pEnv->JS_appAlert(wsMessage.GetPtr(), wsTitle.GetPtr(), + iButtonType, iconType); + switch (iRet) { case 1: - return XFA_IDOK; + return XFA_IDOK; case 2: - return XFA_IDCancel; + return XFA_IDCancel; case 3: - return XFA_IDNo; + return XFA_IDNo; case 4: - return XFA_IDYes; - } - return XFA_IDYes; + return XFA_IDYes; + } + return XFA_IDYes; } -void CPDFXFA_App::Response(CFX_WideString &wsAnswer, const CFX_WideStringC& wsQuestion, const CFX_WideStringC& wsTitle, const CFX_WideStringC& wsDefaultAnswer, FX_BOOL bMark) -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - { - int nLength = 2048; - char* pBuff = new char[nLength]; - nLength = pEnv->JS_appResponse(wsQuestion.GetPtr(), wsTitle.GetPtr(), wsDefaultAnswer.GetPtr(), NULL, bMark, pBuff, nLength); - if(nLength > 0) - { - nLength = nLength>2046?2046:nLength; - pBuff[nLength] = 0; - pBuff[nLength+1] = 0; - wsAnswer = CFX_WideString::FromUTF16LE((unsigned short*)pBuff, nLength); - } - delete[] pBuff; +void CPDFXFA_App::Response(CFX_WideString& wsAnswer, + const CFX_WideStringC& wsQuestion, + const CFX_WideStringC& wsTitle, + const CFX_WideStringC& wsDefaultAnswer, + FX_BOOL bMark) { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) { + int nLength = 2048; + char* pBuff = new char[nLength]; + nLength = pEnv->JS_appResponse(wsQuestion.GetPtr(), wsTitle.GetPtr(), + wsDefaultAnswer.GetPtr(), NULL, bMark, pBuff, + nLength); + if (nLength > 0) { + nLength = nLength > 2046 ? 2046 : nLength; + pBuff[nLength] = 0; + pBuff[nLength + 1] = 0; + wsAnswer = CFX_WideString::FromUTF16LE((unsigned short*)pBuff, nLength); } + delete[] pBuff; + } } -int32_t CPDFXFA_App::GetCurDocumentInBatch() -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - { - return pEnv->FFI_GetCurDocument(); - } - return 0; +int32_t CPDFXFA_App::GetCurDocumentInBatch() { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) { + return pEnv->FFI_GetCurDocument(); + } + return 0; } -int32_t CPDFXFA_App::GetDocumentCountInBatch() -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - { - return pEnv->FFI_GetDocumentCount(); - } +int32_t CPDFXFA_App::GetDocumentCountInBatch() { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) { + return pEnv->FFI_GetDocumentCount(); + } - return 0; + return 0; } -IFX_FileRead* CPDFXFA_App::DownloadURL(const CFX_WideStringC& wsURL) -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - { - return pEnv->FFI_DownloadFromURL(wsURL.GetPtr()); - } - return NULL; +IFX_FileRead* CPDFXFA_App::DownloadURL(const CFX_WideStringC& wsURL) { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) { + return pEnv->FFI_DownloadFromURL(wsURL.GetPtr()); + } + return NULL; } -FX_BOOL CPDFXFA_App::PostRequestURL(const CFX_WideStringC& wsURL, const CFX_WideStringC& wsData, const CFX_WideStringC& wsContentType, - const CFX_WideStringC& wsEncode, const CFX_WideStringC& wsHeader, CFX_WideString &wsResponse) -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - { - wsResponse = pEnv->FFI_PostRequestURL(wsURL.GetPtr(), wsData.GetPtr(), wsContentType.GetPtr(), wsEncode.GetPtr(), wsHeader.GetPtr()); - return TRUE; - } - return FALSE; +FX_BOOL CPDFXFA_App::PostRequestURL(const CFX_WideStringC& wsURL, + const CFX_WideStringC& wsData, + const CFX_WideStringC& wsContentType, + const CFX_WideStringC& wsEncode, + const CFX_WideStringC& wsHeader, + CFX_WideString& wsResponse) { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) { + wsResponse = pEnv->FFI_PostRequestURL(wsURL.GetPtr(), wsData.GetPtr(), + wsContentType.GetPtr(), + wsEncode.GetPtr(), wsHeader.GetPtr()); + return TRUE; + } + return FALSE; } -FX_BOOL CPDFXFA_App::PutRequestURL(const CFX_WideStringC& wsURL, const CFX_WideStringC& wsData, const CFX_WideStringC& wsEncode) -{ - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - { - return pEnv->FFI_PutRequestURL(wsURL.GetPtr(), wsData.GetPtr(), wsEncode.GetPtr()); - } - return FALSE; +FX_BOOL CPDFXFA_App::PutRequestURL(const CFX_WideStringC& wsURL, + const CFX_WideStringC& wsData, + const CFX_WideStringC& wsEncode) { + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) { + return pEnv->FFI_PutRequestURL(wsURL.GetPtr(), wsData.GetPtr(), + wsEncode.GetPtr()); + } + return FALSE; } -void CPDFXFA_App::LoadString(int32_t iStringID, CFX_WideString &wsString) -{ - switch (iStringID) - { +void CPDFXFA_App::LoadString(int32_t iStringID, CFX_WideString& wsString) { + switch (iStringID) { case XFA_IDS_ValidateFailed: - wsString = L"%s validate failed"; - return; + wsString = L"%s validate failed"; + return; case XFA_IDS_CalcOverride: - wsString = L"Calculate Override"; - return; + wsString = L"Calculate Override"; + return; case XFA_IDS_ModifyField: - wsString = L"Are you sure you want to modify this field?"; - return; + wsString = L"Are you sure you want to modify this field?"; + return; case XFA_IDS_NotModifyField: - wsString = L"You are not allowed to modify this field."; - return; + wsString = L"You are not allowed to modify this field."; + return; case XFA_IDS_AppName: - wsString = L"Foxit"; - return; + wsString = L"Foxit"; + return; case XFA_IDS_ImageFilter: - wsString = L"Image Files(*.bmp;*.jpg;*.png;*.gif;*.tif)|*.bmp;*.jpg;*.png;*.gif;*.tif|All Files(*.*)|*.*||"; - return; + wsString = + L"Image " + L"Files(*.bmp;*.jpg;*.png;*.gif;*.tif)|*.bmp;*.jpg;*.png;*.gif;*.tif|" + L"All Files(*.*)|*.*||"; + return; case XFA_IDS_UNKNOW_CATCHED: - wsString = L"unknown error is catched!"; - return; + wsString = L"unknown error is catched!"; + return; case XFA_IDS_Unable_TO_SET: - wsString = L"Unable to set "; - return; + wsString = L"Unable to set "; + return; case XFA_IDS_VALUE_EXCALMATORY: - wsString = L" value!"; - return; + wsString = L" value!"; + return; case XFA_IDS_INVALID_ENUM_VALUE: - wsString = L"Invalid enumerated value: "; - return; + wsString = L"Invalid enumerated value: "; + return; case XFA_IDS_UNSUPPORT_METHOD: - wsString = L"unsupport %s method."; - return; + wsString = L"unsupport %s method."; + return; case XFA_IDS_UNSUPPORT_PROP: - wsString = L"unsupport %s property."; - return; + wsString = L"unsupport %s property."; + return; case XFA_IDS_INVAlID_PROP_SET: - wsString = L"Invalid property set operation;"; - return; + wsString = L"Invalid property set operation;"; + return; case XFA_IDS_NOT_DEFAUL_VALUE: - wsString = L" doesn't have a default property"; - return; + wsString = L" doesn't have a default property"; + return; case XFA_IDS_UNABLE_SET_LANGUAGE: - wsString = L"Unable to set language value!"; - return; + wsString = L"Unable to set language value!"; + return; case XFA_IDS_UNABLE_SET_NUMPAGES: - wsString = L"Unable to set numPages value!"; - return; + wsString = L"Unable to set numPages value!"; + return; case XFA_IDS_UNABLE_SET_PLATFORM: - wsString = L"Unable to set platform value!"; - return; + wsString = L"Unable to set platform value!"; + return; case XFA_IDS_UNABLE_SET_VALIDATIONENABLE: - wsString = L"Unable to set validationsEnabled value!"; - return; + wsString = L"Unable to set validationsEnabled value!"; + return; case XFA_IDS_UNABLE_SET_VARIATION: - wsString = L"Unable to set variation value!"; - return; + wsString = L"Unable to set variation value!"; + return; case XFA_IDS_UNABLE_SET_VERSION: - wsString = L"Unable to set version value!"; - return; + wsString = L"Unable to set version value!"; + return; case XFA_IDS_UNABLE_SET_READY: - wsString = L"Unable to set ready value!"; - return; + wsString = L"Unable to set ready value!"; + return; case XFA_IDS_NUMBER_OF_OCCUR: - wsString = L"The element [%s] has violated its allowable number of occurrences"; - return; + wsString = + L"The element [%s] has violated its allowable number of occurrences"; + return; case XFA_IDS_UNABLE_SET_CLASS_NAME: - wsString = L"Unable to set className value!"; - return; + wsString = L"Unable to set className value!"; + return; case XFA_IDS_UNABLE_SET_LENGTH_VALUE: - wsString = L"Unable to set length value!"; - return; + wsString = L"Unable to set length value!"; + return; case XFA_IDS_UNSUPPORT_CHAR: - wsString = L"unsupported char '%c'"; - return; + wsString = L"unsupported char '%c'"; + return; case XFA_IDS_BAD_SUFFIX: - wsString = L"bad suffix on number"; - return; + wsString = L"bad suffix on number"; + return; case XFA_IDS_EXPECTED_IDENT: - wsString = L"expected identifier instead of '%s'"; - return; + wsString = L"expected identifier instead of '%s'"; + return; case XFA_IDS_EXPECTED_STRING: - wsString = L"expected '%s' instead of '%s'"; - return; + wsString = L"expected '%s' instead of '%s'"; + return; case XFA_IDS_INVALIDATE_CHAR: - wsString = L"invalidate char '%c'"; - return; + wsString = L"invalidate char '%c'"; + return; case XFA_IDS_REDEFINITION: - wsString = L"'%s' redefinition "; - return; + wsString = L"'%s' redefinition "; + return; case XFA_IDS_INVALIDATE_TOKEN: - wsString = L"invalidate token '%s'"; - return; + wsString = L"invalidate token '%s'"; + return; case XFA_IDS_INVALIDATE_EXPRESSION: - wsString = L"invalidate expression '%s'"; - return; + wsString = L"invalidate expression '%s'"; + return; case XFA_IDS_UNDEFINE_IDENTIFIER: - wsString = L"undefined identifier '%s'"; - return; + wsString = L"undefined identifier '%s'"; + return; case XFA_IDS_INVALIDATE_LEFTVALUE: - wsString = L"invalidate left-value '%s'"; - return; + wsString = L"invalidate left-value '%s'"; + return; case XFA_IDS_COMPILER_ERROR: - wsString = L"compiler error"; - return; + wsString = L"compiler error"; + return; case XFA_IDS_CANNOT_MODIFY_VALUE: - wsString = L"can't modify the '%s' value"; - return; + wsString = L"can't modify the '%s' value"; + return; case XFA_IDS_ERROR_PARAMETERS: - wsString = L"function '%s' has not %d parameters"; - return; + wsString = L"function '%s' has not %d parameters"; + return; case XFA_IDS_EXPECT_ENDIF: - wsString = L"expected 'endif' instead of '%s'"; - return; + wsString = L"expected 'endif' instead of '%s'"; + return; case XFA_IDS_UNEXPECTED_EXPRESSION: - wsString = L"unexpected expression '%s'"; - return; + wsString = L"unexpected expression '%s'"; + return; case XFA_IDS_CONDITION_IS_NULL: - wsString = L"condition is null"; - return; + wsString = L"condition is null"; + return; case XFA_IDS_ILLEGALBREAK: - wsString = L"illegal break"; - return; + wsString = L"illegal break"; + return; case XFA_IDS_ILLEGALCONTINUE: - wsString = L"illegal continue"; - return; + wsString = L"illegal continue"; + return; case XFA_IDS_EXPECTED_OPERATOR: - wsString = L"expected operator '%s' instead of '%s'"; - return; + wsString = L"expected operator '%s' instead of '%s'"; + return; case XFA_IDS_DIVIDE_ZERO: - wsString = L"divide by zero"; - return; + wsString = L"divide by zero"; + return; case XFA_IDS_CANNOT_COVERT_OBJECT: - wsString = L"%s.%s can not covert to object"; - return; + wsString = L"%s.%s can not covert to object"; + return; case XFA_IDS_NOT_FOUND_CONTAINER: - wsString = L"can not found container '%s'"; - return; + wsString = L"can not found container '%s'"; + return; case XFA_IDS_NOT_FOUND_PROPERTY: - wsString = L"can not found property '%s'"; - return; + wsString = L"can not found property '%s'"; + return; case XFA_IDS_NOT_FOUND_METHOD: - wsString = L"can not found method '%s'"; - return; + wsString = L"can not found method '%s'"; + return; case XFA_IDS_NOT_FOUND_CONST: - wsString = L"can not found const '%s'"; - return; + wsString = L"can not found const '%s'"; + return; case XFA_IDS_NOT_ASSIGN_OBJECT: - wsString = L"can not direct assign value to object"; - return; + wsString = L"can not direct assign value to object"; + return; case XFA_IDS_IVALIDATE_INSTRUCTION: - wsString = L"invalidate instruction"; - return; + wsString = L"invalidate instruction"; + return; case XFA_IDS_EXPECT_NUMBER: - wsString = L"expected number instead of '%s'"; - return; + wsString = L"expected number instead of '%s'"; + return; case XFA_IDS_VALIDATE_OUT_ARRAY: - wsString = L"validate access index '%s' out of array"; - return; + wsString = L"validate access index '%s' out of array"; + return; case XFA_IDS_CANNOT_ASSIGN_IDENT: - wsString = L"can not assign to %s"; - return; + wsString = L"can not assign to %s"; + return; case XFA_IDS_NOT_FOUNT_FUNCTION: - wsString = L"can not found '%s' function"; - return; + wsString = L"can not found '%s' function"; + return; case XFA_IDS_NOT_ARRAY: - wsString = L"'%s' doesn't an array"; - return; + wsString = L"'%s' doesn't an array"; + return; case XFA_IDS_OUT_ARRAY: - wsString = L"out of range of '%s' array"; - return; + wsString = L"out of range of '%s' array"; + return; case XFA_IDS_NOT_SUPPORT_CALC: - wsString = L"'%s' operator can not support array calculate"; - return; + wsString = L"'%s' operator can not support array calculate"; + return; case XFA_IDS_ARGUMENT_NOT_ARRAY: - wsString = L"'%s' function's %d argument can not be array"; - return; + wsString = L"'%s' function's %d argument can not be array"; + return; case XFA_IDS_ARGUMENT_EXPECT_CONTAINER: - wsString = L"'%s' argument expected a container"; - return; + wsString = L"'%s' argument expected a container"; + return; case XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT: - wsString = L"an attempt was made to reference property '%s' of a non-object in SOM expression %s"; - return; + wsString = + L"an attempt was made to reference property '%s' of a non-object in " + L"SOM expression %s"; + return; case XFA_IDS_FUNCTION_IS_BUILDIN: - wsString = L"function '%s' is buildin"; - return; + wsString = L"function '%s' is buildin"; + return; case XFA_IDS_ERROR_MSG: - wsString = L"%s : %s"; - return; + wsString = L"%s : %s"; + return; case XFA_IDS_INDEX_OUT_OF_BOUNDS: - wsString = L"Index value is out of bounds"; - return; + wsString = L"Index value is out of bounds"; + return; case XFA_IDS_INCORRECT_NUMBER_OF_METHOD: - wsString = L"Incorrect number of parameters calling method '%s'"; - return; + wsString = L"Incorrect number of parameters calling method '%s'"; + return; case XFA_IDS_ARGUMENT_MISMATCH: - wsString = L"Argument mismatch in property or function argument"; - return; + wsString = L"Argument mismatch in property or function argument"; + return; case XFA_IDS_INVALID_ENUMERATE: - wsString = L"Invalid enumerated value: %s"; - return; + wsString = L"Invalid enumerated value: %s"; + return; case XFA_IDS_INVALID_APPEND: - wsString = L"Invalid append operation: %s cannot have a child element of %s"; - return; + wsString = + L"Invalid append operation: %s cannot have a child element of %s"; + return; case XFA_IDS_SOM_EXPECTED_LIST: - wsString = L"SOM expression returned list when single result was expected"; - return; + wsString = + L"SOM expression returned list when single result was expected"; + return; case XFA_IDS_NOT_HAVE_PROPERTY: - wsString = L"'%s' doesn't have property '%s'"; - return; + wsString = L"'%s' doesn't have property '%s'"; + return; case XFA_IDS_INVALID_NODE_TYPE: - wsString = L"Invalid node type : '%s'"; - return; + wsString = L"Invalid node type : '%s'"; + return; case XFA_IDS_VIOLATE_BOUNDARY: - wsString = L"The element [%s] has violated its allowable number of occurrences"; - return; + wsString = + L"The element [%s] has violated its allowable number of occurrences"; + return; case XFA_IDS_SERVER_DENY: - wsString = L"Server does not permit"; - return; + wsString = L"Server does not permit"; + return; case XFA_IDS_ValidateLimit: - wsString = FX_WSTRC(L"Message limit exceeded. Remaining %d validation errors not reported."); - return; + wsString = FX_WSTRC( + L"Message limit exceeded. Remaining %d validation errors not " + L"reported."); + return; case XFA_IDS_ValidateNullWarning: - wsString = FX_WSTRC(L"%s cannot be left blank. To ignore validations for %s, click Ignore."); - return; + wsString = FX_WSTRC( + L"%s cannot be left blank. To ignore validations for %s, click " + L"Ignore."); + return; case XFA_IDS_ValidateNullError: - wsString = FX_WSTRC(L"%s cannot be left blank."); - return; + wsString = FX_WSTRC(L"%s cannot be left blank."); + return; case XFA_IDS_ValidateWarning: - wsString = FX_WSTRC(L"The value you entered for %s is invalid. To ignore validations for %s, click Ignore."); - return; + wsString = FX_WSTRC( + L"The value you entered for %s is invalid. To ignore validations for " + L"%s, click Ignore."); + return; case XFA_IDS_ValidateError: - wsString = FX_WSTRC(L"The value you entered for %s is invalid."); - return; - } - + wsString = FX_WSTRC(L"The value you entered for %s is invalid."); + return; + } } -FX_BOOL CPDFXFA_App::ShowFileDialog(const CFX_WideStringC& wsTitle, const CFX_WideStringC& wsFilter, CFX_WideStringArray &wsPathArr, FX_BOOL bOpen) -{ - return FALSE; +FX_BOOL CPDFXFA_App::ShowFileDialog(const CFX_WideStringC& wsTitle, + const CFX_WideStringC& wsFilter, + CFX_WideStringArray& wsPathArr, + FX_BOOL bOpen) { + return FALSE; } -IFWL_AdapterTimerMgr* CPDFXFA_App::GetTimerMgr() -{ - CXFA_FWLAdapterTimerMgr* pAdapter = NULL; - CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); - if (pEnv) - pAdapter = FX_NEW CXFA_FWLAdapterTimerMgr(pEnv); - return pAdapter; +IFWL_AdapterTimerMgr* CPDFXFA_App::GetTimerMgr() { + CXFA_FWLAdapterTimerMgr* pAdapter = NULL; + CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0); + if (pEnv) + pAdapter = FX_NEW CXFA_FWLAdapterTimerMgr(pEnv); + return pAdapter; } diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp index 81f1edcc27..30be57e763 100644 --- a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp +++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp @@ -1,7 +1,7 @@ // Copyright 2014 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 #include "../../../public/fpdf_formfill.h" @@ -13,17 +13,19 @@ #include "../../include/fpdfxfa/fpdfxfa_page.h" #include "../../include/javascript/IJavaScript.h" -#define IDS_XFA_Validate_Input "At least one required field was empty. Please fill in the required fields\r\n(highlighted) before continuing." +#define IDS_XFA_Validate_Input \ + "At least one required field was empty. Please fill in the required " \ + "fields\r\n(highlighted) before continuing." // submit -#define FXFA_CONFIG 0x00000001 -#define FXFA_TEMPLATE 0x00000010 -#define FXFA_LOCALESET 0x00000100 -#define FXFA_DATASETS 0x00001000 -#define FXFA_XMPMETA 0x00010000 -#define FXFA_XFDF 0x00100000 -#define FXFA_FORM 0x01000000 -#define FXFA_PDF 0x10000000 +#define FXFA_CONFIG 0x00000001 +#define FXFA_TEMPLATE 0x00000010 +#define FXFA_LOCALESET 0x00000100 +#define FXFA_DATASETS 0x00001000 +#define FXFA_XMPMETA 0x00010000 +#define FXFA_XFDF 0x00100000 +#define FXFA_FORM 0x01000000 +#define FXFA_PDF 0x10000000 #ifndef _WIN32 extern void SetLastError(int err); @@ -31,1409 +33,1319 @@ extern void SetLastError(int err); extern int GetLastError(); #endif -CPDFXFA_Document::CPDFXFA_Document(CPDF_Document* pPDFDoc, CPDFXFA_App* pProvider) : - m_pPDFDoc(pPDFDoc), - m_pApp(pProvider), - m_pXFADoc(NULL), - m_pXFADocView(NULL), - m_iDocType(DOCTYPE_PDF), - m_pJSContext(NULL), - m_pSDKDoc(NULL) -{ - m_XFAPageList.RemoveAll(); +CPDFXFA_Document::CPDFXFA_Document(CPDF_Document* pPDFDoc, + CPDFXFA_App* pProvider) + : m_pPDFDoc(pPDFDoc), + m_pApp(pProvider), + m_pXFADoc(NULL), + m_pXFADocView(NULL), + m_iDocType(DOCTYPE_PDF), + m_pJSContext(NULL), + m_pSDKDoc(NULL) { + m_XFAPageList.RemoveAll(); } -CPDFXFA_Document::~CPDFXFA_Document() -{ - if (m_pPDFDoc) - { - CPDF_Parser* pParser = (CPDF_Parser*)m_pPDFDoc->GetParser(); - if (pParser == NULL) - { - delete m_pPDFDoc; - }else - { - delete pParser; - } - m_pPDFDoc = NULL; - } - if (m_pXFADoc) - { - IXFA_App* pApp = m_pApp->GetXFAApp(); - if (pApp) - { - IXFA_DocHandler* pDocHandler = pApp->GetDocHandler(); - if (pDocHandler) - { - CloseXFADoc(pDocHandler); - } - } - } - - if (m_pJSContext) - { - if (m_pSDKDoc && m_pSDKDoc->GetEnv()) - { - m_pSDKDoc->GetEnv()->GetJSRuntime()->ReleaseContext(m_pJSContext); - m_pJSContext = NULL; - } - } - - - if (m_pSDKDoc) - delete m_pSDKDoc; - m_pSDKDoc = NULL; +CPDFXFA_Document::~CPDFXFA_Document() { + if (m_pPDFDoc) { + CPDF_Parser* pParser = (CPDF_Parser*)m_pPDFDoc->GetParser(); + if (pParser == NULL) { + delete m_pPDFDoc; + } else { + delete pParser; + } + m_pPDFDoc = NULL; + } + if (m_pXFADoc) { + IXFA_App* pApp = m_pApp->GetXFAApp(); + if (pApp) { + IXFA_DocHandler* pDocHandler = pApp->GetDocHandler(); + if (pDocHandler) { + CloseXFADoc(pDocHandler); + } + } + } + + if (m_pJSContext) { + if (m_pSDKDoc && m_pSDKDoc->GetEnv()) { + m_pSDKDoc->GetEnv()->GetJSRuntime()->ReleaseContext(m_pJSContext); + m_pJSContext = NULL; + } + } + + if (m_pSDKDoc) + delete m_pSDKDoc; + m_pSDKDoc = NULL; } -FX_BOOL CPDFXFA_Document::LoadXFADoc() -{ - if (!m_pPDFDoc) - return FALSE; - - m_XFAPageList.RemoveAll(); - - IXFA_App* pApp = m_pApp->GetXFAApp(); - if (!pApp) - return FALSE; - - m_pXFADoc = pApp->CreateDoc(this, m_pPDFDoc); - if (!m_pXFADoc) - { - SetLastError(FPDF_ERR_XFALOAD); - return FALSE; - } - - IXFA_DocHandler* pDocHandler = pApp->GetDocHandler(); - if (!pDocHandler) - { - SetLastError(FPDF_ERR_XFALOAD); - return FALSE; - } - - pDocHandler->StartLoad(m_pXFADoc); - int iStatus = pDocHandler->DoLoad(m_pXFADoc, NULL); - if (iStatus != XFA_PARSESTATUS_Done) - { - CloseXFADoc(pDocHandler); - SetLastError(FPDF_ERR_XFALOAD); - return FALSE; - } - pDocHandler->StopLoad(m_pXFADoc); - pDocHandler->SetJSERuntime(m_pXFADoc, m_pApp->GetJSERuntime()); - - if (pDocHandler->GetDocType(m_pXFADoc) == XFA_DOCTYPE_Dynamic) - m_iDocType = DOCTYPE_DYNIMIC_XFA; - else - m_iDocType = DOCTYPE_STATIC_XFA; - - m_pXFADocView = pDocHandler->CreateDocView(m_pXFADoc, XFA_DOCVIEW_View); - if (m_pXFADocView->StartLayout() < 0) - { - CloseXFADoc(pDocHandler); - SetLastError(FPDF_ERR_XFALAYOUT); - return FALSE; - } - - m_pXFADocView->DoLayout(NULL); - m_pXFADocView->StopLayout(); - return TRUE; +FX_BOOL CPDFXFA_Document::LoadXFADoc() { + if (!m_pPDFDoc) + return FALSE; + + m_XFAPageList.RemoveAll(); + + IXFA_App* pApp = m_pApp->GetXFAApp(); + if (!pApp) + return FALSE; + + m_pXFADoc = pApp->CreateDoc(this, m_pPDFDoc); + if (!m_pXFADoc) { + SetLastError(FPDF_ERR_XFALOAD); + return FALSE; + } + + IXFA_DocHandler* pDocHandler = pApp->GetDocHandler(); + if (!pDocHandler) { + SetLastError(FPDF_ERR_XFALOAD); + return FALSE; + } + + pDocHandler->StartLoad(m_pXFADoc); + int iStatus = pDocHandler->DoLoad(m_pXFADoc, NULL); + if (iStatus != XFA_PARSESTATUS_Done) { + CloseXFADoc(pDocHandler); + SetLastError(FPDF_ERR_XFALOAD); + return FALSE; + } + pDocHandler->StopLoad(m_pXFADoc); + pDocHandler->SetJSERuntime(m_pXFADoc, m_pApp->GetJSERuntime()); + + if (pDocHandler->GetDocType(m_pXFADoc) == XFA_DOCTYPE_Dynamic) + m_iDocType = DOCTYPE_DYNIMIC_XFA; + else + m_iDocType = DOCTYPE_STATIC_XFA; + + m_pXFADocView = pDocHandler->CreateDocView(m_pXFADoc, XFA_DOCVIEW_View); + if (m_pXFADocView->StartLayout() < 0) { + CloseXFADoc(pDocHandler); + SetLastError(FPDF_ERR_XFALAYOUT); + return FALSE; + } + + m_pXFADocView->DoLayout(NULL); + m_pXFADocView->StopLayout(); + return TRUE; } -int CPDFXFA_Document::GetPageCount() -{ - if (!m_pPDFDoc && !m_pXFADoc) - return 0; - - switch (m_iDocType) - { - case DOCTYPE_PDF: - case DOCTYPE_STATIC_XFA: - if (m_pPDFDoc) - return m_pPDFDoc->GetPageCount(); - case DOCTYPE_DYNIMIC_XFA: - if (m_pXFADoc) - return m_pXFADocView->CountPageViews(); - default: - return 0; - } - - return 0; +int CPDFXFA_Document::GetPageCount() { + if (!m_pPDFDoc && !m_pXFADoc) + return 0; + + switch (m_iDocType) { + case DOCTYPE_PDF: + case DOCTYPE_STATIC_XFA: + if (m_pPDFDoc) + return m_pPDFDoc->GetPageCount(); + case DOCTYPE_DYNIMIC_XFA: + if (m_pXFADoc) + return m_pXFADocView->CountPageViews(); + default: + return 0; + } + + return 0; } -CPDFXFA_Page* CPDFXFA_Document::GetPage(int page_index) -{ - if (!m_pPDFDoc && !m_pXFADoc) - return NULL; - - CPDFXFA_Page* pPage = NULL; - if (m_XFAPageList.GetSize()) - { - pPage = m_XFAPageList.GetAt(page_index); - if (pPage) - pPage->AddRef(); - } - else - { - m_XFAPageList.SetSize(GetPageCount()); - } - - if (!pPage) - { - pPage = FX_NEW CPDFXFA_Page(this, page_index); - FX_BOOL bRet = pPage->LoadPage(); - if (!bRet) { - delete pPage; - return NULL; - } - - m_XFAPageList.SetAt(page_index, pPage); - } - - return pPage; +CPDFXFA_Page* CPDFXFA_Document::GetPage(int page_index) { + if (!m_pPDFDoc && !m_pXFADoc) + return NULL; + + CPDFXFA_Page* pPage = NULL; + if (m_XFAPageList.GetSize()) { + pPage = m_XFAPageList.GetAt(page_index); + if (pPage) + pPage->AddRef(); + } else { + m_XFAPageList.SetSize(GetPageCount()); + } + + if (!pPage) { + pPage = FX_NEW CPDFXFA_Page(this, page_index); + FX_BOOL bRet = pPage->LoadPage(); + if (!bRet) { + delete pPage; + return NULL; + } + + m_XFAPageList.SetAt(page_index, pPage); + } + + return pPage; } -CPDFXFA_Page* CPDFXFA_Document::GetPage(IXFA_PageView* pPage) -{ - if (!pPage) - return NULL; +CPDFXFA_Page* CPDFXFA_Document::GetPage(IXFA_PageView* pPage) { + if (!pPage) + return NULL; - if (!m_pXFADoc) - return NULL; + if (!m_pXFADoc) + return NULL; - if (m_iDocType != DOCTYPE_DYNIMIC_XFA) - return NULL; + if (m_iDocType != DOCTYPE_DYNIMIC_XFA) + return NULL; - int nSize = m_XFAPageList.GetSize(); - for (int i=0; iGetXFAPageView() && pTempPage->GetXFAPageView() == pPage) - return pTempPage; - } + int nSize = m_XFAPageList.GetSize(); + for (int i = 0; i < nSize; i++) { + CPDFXFA_Page* pTempPage = m_XFAPageList.GetAt(i); + if (!pTempPage) + continue; + if (pTempPage->GetXFAPageView() && pTempPage->GetXFAPageView() == pPage) + return pTempPage; + } - return NULL; + return NULL; } -void CPDFXFA_Document::RemovePage(CPDFXFA_Page* page) -{ - m_XFAPageList.SetAt(page->GetPageIndex(), NULL); +void CPDFXFA_Document::RemovePage(CPDFXFA_Page* page) { + m_XFAPageList.SetAt(page->GetPageIndex(), NULL); } -CPDFSDK_Document* CPDFXFA_Document::GetSDKDocument(CPDFDoc_Environment* pFormFillEnv) -{ - if (!pFormFillEnv) - return m_pSDKDoc; +CPDFSDK_Document* CPDFXFA_Document::GetSDKDocument( + CPDFDoc_Environment* pFormFillEnv) { + if (!pFormFillEnv) + return m_pSDKDoc; - if (m_pSDKDoc) - return m_pSDKDoc; + if (m_pSDKDoc) + return m_pSDKDoc; - m_pSDKDoc = new CPDFSDK_Document(this, pFormFillEnv); - if (!m_pSDKDoc) - return NULL; + m_pSDKDoc = new CPDFSDK_Document(this, pFormFillEnv); + if (!m_pSDKDoc) + return NULL; - return m_pSDKDoc; + return m_pSDKDoc; } -void CPDFXFA_Document::ReleaseSDKDoc() -{ - if (m_pSDKDoc) - delete m_pSDKDoc; +void CPDFXFA_Document::ReleaseSDKDoc() { + if (m_pSDKDoc) + delete m_pSDKDoc; - m_pSDKDoc = NULL; + m_pSDKDoc = NULL; } -void CPDFXFA_Document::FXRect2PDFRect(const CFX_RectF& fxRectF, CPDF_Rect& pdfRect) -{ - pdfRect.left = fxRectF.left; - pdfRect.top = fxRectF.bottom(); - pdfRect.right = fxRectF.right(); - pdfRect.bottom = fxRectF.top; +void CPDFXFA_Document::FXRect2PDFRect(const CFX_RectF& fxRectF, + CPDF_Rect& pdfRect) { + pdfRect.left = fxRectF.left; + pdfRect.top = fxRectF.bottom(); + pdfRect.right = fxRectF.right(); + pdfRect.bottom = fxRectF.top; } ////////////////////////////////////////////////////////////////////////// -void CPDFXFA_Document::SetChangeMark(IXFA_Doc* hDoc) -{ - if (hDoc == m_pXFADoc && m_pSDKDoc) - { - m_pSDKDoc->SetChangeMark(); - } +void CPDFXFA_Document::SetChangeMark(IXFA_Doc* hDoc) { + if (hDoc == m_pXFADoc && m_pSDKDoc) { + m_pSDKDoc->SetChangeMark(); + } } -FX_BOOL CPDFXFA_Document::GetChangeMark(IXFA_Doc* hDoc) -{ - if (hDoc == m_pXFADoc && m_pSDKDoc) - return m_pSDKDoc->GetChangeMark(); - return FALSE; +FX_BOOL CPDFXFA_Document::GetChangeMark(IXFA_Doc* hDoc) { + if (hDoc == m_pXFADoc && m_pSDKDoc) + return m_pSDKDoc->GetChangeMark(); + return FALSE; } -void CPDFXFA_Document::InvalidateRect(IXFA_PageView* pPageView, const CFX_RectF& rt, FX_DWORD dwFlags /* = 0 */) -{ - if (!m_pXFADoc || !m_pSDKDoc) - return; +void CPDFXFA_Document::InvalidateRect(IXFA_PageView* pPageView, + const CFX_RectF& rt, + FX_DWORD dwFlags /* = 0 */) { + if (!m_pXFADoc || !m_pSDKDoc) + return; - if (m_iDocType != DOCTYPE_DYNIMIC_XFA) - return; + if (m_iDocType != DOCTYPE_DYNIMIC_XFA) + return; - CPDF_Rect rcPage; - FXRect2PDFRect(rt, rcPage); + CPDF_Rect rcPage; + FXRect2PDFRect(rt, rcPage); - CPDFXFA_Page* pPage = GetPage(pPageView); + CPDFXFA_Page* pPage = GetPage(pPageView); - if (pPage == NULL) - return; + if (pPage == NULL) + return; - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (!pEnv) - return; + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (!pEnv) + return; - pEnv->FFI_Invalidate((FPDF_PAGE)pPage, rcPage.left, rcPage.bottom, rcPage.right, rcPage.top); + pEnv->FFI_Invalidate((FPDF_PAGE)pPage, rcPage.left, rcPage.bottom, + rcPage.right, rcPage.top); } -void CPDFXFA_Document::InvalidateRect(IXFA_Widget* hWidget, FX_DWORD dwFlags /* = 0 */) -{ - if (!hWidget) - return; +void CPDFXFA_Document::InvalidateRect(IXFA_Widget* hWidget, + FX_DWORD dwFlags /* = 0 */) { + if (!hWidget) + return; - if (!m_pXFADoc || !m_pSDKDoc || !m_pXFADocView) - return; - - if (m_iDocType != DOCTYPE_DYNIMIC_XFA) - return; + if (!m_pXFADoc || !m_pSDKDoc || !m_pXFADocView) + return; - IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); - if (!pWidgetHandler) - return; + if (m_iDocType != DOCTYPE_DYNIMIC_XFA) + return; - IXFA_PageView* pPageView = pWidgetHandler->GetPageView(hWidget); - if (!pPageView) - return; + IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); + if (!pWidgetHandler) + return; - CFX_RectF rect; - pWidgetHandler->GetRect(hWidget, rect); - InvalidateRect(pPageView, rect, dwFlags); -} + IXFA_PageView* pPageView = pWidgetHandler->GetPageView(hWidget); + if (!pPageView) + return; -void CPDFXFA_Document::DisplayCaret(IXFA_Widget* hWidget, FX_BOOL bVisible, const CFX_RectF* pRtAnchor) -{ - if (!hWidget || pRtAnchor == NULL) - return; + CFX_RectF rect; + pWidgetHandler->GetRect(hWidget, rect); + InvalidateRect(pPageView, rect, dwFlags); +} - if (!m_pXFADoc || !m_pSDKDoc || !m_pXFADocView) - return; +void CPDFXFA_Document::DisplayCaret(IXFA_Widget* hWidget, + FX_BOOL bVisible, + const CFX_RectF* pRtAnchor) { + if (!hWidget || pRtAnchor == NULL) + return; - if (m_iDocType != DOCTYPE_DYNIMIC_XFA) - return; + if (!m_pXFADoc || !m_pSDKDoc || !m_pXFADocView) + return; - IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); - if (!pWidgetHandler) - return; + if (m_iDocType != DOCTYPE_DYNIMIC_XFA) + return; - IXFA_PageView* pPageView = pWidgetHandler->GetPageView(hWidget); - if (!pPageView) - return; + IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); + if (!pWidgetHandler) + return; - CPDFXFA_Page* pPage = GetPage(pPageView); + IXFA_PageView* pPageView = pWidgetHandler->GetPageView(hWidget); + if (!pPageView) + return; - if (pPage == NULL) - return; + CPDFXFA_Page* pPage = GetPage(pPageView); - CPDF_Rect rcCaret; - FXRect2PDFRect(*pRtAnchor, rcCaret); + if (pPage == NULL) + return; - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (!pEnv) - return; + CPDF_Rect rcCaret; + FXRect2PDFRect(*pRtAnchor, rcCaret); - pEnv->FFI_DisplayCaret((FPDF_PAGE)pPage, bVisible, rcCaret.left, rcCaret.top, rcCaret.right, rcCaret.bottom); + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (!pEnv) + return; + pEnv->FFI_DisplayCaret((FPDF_PAGE)pPage, bVisible, rcCaret.left, rcCaret.top, + rcCaret.right, rcCaret.bottom); } -FX_BOOL CPDFXFA_Document::GetPopupPos(IXFA_Widget* hWidget, FX_FLOAT fMinPopup, FX_FLOAT fMaxPopup, const CFX_RectF &rtAnchor, CFX_RectF &rtPopup) -{ - if (NULL == hWidget) - { - return FALSE; - } - IXFA_PageView* pXFAPageView = m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget); - if (NULL == pXFAPageView) - { - return FALSE; - } - CPDFXFA_Page* pPage = GetPage(pXFAPageView); - if (pPage == NULL) - return FALSE; - - CXFA_WidgetAcc* pWidgetAcc = m_pXFADocView->GetWidgetHandler()->GetDataAcc(hWidget); - - int nRotate = pWidgetAcc->GetRotate(); - - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return FALSE; - FS_RECTF pageViewRect; - pEnv->FFI_GetPageViewRect(pPage, pageViewRect); - - CPDF_Rect rcAnchor; - - rcAnchor.left = rtAnchor.left; - rcAnchor.top = rtAnchor.bottom(); - rcAnchor.right = rtAnchor.right(); - rcAnchor.bottom = rtAnchor.top; - - int t1,t2,t; - FX_DWORD dwPos; FX_FLOAT fPoupHeight; - switch(nRotate) - { - - case 90: - { - t1 = (int)(pageViewRect.right - rcAnchor.right); - t2 = (int)(rcAnchor.left - pageViewRect.left); - if (rcAnchor.bottom < pageViewRect.bottom) - { - rtPopup.left += rcAnchor.bottom - pageViewRect.bottom; - } - - break; - } - - case 180: - { - t2 = (int)(pageViewRect.top - rcAnchor.top); - t1 = (int)(rcAnchor.bottom - pageViewRect.bottom); - if (rcAnchor.left < pageViewRect.left) - { - rtPopup.left += rcAnchor.left - pageViewRect.left; - } - break; - } - case 270: - { - t1 = (int)(rcAnchor.left - pageViewRect.left); - t2 = (int)(pageViewRect.right - rcAnchor.right); - - if (rcAnchor.top > pageViewRect.top) - { - rtPopup.left -= rcAnchor.top - pageViewRect.top; - } - break; - } - case 0: - default: - { - t1 = (int)(pageViewRect.top - rcAnchor.top); - t2 = (int)(rcAnchor.bottom - pageViewRect.bottom); - if (rcAnchor.right > pageViewRect.right) - { - rtPopup.left -= rcAnchor.right - pageViewRect.right; - } - break; - } - - } - - if (t1 <= 0 && t2 <= 0) - { - return FALSE; - } - if (t1 <= 0) - { - t = t2; - dwPos = 1; - } - else if(t2 <= 0) - { - t = t1; - dwPos = 0; - } - else if (t1 > t2 ) - { - t = t1; - dwPos = 0; - } - else - { - t = t2; - dwPos = 1; - } - if (t fMaxPopup) - { - fPoupHeight = fMaxPopup; - } - else - { - fPoupHeight = (FX_FLOAT)t; - } - - switch(nRotate) - { - - case 0: - case 180: - { - if (dwPos == 0) - { - rtPopup.top = rtAnchor.height; - rtPopup.height = fPoupHeight; - } - else - { - rtPopup.top = - fPoupHeight; - rtPopup.height = fPoupHeight; - } - break; - } - case 90: - case 270: - { - if (dwPos == 0) - { - rtPopup.top = rtAnchor.width; - rtPopup.height = fPoupHeight; - } - else - { - rtPopup.top = - fPoupHeight; - rtPopup.height = fPoupHeight; - } - break; - } - default: - break; - } - - return TRUE; +FX_BOOL CPDFXFA_Document::GetPopupPos(IXFA_Widget* hWidget, + FX_FLOAT fMinPopup, + FX_FLOAT fMaxPopup, + const CFX_RectF& rtAnchor, + CFX_RectF& rtPopup) { + if (NULL == hWidget) { + return FALSE; + } + IXFA_PageView* pXFAPageView = + m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget); + if (NULL == pXFAPageView) { + return FALSE; + } + CPDFXFA_Page* pPage = GetPage(pXFAPageView); + if (pPage == NULL) + return FALSE; + + CXFA_WidgetAcc* pWidgetAcc = + m_pXFADocView->GetWidgetHandler()->GetDataAcc(hWidget); + + int nRotate = pWidgetAcc->GetRotate(); + + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return FALSE; + FS_RECTF pageViewRect; + pEnv->FFI_GetPageViewRect(pPage, pageViewRect); + + CPDF_Rect rcAnchor; + + rcAnchor.left = rtAnchor.left; + rcAnchor.top = rtAnchor.bottom(); + rcAnchor.right = rtAnchor.right(); + rcAnchor.bottom = rtAnchor.top; + + int t1, t2, t; + FX_DWORD dwPos; + FX_FLOAT fPoupHeight; + switch (nRotate) { + case 90: { + t1 = (int)(pageViewRect.right - rcAnchor.right); + t2 = (int)(rcAnchor.left - pageViewRect.left); + if (rcAnchor.bottom < pageViewRect.bottom) { + rtPopup.left += rcAnchor.bottom - pageViewRect.bottom; + } + + break; + } + + case 180: { + t2 = (int)(pageViewRect.top - rcAnchor.top); + t1 = (int)(rcAnchor.bottom - pageViewRect.bottom); + if (rcAnchor.left < pageViewRect.left) { + rtPopup.left += rcAnchor.left - pageViewRect.left; + } + break; + } + case 270: { + t1 = (int)(rcAnchor.left - pageViewRect.left); + t2 = (int)(pageViewRect.right - rcAnchor.right); + + if (rcAnchor.top > pageViewRect.top) { + rtPopup.left -= rcAnchor.top - pageViewRect.top; + } + break; + } + case 0: + default: { + t1 = (int)(pageViewRect.top - rcAnchor.top); + t2 = (int)(rcAnchor.bottom - pageViewRect.bottom); + if (rcAnchor.right > pageViewRect.right) { + rtPopup.left -= rcAnchor.right - pageViewRect.right; + } + break; + } + } + + if (t1 <= 0 && t2 <= 0) { + return FALSE; + } + if (t1 <= 0) { + t = t2; + dwPos = 1; + } else if (t2 <= 0) { + t = t1; + dwPos = 0; + } else if (t1 > t2) { + t = t1; + dwPos = 0; + } else { + t = t2; + dwPos = 1; + } + if (t < fMinPopup) { + fPoupHeight = fMinPopup; + } else if (t > fMaxPopup) { + fPoupHeight = fMaxPopup; + } else { + fPoupHeight = (FX_FLOAT)t; + } + + switch (nRotate) { + case 0: + case 180: { + if (dwPos == 0) { + rtPopup.top = rtAnchor.height; + rtPopup.height = fPoupHeight; + } else { + rtPopup.top = -fPoupHeight; + rtPopup.height = fPoupHeight; + } + break; + } + case 90: + case 270: { + if (dwPos == 0) { + rtPopup.top = rtAnchor.width; + rtPopup.height = fPoupHeight; + } else { + rtPopup.top = -fPoupHeight; + rtPopup.height = fPoupHeight; + } + break; + } + default: + break; + } + + return TRUE; } -FX_BOOL CPDFXFA_Document::PopupMenu(IXFA_Widget* hWidget, CFX_PointF ptPopup, const CFX_RectF* pRectExclude) -{ - if (NULL == hWidget) - { - return FALSE; - } - IXFA_PageView* pXFAPageView = m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget); - if (pXFAPageView == NULL) - return FALSE; - CPDFXFA_Page* pPage = GetPage(pXFAPageView); - - if (pPage == NULL) - return FALSE; - - int menuFlag = 0; - - IXFA_MenuHandler* pXFAMenuHander = m_pApp->GetXFAApp()->GetMenuHandler(); - if (pXFAMenuHander->CanUndo(hWidget)) - menuFlag |= FXFA_MEMU_UNDO; - if (pXFAMenuHander->CanRedo(hWidget)) - menuFlag |= FXFA_MEMU_REDO; - if (pXFAMenuHander->CanPaste(hWidget)) - menuFlag |= FXFA_MEMU_PASTE; - if (pXFAMenuHander->CanCopy(hWidget)) - menuFlag |= FXFA_MEMU_COPY; - if (pXFAMenuHander->CanCut(hWidget)) - menuFlag |= FXFA_MEMU_CUT; - if (pXFAMenuHander->CanSelectAll(hWidget)) - menuFlag |= FXFA_MEMU_SELECTALL; - - - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return FALSE; - - return pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, NULL); +FX_BOOL CPDFXFA_Document::PopupMenu(IXFA_Widget* hWidget, + CFX_PointF ptPopup, + const CFX_RectF* pRectExclude) { + if (NULL == hWidget) { + return FALSE; + } + IXFA_PageView* pXFAPageView = + m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget); + if (pXFAPageView == NULL) + return FALSE; + CPDFXFA_Page* pPage = GetPage(pXFAPageView); + + if (pPage == NULL) + return FALSE; + + int menuFlag = 0; + + IXFA_MenuHandler* pXFAMenuHander = m_pApp->GetXFAApp()->GetMenuHandler(); + if (pXFAMenuHander->CanUndo(hWidget)) + menuFlag |= FXFA_MEMU_UNDO; + if (pXFAMenuHander->CanRedo(hWidget)) + menuFlag |= FXFA_MEMU_REDO; + if (pXFAMenuHander->CanPaste(hWidget)) + menuFlag |= FXFA_MEMU_PASTE; + if (pXFAMenuHander->CanCopy(hWidget)) + menuFlag |= FXFA_MEMU_COPY; + if (pXFAMenuHander->CanCut(hWidget)) + menuFlag |= FXFA_MEMU_CUT; + if (pXFAMenuHander->CanSelectAll(hWidget)) + menuFlag |= FXFA_MEMU_SELECTALL; + + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return FALSE; + + return pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, NULL); } -void CPDFXFA_Document::PageViewEvent(IXFA_PageView* pPageView, FX_DWORD dwFlags) -{ - if (m_iDocType != DOCTYPE_DYNIMIC_XFA) - return; - - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return; - - CPDFXFA_Page* pPage = GetPage(pPageView); - if (pPage == NULL) - return; - - if (dwFlags == FXFA_PAGEVIEWEVENT_POSTADDED) - { - //pEnv->FFI_PageEvent(pPage, FXFA_PAGEVIEWEVENT_POSTADDED); - } - else if (dwFlags == FXFA_PAGEVIEWEVENT_POSTREMOVED) - { - //pEnv->FFI_PageEvent(pPage, FXFA_PAGEVIEWEVENT_POSTREMOVED); - //RemovePage(pPage); - //delete pPage; - } +void CPDFXFA_Document::PageViewEvent(IXFA_PageView* pPageView, + FX_DWORD dwFlags) { + if (m_iDocType != DOCTYPE_DYNIMIC_XFA) + return; + + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return; + + CPDFXFA_Page* pPage = GetPage(pPageView); + if (pPage == NULL) + return; + + if (dwFlags == FXFA_PAGEVIEWEVENT_POSTADDED) { + // pEnv->FFI_PageEvent(pPage, FXFA_PAGEVIEWEVENT_POSTADDED); + } else if (dwFlags == FXFA_PAGEVIEWEVENT_POSTREMOVED) { + // pEnv->FFI_PageEvent(pPage, FXFA_PAGEVIEWEVENT_POSTREMOVED); + // RemovePage(pPage); + // delete pPage; + } } -void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget, CXFA_WidgetAcc* pWidgetData, FX_DWORD dwEvent, void* pParam, void* pAdditional) -{ - if (m_iDocType != DOCTYPE_DYNIMIC_XFA || NULL == hWidget) - return; - - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return; - - if (NULL == hWidget) return; - - IXFA_PageView* pPageView = m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget); - - if (pPageView == NULL) - return; - CPDFXFA_Page* pXFAPage = GetPage(pPageView); - if (pXFAPage == NULL) - return; - - CPDFSDK_PageView* pSdkPageView = m_pSDKDoc->GetPageView(pXFAPage); - - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - - - if (dwEvent == XFA_WIDGETEVENT_PostAdded) - { -// CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(hWidget, pSdkPageView); -// pAnnotHandlerMgr->Annot_OnLoad(pAnnot); - - //pEnv->FFI_WidgetEvent(hWidget, XFA_WIDGETEVENT_PostAdded); -// IXFA_PageView* pOldPageView = (IXFA_PageView*)pAdditional; -// if (pOldPageView) -// { -// CPDFXFA_Page* pDestPage = m_pSDKDoc->GetPageView((IXFA_PageView*)pOldPageView); -// ASSERT(pDestPage); -// CPDFSDK_Annot* pAnnot = pDestPage->GetAnnotByXFAWidget(hWidget); -// if (pAnnot) -// { -// if (m_pSDKDoc->GetFocusAnnot() == pAnnot) -// { -// m_pSDKDoc->SetFocusAnnot(NULL); -// } -// pDestPage->DeleteAnnot(pAnnot); -// } -// } - pSdkPageView->AddAnnot(hWidget); - - } - else if (dwEvent == XFA_WIDGETEVENT_PreRemoved) - { - CPDFSDK_Annot* pAnnot = pSdkPageView->GetAnnotByXFAWidget(hWidget); - if (pAnnot) { - pSdkPageView->DeleteAnnot(pAnnot); - //pEnv->FFI_WidgetEvent(hWidget, XFA_WIDGETEVENT_PreRemoved); - } - } +void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget, + CXFA_WidgetAcc* pWidgetData, + FX_DWORD dwEvent, + void* pParam, + void* pAdditional) { + if (m_iDocType != DOCTYPE_DYNIMIC_XFA || NULL == hWidget) + return; + + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return; + + if (NULL == hWidget) + return; + + IXFA_PageView* pPageView = + m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget); + + if (pPageView == NULL) + return; + CPDFXFA_Page* pXFAPage = GetPage(pPageView); + if (pXFAPage == NULL) + return; + + CPDFSDK_PageView* pSdkPageView = m_pSDKDoc->GetPageView(pXFAPage); + + CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); + + if (dwEvent == XFA_WIDGETEVENT_PostAdded) { + // CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(hWidget, + // pSdkPageView); + // pAnnotHandlerMgr->Annot_OnLoad(pAnnot); + + // pEnv->FFI_WidgetEvent(hWidget, XFA_WIDGETEVENT_PostAdded); + // IXFA_PageView* pOldPageView = (IXFA_PageView*)pAdditional; + // if (pOldPageView) + // { + // CPDFXFA_Page* pDestPage = + // m_pSDKDoc->GetPageView((IXFA_PageView*)pOldPageView); + // ASSERT(pDestPage); + // CPDFSDK_Annot* pAnnot = + // pDestPage->GetAnnotByXFAWidget(hWidget); + // if (pAnnot) + // { + // if (m_pSDKDoc->GetFocusAnnot() == pAnnot) + // { + // m_pSDKDoc->SetFocusAnnot(NULL); + // } + // pDestPage->DeleteAnnot(pAnnot); + // } + // } + pSdkPageView->AddAnnot(hWidget); + + } else if (dwEvent == XFA_WIDGETEVENT_PreRemoved) { + CPDFSDK_Annot* pAnnot = pSdkPageView->GetAnnotByXFAWidget(hWidget); + if (pAnnot) { + pSdkPageView->DeleteAnnot(pAnnot); + // pEnv->FFI_WidgetEvent(hWidget, XFA_WIDGETEVENT_PreRemoved); + } + } } -int32_t CPDFXFA_Document::CountPages(IXFA_Doc* hDoc) -{ - if (hDoc == m_pXFADoc && m_pSDKDoc) - { - return GetPageCount(); - } - return 0; +int32_t CPDFXFA_Document::CountPages(IXFA_Doc* hDoc) { + if (hDoc == m_pXFADoc && m_pSDKDoc) { + return GetPageCount(); + } + return 0; } -int32_t CPDFXFA_Document::GetCurrentPage(IXFA_Doc* hDoc) -{ - if (hDoc != m_pXFADoc || !m_pSDKDoc) - return -1; - if (m_iDocType != DOCTYPE_DYNIMIC_XFA) - return -1; - - - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return -1; - - return pEnv->FFI_GetCurrentPageIndex(this); -} -void CPDFXFA_Document::SetCurrentPage(IXFA_Doc* hDoc, int32_t iCurPage) -{ - if (hDoc != m_pXFADoc || !m_pSDKDoc) - return; - if (m_iDocType != DOCTYPE_DYNIMIC_XFA) - return; - - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return; - - pEnv->FFI_SetCurrentPage(this, iCurPage); +int32_t CPDFXFA_Document::GetCurrentPage(IXFA_Doc* hDoc) { + if (hDoc != m_pXFADoc || !m_pSDKDoc) + return -1; + if (m_iDocType != DOCTYPE_DYNIMIC_XFA) + return -1; + + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return -1; + + return pEnv->FFI_GetCurrentPageIndex(this); } -FX_BOOL CPDFXFA_Document::IsCalculationsEnabled(IXFA_Doc* hDoc) -{ - if (hDoc != m_pXFADoc || !m_pSDKDoc) - return FALSE; - if (m_pSDKDoc->GetInterForm()) - return m_pSDKDoc->GetInterForm()->IsXfaCalculateEnabled(); +void CPDFXFA_Document::SetCurrentPage(IXFA_Doc* hDoc, int32_t iCurPage) { + if (hDoc != m_pXFADoc || !m_pSDKDoc) + return; + if (m_iDocType != DOCTYPE_DYNIMIC_XFA) + return; - return FALSE; + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return; + pEnv->FFI_SetCurrentPage(this, iCurPage); } -void CPDFXFA_Document::SetCalculationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled) -{ - if (hDoc != m_pXFADoc || !m_pSDKDoc) - return; - if (m_pSDKDoc->GetInterForm()) - m_pSDKDoc->GetInterForm()->XfaEnableCalculate(bEnabled); +FX_BOOL CPDFXFA_Document::IsCalculationsEnabled(IXFA_Doc* hDoc) { + if (hDoc != m_pXFADoc || !m_pSDKDoc) + return FALSE; + if (m_pSDKDoc->GetInterForm()) + return m_pSDKDoc->GetInterForm()->IsXfaCalculateEnabled(); + + return FALSE; +} +void CPDFXFA_Document::SetCalculationsEnabled(IXFA_Doc* hDoc, + FX_BOOL bEnabled) { + if (hDoc != m_pXFADoc || !m_pSDKDoc) + return; + if (m_pSDKDoc->GetInterForm()) + m_pSDKDoc->GetInterForm()->XfaEnableCalculate(bEnabled); } -void CPDFXFA_Document::GetTitle(IXFA_Doc* hDoc, CFX_WideString &wsTitle) -{ - if (hDoc != m_pXFADoc) - return; - if (m_pPDFDoc == NULL) - return; - CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo(); - - if (pInfoDict == NULL) - return; - - CFX_ByteString csTitle = pInfoDict->GetString("Title"); - wsTitle = wsTitle.FromLocal(csTitle.GetBuffer(csTitle.GetLength())); - csTitle.ReleaseBuffer(csTitle.GetLength()); +void CPDFXFA_Document::GetTitle(IXFA_Doc* hDoc, CFX_WideString& wsTitle) { + if (hDoc != m_pXFADoc) + return; + if (m_pPDFDoc == NULL) + return; + CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo(); + + if (pInfoDict == NULL) + return; + + CFX_ByteString csTitle = pInfoDict->GetString("Title"); + wsTitle = wsTitle.FromLocal(csTitle.GetBuffer(csTitle.GetLength())); + csTitle.ReleaseBuffer(csTitle.GetLength()); } -void CPDFXFA_Document::SetTitle(IXFA_Doc* hDoc, const CFX_WideStringC& wsTitle) -{ - if (hDoc != m_pXFADoc) - return; - if (m_pPDFDoc == NULL) - return; - CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo(); - - if (pInfoDict == NULL) - return; - pInfoDict->SetAt("Title", FX_NEW CPDF_String(wsTitle)); +void CPDFXFA_Document::SetTitle(IXFA_Doc* hDoc, + const CFX_WideStringC& wsTitle) { + if (hDoc != m_pXFADoc) + return; + if (m_pPDFDoc == NULL) + return; + CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo(); + + if (pInfoDict == NULL) + return; + pInfoDict->SetAt("Title", FX_NEW CPDF_String(wsTitle)); } -void CPDFXFA_Document::ExportData(IXFA_Doc* hDoc, const CFX_WideStringC& wsFilePath, FX_BOOL bXDP) -{ - if (hDoc != m_pXFADoc) - return; - if (m_iDocType != DOCTYPE_DYNIMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) - return; - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return; - int fileType = bXDP?FXFA_SAVEAS_XDP:FXFA_SAVEAS_XML; - CFX_ByteString bs = CFX_WideString(wsFilePath).UTF16LE_Encode(); - - if (wsFilePath.IsEmpty()) { - if (!pEnv->GetFormFillInfo() || pEnv->GetFormFillInfo()->m_pJsPlatform == NULL) - return; - CFX_WideString filepath = pEnv->JS_fieldBrowse(); - bs = filepath.UTF16LE_Encode(); - } - int len = bs.GetLength()/sizeof(unsigned short); - FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile(bXDP?FXFA_SAVEAS_XDP:FXFA_SAVEAS_XML, (FPDF_WIDESTRING)bs.GetBuffer(len*sizeof(unsigned short)), "wb"); - bs.ReleaseBuffer(len*sizeof(unsigned short)); - - if (pFileHandler == NULL) - return; - - CFPDF_FileStream fileWrite(pFileHandler); - - IXFA_DocHandler *pXFADocHander = m_pApp->GetXFAApp()->GetDocHandler(); - CFX_ByteString content; - if (fileType == FXFA_SAVEAS_XML) - { - content = "\r\n"; - fileWrite.WriteBlock((const FX_CHAR*)content, fileWrite.GetSize(), content.GetLength()); - CFX_WideStringC data(L"data"); - if( pXFADocHander->SavePackage(m_pXFADocView->GetDoc(),data, &fileWrite)) - { - NULL; - } - } - /*else if (fileType == FXFA_FILE_STATIC_XDP) - { - content = "\r\n"; - fileWrite.WriteBlock((const FX_CHAR*)content, fileWrite.GetSize(), content.GetLength()); - CFX_WideStringC data(L"data"); - if( pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), data, &fileWrite)) - { - NULL; - } - CFX_WideString wPath = pEnv->FFI_GetFilePath(pFileHandler); +void CPDFXFA_Document::ExportData(IXFA_Doc* hDoc, + const CFX_WideStringC& wsFilePath, + FX_BOOL bXDP) { + if (hDoc != m_pXFADoc) + return; + if (m_iDocType != DOCTYPE_DYNIMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) + return; + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return; + int fileType = bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML; + CFX_ByteString bs = CFX_WideString(wsFilePath).UTF16LE_Encode(); + + if (wsFilePath.IsEmpty()) { + if (!pEnv->GetFormFillInfo() || + pEnv->GetFormFillInfo()->m_pJsPlatform == NULL) + return; + CFX_WideString filepath = pEnv->JS_fieldBrowse(); + bs = filepath.UTF16LE_Encode(); + } + int len = bs.GetLength() / sizeof(unsigned short); + FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile( + bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML, + (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), "wb"); + bs.ReleaseBuffer(len * sizeof(unsigned short)); + + if (pFileHandler == NULL) + return; + + CFPDF_FileStream fileWrite(pFileHandler); + + IXFA_DocHandler* pXFADocHander = m_pApp->GetXFAApp()->GetDocHandler(); + CFX_ByteString content; + if (fileType == FXFA_SAVEAS_XML) { + content = "\r\n"; + fileWrite.WriteBlock((const FX_CHAR*)content, fileWrite.GetSize(), + content.GetLength()); + CFX_WideStringC data(L"data"); + if (pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), data, &fileWrite)) { + NULL; + } + } + /*else if (fileType == FXFA_FILE_STATIC_XDP) + { + content = "\r\n"; + fileWrite.WriteBlock((const FX_CHAR*)content, fileWrite.GetSize(), +content.GetLength()); + CFX_WideStringC data(L"data"); + if( pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), data, +&fileWrite)) + { + NULL; + } + CFX_WideString wPath = pEnv->FFI_GetFilePath(pFileHandler); // CFX_WideString wPath; // wPath.FromUTF16LE(filePath); - CFX_ByteString bPath = wPath.UTF8Encode(); - CFX_ByteString szFormat = "\n"; - content.Format(szFormat,(char*)(const FX_CHAR*)bPath); - fileWrite.WriteBlock((const FX_CHAR*)content,fileWrite.GetSize(), content.GetLength()); - } - */ - else if (fileType == FXFA_SAVEAS_XDP) - { - if (m_pPDFDoc == NULL) - return; - CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); - if (pRoot == NULL) - return; - CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); - if (NULL == pAcroForm) - return; - CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); - if (pXFA == NULL) - return; - if (pXFA->GetType() != PDFOBJ_ARRAY) - return; - CPDF_Array* pArray = pXFA->GetArray(); - if (NULL == pArray) - return; - int size = pArray->GetCount(); - int iFormIndex = -1; - int iDataSetsIndex = -1; - for (int i=1; iGetElement(i); - CPDF_Object* pPrePDFObj = pArray->GetElement(i-1); - if(pPrePDFObj->GetType() != PDFOBJ_STRING) - continue; - if (pPDFObj->GetType() != PDFOBJ_REFERENCE) - continue; - CPDF_Object* pDirectObj = pPDFObj->GetDirect(); - if(pDirectObj->GetType() != PDFOBJ_STREAM) - continue; - if (pPrePDFObj->GetString()=="form") - { - CFX_WideStringC form(L"form"); - pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), form, &fileWrite); - } - else if (pPrePDFObj->GetString()=="datasets") - { - CFX_WideStringC datasets(L"datasets"); - pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), datasets, &fileWrite); - } - else - { - if (i == size-1) - { - //CFX_WideString wPath = pEnv->FFI_GetFilePath(pFileHandler); - CFX_WideString wPath = CFX_WideString::FromUTF16LE((unsigned short*)(const FX_CHAR*)bs, bs.GetLength()/sizeof(unsigned short)); - CFX_ByteString bPath = wPath.UTF8Encode(); - CFX_ByteString szFormat = "\n"; - content.Format(szFormat,(char*)(const FX_CHAR*)bPath); - fileWrite.WriteBlock((const FX_CHAR*)content,fileWrite.GetSize(), content.GetLength()); - } - - CPDF_Stream* pStream = (CPDF_Stream*)pDirectObj; - CPDF_StreamAcc* pAcc = FX_NEW CPDF_StreamAcc; - pAcc->LoadAllData(pStream); - fileWrite.WriteBlock(pAcc->GetData(), fileWrite.GetSize(), pAcc->GetSize()); - delete pAcc; - } - } - } - FX_BOOL bError= fileWrite.Flush(); + CFX_ByteString bPath = wPath.UTF8Encode(); + CFX_ByteString szFormat = "\n"; + content.Format(szFormat,(char*)(const FX_CHAR*)bPath); + fileWrite.WriteBlock((const FX_CHAR*)content,fileWrite.GetSize(), +content.GetLength()); + } + */ + else if (fileType == FXFA_SAVEAS_XDP) { + if (m_pPDFDoc == NULL) + return; + CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); + if (pRoot == NULL) + return; + CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); + if (NULL == pAcroForm) + return; + CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); + if (pXFA == NULL) + return; + if (pXFA->GetType() != PDFOBJ_ARRAY) + return; + CPDF_Array* pArray = pXFA->GetArray(); + if (NULL == pArray) + return; + int size = pArray->GetCount(); + int iFormIndex = -1; + int iDataSetsIndex = -1; + for (int i = 1; i < size; i += 2) { + CPDF_Object* pPDFObj = pArray->GetElement(i); + CPDF_Object* pPrePDFObj = pArray->GetElement(i - 1); + if (pPrePDFObj->GetType() != PDFOBJ_STRING) + continue; + if (pPDFObj->GetType() != PDFOBJ_REFERENCE) + continue; + CPDF_Object* pDirectObj = pPDFObj->GetDirect(); + if (pDirectObj->GetType() != PDFOBJ_STREAM) + continue; + if (pPrePDFObj->GetString() == "form") { + CFX_WideStringC form(L"form"); + pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), form, &fileWrite); + } else if (pPrePDFObj->GetString() == "datasets") { + CFX_WideStringC datasets(L"datasets"); + pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), datasets, + &fileWrite); + } else { + if (i == size - 1) { + // CFX_WideString wPath = pEnv->FFI_GetFilePath(pFileHandler); + CFX_WideString wPath = CFX_WideString::FromUTF16LE( + (unsigned short*)(const FX_CHAR*)bs, + bs.GetLength() / sizeof(unsigned short)); + CFX_ByteString bPath = wPath.UTF8Encode(); + CFX_ByteString szFormat = + "\n"; + content.Format(szFormat, (char*)(const FX_CHAR*)bPath); + fileWrite.WriteBlock((const FX_CHAR*)content, fileWrite.GetSize(), + content.GetLength()); + } + + CPDF_Stream* pStream = (CPDF_Stream*)pDirectObj; + CPDF_StreamAcc* pAcc = FX_NEW CPDF_StreamAcc; + pAcc->LoadAllData(pStream); + fileWrite.WriteBlock(pAcc->GetData(), fileWrite.GetSize(), + pAcc->GetSize()); + delete pAcc; + } + } + } + FX_BOOL bError = fileWrite.Flush(); } -void CPDFXFA_Document::ImportData(IXFA_Doc* hDoc, const CFX_WideStringC& wsFilePath) -{ - //TODO... +void CPDFXFA_Document::ImportData(IXFA_Doc* hDoc, + const CFX_WideStringC& wsFilePath) { + // TODO... } -void CPDFXFA_Document::GotoURL(IXFA_Doc* hDoc, const CFX_WideStringC& bsURL, FX_BOOL bAppend) -{ - if (hDoc != m_pXFADoc) - return; - - if (m_iDocType != DOCTYPE_DYNIMIC_XFA) - return; - - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return; - - CFX_WideStringC str(bsURL.GetPtr()); - - pEnv->FFI_GotoURL(this, str, bAppend); +void CPDFXFA_Document::GotoURL(IXFA_Doc* hDoc, + const CFX_WideStringC& bsURL, + FX_BOOL bAppend) { + if (hDoc != m_pXFADoc) + return; + + if (m_iDocType != DOCTYPE_DYNIMIC_XFA) + return; + + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return; + CFX_WideStringC str(bsURL.GetPtr()); + + pEnv->FFI_GotoURL(this, str, bAppend); } -FX_BOOL CPDFXFA_Document::IsValidationsEnabled(IXFA_Doc* hDoc) -{ - if (hDoc != m_pXFADoc || !m_pSDKDoc) - return FALSE; - if (m_pSDKDoc->GetInterForm()) - return m_pSDKDoc->GetInterForm()->IsXfaValidationsEnabled(); +FX_BOOL CPDFXFA_Document::IsValidationsEnabled(IXFA_Doc* hDoc) { + if (hDoc != m_pXFADoc || !m_pSDKDoc) + return FALSE; + if (m_pSDKDoc->GetInterForm()) + return m_pSDKDoc->GetInterForm()->IsXfaValidationsEnabled(); - return TRUE; + return TRUE; } -void CPDFXFA_Document::SetValidationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled) -{ - if (hDoc != m_pXFADoc || !m_pSDKDoc) - return; - if (m_pSDKDoc->GetInterForm()) - m_pSDKDoc->GetInterForm()->XfaSetValidationsEnabled(bEnabled); +void CPDFXFA_Document::SetValidationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled) { + if (hDoc != m_pXFADoc || !m_pSDKDoc) + return; + if (m_pSDKDoc->GetInterForm()) + m_pSDKDoc->GetInterForm()->XfaSetValidationsEnabled(bEnabled); } -void CPDFXFA_Document::SetFocusWidget(IXFA_Doc* hDoc, IXFA_Widget* hWidget) -{ - if (hDoc != m_pXFADoc) - return; - - if (NULL == hWidget) { - m_pSDKDoc->SetFocusAnnot(NULL); - return; - } - - int pageViewCount = m_pSDKDoc->GetPageViewCount(); - for (int i = 0; i < pageViewCount; i++) - { - CPDFSDK_PageView* pPageView = m_pSDKDoc->GetPageView(i); - if (pPageView == NULL) - continue; - CPDFSDK_Annot* pAnnot = pPageView->GetAnnotByXFAWidget(hWidget); - if (pAnnot) { - m_pSDKDoc->SetFocusAnnot(pAnnot); - break; - } - } +void CPDFXFA_Document::SetFocusWidget(IXFA_Doc* hDoc, IXFA_Widget* hWidget) { + if (hDoc != m_pXFADoc) + return; + + if (NULL == hWidget) { + m_pSDKDoc->SetFocusAnnot(NULL); + return; + } + + int pageViewCount = m_pSDKDoc->GetPageViewCount(); + for (int i = 0; i < pageViewCount; i++) { + CPDFSDK_PageView* pPageView = m_pSDKDoc->GetPageView(i); + if (pPageView == NULL) + continue; + CPDFSDK_Annot* pAnnot = pPageView->GetAnnotByXFAWidget(hWidget); + if (pAnnot) { + m_pSDKDoc->SetFocusAnnot(pAnnot); + break; + } + } } -void CPDFXFA_Document::Print(IXFA_Doc* hDoc, int32_t nStartPage, int32_t nEndPage, FX_DWORD dwOptions) -{ - if (hDoc != m_pXFADoc) - return; - - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return; - - if (!pEnv->GetFormFillInfo() || pEnv->GetFormFillInfo()->m_pJsPlatform == NULL) - return; - if (pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print == NULL) - return; - pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print(pEnv->GetFormFillInfo()->m_pJsPlatform,dwOptions&XFA_PRINTOPT_ShowDialog, - nStartPage,nEndPage,dwOptions&XFA_PRINTOPT_CanCancel,dwOptions&XFA_PRINTOPT_ShrinkPage,dwOptions&XFA_PRINTOPT_AsImage, - dwOptions&XFA_PRINTOPT_ReverseOrder,dwOptions&XFA_PRINTOPT_PrintAnnot); +void CPDFXFA_Document::Print(IXFA_Doc* hDoc, + int32_t nStartPage, + int32_t nEndPage, + FX_DWORD dwOptions) { + if (hDoc != m_pXFADoc) + return; + + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return; + + if (!pEnv->GetFormFillInfo() || + pEnv->GetFormFillInfo()->m_pJsPlatform == NULL) + return; + if (pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print == NULL) + return; + pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print( + pEnv->GetFormFillInfo()->m_pJsPlatform, + dwOptions & XFA_PRINTOPT_ShowDialog, nStartPage, nEndPage, + dwOptions & XFA_PRINTOPT_CanCancel, dwOptions & XFA_PRINTOPT_ShrinkPage, + dwOptions & XFA_PRINTOPT_AsImage, dwOptions & XFA_PRINTOPT_ReverseOrder, + dwOptions & XFA_PRINTOPT_PrintAnnot); } -void CPDFXFA_Document::GetURL(IXFA_Doc* hDoc, CFX_WideString &wsDocURL) -{ - if (hDoc != m_pXFADoc) - return; +void CPDFXFA_Document::GetURL(IXFA_Doc* hDoc, CFX_WideString& wsDocURL) { + if (hDoc != m_pXFADoc) + return; - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return; + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return; - pEnv->FFI_GetURL(this, wsDocURL); + pEnv->FFI_GetURL(this, wsDocURL); } -FX_ARGB CPDFXFA_Document::GetHighlightColor(IXFA_Doc* hDoc) -{ - if (hDoc != m_pXFADoc) - return 0; - if (m_pSDKDoc) - { - if(CPDFSDK_InterForm* pInterForm = m_pSDKDoc->GetInterForm()) - { - FX_COLORREF color = pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA); - uint8_t alpha = pInterForm->GetHighlightAlpha(); - FX_ARGB argb = ArgbEncode((int)alpha, color); - return argb; - } - } - return 0; +FX_ARGB CPDFXFA_Document::GetHighlightColor(IXFA_Doc* hDoc) { + if (hDoc != m_pXFADoc) + return 0; + if (m_pSDKDoc) { + if (CPDFSDK_InterForm* pInterForm = m_pSDKDoc->GetInterForm()) { + FX_COLORREF color = pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA); + uint8_t alpha = pInterForm->GetHighlightAlpha(); + FX_ARGB argb = ArgbEncode((int)alpha, color); + return argb; + } + } + return 0; } -void CPDFXFA_Document::AddDoRecord(IXFA_Widget* hWidget) -{ - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return; - return; - //pEnv->FFI_AddDoRecord(this, hWidget); +void CPDFXFA_Document::AddDoRecord(IXFA_Widget* hWidget) { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return; + return; + // pEnv->FFI_AddDoRecord(this, hWidget); } -FX_BOOL CPDFXFA_Document::_NotifySubmit(FX_BOOL bPrevOrPost) -{ - if (bPrevOrPost) - return _OnBeforeNotifySumbit(); - else - _OnAfterNotifySumbit(); - return TRUE; +FX_BOOL CPDFXFA_Document::_NotifySubmit(FX_BOOL bPrevOrPost) { + if (bPrevOrPost) + return _OnBeforeNotifySumbit(); + else + _OnAfterNotifySumbit(); + return TRUE; } -FX_BOOL CPDFXFA_Document::_OnBeforeNotifySumbit() -{ - if (m_iDocType != DOCTYPE_DYNIMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) - return TRUE; - if (m_pXFADocView == NULL) - return TRUE; - IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); - if (pWidgetHandler == NULL) - return TRUE; - IXFA_WidgetAccIterator* pWidgetAccIterator = m_pXFADocView->CreateWidgetAccIterator(); - if (pWidgetAccIterator) - { - CXFA_EventParam Param; - Param.m_eType = XFA_EVENT_PreSubmit; - CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); - while (pWidgetAcc) - { - pWidgetHandler->ProcessEvent(pWidgetAcc, &Param); - pWidgetAcc = pWidgetAccIterator->MoveToNext(); - } - pWidgetAccIterator->Release(); - } - pWidgetAccIterator = m_pXFADocView->CreateWidgetAccIterator(); - if (pWidgetAccIterator) - { - CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); - pWidgetAcc = pWidgetAccIterator->MoveToNext(); - while (pWidgetAcc) - { - int fRet = pWidgetAcc->ProcessValidate(-1); - if (fRet == XFA_EVENTERROR_Error) - { - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return FALSE; - CFX_WideString ws; - ws.FromLocal(IDS_XFA_Validate_Input); - CFX_ByteString bs = ws.UTF16LE_Encode(); - int len = bs.GetLength()/sizeof(unsigned short); - pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len*sizeof(unsigned short)), (FPDF_WIDESTRING)L"", 0, 1); - bs.ReleaseBuffer(len*sizeof(unsigned short)); - pWidgetAccIterator->Release(); - return FALSE; - } - pWidgetAcc = pWidgetAccIterator->MoveToNext(); - } - pWidgetAccIterator->Release(); - m_pXFADocView->UpdateDocView(); - } - - return TRUE; - +FX_BOOL CPDFXFA_Document::_OnBeforeNotifySumbit() { + if (m_iDocType != DOCTYPE_DYNIMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) + return TRUE; + if (m_pXFADocView == NULL) + return TRUE; + IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); + if (pWidgetHandler == NULL) + return TRUE; + IXFA_WidgetAccIterator* pWidgetAccIterator = + m_pXFADocView->CreateWidgetAccIterator(); + if (pWidgetAccIterator) { + CXFA_EventParam Param; + Param.m_eType = XFA_EVENT_PreSubmit; + CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); + while (pWidgetAcc) { + pWidgetHandler->ProcessEvent(pWidgetAcc, &Param); + pWidgetAcc = pWidgetAccIterator->MoveToNext(); + } + pWidgetAccIterator->Release(); + } + pWidgetAccIterator = m_pXFADocView->CreateWidgetAccIterator(); + if (pWidgetAccIterator) { + CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); + pWidgetAcc = pWidgetAccIterator->MoveToNext(); + while (pWidgetAcc) { + int fRet = pWidgetAcc->ProcessValidate(-1); + if (fRet == XFA_EVENTERROR_Error) { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return FALSE; + CFX_WideString ws; + ws.FromLocal(IDS_XFA_Validate_Input); + CFX_ByteString bs = ws.UTF16LE_Encode(); + int len = bs.GetLength() / sizeof(unsigned short); + pEnv->FFI_Alert( + (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), + (FPDF_WIDESTRING)L"", 0, 1); + bs.ReleaseBuffer(len * sizeof(unsigned short)); + pWidgetAccIterator->Release(); + return FALSE; + } + pWidgetAcc = pWidgetAccIterator->MoveToNext(); + } + pWidgetAccIterator->Release(); + m_pXFADocView->UpdateDocView(); + } + + return TRUE; } -void CPDFXFA_Document::_OnAfterNotifySumbit() -{ - if (m_iDocType != DOCTYPE_DYNIMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) - return; - if (m_pXFADocView == NULL) - return; - IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); - if (pWidgetHandler == NULL) - return; - IXFA_WidgetAccIterator* pWidgetAccIterator = m_pXFADocView->CreateWidgetAccIterator(); - if (pWidgetAccIterator == NULL) - return; - CXFA_EventParam Param; - Param.m_eType = XFA_EVENT_PostSubmit; - - CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); - while (pWidgetAcc) - { - pWidgetHandler->ProcessEvent(pWidgetAcc, &Param); - pWidgetAcc = pWidgetAccIterator->MoveToNext(); - } - pWidgetAccIterator->Release(); - m_pXFADocView->UpdateDocView(); +void CPDFXFA_Document::_OnAfterNotifySumbit() { + if (m_iDocType != DOCTYPE_DYNIMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) + return; + if (m_pXFADocView == NULL) + return; + IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); + if (pWidgetHandler == NULL) + return; + IXFA_WidgetAccIterator* pWidgetAccIterator = + m_pXFADocView->CreateWidgetAccIterator(); + if (pWidgetAccIterator == NULL) + return; + CXFA_EventParam Param; + Param.m_eType = XFA_EVENT_PostSubmit; + + CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); + while (pWidgetAcc) { + pWidgetHandler->ProcessEvent(pWidgetAcc, &Param); + pWidgetAcc = pWidgetAccIterator->MoveToNext(); + } + pWidgetAccIterator->Release(); + m_pXFADocView->UpdateDocView(); } -FX_BOOL CPDFXFA_Document::SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit) -{ - if (!_NotifySubmit(TRUE)) - return FALSE; - if (NULL == m_pXFADocView) - return FALSE; - m_pXFADocView->UpdateDocView(); - - FX_BOOL ret = _SubmitData(hDoc, submit); - _NotifySubmit(FALSE); - return ret; +FX_BOOL CPDFXFA_Document::SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit) { + if (!_NotifySubmit(TRUE)) + return FALSE; + if (NULL == m_pXFADocView) + return FALSE; + m_pXFADocView->UpdateDocView(); + + FX_BOOL ret = _SubmitData(hDoc, submit); + _NotifySubmit(FALSE); + return ret; } -IFX_FileRead* CPDFXFA_Document::OpenLinkedFile(IXFA_Doc* hDoc, const CFX_WideString& wsLink) -{ - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return FALSE; - CFX_ByteString bs = wsLink.UTF16LE_Encode(); - int len = bs.GetLength()/sizeof(unsigned short); - FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile(0, (FPDF_WIDESTRING)bs.GetBuffer(len*sizeof(unsigned short)), "rb"); - bs.ReleaseBuffer(len*sizeof(unsigned short)); - - if (pFileHandler == NULL) - return NULL; - CFPDF_FileStream* pFileRead = FX_NEW CFPDF_FileStream(pFileHandler); - return pFileRead; +IFX_FileRead* CPDFXFA_Document::OpenLinkedFile(IXFA_Doc* hDoc, + const CFX_WideString& wsLink) { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return FALSE; + CFX_ByteString bs = wsLink.UTF16LE_Encode(); + int len = bs.GetLength() / sizeof(unsigned short); + FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile( + 0, (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), "rb"); + bs.ReleaseBuffer(len * sizeof(unsigned short)); + + if (pFileHandler == NULL) + return NULL; + CFPDF_FileStream* pFileRead = FX_NEW CFPDF_FileStream(pFileHandler); + return pFileRead; } -FX_BOOL CPDFXFA_Document::_ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, int fileType, FPDF_DWORD encodeType, FPDF_DWORD flag) -{ - if (NULL == m_pXFADocView) - return FALSE; - IXFA_DocHandler* pDocHandler = m_pApp->GetXFAApp()->GetDocHandler(); - CFX_ByteString content; - - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return FALSE; - - CFPDF_FileStream fileStream(pFileHandler); - - if (fileType == FXFA_SAVEAS_XML) - { - CFX_WideString ws; - ws.FromLocal("data"); - CFX_ByteString content = "\r\n"; - fileStream.WriteBlock((const FX_CHAR*)content,0,content.GetLength()); - pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream); - } - else if (fileType == FXFA_SAVEAS_XDP) - { - if (flag == 0) - flag = FXFA_CONFIG|FXFA_TEMPLATE|FXFA_LOCALESET|FXFA_DATASETS|FXFA_XMPMETA|FXFA_XFDF|FXFA_FORM; - if (m_pPDFDoc == NULL) - { - fileStream.Flush(); - return FALSE; - } - CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); - if (pRoot == NULL) - { - fileStream.Flush(); - return FALSE; - } - CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); - if (NULL == pAcroForm) - { - fileStream.Flush(); - return FALSE; - } - CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); - if (pXFA == NULL) - { - fileStream.Flush(); - return FALSE; - } - if (pXFA->GetType() != PDFOBJ_ARRAY) - { - fileStream.Flush(); - return FALSE; - } - CPDF_Array* pArray = pXFA->GetArray(); - if (NULL == pArray) - { - fileStream.Flush(); - return FALSE; - } - int size = pArray->GetCount(); - int iFormIndex = -1; - int iDataSetsIndex = -1; - for (int i=1; iGetElement(i); - CPDF_Object* pPrePDFObj = pArray->GetElement(i-1); - if(pPrePDFObj->GetType() != PDFOBJ_STRING) - continue; - if (pPDFObj->GetType() != PDFOBJ_REFERENCE) - continue; - CPDF_Object* pDirectObj = pPDFObj->GetDirect(); - if (pDirectObj->GetType() != PDFOBJ_STREAM) - continue; - if (pPrePDFObj->GetString()=="config" && !(flag & FXFA_CONFIG)) - continue; - if (pPrePDFObj->GetString()=="template" && !(flag & FXFA_TEMPLATE)) - continue; - if (pPrePDFObj->GetString()=="localeSet" && !(flag & FXFA_LOCALESET)) - continue; - if (pPrePDFObj->GetString()=="datasets" && !(flag & FXFA_DATASETS)) - continue; - if (pPrePDFObj->GetString()=="xmpmeta" && !(flag & FXFA_XMPMETA)) - continue; - if (pPrePDFObj->GetString()=="xfdf" && !(flag & FXFA_XFDF)) - continue; - if (pPrePDFObj->GetString()=="form" && !(flag & FXFA_FORM)) - continue; - if (pPrePDFObj->GetString()=="form") - { - CFX_WideString ws; - ws.FromLocal("form"); - pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream); - } - else if (pPrePDFObj->GetString()=="datasets") - { - CFX_WideString ws; - ws.FromLocal("datasets"); - pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream); - } - else - { - //PDF,creator. - //TODO: - } - } - } - return TRUE; +FX_BOOL CPDFXFA_Document::_ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, + int fileType, + FPDF_DWORD encodeType, + FPDF_DWORD flag) { + if (NULL == m_pXFADocView) + return FALSE; + IXFA_DocHandler* pDocHandler = m_pApp->GetXFAApp()->GetDocHandler(); + CFX_ByteString content; + + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return FALSE; + + CFPDF_FileStream fileStream(pFileHandler); + + if (fileType == FXFA_SAVEAS_XML) { + CFX_WideString ws; + ws.FromLocal("data"); + CFX_ByteString content = "\r\n"; + fileStream.WriteBlock((const FX_CHAR*)content, 0, content.GetLength()); + pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream); + } else if (fileType == FXFA_SAVEAS_XDP) { + if (flag == 0) + flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | + FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; + if (m_pPDFDoc == NULL) { + fileStream.Flush(); + return FALSE; + } + CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); + if (pRoot == NULL) { + fileStream.Flush(); + return FALSE; + } + CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); + if (NULL == pAcroForm) { + fileStream.Flush(); + return FALSE; + } + CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); + if (pXFA == NULL) { + fileStream.Flush(); + return FALSE; + } + if (pXFA->GetType() != PDFOBJ_ARRAY) { + fileStream.Flush(); + return FALSE; + } + CPDF_Array* pArray = pXFA->GetArray(); + if (NULL == pArray) { + fileStream.Flush(); + return FALSE; + } + int size = pArray->GetCount(); + int iFormIndex = -1; + int iDataSetsIndex = -1; + for (int i = 1; i < size; i += 2) { + CPDF_Object* pPDFObj = pArray->GetElement(i); + CPDF_Object* pPrePDFObj = pArray->GetElement(i - 1); + if (pPrePDFObj->GetType() != PDFOBJ_STRING) + continue; + if (pPDFObj->GetType() != PDFOBJ_REFERENCE) + continue; + CPDF_Object* pDirectObj = pPDFObj->GetDirect(); + if (pDirectObj->GetType() != PDFOBJ_STREAM) + continue; + if (pPrePDFObj->GetString() == "config" && !(flag & FXFA_CONFIG)) + continue; + if (pPrePDFObj->GetString() == "template" && !(flag & FXFA_TEMPLATE)) + continue; + if (pPrePDFObj->GetString() == "localeSet" && !(flag & FXFA_LOCALESET)) + continue; + if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS)) + continue; + if (pPrePDFObj->GetString() == "xmpmeta" && !(flag & FXFA_XMPMETA)) + continue; + if (pPrePDFObj->GetString() == "xfdf" && !(flag & FXFA_XFDF)) + continue; + if (pPrePDFObj->GetString() == "form" && !(flag & FXFA_FORM)) + continue; + if (pPrePDFObj->GetString() == "form") { + CFX_WideString ws; + ws.FromLocal("form"); + pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream); + } else if (pPrePDFObj->GetString() == "datasets") { + CFX_WideString ws; + ws.FromLocal("datasets"); + pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream); + } else { + // PDF,creator. + // TODO: + } + } + } + return TRUE; } -void CPDFXFA_Document::_ClearChangeMark() -{ - if (m_pSDKDoc) - m_pSDKDoc->ClearChangeMark(); +void CPDFXFA_Document::_ClearChangeMark() { + if (m_pSDKDoc) + m_pSDKDoc->ClearChangeMark(); } -void CPDFXFA_Document::_ToXFAContentFlags(CFX_WideString csSrcContent, FPDF_DWORD& flag) -{ - if (csSrcContent.Find(L" config ", 0) != -1) - flag |= FXFA_CONFIG; - if (csSrcContent.Find(L" template ", 0) != -1) - flag |= FXFA_TEMPLATE; - if (csSrcContent.Find(L" localeSet ", 0) != -1) - flag |= FXFA_LOCALESET; - if (csSrcContent.Find(L" datasets ", 0) != -1) - flag |= FXFA_DATASETS; - if (csSrcContent.Find(L" xmpmeta ", 0) != -1) - flag |= FXFA_XMPMETA; - if (csSrcContent.Find(L" xfdf ", 0) != -1) - flag |= FXFA_XFDF; - if (csSrcContent.Find(L" form ", 0) != -1) - flag |= FXFA_FORM; - if (flag == 0) - flag = FXFA_CONFIG|FXFA_TEMPLATE|FXFA_LOCALESET|FXFA_DATASETS|FXFA_XMPMETA|FXFA_XFDF|FXFA_FORM; +void CPDFXFA_Document::_ToXFAContentFlags(CFX_WideString csSrcContent, + FPDF_DWORD& flag) { + if (csSrcContent.Find(L" config ", 0) != -1) + flag |= FXFA_CONFIG; + if (csSrcContent.Find(L" template ", 0) != -1) + flag |= FXFA_TEMPLATE; + if (csSrcContent.Find(L" localeSet ", 0) != -1) + flag |= FXFA_LOCALESET; + if (csSrcContent.Find(L" datasets ", 0) != -1) + flag |= FXFA_DATASETS; + if (csSrcContent.Find(L" xmpmeta ", 0) != -1) + flag |= FXFA_XMPMETA; + if (csSrcContent.Find(L" xfdf ", 0) != -1) + flag |= FXFA_XFDF; + if (csSrcContent.Find(L" form ", 0) != -1) + flag |= FXFA_FORM; + if (flag == 0) + flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | + FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; } -FX_BOOL CPDFXFA_Document::_MailToInfo(CFX_WideString& csURL, CFX_WideString& csToAddress, CFX_WideString& csCCAddress, CFX_WideString& csBCCAddress, CFX_WideString& csSubject, CFX_WideString& csMsg) -{ - CFX_WideString srcURL = csURL; - srcURL.TrimLeft(); - if (0 != srcURL.Left(7).CompareNoCase(L"mailto:")) - return FALSE; - int pos = srcURL.Find(L'?',0); - CFX_WideString tmp; - if (pos == -1) { - pos = srcURL.Find(L'@',0); - if (pos == -1) - return FALSE; - else - { - tmp = srcURL.Right(csURL.GetLength()-7); - tmp.TrimLeft(); - tmp.TrimRight(); - } - } else { - tmp = srcURL.Left(pos); - tmp = tmp.Right(tmp.GetLength()-7); - tmp.TrimLeft(); - tmp.TrimRight(); - } - - csToAddress = tmp; - - srcURL = srcURL.Right(srcURL.GetLength()-(pos+1)); - while ( !srcURL.IsEmpty() ) - { - srcURL.TrimLeft(); - srcURL.TrimRight(); - pos = srcURL.Find(L'&',0); - if (pos == -1) - tmp = srcURL; - else - tmp = srcURL.Left(pos); - - tmp.TrimLeft(); - tmp.TrimRight(); - if (tmp.GetLength() >= 3 && 0 == tmp.Left(3).CompareNoCase(L"cc=") ) - { - tmp = tmp.Right(tmp.GetLength()-3); - if (!csCCAddress.IsEmpty()) - csCCAddress += L';'; - csCCAddress += tmp; - - } - else if (tmp.GetLength() >= 4 && 0 == tmp.Left(4).CompareNoCase(L"bcc=")) - { - tmp = tmp.Right(tmp.GetLength() - 4); - if (!csBCCAddress.IsEmpty()) - csBCCAddress += L';'; - csBCCAddress += tmp; - } - else if (tmp.GetLength() >= 8 && 0 ==tmp.Left(8).CompareNoCase(L"subject=") ) - { - tmp=tmp.Right(tmp.GetLength()-8); - csSubject += tmp; - } - else if(tmp.GetLength() >= 5 && 0 ==tmp.Left(5).CompareNoCase(L"body=") ) - { - tmp=tmp.Right(tmp.GetLength() - 5); - csMsg += tmp; - } - if (pos == -1) - srcURL = L""; - else - srcURL = srcURL.Right(csURL.GetLength()-(pos+1)); - } - csToAddress.Replace(L",", L";"); - csCCAddress.Replace(L",", L";"); - csBCCAddress.Replace(L",", L";"); - return TRUE; +FX_BOOL CPDFXFA_Document::_MailToInfo(CFX_WideString& csURL, + CFX_WideString& csToAddress, + CFX_WideString& csCCAddress, + CFX_WideString& csBCCAddress, + CFX_WideString& csSubject, + CFX_WideString& csMsg) { + CFX_WideString srcURL = csURL; + srcURL.TrimLeft(); + if (0 != srcURL.Left(7).CompareNoCase(L"mailto:")) + return FALSE; + int pos = srcURL.Find(L'?', 0); + CFX_WideString tmp; + if (pos == -1) { + pos = srcURL.Find(L'@', 0); + if (pos == -1) + return FALSE; + else { + tmp = srcURL.Right(csURL.GetLength() - 7); + tmp.TrimLeft(); + tmp.TrimRight(); + } + } else { + tmp = srcURL.Left(pos); + tmp = tmp.Right(tmp.GetLength() - 7); + tmp.TrimLeft(); + tmp.TrimRight(); + } + + csToAddress = tmp; + + srcURL = srcURL.Right(srcURL.GetLength() - (pos + 1)); + while (!srcURL.IsEmpty()) { + srcURL.TrimLeft(); + srcURL.TrimRight(); + pos = srcURL.Find(L'&', 0); + if (pos == -1) + tmp = srcURL; + else + tmp = srcURL.Left(pos); + + tmp.TrimLeft(); + tmp.TrimRight(); + if (tmp.GetLength() >= 3 && 0 == tmp.Left(3).CompareNoCase(L"cc=")) { + tmp = tmp.Right(tmp.GetLength() - 3); + if (!csCCAddress.IsEmpty()) + csCCAddress += L';'; + csCCAddress += tmp; + + } else if (tmp.GetLength() >= 4 && + 0 == tmp.Left(4).CompareNoCase(L"bcc=")) { + tmp = tmp.Right(tmp.GetLength() - 4); + if (!csBCCAddress.IsEmpty()) + csBCCAddress += L';'; + csBCCAddress += tmp; + } else if (tmp.GetLength() >= 8 && + 0 == tmp.Left(8).CompareNoCase(L"subject=")) { + tmp = tmp.Right(tmp.GetLength() - 8); + csSubject += tmp; + } else if (tmp.GetLength() >= 5 && + 0 == tmp.Left(5).CompareNoCase(L"body=")) { + tmp = tmp.Right(tmp.GetLength() - 5); + csMsg += tmp; + } + if (pos == -1) + srcURL = L""; + else + srcURL = srcURL.Right(csURL.GetLength() - (pos + 1)); + } + csToAddress.Replace(L",", L";"); + csCCAddress.Replace(L",", L";"); + csBCCAddress.Replace(L",", L";"); + return TRUE; } -FX_BOOL CPDFXFA_Document::_SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit) -{ - CFX_WideStringC csURLC; - submit.GetSubmitTarget(csURLC); - CFX_WideString csURL = csURLC; - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return FALSE; - if (csURL.IsEmpty()){ - CFX_WideString ws; - ws.FromLocal("Submit cancelled."); - CFX_ByteString bs = ws.UTF16LE_Encode(); - int len = bs.GetLength()/sizeof(unsigned short); - pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len*sizeof(unsigned short)), (FPDF_WIDESTRING)L"", 0, 4); - bs.ReleaseBuffer(len*sizeof(unsigned short)); - return FALSE; - } - - FPDF_BOOL bRet = TRUE; - FPDF_FILEHANDLER* pFileHandler = NULL; - int fileFlag = -1; - - if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Xdp) - { - CFX_WideStringC csContentC; - submit.GetSubmitXDPContent(csContentC); - CFX_WideString csContent; - csContent = csContentC.GetPtr(); - csContent.TrimLeft(); - csContent.TrimRight(); - CFX_WideString space; - space.FromLocal(" "); - csContent = space + csContent + space; - FPDF_DWORD flag = 0; - if (submit.IsSubmitEmbedPDF()) - flag |= FXFA_PDF; - _ToXFAContentFlags(csContent, flag); - pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XDP, NULL, "wb"); - fileFlag = FXFA_SAVEAS_XDP; - _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XDP, 0, flag); - } - else if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Xml ) - { - pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, NULL, "wb"); - fileFlag = FXFA_SAVEAS_XML; - _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0); - } - else if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Pdf ) - { - //csfilename = csDocName; - } - else if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Formdata ) - { - return FALSE; - } - else if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Urlencoded ) - { - pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, NULL, "wb"); - fileFlag = FXFA_SAVEAS_XML; - _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0); - } - else if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Xfd ) - { - return FALSE; - } - else - { - return FALSE; - } - if (pFileHandler == NULL) - return FALSE; - if (0 == csURL.Left(7).CompareNoCase(L"mailto:")) - { - CFX_WideString csToAddress; - CFX_WideString csCCAddress; - CFX_WideString csBCCAddress; - CFX_WideString csSubject; - CFX_WideString csMsg; - - bRet = _MailToInfo(csURL, csToAddress, csCCAddress, csBCCAddress, csSubject, csMsg); - if (FALSE == bRet) - return FALSE; - - CFX_ByteString bsTo = CFX_WideString(csToAddress).UTF16LE_Encode(); - CFX_ByteString bsCC = CFX_WideString(csCCAddress).UTF16LE_Encode(); - CFX_ByteString bsBcc = CFX_WideString(csBCCAddress).UTF16LE_Encode(); - CFX_ByteString bsSubject = CFX_WideString(csSubject).UTF16LE_Encode(); - CFX_ByteString bsMsg = CFX_WideString(csMsg).UTF16LE_Encode(); - - FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength()); - FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength()); - FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength()); - FPDF_WIDESTRING pSubject = (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength()); - FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength()); - - pEnv->FFI_EmailTo(pFileHandler, pTo, pSubject, pCC, pBcc, pMsg); - bsTo.ReleaseBuffer(); - bsCC.ReleaseBuffer(); - bsBcc.ReleaseBuffer(); - bsSubject.ReleaseBuffer(); - bsMsg.ReleaseBuffer(); - } - else - { - //http¡¢ftp - CFX_WideString ws; - CFX_ByteString bs = csURL.UTF16LE_Encode(); - int len = bs.GetLength()/sizeof(unsigned short); - pEnv->FFI_UploadTo(pFileHandler, fileFlag, (FPDF_WIDESTRING)bs.GetBuffer(len*sizeof(unsigned short))); - bs.ReleaseBuffer(len*sizeof(unsigned short)); - } - - return bRet; +FX_BOOL CPDFXFA_Document::_SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit) { + CFX_WideStringC csURLC; + submit.GetSubmitTarget(csURLC); + CFX_WideString csURL = csURLC; + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + if (pEnv == NULL) + return FALSE; + if (csURL.IsEmpty()) { + CFX_WideString ws; + ws.FromLocal("Submit cancelled."); + CFX_ByteString bs = ws.UTF16LE_Encode(); + int len = bs.GetLength() / sizeof(unsigned short); + pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), + (FPDF_WIDESTRING)L"", 0, 4); + bs.ReleaseBuffer(len * sizeof(unsigned short)); + return FALSE; + } + + FPDF_BOOL bRet = TRUE; + FPDF_FILEHANDLER* pFileHandler = NULL; + int fileFlag = -1; + + if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Xdp) { + CFX_WideStringC csContentC; + submit.GetSubmitXDPContent(csContentC); + CFX_WideString csContent; + csContent = csContentC.GetPtr(); + csContent.TrimLeft(); + csContent.TrimRight(); + CFX_WideString space; + space.FromLocal(" "); + csContent = space + csContent + space; + FPDF_DWORD flag = 0; + if (submit.IsSubmitEmbedPDF()) + flag |= FXFA_PDF; + _ToXFAContentFlags(csContent, flag); + pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XDP, NULL, "wb"); + fileFlag = FXFA_SAVEAS_XDP; + _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XDP, 0, flag); + } else if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Xml) { + pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, NULL, "wb"); + fileFlag = FXFA_SAVEAS_XML; + _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0); + } else if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Pdf) { + // csfilename = csDocName; + } else if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Formdata) { + return FALSE; + } else if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Urlencoded) { + pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, NULL, "wb"); + fileFlag = FXFA_SAVEAS_XML; + _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0); + } else if (submit.GetSubmitFormat() == XFA_ATTRIBUTEENUM_Xfd) { + return FALSE; + } else { + return FALSE; + } + if (pFileHandler == NULL) + return FALSE; + if (0 == csURL.Left(7).CompareNoCase(L"mailto:")) { + CFX_WideString csToAddress; + CFX_WideString csCCAddress; + CFX_WideString csBCCAddress; + CFX_WideString csSubject; + CFX_WideString csMsg; + + bRet = _MailToInfo(csURL, csToAddress, csCCAddress, csBCCAddress, csSubject, + csMsg); + if (FALSE == bRet) + return FALSE; + + CFX_ByteString bsTo = CFX_WideString(csToAddress).UTF16LE_Encode(); + CFX_ByteString bsCC = CFX_WideString(csCCAddress).UTF16LE_Encode(); + CFX_ByteString bsBcc = CFX_WideString(csBCCAddress).UTF16LE_Encode(); + CFX_ByteString bsSubject = CFX_WideString(csSubject).UTF16LE_Encode(); + CFX_ByteString bsMsg = CFX_WideString(csMsg).UTF16LE_Encode(); + + FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength()); + FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength()); + FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength()); + FPDF_WIDESTRING pSubject = + (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength()); + FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength()); + + pEnv->FFI_EmailTo(pFileHandler, pTo, pSubject, pCC, pBcc, pMsg); + bsTo.ReleaseBuffer(); + bsCC.ReleaseBuffer(); + bsBcc.ReleaseBuffer(); + bsSubject.ReleaseBuffer(); + bsMsg.ReleaseBuffer(); + } else { + // http¡¢ftp + CFX_WideString ws; + CFX_ByteString bs = csURL.UTF16LE_Encode(); + int len = bs.GetLength() / sizeof(unsigned short); + pEnv->FFI_UploadTo( + pFileHandler, fileFlag, + (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short))); + bs.ReleaseBuffer(len * sizeof(unsigned short)); + } + + return bRet; } -FX_BOOL CPDFXFA_Document::SetGlobalProperty(IXFA_Doc* hDoc, const CFX_ByteStringC& szPropName, FXJSE_HVALUE hValue) -{ - if (hDoc != m_pXFADoc) - return FALSE; +FX_BOOL CPDFXFA_Document::SetGlobalProperty(IXFA_Doc* hDoc, + const CFX_ByteStringC& szPropName, + FXJSE_HVALUE hValue) { + if (hDoc != m_pXFADoc) + return FALSE; - if (m_pSDKDoc && m_pSDKDoc->GetEnv()->GetJSRuntime()) - return m_pSDKDoc->GetEnv()->GetJSRuntime()->SetHValueByName(szPropName, hValue); - return FALSE; + if (m_pSDKDoc && m_pSDKDoc->GetEnv()->GetJSRuntime()) + return m_pSDKDoc->GetEnv()->GetJSRuntime()->SetHValueByName(szPropName, + hValue); + return FALSE; } -FX_BOOL CPDFXFA_Document::GetPDFScriptObject(IXFA_Doc* hDoc, const CFX_ByteStringC& utf8Name, FXJSE_HVALUE hValue) -{ - if (hDoc != m_pXFADoc) - return FALSE; - - if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime()) - return FALSE; - - if (!m_pJSContext) - { - m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc); - m_pJSContext =m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext(); - } - - return _GetHValueByName(utf8Name, hValue, m_pSDKDoc->GetEnv()->GetJSRuntime()); - +FX_BOOL CPDFXFA_Document::GetPDFScriptObject(IXFA_Doc* hDoc, + const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) { + if (hDoc != m_pXFADoc) + return FALSE; + + if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime()) + return FALSE; + + if (!m_pJSContext) { + m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc); + m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext(); + } + + return _GetHValueByName(utf8Name, hValue, + m_pSDKDoc->GetEnv()->GetJSRuntime()); } -FX_BOOL CPDFXFA_Document::GetGlobalProperty(IXFA_Doc* hDoc, const CFX_ByteStringC& szPropName, FXJSE_HVALUE hValue) -{ - if (hDoc != m_pXFADoc) - return FALSE; - if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime()) - return FALSE; - - if (!m_pJSContext) - { - m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc); - m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext(); - } - - return _GetHValueByName(szPropName, hValue, m_pSDKDoc->GetEnv()->GetJSRuntime()); - +FX_BOOL CPDFXFA_Document::GetGlobalProperty(IXFA_Doc* hDoc, + const CFX_ByteStringC& szPropName, + FXJSE_HVALUE hValue) { + if (hDoc != m_pXFADoc) + return FALSE; + if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime()) + return FALSE; + + if (!m_pJSContext) { + m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc); + m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext(); + } + + return _GetHValueByName(szPropName, hValue, + m_pSDKDoc->GetEnv()->GetJSRuntime()); } -FX_BOOL CPDFXFA_Document::_GetHValueByName(const CFX_ByteStringC& utf8Name, FXJSE_HVALUE hValue, IFXJS_Runtime* runTime) -{ - return runTime->GetHValueByName(utf8Name, hValue); +FX_BOOL CPDFXFA_Document::_GetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue, + IFXJS_Runtime* runTime) { + return runTime->GetHValueByName(utf8Name, hValue); } - diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp index 7cd72de503..f8fbbd4997 100644 --- a/fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp +++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp @@ -1,7 +1,7 @@ // Copyright 2014 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 #include "../../include/fsdk_define.h" @@ -10,264 +10,249 @@ #include "../../include/fpdfxfa/fpdfxfa_doc.h" #include "../../include/fpdfxfa/fpdfxfa_page.h" -CPDFXFA_Page::CPDFXFA_Page(CPDFXFA_Document* pDoc, int page_index) : - m_pPDFPage(NULL), - m_pXFAPageView(NULL), - m_iPageIndex(page_index), - m_pDocument(pDoc), - m_iRef(1) -{ - +CPDFXFA_Page::CPDFXFA_Page(CPDFXFA_Document* pDoc, int page_index) + : m_pPDFPage(NULL), + m_pXFAPageView(NULL), + m_iPageIndex(page_index), + m_pDocument(pDoc), + m_iRef(1) {} + +CPDFXFA_Page::~CPDFXFA_Page() { + if (m_pPDFPage) + delete m_pPDFPage; + m_pPDFPage = NULL; + m_pXFAPageView = NULL; } -CPDFXFA_Page::~CPDFXFA_Page() -{ - if (m_pPDFPage) - delete m_pPDFPage; - m_pPDFPage = NULL; - m_pXFAPageView = NULL; -} +void CPDFXFA_Page::Release() { + m_iRef--; + if (m_iRef > 0) + return; -void CPDFXFA_Page::Release() -{ - m_iRef--; - if (m_iRef > 0) - return; - - if (m_pDocument) - m_pDocument->RemovePage(this); + if (m_pDocument) + m_pDocument->RemovePage(this); - delete this; + delete this; } -FX_BOOL CPDFXFA_Page::LoadPDFPage() -{ - if (!m_pDocument) return FALSE; - CPDF_Document* pPDFDoc = m_pDocument->GetPDFDoc(); - if (pPDFDoc) - { - CPDF_Dictionary* pDict = pPDFDoc->GetPage(m_iPageIndex); - if (pDict == NULL) return FALSE; - if (m_pPDFPage) { - if (m_pPDFPage->m_pFormDict == pDict) - return TRUE; - - delete m_pPDFPage; - m_pPDFPage = NULL; - } - - m_pPDFPage = FX_NEW CPDF_Page; - m_pPDFPage->Load(pPDFDoc, pDict); - m_pPDFPage->ParseContent(); - return TRUE; - } - - return FALSE; +FX_BOOL CPDFXFA_Page::LoadPDFPage() { + if (!m_pDocument) + return FALSE; + CPDF_Document* pPDFDoc = m_pDocument->GetPDFDoc(); + if (pPDFDoc) { + CPDF_Dictionary* pDict = pPDFDoc->GetPage(m_iPageIndex); + if (pDict == NULL) + return FALSE; + if (m_pPDFPage) { + if (m_pPDFPage->m_pFormDict == pDict) + return TRUE; + + delete m_pPDFPage; + m_pPDFPage = NULL; + } + + m_pPDFPage = FX_NEW CPDF_Page; + m_pPDFPage->Load(pPDFDoc, pDict); + m_pPDFPage->ParseContent(); + return TRUE; + } + + return FALSE; } -FX_BOOL CPDFXFA_Page::LoadXFAPageView() -{ - if (!m_pDocument) - return FALSE; - IXFA_Doc* pXFADoc = m_pDocument->GetXFADoc(); - if (pXFADoc) - { - IXFA_DocView* pXFADocView = m_pDocument->GetXFADocView(); - if (!pXFADocView) - return FALSE; +FX_BOOL CPDFXFA_Page::LoadXFAPageView() { + if (!m_pDocument) + return FALSE; + IXFA_Doc* pXFADoc = m_pDocument->GetXFADoc(); + if (pXFADoc) { + IXFA_DocView* pXFADocView = m_pDocument->GetXFADocView(); + if (!pXFADocView) + return FALSE; - IXFA_PageView* pPageView = pXFADocView->GetPageView(m_iPageIndex); - if (!pPageView) - return FALSE; + IXFA_PageView* pPageView = pXFADocView->GetPageView(m_iPageIndex); + if (!pPageView) + return FALSE; - if (m_pXFAPageView) - if (m_pXFAPageView == pPageView) - return TRUE; + if (m_pXFAPageView) + if (m_pXFAPageView == pPageView) + return TRUE; - m_pXFAPageView = pPageView; - int iStatus = m_pXFAPageView->LoadPageView(NULL); + m_pXFAPageView = pPageView; + int iStatus = m_pXFAPageView->LoadPageView(NULL); - return TRUE; - } + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CPDFXFA_Page::LoadPage() -{ - if (!m_pDocument || m_iPageIndex < 0) - return FALSE; - - int iDocType = m_pDocument->GetDocType(); - switch (iDocType) - { - case DOCTYPE_PDF: - case DOCTYPE_STATIC_XFA: - { - return LoadPDFPage(); - } - case DOCTYPE_DYNIMIC_XFA: - { - return LoadXFAPageView(); - } - default: - return FALSE; - } - - return FALSE; +FX_BOOL CPDFXFA_Page::LoadPage() { + if (!m_pDocument || m_iPageIndex < 0) + return FALSE; + + int iDocType = m_pDocument->GetDocType(); + switch (iDocType) { + case DOCTYPE_PDF: + case DOCTYPE_STATIC_XFA: { + return LoadPDFPage(); + } + case DOCTYPE_DYNIMIC_XFA: { + return LoadXFAPageView(); + } + default: + return FALSE; + } + + return FALSE; } -FX_BOOL CPDFXFA_Page::LoadPDFPage(CPDF_Dictionary* pageDict) -{ - if (!m_pDocument || m_iPageIndex < 0 || !pageDict) - return FALSE; +FX_BOOL CPDFXFA_Page::LoadPDFPage(CPDF_Dictionary* pageDict) { + if (!m_pDocument || m_iPageIndex < 0 || !pageDict) + return FALSE; - if (m_pPDFPage) - delete m_pPDFPage; + if (m_pPDFPage) + delete m_pPDFPage; - m_pPDFPage = FX_NEW CPDF_Page(); - m_pPDFPage->Load(m_pDocument->GetPDFDoc(), pageDict); - m_pPDFPage->ParseContent(); + m_pPDFPage = FX_NEW CPDF_Page(); + m_pPDFPage->Load(m_pDocument->GetPDFDoc(), pageDict); + m_pPDFPage->ParseContent(); - return TRUE; + return TRUE; } -FX_FLOAT CPDFXFA_Page::GetPageWidth() -{ - ASSERT(m_pDocument != NULL); - - if (!m_pPDFPage && !m_pXFAPageView) - return 0.0f; - - int nDocType = m_pDocument->GetDocType(); - switch (nDocType) - { - case DOCTYPE_DYNIMIC_XFA: - { - if (m_pXFAPageView) - { - CFX_RectF rect; - m_pXFAPageView->GetPageViewRect(rect); - return rect.width; - } - } - break; - case DOCTYPE_STATIC_XFA: - case DOCTYPE_PDF: - { - if (m_pPDFPage) - return m_pPDFPage->GetPageWidth(); - } - break; - default: - return 0.0f; - } - - return 0.0f; +FX_FLOAT CPDFXFA_Page::GetPageWidth() { + ASSERT(m_pDocument != NULL); + + if (!m_pPDFPage && !m_pXFAPageView) + return 0.0f; + + int nDocType = m_pDocument->GetDocType(); + switch (nDocType) { + case DOCTYPE_DYNIMIC_XFA: { + if (m_pXFAPageView) { + CFX_RectF rect; + m_pXFAPageView->GetPageViewRect(rect); + return rect.width; + } + } break; + case DOCTYPE_STATIC_XFA: + case DOCTYPE_PDF: { + if (m_pPDFPage) + return m_pPDFPage->GetPageWidth(); + } break; + default: + return 0.0f; + } + + return 0.0f; } -FX_FLOAT CPDFXFA_Page::GetPageHeight() -{ - ASSERT(m_pDocument != NULL); - - if (!m_pPDFPage && !m_pXFAPageView) - return 0.0f; - - int nDocType = m_pDocument->GetDocType(); - switch (nDocType) - { - case DOCTYPE_PDF: - case DOCTYPE_STATIC_XFA: - { - if (m_pPDFPage) - return m_pPDFPage->GetPageHeight(); - } - break; - case DOCTYPE_DYNIMIC_XFA: - { - if (m_pXFAPageView) - { - CFX_RectF rect; - m_pXFAPageView->GetPageViewRect(rect); - return rect.height; - } - } - break; - default: - return 0.0f; - } - - return 0.0f; +FX_FLOAT CPDFXFA_Page::GetPageHeight() { + ASSERT(m_pDocument != NULL); + + if (!m_pPDFPage && !m_pXFAPageView) + return 0.0f; + + int nDocType = m_pDocument->GetDocType(); + switch (nDocType) { + case DOCTYPE_PDF: + case DOCTYPE_STATIC_XFA: { + if (m_pPDFPage) + return m_pPDFPage->GetPageHeight(); + } break; + case DOCTYPE_DYNIMIC_XFA: { + if (m_pXFAPageView) { + CFX_RectF rect; + m_pXFAPageView->GetPageViewRect(rect); + return rect.height; + } + } break; + default: + return 0.0f; + } + + return 0.0f; } -void CPDFXFA_Page::DeviceToPage(int start_x, int start_y, int size_x, int size_y, int rotate, int device_x, int device_y, double* page_x, double* page_y) -{ - ASSERT(m_pDocument != NULL); +void CPDFXFA_Page::DeviceToPage(int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + int device_x, + int device_y, + double* page_x, + double* page_y) { + ASSERT(m_pDocument != NULL); - if (!m_pPDFPage && !m_pXFAPageView) - return; + if (!m_pPDFPage && !m_pXFAPageView) + return; - CPDF_Matrix page2device; - CPDF_Matrix device2page; - FX_FLOAT page_x_f, page_y_f; + CPDF_Matrix page2device; + CPDF_Matrix device2page; + FX_FLOAT page_x_f, page_y_f; - GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y, rotate); + GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y, rotate); - device2page.SetReverse(page2device); - device2page.Transform((FX_FLOAT)(device_x), (FX_FLOAT)(device_y), page_x_f, page_y_f); + device2page.SetReverse(page2device); + device2page.Transform((FX_FLOAT)(device_x), (FX_FLOAT)(device_y), page_x_f, + page_y_f); - *page_x = (page_x_f); - *page_y = (page_y_f); + *page_x = (page_x_f); + *page_y = (page_y_f); } -void CPDFXFA_Page::PageToDevice(int start_x, int start_y, int size_x, int size_y, int rotate, double page_x, double page_y, int* device_x, int* device_y) -{ - if (!m_pPDFPage && !m_pXFAPageView) - return; +void CPDFXFA_Page::PageToDevice(int start_x, + int start_y, + int size_x, + int size_y, + int rotate, + double page_x, + double page_y, + int* device_x, + int* device_y) { + if (!m_pPDFPage && !m_pXFAPageView) + return; - CPDF_Matrix page2device; - FX_FLOAT device_x_f, device_y_f; + CPDF_Matrix page2device; + FX_FLOAT device_x_f, device_y_f; - GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y, rotate); + GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y, rotate); - page2device.Transform(((FX_FLOAT)page_x), ((FX_FLOAT)page_y), device_x_f, device_y_f); + page2device.Transform(((FX_FLOAT)page_x), ((FX_FLOAT)page_y), device_x_f, + device_y_f); - *device_x = FXSYS_round(device_x_f); - *device_y = FXSYS_round(device_y_f); + *device_x = FXSYS_round(device_x_f); + *device_y = FXSYS_round(device_y_f); } -void CPDFXFA_Page::GetDisplayMatrix(CFX_AffineMatrix& matrix, int xPos, int yPos, - int xSize, int ySize, int iRotate) const -{ - ASSERT(m_pDocument != NULL); - - if (!m_pPDFPage && !m_pXFAPageView) - return; - - int nDocType = m_pDocument->GetDocType(); - switch (nDocType) - { - case DOCTYPE_DYNIMIC_XFA: - { - if (m_pXFAPageView) - { - CFX_Rect rect; - rect.Set(xPos, yPos, xSize, ySize); - m_pXFAPageView->GetDisplayMatrix(matrix, rect, iRotate); - } - } - break; - case DOCTYPE_PDF: - case DOCTYPE_STATIC_XFA: - { - if (m_pPDFPage) - { - m_pPDFPage->GetDisplayMatrix(matrix, xPos, yPos, xSize, ySize, iRotate); - } - } - break; - default: - return; - } - +void CPDFXFA_Page::GetDisplayMatrix(CFX_AffineMatrix& matrix, + int xPos, + int yPos, + int xSize, + int ySize, + int iRotate) const { + ASSERT(m_pDocument != NULL); + + if (!m_pPDFPage && !m_pXFAPageView) + return; + + int nDocType = m_pDocument->GetDocType(); + switch (nDocType) { + case DOCTYPE_DYNIMIC_XFA: { + if (m_pXFAPageView) { + CFX_Rect rect; + rect.Set(xPos, yPos, xSize, ySize); + m_pXFAPageView->GetDisplayMatrix(matrix, rect, iRotate); + } + } break; + case DOCTYPE_PDF: + case DOCTYPE_STATIC_XFA: { + if (m_pPDFPage) { + m_pPDFPage->GetDisplayMatrix(matrix, xPos, yPos, xSize, ySize, iRotate); + } + } break; + default: + return; + } } diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp index ac5ef21f58..3e1eedf8ea 100644 --- a/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp +++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp @@ -1,7 +1,7 @@ // Copyright 2014 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 #include "../../include/fsdk_define.h" @@ -10,59 +10,56 @@ CFX_PtrArray CXFA_FWLAdapterTimerMgr::ms_timerArray; -FWL_ERR CXFA_FWLAdapterTimerMgr::Start(IFWL_Timer *pTimer, FX_DWORD dwElapse, FWL_HTIMER &hTimer, FX_BOOL bImmediately /* = TRUE */) -{ - if (m_pEnv) - { - uint32_t uIDEvent = m_pEnv->FFI_SetTimer(dwElapse, TimerProc); - CFWL_TimerInfo *pInfo = FX_NEW CFWL_TimerInfo; - pInfo->uIDEvent = uIDEvent; - pInfo->pTimer = pTimer; - ms_timerArray.Add(pInfo); +FWL_ERR CXFA_FWLAdapterTimerMgr::Start(IFWL_Timer* pTimer, + FX_DWORD dwElapse, + FWL_HTIMER& hTimer, + FX_BOOL bImmediately /* = TRUE */) { + if (m_pEnv) { + uint32_t uIDEvent = m_pEnv->FFI_SetTimer(dwElapse, TimerProc); + CFWL_TimerInfo* pInfo = FX_NEW CFWL_TimerInfo; + pInfo->uIDEvent = uIDEvent; + pInfo->pTimer = pTimer; + ms_timerArray.Add(pInfo); + + hTimer = (FWL_HTIMER)pInfo; + return FWL_ERR_Succeeded; + } - hTimer = (FWL_HTIMER)pInfo; - return FWL_ERR_Succeeded; - } - - return FWL_ERR_Indefinite; + return FWL_ERR_Indefinite; } -FWL_ERR CXFA_FWLAdapterTimerMgr::Stop(FWL_HTIMER hTimer) -{ - if (!hTimer) return FWL_ERR_Indefinite; +FWL_ERR CXFA_FWLAdapterTimerMgr::Stop(FWL_HTIMER hTimer) { + if (!hTimer) + return FWL_ERR_Indefinite; - if (m_pEnv) - { - CFWL_TimerInfo *pInfo = (CFWL_TimerInfo*)hTimer; + if (m_pEnv) { + CFWL_TimerInfo* pInfo = (CFWL_TimerInfo*)hTimer; - m_pEnv->FFI_KillTimer(pInfo->uIDEvent); + m_pEnv->FFI_KillTimer(pInfo->uIDEvent); - int32_t index = ms_timerArray.Find(pInfo); - if (index >= 0) - { - ms_timerArray.RemoveAt(index); - delete pInfo; - } - return FWL_ERR_Succeeded; - } + int32_t index = ms_timerArray.Find(pInfo); + if (index >= 0) { + ms_timerArray.RemoveAt(index); + delete pInfo; + } + return FWL_ERR_Succeeded; + } - return FWL_ERR_Indefinite; + return FWL_ERR_Indefinite; } -void CXFA_FWLAdapterTimerMgr::TimerProc(int32_t idEvent) -{ - CFWL_TimerInfo *pInfo = NULL; - int32_t iCount = CXFA_FWLAdapterTimerMgr::ms_timerArray.GetSize(); - for (int32_t i = 0; i < iCount; i++) - { - CFWL_TimerInfo *pTemp = (CFWL_TimerInfo*)CXFA_FWLAdapterTimerMgr::ms_timerArray.GetAt(i); - if (pTemp->uIDEvent == idEvent) - { - pInfo = pTemp; break; - } - } - if (pInfo) - { - pInfo->pTimer->Run((FWL_HTIMER)pInfo); - } +void CXFA_FWLAdapterTimerMgr::TimerProc(int32_t idEvent) { + CFWL_TimerInfo* pInfo = NULL; + int32_t iCount = CXFA_FWLAdapterTimerMgr::ms_timerArray.GetSize(); + for (int32_t i = 0; i < iCount; i++) { + CFWL_TimerInfo* pTemp = + (CFWL_TimerInfo*)CXFA_FWLAdapterTimerMgr::ms_timerArray.GetAt(i); + if (pTemp->uIDEvent == idEvent) { + pInfo = pTemp; + break; + } + } + if (pInfo) { + pInfo->pTimer->Run((FWL_HTIMER)pInfo); + } } diff --git a/fpdfsdk/src/fsdk_actionhandler.cpp b/fpdfsdk/src/fsdk_actionhandler.cpp index 485852ca00..c72bdfd79b 100644 --- a/fpdfsdk/src/fsdk_actionhandler.cpp +++ b/fpdfsdk/src/fsdk_actionhandler.cpp @@ -14,235 +14,224 @@ CPDFSDK_ActionHandler::CPDFSDK_ActionHandler(CPDFDoc_Environment* pEvi) : m_pFormActionHandler(new CPDFSDK_FormActionHandler), - m_pMediaActionHandler(NULL) { -} - -void CPDFSDK_ActionHandler::SetMediaActionHandler(CPDFSDK_MediaActionHandler* pHandler) -{ - ASSERT(pHandler != NULL); - ASSERT(m_pMediaActionHandler == NULL); - m_pMediaActionHandler = pHandler; -} - -//document open -FX_BOOL CPDFSDK_ActionHandler::DoAction_DocOpen(const CPDF_Action& action, CPDFSDK_Document* pDocument) -{ - CFX_PtrList list; - return ExecuteDocumentOpenAction(action, pDocument, list); -} - -//document open -FX_BOOL CPDFSDK_ActionHandler::DoAction_JavaScript(const CPDF_Action& JsAction,CFX_WideString csJSName, - CPDFSDK_Document* pDocument) -{ - if (JsAction.GetType() == CPDF_Action::JavaScript) - { - CFX_WideString swJS = JsAction.GetJavaScript(); - if (!swJS.IsEmpty()) - { - RunDocumentOpenJavaScript(pDocument, csJSName, swJS); - return TRUE; - } - } - - return FALSE; -} - -FX_BOOL CPDFSDK_ActionHandler::DoAction_FieldJavaScript(const CPDF_Action& JsAction, CPDF_AAction::AActionType type, - CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, - PDFSDK_FieldAction& data) -{ - CPDFDoc_Environment* pEnv = pDocument->GetEnv(); - ASSERT(pEnv); - if (pEnv->IsJSInitiated() && JsAction.GetType() == CPDF_Action::JavaScript) - { - CFX_WideString swJS = JsAction.GetJavaScript(); - if (!swJS.IsEmpty()) - { - RunFieldJavaScript(pDocument, pFormField, type, data, swJS); - return TRUE; - } - } - return FALSE; -} - -FX_BOOL CPDFSDK_ActionHandler::DoAction_Page(const CPDF_Action& action, enum CPDF_AAction::AActionType eType, - CPDFSDK_Document* pDocument) -{ - CFX_PtrList list; - return ExecuteDocumentPageAction(action, eType, pDocument, list); -} - -FX_BOOL CPDFSDK_ActionHandler::DoAction_Document(const CPDF_Action& action, enum CPDF_AAction::AActionType eType, - CPDFSDK_Document* pDocument) -{ - CFX_PtrList list; - return ExecuteDocumentPageAction(action, eType, pDocument, list); -} - -FX_BOOL CPDFSDK_ActionHandler::DoAction_BookMark(CPDF_Bookmark *pBookMark, const CPDF_Action& action, CPDF_AAction::AActionType type, - CPDFSDK_Document* pDocument) -{ - CFX_PtrList list; - return ExecuteBookMark(action, pDocument, pBookMark, list); -} - -FX_BOOL CPDFSDK_ActionHandler::DoAction_Screen(const CPDF_Action& action, CPDF_AAction::AActionType type, - CPDFSDK_Document* pDocument, CPDFSDK_Annot* pScreen) -{ - CFX_PtrList list; - return ExecuteScreenAction(action, type, pDocument, pScreen, list); -} - -FX_BOOL CPDFSDK_ActionHandler::DoAction_Link(const CPDF_Action& action, - CPDFSDK_Document* pDocument) -{ - CFX_PtrList list; - return ExecuteLinkAction(action, pDocument, list); -} - -FX_BOOL CPDFSDK_ActionHandler::DoAction_Field(const CPDF_Action& action, CPDF_AAction::AActionType type, - CPDFSDK_Document* pDocument, - CPDF_FormField* pFormField, PDFSDK_FieldAction& data) -{ - CFX_PtrList list; - return ExecuteFieldAction(action, type, pDocument, pFormField, data, list); -} - -FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentOpenAction(const CPDF_Action& action, CPDFSDK_Document* pDocument, - CFX_PtrList& list) -{ - CPDF_Dictionary* pDict = action.GetDict(); - if (list.Find(pDict)) - return FALSE; - - list.AddTail(pDict); - - CPDFDoc_Environment* pEnv = pDocument->GetEnv(); - ASSERT(pEnv); - if (action.GetType() == CPDF_Action::JavaScript) - { - if(pEnv->IsJSInitiated()) - { - CFX_WideString swJS = action.GetJavaScript(); - if (!swJS.IsEmpty()) - { - RunDocumentOpenJavaScript(pDocument, L"", swJS); - } - } - } - else - { - DoAction_NoJs(action, pDocument); - } - - for (int32_t i=0,sz=action.GetSubActionsCount(); iGetEnv(); - ASSERT(pEnv); - if (action.GetType() == CPDF_Action::JavaScript) - { - if(pEnv->IsJSInitiated()) - { - CFX_WideString swJS = action.GetJavaScript(); - if (!swJS.IsEmpty()) - { - IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); //???? - ASSERT(pRuntime != NULL); - - pRuntime->SetReaderDocument(pDocument); - - IFXJS_Context* pContext = pRuntime->NewContext(); - ASSERT(pContext != NULL); - - pContext->OnLink_MouseUp(pDocument); - - CFX_WideString csInfo; - FX_BOOL bRet = pContext->RunScript(swJS, csInfo); - if (!bRet) - { - // FIXME: return error. - } - - pRuntime->ReleaseContext(pContext); - } - } - } - else - { - DoAction_NoJs(action, pDocument); - } - - for (int32_t i=0,sz=action.GetSubActionsCount(); iGetEnv(); - ASSERT(pEnv); - if (action.GetType() == CPDF_Action::JavaScript) - { - if(pEnv->IsJSInitiated()) - { - CFX_WideString swJS = action.GetJavaScript(); - if (!swJS.IsEmpty()) - { - RunDocumentPageJavaScript(pDocument, type, swJS); - } - } - } - else - { - DoAction_NoJs(action, pDocument); - } - - if (!IsValidDocView(pDocument)) - return FALSE; - - for (int32_t i=0,sz=action.GetSubActionsCount(); iGetEnv(); + ASSERT(pEnv); + if (pEnv->IsJSInitiated() && JsAction.GetType() == CPDF_Action::JavaScript) { + CFX_WideString swJS = JsAction.GetJavaScript(); + if (!swJS.IsEmpty()) { + RunFieldJavaScript(pDocument, pFormField, type, data, swJS); + return TRUE; + } + } + return FALSE; +} + +FX_BOOL CPDFSDK_ActionHandler::DoAction_Page( + const CPDF_Action& action, + enum CPDF_AAction::AActionType eType, + CPDFSDK_Document* pDocument) { + CFX_PtrList list; + return ExecuteDocumentPageAction(action, eType, pDocument, list); +} + +FX_BOOL CPDFSDK_ActionHandler::DoAction_Document( + const CPDF_Action& action, + enum CPDF_AAction::AActionType eType, + CPDFSDK_Document* pDocument) { + CFX_PtrList list; + return ExecuteDocumentPageAction(action, eType, pDocument, list); +} + +FX_BOOL CPDFSDK_ActionHandler::DoAction_BookMark(CPDF_Bookmark* pBookMark, + const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument) { + CFX_PtrList list; + return ExecuteBookMark(action, pDocument, pBookMark, list); +} + +FX_BOOL CPDFSDK_ActionHandler::DoAction_Screen(const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CPDFSDK_Annot* pScreen) { + CFX_PtrList list; + return ExecuteScreenAction(action, type, pDocument, pScreen, list); +} + +FX_BOOL CPDFSDK_ActionHandler::DoAction_Link(const CPDF_Action& action, + CPDFSDK_Document* pDocument) { + CFX_PtrList list; + return ExecuteLinkAction(action, pDocument, list); +} + +FX_BOOL CPDFSDK_ActionHandler::DoAction_Field(const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CPDF_FormField* pFormField, + PDFSDK_FieldAction& data) { + CFX_PtrList list; + return ExecuteFieldAction(action, type, pDocument, pFormField, data, list); +} + +FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentOpenAction( + const CPDF_Action& action, + CPDFSDK_Document* pDocument, + CFX_PtrList& list) { + CPDF_Dictionary* pDict = action.GetDict(); + if (list.Find(pDict)) + return FALSE; + + list.AddTail(pDict); + + CPDFDoc_Environment* pEnv = pDocument->GetEnv(); + ASSERT(pEnv); + if (action.GetType() == CPDF_Action::JavaScript) { + if (pEnv->IsJSInitiated()) { + CFX_WideString swJS = action.GetJavaScript(); + if (!swJS.IsEmpty()) { + RunDocumentOpenJavaScript(pDocument, L"", swJS); + } + } + } else { + DoAction_NoJs(action, pDocument); + } + + for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { + CPDF_Action subaction = action.GetSubAction(i); + if (!ExecuteDocumentOpenAction(subaction, pDocument, list)) + return FALSE; + } + + return TRUE; +} + +FX_BOOL CPDFSDK_ActionHandler::ExecuteLinkAction(const CPDF_Action& action, + CPDFSDK_Document* pDocument, + CFX_PtrList& list) { + ASSERT(pDocument != NULL); + + CPDF_Dictionary* pDict = action.GetDict(); + if (list.Find(pDict)) + return FALSE; + + list.AddTail(pDict); + + CPDFDoc_Environment* pEnv = pDocument->GetEnv(); + ASSERT(pEnv); + if (action.GetType() == CPDF_Action::JavaScript) { + if (pEnv->IsJSInitiated()) { + CFX_WideString swJS = action.GetJavaScript(); + if (!swJS.IsEmpty()) { + IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); //???? + ASSERT(pRuntime != NULL); + + pRuntime->SetReaderDocument(pDocument); + + IFXJS_Context* pContext = pRuntime->NewContext(); + ASSERT(pContext != NULL); + + pContext->OnLink_MouseUp(pDocument); + + CFX_WideString csInfo; + FX_BOOL bRet = pContext->RunScript(swJS, csInfo); + if (!bRet) { + // FIXME: return error. + } + + pRuntime->ReleaseContext(pContext); + } + } + } else { + DoAction_NoJs(action, pDocument); + } + + for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { + CPDF_Action subaction = action.GetSubAction(i); + if (!ExecuteLinkAction(subaction, pDocument, list)) + return FALSE; + } + + return TRUE; +} + +FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentPageAction( + const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CFX_PtrList& list) { + ASSERT(pDocument != NULL); + + CPDF_Dictionary* pDict = action.GetDict(); + if (list.Find(pDict)) + return FALSE; + + list.AddTail(pDict); + + CPDFDoc_Environment* pEnv = pDocument->GetEnv(); + ASSERT(pEnv); + if (action.GetType() == CPDF_Action::JavaScript) { + if (pEnv->IsJSInitiated()) { + CFX_WideString swJS = action.GetJavaScript(); + if (!swJS.IsEmpty()) { + RunDocumentPageJavaScript(pDocument, type, swJS); + } + } + } else { + DoAction_NoJs(action, pDocument); + } + + if (!IsValidDocView(pDocument)) + return FALSE; + + for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { + CPDF_Action subaction = action.GetSubAction(i); + if (!ExecuteDocumentPageAction(subaction, type, pDocument, list)) + return FALSE; + } + + return TRUE; +} + +FX_BOOL CPDFSDK_ActionHandler::IsValidField(CPDFSDK_Document* pDocument, + CPDF_Dictionary* pFieldDict) { ASSERT(pDocument != NULL); ASSERT(pFieldDict != NULL); @@ -255,554 +244,545 @@ FX_BOOL CPDFSDK_ActionHandler::IsValidField(CPDFSDK_Document* pDocument, CPDF_Di return pPDFInterForm->GetFieldByDict(pFieldDict) != NULL; } -FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction(const CPDF_Action& action, CPDF_AAction::AActionType type, - CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, - PDFSDK_FieldAction& data, CFX_PtrList& list) -{ - ASSERT(pDocument != NULL); - - CPDF_Dictionary* pDict = action.GetDict(); - if (list.Find(pDict)) - return FALSE; - - list.AddTail(pDict); - - CPDFDoc_Environment* pEnv = pDocument->GetEnv(); - ASSERT(pEnv); - if (action.GetType() == CPDF_Action::JavaScript) - { - if(pEnv->IsJSInitiated()) - { - CFX_WideString swJS = action.GetJavaScript(); - if (!swJS.IsEmpty()) - { - RunFieldJavaScript(pDocument, pFormField, type, data, swJS); - if (!IsValidField(pDocument, pFormField->GetFieldDict())) - return FALSE; - } - } - } - else - { - DoAction_NoJs(action, pDocument); - } - - for (int32_t i=0,sz=action.GetSubActionsCount(); iGetEnv(); - ASSERT(pEnv); - if (action.GetType() == CPDF_Action::JavaScript) - { - if(pEnv->IsJSInitiated()) - { - CFX_WideString swJS = action.GetJavaScript(); - if (!swJS.IsEmpty()) - { - IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); - ASSERT(pRuntime != NULL); - - pRuntime->SetReaderDocument(pDocument); - - IFXJS_Context* pContext = pRuntime->NewContext(); - ASSERT(pContext != NULL); - - // switch (type) - // { - // case CPDF_AAction::CursorEnter: - // pContext->OnScreen_MouseEnter(IsCTRLpressed(), IsSHIFTpressed(), pScreen); - // break; - // case CPDF_AAction::CursorExit: - // pContext->OnScreen_MouseExit(IsCTRLpressed(), IsSHIFTpressed(), pScreen); - // break; - // case CPDF_AAction::ButtonDown: - // pContext->OnScreen_MouseDown(IsCTRLpressed(), IsSHIFTpressed(), pScreen); - // break; - // case CPDF_AAction::ButtonUp: - // pContext->OnScreen_MouseUp(IsCTRLpressed(), IsSHIFTpressed(), pScreen); - // break; - // case CPDF_AAction::GetFocus: - // pContext->OnScreen_Focus(IsCTRLpressed(), IsSHIFTpressed(), pScreen); - // break; - // case CPDF_AAction::LoseFocus: - // pContext->OnScreen_Blur(IsCTRLpressed(), IsSHIFTpressed(), pScreen); - // break; - // case CPDF_AAction::PageOpen: - // pContext->OnScreen_Open(IsCTRLpressed(), IsSHIFTpressed(), pScreen); - // break; - // case CPDF_AAction::PageClose: - // pContext->OnScreen_Close(IsCTRLpressed(), IsSHIFTpressed(), pScreen); - // break; - // case CPDF_AAction::PageVisible: - // pContext->OnScreen_InView(IsCTRLpressed(), IsSHIFTpressed(), pScreen); - // break; - // case CPDF_AAction::PageInvisible: - // pContext->OnScreen_OutView(IsCTRLpressed(), IsSHIFTpressed(), pScreen); - // break; - // default: - // ASSERT(FALSE); - // break; - // } - - CFX_WideString csInfo; - FX_BOOL bRet = pContext->RunScript(swJS, csInfo); - if (!bRet) - { - //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); - } - - pRuntime->ReleaseContext(pContext); - } - } - } - else - { - DoAction_NoJs(action, pDocument); - } - - for (int32_t i=0,sz=action.GetSubActionsCount(); iGetEnv(); - ASSERT(pEnv); - if (action.GetType() == CPDF_Action::JavaScript) - { - if(pEnv->IsJSInitiated()) - { - CFX_WideString swJS = action.GetJavaScript(); - if (!swJS.IsEmpty()) - { - IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); - ASSERT(pRuntime != NULL); - - pRuntime->SetReaderDocument(pDocument); - - IFXJS_Context* pContext = pRuntime->NewContext(); - ASSERT(pContext != NULL); - - pContext->OnBookmark_MouseUp(pBookmark); - - CFX_WideString csInfo; - FX_BOOL bRet = pContext->RunScript(swJS, csInfo); - if (!bRet) - { - //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); - } - - pRuntime->ReleaseContext(pContext); - } - } - } - else - { - DoAction_NoJs(action, pDocument); - } - - for (int32_t i=0,sz=action.GetSubActionsCount(); iDoAction_Sound(action, pDocument); - } - break; - case CPDF_Action::Movie: - if (m_pMediaActionHandler) - { - m_pMediaActionHandler->DoAction_Movie(action, pDocument); - } - break; - case CPDF_Action::Hide: - if (m_pFormActionHandler) - { - m_pFormActionHandler->DoAction_Hide(action, pDocument); - } - break; - case CPDF_Action::Named: - DoAction_Named(pDocument, action); - break; - case CPDF_Action::SubmitForm: - if (m_pFormActionHandler) - { - m_pFormActionHandler->DoAction_SubmitForm(action, pDocument); - } - break; - case CPDF_Action::ResetForm: - if (m_pFormActionHandler) - { - m_pFormActionHandler->DoAction_ResetForm(action, pDocument); - } - break; - case CPDF_Action::ImportData: - if (m_pFormActionHandler) - { - m_pFormActionHandler->DoAction_ImportData(action, pDocument); - } - break; - case CPDF_Action::JavaScript: - ASSERT(FALSE); - break; - case CPDF_Action::SetOCGState: - DoAction_SetOCGState(pDocument, action); - break; - case CPDF_Action::Rendition: - if (m_pMediaActionHandler) - { - m_pMediaActionHandler->DoAction_Rendition(action, pDocument); - } - break; - case CPDF_Action::Trans: - break; - case CPDF_Action::GoTo3DView: - break; - default: - break; - } -} - -FX_BOOL CPDFSDK_ActionHandler::IsValidDocView(CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); - return TRUE; +FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction( + const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CPDF_FormField* pFormField, + PDFSDK_FieldAction& data, + CFX_PtrList& list) { + ASSERT(pDocument != NULL); + + CPDF_Dictionary* pDict = action.GetDict(); + if (list.Find(pDict)) + return FALSE; + + list.AddTail(pDict); + + CPDFDoc_Environment* pEnv = pDocument->GetEnv(); + ASSERT(pEnv); + if (action.GetType() == CPDF_Action::JavaScript) { + if (pEnv->IsJSInitiated()) { + CFX_WideString swJS = action.GetJavaScript(); + if (!swJS.IsEmpty()) { + RunFieldJavaScript(pDocument, pFormField, type, data, swJS); + if (!IsValidField(pDocument, pFormField->GetFieldDict())) + return FALSE; + } + } + } else { + DoAction_NoJs(action, pDocument); + } + + for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { + CPDF_Action subaction = action.GetSubAction(i); + if (!ExecuteFieldAction(subaction, type, pDocument, pFormField, data, list)) + return FALSE; + } + + return TRUE; +} + +FX_BOOL CPDFSDK_ActionHandler::ExecuteScreenAction( + const CPDF_Action& action, + CPDF_AAction::AActionType type, + CPDFSDK_Document* pDocument, + CPDFSDK_Annot* pScreen, + CFX_PtrList& list) { + ASSERT(pDocument != NULL); + + CPDF_Dictionary* pDict = action.GetDict(); + if (list.Find(pDict)) + return FALSE; + + list.AddTail(pDict); + + CPDFDoc_Environment* pEnv = pDocument->GetEnv(); + ASSERT(pEnv); + if (action.GetType() == CPDF_Action::JavaScript) { + if (pEnv->IsJSInitiated()) { + CFX_WideString swJS = action.GetJavaScript(); + if (!swJS.IsEmpty()) { + IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); + ASSERT(pRuntime != NULL); + + pRuntime->SetReaderDocument(pDocument); + + IFXJS_Context* pContext = pRuntime->NewContext(); + ASSERT(pContext != NULL); + + // switch (type) + // { + // case CPDF_AAction::CursorEnter: + // pContext->OnScreen_MouseEnter(IsCTRLpressed(), + // IsSHIFTpressed(), pScreen); + // break; + // case CPDF_AAction::CursorExit: + // pContext->OnScreen_MouseExit(IsCTRLpressed(), + // IsSHIFTpressed(), pScreen); + // break; + // case CPDF_AAction::ButtonDown: + // pContext->OnScreen_MouseDown(IsCTRLpressed(), + // IsSHIFTpressed(), pScreen); + // break; + // case CPDF_AAction::ButtonUp: + // pContext->OnScreen_MouseUp(IsCTRLpressed(), + // IsSHIFTpressed(), pScreen); + // break; + // case CPDF_AAction::GetFocus: + // pContext->OnScreen_Focus(IsCTRLpressed(), + // IsSHIFTpressed(), pScreen); + // break; + // case CPDF_AAction::LoseFocus: + // pContext->OnScreen_Blur(IsCTRLpressed(), + // IsSHIFTpressed(), pScreen); + // break; + // case CPDF_AAction::PageOpen: + // pContext->OnScreen_Open(IsCTRLpressed(), + // IsSHIFTpressed(), pScreen); + // break; + // case CPDF_AAction::PageClose: + // pContext->OnScreen_Close(IsCTRLpressed(), + // IsSHIFTpressed(), pScreen); + // break; + // case CPDF_AAction::PageVisible: + // pContext->OnScreen_InView(IsCTRLpressed(), + // IsSHIFTpressed(), pScreen); + // break; + // case CPDF_AAction::PageInvisible: + // pContext->OnScreen_OutView(IsCTRLpressed(), + // IsSHIFTpressed(), pScreen); + // break; + // default: + // ASSERT(FALSE); + // break; + // } + + CFX_WideString csInfo; + FX_BOOL bRet = pContext->RunScript(swJS, csInfo); + if (!bRet) { + // CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), + // csInfo); + } + + pRuntime->ReleaseContext(pContext); + } + } + } else { + DoAction_NoJs(action, pDocument); + } + + for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { + CPDF_Action subaction = action.GetSubAction(i); + if (!ExecuteScreenAction(subaction, type, pDocument, pScreen, list)) + return FALSE; + } + + return TRUE; +} + +FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark(const CPDF_Action& action, + CPDFSDK_Document* pDocument, + CPDF_Bookmark* pBookmark, + CFX_PtrList& list) { + ASSERT(pDocument != NULL); + + CPDF_Dictionary* pDict = action.GetDict(); + if (list.Find(pDict)) + return FALSE; + + list.AddTail(pDict); + + CPDFDoc_Environment* pEnv = pDocument->GetEnv(); + ASSERT(pEnv); + if (action.GetType() == CPDF_Action::JavaScript) { + if (pEnv->IsJSInitiated()) { + CFX_WideString swJS = action.GetJavaScript(); + if (!swJS.IsEmpty()) { + IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); + ASSERT(pRuntime != NULL); + + pRuntime->SetReaderDocument(pDocument); + + IFXJS_Context* pContext = pRuntime->NewContext(); + ASSERT(pContext != NULL); + + pContext->OnBookmark_MouseUp(pBookmark); + + CFX_WideString csInfo; + FX_BOOL bRet = pContext->RunScript(swJS, csInfo); + if (!bRet) { + // CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), + // csInfo); + } + + pRuntime->ReleaseContext(pContext); + } + } + } else { + DoAction_NoJs(action, pDocument); + } + + for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { + CPDF_Action subaction = action.GetSubAction(i); + if (!ExecuteBookMark(subaction, pDocument, pBookmark, list)) + return FALSE; + } + + return TRUE; } -void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument, - const CPDF_Action& action) -{ - ASSERT(action); - - CPDF_Document* pPDFDocument = pDocument->GetDocument()->GetPDFDoc(); - ASSERT(pPDFDocument != NULL); - CPDFDoc_Environment* pApp = pDocument->GetEnv(); - ASSERT(pApp != NULL); - - CPDF_Dest MyDest = action.GetDest(pPDFDocument); - int nPageIndex = MyDest.GetPageIndex(pPDFDocument); - int nFitType = MyDest.GetZoomMode(); - const CPDF_Array * pMyArray = (CPDF_Array*)MyDest.GetObject(); - float* pPosAry = NULL; - int sizeOfAry = 0; - if (pMyArray != NULL) - { - pPosAry = new float[pMyArray->GetCount()]; - int j = 0; - for (int i = 2; i < (int)pMyArray->GetCount(); i++) - { - pPosAry[j++] = pMyArray->GetFloat(i); - } - sizeOfAry = j; - } - pApp->FFI_DoGoToAction(nPageIndex, nFitType, pPosAry, sizeOfAry); - if(pPosAry) - delete[] pPosAry; -} - -void CPDFSDK_ActionHandler::DoAction_GoToR(CPDFSDK_Document* pDocument, const CPDF_Action& action) -{ - -} - -void CPDFSDK_ActionHandler::DoAction_Launch(CPDFSDK_Document* pDocument, const CPDF_Action& action) -{ +void CPDFSDK_ActionHandler::DoAction_NoJs(const CPDF_Action& action, + CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); + switch (action.GetType()) { + case CPDF_Action::GoTo: + DoAction_GoTo(pDocument, action); + break; + case CPDF_Action::GoToR: + DoAction_GoToR(pDocument, action); + break; + case CPDF_Action::GoToE: + break; + case CPDF_Action::Launch: + DoAction_Launch(pDocument, action); + break; + case CPDF_Action::Thread: + break; + case CPDF_Action::URI: + DoAction_URI(pDocument, action); + break; + case CPDF_Action::Sound: + if (m_pMediaActionHandler) { + m_pMediaActionHandler->DoAction_Sound(action, pDocument); + } + break; + case CPDF_Action::Movie: + if (m_pMediaActionHandler) { + m_pMediaActionHandler->DoAction_Movie(action, pDocument); + } + break; + case CPDF_Action::Hide: + if (m_pFormActionHandler) { + m_pFormActionHandler->DoAction_Hide(action, pDocument); + } + break; + case CPDF_Action::Named: + DoAction_Named(pDocument, action); + break; + case CPDF_Action::SubmitForm: + if (m_pFormActionHandler) { + m_pFormActionHandler->DoAction_SubmitForm(action, pDocument); + } + break; + case CPDF_Action::ResetForm: + if (m_pFormActionHandler) { + m_pFormActionHandler->DoAction_ResetForm(action, pDocument); + } + break; + case CPDF_Action::ImportData: + if (m_pFormActionHandler) { + m_pFormActionHandler->DoAction_ImportData(action, pDocument); + } + break; + case CPDF_Action::JavaScript: + ASSERT(FALSE); + break; + case CPDF_Action::SetOCGState: + DoAction_SetOCGState(pDocument, action); + break; + case CPDF_Action::Rendition: + if (m_pMediaActionHandler) { + m_pMediaActionHandler->DoAction_Rendition(action, pDocument); + } + break; + case CPDF_Action::Trans: + break; + case CPDF_Action::GoTo3DView: + break; + default: + break; + } +} + +FX_BOOL CPDFSDK_ActionHandler::IsValidDocView(CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); + return TRUE; } -void CPDFSDK_ActionHandler::DoAction_URI(CPDFSDK_Document* pDocument, const CPDF_Action& action) -{ - ASSERT(action); - - CPDFDoc_Environment* pApp = pDocument->GetEnv(); - ASSERT(pApp != NULL); - - CFX_ByteString sURI = action.GetURI(pDocument->GetDocument()->GetPDFDoc()); - pApp->FFI_DoURIAction(sURI.c_str()); +void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument, + const CPDF_Action& action) { + ASSERT(action); + + CPDF_Document* pPDFDocument = pDocument->GetDocument()->GetPDFDoc(); + ASSERT(pPDFDocument != NULL); + CPDFDoc_Environment* pApp = pDocument->GetEnv(); + ASSERT(pApp != NULL); + + CPDF_Dest MyDest = action.GetDest(pPDFDocument); + int nPageIndex = MyDest.GetPageIndex(pPDFDocument); + int nFitType = MyDest.GetZoomMode(); + const CPDF_Array* pMyArray = (CPDF_Array*)MyDest.GetObject(); + float* pPosAry = NULL; + int sizeOfAry = 0; + if (pMyArray != NULL) { + pPosAry = new float[pMyArray->GetCount()]; + int j = 0; + for (int i = 2; i < (int)pMyArray->GetCount(); i++) { + pPosAry[j++] = pMyArray->GetFloat(i); + } + sizeOfAry = j; + } + pApp->FFI_DoGoToAction(nPageIndex, nFitType, pPosAry, sizeOfAry); + if (pPosAry) + delete[] pPosAry; } -void CPDFSDK_ActionHandler::DoAction_Named(CPDFSDK_Document* pDocument, const CPDF_Action& action) -{ - ASSERT(action); +void CPDFSDK_ActionHandler::DoAction_GoToR(CPDFSDK_Document* pDocument, + const CPDF_Action& action) {} + +void CPDFSDK_ActionHandler::DoAction_Launch(CPDFSDK_Document* pDocument, + const CPDF_Action& action) {} + +void CPDFSDK_ActionHandler::DoAction_URI(CPDFSDK_Document* pDocument, + const CPDF_Action& action) { + ASSERT(action); + + CPDFDoc_Environment* pApp = pDocument->GetEnv(); + ASSERT(pApp != NULL); - CFX_ByteString csName = action.GetNamedAction(); - pDocument->GetEnv()->FFI_ExecuteNamedAction(csName); + CFX_ByteString sURI = action.GetURI(pDocument->GetDocument()->GetPDFDoc()); + pApp->FFI_DoURIAction(sURI.c_str()); } +void CPDFSDK_ActionHandler::DoAction_Named(CPDFSDK_Document* pDocument, + const CPDF_Action& action) { + ASSERT(action); -void CPDFSDK_ActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument, const CPDF_Action& action) -{ + CFX_ByteString csName = action.GetNamedAction(); + pDocument->GetEnv()->FFI_ExecuteNamedAction(csName); } -void CPDFSDK_ActionHandler::RunFieldJavaScript(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, CPDF_AAction::AActionType type, - PDFSDK_FieldAction& data, const CFX_WideString& script) -{ - ASSERT(type != CPDF_AAction::Calculate); - ASSERT(type != CPDF_AAction::Format); - - ASSERT(pDocument != NULL); - - IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); - ASSERT(pRuntime != NULL); - - pRuntime->SetReaderDocument(pDocument); - - IFXJS_Context* pContext = pRuntime->NewContext(); - ASSERT(pContext != NULL); - - switch (type) - { - case CPDF_AAction::CursorEnter: - pContext->OnField_MouseEnter(data.bModifier, data.bShift, pFormField); - break; - case CPDF_AAction::CursorExit: - pContext->OnField_MouseExit(data.bModifier, data.bShift, pFormField); - break; - case CPDF_AAction::ButtonDown: - pContext->OnField_MouseDown(data.bModifier, data.bShift, pFormField); - break; - case CPDF_AAction::ButtonUp: - pContext->OnField_MouseUp(data.bModifier, data.bShift, pFormField); - break; - case CPDF_AAction::GetFocus: - pContext->OnField_Focus(data.bModifier, data.bShift, pFormField, data.sValue); - break; - case CPDF_AAction::LoseFocus: - pContext->OnField_Blur(data.bModifier, data.bShift, pFormField, data.sValue); - break; - case CPDF_AAction::KeyStroke: - pContext->OnField_Keystroke(data.sChange, data.sChangeEx, data.bKeyDown, - data.bModifier, data.nSelEnd, data.nSelStart, data.bShift, pFormField, data.sValue, - data.bWillCommit, data.bFieldFull, data.bRC); - break; - case CPDF_AAction::Validate: - pContext->OnField_Validate(data.sChange, data.sChangeEx, data.bKeyDown, data.bModifier, - data.bShift, pFormField, data.sValue, data.bRC); - break; - default: - ASSERT(FALSE); - break; - } - - CFX_WideString csInfo; - FX_BOOL bRet = pContext->RunScript(script, csInfo); - if (!bRet) - { - //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); - } - - pRuntime->ReleaseContext(pContext); -} - -void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript(CPDFSDK_Document* pDocument, const CFX_WideString& sScriptName, const CFX_WideString& script) -{ - ASSERT(pDocument != NULL); +void CPDFSDK_ActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument, + const CPDF_Action& action) {} - IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); - ASSERT(pRuntime != NULL); +void CPDFSDK_ActionHandler::RunFieldJavaScript(CPDFSDK_Document* pDocument, + CPDF_FormField* pFormField, + CPDF_AAction::AActionType type, + PDFSDK_FieldAction& data, + const CFX_WideString& script) { + ASSERT(type != CPDF_AAction::Calculate); + ASSERT(type != CPDF_AAction::Format); - pRuntime->SetReaderDocument(pDocument); + ASSERT(pDocument != NULL); + + IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); + ASSERT(pRuntime != NULL); + + pRuntime->SetReaderDocument(pDocument); + + IFXJS_Context* pContext = pRuntime->NewContext(); + ASSERT(pContext != NULL); + + switch (type) { + case CPDF_AAction::CursorEnter: + pContext->OnField_MouseEnter(data.bModifier, data.bShift, pFormField); + break; + case CPDF_AAction::CursorExit: + pContext->OnField_MouseExit(data.bModifier, data.bShift, pFormField); + break; + case CPDF_AAction::ButtonDown: + pContext->OnField_MouseDown(data.bModifier, data.bShift, pFormField); + break; + case CPDF_AAction::ButtonUp: + pContext->OnField_MouseUp(data.bModifier, data.bShift, pFormField); + break; + case CPDF_AAction::GetFocus: + pContext->OnField_Focus(data.bModifier, data.bShift, pFormField, + data.sValue); + break; + case CPDF_AAction::LoseFocus: + pContext->OnField_Blur(data.bModifier, data.bShift, pFormField, + data.sValue); + break; + case CPDF_AAction::KeyStroke: + pContext->OnField_Keystroke(data.sChange, data.sChangeEx, data.bKeyDown, + data.bModifier, data.nSelEnd, data.nSelStart, + data.bShift, pFormField, data.sValue, + data.bWillCommit, data.bFieldFull, data.bRC); + break; + case CPDF_AAction::Validate: + pContext->OnField_Validate(data.sChange, data.sChangeEx, data.bKeyDown, + data.bModifier, data.bShift, pFormField, + data.sValue, data.bRC); + break; + default: + ASSERT(FALSE); + break; + } + + CFX_WideString csInfo; + FX_BOOL bRet = pContext->RunScript(script, csInfo); + if (!bRet) { + // CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); + } + + pRuntime->ReleaseContext(pContext); +} + +void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript( + CPDFSDK_Document* pDocument, + const CFX_WideString& sScriptName, + const CFX_WideString& script) { + ASSERT(pDocument != NULL); + + IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); + ASSERT(pRuntime != NULL); - IFXJS_Context* pContext = pRuntime->NewContext(); - ASSERT(pContext != NULL); - - pContext->OnDoc_Open(pDocument, sScriptName); + pRuntime->SetReaderDocument(pDocument); - CFX_WideString csInfo; - FX_BOOL bRet = pContext->RunScript(script, csInfo); - if (!bRet) - { - //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); - } - - pRuntime->ReleaseContext(pContext); -} - -void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(CPDFSDK_Document* pDocument, CPDF_AAction::AActionType type, const CFX_WideString& script) -{ - ASSERT(pDocument != NULL); - - IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); - ASSERT(pRuntime != NULL); - - pRuntime->SetReaderDocument(pDocument); - - IFXJS_Context* pContext = pRuntime->NewContext(); - ASSERT(pContext != NULL); - - switch (type) - { - case CPDF_AAction::OpenPage: - pContext->OnPage_Open(pDocument); - break; - case CPDF_AAction::ClosePage: - pContext->OnPage_Close(pDocument); - break; - case CPDF_AAction::CloseDocument: - pContext->OnDoc_WillClose(pDocument); - break; - case CPDF_AAction::SaveDocument: - pContext->OnDoc_WillSave(pDocument); - break; - case CPDF_AAction::DocumentSaved: - pContext->OnDoc_DidSave(pDocument); - break; - case CPDF_AAction::PrintDocument: - pContext->OnDoc_WillPrint(pDocument); - break; - case CPDF_AAction::DocumentPrinted: - pContext->OnDoc_DidPrint(pDocument); - break; - case CPDF_AAction::PageVisible: - pContext->OnPage_InView(pDocument); - break; - case CPDF_AAction::PageInvisible: - pContext->OnPage_OutView(pDocument); - break; - default: - ASSERT(FALSE); - break; - } - - CFX_WideString csInfo; - FX_BOOL bRet = pContext->RunScript(script, csInfo); - if (!bRet) - { - //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); - } + IFXJS_Context* pContext = pRuntime->NewContext(); + ASSERT(pContext != NULL); - pRuntime->ReleaseContext(pContext); + pContext->OnDoc_Open(pDocument, sScriptName); + + CFX_WideString csInfo; + FX_BOOL bRet = pContext->RunScript(script, csInfo); + if (!bRet) { + // CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); + } + + pRuntime->ReleaseContext(pContext); } +void CPDFSDK_ActionHandler::RunDocumentPageJavaScript( + CPDFSDK_Document* pDocument, + CPDF_AAction::AActionType type, + const CFX_WideString& script) { + ASSERT(pDocument != NULL); -FX_BOOL CPDFSDK_FormActionHandler::DoAction_Hide(const CPDF_Action& action, CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); + IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); + ASSERT(pRuntime != NULL); + + pRuntime->SetReaderDocument(pDocument); + + IFXJS_Context* pContext = pRuntime->NewContext(); + ASSERT(pContext != NULL); + + switch (type) { + case CPDF_AAction::OpenPage: + pContext->OnPage_Open(pDocument); + break; + case CPDF_AAction::ClosePage: + pContext->OnPage_Close(pDocument); + break; + case CPDF_AAction::CloseDocument: + pContext->OnDoc_WillClose(pDocument); + break; + case CPDF_AAction::SaveDocument: + pContext->OnDoc_WillSave(pDocument); + break; + case CPDF_AAction::DocumentSaved: + pContext->OnDoc_DidSave(pDocument); + break; + case CPDF_AAction::PrintDocument: + pContext->OnDoc_WillPrint(pDocument); + break; + case CPDF_AAction::DocumentPrinted: + pContext->OnDoc_DidPrint(pDocument); + break; + case CPDF_AAction::PageVisible: + pContext->OnPage_InView(pDocument); + break; + case CPDF_AAction::PageInvisible: + pContext->OnPage_OutView(pDocument); + break; + default: + ASSERT(FALSE); + break; + } + + CFX_WideString csInfo; + FX_BOOL bRet = pContext->RunScript(script, csInfo); + if (!bRet) { + // CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); + } + + pRuntime->ReleaseContext(pContext); +} + +FX_BOOL CPDFSDK_FormActionHandler::DoAction_Hide(const CPDF_Action& action, + CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - if (pInterForm->DoAction_Hide(action)) - { - pDocument->SetChangeMark(); - return TRUE; - } + if (pInterForm->DoAction_Hide(action)) { + pDocument->SetChangeMark(); + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_FormActionHandler::DoAction_SubmitForm(const CPDF_Action& action, CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); +FX_BOOL CPDFSDK_FormActionHandler::DoAction_SubmitForm( + const CPDF_Action& action, + CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - return pInterForm->DoAction_SubmitForm(action); + return pInterForm->DoAction_SubmitForm(action); } -FX_BOOL CPDFSDK_FormActionHandler::DoAction_ResetForm(const CPDF_Action& action, CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); +FX_BOOL CPDFSDK_FormActionHandler::DoAction_ResetForm( + const CPDF_Action& action, + CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - if (pInterForm->DoAction_ResetForm(action)) - { - return TRUE; - } + if (pInterForm->DoAction_ResetForm(action)) { + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_FormActionHandler::DoAction_ImportData(const CPDF_Action& action, CPDFSDK_Document* pDocument) -{ - ASSERT(pDocument != NULL); +FX_BOOL CPDFSDK_FormActionHandler::DoAction_ImportData( + const CPDF_Action& action, + CPDFSDK_Document* pDocument) { + ASSERT(pDocument != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - if (pInterForm->DoAction_ImportData(action)) - { - pDocument->SetChangeMark(); - return TRUE; - } + if (pInterForm->DoAction_ImportData(action)) { + pDocument->SetChangeMark(); + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Rendition(const CPDF_Action& action, CPDFSDK_Document* pDocument) -{ - return FALSE; +FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Rendition( + const CPDF_Action& action, + CPDFSDK_Document* pDocument) { + return FALSE; } -FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Sound(const CPDF_Action& action, CPDFSDK_Document* pDocument) -{ - return FALSE; +FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Sound( + const CPDF_Action& action, + CPDFSDK_Document* pDocument) { + return FALSE; } -FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Movie(const CPDF_Action& action, CPDFSDK_Document* pDocument) -{ - return FALSE; +FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Movie( + const CPDF_Action& action, + CPDFSDK_Document* pDocument) { + return FALSE; } diff --git a/fpdfsdk/src/fsdk_annothandler.cpp b/fpdfsdk/src/fsdk_annothandler.cpp index ebdd67e4ef..a729fb78eb 100644 --- a/fpdfsdk/src/fsdk_annothandler.cpp +++ b/fpdfsdk/src/fsdk_annothandler.cpp @@ -11,1347 +11,1310 @@ #include "../include/formfiller/FFL_FormFiller.h" #include "../include/fsdk_annothandler.h" +CPDFSDK_AnnotHandlerMgr::CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp) { + m_pApp = pApp; -CPDFSDK_AnnotHandlerMgr::CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp) -{ - m_pApp = pApp; + CPDFSDK_BFAnnotHandler* pHandler = new CPDFSDK_BFAnnotHandler(m_pApp); + pHandler->SetFormFiller(m_pApp->GetIFormFiller()); + RegisterAnnotHandler(pHandler); - CPDFSDK_BFAnnotHandler* pHandler = new CPDFSDK_BFAnnotHandler(m_pApp); - pHandler->SetFormFiller(m_pApp->GetIFormFiller()); - RegisterAnnotHandler(pHandler); - - CPDFSDK_XFAAnnotHandler* pXFAAnnotHandler = new CPDFSDK_XFAAnnotHandler(m_pApp); - RegisterAnnotHandler(pXFAAnnotHandler); + CPDFSDK_XFAAnnotHandler* pXFAAnnotHandler = + new CPDFSDK_XFAAnnotHandler(m_pApp); + RegisterAnnotHandler(pXFAAnnotHandler); } -CPDFSDK_AnnotHandlerMgr::~CPDFSDK_AnnotHandlerMgr() -{ - for(int i=0; iGetType()) == NULL); + ASSERT(GetAnnotHandler(pAnnotHandler->GetType()) == NULL); - m_Handlers.Add(pAnnotHandler); - m_mapType2Handler.SetAt(pAnnotHandler->GetType(), (void*)pAnnotHandler); + m_Handlers.Add(pAnnotHandler); + m_mapType2Handler.SetAt(pAnnotHandler->GetType(), (void*)pAnnotHandler); } -void CPDFSDK_AnnotHandlerMgr::UnRegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler) -{ - ASSERT(pAnnotHandler != NULL); +void CPDFSDK_AnnotHandlerMgr::UnRegisterAnnotHandler( + IPDFSDK_AnnotHandler* pAnnotHandler) { + ASSERT(pAnnotHandler != NULL); - m_mapType2Handler.RemoveKey(pAnnotHandler->GetType()); + m_mapType2Handler.RemoveKey(pAnnotHandler->GetType()); - for (int i=0, sz=m_Handlers.GetSize(); iGetSubType())) - { - return pAnnotHandler->NewAnnot(pAnnot, pPageView); - } + if (IPDFSDK_AnnotHandler* pAnnotHandler = + GetAnnotHandler(pAnnot->GetSubType())) { + return pAnnotHandler->NewAnnot(pAnnot, pPageView); + } - return new CPDFSDK_BAAnnot(pAnnot, pPageView); + return new CPDFSDK_BAAnnot(pAnnot, pPageView); } -CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(IXFA_Widget* pAnnot, CPDFSDK_PageView* pPageView) -{ - ASSERT(pAnnot != NULL); - ASSERT(pPageView != NULL); +CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(IXFA_Widget* pAnnot, + CPDFSDK_PageView* pPageView) { + ASSERT(pAnnot != NULL); + ASSERT(pPageView != NULL); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(FSDK_XFAWIDGET_TYPENAME)) - { - return pAnnotHandler->NewAnnot(pAnnot, pPageView); - } + if (IPDFSDK_AnnotHandler* pAnnotHandler = + GetAnnotHandler(FSDK_XFAWIDGET_TYPENAME)) { + return pAnnotHandler->NewAnnot(pAnnot, pPageView); + } - return NULL; + return NULL; } -void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); +void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); - pAnnot->GetPDFPage(); + pAnnot->GetPDFPage(); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - pAnnotHandler->OnRelease(pAnnot); - pAnnotHandler->ReleaseAnnot(pAnnot); - } - else - { - delete (CPDFSDK_Annot*)pAnnot; - } + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + pAnnotHandler->OnRelease(pAnnot); + pAnnotHandler->ReleaseAnnot(pAnnot); + } else { + delete (CPDFSDK_Annot*)pAnnot; + } } -void CPDFSDK_AnnotHandlerMgr::Annot_OnCreate(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); +void CPDFSDK_AnnotHandlerMgr::Annot_OnCreate(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); - CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); + CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); - CPDFSDK_DateTime curTime; - pPDFAnnot->GetAnnotDict()->SetAtString("M", curTime.ToPDFDateTimeString()); - pPDFAnnot->GetAnnotDict()->SetAtNumber("F", 0); + CPDFSDK_DateTime curTime; + pPDFAnnot->GetAnnotDict()->SetAtString("M", curTime.ToPDFDateTimeString()); + pPDFAnnot->GetAnnotDict()->SetAtNumber("F", 0); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - pAnnotHandler->OnCreate(pAnnot); - } + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + pAnnotHandler->OnCreate(pAnnot); + } } -void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); +void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - pAnnotHandler->OnLoad(pAnnot); - } + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + pAnnotHandler->OnLoad(pAnnot); + } } -IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(CPDFSDK_Annot* pAnnot) const -{ - ASSERT(pAnnot != NULL); - - CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); - if (pPDFAnnot) - return GetAnnotHandler(pPDFAnnot->GetSubType()); - else if (pAnnot->GetXFAWidget()) - return GetAnnotHandler(FSDK_XFAWIDGET_TYPENAME); - return NULL; -} - -IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(const CFX_ByteString& sType) const -{ - void* pRet = NULL; - m_mapType2Handler.Lookup(sType, pRet); - return (IPDFSDK_AnnotHandler*)pRet; -} +IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler( + CPDFSDK_Annot* pAnnot) const { + ASSERT(pAnnot != NULL); -void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,FX_DWORD dwFlags) -{ - ASSERT(pAnnot != NULL); - - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - pAnnotHandler->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); - } - else - { - if (!pAnnot->IsXFAField()) - ((CPDFSDK_BAAnnot*)pAnnot)->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); - } -} - - -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - return pAnnotHandler->OnLButtonDown(pPageView, pAnnot, nFlags, point); - } - return FALSE; -} -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) - { - ASSERT(pAnnot != NULL); - - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - return pAnnotHandler->OnLButtonUp(pPageView, pAnnot, nFlags, point); - } - return FALSE; - } -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - return pAnnotHandler->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); - } - return FALSE; + CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); + if (pPDFAnnot) + return GetAnnotHandler(pPDFAnnot->GetSubType()); + else if (pAnnot->GetXFAWidget()) + return GetAnnotHandler(FSDK_XFAWIDGET_TYPENAME); + return NULL; } -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - return pAnnotHandler->OnMouseMove(pPageView, pAnnot, nFlags, point); - } - return FALSE; +IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler( + const CFX_ByteString& sType) const { + void* pRet = NULL; + m_mapType2Handler.Lookup(sType, pRet); + return (IPDFSDK_AnnotHandler*)pRet; } -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - return pAnnotHandler->OnMouseWheel(pPageView, pAnnot,nFlags,zDelta, point); - } - return FALSE; +void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags) { + ASSERT(pAnnot != NULL); + + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + pAnnotHandler->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); + } else { + if (!pAnnot->IsXFAField()) + ((CPDFSDK_BAAnnot*)pAnnot) + ->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); + } } -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - return pAnnotHandler->OnRButtonDown(pPageView, pAnnot, nFlags, point); +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown( + CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + return pAnnotHandler->OnLButtonDown(pPageView, pAnnot, nFlags, point); + } + return FALSE; +} +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + return pAnnotHandler->OnLButtonUp(pPageView, pAnnot, nFlags, point); + } + return FALSE; +} +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk( + CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + return pAnnotHandler->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); + } + return FALSE; +} +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + return pAnnotHandler->OnMouseMove(pPageView, pAnnot, nFlags, point); + } + return FALSE; +} +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + short zDelta, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + return pAnnotHandler->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, + point); + } + return FALSE; +} +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown( + CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + return pAnnotHandler->OnRButtonDown(pPageView, pAnnot, nFlags, point); + } + return FALSE; +} +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + return pAnnotHandler->OnRButtonUp(pPageView, pAnnot, nFlags, point); + } + return FALSE; +} + +void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + ASSERT(pAnnot != NULL); + + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + pAnnotHandler->OnMouseEnter(pPageView, pAnnot, nFlag); + } + return; +} + +void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + ASSERT(pAnnot != NULL); + + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + pAnnotHandler->OnMouseExit(pPageView, pAnnot, nFlag); + } + return; +} + +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot, + FX_DWORD nChar, + FX_DWORD nFlags) { + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + return pAnnotHandler->OnChar(pAnnot, nChar, nFlags); + } + return FALSE; +} + +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, + int nKeyCode, + int nFlag) { + if (!m_pApp->FFI_IsCTRLKeyDown(nFlag) && !m_pApp->FFI_IsALTKeyDown(nFlag)) { + CPDFSDK_PageView* pPage = pAnnot->GetPageView(); + CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot(); + if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) { + CPDFSDK_Annot* pNext = + GetNextAnnot(pFocusAnnot, !m_pApp->FFI_IsSHIFTKeyDown(nFlag)); + + if (pNext && pNext != pFocusAnnot) { + CPDFSDK_Document* pDocument = pPage->GetSDKDocument(); + pDocument->SetFocusAnnot(pNext); + return TRUE; + } } - return FALSE; -} -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); + } - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - return pAnnotHandler->OnRButtonUp(pPageView, pAnnot, nFlags, point); - } - return FALSE; + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + return pAnnotHandler->OnKeyDown(pAnnot, nKeyCode, nFlag); + } + return FALSE; } - -void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - ASSERT(pAnnot != NULL); - - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - pAnnotHandler->OnMouseEnter(pPageView, pAnnot, nFlag); - } - return ; +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, + int nKeyCode, + int nFlag) { + return FALSE; } -void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - ASSERT(pAnnot != NULL); +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + ASSERT(pAnnot != NULL); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - pAnnotHandler->OnMouseExit(pPageView, pAnnot, nFlag); + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + if (pAnnotHandler->OnSetFocus(pAnnot, nFlag)) { + CPDFSDK_PageView* pPage = pAnnot->GetPageView(); + pPage->GetSDKDocument(); + return TRUE; } - return; + } + return FALSE; } -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags) -{ - - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - return pAnnotHandler->OnChar(pAnnot,nChar, nFlags); - } - return FALSE; +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + ASSERT(pAnnot); + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) + return pAnnotHandler->OnKillFocus(pAnnot, nFlag); + return FALSE; } -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) -{ - - if (!m_pApp->FFI_IsCTRLKeyDown(nFlag) && !m_pApp->FFI_IsALTKeyDown(nFlag)) - { - CPDFSDK_PageView* pPage = pAnnot->GetPageView(); - CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot(); - if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) - { - CPDFSDK_Annot* pNext = GetNextAnnot(pFocusAnnot, !m_pApp->FFI_IsSHIFTKeyDown(nFlag)); - - if(pNext && pNext != pFocusAnnot) - { - CPDFSDK_Document* pDocument = pPage->GetSDKDocument(); - pDocument->SetFocusAnnot(pNext); - return TRUE; - } - } - } - - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - return pAnnotHandler->OnKeyDown(pAnnot,nKeyCode, nFlag); - } - return FALSE; -} -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) -{ - return FALSE; -} +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus( + CPDFSDK_Annot* pSetAnnot, + CPDFSDK_Annot* pKillAnnot) { + FX_BOOL bXFA = (pSetAnnot && pSetAnnot->GetXFAWidget()) || + (pKillAnnot && pKillAnnot->GetXFAWidget()); -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - ASSERT(pAnnot != NULL); + if (bXFA) { + if (IPDFSDK_AnnotHandler* pXFAAnnotHandler = + GetAnnotHandler(FSDK_XFAWIDGET_TYPENAME)) + return pXFAAnnotHandler->OnXFAChangedFocus(pKillAnnot, pSetAnnot); + } - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - if (pAnnotHandler->OnSetFocus(pAnnot, nFlag)) - { - CPDFSDK_PageView* pPage = pAnnot->GetPageView(); - pPage->GetSDKDocument(); - return TRUE; - } - } - return FALSE; + return TRUE; } -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - ASSERT(pAnnot); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - return pAnnotHandler->OnKillFocus(pAnnot, nFlag); +CPDF_Rect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox( + CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot); + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) + return pAnnotHandler->GetViewBBox(pPageView, pAnnot); - return FALSE; + return pAnnot->GetRect(); } -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus(CPDFSDK_Annot* pSetAnnot,CPDFSDK_Annot* pKillAnnot) -{ - FX_BOOL bXFA = (pSetAnnot && pSetAnnot->GetXFAWidget()) || - (pKillAnnot && pKillAnnot->GetXFAWidget()); - - if (bXFA) - { - if (IPDFSDK_AnnotHandler* pXFAAnnotHandler = GetAnnotHandler(FSDK_XFAWIDGET_TYPENAME)) - return pXFAAnnotHandler->OnXFAChangedFocus(pKillAnnot, pSetAnnot); - } - - return TRUE; +FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + const CPDF_Point& point) { + ASSERT(pAnnot); + if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { + if (pAnnotHandler->CanAnswer(pAnnot)) + return pAnnotHandler->HitTest(pPageView, pAnnot, point); + } + return FALSE; } -CPDF_Rect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - return pAnnotHandler->GetViewBBox(pPageView, pAnnot); +CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, + FX_BOOL bNext) { + CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView(); + CPDFXFA_Page* pPage = pPageView->GetPDFXFAPage(); + if (pPage == NULL) + return NULL; + if (pPage->GetPDFPage()) { // for pdf annots. + CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), pSDKAnnot->GetType(), ""); + CPDFSDK_Annot* pNext = + bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); + return pNext; + } + // for xfa annots + IXFA_WidgetIterator* pWidgetIterator = + pPage->GetXFAPageView()->CreateWidgetIterator( + XFA_TRAVERSEWAY_Tranvalse, XFA_WIDGETFILTER_Visible | + XFA_WIDGETFILTER_Viewable | + XFA_WIDGETFILTER_Field); + if (pWidgetIterator == NULL) + return NULL; + if (pWidgetIterator->GetCurrentWidget() != pSDKAnnot->GetXFAWidget()) + pWidgetIterator->SetCurrentWidget(pSDKAnnot->GetXFAWidget()); + IXFA_Widget* hNextFocus = NULL; + hNextFocus = + bNext ? pWidgetIterator->MoveToNext() : pWidgetIterator->MoveToPrevious(); + if (hNextFocus == NULL && pSDKAnnot != NULL) + hNextFocus = pWidgetIterator->MoveToFirst(); - return pAnnot->GetRect(); + pWidgetIterator->Release(); + return pPageView->GetAnnotByXFAWidget(hNextFocus); } -FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point) -{ - ASSERT(pAnnot); - if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) - { - if (pAnnotHandler->CanAnswer(pAnnot)) - return pAnnotHandler->HitTest(pPageView, pAnnot, point); - } +FX_BOOL CPDFSDK_BFAnnotHandler::CanAnswer(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot->GetType() == "Widget"); + if (pAnnot->GetSubType() == BFFT_SIGNATURE) return FALSE; -} -CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,FX_BOOL bNext) -{ - CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView(); - CPDFXFA_Page* pPage = pPageView->GetPDFXFAPage(); - if (pPage == NULL) - return NULL; - if (pPage->GetPDFPage()) { // for pdf annots. - CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), pSDKAnnot->GetType(), ""); - CPDFSDK_Annot* pNext = bNext ? - ai.GetNextAnnot(pSDKAnnot) : - ai.GetPrevAnnot(pSDKAnnot); - return pNext; - } - // for xfa annots - IXFA_WidgetIterator* pWidgetIterator = pPage->GetXFAPageView()->CreateWidgetIterator(XFA_TRAVERSEWAY_Tranvalse, XFA_WIDGETFILTER_Visible | XFA_WIDGETFILTER_Viewable | XFA_WIDGETFILTER_Field); - if (pWidgetIterator == NULL) - return NULL; - if (pWidgetIterator->GetCurrentWidget() != pSDKAnnot->GetXFAWidget()) - pWidgetIterator->SetCurrentWidget(pSDKAnnot->GetXFAWidget()); - IXFA_Widget* hNextFocus = NULL; - hNextFocus = bNext?pWidgetIterator->MoveToNext():pWidgetIterator->MoveToPrevious(); - if (hNextFocus == NULL && pSDKAnnot != NULL) - hNextFocus = pWidgetIterator->MoveToFirst(); - - pWidgetIterator->Release(); - return pPageView->GetAnnotByXFAWidget(hNextFocus); -} - -FX_BOOL CPDFSDK_BFAnnotHandler::CanAnswer(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot->GetType() == "Widget"); - if (pAnnot->GetSubType() == BFFT_SIGNATURE) - return FALSE; - - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - if (!pWidget->IsVisible()) - return FALSE; + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + if (!pWidget->IsVisible()) + return FALSE; - int nFieldFlags = pWidget->GetFieldFlags(); - if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY) - return FALSE; + int nFieldFlags = pWidget->GetFieldFlags(); + if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY) + return FALSE; - if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON) - return TRUE; + if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON) + return TRUE; - CPDF_Page* pPage = pWidget->GetPDFPage(); - CPDF_Document* pDocument = pPage->m_pDocument; - FX_DWORD dwPermissions = pDocument->GetUserPermissions(); - return (dwPermissions & FPDFPERM_FILL_FORM) || - (dwPermissions & FPDFPERM_ANNOT_FORM); + CPDF_Page* pPage = pWidget->GetPDFPage(); + CPDF_Document* pDocument = pPage->m_pDocument; + FX_DWORD dwPermissions = pDocument->GetUserPermissions(); + return (dwPermissions & FPDFPERM_FILL_FORM) || + (dwPermissions & FPDFPERM_ANNOT_FORM); } -CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) -{ - CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument(); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm(); - CPDF_FormControl* pCtrl = CPDFSDK_Widget::GetFormControl(pInterForm->GetInterForm(), pAnnot->GetAnnotDict()); - if (!pCtrl) - return nullptr; +CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(CPDF_Annot* pAnnot, + CPDFSDK_PageView* pPage) { + CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument(); + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm(); + CPDF_FormControl* pCtrl = CPDFSDK_Widget::GetFormControl( + pInterForm->GetInterForm(), pAnnot->GetAnnotDict()); + if (!pCtrl) + return nullptr; - CPDFSDK_Widget* pWidget = new CPDFSDK_Widget(pAnnot, pPage, pInterForm); - pInterForm->AddMap(pCtrl, pWidget); - CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); - if (pPDFInterForm && pPDFInterForm->NeedConstructAP()) - pWidget->ResetAppearance(nullptr, FALSE); + CPDFSDK_Widget* pWidget = new CPDFSDK_Widget(pAnnot, pPage, pInterForm); + pInterForm->AddMap(pCtrl, pWidget); + CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); + if (pPDFInterForm && pPDFInterForm->NeedConstructAP()) + pWidget->ResetAppearance(nullptr, FALSE); - return pWidget; + return pWidget; } -CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(IXFA_Widget* hWidget, CPDFSDK_PageView* pPage) -{ - return NULL; +CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(IXFA_Widget* hWidget, + CPDFSDK_PageView* pPage) { + return NULL; } -void CPDFSDK_BFAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); +void CPDFSDK_BFAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); - if (m_pFormFiller) - m_pFormFiller->OnDelete(pAnnot); + if (m_pFormFiller) + m_pFormFiller->OnDelete(pAnnot); - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm(); + ASSERT(pInterForm != NULL); - CPDF_FormControl* pCtrol = pWidget->GetFormControl(); - pInterForm->RemoveMap(pCtrol); + CPDF_FormControl* pCtrol = pWidget->GetFormControl(); + pInterForm->RemoveMap(pCtrol); - - delete pWidget; -} - - -void CPDFSDK_BFAnnotHandler::OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, FX_DWORD dwFlags) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); - - if (sSubType == BFFT_SIGNATURE) - { - ((CPDFSDK_BAAnnot*)pAnnot)->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); - } - else - { - if (m_pFormFiller) - { - m_pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); - } - } + delete pWidget; } -void CPDFSDK_BFAnnotHandler::OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +void CPDFSDK_BFAnnotHandler::OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - m_pFormFiller->OnMouseEnter(pPageView, pAnnot, nFlag); + if (sSubType == BFFT_SIGNATURE) { + ((CPDFSDK_BAAnnot*)pAnnot) + ->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); + } else { + if (m_pFormFiller) { + m_pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); } - - + } } -void CPDFSDK_BFAnnotHandler::OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - m_pFormFiller->OnMouseExit(pPageView, pAnnot, nFlag); - } +void CPDFSDK_BFAnnotHandler::OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + m_pFormFiller->OnMouseEnter(pPageView, pAnnot, nFlag); + } } -FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +void CPDFSDK_BFAnnotHandler::OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + m_pFormFiller->OnMouseExit(pPageView, pAnnot, nFlag); + } +} +FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); + + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point); - } - - return FALSE; + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point); + } + return FALSE; } +FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + short zDelta, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); -FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); - - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta,point); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, + point); + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point); + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_BFAnnotHandler::OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +FX_BOOL CPDFSDK_BFAnnotHandler::OnChar(CPDFSDK_Annot* pAnnot, + FX_DWORD nChar, + FX_DWORD nFlags) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnChar(pAnnot,nChar, nFlags); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnChar(pAnnot, nChar, nFlags); + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyDown(CPDFSDK_Annot* pAnnot, + int nKeyCode, + int nFlag) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnKeyDown(pAnnot,nKeyCode, nFlag); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlag); + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) -{ - - return FALSE; +FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyUp(CPDFSDK_Annot* pAnnot, + int nKeyCode, + int nFlag) { + return FALSE; } -void CPDFSDK_BFAnnotHandler::OnCreate(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +void CPDFSDK_BFAnnotHandler::OnCreate(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - m_pFormFiller->OnCreate(pAnnot); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + m_pFormFiller->OnCreate(pAnnot); + } } -void CPDFSDK_BFAnnotHandler::OnLoad(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); +void CPDFSDK_BFAnnotHandler::OnLoad(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); - CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); - ASSERT(pPageView != NULL); + CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); + ASSERT(pPageView != NULL); - CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); + CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument(); + ASSERT(pSDKDoc != NULL); - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - ASSERT(pDoc != NULL); + CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); + ASSERT(pDoc != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { + if (sSubType == BFFT_SIGNATURE) { + } else { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; + if (!pWidget->IsAppearanceValid()) + pWidget->ResetAppearance(NULL, FALSE); + + int nFieldType = pWidget->GetFieldType(); + if (nFieldType == FIELDTYPE_TEXTFIELD || nFieldType == FIELDTYPE_COMBOBOX) { + FX_BOOL bFormated = FALSE; + CFX_WideString sValue = pWidget->OnFormat(bFormated); + if (bFormated && nFieldType == FIELDTYPE_COMBOBOX) { + pWidget->ResetAppearance(sValue.c_str(), FALSE); + } } - else - { - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; - if (!pWidget->IsAppearanceValid()) - pWidget->ResetAppearance(NULL, FALSE); - - int nFieldType = pWidget->GetFieldType(); - if (nFieldType == FIELDTYPE_TEXTFIELD || nFieldType == FIELDTYPE_COMBOBOX) - { - FX_BOOL bFormated = FALSE; - CFX_WideString sValue = pWidget->OnFormat(bFormated); - if (bFormated && nFieldType == FIELDTYPE_COMBOBOX) - { - pWidget->ResetAppearance(sValue.c_str(), FALSE); - } - } - - if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) - { - if (!pWidget->IsAppearanceValid() && !pWidget->GetValue().IsEmpty()) - pWidget->ResetAppearance(FALSE); - } - - - if (m_pFormFiller) - m_pFormFiller->OnLoad(pAnnot); + + if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) { + if (!pWidget->IsAppearanceValid() && !pWidget->GetValue().IsEmpty()) + pWidget->ResetAppearance(FALSE); } + + if (m_pFormFiller) + m_pFormFiller->OnLoad(pAnnot); + } } -FX_BOOL CPDFSDK_BFAnnotHandler::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +FX_BOOL CPDFSDK_BFAnnotHandler::OnSetFocus(CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnSetFocus(pAnnot,nFlag); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnSetFocus(pAnnot, nFlag); + } - return TRUE; + return TRUE; } -FX_BOOL CPDFSDK_BFAnnotHandler::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +FX_BOOL CPDFSDK_BFAnnotHandler::OnKillFocus(CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->OnKillFocus(pAnnot,nFlag); - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->OnKillFocus(pAnnot, nFlag); + } - return TRUE; + return TRUE; } -CPDF_Rect CPDFSDK_BFAnnotHandler::GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); - CFX_ByteString sSubType = pAnnot->GetSubType(); +CPDF_Rect CPDFSDK_BFAnnotHandler::GetViewBBox(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); + CFX_ByteString sSubType = pAnnot->GetSubType(); - if (sSubType == BFFT_SIGNATURE) - { - } - else - { - if (m_pFormFiller) - return m_pFormFiller->GetViewBBox(pPageView, pAnnot); - - } + if (sSubType == BFFT_SIGNATURE) { + } else { + if (m_pFormFiller) + return m_pFormFiller->GetViewBBox(pPageView, pAnnot); + } - return CPDF_Rect(0,0,0,0); + return CPDF_Rect(0, 0, 0, 0); } -FX_BOOL CPDFSDK_BFAnnotHandler::HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point) -{ - ASSERT(pPageView); - ASSERT(pAnnot); +FX_BOOL CPDFSDK_BFAnnotHandler::HitTest(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + const CPDF_Point& point) { + ASSERT(pPageView); + ASSERT(pAnnot); - CPDF_Rect rect = GetViewBBox(pPageView, pAnnot); - return rect.Contains(point.x, point.y); + CPDF_Rect rect = GetViewBBox(pPageView, pAnnot); + return rect.Contains(point.x, point.y); } -//CPDFSDK_XFAAnnotHandler +// CPDFSDK_XFAAnnotHandler -#define FWL_WGTHITTEST_Unknown 0 -#define FWL_WGTHITTEST_Client 1 //arrow -#define FWL_WGTHITTEST_Titlebar 11 //caption -#define FWL_WGTHITTEST_HScrollBar 15 -#define FWL_WGTHITTEST_VScrollBar 16 -#define FWL_WGTHITTEST_Border 17 -#define FWL_WGTHITTEST_Edit 19 -#define FWL_WGTHITTEST_HyperLink 20 +#define FWL_WGTHITTEST_Unknown 0 +#define FWL_WGTHITTEST_Client 1 // arrow +#define FWL_WGTHITTEST_Titlebar 11 // caption +#define FWL_WGTHITTEST_HScrollBar 15 +#define FWL_WGTHITTEST_VScrollBar 16 +#define FWL_WGTHITTEST_Border 17 +#define FWL_WGTHITTEST_Edit 19 +#define FWL_WGTHITTEST_HyperLink 20 -CPDFSDK_XFAAnnotHandler::CPDFSDK_XFAAnnotHandler(CPDFDoc_Environment* pApp) : - m_pApp(pApp) -{ +CPDFSDK_XFAAnnotHandler::CPDFSDK_XFAAnnotHandler(CPDFDoc_Environment* pApp) + : m_pApp(pApp) {} +CPDFSDK_Annot* CPDFSDK_XFAAnnotHandler::NewAnnot(IXFA_Widget* pAnnot, + CPDFSDK_PageView* pPage) { + CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument(); + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm(); + CPDFSDK_XFAWidget* pWidget = new CPDFSDK_XFAWidget(pAnnot, pPage, pInterForm); + pInterForm->AddXFAMap(pAnnot, pWidget); + return pWidget; } -CPDFSDK_Annot* CPDFSDK_XFAAnnotHandler::NewAnnot(IXFA_Widget* pAnnot, CPDFSDK_PageView* pPage) -{ - CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument(); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm(); - CPDFSDK_XFAWidget* pWidget = new CPDFSDK_XFAWidget(pAnnot, pPage, pInterForm); - pInterForm->AddXFAMap(pAnnot, pWidget); - return pWidget; +FX_BOOL CPDFSDK_XFAAnnotHandler::CanAnswer(CPDFSDK_Annot* pAnnot) { + return pAnnot->GetXFAWidget() != NULL; } -FX_BOOL CPDFSDK_XFAAnnotHandler::CanAnswer(CPDFSDK_Annot* pAnnot) -{ - return pAnnot->GetXFAWidget() != NULL; -} - -void CPDFSDK_XFAAnnotHandler::OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, FX_DWORD dwFlags) -{ - ASSERT(pPageView != NULL); - ASSERT(pAnnot != NULL); +void CPDFSDK_XFAAnnotHandler::OnDraw(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_DWORD dwFlags) { + ASSERT(pPageView != NULL); + ASSERT(pAnnot != NULL); - CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); + CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument(); + ASSERT(pSDKDoc != NULL); - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - CFX_Graphics gs; - gs.Create(pDevice); + CFX_Graphics gs; + gs.Create(pDevice); - CFX_Matrix mt; - mt = *(CFX_Matrix*)pUser2Device; + CFX_Matrix mt; + mt = *(CFX_Matrix*)pUser2Device; - IXFA_Widget* hWidget = pAnnot->GetXFAWidget(); - ASSERT(hWidget != NULL); + IXFA_Widget* hWidget = pAnnot->GetXFAWidget(); + ASSERT(hWidget != NULL); - FX_BOOL bIsHighlight = FALSE; - if (pSDKDoc->GetFocusAnnot() != pAnnot) - bIsHighlight = TRUE; + FX_BOOL bIsHighlight = FALSE; + if (pSDKDoc->GetFocusAnnot() != pAnnot) + bIsHighlight = TRUE; - pWidgetHandler->RenderWidget(pAnnot->GetXFAWidget(), &gs, &mt, bIsHighlight); - - // to do highlight and shadow + pWidgetHandler->RenderWidget(pAnnot->GetXFAWidget(), &gs, &mt, bIsHighlight); + // to do highlight and shadow } -void CPDFSDK_XFAAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); +void CPDFSDK_XFAAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); - CPDFSDK_XFAWidget* pWidget = (CPDFSDK_XFAWidget*)pAnnot; - CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_XFAWidget* pWidget = (CPDFSDK_XFAWidget*)pAnnot; + CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm(); + ASSERT(pInterForm != NULL); - pInterForm->RemoveXFAMap(pWidget->GetXFAWidget()); + pInterForm->RemoveXFAMap(pWidget->GetXFAWidget()); - delete pWidget; + delete pWidget; } -CPDF_Rect CPDFSDK_XFAAnnotHandler::GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); +CPDF_Rect CPDFSDK_XFAAnnotHandler::GetViewBBox(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - XFA_ELEMENT eType = pWidgetHandler->GetDataAcc(pAnnot->GetXFAWidget())->GetUIType(); - CFX_RectF rcBBox; - if (eType == XFA_ELEMENT_Signature) - pWidgetHandler->GetBBox (pAnnot->GetXFAWidget(), rcBBox, XFA_WIDGETSTATUS_Visible, TRUE); - else - pWidgetHandler->GetBBox (pAnnot->GetXFAWidget(), rcBBox, 0); + XFA_ELEMENT eType = + pWidgetHandler->GetDataAcc(pAnnot->GetXFAWidget())->GetUIType(); + CFX_RectF rcBBox; + if (eType == XFA_ELEMENT_Signature) + pWidgetHandler->GetBBox(pAnnot->GetXFAWidget(), rcBBox, + XFA_WIDGETSTATUS_Visible, TRUE); + else + pWidgetHandler->GetBBox(pAnnot->GetXFAWidget(), rcBBox, 0); - CFX_FloatRect rcWidget(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width, rcBBox.top+rcBBox.height); - rcWidget.left -= 1.0f; - rcWidget.right += 1.0f; - rcWidget.bottom -= 1.0f; - rcWidget.top += 1.0f; + CFX_FloatRect rcWidget(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width, + rcBBox.top + rcBBox.height); + rcWidget.left -= 1.0f; + rcWidget.right += 1.0f; + rcWidget.bottom -= 1.0f; + rcWidget.top += 1.0f; - return rcWidget; + return rcWidget; } -FX_BOOL CPDFSDK_XFAAnnotHandler::HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point) -{ - if (!pPageView || !pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::HitTest(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + const CPDF_Point& point) { + if (!pPageView || !pAnnot) + return FALSE; - CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument(); - if (!pSDKDoc) - return FALSE; + CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument(); + if (!pSDKDoc) + return FALSE; - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - if (!pDoc) - return FALSE; + CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); + if (!pDoc) + return FALSE; - IXFA_DocView* pDocView = pDoc->GetXFADocView(); - if (!pDocView) - return FALSE; + IXFA_DocView* pDocView = pDoc->GetXFADocView(); + if (!pDocView) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler(); - if (!pWidgetHandler) - return FALSE; + IXFA_WidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler(); + if (!pWidgetHandler) + return FALSE; - FX_DWORD dwHitTest = pWidgetHandler->OnHitTest(pAnnot->GetXFAWidget(), point.x, point.y); - return (dwHitTest != FWL_WGTHITTEST_Unknown); + FX_DWORD dwHitTest = + pWidgetHandler->OnHitTest(pAnnot->GetXFAWidget(), point.x, point.y); + return (dwHitTest != FWL_WGTHITTEST_Unknown); } -void CPDFSDK_XFAAnnotHandler::OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - if (!pPageView || !pAnnot) - return; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); +void CPDFSDK_XFAAnnotHandler::OnMouseEnter(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + if (!pPageView || !pAnnot) + return; + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - pWidgetHandler->OnMouseEnter(pAnnot->GetXFAWidget()); + pWidgetHandler->OnMouseEnter(pAnnot->GetXFAWidget()); } -void CPDFSDK_XFAAnnotHandler::OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - if (!pPageView || !pAnnot) - return; +void CPDFSDK_XFAAnnotHandler::OnMouseExit(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + if (!pPageView || !pAnnot) + return; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - pWidgetHandler->OnMouseExit(pAnnot->GetXFAWidget()); + pWidgetHandler->OnMouseExit(pAnnot->GetXFAWidget()); } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - if (!pPageView || !pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnLButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + if (!pPageView || !pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnLButtonDown(pAnnot->GetXFAWidget(), GetFWLFlags(nFlags), point.x, point.y); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnLButtonDown(pAnnot->GetXFAWidget(), + GetFWLFlags(nFlags), point.x, point.y); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - if (!pPageView || !pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnLButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + if (!pPageView || !pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnLButtonUp(pAnnot->GetXFAWidget(), GetFWLFlags(nFlags), point.x, point.y); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnLButtonUp(pAnnot->GetXFAWidget(), + GetFWLFlags(nFlags), point.x, point.y); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - if (!pPageView || !pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnLButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + if (!pPageView || !pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnLButtonDblClk(pAnnot->GetXFAWidget(), GetFWLFlags(nFlags), point.x, point.y); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnLButtonDblClk(pAnnot->GetXFAWidget(), + GetFWLFlags(nFlags), point.x, point.y); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - if (!pPageView || !pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnMouseMove(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + if (!pPageView || !pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnMouseMove(pAnnot->GetXFAWidget(), GetFWLFlags(nFlags), point.x, point.y); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnMouseMove(pAnnot->GetXFAWidget(), + GetFWLFlags(nFlags), point.x, point.y); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) -{ - if (!pPageView || !pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnMouseWheel(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + short zDelta, + const CPDF_Point& point) { + if (!pPageView || !pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnMouseWheel(pAnnot->GetXFAWidget(), GetFWLFlags(nFlags), zDelta, point.x, point.y); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnMouseWheel( + pAnnot->GetXFAWidget(), GetFWLFlags(nFlags), zDelta, point.x, point.y); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - if (!pPageView || !pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnRButtonDown(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + if (!pPageView || !pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnRButtonDown(pAnnot->GetXFAWidget(), GetFWLFlags(nFlags), point.x, point.y); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnRButtonDown(pAnnot->GetXFAWidget(), + GetFWLFlags(nFlags), point.x, point.y); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - if (!pPageView || !pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnRButtonUp(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + if (!pPageView || !pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnRButtonUp(pAnnot->GetXFAWidget(), GetFWLFlags(nFlags), point.x, point.y); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnRButtonUp(pAnnot->GetXFAWidget(), + GetFWLFlags(nFlags), point.x, point.y); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) -{ - if (!pPageView || !pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnRButtonDblClk(CPDFSDK_PageView* pPageView, + CPDFSDK_Annot* pAnnot, + FX_DWORD nFlags, + const CPDF_Point& point) { + if (!pPageView || !pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnRButtonDblClk(pAnnot->GetXFAWidget(), GetFWLFlags(nFlags), point.x, point.y); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnRButtonDblClk(pAnnot->GetXFAWidget(), + GetFWLFlags(nFlags), point.x, point.y); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags) -{ - if (!pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnChar(CPDFSDK_Annot* pAnnot, + FX_DWORD nChar, + FX_DWORD nFlags) { + if (!pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnChar(pAnnot->GetXFAWidget(), nChar, GetFWLFlags(nFlags)); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnChar(pAnnot->GetXFAWidget(), nChar, + GetFWLFlags(nFlags)); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) -{ - if (!pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnKeyDown(CPDFSDK_Annot* pAnnot, + int nKeyCode, + int nFlag) { + if (!pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnKeyDown(pAnnot->GetXFAWidget(), nKeyCode, GetFWLFlags(nFlag)); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnKeyDown(pAnnot->GetXFAWidget(), nKeyCode, + GetFWLFlags(nFlag)); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) -{ - if (!pAnnot) - return FALSE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnKeyUp(CPDFSDK_Annot* pAnnot, + int nKeyCode, + int nFlag) { + if (!pAnnot) + return FALSE; - IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot); + ASSERT(pWidgetHandler != NULL); - FX_BOOL bRet = FALSE; - bRet = pWidgetHandler->OnKeyUp(pAnnot->GetXFAWidget(), nKeyCode, GetFWLFlags(nFlag)); + FX_BOOL bRet = FALSE; + bRet = pWidgetHandler->OnKeyUp(pAnnot->GetXFAWidget(), nKeyCode, + GetFWLFlags(nFlag)); - return bRet; + return bRet; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - return TRUE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnSetFocus(CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + return TRUE; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) -{ - return TRUE; +FX_BOOL CPDFSDK_XFAAnnotHandler::OnKillFocus(CPDFSDK_Annot* pAnnot, + FX_DWORD nFlag) { + return TRUE; } -FX_BOOL CPDFSDK_XFAAnnotHandler::OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot, CPDFSDK_Annot* pNewAnnot) -{ - IXFA_WidgetHandler* pWidgetHandler = NULL; - - if (pOldAnnot) - pWidgetHandler = GetXFAWidgetHandler(pOldAnnot); - else if (pNewAnnot) - pWidgetHandler = GetXFAWidgetHandler(pNewAnnot); - - if (pWidgetHandler) - { - FX_BOOL bRet = TRUE; - IXFA_Widget* hWidget = pNewAnnot ? pNewAnnot->GetXFAWidget() : NULL; - if (hWidget) - { - IXFA_PageView* pXFAPageView = pWidgetHandler->GetPageView(hWidget); - if (pXFAPageView) - { - bRet = pXFAPageView->GetDocView()->SetFocus(hWidget); - if (pXFAPageView->GetDocView()->GetFocusWidget() == hWidget) - bRet = TRUE; - } - } - return bRet; - } +FX_BOOL CPDFSDK_XFAAnnotHandler::OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot, + CPDFSDK_Annot* pNewAnnot) { + IXFA_WidgetHandler* pWidgetHandler = NULL; - return TRUE; -} + if (pOldAnnot) + pWidgetHandler = GetXFAWidgetHandler(pOldAnnot); + else if (pNewAnnot) + pWidgetHandler = GetXFAWidgetHandler(pNewAnnot); -IXFA_WidgetHandler* CPDFSDK_XFAAnnotHandler::GetXFAWidgetHandler(CPDFSDK_Annot* pAnnot) -{ - if (!pAnnot) - return NULL; - - CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); - if (!pPageView) - return NULL; - - CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument(); - if (!pSDKDoc) - return NULL; - - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - if (!pDoc) - return NULL; - - IXFA_DocView* pDocView = pDoc->GetXFADocView(); - if (!pDocView) - return NULL; - - return pDocView->GetWidgetHandler(); -} - -#define FWL_KEYFLAG_Ctrl (1 << 0) -#define FWL_KEYFLAG_Alt (1 << 1) -#define FWL_KEYFLAG_Shift (1 << 2) -#define FWL_KEYFLAG_LButton (1 << 3) -#define FWL_KEYFLAG_RButton (1 << 4) -#define FWL_KEYFLAG_MButton (1 << 5) - -FX_DWORD CPDFSDK_XFAAnnotHandler::GetFWLFlags(FX_DWORD dwFlag) -{ - FX_DWORD dwFWLFlag = 0; - - if (dwFlag & FWL_EVENTFLAG_ControlKey) - dwFWLFlag |= FWL_KEYFLAG_Ctrl; - if (dwFlag & FWL_EVENTFLAG_LeftButtonDown) - dwFWLFlag |= FWL_KEYFLAG_LButton; - if (dwFlag & FWL_EVENTFLAG_MiddleButtonDown) - dwFWLFlag |= FWL_KEYFLAG_MButton; - if (dwFlag & FWL_EVENTFLAG_RightButtonDown) - dwFWLFlag |= FWL_KEYFLAG_RButton; - if (dwFlag & FWL_EVENTFLAG_ShiftKey) - dwFWLFlag |= FWL_KEYFLAG_Shift; - if (dwFlag & FWL_EVENTFLAG_AltKey) - dwFWLFlag |= FWL_KEYFLAG_Alt; - - return dwFWLFlag; -} - -//CReader_AnnotIteratorEx - -CPDFSDK_AnnotIterator::CPDFSDK_AnnotIterator(CPDFSDK_PageView * pPageView,FX_BOOL bReverse, - FX_BOOL bIgnoreTopmost/*=FALSE*/, - FX_BOOL bCircle/*=FALSE*/, - CFX_PtrArray *pList/*=NULL*/) -{ - ASSERT(pPageView); - m_bReverse=bReverse; - m_bIgnoreTopmost= bIgnoreTopmost; - m_bCircle=bCircle; - m_pIteratorAnnotList.RemoveAll(); - InitIteratorAnnotList(pPageView,pList); -} - -CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot (const CPDFSDK_Annot* pCurrent) -{ - - int index = -1; - int nCount = m_pIteratorAnnotList.GetSize(); - if (pCurrent) { - for(int i=0;i0) ? (index-1) :nCount-1; - } - else{ - index = ( index >0) ? (index-1) :-1; - } - } + if (pWidgetHandler) { + FX_BOOL bRet = TRUE; + IXFA_Widget* hWidget = pNewAnnot ? pNewAnnot->GetXFAWidget() : NULL; + if (hWidget) { + IXFA_PageView* pXFAPageView = pWidgetHandler->GetPageView(hWidget); + if (pXFAPageView) { + bRet = pXFAPageView->GetDocView()->SetFocus(hWidget); + if (pXFAPageView->GetDocView()->GetFocusWidget() == hWidget) + bRet = TRUE; + } } - return (index <0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index); -} - - -CPDFSDK_Annot*CPDFSDK_AnnotIterator::Next(const CPDFSDK_Annot* pCurrent) -{ - - return (m_bReverse) ? PrevAnnot(pCurrent):NextAnnot(pCurrent); - -} - -CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(const CPDFSDK_Annot* pCurrent) -{ - - return (m_bReverse) ? NextAnnot(pCurrent):PrevAnnot(pCurrent); -} - -CPDFSDK_Annot*CPDFSDK_AnnotIterator::Next(int& index ) -{ - - return (m_bReverse) ? PrevAnnot(index):NextAnnot(index); - -} - -CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(int& index ) -{ + return bRet; + } - return (m_bReverse) ? NextAnnot(index):PrevAnnot(index); + return TRUE; } +IXFA_WidgetHandler* CPDFSDK_XFAAnnotHandler::GetXFAWidgetHandler( + CPDFSDK_Annot* pAnnot) { + if (!pAnnot) + return NULL; -void CPDFSDK_AnnotIterator::InsertSort(CFX_PtrArray &arrayList, AI_COMPARE pCompare) -{ - for (int i = 1; i < arrayList.GetSize(); i++) - { - if (pCompare((CPDFSDK_Annot*)(arrayList[i]) , (CPDFSDK_Annot*)(arrayList[i-1])) < 0) - { - int j = i-1; - CPDFSDK_Annot* pTemp = (CPDFSDK_Annot*)arrayList[i]; + CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); + if (!pPageView) + return NULL; - do - { - arrayList[j + 1] = arrayList[j]; - } while (--j >= 0 && pCompare(pTemp, (CPDFSDK_Annot*)arrayList[j]) < 0); + CPDFSDK_Document* pSDKDoc = pPageView->GetSDKDocument(); + if (!pSDKDoc) + return NULL; - arrayList[j+1] = pTemp; - } - } -} + CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); + if (!pDoc) + return NULL; -int LyOrderCompare(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) -{ - if (p1->GetLayoutOrder() < p2->GetLayoutOrder()) - return -1; - if (p1->GetLayoutOrder() > p2->GetLayoutOrder()) - return 1; - return 0; -} + IXFA_DocView* pDocView = pDoc->GetXFADocView(); + if (!pDocView) + return NULL; -FX_BOOL CPDFSDK_AnnotIterator::InitIteratorAnnotList(CPDFSDK_PageView* pPageView,CFX_PtrArray * pAnnotList) -{ - ASSERT(pPageView); + return pDocView->GetWidgetHandler(); +} + +#define FWL_KEYFLAG_Ctrl (1 << 0) +#define FWL_KEYFLAG_Alt (1 << 1) +#define FWL_KEYFLAG_Shift (1 << 2) +#define FWL_KEYFLAG_LButton (1 << 3) +#define FWL_KEYFLAG_RButton (1 << 4) +#define FWL_KEYFLAG_MButton (1 << 5) + +FX_DWORD CPDFSDK_XFAAnnotHandler::GetFWLFlags(FX_DWORD dwFlag) { + FX_DWORD dwFWLFlag = 0; + + if (dwFlag & FWL_EVENTFLAG_ControlKey) + dwFWLFlag |= FWL_KEYFLAG_Ctrl; + if (dwFlag & FWL_EVENTFLAG_LeftButtonDown) + dwFWLFlag |= FWL_KEYFLAG_LButton; + if (dwFlag & FWL_EVENTFLAG_MiddleButtonDown) + dwFWLFlag |= FWL_KEYFLAG_MButton; + if (dwFlag & FWL_EVENTFLAG_RightButtonDown) + dwFWLFlag |= FWL_KEYFLAG_RButton; + if (dwFlag & FWL_EVENTFLAG_ShiftKey) + dwFWLFlag |= FWL_KEYFLAG_Shift; + if (dwFlag & FWL_EVENTFLAG_AltKey) + dwFWLFlag |= FWL_KEYFLAG_Alt; + + return dwFWLFlag; +} + +// CReader_AnnotIteratorEx + +CPDFSDK_AnnotIterator::CPDFSDK_AnnotIterator(CPDFSDK_PageView* pPageView, + FX_BOOL bReverse, + FX_BOOL bIgnoreTopmost /*=FALSE*/, + FX_BOOL bCircle /*=FALSE*/, + CFX_PtrArray* pList /*=NULL*/) { + ASSERT(pPageView); + m_bReverse = bReverse; + m_bIgnoreTopmost = bIgnoreTopmost; + m_bCircle = bCircle; + m_pIteratorAnnotList.RemoveAll(); + InitIteratorAnnotList(pPageView, pList); +} + +CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot(const CPDFSDK_Annot* pCurrent) { + int index = -1; + int nCount = m_pIteratorAnnotList.GetSize(); + if (pCurrent) { + for (int i = 0; i < nCount; i++) { + CPDFSDK_Annot* pReaderAnnot = + (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(i); + if (pReaderAnnot == pCurrent) { + index = i; + break; + } + } + } + return NextAnnot(index); +} +CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot(const CPDFSDK_Annot* pCurrent) { + int index = -1; + int nCount = m_pIteratorAnnotList.GetSize(); + if (pCurrent) { + for (int i = 0; i < nCount; i++) { + CPDFSDK_Annot* pReaderAnnot = + (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(i); + if (pReaderAnnot == pCurrent) { + index = i; + break; + } + } + } + return PrevAnnot(index); +} +CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot(int& index) { + int nCount = m_pIteratorAnnotList.GetSize(); + if (nCount <= 0) + index = -1; + else { + if (index < 0) { + index = 0; + } else { + if (m_bCircle) { + index = (index < nCount - 1) ? (index + 1) : 0; + } else { + index = (index < nCount - 1) ? (index + 1) : -1; + } + } + } + return (index < 0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index); +} + +CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot(int& index) { + int nCount = m_pIteratorAnnotList.GetSize(); + if (nCount <= 0) + index = -1; + else { + if (index < 0) { + index = nCount - 1; + } else { + if (m_bCircle) { + index = (index > 0) ? (index - 1) : nCount - 1; + } else { + index = (index > 0) ? (index - 1) : -1; + } + } + } + return (index < 0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index); +} + +CPDFSDK_Annot* CPDFSDK_AnnotIterator::Next(const CPDFSDK_Annot* pCurrent) { + return (m_bReverse) ? PrevAnnot(pCurrent) : NextAnnot(pCurrent); +} + +CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(const CPDFSDK_Annot* pCurrent) { + return (m_bReverse) ? NextAnnot(pCurrent) : PrevAnnot(pCurrent); +} + +CPDFSDK_Annot* CPDFSDK_AnnotIterator::Next(int& index) { + return (m_bReverse) ? PrevAnnot(index) : NextAnnot(index); +} + +CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(int& index) { + return (m_bReverse) ? NextAnnot(index) : PrevAnnot(index); +} + +void CPDFSDK_AnnotIterator::InsertSort(CFX_PtrArray& arrayList, + AI_COMPARE pCompare) { + for (int i = 1; i < arrayList.GetSize(); i++) { + if (pCompare((CPDFSDK_Annot*)(arrayList[i]), + (CPDFSDK_Annot*)(arrayList[i - 1])) < 0) { + int j = i - 1; + CPDFSDK_Annot* pTemp = (CPDFSDK_Annot*)arrayList[i]; + + do { + arrayList[j + 1] = arrayList[j]; + } while (--j >= 0 && pCompare(pTemp, (CPDFSDK_Annot*)arrayList[j]) < 0); + + arrayList[j + 1] = pTemp; + } + } +} + +int LyOrderCompare(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) { + if (p1->GetLayoutOrder() < p2->GetLayoutOrder()) + return -1; + if (p1->GetLayoutOrder() > p2->GetLayoutOrder()) + return 1; + return 0; +} + +FX_BOOL CPDFSDK_AnnotIterator::InitIteratorAnnotList( + CPDFSDK_PageView* pPageView, + CFX_PtrArray* pAnnotList) { + ASSERT(pPageView); - if(pAnnotList==NULL){ - pAnnotList=pPageView->GetAnnotList(); - } + if (pAnnotList == NULL) { + pAnnotList = pPageView->GetAnnotList(); + } - m_pIteratorAnnotList.RemoveAll(); - if(!pAnnotList) return FALSE; + m_pIteratorAnnotList.RemoveAll(); + if (!pAnnotList) + return FALSE; - CPDFSDK_Annot * pTopMostAnnot= (m_bIgnoreTopmost) ? NULL : pPageView->GetFocusAnnot(); + CPDFSDK_Annot* pTopMostAnnot = + (m_bIgnoreTopmost) ? NULL : pPageView->GetFocusAnnot(); + int nCount = pAnnotList->GetSize(); - int nCount =pAnnotList->GetSize(); + for (int i = nCount - 1; i >= 0; i--) { + CPDFSDK_Annot* pReaderAnnot = (CPDFSDK_Annot*)pAnnotList->GetAt(i); + m_pIteratorAnnotList.Add(pReaderAnnot); + } - for(int i = nCount- 1 ;i >= 0;i--) - { - CPDFSDK_Annot * pReaderAnnot= (CPDFSDK_Annot*)pAnnotList->GetAt(i); - m_pIteratorAnnotList.Add(pReaderAnnot); - } + InsertSort(m_pIteratorAnnotList, &LyOrderCompare); - InsertSort(m_pIteratorAnnotList,&LyOrderCompare); - - if(pTopMostAnnot) - { - for(int i=0 ;i= 0 ? 60 : -60); +int _gAfxGetTimeZoneInSeconds(FX_CHAR tzhour, uint8_t tzminute) { + return (int)tzhour * 3600 + (int)tzminute * (tzhour >= 0 ? 60 : -60); } -FX_BOOL _gAfxIsLeapYear(int16_t year) -{ - return ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))); +FX_BOOL _gAfxIsLeapYear(int16_t year) { + return ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))); } -FX_WORD _gAfxGetYearDays(int16_t year) -{ - return (_gAfxIsLeapYear(year) == TRUE ? 366 : 365); +FX_WORD _gAfxGetYearDays(int16_t year) { + return (_gAfxIsLeapYear(year) == TRUE ? 366 : 365); } -uint8_t _gAfxGetMonthDays(int16_t year, uint8_t month) -{ - uint8_t mDays; - switch (month) - { +uint8_t _gAfxGetMonthDays(int16_t year, uint8_t month) { + uint8_t mDays; + switch (month) { case 1: case 3: case 5: @@ -40,1049 +34,981 @@ uint8_t _gAfxGetMonthDays(int16_t year, uint8_t month) case 8: case 10: case 12: - mDays = 31; - break; + mDays = 31; + break; case 4: case 6: case 9: case 11: - mDays = 30; - break; + mDays = 30; + break; case 2: - if (_gAfxIsLeapYear(year) == TRUE) - mDays = 29; - else - mDays = 28; - break; + if (_gAfxIsLeapYear(year) == TRUE) + mDays = 29; + else + mDays = 28; + break; default: - mDays = 0; - break; - } + mDays = 0; + break; + } - return mDays; + return mDays; } -CPDFSDK_DateTime::CPDFSDK_DateTime() -{ - ResetDateTime(); +CPDFSDK_DateTime::CPDFSDK_DateTime() { + ResetDateTime(); } -CPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr) -{ - ResetDateTime(); +CPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr) { + ResetDateTime(); - FromPDFDateTimeString(dtStr); + FromPDFDateTimeString(dtStr); } -CPDFSDK_DateTime::CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime) -{ - operator = (datetime); +CPDFSDK_DateTime::CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime) { + operator=(datetime); } -CPDFSDK_DateTime::CPDFSDK_DateTime(const FX_SYSTEMTIME& st) -{ - operator = (st) ; +CPDFSDK_DateTime::CPDFSDK_DateTime(const FX_SYSTEMTIME& st) { + operator=(st); } +void CPDFSDK_DateTime::ResetDateTime() { + tzset(); -void CPDFSDK_DateTime::ResetDateTime() -{ - tzset(); + time_t curTime; + time(&curTime); + struct tm* newtime; + // newtime = gmtime(&curTime); + newtime = localtime(&curTime); - time_t curTime; - time(&curTime); - struct tm* newtime; - //newtime = gmtime(&curTime); - newtime = localtime(&curTime); - - dt.year = newtime->tm_year + 1900; - dt.month = newtime->tm_mon + 1; - dt.day = newtime->tm_mday; - dt.hour = newtime->tm_hour; - dt.minute = newtime->tm_min; - dt.second = newtime->tm_sec; -// dt.tzHour = _timezone / 3600 * -1; -// dt.tzMinute = (abs(_timezone) % 3600) / 60; + dt.year = newtime->tm_year + 1900; + dt.month = newtime->tm_mon + 1; + dt.day = newtime->tm_mday; + dt.hour = newtime->tm_hour; + dt.minute = newtime->tm_min; + dt.second = newtime->tm_sec; + // dt.tzHour = _timezone / 3600 * -1; + // dt.tzMinute = (abs(_timezone) % 3600) / 60; } -CPDFSDK_DateTime& CPDFSDK_DateTime::operator = (const CPDFSDK_DateTime& datetime) -{ - FXSYS_memcpy(&dt, &datetime.dt, sizeof(FX_DATETIME)); - return *this; +CPDFSDK_DateTime& CPDFSDK_DateTime::operator=( + const CPDFSDK_DateTime& datetime) { + FXSYS_memcpy(&dt, &datetime.dt, sizeof(FX_DATETIME)); + return *this; } -CPDFSDK_DateTime& CPDFSDK_DateTime::operator = (const FX_SYSTEMTIME& st) -{ - tzset(); +CPDFSDK_DateTime& CPDFSDK_DateTime::operator=(const FX_SYSTEMTIME& st) { + tzset(); - dt.year = (int16_t)st.wYear; - dt.month = (uint8_t)st.wMonth; - dt.day = (uint8_t)st.wDay; - dt.hour = (uint8_t)st.wHour; - dt.minute = (uint8_t)st.wMinute; - dt.second = (uint8_t)st.wSecond; -// dt.tzHour = _timezone / 3600 * -1; -// dt.tzMinute = (abs(_timezone) % 3600) / 60; - return *this; + dt.year = (int16_t)st.wYear; + dt.month = (uint8_t)st.wMonth; + dt.day = (uint8_t)st.wDay; + dt.hour = (uint8_t)st.wHour; + dt.minute = (uint8_t)st.wMinute; + dt.second = (uint8_t)st.wSecond; + // dt.tzHour = _timezone / 3600 * -1; + // dt.tzMinute = (abs(_timezone) % 3600) / 60; + return *this; } -FX_BOOL CPDFSDK_DateTime::operator == (CPDFSDK_DateTime& datetime) -{ - return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) == 0); +FX_BOOL CPDFSDK_DateTime::operator==(CPDFSDK_DateTime& datetime) { + return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) == 0); } -FX_BOOL CPDFSDK_DateTime::operator != (CPDFSDK_DateTime& datetime) -{ - return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) != 0); +FX_BOOL CPDFSDK_DateTime::operator!=(CPDFSDK_DateTime& datetime) { + return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) != 0); } -FX_BOOL CPDFSDK_DateTime::operator > (CPDFSDK_DateTime& datetime) -{ - CPDFSDK_DateTime dt1 = ToGMT(); - CPDFSDK_DateTime dt2 = datetime.ToGMT(); - int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day; - int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second; - int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day; - int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second; - - if (d1 > d3) return TRUE; - if (d2 > d4) return TRUE; - return FALSE; -} +FX_BOOL CPDFSDK_DateTime::operator>(CPDFSDK_DateTime& datetime) { + CPDFSDK_DateTime dt1 = ToGMT(); + CPDFSDK_DateTime dt2 = datetime.ToGMT(); + int d1 = + (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day; + int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | + (int)dt1.dt.second; + int d3 = + (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day; + int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | + (int)dt2.dt.second; -FX_BOOL CPDFSDK_DateTime::operator >= (CPDFSDK_DateTime& datetime) -{ - CPDFSDK_DateTime dt1 = ToGMT(); - CPDFSDK_DateTime dt2 = datetime.ToGMT(); - int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day; - int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second; - int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day; - int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second; - - if (d1 >= d3) return TRUE; - if (d2 >= d4) return TRUE; - return FALSE; + if (d1 > d3) + return TRUE; + if (d2 > d4) + return TRUE; + return FALSE; +} + +FX_BOOL CPDFSDK_DateTime::operator>=(CPDFSDK_DateTime& datetime) { + CPDFSDK_DateTime dt1 = ToGMT(); + CPDFSDK_DateTime dt2 = datetime.ToGMT(); + int d1 = + (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day; + int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | + (int)dt1.dt.second; + int d3 = + (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day; + int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | + (int)dt2.dt.second; + + if (d1 >= d3) + return TRUE; + if (d2 >= d4) + return TRUE; + return FALSE; +} + +FX_BOOL CPDFSDK_DateTime::operator<(CPDFSDK_DateTime& datetime) { + CPDFSDK_DateTime dt1 = ToGMT(); + CPDFSDK_DateTime dt2 = datetime.ToGMT(); + int d1 = + (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day; + int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | + (int)dt1.dt.second; + int d3 = + (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day; + int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | + (int)dt2.dt.second; + + if (d1 < d3) + return TRUE; + if (d2 < d4) + return TRUE; + return FALSE; +} + +FX_BOOL CPDFSDK_DateTime::operator<=(CPDFSDK_DateTime& datetime) { + CPDFSDK_DateTime dt1 = ToGMT(); + CPDFSDK_DateTime dt2 = datetime.ToGMT(); + int d1 = + (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day; + int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | + (int)dt1.dt.second; + int d3 = + (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day; + int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | + (int)dt2.dt.second; + + if (d1 <= d3) + return TRUE; + if (d2 <= d4) + return TRUE; + return FALSE; } -FX_BOOL CPDFSDK_DateTime::operator < (CPDFSDK_DateTime& datetime) -{ - CPDFSDK_DateTime dt1 = ToGMT(); - CPDFSDK_DateTime dt2 = datetime.ToGMT(); - int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day; - int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second; - int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day; - int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second; +CPDFSDK_DateTime::operator time_t() { + struct tm newtime; - if (d1 < d3) return TRUE; - if (d2 < d4) return TRUE; - return FALSE; -} + newtime.tm_year = dt.year - 1900; + newtime.tm_mon = dt.month - 1; + newtime.tm_mday = dt.day; + newtime.tm_hour = dt.hour; + newtime.tm_min = dt.minute; + newtime.tm_sec = dt.second; -FX_BOOL CPDFSDK_DateTime::operator <= (CPDFSDK_DateTime& datetime) -{ - CPDFSDK_DateTime dt1 = ToGMT(); - CPDFSDK_DateTime dt2 = datetime.ToGMT(); - int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day; - int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second; - int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day; - int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second; - - if (d1 <= d3) return TRUE; - if (d2 <= d4) return TRUE; - return FALSE; + return mktime(&newtime); } -CPDFSDK_DateTime::operator time_t() -{ - struct tm newtime; - - newtime.tm_year = dt.year - 1900; - newtime.tm_mon = dt.month - 1; - newtime.tm_mday = dt.day; - newtime.tm_hour = dt.hour; - newtime.tm_min = dt.minute; - newtime.tm_sec = dt.second; - - return mktime(&newtime); -} - -CPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString(const CFX_ByteString& dtStr) -{ - int strLength = dtStr.GetLength(); - if (strLength > 0) - { - int i = 0; - int j, k; - FX_CHAR ch; - while (i < strLength) - { - ch = dtStr[i]; - if (ch >= '0' && ch <= '9') break; - i ++; - } - if (i >= strLength) return *this; - - j = 0; - k = 0; - while (i < strLength && j < 4) - { - ch = dtStr[i]; - k = k * 10 + ch - '0'; - j ++; - if (ch < '0' || ch > '9') break; - i ++; - } - dt.year = (int16_t)k; - if (i >= strLength || j < 4) return *this; - - j = 0; - k = 0; - while (i < strLength && j < 2) - { - ch = dtStr[i]; - k = k * 10 + ch - '0'; - j ++; - if (ch < '0' || ch > '9') break; - i ++; - } - dt.month = (uint8_t)k; - if (i >= strLength || j < 2) return *this; - - j = 0; - k = 0; - while (i < strLength && j < 2) - { - ch = dtStr[i]; - k = k * 10 + ch - '0'; - j ++; - if (ch < '0' || ch > '9') break; - i ++; - } - dt.day = (uint8_t)k; - if (i >= strLength || j < 2) return *this; - - j = 0; - k = 0; - while (i < strLength && j < 2) - { - ch = dtStr[i]; - k = k * 10 + ch - '0'; - j ++; - if (ch < '0' || ch > '9') break; - i ++; - } - dt.hour = (uint8_t)k; - if (i >= strLength || j < 2) return *this; - - j = 0; - k = 0; - while (i < strLength && j < 2) - { - ch = dtStr[i]; - k = k * 10 + ch - '0'; - j ++; - if (ch < '0' || ch > '9') break; - i ++; - } - dt.minute = (uint8_t)k; - if (i >= strLength || j < 2) return *this; - - j = 0; - k = 0; - while (i < strLength && j < 2) - { - ch = dtStr[i]; - k = k * 10 + ch - '0'; - j ++; - if (ch < '0' || ch > '9') break; - i ++; - } - dt.second = (uint8_t)k; - if (i >= strLength || j < 2) return *this; - - ch = dtStr[i ++]; - if (ch != '-' && ch != '+') return *this; - if (ch == '-') - dt.tzHour = -1; - else - dt.tzHour = 1; - j = 0; - k = 0; - while (i < strLength && j < 2) - { - ch = dtStr[i]; - k = k * 10 + ch - '0'; - j ++; - if (ch < '0' || ch > '9') break; - i ++; - } - dt.tzHour *= (FX_CHAR)k; - if (i >= strLength || j < 2) return *this; - - ch = dtStr[i ++]; - if (ch != '\'') return *this; - j = 0; - k = 0; - while (i < strLength && j < 2) - { - ch = dtStr[i]; - k = k * 10 + ch - '0'; - j ++; - if (ch < '0' || ch > '9') break; - i ++; - } - dt.tzMinute = (uint8_t)k; - if (i >= strLength || j < 2) return *this; +CPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString( + const CFX_ByteString& dtStr) { + int strLength = dtStr.GetLength(); + if (strLength > 0) { + int i = 0; + int j, k; + FX_CHAR ch; + while (i < strLength) { + ch = dtStr[i]; + if (ch >= '0' && ch <= '9') + break; + i++; } - - return *this; -} - -CFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString() -{ - CFX_ByteString str1; - str1.Format("%04d-%02d-%02d %02d:%02d:%02d ", dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second); - if (dt.tzHour < 0) - str1 += "-"; - else - str1 += "+"; - CFX_ByteString str2; - str2.Format("%02d:%02d", abs(dt.tzHour), dt.tzMinute); - return str1 + str2; -} - -CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString() -{ - CFX_ByteString dtStr; - char tempStr[32]; - memset(tempStr, 0, sizeof(tempStr)); - FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02d%02d%02d%02d%02d", - dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second); - dtStr = CFX_ByteString(tempStr); - if (dt.tzHour < 0) - dtStr += CFX_ByteString("-"); + if (i >= strLength) + return *this; + + j = 0; + k = 0; + while (i < strLength && j < 4) { + ch = dtStr[i]; + k = k * 10 + ch - '0'; + j++; + if (ch < '0' || ch > '9') + break; + i++; + } + dt.year = (int16_t)k; + if (i >= strLength || j < 4) + return *this; + + j = 0; + k = 0; + while (i < strLength && j < 2) { + ch = dtStr[i]; + k = k * 10 + ch - '0'; + j++; + if (ch < '0' || ch > '9') + break; + i++; + } + dt.month = (uint8_t)k; + if (i >= strLength || j < 2) + return *this; + + j = 0; + k = 0; + while (i < strLength && j < 2) { + ch = dtStr[i]; + k = k * 10 + ch - '0'; + j++; + if (ch < '0' || ch > '9') + break; + i++; + } + dt.day = (uint8_t)k; + if (i >= strLength || j < 2) + return *this; + + j = 0; + k = 0; + while (i < strLength && j < 2) { + ch = dtStr[i]; + k = k * 10 + ch - '0'; + j++; + if (ch < '0' || ch > '9') + break; + i++; + } + dt.hour = (uint8_t)k; + if (i >= strLength || j < 2) + return *this; + + j = 0; + k = 0; + while (i < strLength && j < 2) { + ch = dtStr[i]; + k = k * 10 + ch - '0'; + j++; + if (ch < '0' || ch > '9') + break; + i++; + } + dt.minute = (uint8_t)k; + if (i >= strLength || j < 2) + return *this; + + j = 0; + k = 0; + while (i < strLength && j < 2) { + ch = dtStr[i]; + k = k * 10 + ch - '0'; + j++; + if (ch < '0' || ch > '9') + break; + i++; + } + dt.second = (uint8_t)k; + if (i >= strLength || j < 2) + return *this; + + ch = dtStr[i++]; + if (ch != '-' && ch != '+') + return *this; + if (ch == '-') + dt.tzHour = -1; else - dtStr += CFX_ByteString("+"); - memset(tempStr, 0, sizeof(tempStr)); - FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02d'", abs(dt.tzHour), dt.tzMinute); - dtStr += CFX_ByteString(tempStr); - return dtStr; -} - -void CPDFSDK_DateTime::ToSystemTime(FX_SYSTEMTIME& st) -{ - CPDFSDK_DateTime dt = *this; - time_t t = (time_t)dt; - struct tm* pTime = localtime(&t); - if(pTime){ - st.wYear = (FX_WORD)pTime->tm_year + 1900; - st.wMonth = (FX_WORD)pTime->tm_mon + 1; - st.wDay = (FX_WORD)pTime->tm_mday; - st.wDayOfWeek = (FX_WORD)pTime->tm_wday; - st.wHour = (FX_WORD)pTime->tm_hour; - st.wMinute = (FX_WORD)pTime->tm_min; - st.wSecond = (FX_WORD)pTime->tm_sec; - st.wMilliseconds = 0; + dt.tzHour = 1; + j = 0; + k = 0; + while (i < strLength && j < 2) { + ch = dtStr[i]; + k = k * 10 + ch - '0'; + j++; + if (ch < '0' || ch > '9') + break; + i++; } -} + dt.tzHour *= (FX_CHAR)k; + if (i >= strLength || j < 2) + return *this; + + ch = dtStr[i++]; + if (ch != '\'') + return *this; + j = 0; + k = 0; + while (i < strLength && j < 2) { + ch = dtStr[i]; + k = k * 10 + ch - '0'; + j++; + if (ch < '0' || ch > '9') + break; + i++; + } + dt.tzMinute = (uint8_t)k; + if (i >= strLength || j < 2) + return *this; + } + + return *this; +} + +CFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString() { + CFX_ByteString str1; + str1.Format("%04d-%02d-%02d %02d:%02d:%02d ", dt.year, dt.month, dt.day, + dt.hour, dt.minute, dt.second); + if (dt.tzHour < 0) + str1 += "-"; + else + str1 += "+"; + CFX_ByteString str2; + str2.Format("%02d:%02d", abs(dt.tzHour), dt.tzMinute); + return str1 + str2; +} + +CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString() { + CFX_ByteString dtStr; + char tempStr[32]; + memset(tempStr, 0, sizeof(tempStr)); + FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02d%02d%02d%02d%02d", + dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second); + dtStr = CFX_ByteString(tempStr); + if (dt.tzHour < 0) + dtStr += CFX_ByteString("-"); + else + dtStr += CFX_ByteString("+"); + memset(tempStr, 0, sizeof(tempStr)); + FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02d'", abs(dt.tzHour), + dt.tzMinute); + dtStr += CFX_ByteString(tempStr); + return dtStr; +} + +void CPDFSDK_DateTime::ToSystemTime(FX_SYSTEMTIME& st) { + CPDFSDK_DateTime dt = *this; + time_t t = (time_t)dt; + struct tm* pTime = localtime(&t); + if (pTime) { + st.wYear = (FX_WORD)pTime->tm_year + 1900; + st.wMonth = (FX_WORD)pTime->tm_mon + 1; + st.wDay = (FX_WORD)pTime->tm_mday; + st.wDayOfWeek = (FX_WORD)pTime->tm_wday; + st.wHour = (FX_WORD)pTime->tm_hour; + st.wMinute = (FX_WORD)pTime->tm_min; + st.wSecond = (FX_WORD)pTime->tm_sec; + st.wMilliseconds = 0; + } +} + +CPDFSDK_DateTime CPDFSDK_DateTime::ToGMT() { + CPDFSDK_DateTime dt = *this; + dt.AddSeconds(-_gAfxGetTimeZoneInSeconds(dt.dt.tzHour, dt.dt.tzMinute)); + dt.dt.tzHour = 0; + dt.dt.tzMinute = 0; + return dt; +} + +CPDFSDK_DateTime& CPDFSDK_DateTime::AddDays(short days) { + if (days == 0) + return *this; -CPDFSDK_DateTime CPDFSDK_DateTime::ToGMT() -{ - CPDFSDK_DateTime dt = *this; - dt.AddSeconds(-_gAfxGetTimeZoneInSeconds(dt.dt.tzHour, dt.dt.tzMinute)); - dt.dt.tzHour = 0; - dt.dt.tzMinute = 0; - return dt; -} - -CPDFSDK_DateTime& CPDFSDK_DateTime::AddDays(short days) -{ - if (days == 0) return *this; - - int16_t y = dt.year, yy; - uint8_t m = dt.month; - uint8_t d = dt.day; - int mdays, ydays, ldays; - - ldays = days; - if (ldays > 0) - { - yy = y; - if (((FX_WORD)m * 100 + d) > 300) yy ++; - ydays = _gAfxGetYearDays(yy); - while (ldays >= ydays) - { - y ++; - ldays -= ydays; - yy ++; - mdays = _gAfxGetMonthDays(y, m); - if (d > mdays) - { - m ++; - d -= mdays; - } - ydays = _gAfxGetYearDays(yy); - } - mdays = _gAfxGetMonthDays(y, m) - d + 1; - while (ldays >= mdays) - { - ldays -= mdays; - m ++; - d = 1; - mdays = _gAfxGetMonthDays(y, m); - } - d += ldays; + int16_t y = dt.year, yy; + uint8_t m = dt.month; + uint8_t d = dt.day; + int mdays, ydays, ldays; + + ldays = days; + if (ldays > 0) { + yy = y; + if (((FX_WORD)m * 100 + d) > 300) + yy++; + ydays = _gAfxGetYearDays(yy); + while (ldays >= ydays) { + y++; + ldays -= ydays; + yy++; + mdays = _gAfxGetMonthDays(y, m); + if (d > mdays) { + m++; + d -= mdays; + } + ydays = _gAfxGetYearDays(yy); } - else - { - ldays *= -1; - yy = y; - if (((FX_WORD)m * 100 + d) < 300) yy --; - ydays = _gAfxGetYearDays(yy); - while (ldays >= ydays) - { - y --; - ldays -= ydays; - yy --; - mdays = _gAfxGetMonthDays(y, m); - if (d > mdays) - { - m ++; - d -= mdays; - } - ydays = _gAfxGetYearDays(yy); - } - while (ldays >= d) - { - ldays -= d; - m --; - mdays = _gAfxGetMonthDays(y, m); - d = mdays; - } - d -= ldays; + mdays = _gAfxGetMonthDays(y, m) - d + 1; + while (ldays >= mdays) { + ldays -= mdays; + m++; + d = 1; + mdays = _gAfxGetMonthDays(y, m); + } + d += ldays; + } else { + ldays *= -1; + yy = y; + if (((FX_WORD)m * 100 + d) < 300) + yy--; + ydays = _gAfxGetYearDays(yy); + while (ldays >= ydays) { + y--; + ldays -= ydays; + yy--; + mdays = _gAfxGetMonthDays(y, m); + if (d > mdays) { + m++; + d -= mdays; + } + ydays = _gAfxGetYearDays(yy); } + while (ldays >= d) { + ldays -= d; + m--; + mdays = _gAfxGetMonthDays(y, m); + d = mdays; + } + d -= ldays; + } - dt.year = y; - dt.month = m; - dt.day = d; + dt.year = y; + dt.month = m; + dt.day = d; - return *this; + return *this; } -CPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds) -{ - if (seconds == 0) return *this; +CPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds) { + if (seconds == 0) + return *this; - int n; - int days; + int n; + int days; - n = dt.hour * 3600 + dt.minute * 60 + dt.second + seconds; - if (n < 0) - { - days = (n - 86399) / 86400; - n -= days * 86400; - } - else - { - days = n / 86400; - n %= 86400; - } - dt.hour = (uint8_t)(n / 3600); - dt.hour %= 24; - n %= 3600; - dt.minute = (uint8_t)(n / 60); - dt.second = (uint8_t)(n % 60); - if (days != 0) AddDays(days); + n = dt.hour * 3600 + dt.minute * 60 + dt.second + seconds; + if (n < 0) { + days = (n - 86399) / 86400; + n -= days * 86400; + } else { + days = n / 86400; + n %= 86400; + } + dt.hour = (uint8_t)(n / 3600); + dt.hour %= 24; + n %= 3600; + dt.minute = (uint8_t)(n / 60); + dt.second = (uint8_t)(n % 60); + if (days != 0) + AddDays(days); - return *this; + return *this; } - //--------------------------------------------------------------------------- // CPDFSDK_Annot //--------------------------------------------------------------------------- -CPDFSDK_Annot::CPDFSDK_Annot(CPDFSDK_PageView* pPageView) : -m_pPageView(pPageView), -m_bSelected(FALSE), -m_nTabOrder(-1) -{ -} +CPDFSDK_Annot::CPDFSDK_Annot(CPDFSDK_PageView* pPageView) + : m_pPageView(pPageView), m_bSelected(FALSE), m_nTabOrder(-1) {} +// CPDFSDK_BAAnnot +CPDFSDK_BAAnnot::CPDFSDK_BAAnnot(CPDF_Annot* pAnnot, + CPDFSDK_PageView* pPageView) + : CPDFSDK_Annot(pPageView), m_pAnnot(pAnnot) {} -//CPDFSDK_BAAnnot -CPDFSDK_BAAnnot::CPDFSDK_BAAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView) : - CPDFSDK_Annot(pPageView), - m_pAnnot(pAnnot) -{ -} - -CPDFSDK_BAAnnot::~CPDFSDK_BAAnnot() -{ - m_pAnnot = NULL; +CPDFSDK_BAAnnot::~CPDFSDK_BAAnnot() { + m_pAnnot = NULL; } -CPDF_Annot* CPDFSDK_BAAnnot::GetPDFAnnot() -{ - return m_pAnnot; +CPDF_Annot* CPDFSDK_BAAnnot::GetPDFAnnot() { + return m_pAnnot; } -FX_BOOL CPDFSDK_Annot::IsSelected() -{ - return m_bSelected; +FX_BOOL CPDFSDK_Annot::IsSelected() { + return m_bSelected; } -void CPDFSDK_Annot::SetSelected(FX_BOOL bSelected) -{ - m_bSelected = bSelected; +void CPDFSDK_Annot::SetSelected(FX_BOOL bSelected) { + m_bSelected = bSelected; } // Tab Order -int CPDFSDK_Annot::GetTabOrder() -{ - return m_nTabOrder; +int CPDFSDK_Annot::GetTabOrder() { + return m_nTabOrder; } -void CPDFSDK_Annot::SetTabOrder(int iTabOrder) -{ - m_nTabOrder = iTabOrder; +void CPDFSDK_Annot::SetTabOrder(int iTabOrder) { + m_nTabOrder = iTabOrder; } -CPDF_Dictionary* CPDFSDK_BAAnnot::GetAnnotDict() const -{ - ASSERT(m_pAnnot != NULL); +CPDF_Dictionary* CPDFSDK_BAAnnot::GetAnnotDict() const { + ASSERT(m_pAnnot != NULL); - return m_pAnnot->GetAnnotDict(); + return m_pAnnot->GetAnnotDict(); } -void CPDFSDK_BAAnnot::SetRect(const CPDF_Rect& rect) -{ - ASSERT(rect.right - rect.left >= GetMinWidth()); - ASSERT(rect.top - rect.bottom >= GetMinHeight()); +void CPDFSDK_BAAnnot::SetRect(const CPDF_Rect& rect) { + ASSERT(rect.right - rect.left >= GetMinWidth()); + ASSERT(rect.top - rect.bottom >= GetMinHeight()); - m_pAnnot->GetAnnotDict()->SetAtRect("Rect", rect); + m_pAnnot->GetAnnotDict()->SetAtRect("Rect", rect); } -CPDF_Rect CPDFSDK_BAAnnot::GetRect() const -{ - ASSERT(m_pAnnot != NULL); +CPDF_Rect CPDFSDK_BAAnnot::GetRect() const { + ASSERT(m_pAnnot != NULL); - CPDF_Rect rect; - m_pAnnot->GetRect(rect); + CPDF_Rect rect; + m_pAnnot->GetRect(rect); - return rect; + return rect; } -CFX_ByteString CPDFSDK_BAAnnot::GetType() const -{ - ASSERT(m_pAnnot != NULL); +CFX_ByteString CPDFSDK_BAAnnot::GetType() const { + ASSERT(m_pAnnot != NULL); - return m_pAnnot->GetSubType(); + return m_pAnnot->GetSubType(); } -CFX_ByteString CPDFSDK_BAAnnot::GetSubType() const -{ - return ""; +CFX_ByteString CPDFSDK_BAAnnot::GetSubType() const { + return ""; } -void CPDFSDK_BAAnnot::ResetAppearance() -{ - ASSERT(FALSE); +void CPDFSDK_BAAnnot::ResetAppearance() { + ASSERT(FALSE); } -void CPDFSDK_BAAnnot::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device, - CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions) -{ - ASSERT(m_pPageView != NULL); - ASSERT(m_pAnnot != NULL); +void CPDFSDK_BAAnnot::DrawAppearance(CFX_RenderDevice* pDevice, + const CPDF_Matrix* pUser2Device, + CPDF_Annot::AppearanceMode mode, + const CPDF_RenderOptions* pOptions) { + ASSERT(m_pPageView != NULL); + ASSERT(m_pAnnot != NULL); - m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, mode, pOptions); + m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, + mode, pOptions); } -FX_BOOL CPDFSDK_BAAnnot::IsAppearanceValid() -{ - return m_pAnnot->GetAnnotDict()->GetDict("AP") != NULL; +FX_BOOL CPDFSDK_BAAnnot::IsAppearanceValid() { + return m_pAnnot->GetAnnotDict()->GetDict("AP") != NULL; } -FX_BOOL CPDFSDK_BAAnnot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode) -{ - CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP"); - if (pAP == NULL) return FALSE; - - // Choose the right sub-ap - const FX_CHAR* ap_entry = "N"; - if (mode == CPDF_Annot::Down) - ap_entry = "D"; - else if (mode == CPDF_Annot::Rollover) - ap_entry = "R"; - if (!pAP->KeyExist(ap_entry)) - ap_entry = "N"; +FX_BOOL CPDFSDK_BAAnnot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode) { + CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP"); + if (pAP == NULL) + return FALSE; - // Get the AP stream or subdirectory - CPDF_Object* psub = pAP->GetElementValue(ap_entry); - if (psub == NULL) return FALSE; + // Choose the right sub-ap + const FX_CHAR* ap_entry = "N"; + if (mode == CPDF_Annot::Down) + ap_entry = "D"; + else if (mode == CPDF_Annot::Rollover) + ap_entry = "R"; + if (!pAP->KeyExist(ap_entry)) + ap_entry = "N"; + + // Get the AP stream or subdirectory + CPDF_Object* psub = pAP->GetElementValue(ap_entry); + if (psub == NULL) + return FALSE; - return TRUE; + return TRUE; } -void CPDFSDK_BAAnnot::DrawBorder(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device, - const CPDF_RenderOptions* pOptions) -{ - ASSERT(m_pAnnot != NULL); - m_pAnnot->DrawBorder(pDevice, pUser2Device, pOptions); +void CPDFSDK_BAAnnot::DrawBorder(CFX_RenderDevice* pDevice, + const CPDF_Matrix* pUser2Device, + const CPDF_RenderOptions* pOptions) { + ASSERT(m_pAnnot != NULL); + m_pAnnot->DrawBorder(pDevice, pUser2Device, pOptions); } -void CPDFSDK_BAAnnot::ClearCachedAP() -{ - ASSERT(m_pAnnot != NULL); - m_pAnnot->ClearCachedAP(); +void CPDFSDK_BAAnnot::ClearCachedAP() { + ASSERT(m_pAnnot != NULL); + m_pAnnot->ClearCachedAP(); } -void CPDFSDK_BAAnnot::SetContents(const CFX_WideString& sContents) -{ - if (sContents.IsEmpty()) - m_pAnnot->GetAnnotDict()->RemoveAt("Contents"); - else - m_pAnnot->GetAnnotDict()->SetAtString("Contents", PDF_EncodeText(sContents)); +void CPDFSDK_BAAnnot::SetContents(const CFX_WideString& sContents) { + if (sContents.IsEmpty()) + m_pAnnot->GetAnnotDict()->RemoveAt("Contents"); + else + m_pAnnot->GetAnnotDict()->SetAtString("Contents", + PDF_EncodeText(sContents)); } -CFX_WideString CPDFSDK_BAAnnot::GetContents() const -{ - return m_pAnnot->GetAnnotDict()->GetUnicodeText("Contents"); +CFX_WideString CPDFSDK_BAAnnot::GetContents() const { + return m_pAnnot->GetAnnotDict()->GetUnicodeText("Contents"); } -void CPDFSDK_BAAnnot::SetAnnotName(const CFX_WideString& sName) -{ - if (sName.IsEmpty()) - m_pAnnot->GetAnnotDict()->RemoveAt("NM"); - else - m_pAnnot->GetAnnotDict()->SetAtString("NM", PDF_EncodeText(sName)); +void CPDFSDK_BAAnnot::SetAnnotName(const CFX_WideString& sName) { + if (sName.IsEmpty()) + m_pAnnot->GetAnnotDict()->RemoveAt("NM"); + else + m_pAnnot->GetAnnotDict()->SetAtString("NM", PDF_EncodeText(sName)); } -CFX_WideString CPDFSDK_BAAnnot::GetAnnotName() const -{ - return m_pAnnot->GetAnnotDict()->GetUnicodeText("NM"); +CFX_WideString CPDFSDK_BAAnnot::GetAnnotName() const { + return m_pAnnot->GetAnnotDict()->GetUnicodeText("NM"); } -void CPDFSDK_BAAnnot::SetModifiedDate(const FX_SYSTEMTIME& st) -{ - CPDFSDK_DateTime dt(st); - CFX_ByteString str = dt.ToPDFDateTimeString(); +void CPDFSDK_BAAnnot::SetModifiedDate(const FX_SYSTEMTIME& st) { + CPDFSDK_DateTime dt(st); + CFX_ByteString str = dt.ToPDFDateTimeString(); - if (str.IsEmpty()) - m_pAnnot->GetAnnotDict()->RemoveAt("M"); - else - m_pAnnot->GetAnnotDict()->SetAtString("M", str); + if (str.IsEmpty()) + m_pAnnot->GetAnnotDict()->RemoveAt("M"); + else + m_pAnnot->GetAnnotDict()->SetAtString("M", str); } -FX_SYSTEMTIME CPDFSDK_BAAnnot::GetModifiedDate() const -{ - FX_SYSTEMTIME systime; - CFX_ByteString str = m_pAnnot->GetAnnotDict()->GetString("M"); +FX_SYSTEMTIME CPDFSDK_BAAnnot::GetModifiedDate() const { + FX_SYSTEMTIME systime; + CFX_ByteString str = m_pAnnot->GetAnnotDict()->GetString("M"); - CPDFSDK_DateTime dt(str); - dt.ToSystemTime(systime); + CPDFSDK_DateTime dt(str); + dt.ToSystemTime(systime); - return systime; + return systime; } -void CPDFSDK_BAAnnot::SetFlags(int nFlags) -{ - m_pAnnot->GetAnnotDict()->SetAtInteger("F", nFlags); +void CPDFSDK_BAAnnot::SetFlags(int nFlags) { + m_pAnnot->GetAnnotDict()->SetAtInteger("F", nFlags); } -int CPDFSDK_BAAnnot::GetFlags() const -{ - return m_pAnnot->GetAnnotDict()->GetInteger("F"); +int CPDFSDK_BAAnnot::GetFlags() const { + return m_pAnnot->GetAnnotDict()->GetInteger("F"); } -void CPDFSDK_BAAnnot::SetAppState(const CFX_ByteString& str) -{ - if (str.IsEmpty()) - m_pAnnot->GetAnnotDict()->RemoveAt("AS"); - else - m_pAnnot->GetAnnotDict()->SetAtString("AS", str); +void CPDFSDK_BAAnnot::SetAppState(const CFX_ByteString& str) { + if (str.IsEmpty()) + m_pAnnot->GetAnnotDict()->RemoveAt("AS"); + else + m_pAnnot->GetAnnotDict()->SetAtString("AS", str); } -CFX_ByteString CPDFSDK_BAAnnot::GetAppState() const -{ - return m_pAnnot->GetAnnotDict()->GetString("AS"); +CFX_ByteString CPDFSDK_BAAnnot::GetAppState() const { + return m_pAnnot->GetAnnotDict()->GetString("AS"); } -void CPDFSDK_BAAnnot::SetStructParent(int key) -{ - m_pAnnot->GetAnnotDict()->SetAtInteger("StructParent", key); +void CPDFSDK_BAAnnot::SetStructParent(int key) { + m_pAnnot->GetAnnotDict()->SetAtInteger("StructParent", key); } -int CPDFSDK_BAAnnot::GetStructParent() const -{ - return m_pAnnot->GetAnnotDict()->GetInteger("StructParent"); +int CPDFSDK_BAAnnot::GetStructParent() const { + return m_pAnnot->GetAnnotDict()->GetInteger("StructParent"); } -//border -void CPDFSDK_BAAnnot::SetBorderWidth(int nWidth) -{ - CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border"); - - if (pBorder) - { - pBorder->SetAt(2, FX_NEW CPDF_Number(nWidth)); - } - else - { - CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); +// border +void CPDFSDK_BAAnnot::SetBorderWidth(int nWidth) { + CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border"); - if (!pBSDict) - { - pBSDict = FX_NEW CPDF_Dictionary; - m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict); - } + if (pBorder) { + pBorder->SetAt(2, FX_NEW CPDF_Number(nWidth)); + } else { + CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); - pBSDict->SetAtInteger("W", nWidth); + if (!pBSDict) { + pBSDict = FX_NEW CPDF_Dictionary; + m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict); } + + pBSDict->SetAtInteger("W", nWidth); + } } -int CPDFSDK_BAAnnot::GetBorderWidth() const -{ - if (CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border")) { - return pBorder->GetInteger(2); - } - if (CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS")) { - return pBSDict->GetInteger("W", 1); - } - return 1; +int CPDFSDK_BAAnnot::GetBorderWidth() const { + if (CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border")) { + return pBorder->GetInteger(2); + } + if (CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS")) { + return pBSDict->GetInteger("W", 1); + } + return 1; } -void CPDFSDK_BAAnnot::SetBorderStyle(int nStyle) -{ - CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); - if (!pBSDict) - { - pBSDict = new CPDF_Dictionary; - m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict); - } +void CPDFSDK_BAAnnot::SetBorderStyle(int nStyle) { + CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); + if (!pBSDict) { + pBSDict = new CPDF_Dictionary; + m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict); + } - switch (nStyle) - { + switch (nStyle) { case BBS_SOLID: - pBSDict->SetAtName("S", "S"); - break; + pBSDict->SetAtName("S", "S"); + break; case BBS_DASH: - pBSDict->SetAtName("S", "D"); - break; + pBSDict->SetAtName("S", "D"); + break; case BBS_BEVELED: - pBSDict->SetAtName("S", "B"); - break; + pBSDict->SetAtName("S", "B"); + break; case BBS_INSET: - pBSDict->SetAtName("S", "I"); - break; + pBSDict->SetAtName("S", "I"); + break; case BBS_UNDERLINE: - pBSDict->SetAtName("S", "U"); - break; - } -} - -int CPDFSDK_BAAnnot::GetBorderStyle() const -{ - CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); - if (pBSDict) - { - CFX_ByteString sBorderStyle = pBSDict->GetString("S", "S"); - if (sBorderStyle == "S") return BBS_SOLID; - if (sBorderStyle == "D") return BBS_DASH; - if (sBorderStyle == "B") return BBS_BEVELED; - if (sBorderStyle == "I") return BBS_INSET; - if (sBorderStyle == "U") return BBS_UNDERLINE; + pBSDict->SetAtName("S", "U"); + break; + } +} + +int CPDFSDK_BAAnnot::GetBorderStyle() const { + CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); + if (pBSDict) { + CFX_ByteString sBorderStyle = pBSDict->GetString("S", "S"); + if (sBorderStyle == "S") + return BBS_SOLID; + if (sBorderStyle == "D") + return BBS_DASH; + if (sBorderStyle == "B") + return BBS_BEVELED; + if (sBorderStyle == "I") + return BBS_INSET; + if (sBorderStyle == "U") + return BBS_UNDERLINE; + } + + CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border"); + if (pBorder) { + if (pBorder->GetCount() >= 4) { + CPDF_Array* pDP = pBorder->GetArray(3); + if (pDP && pDP->GetCount() > 0) + return BBS_DASH; } + } - CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border"); - if (pBorder) - { - if (pBorder->GetCount() >= 4) - { - CPDF_Array *pDP = pBorder->GetArray(3); - if (pDP && pDP->GetCount() > 0) - return BBS_DASH; - } - } - - return BBS_SOLID; + return BBS_SOLID; } -void CPDFSDK_BAAnnot::SetBorderDash(const CFX_IntArray& array) -{ - CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); - if (!pBSDict) - { - pBSDict = new CPDF_Dictionary; - m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict); - } +void CPDFSDK_BAAnnot::SetBorderDash(const CFX_IntArray& array) { + CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); + if (!pBSDict) { + pBSDict = new CPDF_Dictionary; + m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict); + } - CPDF_Array* pArray = FX_NEW CPDF_Array; - for (int i=0,sz=array.GetSize(); iAddInteger(array[i]); - } + CPDF_Array* pArray = FX_NEW CPDF_Array; + for (int i = 0, sz = array.GetSize(); i < sz; i++) { + pArray->AddInteger(array[i]); + } - pBSDict->SetAt("D", pArray); + pBSDict->SetAt("D", pArray); } -void CPDFSDK_BAAnnot::GetBorderDash(CFX_IntArray& array) const -{ - CPDF_Array* pDash = NULL; +void CPDFSDK_BAAnnot::GetBorderDash(CFX_IntArray& array) const { + CPDF_Array* pDash = NULL; - CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border"); - if (pBorder) - { - pDash = pBorder->GetArray(3); - } - else - { - CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); - if (pBSDict) - { - pDash = pBSDict->GetArray("D"); - } + CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border"); + if (pBorder) { + pDash = pBorder->GetArray(3); + } else { + CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); + if (pBSDict) { + pDash = pBSDict->GetArray("D"); } + } - if (pDash) - { - for (int i=0,sz=pDash->GetCount(); iGetInteger(i)); - } + if (pDash) { + for (int i = 0, sz = pDash->GetCount(); i < sz; i++) { + array.Add(pDash->GetInteger(i)); } + } } -void CPDFSDK_BAAnnot::SetColor(FX_COLORREF color) -{ - CPDF_Array* pArray = new CPDF_Array; - pArray->AddNumber((FX_FLOAT)FXSYS_GetRValue(color) / 255.0f); - pArray->AddNumber((FX_FLOAT)FXSYS_GetGValue(color) / 255.0f); - pArray->AddNumber((FX_FLOAT)FXSYS_GetBValue(color) / 255.0f); - m_pAnnot->GetAnnotDict()->SetAt("C", pArray); +void CPDFSDK_BAAnnot::SetColor(FX_COLORREF color) { + CPDF_Array* pArray = new CPDF_Array; + pArray->AddNumber((FX_FLOAT)FXSYS_GetRValue(color) / 255.0f); + pArray->AddNumber((FX_FLOAT)FXSYS_GetGValue(color) / 255.0f); + pArray->AddNumber((FX_FLOAT)FXSYS_GetBValue(color) / 255.0f); + m_pAnnot->GetAnnotDict()->SetAt("C", pArray); } -void CPDFSDK_BAAnnot::RemoveColor() -{ - m_pAnnot->GetAnnotDict()->RemoveAt("C"); +void CPDFSDK_BAAnnot::RemoveColor() { + m_pAnnot->GetAnnotDict()->RemoveAt("C"); } -FX_BOOL CPDFSDK_BAAnnot::GetColor(FX_COLORREF& color) const -{ - if (CPDF_Array* pEntry = m_pAnnot->GetAnnotDict()->GetArray("C")) - { - int nCount = pEntry->GetCount(); - if (nCount == 1) - { - FX_FLOAT g = pEntry->GetNumber(0) * 255; +FX_BOOL CPDFSDK_BAAnnot::GetColor(FX_COLORREF& color) const { + if (CPDF_Array* pEntry = m_pAnnot->GetAnnotDict()->GetArray("C")) { + int nCount = pEntry->GetCount(); + if (nCount == 1) { + FX_FLOAT g = pEntry->GetNumber(0) * 255; - color = FXSYS_RGB((int)g, (int)g, (int)g); + color = FXSYS_RGB((int)g, (int)g, (int)g); - return TRUE; - } - else if (nCount == 3) - { - FX_FLOAT r = pEntry->GetNumber(0) * 255; - FX_FLOAT g = pEntry->GetNumber(1) * 255; - FX_FLOAT b = pEntry->GetNumber(2) * 255; + return TRUE; + } else if (nCount == 3) { + FX_FLOAT r = pEntry->GetNumber(0) * 255; + FX_FLOAT g = pEntry->GetNumber(1) * 255; + FX_FLOAT b = pEntry->GetNumber(2) * 255; - color = FXSYS_RGB((int)r, (int)g, (int)b); + color = FXSYS_RGB((int)r, (int)g, (int)b); - return TRUE; - } - else if (nCount == 4) - { - FX_FLOAT c = pEntry->GetNumber(0); - FX_FLOAT m = pEntry->GetNumber(1); - FX_FLOAT y = pEntry->GetNumber(2); - FX_FLOAT k = pEntry->GetNumber(3); + return TRUE; + } else if (nCount == 4) { + FX_FLOAT c = pEntry->GetNumber(0); + FX_FLOAT m = pEntry->GetNumber(1); + FX_FLOAT y = pEntry->GetNumber(2); + FX_FLOAT k = pEntry->GetNumber(3); - FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k); - FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k); - FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k); + FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k); + FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k); + FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k); - color = FXSYS_RGB((int)(r * 255), (int)(g * 255), (int)(b * 255)); + color = FXSYS_RGB((int)(r * 255), (int)(g * 255), (int)(b * 255)); - return TRUE; - } + return TRUE; } - - return FALSE; -} - - -void CPDFSDK_BAAnnot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Rect& rcBBox, - const CPDF_Matrix& matrix, const CFX_ByteString& sContents, - const CFX_ByteString& sAPState) -{ - CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP"); - - if (!pAPDict) - { - pAPDict = new CPDF_Dictionary; - m_pAnnot->GetAnnotDict()->SetAt("AP", pAPDict); + } + + return FALSE; +} + +void CPDFSDK_BAAnnot::WriteAppearance(const CFX_ByteString& sAPType, + const CPDF_Rect& rcBBox, + const CPDF_Matrix& matrix, + const CFX_ByteString& sContents, + const CFX_ByteString& sAPState) { + CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP"); + + if (!pAPDict) { + pAPDict = new CPDF_Dictionary; + m_pAnnot->GetAnnotDict()->SetAt("AP", pAPDict); + } + + CPDF_Stream* pStream = NULL; + CPDF_Dictionary* pParentDict = NULL; + + if (sAPState.IsEmpty()) { + pParentDict = pAPDict; + pStream = pAPDict->GetStream(sAPType); + } else { + CPDF_Dictionary* pAPTypeDict = pAPDict->GetDict(sAPType); + if (!pAPTypeDict) { + pAPTypeDict = FX_NEW CPDF_Dictionary; + pAPDict->SetAt(sAPType, pAPTypeDict); } - CPDF_Stream* pStream = NULL; - CPDF_Dictionary* pParentDict = NULL; + pParentDict = pAPTypeDict; + pStream = pAPTypeDict->GetStream(sAPState); + } - if (sAPState.IsEmpty()) - { - pParentDict = pAPDict; - pStream = pAPDict->GetStream(sAPType); - } - else - { - CPDF_Dictionary* pAPTypeDict = pAPDict->GetDict(sAPType); - if (!pAPTypeDict) - { - pAPTypeDict = FX_NEW CPDF_Dictionary; - pAPDict->SetAt(sAPType, pAPTypeDict); - } - - pParentDict = pAPTypeDict; - pStream = pAPTypeDict->GetStream(sAPState); - } + if (!pStream) { + ASSERT(m_pPageView != NULL); + CPDF_Document* pDoc = m_pPageView->GetPDFDocument(); + ASSERT(pDoc != NULL); - if (!pStream) - { - ASSERT(m_pPageView != NULL); - CPDF_Document* pDoc = m_pPageView->GetPDFDocument(); - ASSERT(pDoc != NULL); - - pStream = FX_NEW CPDF_Stream(NULL, 0, NULL); - int32_t objnum = pDoc->AddIndirectObject(pStream); - //pAPDict->SetAtReference(sAPType, pDoc, objnum); - ASSERT(pParentDict != NULL); - pParentDict->SetAtReference(sAPType, pDoc, objnum); - } + pStream = FX_NEW CPDF_Stream(NULL, 0, NULL); + int32_t objnum = pDoc->AddIndirectObject(pStream); + // pAPDict->SetAtReference(sAPType, pDoc, objnum); + ASSERT(pParentDict != NULL); + pParentDict->SetAtReference(sAPType, pDoc, objnum); + } - CPDF_Dictionary * pStreamDict = pStream->GetDict(); + CPDF_Dictionary* pStreamDict = pStream->GetDict(); - if (!pStreamDict) - { - pStreamDict = FX_NEW CPDF_Dictionary; - pStreamDict->SetAtName("Type", "XObject"); - pStreamDict->SetAtName("Subtype", "Form"); - pStreamDict->SetAtInteger("FormType", 1); - pStream->InitStream(NULL,0,pStreamDict); - } + if (!pStreamDict) { + pStreamDict = FX_NEW CPDF_Dictionary; + pStreamDict->SetAtName("Type", "XObject"); + pStreamDict->SetAtName("Subtype", "Form"); + pStreamDict->SetAtInteger("FormType", 1); + pStream->InitStream(NULL, 0, pStreamDict); + } - if (pStreamDict) - { - pStreamDict->SetAtMatrix("Matrix",matrix); - pStreamDict->SetAtRect("BBox", rcBBox); - } + if (pStreamDict) { + pStreamDict->SetAtMatrix("Matrix", matrix); + pStreamDict->SetAtRect("BBox", rcBBox); + } - pStream->SetData((uint8_t*)sContents.c_str(), sContents.GetLength(), FALSE, FALSE); + pStream->SetData((uint8_t*)sContents.c_str(), sContents.GetLength(), FALSE, + FALSE); } -#define BA_ANNOT_MINWIDTH 1 -#define BA_ANNOT_MINHEIGHT 1 +#define BA_ANNOT_MINWIDTH 1 +#define BA_ANNOT_MINHEIGHT 1 -FX_FLOAT CPDFSDK_Annot::GetMinWidth() const -{ - return BA_ANNOT_MINWIDTH; +FX_FLOAT CPDFSDK_Annot::GetMinWidth() const { + return BA_ANNOT_MINWIDTH; } -FX_FLOAT CPDFSDK_Annot::GetMinHeight() const -{ - return BA_ANNOT_MINHEIGHT; +FX_FLOAT CPDFSDK_Annot::GetMinHeight() const { + return BA_ANNOT_MINHEIGHT; } -FX_BOOL CPDFSDK_BAAnnot::CreateFormFiller() -{ - return TRUE; +FX_BOOL CPDFSDK_BAAnnot::CreateFormFiller() { + return TRUE; } -FX_BOOL CPDFSDK_BAAnnot::IsVisible() const -{ - int nFlags = GetFlags(); - return !((nFlags & ANNOTFLAG_INVISIBLE) || (nFlags & ANNOTFLAG_HIDDEN) || (nFlags & ANNOTFLAG_NOVIEW)); +FX_BOOL CPDFSDK_BAAnnot::IsVisible() const { + int nFlags = GetFlags(); + return !((nFlags & ANNOTFLAG_INVISIBLE) || (nFlags & ANNOTFLAG_HIDDEN) || + (nFlags & ANNOTFLAG_NOVIEW)); } -CPDF_Action CPDFSDK_BAAnnot::GetAction() const -{ - return CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A")); +CPDF_Action CPDFSDK_BAAnnot::GetAction() const { + return CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A")); } -void CPDFSDK_BAAnnot::SetAction(const CPDF_Action& action) -{ - ASSERT(action); - if ((CPDF_Action&)action != CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A"))) - { - CPDF_Document* pDoc = m_pPageView->GetPDFDocument(); - CPDF_Dictionary* pDict = action.GetDict(); - if (pDict && pDict->GetObjNum() == 0) { - pDoc->AddIndirectObject(pDict); - } - m_pAnnot->GetAnnotDict()->SetAtReference("A", pDoc, pDict->GetObjNum()); +void CPDFSDK_BAAnnot::SetAction(const CPDF_Action& action) { + ASSERT(action); + if ((CPDF_Action&)action != + CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A"))) { + CPDF_Document* pDoc = m_pPageView->GetPDFDocument(); + CPDF_Dictionary* pDict = action.GetDict(); + if (pDict && pDict->GetObjNum() == 0) { + pDoc->AddIndirectObject(pDict); } + m_pAnnot->GetAnnotDict()->SetAtReference("A", pDoc, pDict->GetObjNum()); + } } -void CPDFSDK_BAAnnot::RemoveAction() -{ - m_pAnnot->GetAnnotDict()->RemoveAt("A"); +void CPDFSDK_BAAnnot::RemoveAction() { + m_pAnnot->GetAnnotDict()->RemoveAt("A"); } -CPDF_AAction CPDFSDK_BAAnnot::GetAAction() const -{ - return m_pAnnot->GetAnnotDict()->GetDict("AA"); +CPDF_AAction CPDFSDK_BAAnnot::GetAAction() const { + return m_pAnnot->GetAnnotDict()->GetDict("AA"); } -void CPDFSDK_BAAnnot::SetAAction(const CPDF_AAction& aa) -{ - ASSERT(aa != NULL); +void CPDFSDK_BAAnnot::SetAAction(const CPDF_AAction& aa) { + ASSERT(aa != NULL); - if ((CPDF_AAction&)aa != m_pAnnot->GetAnnotDict()->GetDict("AA")) - m_pAnnot->GetAnnotDict()->SetAt("AA", (CPDF_AAction&)aa); + if ((CPDF_AAction&)aa != m_pAnnot->GetAnnotDict()->GetDict("AA")) + m_pAnnot->GetAnnotDict()->SetAt("AA", (CPDF_AAction&)aa); } -void CPDFSDK_BAAnnot::RemoveAAction() -{ - m_pAnnot->GetAnnotDict()->RemoveAt("AA"); +void CPDFSDK_BAAnnot::RemoveAAction() { + m_pAnnot->GetAnnotDict()->RemoveAt("AA"); } -CPDF_Action CPDFSDK_BAAnnot::GetAAction(CPDF_AAction::AActionType eAAT) -{ - CPDF_AAction AAction = GetAAction(); +CPDF_Action CPDFSDK_BAAnnot::GetAAction(CPDF_AAction::AActionType eAAT) { + CPDF_AAction AAction = GetAAction(); - if (AAction.ActionExist(eAAT)) - return AAction.GetAction(eAAT); + if (AAction.ActionExist(eAAT)) + return AAction.GetAction(eAAT); - if (eAAT == CPDF_AAction::ButtonUp) - return GetAction(); + if (eAAT == CPDF_AAction::ButtonUp) + return GetAction(); - return CPDF_Action(); + return CPDF_Action(); } -FX_BOOL CPDFSDK_BAAnnot::IsXFAField() -{ - return FALSE; +FX_BOOL CPDFSDK_BAAnnot::IsXFAField() { + return FALSE; } -void CPDFSDK_BAAnnot::Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, CPDF_RenderOptions* pOptions) -{ - - m_pAnnot->GetAPForm(m_pPageView->GetPDFPage(), CPDF_Annot::Normal); - m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, CPDF_Annot::Normal, NULL); +void CPDFSDK_BAAnnot::Annot_OnDraw(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + CPDF_RenderOptions* pOptions) { + m_pAnnot->GetAPForm(m_pPageView->GetPDFPage(), CPDF_Annot::Normal); + m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, + CPDF_Annot::Normal, NULL); - return ; + return; } -CPDF_Page* CPDFSDK_Annot::GetPDFPage() -{ - if(m_pPageView) - return m_pPageView->GetPDFPage(); - return NULL; +CPDF_Page* CPDFSDK_Annot::GetPDFPage() { + if (m_pPageView) + return m_pPageView->GetPDFPage(); + return NULL; } -CPDFXFA_Page* CPDFSDK_Annot::GetPDFXFAPage() -{ - if (m_pPageView) - return m_pPageView->GetPDFXFAPage(); - return NULL; +CPDFXFA_Page* CPDFSDK_Annot::GetPDFXFAPage() { + if (m_pPageView) + return m_pPageView->GetPDFXFAPage(); + return NULL; } - diff --git a/fpdfsdk/src/fsdk_baseform.cpp b/fpdfsdk/src/fsdk_baseform.cpp index b26a7f40fc..5c76149a0d 100644 --- a/fpdfsdk/src/fsdk_baseform.cpp +++ b/fpdfsdk/src/fsdk_baseform.cpp @@ -20,3651 +20,3355 @@ //* CPDFSDK_Widget //------------------------------------------------------------------------------------ -#define IsFloatZero(f) ((f) < 0.01 && (f) > -0.01) -#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb)) - -CPDFSDK_Widget::CPDFSDK_Widget(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView, CPDFSDK_InterForm* pInterForm) : - CPDFSDK_BAAnnot(pAnnot, pPageView), - m_pInterForm(pInterForm), - m_nAppAge(0), - m_nValueAge(0), - m_hMixXFAWidget(NULL), - m_pWidgetHandler(NULL) -{ - ASSERT(m_pInterForm != NULL); +#define IsFloatZero(f) ((f) < 0.01 && (f) > -0.01) +#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb)) + +CPDFSDK_Widget::CPDFSDK_Widget(CPDF_Annot* pAnnot, + CPDFSDK_PageView* pPageView, + CPDFSDK_InterForm* pInterForm) + : CPDFSDK_BAAnnot(pAnnot, pPageView), + m_pInterForm(pInterForm), + m_nAppAge(0), + m_nValueAge(0), + m_hMixXFAWidget(NULL), + m_pWidgetHandler(NULL) { + ASSERT(m_pInterForm != NULL); +} + +CPDFSDK_Widget::~CPDFSDK_Widget() {} + +IXFA_Widget* CPDFSDK_Widget::GetMixXFAWidget() { + ASSERT(m_pPageView != NULL); + + CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); + ASSERT(pSDKDoc != NULL); + + CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); + ASSERT(pDoc != NULL); + + if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) { + if (!m_hMixXFAWidget) { + if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) { + CFX_WideString sName; + if (this->GetFieldType() == FIELDTYPE_RADIOBUTTON) { + sName = this->GetAnnotName(); + if (sName.IsEmpty()) + sName = GetName(); + } else + sName = GetName(); + + if (!sName.IsEmpty()) + m_hMixXFAWidget = pDocView->GetWidgetByName(sName); + } + } + return m_hMixXFAWidget; + } + + return NULL; } -CPDFSDK_Widget::~CPDFSDK_Widget() -{ +IXFA_Widget* CPDFSDK_Widget::GetGroupMixXFAWidget() { + ASSERT(m_pPageView != NULL); + + CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); + ASSERT(pSDKDoc != NULL); + + CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); + ASSERT(pDoc != NULL); + + if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) { + if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) { + CFX_WideString sName = GetName(); + if (!sName.IsEmpty()) + return pDocView->GetWidgetByName(sName); + } + } + + return NULL; } -IXFA_Widget* CPDFSDK_Widget::GetMixXFAWidget() -{ - ASSERT(m_pPageView != NULL); - - CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); +IXFA_WidgetHandler* CPDFSDK_Widget::GetXFAWidgetHandler() { + ASSERT(m_pPageView != NULL); - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - ASSERT(pDoc != NULL); + CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); + ASSERT(pSDKDoc != NULL); - if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) - { - if (!m_hMixXFAWidget) - { - if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) - { - CFX_WideString sName; - if (this->GetFieldType() == FIELDTYPE_RADIOBUTTON) - { - sName = this->GetAnnotName(); - if (sName.IsEmpty()) - sName = GetName(); - } - else - sName = GetName(); - - if (!sName.IsEmpty()) - m_hMixXFAWidget = pDocView->GetWidgetByName(sName); - } - } - return m_hMixXFAWidget; - } - - return NULL; -} - -IXFA_Widget* CPDFSDK_Widget::GetGroupMixXFAWidget() -{ - ASSERT(m_pPageView != NULL); - - CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); - - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - ASSERT(pDoc != NULL); - - if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) - { - if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) - { - CFX_WideString sName = GetName(); - - if (!sName.IsEmpty()) - return pDocView->GetWidgetByName(sName); - } - } - - return NULL; -} - -IXFA_WidgetHandler* CPDFSDK_Widget::GetXFAWidgetHandler() -{ - ASSERT(m_pPageView != NULL); - - CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); - - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - ASSERT(pDoc != NULL); - - if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) - { - if (!m_pWidgetHandler) - { - if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) - { - m_pWidgetHandler = pDocView->GetWidgetHandler(); - } - } - return m_pWidgetHandler; - } - - return NULL; -} - -static XFA_EVENTTYPE GetXFAEventType(PDFSDK_XFAAActionType eXFAAAT) -{ - XFA_EVENTTYPE eEventType = XFA_EVENT_Unknown; - - switch (eXFAAAT) - { - case PDFSDK_XFA_Click: - eEventType = XFA_EVENT_Click; - break; - case PDFSDK_XFA_Full: - eEventType = XFA_EVENT_Full; - break; - case PDFSDK_XFA_PreOpen: - eEventType = XFA_EVENT_PreOpen; - break; - case PDFSDK_XFA_PostOpen: - eEventType = XFA_EVENT_PostOpen; - break; - } - - return eEventType; -} - -static XFA_EVENTTYPE GetXFAEventType(CPDF_AAction::AActionType eAAT, FX_BOOL bWillCommit) -{ - XFA_EVENTTYPE eEventType = XFA_EVENT_Unknown; - - switch (eAAT) - { - case CPDF_AAction::CursorEnter: - eEventType = XFA_EVENT_MouseEnter; - break; - case CPDF_AAction::CursorExit: - eEventType = XFA_EVENT_MouseExit; - break; - case CPDF_AAction::ButtonDown: - eEventType = XFA_EVENT_MouseDown; - break; - case CPDF_AAction::ButtonUp: - eEventType = XFA_EVENT_MouseUp; - break; - case CPDF_AAction::GetFocus: - eEventType = XFA_EVENT_Enter; - break; - case CPDF_AAction::LoseFocus: - eEventType = XFA_EVENT_Exit; - break; - case CPDF_AAction::PageOpen: - break; - case CPDF_AAction::PageClose: - break; - case CPDF_AAction::PageVisible: - break; - case CPDF_AAction::PageInvisible: - break; - case CPDF_AAction::KeyStroke: - if (!bWillCommit) - { - eEventType = XFA_EVENT_Change; - } - break; - case CPDF_AAction::Validate: - eEventType = XFA_EVENT_Validate; - break; - case CPDF_AAction::OpenPage: - case CPDF_AAction::ClosePage: - case CPDF_AAction::Format: - case CPDF_AAction::Calculate: - case CPDF_AAction::CloseDocument: - case CPDF_AAction::SaveDocument: - case CPDF_AAction::DocumentSaved: - case CPDF_AAction::PrintDocument: - case CPDF_AAction::DocumentPrinted: - break; - } - - return eEventType; -} - -FX_BOOL CPDFSDK_Widget::HasXFAAAction(PDFSDK_XFAAActionType eXFAAAT) -{ - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) - { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) - { - XFA_EVENTTYPE eEventType = GetXFAEventType(eXFAAAT); - - if ((eEventType == XFA_EVENT_Click || - eEventType == XFA_EVENT_Change) && - GetFieldType() == FIELDTYPE_RADIOBUTTON) - { - if (IXFA_Widget* hGroupWidget = GetGroupMixXFAWidget()) - { - CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hGroupWidget); - if (pXFAWidgetHandler->HasEvent(pAcc, eEventType)) - return TRUE; - } - } - - { - CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget); - return pXFAWidgetHandler->HasEvent(pAcc, eEventType); - } - } - } - - return FALSE; -} - -FX_BOOL CPDFSDK_Widget::OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT, PDFSDK_FieldAction& data, CPDFSDK_PageView* pPageView) -{ - ASSERT(m_pPageView != NULL); - - CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); - - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - ASSERT(pDoc != NULL); - - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) - { - XFA_EVENTTYPE eEventType = GetXFAEventType(eXFAAAT); - - if (eEventType != XFA_EVENT_Unknown) - { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) - { - CXFA_EventParam param; - param.m_eType = eEventType; - param.m_wsChange = data.sChange; - param.m_iCommitKey = data.nCommitKey; - param.m_bShift = data.bShift; - param.m_iSelStart = data.nSelStart; - param.m_iSelEnd = data.nSelEnd; - param.m_wsFullText = data.sValue; - param.m_bKeyDown = data.bKeyDown; - param.m_bModifier = data.bModifier; - param.m_wsNewText = data.sValue; - if (data.nSelEnd > data.nSelStart) - param.m_wsNewText.Delete(data.nSelStart, data.nSelEnd - data.nSelStart); - for (int i=0; iGetDataAcc(hGroupWidget); - param.m_pTarget = pAcc; - pXFAWidgetHandler->ProcessEvent(pAcc, ¶m); - } - - { - CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget); - param.m_pTarget = pAcc; - int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, ¶m); - return nRet == XFA_EVENTERROR_Sucess; - } - } - else - { - CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget); - param.m_pTarget = pAcc; - int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, ¶m); - return nRet == XFA_EVENTERROR_Sucess; - } - - if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) - { - pDocView->UpdateDocView(); - } - } - } - } - - return FALSE; -} - -void CPDFSDK_Widget::Synchronize(FX_BOOL bSynchronizeElse) -{ - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) - { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) - { - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); - - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - switch (GetFieldType()) - { - case FIELDTYPE_CHECKBOX: - case FIELDTYPE_RADIOBUTTON: - { - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); - - XFA_CHECKSTATE eCheckState = pFormCtrl->IsChecked() ? XFA_CHECKSTATE_On : XFA_CHECKSTATE_Off; - pWidgetAcc->SetCheckState(eCheckState); - } - break; - case FIELDTYPE_TEXTFIELD: - pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit); - break; - case FIELDTYPE_LISTBOX: - { - pWidgetAcc->ClearAllSelections(); - - for (int i=0,sz=pFormField->CountSelectedItems(); iGetSelectedIndex(i); - if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems()) - pWidgetAcc->SetItemState(nIndex, TRUE, FALSE); - } - } - break; - case FIELDTYPE_COMBOBOX: - { - pWidgetAcc->ClearAllSelections(); - - for (int i=0,sz=pFormField->CountSelectedItems(); iGetSelectedIndex(i); - if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems()) - pWidgetAcc->SetItemState(nIndex, TRUE, FALSE); - } - } - - pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit); - break; - } - - if (bSynchronizeElse) - pWidgetAcc->ProcessValueChanged(); - } - } - } -} - -void CPDFSDK_Widget::SynchronizeXFAValue() -{ - ASSERT(m_pPageView != NULL); - - CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); - - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - ASSERT(pDoc != NULL); - - IXFA_DocView* pXFADocView = pDoc->GetXFADocView(); - if (!pXFADocView) return; - - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) - { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) - { - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); - - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); - - CPDFSDK_Widget::SynchronizeXFAValue(pXFADocView, hWidget, pFormField, pFormCtrl); - } - } -} - -void CPDFSDK_Widget::SynchronizeXFAItems() -{ - ASSERT(m_pPageView != NULL); - - CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); - - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - ASSERT(pDoc != NULL); - - IXFA_DocView* pXFADocView = pDoc->GetXFADocView(); - if (!pXFADocView) return; - - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) - { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) - { - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); - - SynchronizeXFAItems(pXFADocView, hWidget, pFormField, NULL); - } - } -} - -void CPDFSDK_Widget::SynchronizeXFAValue(IXFA_DocView* pXFADocView, IXFA_Widget* hWidget, - CPDF_FormField* pFormField, CPDF_FormControl* pFormControl) -{ - ASSERT(pXFADocView != NULL); - ASSERT(hWidget != NULL); - - if (IXFA_WidgetHandler* pXFAWidgetHandler = pXFADocView->GetWidgetHandler()) - { - ASSERT(pFormField != NULL); - ASSERT(pFormControl != NULL); - - switch (pFormField->GetFieldType()) - { - case FIELDTYPE_CHECKBOX: - { - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On; - - pFormField->CheckControl(pFormField->GetControlIndex(pFormControl), - bChecked, TRUE); - } - } - break; - case FIELDTYPE_RADIOBUTTON: - { - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On; - - pFormField->CheckControl(pFormField->GetControlIndex(pFormControl), - bChecked, TRUE); - } - } - break; - case FIELDTYPE_TEXTFIELD: - { - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - CFX_WideString sValue; - pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display); - pFormField->SetValue(sValue, TRUE); - } - } - break; - case FIELDTYPE_LISTBOX: - { - pFormField->ClearSelection(FALSE); - - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - for (int i=0,sz=pWidgetAcc->CountSelectedItems(); iGetSelectedItem(i); - - if (nIndex > -1 && nIndex < pFormField->CountOptions()) - { - pFormField->SetItemSelection(nIndex, TRUE, TRUE); - } - } - } - } - break; - case FIELDTYPE_COMBOBOX: - { - pFormField->ClearSelection(FALSE); - - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - for (int i=0,sz=pWidgetAcc->CountSelectedItems(); iGetSelectedItem(i); - - if (nIndex > -1 && nIndex < pFormField->CountOptions()) - { - pFormField->SetItemSelection(nIndex, TRUE, TRUE); - } - } - - CFX_WideString sValue; - pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display); - pFormField->SetValue(sValue, TRUE); - } - } - break; - } - } -} - -void CPDFSDK_Widget::SynchronizeXFAItems(IXFA_DocView* pXFADocView, IXFA_Widget* hWidget, - CPDF_FormField* pFormField, CPDF_FormControl* pFormControl) -{ - ASSERT(pXFADocView != NULL); - ASSERT(hWidget != NULL); - - if (IXFA_WidgetHandler* pXFAWidgetHandler = pXFADocView->GetWidgetHandler()) - { - ASSERT(pFormField != NULL); - - switch (pFormField->GetFieldType()) - { - case FIELDTYPE_LISTBOX: - { - pFormField->ClearSelection(FALSE); - pFormField->ClearOptions(TRUE); - - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - for (int i=0,sz=pWidgetAcc->CountChoiceListItems(); iGetChoiceListItem(swText, i); - - pFormField->InsertOption(swText, i, TRUE); - } - } - } - break; - case FIELDTYPE_COMBOBOX: - { - pFormField->ClearSelection(FALSE); - pFormField->ClearOptions(FALSE); - - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - for (int i=0,sz=pWidgetAcc->CountChoiceListItems(); iGetChoiceListItem(swText, i); - - pFormField->InsertOption(swText, i, FALSE); - } - } - - pFormField->SetValue(L"", TRUE); - } - break; - } - } -} - -FX_BOOL CPDFSDK_Widget::IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode) -{ - CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP"); - if (!pAP) - return FALSE; + CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); + ASSERT(pDoc != NULL); - // Choose the right sub-ap - const FX_CHAR* ap_entry = "N"; - if (mode == CPDF_Annot::Down) - ap_entry = "D"; - else if (mode == CPDF_Annot::Rollover) - ap_entry = "R"; - if (!pAP->KeyExist(ap_entry)) - ap_entry = "N"; - - // Get the AP stream or subdirectory - CPDF_Object* psub = pAP->GetElementValue(ap_entry); - if (!psub) - return FALSE; + if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) { + if (!m_pWidgetHandler) { + if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) { + m_pWidgetHandler = pDocView->GetWidgetHandler(); + } + } + return m_pWidgetHandler; + } + + return NULL; +} + +static XFA_EVENTTYPE GetXFAEventType(PDFSDK_XFAAActionType eXFAAAT) { + XFA_EVENTTYPE eEventType = XFA_EVENT_Unknown; + + switch (eXFAAAT) { + case PDFSDK_XFA_Click: + eEventType = XFA_EVENT_Click; + break; + case PDFSDK_XFA_Full: + eEventType = XFA_EVENT_Full; + break; + case PDFSDK_XFA_PreOpen: + eEventType = XFA_EVENT_PreOpen; + break; + case PDFSDK_XFA_PostOpen: + eEventType = XFA_EVENT_PostOpen; + break; + } + + return eEventType; +} + +static XFA_EVENTTYPE GetXFAEventType(CPDF_AAction::AActionType eAAT, + FX_BOOL bWillCommit) { + XFA_EVENTTYPE eEventType = XFA_EVENT_Unknown; + + switch (eAAT) { + case CPDF_AAction::CursorEnter: + eEventType = XFA_EVENT_MouseEnter; + break; + case CPDF_AAction::CursorExit: + eEventType = XFA_EVENT_MouseExit; + break; + case CPDF_AAction::ButtonDown: + eEventType = XFA_EVENT_MouseDown; + break; + case CPDF_AAction::ButtonUp: + eEventType = XFA_EVENT_MouseUp; + break; + case CPDF_AAction::GetFocus: + eEventType = XFA_EVENT_Enter; + break; + case CPDF_AAction::LoseFocus: + eEventType = XFA_EVENT_Exit; + break; + case CPDF_AAction::PageOpen: + break; + case CPDF_AAction::PageClose: + break; + case CPDF_AAction::PageVisible: + break; + case CPDF_AAction::PageInvisible: + break; + case CPDF_AAction::KeyStroke: + if (!bWillCommit) { + eEventType = XFA_EVENT_Change; + } + break; + case CPDF_AAction::Validate: + eEventType = XFA_EVENT_Validate; + break; + case CPDF_AAction::OpenPage: + case CPDF_AAction::ClosePage: + case CPDF_AAction::Format: + case CPDF_AAction::Calculate: + case CPDF_AAction::CloseDocument: + case CPDF_AAction::SaveDocument: + case CPDF_AAction::DocumentSaved: + case CPDF_AAction::PrintDocument: + case CPDF_AAction::DocumentPrinted: + break; + } + + return eEventType; +} + +FX_BOOL CPDFSDK_Widget::HasXFAAAction(PDFSDK_XFAAActionType eXFAAAT) { + if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { + if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { + XFA_EVENTTYPE eEventType = GetXFAEventType(eXFAAAT); + + if ((eEventType == XFA_EVENT_Click || eEventType == XFA_EVENT_Change) && + GetFieldType() == FIELDTYPE_RADIOBUTTON) { + if (IXFA_Widget* hGroupWidget = GetGroupMixXFAWidget()) { + CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hGroupWidget); + if (pXFAWidgetHandler->HasEvent(pAcc, eEventType)) + return TRUE; + } + } - int nFieldType = GetFieldType(); - switch (nFieldType) - { - case FIELDTYPE_PUSHBUTTON: - case FIELDTYPE_COMBOBOX: - case FIELDTYPE_LISTBOX: - case FIELDTYPE_TEXTFIELD: - case FIELDTYPE_SIGNATURE: - return psub->GetType() == PDFOBJ_STREAM; - case FIELDTYPE_CHECKBOX: - case FIELDTYPE_RADIOBUTTON: - if (psub->GetType() == PDFOBJ_DICTIONARY) - { - CPDF_Dictionary* pSubDict = (CPDF_Dictionary*)psub; - return pSubDict->GetStream(GetAppState()) != NULL; - } - return FALSE; - } - return TRUE; -} + { + CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget); + return pXFAWidgetHandler->HasEvent(pAcc, eEventType); + } + } + } + + return FALSE; +} + +FX_BOOL CPDFSDK_Widget::OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT, + PDFSDK_FieldAction& data, + CPDFSDK_PageView* pPageView) { + ASSERT(m_pPageView != NULL); + + CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); + ASSERT(pSDKDoc != NULL); + + CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); + ASSERT(pDoc != NULL); + + if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { + XFA_EVENTTYPE eEventType = GetXFAEventType(eXFAAAT); + + if (eEventType != XFA_EVENT_Unknown) { + if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { + CXFA_EventParam param; + param.m_eType = eEventType; + param.m_wsChange = data.sChange; + param.m_iCommitKey = data.nCommitKey; + param.m_bShift = data.bShift; + param.m_iSelStart = data.nSelStart; + param.m_iSelEnd = data.nSelEnd; + param.m_wsFullText = data.sValue; + param.m_bKeyDown = data.bKeyDown; + param.m_bModifier = data.bModifier; + param.m_wsNewText = data.sValue; + if (data.nSelEnd > data.nSelStart) + param.m_wsNewText.Delete(data.nSelStart, + data.nSelEnd - data.nSelStart); + for (int i = 0; i < data.sChange.GetLength(); i++) + param.m_wsNewText.Insert(data.nSelStart, data.sChange[i]); + param.m_wsPrevText = data.sValue; + + if ((eEventType == XFA_EVENT_Click || eEventType == XFA_EVENT_Change) && + GetFieldType() == FIELDTYPE_RADIOBUTTON) { + if (IXFA_Widget* hGroupWidget = GetGroupMixXFAWidget()) { + CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hGroupWidget); + param.m_pTarget = pAcc; + pXFAWidgetHandler->ProcessEvent(pAcc, ¶m); + } + + { + CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget); + param.m_pTarget = pAcc; + int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, ¶m); + return nRet == XFA_EVENTERROR_Sucess; + } + } else { + CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget); + param.m_pTarget = pAcc; + int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, ¶m); + return nRet == XFA_EVENTERROR_Sucess; + } -int CPDFSDK_Widget::GetFieldType() const -{ - CPDF_FormField* pField = GetFormField(); - ASSERT(pField != NULL); + if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) { + pDocView->UpdateDocView(); + } + } + } + } - return pField->GetFieldType(); + return FALSE; } -FX_BOOL CPDFSDK_Widget::IsAppearanceValid() -{ - ASSERT(m_pPageView != NULL); +void CPDFSDK_Widget::Synchronize(FX_BOOL bSynchronizeElse) { + if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { + if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); - CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); + if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) { + switch (GetFieldType()) { + case FIELDTYPE_CHECKBOX: + case FIELDTYPE_RADIOBUTTON: { + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - ASSERT(pDoc != NULL); + XFA_CHECKSTATE eCheckState = + pFormCtrl->IsChecked() ? XFA_CHECKSTATE_On : XFA_CHECKSTATE_Off; + pWidgetAcc->SetCheckState(eCheckState); + } break; + case FIELDTYPE_TEXTFIELD: + pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit); + break; + case FIELDTYPE_LISTBOX: { + pWidgetAcc->ClearAllSelections(); + + for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; + i++) { + int nIndex = pFormField->GetSelectedIndex(i); + if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems()) + pWidgetAcc->SetItemState(nIndex, TRUE, FALSE); + } + } break; + case FIELDTYPE_COMBOBOX: { + pWidgetAcc->ClearAllSelections(); + + for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; + i++) { + int nIndex = pFormField->GetSelectedIndex(i); + if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems()) + pWidgetAcc->SetItemState(nIndex, TRUE, FALSE); + } + } - int nDocType = pDoc->GetDocType(); - if (nDocType == DOCTYPE_PDF || nDocType == DOCTYPE_STATIC_XFA) - return CPDFSDK_BAAnnot::IsAppearanceValid(); + pWidgetAcc->SetValue(pFormField->GetValue(), XFA_VALUEPICTURE_Edit); + break; + } - return TRUE; + if (bSynchronizeElse) + pWidgetAcc->ProcessValueChanged(); + } + } + } } -int CPDFSDK_Widget::GetFieldFlags() const -{ - CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm(); - ASSERT(pPDFInterForm != NULL); +void CPDFSDK_Widget::SynchronizeXFAValue() { + ASSERT(m_pPageView != NULL); - CPDF_FormControl* pFormControl = pPDFInterForm->GetControlByDict(m_pAnnot->GetAnnotDict()); - CPDF_FormField* pFormField = pFormControl->GetField(); - return pFormField->GetFieldFlags(); -} + CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); + ASSERT(pSDKDoc != NULL); -CFX_ByteString CPDFSDK_Widget::GetSubType() const -{ - int nType = GetFieldType(); + CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); + ASSERT(pDoc != NULL); - if (nType == FIELDTYPE_SIGNATURE) - return BFFT_SIGNATURE; - return CPDFSDK_Annot::GetSubType(); -} + IXFA_DocView* pXFADocView = pDoc->GetXFADocView(); + if (!pXFADocView) + return; -CPDF_FormField* CPDFSDK_Widget::GetFormField() const -{ - ASSERT(m_pInterForm != NULL); + if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { + if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); - CPDF_FormControl* pCtrl = GetFormControl(); - ASSERT(pCtrl != NULL); + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); - return pCtrl->GetField(); + CPDFSDK_Widget::SynchronizeXFAValue(pXFADocView, hWidget, pFormField, + pFormCtrl); + } + } } -CPDF_FormControl* CPDFSDK_Widget::GetFormControl() const -{ - ASSERT(m_pInterForm != NULL); +void CPDFSDK_Widget::SynchronizeXFAItems() { + ASSERT(m_pPageView != NULL); - CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm(); - ASSERT(pPDFInterForm != NULL); + CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); + ASSERT(pSDKDoc != NULL); - return pPDFInterForm->GetControlByDict(GetAnnotDict()); -} + CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); + ASSERT(pDoc != NULL); -CPDF_FormControl* CPDFSDK_Widget::GetFormControl(CPDF_InterForm* pInterForm, CPDF_Dictionary* pAnnotDict) -{ - ASSERT(pInterForm != NULL); - ASSERT(pAnnotDict != NULL); + IXFA_DocView* pXFADocView = pDoc->GetXFADocView(); + if (!pXFADocView) + return; - CPDF_FormControl* pControl = pInterForm->GetControlByDict(pAnnotDict); + if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { + if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); - return pControl; + SynchronizeXFAItems(pXFADocView, hWidget, pFormField, NULL); + } + } } -int CPDFSDK_Widget::GetRotate() const -{ - CPDF_FormControl* pCtrl = GetFormControl(); - ASSERT(pCtrl != NULL); +void CPDFSDK_Widget::SynchronizeXFAValue(IXFA_DocView* pXFADocView, + IXFA_Widget* hWidget, + CPDF_FormField* pFormField, + CPDF_FormControl* pFormControl) { + ASSERT(pXFADocView != NULL); + ASSERT(hWidget != NULL); - return pCtrl->GetRotation() % 360; -} + if (IXFA_WidgetHandler* pXFAWidgetHandler = pXFADocView->GetWidgetHandler()) { + ASSERT(pFormField != NULL); + ASSERT(pFormControl != NULL); -CFX_WideString CPDFSDK_Widget::GetName() -{ - ASSERT(m_pInterForm != NULL); + switch (pFormField->GetFieldType()) { + case FIELDTYPE_CHECKBOX: { + if (CXFA_WidgetAcc* pWidgetAcc = + pXFAWidgetHandler->GetDataAcc(hWidget)) { + FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On; - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); + pFormField->CheckControl(pFormField->GetControlIndex(pFormControl), + bChecked, TRUE); + } + } break; + case FIELDTYPE_RADIOBUTTON: { + if (CXFA_WidgetAcc* pWidgetAcc = + pXFAWidgetHandler->GetDataAcc(hWidget)) { + FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On; + + pFormField->CheckControl(pFormField->GetControlIndex(pFormControl), + bChecked, TRUE); + } + } break; + case FIELDTYPE_TEXTFIELD: { + if (CXFA_WidgetAcc* pWidgetAcc = + pXFAWidgetHandler->GetDataAcc(hWidget)) { + CFX_WideString sValue; + pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display); + pFormField->SetValue(sValue, TRUE); + } + } break; + case FIELDTYPE_LISTBOX: { + pFormField->ClearSelection(FALSE); - return pFormField->GetFullName(); -} + if (CXFA_WidgetAcc* pWidgetAcc = + pXFAWidgetHandler->GetDataAcc(hWidget)) { + for (int i = 0, sz = pWidgetAcc->CountSelectedItems(); i < sz; i++) { + int nIndex = pWidgetAcc->GetSelectedItem(i); -FX_BOOL CPDFSDK_Widget::GetFillColor(FX_COLORREF& color) const -{ - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); + if (nIndex > -1 && nIndex < pFormField->CountOptions()) { + pFormField->SetItemSelection(nIndex, TRUE, TRUE); + } + } + } + } break; + case FIELDTYPE_COMBOBOX: { + pFormField->ClearSelection(FALSE); - int iColorType = 0; - color = FX_ARGBTOCOLORREF(pFormCtrl->GetBackgroundColor(iColorType)); + if (CXFA_WidgetAcc* pWidgetAcc = + pXFAWidgetHandler->GetDataAcc(hWidget)) { + for (int i = 0, sz = pWidgetAcc->CountSelectedItems(); i < sz; i++) { + int nIndex = pWidgetAcc->GetSelectedItem(i); - return iColorType != COLORTYPE_TRANSPARENT; + if (nIndex > -1 && nIndex < pFormField->CountOptions()) { + pFormField->SetItemSelection(nIndex, TRUE, TRUE); + } + } + + CFX_WideString sValue; + pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display); + pFormField->SetValue(sValue, TRUE); + } + } break; + } + } } -FX_BOOL CPDFSDK_Widget::GetBorderColor(FX_COLORREF& color) const -{ - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); +void CPDFSDK_Widget::SynchronizeXFAItems(IXFA_DocView* pXFADocView, + IXFA_Widget* hWidget, + CPDF_FormField* pFormField, + CPDF_FormControl* pFormControl) { + ASSERT(pXFADocView != NULL); + ASSERT(hWidget != NULL); - int iColorType = 0; - color = FX_ARGBTOCOLORREF(pFormCtrl->GetBorderColor(iColorType)); + if (IXFA_WidgetHandler* pXFAWidgetHandler = pXFADocView->GetWidgetHandler()) { + ASSERT(pFormField != NULL); - return iColorType != COLORTYPE_TRANSPARENT; -} + switch (pFormField->GetFieldType()) { + case FIELDTYPE_LISTBOX: { + pFormField->ClearSelection(FALSE); + pFormField->ClearOptions(TRUE); -FX_BOOL CPDFSDK_Widget::GetTextColor(FX_COLORREF& color) const -{ - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); + if (CXFA_WidgetAcc* pWidgetAcc = + pXFAWidgetHandler->GetDataAcc(hWidget)) { + for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(); i < sz; + i++) { + CFX_WideString swText; + pWidgetAcc->GetChoiceListItem(swText, i); - CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance(); - if (da.HasColor()) - { - FX_ARGB argb; - int iColorType = COLORTYPE_TRANSPARENT; - da.GetColor(argb, iColorType); - color = FX_ARGBTOCOLORREF(argb); + pFormField->InsertOption(swText, i, TRUE); + } + } + } break; + case FIELDTYPE_COMBOBOX: { + pFormField->ClearSelection(FALSE); + pFormField->ClearOptions(FALSE); + + if (CXFA_WidgetAcc* pWidgetAcc = + pXFAWidgetHandler->GetDataAcc(hWidget)) { + for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(); i < sz; + i++) { + CFX_WideString swText; + pWidgetAcc->GetChoiceListItem(swText, i); + + pFormField->InsertOption(swText, i, FALSE); + } + } - return iColorType != COLORTYPE_TRANSPARENT; + pFormField->SetValue(L"", TRUE); + } break; } + } +} +FX_BOOL CPDFSDK_Widget::IsWidgetAppearanceValid( + CPDF_Annot::AppearanceMode mode) { + CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP"); + if (!pAP) return FALSE; + + // Choose the right sub-ap + const FX_CHAR* ap_entry = "N"; + if (mode == CPDF_Annot::Down) + ap_entry = "D"; + else if (mode == CPDF_Annot::Rollover) + ap_entry = "R"; + if (!pAP->KeyExist(ap_entry)) + ap_entry = "N"; + + // Get the AP stream or subdirectory + CPDF_Object* psub = pAP->GetElementValue(ap_entry); + if (!psub) + return FALSE; + + int nFieldType = GetFieldType(); + switch (nFieldType) { + case FIELDTYPE_PUSHBUTTON: + case FIELDTYPE_COMBOBOX: + case FIELDTYPE_LISTBOX: + case FIELDTYPE_TEXTFIELD: + case FIELDTYPE_SIGNATURE: + return psub->GetType() == PDFOBJ_STREAM; + case FIELDTYPE_CHECKBOX: + case FIELDTYPE_RADIOBUTTON: + if (psub->GetType() == PDFOBJ_DICTIONARY) { + CPDF_Dictionary* pSubDict = (CPDF_Dictionary*)psub; + return pSubDict->GetStream(GetAppState()) != NULL; + } + return FALSE; + } + return TRUE; } -FX_FLOAT CPDFSDK_Widget::GetFontSize() const -{ - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); +int CPDFSDK_Widget::GetFieldType() const { + CPDF_FormField* pField = GetFormField(); + ASSERT(pField != NULL); - CPDF_DefaultAppearance pDa = pFormCtrl->GetDefaultAppearance(); - CFX_ByteString csFont = ""; - FX_FLOAT fFontSize = 0.0f; - pDa.GetFont(csFont, fFontSize); - - return fFontSize; -} - -int CPDFSDK_Widget::GetSelectedIndex(int nIndex) -{ - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) - { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) - { - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - if (nIndex < pWidgetAcc->CountSelectedItems()) - return pWidgetAcc->GetSelectedItem(nIndex); - } - } - } - - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); - - return pFormField->GetSelectedIndex(nIndex); -} - -CFX_WideString CPDFSDK_Widget::GetValue(FX_BOOL bDisplay) -{ - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) - { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) - { - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - CFX_WideString sValue; - pWidgetAcc->GetValue(sValue, bDisplay ? XFA_VALUEPICTURE_Display : XFA_VALUEPICTURE_Edit); - return sValue; - } - } - } - - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); - - return pFormField->GetValue(); -} - -CFX_WideString CPDFSDK_Widget::GetDefaultValue() const -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); + return pField->GetFieldType(); +} - return pFormField->GetDefaultValue(); +FX_BOOL CPDFSDK_Widget::IsAppearanceValid() { + ASSERT(m_pPageView != NULL); + + CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); + ASSERT(pSDKDoc != NULL); + + CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); + ASSERT(pDoc != NULL); + + int nDocType = pDoc->GetDocType(); + if (nDocType == DOCTYPE_PDF || nDocType == DOCTYPE_STATIC_XFA) + return CPDFSDK_BAAnnot::IsAppearanceValid(); + + return TRUE; } -CFX_WideString CPDFSDK_Widget::GetOptionLabel(int nIndex) const -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); +int CPDFSDK_Widget::GetFieldFlags() const { + CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm(); + ASSERT(pPDFInterForm != NULL); - return pFormField->GetOptionLabel(nIndex); + CPDF_FormControl* pFormControl = + pPDFInterForm->GetControlByDict(m_pAnnot->GetAnnotDict()); + CPDF_FormField* pFormField = pFormControl->GetField(); + return pFormField->GetFieldFlags(); } -int CPDFSDK_Widget::CountOptions() const -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); +CFX_ByteString CPDFSDK_Widget::GetSubType() const { + int nType = GetFieldType(); - return pFormField->CountOptions(); + if (nType == FIELDTYPE_SIGNATURE) + return BFFT_SIGNATURE; + return CPDFSDK_Annot::GetSubType(); } -FX_BOOL CPDFSDK_Widget::IsOptionSelected(int nIndex) -{ - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) - { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) - { - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems()) - return pWidgetAcc->GetItemState(nIndex); +CPDF_FormField* CPDFSDK_Widget::GetFormField() const { + ASSERT(m_pInterForm != NULL); - return FALSE; - } - } - } + CPDF_FormControl* pCtrl = GetFormControl(); + ASSERT(pCtrl != NULL); - CPDF_FormField* pFormField = GetFormField(); - return pFormField->IsItemSelected(nIndex); + return pCtrl->GetField(); } -int CPDFSDK_Widget::GetTopVisibleIndex() const -{ - CPDF_FormField* pFormField = GetFormField(); - return pFormField->GetTopVisibleIndex(); +CPDF_FormControl* CPDFSDK_Widget::GetFormControl() const { + ASSERT(m_pInterForm != NULL); + + CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm(); + ASSERT(pPDFInterForm != NULL); + + return pPDFInterForm->GetControlByDict(GetAnnotDict()); } -FX_BOOL CPDFSDK_Widget::IsChecked() -{ - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) - { - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) - { - if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) - { - FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On; - return bChecked; - } - } - } +CPDF_FormControl* CPDFSDK_Widget::GetFormControl(CPDF_InterForm* pInterForm, + CPDF_Dictionary* pAnnotDict) { + ASSERT(pInterForm != NULL); + ASSERT(pAnnotDict != NULL); - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); + CPDF_FormControl* pControl = pInterForm->GetControlByDict(pAnnotDict); - return pFormCtrl->IsChecked(); + return pControl; } -int CPDFSDK_Widget::GetAlignment() const -{ - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); +int CPDFSDK_Widget::GetRotate() const { + CPDF_FormControl* pCtrl = GetFormControl(); + ASSERT(pCtrl != NULL); - return pFormCtrl->GetControlAlignment(); + return pCtrl->GetRotation() % 360; } -int CPDFSDK_Widget::GetMaxLen() const -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); +CFX_WideString CPDFSDK_Widget::GetName() { + ASSERT(m_pInterForm != NULL); + + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); - return pFormField->GetMaxLen(); + return pFormField->GetFullName(); } -void CPDFSDK_Widget::SetCheck(FX_BOOL bChecked, FX_BOOL bNotify) -{ - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); +FX_BOOL CPDFSDK_Widget::GetFillColor(FX_COLORREF& color) const { + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); - CPDF_FormField* pFormField = pFormCtrl->GetField(); - ASSERT(pFormField != NULL); + int iColorType = 0; + color = FX_ARGBTOCOLORREF(pFormCtrl->GetBackgroundColor(iColorType)); - pFormField->CheckControl(pFormField->GetControlIndex(pFormCtrl), bChecked, bNotify); - if (!IsWidgetAppearanceValid(CPDF_Annot::Normal)) - ResetAppearance(TRUE); - if (!bNotify) - Synchronize(TRUE); + return iColorType != COLORTYPE_TRANSPARENT; } -void CPDFSDK_Widget::SetValue(const CFX_WideString& sValue, FX_BOOL bNotify) -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); +FX_BOOL CPDFSDK_Widget::GetBorderColor(FX_COLORREF& color) const { + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); - pFormField->SetValue(sValue, bNotify); + int iColorType = 0; + color = FX_ARGBTOCOLORREF(pFormCtrl->GetBorderColor(iColorType)); - if (!bNotify) - Synchronize(TRUE); + return iColorType != COLORTYPE_TRANSPARENT; } -void CPDFSDK_Widget::SetDefaultValue(const CFX_WideString& sValue) -{ -} -void CPDFSDK_Widget::SetOptionSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify) -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); +FX_BOOL CPDFSDK_Widget::GetTextColor(FX_COLORREF& color) const { + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); + + CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance(); + if (da.HasColor()) { + FX_ARGB argb; + int iColorType = COLORTYPE_TRANSPARENT; + da.GetColor(argb, iColorType); + color = FX_ARGBTOCOLORREF(argb); - pFormField->SetItemSelection(index, bSelected, bNotify); + return iColorType != COLORTYPE_TRANSPARENT; + } - if (!bNotify) - Synchronize(TRUE); + return FALSE; } -void CPDFSDK_Widget::ClearSelection(FX_BOOL bNotify) -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); +FX_FLOAT CPDFSDK_Widget::GetFontSize() const { + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); - pFormField->ClearSelection(bNotify); + CPDF_DefaultAppearance pDa = pFormCtrl->GetDefaultAppearance(); + CFX_ByteString csFont = ""; + FX_FLOAT fFontSize = 0.0f; + pDa.GetFont(csFont, fFontSize); - if (!bNotify) - Synchronize(TRUE); + return fFontSize; } -void CPDFSDK_Widget::SetTopVisibleIndex(int index) -{ -} +int CPDFSDK_Widget::GetSelectedIndex(int nIndex) { + if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { + if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { + if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) { + if (nIndex < pWidgetAcc->CountSelectedItems()) + return pWidgetAcc->GetSelectedItem(nIndex); + } + } + } + + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); -void CPDFSDK_Widget::SetAppModified() -{ - m_bAppModified = TRUE; + return pFormField->GetSelectedIndex(nIndex); } -void CPDFSDK_Widget::ClearAppModified() -{ - m_bAppModified = FALSE; +CFX_WideString CPDFSDK_Widget::GetValue(FX_BOOL bDisplay) { + if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { + if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { + if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) { + CFX_WideString sValue; + pWidgetAcc->GetValue(sValue, bDisplay ? XFA_VALUEPICTURE_Display + : XFA_VALUEPICTURE_Edit); + return sValue; + } + } + } + + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); + + return pFormField->GetValue(); } -FX_BOOL CPDFSDK_Widget::IsAppModified() const -{ - return m_bAppModified; +CFX_WideString CPDFSDK_Widget::GetDefaultValue() const { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); + + return pFormField->GetDefaultValue(); } -void CPDFSDK_Widget::ResetAppearance(FX_BOOL bValueChanged) -{ - switch (GetFieldType()) - { - case FIELDTYPE_TEXTFIELD: - case FIELDTYPE_COMBOBOX: - { - FX_BOOL bFormated = FALSE; - CFX_WideString sValue = this->OnFormat(bFormated); - if (bFormated) - this->ResetAppearance(sValue, TRUE); - else - this->ResetAppearance(NULL, TRUE); - } - break; - default: - this->ResetAppearance(NULL, FALSE); - break; - } +CFX_WideString CPDFSDK_Widget::GetOptionLabel(int nIndex) const { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); + + return pFormField->GetOptionLabel(nIndex); } -void CPDFSDK_Widget::ResetAppearance(const FX_WCHAR* sValue, FX_BOOL bValueChanged) -{ - SetAppModified(); +int CPDFSDK_Widget::CountOptions() const { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); - m_nAppAge++; - if (m_nAppAge > 999999) - m_nAppAge = 0; - if (bValueChanged) - m_nValueAge++; + return pFormField->CountOptions(); +} - int nFieldType = GetFieldType(); +FX_BOOL CPDFSDK_Widget::IsOptionSelected(int nIndex) { + if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { + if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { + if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) { + if (nIndex > -1 && nIndex < pWidgetAcc->CountChoiceListItems()) + return pWidgetAcc->GetItemState(nIndex); - switch (nFieldType) - { - case FIELDTYPE_PUSHBUTTON: - ResetAppearance_PushButton(); - break; - case FIELDTYPE_CHECKBOX: - ResetAppearance_CheckBox(); - break; - case FIELDTYPE_RADIOBUTTON: - ResetAppearance_RadioButton(); - break; - case FIELDTYPE_COMBOBOX: - ResetAppearance_ComboBox(sValue); - break; - case FIELDTYPE_LISTBOX: - ResetAppearance_ListBox(); - break; - case FIELDTYPE_TEXTFIELD: - ResetAppearance_TextField(sValue); - break; + return FALSE; + } } + } - ASSERT(m_pAnnot != NULL); - m_pAnnot->ClearCachedAP(); + CPDF_FormField* pFormField = GetFormField(); + return pFormField->IsItemSelected(nIndex); } -CFX_WideString CPDFSDK_Widget::OnFormat(FX_BOOL& bFormated) -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); - return m_pInterForm->OnFormat(pFormField, bFormated); +int CPDFSDK_Widget::GetTopVisibleIndex() const { + CPDF_FormField* pFormField = GetFormField(); + return pFormField->GetTopVisibleIndex(); } -void CPDFSDK_Widget::ResetFieldAppearance(FX_BOOL bValueChanged) -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); +FX_BOOL CPDFSDK_Widget::IsChecked() { + if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { + if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { + if (CXFA_WidgetAcc* pWidgetAcc = pXFAWidgetHandler->GetDataAcc(hWidget)) { + FX_BOOL bChecked = pWidgetAcc->GetCheckState() == XFA_CHECKSTATE_On; + return bChecked; + } + } + } - ASSERT(m_pInterForm != NULL); + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); - m_pInterForm->ResetFieldAppearance(pFormField, NULL, bValueChanged); + return pFormCtrl->IsChecked(); } -void CPDFSDK_Widget::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device, - CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions) -{ - int nFieldType = GetFieldType(); +int CPDFSDK_Widget::GetAlignment() const { + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); + + return pFormCtrl->GetControlAlignment(); +} - if ((nFieldType == FIELDTYPE_CHECKBOX || nFieldType == FIELDTYPE_RADIOBUTTON) && - mode == CPDF_Annot::Normal && - !IsWidgetAppearanceValid(CPDF_Annot::Normal)) - { - CFX_PathData pathData; +int CPDFSDK_Widget::GetMaxLen() const { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); - CPDF_Rect rcAnnot = GetRect(); + return pFormField->GetMaxLen(); +} - pathData.AppendRect(rcAnnot.left, rcAnnot.bottom, - rcAnnot.right, rcAnnot.top); +void CPDFSDK_Widget::SetCheck(FX_BOOL bChecked, FX_BOOL bNotify) { + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); - CFX_GraphStateData gsd; - gsd.m_LineWidth = 0.0f; + CPDF_FormField* pFormField = pFormCtrl->GetField(); + ASSERT(pFormField != NULL); - pDevice->DrawPath(&pathData, pUser2Device, &gsd, 0, 0xFFAAAAAA, FXFILL_ALTERNATE); - } - else - { - CPDFSDK_BAAnnot::DrawAppearance(pDevice, pUser2Device, mode, pOptions); - } + pFormField->CheckControl(pFormField->GetControlIndex(pFormCtrl), bChecked, + bNotify); + if (!IsWidgetAppearanceValid(CPDF_Annot::Normal)) + ResetAppearance(TRUE); + if (!bNotify) + Synchronize(TRUE); } -void CPDFSDK_Widget::UpdateField() -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); +void CPDFSDK_Widget::SetValue(const CFX_WideString& sValue, FX_BOOL bNotify) { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); - ASSERT(m_pInterForm != NULL); - m_pInterForm->UpdateField(pFormField); + pFormField->SetValue(sValue, bNotify); + + if (!bNotify) + Synchronize(TRUE); } -void CPDFSDK_Widget::DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView) -{ - ASSERT(m_pInterForm != NULL); +void CPDFSDK_Widget::SetDefaultValue(const CFX_WideString& sValue) {} +void CPDFSDK_Widget::SetOptionSelection(int index, + FX_BOOL bSelected, + FX_BOOL bNotify) { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); - int nFieldType = GetFieldType(); - if (m_pInterForm->IsNeedHighLight(nFieldType)) - { - -// if (nFieldType != FIELDTYPE_PUSHBUTTON) -// { - CPDF_Rect rc = GetRect(); - FX_COLORREF color = m_pInterForm->GetHighlightColor(nFieldType); - uint8_t alpha = m_pInterForm->GetHighlightAlpha(); - - CFX_FloatRect rcDevice; - ASSERT(m_pInterForm->GetDocument()); - CPDFDoc_Environment* pEnv = m_pInterForm->GetDocument()->GetEnv(); - if(!pEnv) - return; - CFX_AffineMatrix page2device; - pPageView->GetCurrentMatrix(page2device); - page2device.Transform(((FX_FLOAT)rc.left), ((FX_FLOAT)rc.bottom), rcDevice.left, rcDevice.bottom); -// pEnv->FFI_PageToDevice(m_pPageView->GetPDFPage(), rc.left, rc.bottom, &rcDevice.left, &rcDevice.bottom); -// pEnv->FFI_PageToDevice(m_pPageView->GetPDFPage(), rc.right, rc.top, &rcDevice.right, &rcDevice.top); - page2device.Transform(((FX_FLOAT)rc.right), ((FX_FLOAT)rc.top), rcDevice.right, rcDevice.top); - - rcDevice.Normalize(); - - FX_ARGB argb = ArgbEncode((int)alpha, color); - FX_RECT rcDev((int)rcDevice.left,(int)rcDevice.top,(int)rcDevice.right,(int)rcDevice.bottom); - pDevice->FillRect(&rcDev, argb); - /* }*/ - } + pFormField->SetItemSelection(index, bSelected, bNotify); + + if (!bNotify) + Synchronize(TRUE); } -void CPDFSDK_Widget::ResetAppearance_PushButton() -{ - CPDF_FormControl* pControl = GetFormControl(); - ASSERT(pControl != NULL); +void CPDFSDK_Widget::ClearSelection(FX_BOOL bNotify) { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); + pFormField->ClearSelection(bNotify); + if (!bNotify) + Synchronize(TRUE); +} - CPDF_Rect rcWindow = GetRotatedRect(); +void CPDFSDK_Widget::SetTopVisibleIndex(int index) {} - int32_t nLayout = 0; +void CPDFSDK_Widget::SetAppModified() { + m_bAppModified = TRUE; +} - switch (pControl->GetTextPosition()) - { - case TEXTPOS_ICON: - nLayout = PPBL_ICON; - break; - case TEXTPOS_BELOW: - nLayout = PPBL_ICONTOPLABELBOTTOM; - break; - case TEXTPOS_ABOVE: - nLayout = PPBL_LABELTOPICONBOTTOM; - break; - case TEXTPOS_RIGHT: - nLayout = PPBL_ICONLEFTLABELRIGHT; - break; - case TEXTPOS_LEFT: - nLayout = PPBL_LABELLEFTICONRIGHT; - break; - case TEXTPOS_OVERLAID: - nLayout = PPBL_LABELOVERICON; - break; - default: - nLayout = PPBL_LABEL; - break; - } +void CPDFSDK_Widget::ClearAppModified() { + m_bAppModified = FALSE; +} - CPWL_Color crBackground, crBorder; +FX_BOOL CPDFSDK_Widget::IsAppModified() const { + return m_bAppModified; +} - int iColorType; - FX_FLOAT fc[4]; +void CPDFSDK_Widget::ResetAppearance(FX_BOOL bValueChanged) { + switch (GetFieldType()) { + case FIELDTYPE_TEXTFIELD: + case FIELDTYPE_COMBOBOX: { + FX_BOOL bFormated = FALSE; + CFX_WideString sValue = this->OnFormat(bFormated); + if (bFormated) + this->ResetAppearance(sValue, TRUE); + else + this->ResetAppearance(NULL, TRUE); + } break; + default: + this->ResetAppearance(NULL, FALSE); + break; + } +} - pControl->GetOriginalBackgroundColor(iColorType, fc); - if (iColorType > 0) - crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); +void CPDFSDK_Widget::ResetAppearance(const FX_WCHAR* sValue, + FX_BOOL bValueChanged) { + SetAppModified(); - pControl->GetOriginalBorderColor(iColorType, fc); - if (iColorType > 0) - crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + m_nAppAge++; + if (m_nAppAge > 999999) + m_nAppAge = 0; + if (bValueChanged) + m_nValueAge++; - FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); - int32_t nBorderStyle = 0; - CPWL_Dash dsBorder(3,0,0); - CPWL_Color crLeftTop,crRightBottom; + int nFieldType = GetFieldType(); - switch (GetBorderStyle()) - { - case BBS_DASH: - nBorderStyle = PBS_DASH; - dsBorder = CPWL_Dash(3, 3, 0); - break; - case BBS_BEVELED: - nBorderStyle = PBS_BEVELED; - fBorderWidth *= 2; - crLeftTop = CPWL_Color(COLORTYPE_GRAY,1); - crRightBottom = CPWL_Utils::DevideColor(crBackground,2); - break; - case BBS_INSET: - nBorderStyle = PBS_INSET; - fBorderWidth *= 2; - crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5); - crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75); - break; - case BBS_UNDERLINE: - nBorderStyle = PBS_UNDERLINED; - break; - default: - nBorderStyle = PBS_SOLID; - break; - } + switch (nFieldType) { + case FIELDTYPE_PUSHBUTTON: + ResetAppearance_PushButton(); + break; + case FIELDTYPE_CHECKBOX: + ResetAppearance_CheckBox(); + break; + case FIELDTYPE_RADIOBUTTON: + ResetAppearance_RadioButton(); + break; + case FIELDTYPE_COMBOBOX: + ResetAppearance_ComboBox(sValue); + break; + case FIELDTYPE_LISTBOX: + ResetAppearance_ListBox(); + break; + case FIELDTYPE_TEXTFIELD: + ResetAppearance_TextField(sValue); + break; + } - CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow,fBorderWidth); + ASSERT(m_pAnnot != NULL); + m_pAnnot->ClearCachedAP(); +} - CPWL_Color crText(COLORTYPE_GRAY,0); +CFX_WideString CPDFSDK_Widget::OnFormat(FX_BOOL& bFormated) { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); + return m_pInterForm->OnFormat(pFormField, bFormated); +} - FX_FLOAT fFontSize = 12.0f; - CFX_ByteString csNameTag; +void CPDFSDK_Widget::ResetFieldAppearance(FX_BOOL bValueChanged) { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); - CPDF_DefaultAppearance da = pControl->GetDefaultAppearance(); - if (da.HasColor()) - { - da.GetColor(iColorType, fc); - crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - } + ASSERT(m_pInterForm != NULL); - if (da.HasFont()) - da.GetFont(csNameTag, fFontSize); + m_pInterForm->ResetFieldAppearance(pFormField, NULL, bValueChanged); +} - CFX_WideString csWCaption; - CFX_WideString csNormalCaption, csRolloverCaption, csDownCaption; +void CPDFSDK_Widget::DrawAppearance(CFX_RenderDevice* pDevice, + const CPDF_Matrix* pUser2Device, + CPDF_Annot::AppearanceMode mode, + const CPDF_RenderOptions* pOptions) { + int nFieldType = GetFieldType(); - if (pControl->HasMKEntry("CA")) - { - csNormalCaption = pControl->GetNormalCaption(); - } - if (pControl->HasMKEntry("RC")) - { - csRolloverCaption = pControl->GetRolloverCaption(); - } - if (pControl->HasMKEntry("AC")) - { - csDownCaption = pControl->GetDownCaption(); - } + if ((nFieldType == FIELDTYPE_CHECKBOX || + nFieldType == FIELDTYPE_RADIOBUTTON) && + mode == CPDF_Annot::Normal && + !IsWidgetAppearanceValid(CPDF_Annot::Normal)) { + CFX_PathData pathData; - CPDF_Stream* pNormalIcon = NULL; - CPDF_Stream* pRolloverIcon = NULL; - CPDF_Stream* pDownIcon = NULL; + CPDF_Rect rcAnnot = GetRect(); - if (pControl->HasMKEntry("I")) - { - pNormalIcon = pControl->GetNormalIcon(); - } - if (pControl->HasMKEntry("RI")) - { - pRolloverIcon = pControl->GetRolloverIcon(); - } - if (pControl->HasMKEntry("IX")) - { - pDownIcon = pControl->GetDownIcon(); - } + pathData.AppendRect(rcAnnot.left, rcAnnot.bottom, rcAnnot.right, + rcAnnot.top); - if (pNormalIcon) - { - if (CPDF_Dictionary* pImageDict = pNormalIcon->GetDict()) - { - if (pImageDict->GetString("Name").IsEmpty()) - pImageDict->SetAtString("Name", "ImgA"); - } - } + CFX_GraphStateData gsd; + gsd.m_LineWidth = 0.0f; - if (pRolloverIcon) - { - if (CPDF_Dictionary* pImageDict = pRolloverIcon->GetDict()) - { - if (pImageDict->GetString("Name").IsEmpty()) - pImageDict->SetAtString("Name", "ImgB"); - } - } + pDevice->DrawPath(&pathData, pUser2Device, &gsd, 0, 0xFFAAAAAA, + FXFILL_ALTERNATE); + } else { + CPDFSDK_BAAnnot::DrawAppearance(pDevice, pUser2Device, mode, pOptions); + } +} - if (pDownIcon) - { - if (CPDF_Dictionary* pImageDict = pDownIcon->GetDict()) - { - if (pImageDict->GetString("Name").IsEmpty()) - pImageDict->SetAtString("Name", "ImgC"); - } - } +void CPDFSDK_Widget::UpdateField() { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); + + ASSERT(m_pInterForm != NULL); + m_pInterForm->UpdateField(pFormField); +} - CPDF_IconFit iconFit = pControl->GetIconFit(); +void CPDFSDK_Widget::DrawShadow(CFX_RenderDevice* pDevice, + CPDFSDK_PageView* pPageView) { + ASSERT(m_pInterForm != NULL); - CPDFSDK_Document* pDoc = m_pInterForm->GetDocument(); - ASSERT(pDoc != NULL); - CPDFDoc_Environment* pEnv = pDoc->GetEnv(); + int nFieldType = GetFieldType(); + if (m_pInterForm->IsNeedHighLight(nFieldType)) { + // if (nFieldType != FIELDTYPE_PUSHBUTTON) + // { + CPDF_Rect rc = GetRect(); + FX_COLORREF color = m_pInterForm->GetHighlightColor(nFieldType); + uint8_t alpha = m_pInterForm->GetHighlightAlpha(); - CBA_FontMap FontMap(this,pEnv->GetSysHandler());//, ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv())); - FontMap.Initial(); + CFX_FloatRect rcDevice; + ASSERT(m_pInterForm->GetDocument()); + CPDFDoc_Environment* pEnv = m_pInterForm->GetDocument()->GetEnv(); + if (!pEnv) + return; + CFX_AffineMatrix page2device; + pPageView->GetCurrentMatrix(page2device); + page2device.Transform(((FX_FLOAT)rc.left), ((FX_FLOAT)rc.bottom), + rcDevice.left, rcDevice.bottom); + // pEnv->FFI_PageToDevice(m_pPageView->GetPDFPage(), rc.left, + // rc.bottom, &rcDevice.left, &rcDevice.bottom); + // pEnv->FFI_PageToDevice(m_pPageView->GetPDFPage(), rc.right, + // rc.top, &rcDevice.right, &rcDevice.top); + page2device.Transform(((FX_FLOAT)rc.right), ((FX_FLOAT)rc.top), + rcDevice.right, rcDevice.top); - FontMap.SetAPType("N"); + rcDevice.Normalize(); - CFX_ByteString csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) + - CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle, dsBorder) + - CPWL_Utils::GetPushButtonAppStream(iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, pNormalIcon, iconFit, csNormalCaption, crText, fFontSize, nLayout); + FX_ARGB argb = ArgbEncode((int)alpha, color); + FX_RECT rcDev((int)rcDevice.left, (int)rcDevice.top, (int)rcDevice.right, + (int)rcDevice.bottom); + pDevice->FillRect(&rcDev, argb); + /* }*/ + } +} - WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP); - if (pNormalIcon) - AddImageToAppearance("N", pNormalIcon); +void CPDFSDK_Widget::ResetAppearance_PushButton() { + CPDF_FormControl* pControl = GetFormControl(); + ASSERT(pControl != NULL); - CPDF_FormControl::HighlightingMode eHLM = pControl->GetHighlightingMode(); - if (eHLM == CPDF_FormControl::Push || eHLM == CPDF_FormControl::Toggle) - { - if (csRolloverCaption.IsEmpty() && !pRolloverIcon) - { - csRolloverCaption = csNormalCaption; - pRolloverIcon = pNormalIcon; - } + CPDF_Rect rcWindow = GetRotatedRect(); - FontMap.SetAPType("R"); + int32_t nLayout = 0; - csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) + - CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle, dsBorder) + - CPWL_Utils::GetPushButtonAppStream(iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, pRolloverIcon, iconFit, csRolloverCaption, crText, fFontSize, nLayout); + switch (pControl->GetTextPosition()) { + case TEXTPOS_ICON: + nLayout = PPBL_ICON; + break; + case TEXTPOS_BELOW: + nLayout = PPBL_ICONTOPLABELBOTTOM; + break; + case TEXTPOS_ABOVE: + nLayout = PPBL_LABELTOPICONBOTTOM; + break; + case TEXTPOS_RIGHT: + nLayout = PPBL_ICONLEFTLABELRIGHT; + break; + case TEXTPOS_LEFT: + nLayout = PPBL_LABELLEFTICONRIGHT; + break; + case TEXTPOS_OVERLAID: + nLayout = PPBL_LABELOVERICON; + break; + default: + nLayout = PPBL_LABEL; + break; + } - WriteAppearance("R", GetRotatedRect(), GetMatrix(), csAP); - if (pRolloverIcon) - AddImageToAppearance("R", pRolloverIcon); + CPWL_Color crBackground, crBorder; - if (csDownCaption.IsEmpty() && !pDownIcon) - { - csDownCaption = csNormalCaption; - pDownIcon = pNormalIcon; - } + int iColorType; + FX_FLOAT fc[4]; - switch (nBorderStyle) - { - case PBS_BEVELED: - { - CPWL_Color crTemp = crLeftTop; - crLeftTop = crRightBottom; - crRightBottom = crTemp; - } - break; - case PBS_INSET: - crLeftTop = CPWL_Color(COLORTYPE_GRAY,0); - crRightBottom = CPWL_Color(COLORTYPE_GRAY,1); - break; - } + pControl->GetOriginalBackgroundColor(iColorType, fc); + if (iColorType > 0) + crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - FontMap.SetAPType("D"); + pControl->GetOriginalBorderColor(iColorType, fc); + if (iColorType > 0) + crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, CPWL_Utils::SubstractColor(crBackground,0.25f)) + - CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle, dsBorder) + - CPWL_Utils::GetPushButtonAppStream(iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, pDownIcon, iconFit, csDownCaption, crText, fFontSize, nLayout); + FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); + int32_t nBorderStyle = 0; + CPWL_Dash dsBorder(3, 0, 0); + CPWL_Color crLeftTop, crRightBottom; - WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP); - if (pDownIcon) - AddImageToAppearance("D", pDownIcon); - } - else - { - RemoveAppearance("D"); - RemoveAppearance("R"); + switch (GetBorderStyle()) { + case BBS_DASH: + nBorderStyle = PBS_DASH; + dsBorder = CPWL_Dash(3, 3, 0); + break; + case BBS_BEVELED: + nBorderStyle = PBS_BEVELED; + fBorderWidth *= 2; + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1); + crRightBottom = CPWL_Utils::DevideColor(crBackground, 2); + break; + case BBS_INSET: + nBorderStyle = PBS_INSET; + fBorderWidth *= 2; + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5); + crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75); + break; + case BBS_UNDERLINE: + nBorderStyle = PBS_UNDERLINED; + break; + default: + nBorderStyle = PBS_SOLID; + break; + } + + CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth); + + CPWL_Color crText(COLORTYPE_GRAY, 0); + + FX_FLOAT fFontSize = 12.0f; + CFX_ByteString csNameTag; + + CPDF_DefaultAppearance da = pControl->GetDefaultAppearance(); + if (da.HasColor()) { + da.GetColor(iColorType, fc); + crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + } + + if (da.HasFont()) + da.GetFont(csNameTag, fFontSize); + + CFX_WideString csWCaption; + CFX_WideString csNormalCaption, csRolloverCaption, csDownCaption; + + if (pControl->HasMKEntry("CA")) { + csNormalCaption = pControl->GetNormalCaption(); + } + if (pControl->HasMKEntry("RC")) { + csRolloverCaption = pControl->GetRolloverCaption(); + } + if (pControl->HasMKEntry("AC")) { + csDownCaption = pControl->GetDownCaption(); + } + + CPDF_Stream* pNormalIcon = NULL; + CPDF_Stream* pRolloverIcon = NULL; + CPDF_Stream* pDownIcon = NULL; + + if (pControl->HasMKEntry("I")) { + pNormalIcon = pControl->GetNormalIcon(); + } + if (pControl->HasMKEntry("RI")) { + pRolloverIcon = pControl->GetRolloverIcon(); + } + if (pControl->HasMKEntry("IX")) { + pDownIcon = pControl->GetDownIcon(); + } + + if (pNormalIcon) { + if (CPDF_Dictionary* pImageDict = pNormalIcon->GetDict()) { + if (pImageDict->GetString("Name").IsEmpty()) + pImageDict->SetAtString("Name", "ImgA"); + } + } + + if (pRolloverIcon) { + if (CPDF_Dictionary* pImageDict = pRolloverIcon->GetDict()) { + if (pImageDict->GetString("Name").IsEmpty()) + pImageDict->SetAtString("Name", "ImgB"); + } + } + + if (pDownIcon) { + if (CPDF_Dictionary* pImageDict = pDownIcon->GetDict()) { + if (pImageDict->GetString("Name").IsEmpty()) + pImageDict->SetAtString("Name", "ImgC"); + } + } + + CPDF_IconFit iconFit = pControl->GetIconFit(); + + CPDFSDK_Document* pDoc = m_pInterForm->GetDocument(); + ASSERT(pDoc != NULL); + CPDFDoc_Environment* pEnv = pDoc->GetEnv(); + + CBA_FontMap FontMap( + this, + pEnv->GetSysHandler()); //, + //ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv())); + FontMap.Initial(); + + FontMap.SetAPType("N"); + + CFX_ByteString csAP = + CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) + + CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, + crLeftTop, crRightBottom, nBorderStyle, + dsBorder) + + CPWL_Utils::GetPushButtonAppStream( + iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, + pNormalIcon, iconFit, csNormalCaption, crText, fFontSize, nLayout); + + WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP); + if (pNormalIcon) + AddImageToAppearance("N", pNormalIcon); + + CPDF_FormControl::HighlightingMode eHLM = pControl->GetHighlightingMode(); + if (eHLM == CPDF_FormControl::Push || eHLM == CPDF_FormControl::Toggle) { + if (csRolloverCaption.IsEmpty() && !pRolloverIcon) { + csRolloverCaption = csNormalCaption; + pRolloverIcon = pNormalIcon; + } + + FontMap.SetAPType("R"); + + csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) + + CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, + crLeftTop, crRightBottom, + nBorderStyle, dsBorder) + + CPWL_Utils::GetPushButtonAppStream( + iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, + pRolloverIcon, iconFit, csRolloverCaption, crText, fFontSize, + nLayout); + + WriteAppearance("R", GetRotatedRect(), GetMatrix(), csAP); + if (pRolloverIcon) + AddImageToAppearance("R", pRolloverIcon); + + if (csDownCaption.IsEmpty() && !pDownIcon) { + csDownCaption = csNormalCaption; + pDownIcon = pNormalIcon; + } + + switch (nBorderStyle) { + case PBS_BEVELED: { + CPWL_Color crTemp = crLeftTop; + crLeftTop = crRightBottom; + crRightBottom = crTemp; + } break; + case PBS_INSET: + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0); + crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1); + break; } -} -void CPDFSDK_Widget::ResetAppearance_CheckBox() -{ - CPDF_FormControl* pControl = GetFormControl(); - ASSERT(pControl != NULL); + FontMap.SetAPType("D"); + csAP = CPWL_Utils::GetRectFillAppStream( + rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) + + CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, + crLeftTop, crRightBottom, + nBorderStyle, dsBorder) + + CPWL_Utils::GetPushButtonAppStream( + iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, + pDownIcon, iconFit, csDownCaption, crText, fFontSize, nLayout); + WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP); + if (pDownIcon) + AddImageToAppearance("D", pDownIcon); + } else { + RemoveAppearance("D"); + RemoveAppearance("R"); + } +} - CPWL_Color crBackground, crBorder, crText; +void CPDFSDK_Widget::ResetAppearance_CheckBox() { + CPDF_FormControl* pControl = GetFormControl(); + ASSERT(pControl != NULL); - int iColorType; - FX_FLOAT fc[4]; + CPWL_Color crBackground, crBorder, crText; - pControl->GetOriginalBackgroundColor(iColorType, fc); - if (iColorType > 0) - crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + int iColorType; + FX_FLOAT fc[4]; - pControl->GetOriginalBorderColor(iColorType, fc); - if (iColorType > 0) - crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + pControl->GetOriginalBackgroundColor(iColorType, fc); + if (iColorType > 0) + crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); - int32_t nBorderStyle = 0; - CPWL_Dash dsBorder(3,0,0); - CPWL_Color crLeftTop,crRightBottom; + pControl->GetOriginalBorderColor(iColorType, fc); + if (iColorType > 0) + crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - switch (GetBorderStyle()) - { + FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); + int32_t nBorderStyle = 0; + CPWL_Dash dsBorder(3, 0, 0); + CPWL_Color crLeftTop, crRightBottom; + + switch (GetBorderStyle()) { case BBS_DASH: - nBorderStyle = PBS_DASH; - dsBorder = CPWL_Dash(3, 3, 0); - break; + nBorderStyle = PBS_DASH; + dsBorder = CPWL_Dash(3, 3, 0); + break; case BBS_BEVELED: - nBorderStyle = PBS_BEVELED; - fBorderWidth *= 2; - crLeftTop = CPWL_Color(COLORTYPE_GRAY,1); - crRightBottom = CPWL_Utils::DevideColor(crBackground,2); - break; + nBorderStyle = PBS_BEVELED; + fBorderWidth *= 2; + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1); + crRightBottom = CPWL_Utils::DevideColor(crBackground, 2); + break; case BBS_INSET: - nBorderStyle = PBS_INSET; - fBorderWidth *= 2; - crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5); - crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75); - break; + nBorderStyle = PBS_INSET; + fBorderWidth *= 2; + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5); + crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75); + break; case BBS_UNDERLINE: - nBorderStyle = PBS_UNDERLINED; - break; + nBorderStyle = PBS_UNDERLINED; + break; default: - nBorderStyle = PBS_SOLID; - break; - } + nBorderStyle = PBS_SOLID; + break; + } - CPDF_Rect rcWindow = GetRotatedRect(); - CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow,fBorderWidth); + CPDF_Rect rcWindow = GetRotatedRect(); + CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth); - CPDF_DefaultAppearance da = pControl->GetDefaultAppearance(); - if (da.HasColor()) - { - da.GetColor(iColorType, fc); - crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - } + CPDF_DefaultAppearance da = pControl->GetDefaultAppearance(); + if (da.HasColor()) { + da.GetColor(iColorType, fc); + crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + } - int32_t nStyle = 0; + int32_t nStyle = 0; - CFX_WideString csWCaption = pControl->GetNormalCaption(); - if (csWCaption.GetLength() > 0) - { - switch (csWCaption[0]) - { - case L'l': - nStyle = PCS_CIRCLE; - break; - case L'8': - nStyle = PCS_CROSS; - break; - case L'u': - nStyle = PCS_DIAMOND; - break; - case L'n': - nStyle = PCS_SQUARE; - break; - case L'H': - nStyle = PCS_STAR; - break; - default: //L'4' - nStyle = PCS_CHECK; - break; - } - } - else - { + CFX_WideString csWCaption = pControl->GetNormalCaption(); + if (csWCaption.GetLength() > 0) { + switch (csWCaption[0]) { + case L'l': + nStyle = PCS_CIRCLE; + break; + case L'8': + nStyle = PCS_CROSS; + break; + case L'u': + nStyle = PCS_DIAMOND; + break; + case L'n': + nStyle = PCS_SQUARE; + break; + case L'H': + nStyle = PCS_STAR; + break; + default: // L'4' nStyle = PCS_CHECK; + break; } + } else { + nStyle = PCS_CHECK; + } - CFX_ByteString csAP_N_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,crBackground) + - CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder); + CFX_ByteString csAP_N_ON = + CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) + + CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, + crLeftTop, crRightBottom, nBorderStyle, + dsBorder); - CFX_ByteString csAP_N_OFF = csAP_N_ON; + CFX_ByteString csAP_N_OFF = csAP_N_ON; - switch (nBorderStyle) - { - case PBS_BEVELED: - { - CPWL_Color crTemp = crLeftTop; - crLeftTop = crRightBottom; - crRightBottom = crTemp; - } - break; + switch (nBorderStyle) { + case PBS_BEVELED: { + CPWL_Color crTemp = crLeftTop; + crLeftTop = crRightBottom; + crRightBottom = crTemp; + } break; case PBS_INSET: - crLeftTop = CPWL_Color(COLORTYPE_GRAY,0); - crRightBottom = CPWL_Color(COLORTYPE_GRAY,1); - break; - } + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0); + crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1); + break; + } - CFX_ByteString csAP_D_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,CPWL_Utils::SubstractColor(crBackground,0.25f)) + - CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder); + CFX_ByteString csAP_D_ON = + CPWL_Utils::GetRectFillAppStream( + rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) + + CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, + crLeftTop, crRightBottom, nBorderStyle, + dsBorder); - CFX_ByteString csAP_D_OFF = csAP_D_ON; + CFX_ByteString csAP_D_OFF = csAP_D_ON; - csAP_N_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient,nStyle,crText); - csAP_D_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient,nStyle,crText); + csAP_N_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient, nStyle, crText); + csAP_D_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient, nStyle, crText); - WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON, pControl->GetCheckedAPState()); - WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off"); + WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON, + pControl->GetCheckedAPState()); + WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off"); - WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON, pControl->GetCheckedAPState()); - WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off"); + WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON, + pControl->GetCheckedAPState()); + WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off"); - CFX_ByteString csAS = GetAppState(); - if (csAS.IsEmpty()) - SetAppState("Off"); + CFX_ByteString csAS = GetAppState(); + if (csAS.IsEmpty()) + SetAppState("Off"); } -void CPDFSDK_Widget::ResetAppearance_RadioButton() -{ - CPDF_FormControl* pControl = GetFormControl(); - ASSERT(pControl != NULL); - +void CPDFSDK_Widget::ResetAppearance_RadioButton() { + CPDF_FormControl* pControl = GetFormControl(); + ASSERT(pControl != NULL); + CPWL_Color crBackground, crBorder, crText; - CPWL_Color crBackground, crBorder, crText; + int iColorType; + FX_FLOAT fc[4]; - int iColorType; - FX_FLOAT fc[4]; - - pControl->GetOriginalBackgroundColor(iColorType, fc); - if (iColorType > 0) - crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + pControl->GetOriginalBackgroundColor(iColorType, fc); + if (iColorType > 0) + crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - pControl->GetOriginalBorderColor(iColorType, fc); - if (iColorType > 0) - crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + pControl->GetOriginalBorderColor(iColorType, fc); + if (iColorType > 0) + crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); - int32_t nBorderStyle = 0; - CPWL_Dash dsBorder(3,0,0); - CPWL_Color crLeftTop,crRightBottom; + FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); + int32_t nBorderStyle = 0; + CPWL_Dash dsBorder(3, 0, 0); + CPWL_Color crLeftTop, crRightBottom; - switch (GetBorderStyle()) - { + switch (GetBorderStyle()) { case BBS_DASH: - nBorderStyle = PBS_DASH; - dsBorder = CPWL_Dash(3, 3, 0); - break; + nBorderStyle = PBS_DASH; + dsBorder = CPWL_Dash(3, 3, 0); + break; case BBS_BEVELED: - nBorderStyle = PBS_BEVELED; - fBorderWidth *= 2; - crLeftTop = CPWL_Color(COLORTYPE_GRAY,1); - crRightBottom = CPWL_Utils::DevideColor(crBackground,2); - break; + nBorderStyle = PBS_BEVELED; + fBorderWidth *= 2; + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1); + crRightBottom = CPWL_Utils::DevideColor(crBackground, 2); + break; case BBS_INSET: - nBorderStyle = PBS_INSET; - fBorderWidth *= 2; - crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5); - crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75); - break; + nBorderStyle = PBS_INSET; + fBorderWidth *= 2; + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5); + crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75); + break; case BBS_UNDERLINE: - nBorderStyle = PBS_UNDERLINED; - break; + nBorderStyle = PBS_UNDERLINED; + break; default: - nBorderStyle = PBS_SOLID; - break; - } + nBorderStyle = PBS_SOLID; + break; + } - CPDF_Rect rcWindow = GetRotatedRect(); - CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth); + CPDF_Rect rcWindow = GetRotatedRect(); + CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth); - CPDF_DefaultAppearance da = pControl->GetDefaultAppearance(); - if (da.HasColor()) - { - da.GetColor(iColorType, fc); - crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - } + CPDF_DefaultAppearance da = pControl->GetDefaultAppearance(); + if (da.HasColor()) { + da.GetColor(iColorType, fc); + crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + } - int32_t nStyle = 0; + int32_t nStyle = 0; - CFX_WideString csWCaption = pControl->GetNormalCaption(); - if (csWCaption.GetLength() > 0) - { - switch (csWCaption[0]) - { - default: //L'l': - nStyle = PCS_CIRCLE; - break; - case L'8': - nStyle = PCS_CROSS; - break; - case L'u': - nStyle = PCS_DIAMOND; - break; - case L'n': - nStyle = PCS_SQUARE; - break; - case L'H': - nStyle = PCS_STAR; - break; - case L'4': - nStyle = PCS_CHECK; - break; - } - } - else - { + CFX_WideString csWCaption = pControl->GetNormalCaption(); + if (csWCaption.GetLength() > 0) { + switch (csWCaption[0]) { + default: // L'l': nStyle = PCS_CIRCLE; + break; + case L'8': + nStyle = PCS_CROSS; + break; + case L'u': + nStyle = PCS_DIAMOND; + break; + case L'n': + nStyle = PCS_SQUARE; + break; + case L'H': + nStyle = PCS_STAR; + break; + case L'4': + nStyle = PCS_CHECK; + break; } + } else { + nStyle = PCS_CIRCLE; + } + + CFX_ByteString csAP_N_ON; + + CPDF_Rect rcCenter = + CPWL_Utils::DeflateRect(CPWL_Utils::GetCenterSquare(rcWindow), 1.0f); + + if (nStyle == PCS_CIRCLE) { + if (nBorderStyle == PBS_BEVELED) { + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1); + crRightBottom = CPWL_Utils::SubstractColor(crBackground, 0.25f); + } else if (nBorderStyle == PBS_INSET) { + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5f); + crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75f); + } + + csAP_N_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter, crBackground) + + CPWL_Utils::GetCircleBorderAppStream( + rcCenter, fBorderWidth, crBorder, crLeftTop, crRightBottom, + nBorderStyle, dsBorder); + } else { + csAP_N_ON = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) + + CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, + crLeftTop, crRightBottom, + nBorderStyle, dsBorder); + } + + CFX_ByteString csAP_N_OFF = csAP_N_ON; + + switch (nBorderStyle) { + case PBS_BEVELED: { + CPWL_Color crTemp = crLeftTop; + crLeftTop = crRightBottom; + crRightBottom = crTemp; + } break; + case PBS_INSET: + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0); + crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1); + break; + } + + CFX_ByteString csAP_D_ON; + + if (nStyle == PCS_CIRCLE) { + CPWL_Color crBK = CPWL_Utils::SubstractColor(crBackground, 0.25f); + if (nBorderStyle == PBS_BEVELED) { + crLeftTop = CPWL_Utils::SubstractColor(crBackground, 0.25f); + crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1); + crBK = crBackground; + } else if (nBorderStyle == PBS_INSET) { + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0); + crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1); + } + + csAP_D_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter, crBK) + + CPWL_Utils::GetCircleBorderAppStream( + rcCenter, fBorderWidth, crBorder, crLeftTop, crRightBottom, + nBorderStyle, dsBorder); + } else { + csAP_D_ON = CPWL_Utils::GetRectFillAppStream( + rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) + + CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, + crLeftTop, crRightBottom, + nBorderStyle, dsBorder); + } + + CFX_ByteString csAP_D_OFF = csAP_D_ON; + + csAP_N_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient, nStyle, crText); + csAP_D_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient, nStyle, crText); + + WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON, + pControl->GetCheckedAPState()); + WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off"); + + WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON, + pControl->GetCheckedAPState()); + WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off"); + + CFX_ByteString csAS = GetAppState(); + if (csAS.IsEmpty()) + SetAppState("Off"); +} + +void CPDFSDK_Widget::ResetAppearance_ComboBox(const FX_WCHAR* sValue) { + CPDF_FormControl* pControl = GetFormControl(); + ASSERT(pControl != NULL); + CPDF_FormField* pField = pControl->GetField(); + ASSERT(pField != NULL); + + CFX_ByteTextBuf sBody, sLines; + + CPDF_Rect rcClient = GetClientRect(); + CPDF_Rect rcButton = rcClient; + rcButton.left = rcButton.right - 13; + rcButton.Normalize(); + + if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) { + pEdit->EnableRefresh(FALSE); - CFX_ByteString csAP_N_ON; + CPDFSDK_Document* pDoc = m_pInterForm->GetDocument(); + ASSERT(pDoc != NULL); + CPDFDoc_Environment* pEnv = pDoc->GetEnv(); + CBA_FontMap FontMap(this, pEnv->GetSysHandler()); + FontMap.Initial(); + pEdit->SetFontMap(&FontMap); - CPDF_Rect rcCenter = CPWL_Utils::DeflateRect(CPWL_Utils::GetCenterSquare(rcWindow), 1.0f); + CPDF_Rect rcEdit = rcClient; + rcEdit.right = rcButton.left; + rcEdit.Normalize(); - if (nStyle == PCS_CIRCLE) - { - if (nBorderStyle == PBS_BEVELED) - { - crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1); - crRightBottom = CPWL_Utils::SubstractColor(crBackground,0.25f); - } - else if (nBorderStyle == PBS_INSET) - { - crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5f); - crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75f); - } + pEdit->SetPlateRect(rcEdit); + pEdit->SetAlignmentV(1); - csAP_N_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter,crBackground) + - CPWL_Utils::GetCircleBorderAppStream(rcCenter,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder); - } + FX_FLOAT fFontSize = GetFontSize(); + if (IsFloatZero(fFontSize)) + pEdit->SetAutoFontSize(TRUE); else - { - csAP_N_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,crBackground) + - CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder); - } + pEdit->SetFontSize(fFontSize); - CFX_ByteString csAP_N_OFF = csAP_N_ON; + pEdit->Initialize(); - switch (nBorderStyle) - { - case PBS_BEVELED: - { - CPWL_Color crTemp = crLeftTop; - crLeftTop = crRightBottom; - crRightBottom = crTemp; - } - break; - case PBS_INSET: - crLeftTop = CPWL_Color(COLORTYPE_GRAY,0); - crRightBottom = CPWL_Color(COLORTYPE_GRAY,1); - break; + if (sValue) + pEdit->SetText(sValue); + else { + int32_t nCurSel = pField->GetSelectedIndex(0); + + if (nCurSel < 0) + pEdit->SetText(pField->GetValue().c_str()); + else + pEdit->SetText(pField->GetOptionLabel(nCurSel).c_str()); } - CFX_ByteString csAP_D_ON; + CPDF_Rect rcContent = pEdit->GetContentRect(); - if (nStyle == PCS_CIRCLE) - { - CPWL_Color crBK = CPWL_Utils::SubstractColor(crBackground,0.25f); - if (nBorderStyle == PBS_BEVELED) - { - crLeftTop = CPWL_Utils::SubstractColor(crBackground,0.25f); - crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1); - crBK = crBackground; - } - else if (nBorderStyle == PBS_INSET) - { - crLeftTop = CPWL_Color(COLORTYPE_GRAY,0); - crRightBottom = CPWL_Color(COLORTYPE_GRAY,1); - } + CFX_ByteString sEdit = + CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, 0.0f)); + if (sEdit.GetLength() > 0) { + sBody << "/Tx BMC\n" + << "q\n"; + if (rcContent.Width() > rcEdit.Width() || + rcContent.Height() > rcEdit.Height()) { + sBody << rcEdit.left << " " << rcEdit.bottom << " " << rcEdit.Width() + << " " << rcEdit.Height() << " re\nW\nn\n"; + } - csAP_D_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter,crBK) - + CPWL_Utils::GetCircleBorderAppStream(rcCenter,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder); - } - else - { - csAP_D_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,CPWL_Utils::SubstractColor(crBackground,0.25f)) + - CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder); + CPWL_Color crText = GetTextPWLColor(); + sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit + << "ET\n" + << "Q\nEMC\n"; } - CFX_ByteString csAP_D_OFF = csAP_D_ON; - - csAP_N_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient,nStyle,crText); - csAP_D_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient,nStyle,crText); + IFX_Edit::DelEdit(pEdit); + } - WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON, pControl->GetCheckedAPState()); - WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off"); + sBody << CPWL_Utils::GetDropButtonAppStream(rcButton); - WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON, pControl->GetCheckedAPState()); - WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off"); + CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + + sLines.GetByteString() + sBody.GetByteString(); - CFX_ByteString csAS = GetAppState(); - if (csAS.IsEmpty()) - SetAppState("Off"); + WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP); } -void CPDFSDK_Widget::ResetAppearance_ComboBox(const FX_WCHAR* sValue) -{ - CPDF_FormControl* pControl = GetFormControl(); - ASSERT(pControl != NULL); - CPDF_FormField* pField = pControl->GetField(); - ASSERT(pField != NULL); - - CFX_ByteTextBuf sBody, sLines; +void CPDFSDK_Widget::ResetAppearance_ListBox() { + CPDF_FormControl* pControl = GetFormControl(); + ASSERT(pControl != NULL); + CPDF_FormField* pField = pControl->GetField(); + ASSERT(pField != NULL); - CPDF_Rect rcClient = GetClientRect(); - CPDF_Rect rcButton = rcClient; - rcButton.left = rcButton.right - 13; - rcButton.Normalize(); + CPDF_Rect rcClient = GetClientRect(); - if (IFX_Edit * pEdit = IFX_Edit::NewEdit()) - { - pEdit->EnableRefresh(FALSE); + CFX_ByteTextBuf sBody, sLines; - CPDFSDK_Document* pDoc = m_pInterForm->GetDocument(); - ASSERT(pDoc != NULL); - CPDFDoc_Environment* pEnv = pDoc->GetEnv(); - CBA_FontMap FontMap(this,pEnv->GetSysHandler()); - FontMap.Initial(); - pEdit->SetFontMap(&FontMap); + if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) { + pEdit->EnableRefresh(FALSE); - CPDF_Rect rcEdit = rcClient; - rcEdit.right = rcButton.left; - rcEdit.Normalize(); + CPDFSDK_Document* pDoc = m_pInterForm->GetDocument(); + ASSERT(pDoc != NULL); + CPDFDoc_Environment* pEnv = pDoc->GetEnv(); - pEdit->SetPlateRect(rcEdit); - pEdit->SetAlignmentV(1); + CBA_FontMap FontMap(this, pEnv->GetSysHandler()); + FontMap.Initial(); + pEdit->SetFontMap(&FontMap); - FX_FLOAT fFontSize = GetFontSize(); - if (IsFloatZero(fFontSize)) - pEdit->SetAutoFontSize(TRUE); - else - pEdit->SetFontSize(fFontSize); + pEdit->SetPlateRect(CPDF_Rect(rcClient.left, 0.0f, rcClient.right, 0.0f)); - pEdit->Initialize(); + FX_FLOAT fFontSize = GetFontSize(); - if (sValue) - pEdit->SetText(sValue); - else - { - int32_t nCurSel = pField->GetSelectedIndex(0); + if (IsFloatZero(fFontSize)) + pEdit->SetFontSize(12.0f); + else + pEdit->SetFontSize(fFontSize); - if (nCurSel < 0) - pEdit->SetText(pField->GetValue().c_str()); - else - pEdit->SetText(pField->GetOptionLabel(nCurSel).c_str()); - } + pEdit->Initialize(); - CPDF_Rect rcContent = pEdit->GetContentRect(); + CFX_ByteTextBuf sList; + FX_FLOAT fy = rcClient.top; - CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,0.0f)); - if (sEdit.GetLength() > 0) - { - sBody << "/Tx BMC\n" << "q\n"; - if (rcContent.Width() > rcEdit.Width() || - rcContent.Height() > rcEdit.Height()) - { - sBody << rcEdit.left << " " << rcEdit.bottom << " " - << rcEdit.Width() << " " << rcEdit.Height() << " re\nW\nn\n"; - } + int32_t nTop = pField->GetTopVisibleIndex(); + int32_t nCount = pField->CountOptions(); + int32_t nSelCount = pField->CountSelectedItems(); - CPWL_Color crText = GetTextPWLColor(); - sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit << "ET\n" << "Q\nEMC\n"; + for (int32_t i = nTop; i < nCount; i++) { + FX_BOOL bSelected = FALSE; + for (int32_t j = 0; j < nSelCount; j++) { + if (pField->GetSelectedIndex(j) == i) { + bSelected = TRUE; + break; } + } - IFX_Edit::DelEdit(pEdit); + pEdit->SetText(pField->GetOptionLabel(i).c_str()); + + CPDF_Rect rcContent = pEdit->GetContentRect(); + FX_FLOAT fItemHeight = rcContent.Height(); + + if (bSelected) { + CPDF_Rect rcItem = + CPDF_Rect(rcClient.left, fy - fItemHeight, rcClient.right, fy); + sList << "q\n" << CPWL_Utils::GetColorAppStream( + CPWL_Color(COLORTYPE_RGB, 0, 51.0f / 255.0f, + 113.0f / 255.0f), + TRUE) + << rcItem.left << " " << rcItem.bottom << " " << rcItem.Width() + << " " << rcItem.Height() << " re f\n" + << "Q\n"; + + sList << "BT\n" << CPWL_Utils::GetColorAppStream( + CPWL_Color(COLORTYPE_GRAY, 1), TRUE) + << CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, fy)) + << "ET\n"; + } else { + CPWL_Color crText = GetTextPWLColor(); + sList << "BT\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) + << CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, fy)) + << "ET\n"; + } + + fy -= fItemHeight; + } + + if (sList.GetSize() > 0) { + sBody << "/Tx BMC\n" + << "q\n" << rcClient.left << " " << rcClient.bottom << " " + << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n"; + sBody << sList << "Q\nEMC\n"; } - sBody << CPWL_Utils::GetDropButtonAppStream(rcButton); + IFX_Edit::DelEdit(pEdit); + } - CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + sLines.GetByteString() + sBody.GetByteString(); + CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + + sLines.GetByteString() + sBody.GetByteString(); - WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP); + WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP); } -void CPDFSDK_Widget::ResetAppearance_ListBox() -{ - CPDF_FormControl* pControl = GetFormControl(); - ASSERT(pControl != NULL); - CPDF_FormField* pField = pControl->GetField(); - ASSERT(pField != NULL); +void CPDFSDK_Widget::ResetAppearance_TextField(const FX_WCHAR* sValue) { + CPDF_FormControl* pControl = GetFormControl(); + ASSERT(pControl != NULL); + CPDF_FormField* pField = pControl->GetField(); + ASSERT(pField != NULL); - CPDF_Rect rcClient = GetClientRect(); + CFX_ByteTextBuf sBody, sLines; - CFX_ByteTextBuf sBody, sLines; + if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) { + pEdit->EnableRefresh(FALSE); - if (IFX_Edit * pEdit = IFX_Edit::NewEdit()) - { - pEdit->EnableRefresh(FALSE); + CPDFSDK_Document* pDoc = m_pInterForm->GetDocument(); + ASSERT(pDoc != NULL); + CPDFDoc_Environment* pEnv = pDoc->GetEnv(); - CPDFSDK_Document* pDoc = m_pInterForm->GetDocument(); - ASSERT(pDoc != NULL); - CPDFDoc_Environment* pEnv = pDoc->GetEnv(); + CBA_FontMap FontMap( + this, + pEnv->GetSysHandler()); //, + //ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv())); + FontMap.Initial(); + pEdit->SetFontMap(&FontMap); - CBA_FontMap FontMap(this,pEnv->GetSysHandler()); - FontMap.Initial(); - pEdit->SetFontMap(&FontMap); + CPDF_Rect rcClient = GetClientRect(); + pEdit->SetPlateRect(rcClient); + pEdit->SetAlignmentH(pControl->GetControlAlignment()); - pEdit->SetPlateRect(CPDF_Rect(rcClient.left,0.0f,rcClient.right,0.0f)); + FX_DWORD dwFieldFlags = pField->GetFieldFlags(); + FX_BOOL bMultiLine = (dwFieldFlags >> 12) & 1; - FX_FLOAT fFontSize = GetFontSize(); + if (bMultiLine) { + pEdit->SetMultiLine(TRUE); + pEdit->SetAutoReturn(TRUE); + } else { + pEdit->SetAlignmentV(1); + } - if (IsFloatZero(fFontSize)) - pEdit->SetFontSize(12.0f); - else - pEdit->SetFontSize(fFontSize); + FX_WORD subWord = 0; + if ((dwFieldFlags >> 13) & 1) { + subWord = '*'; + pEdit->SetPasswordChar(subWord); + } - pEdit->Initialize(); + int nMaxLen = pField->GetMaxLen(); + FX_BOOL bCharArray = (dwFieldFlags >> 24) & 1; + FX_FLOAT fFontSize = GetFontSize(); - CFX_ByteTextBuf sList; - FX_FLOAT fy = rcClient.top; + CFX_WideString sValueTmp; + if (!sValue && (NULL != this->GetMixXFAWidget())) { + sValueTmp = GetValue(TRUE); + sValue = sValueTmp; + } - int32_t nTop = pField->GetTopVisibleIndex(); - int32_t nCount = pField->CountOptions(); - int32_t nSelCount = pField->CountSelectedItems(); + if (nMaxLen > 0) { + if (bCharArray) { + pEdit->SetCharArray(nMaxLen); - for (int32_t i=nTop; iGetSelectedIndex(j) == i) - { - bSelected = TRUE; - break; - } - } + if (IsFloatZero(fFontSize)) { + fFontSize = CPWL_Edit::GetCharArrayAutoFontSize(FontMap.GetPDFFont(0), + rcClient, nMaxLen); + } + } else { + if (sValue) + nMaxLen = wcslen((const wchar_t*)sValue); + pEdit->SetLimitChar(nMaxLen); + } + } - pEdit->SetText(pField->GetOptionLabel(i).c_str()); + if (IsFloatZero(fFontSize)) + pEdit->SetAutoFontSize(TRUE); + else + pEdit->SetFontSize(fFontSize); + + pEdit->Initialize(); + + if (sValue) + pEdit->SetText(sValue); + else + pEdit->SetText(pField->GetValue().c_str()); - CPDF_Rect rcContent = pEdit->GetContentRect(); - FX_FLOAT fItemHeight = rcContent.Height(); + CPDF_Rect rcContent = pEdit->GetContentRect(); - if (bSelected) - { - CPDF_Rect rcItem = CPDF_Rect(rcClient.left,fy-fItemHeight,rcClient.right,fy); - sList << "q\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB,0,51.0f/255.0f,113.0f/255.0f),TRUE) - << rcItem.left << " " << rcItem.bottom << " " << rcItem.Width() << " " << rcItem.Height() << " re f\n" << "Q\n"; + CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream( + pEdit, CPDF_Point(0.0f, 0.0f), NULL, !bCharArray, subWord); - sList << "BT\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_GRAY,1),TRUE) << - CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,fy)) << "ET\n"; + if (sEdit.GetLength() > 0) { + sBody << "/Tx BMC\n" + << "q\n"; + if (rcContent.Width() > rcClient.Width() || + rcContent.Height() > rcClient.Height()) { + sBody << rcClient.left << " " << rcClient.bottom << " " + << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n"; + } + CPWL_Color crText = GetTextPWLColor(); + sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit + << "ET\n" + << "Q\nEMC\n"; + } + + if (bCharArray) { + switch (GetBorderStyle()) { + case BBS_SOLID: { + CFX_ByteString sColor = + CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE); + if (sColor.GetLength() > 0) { + sLines << "q\n" << GetBorderWidth() << " w\n" + << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE) + << " 2 J 0 j\n"; + + for (int32_t i = 1; i < nMaxLen; i++) { + sLines << rcClient.left + + ((rcClient.right - rcClient.left) / nMaxLen) * i + << " " << rcClient.bottom << " m\n" + << rcClient.left + + ((rcClient.right - rcClient.left) / nMaxLen) * i + << " " << rcClient.top << " l S\n"; } - else - { - CPWL_Color crText = GetTextPWLColor(); - sList << "BT\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << - CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,fy)) << "ET\n"; + + sLines << "Q\n"; + } + } break; + case BBS_DASH: { + CFX_ByteString sColor = + CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE); + if (sColor.GetLength() > 0) { + CPWL_Dash dsBorder = CPWL_Dash(3, 3, 0); + + sLines << "q\n" << GetBorderWidth() << " w\n" + << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE) + << "[" << dsBorder.nDash << " " << dsBorder.nGap << "] " + << dsBorder.nPhase << " d\n"; + + for (int32_t i = 1; i < nMaxLen; i++) { + sLines << rcClient.left + + ((rcClient.right - rcClient.left) / nMaxLen) * i + << " " << rcClient.bottom << " m\n" + << rcClient.left + + ((rcClient.right - rcClient.left) / nMaxLen) * i + << " " << rcClient.top << " l S\n"; } - fy -= fItemHeight; - } + sLines << "Q\n"; + } + } break; + } + } - if (sList.GetSize() > 0) - { - sBody << "/Tx BMC\n" << "q\n" << rcClient.left << " " << rcClient.bottom << " " - << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n"; - sBody << sList << "Q\nEMC\n"; - } + IFX_Edit::DelEdit(pEdit); + } - IFX_Edit::DelEdit(pEdit); - } + CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + + sLines.GetByteString() + sBody.GetByteString(); + WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP); +} - CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + sLines.GetByteString() + sBody.GetByteString(); - - WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP); -} - -void CPDFSDK_Widget::ResetAppearance_TextField(const FX_WCHAR* sValue) -{ - CPDF_FormControl* pControl = GetFormControl(); - ASSERT(pControl != NULL); - CPDF_FormField* pField = pControl->GetField(); - ASSERT(pField != NULL); - - CFX_ByteTextBuf sBody, sLines; - - if (IFX_Edit * pEdit = IFX_Edit::NewEdit()) - { - pEdit->EnableRefresh(FALSE); - - CPDFSDK_Document* pDoc = m_pInterForm->GetDocument(); - ASSERT(pDoc != NULL); - CPDFDoc_Environment* pEnv = pDoc->GetEnv(); - - CBA_FontMap FontMap(this,pEnv->GetSysHandler());//, ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv())); - FontMap.Initial(); - pEdit->SetFontMap(&FontMap); - - CPDF_Rect rcClient = GetClientRect(); - pEdit->SetPlateRect(rcClient); - pEdit->SetAlignmentH(pControl->GetControlAlignment()); - - FX_DWORD dwFieldFlags = pField->GetFieldFlags(); - FX_BOOL bMultiLine = (dwFieldFlags >> 12) & 1; - - if (bMultiLine) - { - pEdit->SetMultiLine(TRUE); - pEdit->SetAutoReturn(TRUE); - } - else - { - pEdit->SetAlignmentV(1); - } - - FX_WORD subWord = 0; - if ((dwFieldFlags >> 13) & 1) - { - subWord = '*'; - pEdit->SetPasswordChar(subWord); - } - - int nMaxLen = pField->GetMaxLen(); - FX_BOOL bCharArray = (dwFieldFlags >> 24) & 1; - FX_FLOAT fFontSize = GetFontSize(); - - CFX_WideString sValueTmp; - if (!sValue && (NULL != this->GetMixXFAWidget())) - { - sValueTmp = GetValue(TRUE); - sValue = sValueTmp; - } - - if (nMaxLen > 0) - { - if (bCharArray) - { - pEdit->SetCharArray(nMaxLen); - - if (IsFloatZero(fFontSize)) - { - fFontSize = CPWL_Edit::GetCharArrayAutoFontSize(FontMap.GetPDFFont(0),rcClient,nMaxLen); - } - } - else - { - if (sValue) - nMaxLen = wcslen((const wchar_t*)sValue); - pEdit->SetLimitChar(nMaxLen); - } - } - - if (IsFloatZero(fFontSize)) - pEdit->SetAutoFontSize(TRUE); - else - pEdit->SetFontSize(fFontSize); - - pEdit->Initialize(); - - if (sValue) - pEdit->SetText(sValue); - else - pEdit->SetText(pField->GetValue().c_str()); - - CPDF_Rect rcContent = pEdit->GetContentRect(); - - CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,0.0f), - NULL,!bCharArray,subWord); - - if (sEdit.GetLength() > 0) - { - sBody << "/Tx BMC\n" << "q\n"; - if (rcContent.Width() > rcClient.Width() || - rcContent.Height() > rcClient.Height()) - { - sBody << rcClient.left << " " << rcClient.bottom << " " - << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n"; - } - CPWL_Color crText = GetTextPWLColor(); - sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit << "ET\n" << "Q\nEMC\n"; - } - - if (bCharArray) - { - switch (GetBorderStyle()) - { - case BBS_SOLID: - { - CFX_ByteString sColor = CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE); - if (sColor.GetLength() > 0) - { - sLines << "q\n" << GetBorderWidth() << " w\n" - << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE) << " 2 J 0 j\n"; - - for (int32_t i=1;i 0) - { - CPWL_Dash dsBorder = CPWL_Dash(3, 3, 0); - - sLines << "q\n" << GetBorderWidth() << " w\n" - << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE) - << "[" << dsBorder.nDash << " " - << dsBorder.nGap << "] " - << dsBorder.nPhase << " d\n"; - - for (int32_t i=1;iGetRotation() % 360)) - { - case 0: - case 180: - default: - rcPDFWindow = CPDF_Rect(0, 0, fWidth, fHeight); - break; - case 90: - case 270: - rcPDFWindow = CPDF_Rect(0, 0, fHeight, fWidth); - break; - } + CPDF_FormControl* pControl = GetFormControl(); + CPDF_Rect rcPDFWindow; + switch (abs(pControl->GetRotation() % 360)) { + case 0: + case 180: + default: + rcPDFWindow = CPDF_Rect(0, 0, fWidth, fHeight); + break; + case 90: + case 270: + rcPDFWindow = CPDF_Rect(0, 0, fHeight, fWidth); + break; + } - return rcPDFWindow; + return rcPDFWindow; } -CFX_ByteString CPDFSDK_Widget::GetBackgroundAppStream() const -{ - CPWL_Color crBackground = GetFillPWLColor(); - if (crBackground.nColorType != COLORTYPE_TRANSPARENT) { - return CPWL_Utils::GetRectFillAppStream(GetRotatedRect(), crBackground); - } - return ""; +CFX_ByteString CPDFSDK_Widget::GetBackgroundAppStream() const { + CPWL_Color crBackground = GetFillPWLColor(); + if (crBackground.nColorType != COLORTYPE_TRANSPARENT) { + return CPWL_Utils::GetRectFillAppStream(GetRotatedRect(), crBackground); + } + return ""; } -CFX_ByteString CPDFSDK_Widget::GetBorderAppStream() const -{ - CPDF_Rect rcWindow = GetRotatedRect(); - CPWL_Color crBorder = GetBorderPWLColor(); - CPWL_Color crBackground = GetFillPWLColor(); - CPWL_Color crLeftTop, crRightBottom; +CFX_ByteString CPDFSDK_Widget::GetBorderAppStream() const { + CPDF_Rect rcWindow = GetRotatedRect(); + CPWL_Color crBorder = GetBorderPWLColor(); + CPWL_Color crBackground = GetFillPWLColor(); + CPWL_Color crLeftTop, crRightBottom; - FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); - int32_t nBorderStyle = 0; - CPWL_Dash dsBorder(3,0,0); + FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); + int32_t nBorderStyle = 0; + CPWL_Dash dsBorder(3, 0, 0); - switch (GetBorderStyle()) - { + switch (GetBorderStyle()) { case BBS_DASH: - nBorderStyle = PBS_DASH; - dsBorder = CPWL_Dash(3, 3, 0); - break; + nBorderStyle = PBS_DASH; + dsBorder = CPWL_Dash(3, 3, 0); + break; case BBS_BEVELED: - nBorderStyle = PBS_BEVELED; - fBorderWidth *= 2; - crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1); - crRightBottom = CPWL_Utils::DevideColor(crBackground, 2); - break; + nBorderStyle = PBS_BEVELED; + fBorderWidth *= 2; + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1); + crRightBottom = CPWL_Utils::DevideColor(crBackground, 2); + break; case BBS_INSET: - nBorderStyle = PBS_INSET; - fBorderWidth *= 2; - crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5); - crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75); - break; + nBorderStyle = PBS_INSET; + fBorderWidth *= 2; + crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5); + crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75); + break; case BBS_UNDERLINE: - nBorderStyle = PBS_UNDERLINED; - break; + nBorderStyle = PBS_UNDERLINED; + break; default: - nBorderStyle = PBS_SOLID; - break; - } + nBorderStyle = PBS_SOLID; + break; + } - return CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop, - crRightBottom, nBorderStyle, dsBorder); + return CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, + crLeftTop, crRightBottom, nBorderStyle, + dsBorder); } -CPDF_Matrix CPDFSDK_Widget::GetMatrix() const -{ - CPDF_Matrix mt; - CPDF_FormControl* pControl = GetFormControl(); - ASSERT(pControl != NULL); +CPDF_Matrix CPDFSDK_Widget::GetMatrix() const { + CPDF_Matrix mt; + CPDF_FormControl* pControl = GetFormControl(); + ASSERT(pControl != NULL); - CPDF_Rect rcAnnot = GetRect(); - FX_FLOAT fWidth = rcAnnot.right - rcAnnot.left; - FX_FLOAT fHeight = rcAnnot.top - rcAnnot.bottom; + CPDF_Rect rcAnnot = GetRect(); + FX_FLOAT fWidth = rcAnnot.right - rcAnnot.left; + FX_FLOAT fHeight = rcAnnot.top - rcAnnot.bottom; + switch (abs(pControl->GetRotation() % 360)) { + case 0: + default: + mt = CPDF_Matrix(1, 0, 0, 1, 0, 0); + break; + case 90: + mt = CPDF_Matrix(0, 1, -1, 0, fWidth, 0); + break; + case 180: + mt = CPDF_Matrix(-1, 0, 0, -1, fWidth, fHeight); + break; + case 270: + mt = CPDF_Matrix(0, -1, 1, 0, 0, fHeight); + break; + } + + return mt; +} + +CPWL_Color CPDFSDK_Widget::GetTextPWLColor() const { + CPWL_Color crText = CPWL_Color(COLORTYPE_GRAY, 0); + + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); + + CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance(); + if (da.HasColor()) { + int32_t iColorType; + FX_FLOAT fc[4]; + da.GetColor(iColorType, fc); + crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + } + return crText; +} - switch (abs(pControl->GetRotation() % 360)) - { - case 0: - default: - mt = CPDF_Matrix(1, 0, 0, 1, 0, 0); - break; - case 90: - mt = CPDF_Matrix(0, 1, -1, 0, fWidth, 0); - break; - case 180: - mt = CPDF_Matrix(-1, 0, 0, -1, fWidth, fHeight); - break; - case 270: - mt = CPDF_Matrix(0, -1, 1, 0, 0, fHeight); - break; - } +CPWL_Color CPDFSDK_Widget::GetBorderPWLColor() const { + CPWL_Color crBorder; + + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); - return mt; + int32_t iColorType; + FX_FLOAT fc[4]; + pFormCtrl->GetOriginalBorderColor(iColorType, fc); + if (iColorType > 0) + crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + + return crBorder; } -CPWL_Color CPDFSDK_Widget::GetTextPWLColor() const -{ - CPWL_Color crText = CPWL_Color(COLORTYPE_GRAY, 0); +CPWL_Color CPDFSDK_Widget::GetFillPWLColor() const { + CPWL_Color crFill; - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); + CPDF_FormControl* pFormCtrl = GetFormControl(); + ASSERT(pFormCtrl != NULL); - CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance(); - if (da.HasColor()) - { - int32_t iColorType; - FX_FLOAT fc[4]; - da.GetColor(iColorType, fc); - crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - } + int32_t iColorType; + FX_FLOAT fc[4]; + pFormCtrl->GetOriginalBackgroundColor(iColorType, fc); + if (iColorType > 0) + crFill = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); - return crText; + return crFill; } -CPWL_Color CPDFSDK_Widget::GetBorderPWLColor() const -{ - CPWL_Color crBorder; +void CPDFSDK_Widget::AddImageToAppearance(const CFX_ByteString& sAPType, + CPDF_Stream* pImage) { + ASSERT(pImage != NULL); - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); + CPDF_Document* pDoc = + m_pPageView->GetPDFDocument(); // pDocument->GetDocument(); + ASSERT(pDoc != NULL); - int32_t iColorType; - FX_FLOAT fc[4]; - pFormCtrl->GetOriginalBorderColor(iColorType, fc); - if (iColorType > 0) - crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP"); + ASSERT(pAPDict != NULL); - return crBorder; -} + CPDF_Stream* pStream = pAPDict->GetStream(sAPType); + ASSERT(pStream != NULL); + + CPDF_Dictionary* pStreamDict = pStream->GetDict(); + ASSERT(pStreamDict != NULL); + + CFX_ByteString sImageAlias = "IMG"; -CPWL_Color CPDFSDK_Widget::GetFillPWLColor() const -{ - CPWL_Color crFill; + if (CPDF_Dictionary* pImageDict = pImage->GetDict()) { + sImageAlias = pImageDict->GetString("Name"); + if (sImageAlias.IsEmpty()) + sImageAlias = "IMG"; + } - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); + CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources"); + if (!pStreamResList) { + pStreamResList = FX_NEW CPDF_Dictionary(); + pStreamDict->SetAt("Resources", pStreamResList); + } - int32_t iColorType; - FX_FLOAT fc[4]; - pFormCtrl->GetOriginalBackgroundColor(iColorType, fc); - if (iColorType > 0) - crFill = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]); + if (pStreamResList) { + CPDF_Dictionary* pXObject = FX_NEW CPDF_Dictionary; + pXObject->SetAtReference(sImageAlias, pDoc, pImage); + pStreamResList->SetAt("XObject", pXObject); + } +} - return crFill; +void CPDFSDK_Widget::RemoveAppearance(const CFX_ByteString& sAPType) { + if (CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP")) { + pAPDict->RemoveAt(sAPType); + } } -void CPDFSDK_Widget::AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage) -{ - ASSERT(pImage != NULL); +FX_BOOL CPDFSDK_Widget::OnAAction(CPDF_AAction::AActionType type, + PDFSDK_FieldAction& data, + CPDFSDK_PageView* pPageView) { + CPDFSDK_Document* pDocument = pPageView->GetSDKDocument(); + ASSERT(pDocument != NULL); - CPDF_Document* pDoc = m_pPageView->GetPDFDocument();//pDocument->GetDocument(); - ASSERT(pDoc != NULL); + CPDFXFA_Document* pDoc = pDocument->GetDocument(); + ASSERT(pDoc != NULL); - CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP"); - ASSERT(pAPDict != NULL); + CPDFDoc_Environment* pEnv = pDocument->GetEnv(); + ASSERT(pEnv != NULL); - CPDF_Stream* pStream = pAPDict->GetStream(sAPType); - ASSERT(pStream != NULL); + if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { + XFA_EVENTTYPE eEventType = GetXFAEventType(type, data.bWillCommit); - CPDF_Dictionary* pStreamDict = pStream->GetDict(); - ASSERT(pStreamDict != NULL); + if (eEventType != XFA_EVENT_Unknown) { + if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { + CXFA_EventParam param; + param.m_eType = eEventType; + param.m_wsChange = data.sChange; + param.m_iCommitKey = data.nCommitKey; + param.m_bShift = data.bShift; + param.m_iSelStart = data.nSelStart; + param.m_iSelEnd = data.nSelEnd; + param.m_wsFullText = data.sValue; + param.m_bKeyDown = data.bKeyDown; + param.m_bModifier = data.bModifier; + param.m_wsNewText = data.sValue; + if (data.nSelEnd > data.nSelStart) + param.m_wsNewText.Delete(data.nSelStart, + data.nSelEnd - data.nSelStart); + for (int i = data.sChange.GetLength() - 1; i >= 0; i--) + param.m_wsNewText.Insert(data.nSelStart, data.sChange[i]); + param.m_wsPrevText = data.sValue; - CFX_ByteString sImageAlias = "IMG"; + CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget); + param.m_pTarget = pAcc; + int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, ¶m); - if (CPDF_Dictionary* pImageDict = pImage->GetDict()) - { - sImageAlias = pImageDict->GetString("Name"); - if (sImageAlias.IsEmpty()) - sImageAlias = "IMG"; - } + if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) { + pDocView->UpdateDocView(); + } - CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources"); - if (!pStreamResList) - { - pStreamResList = FX_NEW CPDF_Dictionary(); - pStreamDict->SetAt("Resources", pStreamResList); - } - - if (pStreamResList) - { - CPDF_Dictionary* pXObject = FX_NEW CPDF_Dictionary; - pXObject->SetAtReference(sImageAlias, pDoc, pImage); - pStreamResList->SetAt("XObject", pXObject); - } -} - -void CPDFSDK_Widget::RemoveAppearance(const CFX_ByteString& sAPType) -{ - if (CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP")) - { - pAPDict->RemoveAt(sAPType); + if (nRet == XFA_EVENTERROR_Sucess) + return TRUE; + } } -} - -FX_BOOL CPDFSDK_Widget::OnAAction(CPDF_AAction::AActionType type, PDFSDK_FieldAction& data, CPDFSDK_PageView* pPageView) -{ - CPDFSDK_Document* pDocument = pPageView->GetSDKDocument(); - ASSERT(pDocument != NULL); - - CPDFXFA_Document* pDoc = pDocument->GetDocument(); - ASSERT(pDoc != NULL); - - CPDFDoc_Environment* pEnv = pDocument->GetEnv(); - ASSERT(pEnv != NULL); - - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) - { - XFA_EVENTTYPE eEventType = GetXFAEventType(type, data.bWillCommit); - - if (eEventType != XFA_EVENT_Unknown) - { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) - { - CXFA_EventParam param; - param.m_eType = eEventType; - param.m_wsChange = data.sChange; - param.m_iCommitKey = data.nCommitKey; - param.m_bShift = data.bShift; - param.m_iSelStart = data.nSelStart; - param.m_iSelEnd = data.nSelEnd; - param.m_wsFullText = data.sValue; - param.m_bKeyDown = data.bKeyDown; - param.m_bModifier = data.bModifier; - param.m_wsNewText = data.sValue; - if (data.nSelEnd > data.nSelStart) - param.m_wsNewText.Delete(data.nSelStart, data.nSelEnd - data.nSelStart); - for (int i=data.sChange.GetLength() - 1; i>=0; i--) - param.m_wsNewText.Insert(data.nSelStart, data.sChange[i]); - param.m_wsPrevText = data.sValue; - - CXFA_WidgetAcc* pAcc = pXFAWidgetHandler->GetDataAcc(hWidget); - param.m_pTarget = pAcc; - int32_t nRet = pXFAWidgetHandler->ProcessEvent(pAcc, ¶m); - - if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) - { - pDocView->UpdateDocView(); - } - - if (nRet == XFA_EVENTERROR_Sucess) - return TRUE; - } - } - } - - CPDF_Action action = GetAAction(type); - - if (action && action.GetType() != CPDF_Action::Unknown) - { - CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander(); - return pActionHandler->DoAction_Field(action, type, pDocument, GetFormField(), data); + } + + CPDF_Action action = GetAAction(type); + + if (action && action.GetType() != CPDF_Action::Unknown) { + CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander(); + return pActionHandler->DoAction_Field(action, type, pDocument, + GetFormField(), data); + } + return FALSE; +} + +CPDF_Action CPDFSDK_Widget::GetAAction(CPDF_AAction::AActionType eAAT) { + switch (eAAT) { + case CPDF_AAction::CursorEnter: + case CPDF_AAction::CursorExit: + case CPDF_AAction::ButtonDown: + case CPDF_AAction::ButtonUp: + case CPDF_AAction::GetFocus: + case CPDF_AAction::LoseFocus: + case CPDF_AAction::PageOpen: + case CPDF_AAction::PageClose: + case CPDF_AAction::PageVisible: + case CPDF_AAction::PageInvisible: + return CPDFSDK_BAAnnot::GetAAction(eAAT); + + case CPDF_AAction::KeyStroke: + case CPDF_AAction::Format: + case CPDF_AAction::Validate: + case CPDF_AAction::Calculate: { + CPDF_FormField* pField = GetFormField(); + if (CPDF_AAction aa = pField->GetAdditionalAction()) + return aa.GetAction(eAAT); + return CPDFSDK_BAAnnot::GetAAction(eAAT); } - return FALSE; -} - -CPDF_Action CPDFSDK_Widget::GetAAction(CPDF_AAction::AActionType eAAT) -{ - switch (eAAT) - { - case CPDF_AAction::CursorEnter: - case CPDF_AAction::CursorExit: - case CPDF_AAction::ButtonDown: - case CPDF_AAction::ButtonUp: - case CPDF_AAction::GetFocus: - case CPDF_AAction::LoseFocus: - case CPDF_AAction::PageOpen: - case CPDF_AAction::PageClose: - case CPDF_AAction::PageVisible: - case CPDF_AAction::PageInvisible: - return CPDFSDK_BAAnnot::GetAAction(eAAT); - - case CPDF_AAction::KeyStroke: - case CPDF_AAction::Format: - case CPDF_AAction::Validate: - case CPDF_AAction::Calculate: - { - CPDF_FormField* pField = GetFormField(); - if (CPDF_AAction aa = pField->GetAdditionalAction()) - return aa.GetAction(eAAT); - return CPDFSDK_BAAnnot::GetAAction(eAAT); - } - default: - break; - } - - return CPDF_Action(); -} - - -CFX_WideString CPDFSDK_Widget::GetAlternateName() const -{ - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); + default: + break; + } - return pFormField->GetAlternateName(); + return CPDF_Action(); } -int32_t CPDFSDK_Widget::GetAppearanceAge() const -{ - return m_nAppAge; +CFX_WideString CPDFSDK_Widget::GetAlternateName() const { + CPDF_FormField* pFormField = GetFormField(); + ASSERT(pFormField != NULL); + + return pFormField->GetAlternateName(); } -int32_t CPDFSDK_Widget::GetValueAge() const -{ - return m_nValueAge; +int32_t CPDFSDK_Widget::GetAppearanceAge() const { + return m_nAppAge; } +int32_t CPDFSDK_Widget::GetValueAge() const { + return m_nValueAge; +} -FX_BOOL CPDFSDK_Widget::HitTest(FX_FLOAT pageX, FX_FLOAT pageY) -{ - CPDF_Annot* pAnnot = GetPDFAnnot(); - CFX_FloatRect annotRect; - pAnnot->GetRect(annotRect); - if(annotRect.Contains(pageX, pageY)) - { - if (!IsVisible()) return FALSE; +FX_BOOL CPDFSDK_Widget::HitTest(FX_FLOAT pageX, FX_FLOAT pageY) { + CPDF_Annot* pAnnot = GetPDFAnnot(); + CFX_FloatRect annotRect; + pAnnot->GetRect(annotRect); + if (annotRect.Contains(pageX, pageY)) { + if (!IsVisible()) + return FALSE; - int nFieldFlags = GetFieldFlags(); - if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY) - return FALSE; + int nFieldFlags = GetFieldFlags(); + if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY) + return FALSE; - return TRUE; - } - return FALSE; + return TRUE; + } + return FALSE; } -//CPDFSDK_XFAWidget -CPDFSDK_XFAWidget::CPDFSDK_XFAWidget(IXFA_Widget* pAnnot, CPDFSDK_PageView* pPageView, CPDFSDK_InterForm* pInterForm) : - CPDFSDK_Annot(pPageView), - m_hXFAWidget(pAnnot), - m_pInterForm(pInterForm) -{ - -} +// CPDFSDK_XFAWidget +CPDFSDK_XFAWidget::CPDFSDK_XFAWidget(IXFA_Widget* pAnnot, + CPDFSDK_PageView* pPageView, + CPDFSDK_InterForm* pInterForm) + : CPDFSDK_Annot(pPageView), + m_hXFAWidget(pAnnot), + m_pInterForm(pInterForm) {} -FX_BOOL CPDFSDK_XFAWidget::IsXFAField() -{ - return TRUE; +FX_BOOL CPDFSDK_XFAWidget::IsXFAField() { + return TRUE; } -CFX_ByteString CPDFSDK_XFAWidget::GetType() const -{ - return FSDK_XFAWIDGET_TYPENAME; +CFX_ByteString CPDFSDK_XFAWidget::GetType() const { + return FSDK_XFAWIDGET_TYPENAME; } -CFX_FloatRect CPDFSDK_XFAWidget::GetRect() -{ - CPDFSDK_PageView* pPageView = GetPageView(); - ASSERT(pPageView != NULL); +CFX_FloatRect CPDFSDK_XFAWidget::GetRect() { + CPDFSDK_PageView* pPageView = GetPageView(); + ASSERT(pPageView != NULL); - CPDFSDK_Document* pDocument = pPageView->GetSDKDocument(); - ASSERT(pDocument != NULL); + CPDFSDK_Document* pDocument = pPageView->GetSDKDocument(); + ASSERT(pDocument != NULL); - CPDFXFA_Document* pDoc = pDocument->GetDocument(); - ASSERT(pDoc != NULL); + CPDFXFA_Document* pDoc = pDocument->GetDocument(); + ASSERT(pDoc != NULL); - IXFA_DocView* pDocView = pDoc->GetXFADocView(); - ASSERT(pDocView != NULL); + IXFA_DocView* pDocView = pDoc->GetXFADocView(); + ASSERT(pDocView != NULL); - IXFA_WidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler(); - ASSERT(pWidgetHandler != NULL); + IXFA_WidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler(); + ASSERT(pWidgetHandler != NULL); - CFX_RectF rcBBox; - pWidgetHandler->GetRect(GetXFAWidget(), rcBBox); + CFX_RectF rcBBox; + pWidgetHandler->GetRect(GetXFAWidget(), rcBBox); - return CFX_FloatRect(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width, rcBBox.top+rcBBox.height); + return CFX_FloatRect(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width, + rcBBox.top + rcBBox.height); } -//CPDFSDK_InterForm +// CPDFSDK_InterForm CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_Document* pDocument) - :m_pDocument(pDocument), - m_pInterForm(NULL), - m_bCalculate(TRUE), - m_bXfaCalculate(TRUE), - m_bXfaValidationsEnabled(TRUE), - m_bBusy(FALSE) -{ - ASSERT(m_pDocument != NULL); - m_pInterForm = new CPDF_InterForm(m_pDocument->GetDocument()->GetPDFDoc(), FALSE); - ASSERT(m_pInterForm != NULL); - m_pInterForm->SetFormNotify(this); - - for(int i=0; i<6; i++) - m_bNeedHightlight[i] = FALSE; - m_iHighlightAlpha = 0; -} - -CPDFSDK_InterForm::~CPDFSDK_InterForm() -{ - delete m_pInterForm; - m_pInterForm = nullptr; - - m_Map.clear(); - m_XFAMap.RemoveAll(); -} - -FX_BOOL CPDFSDK_InterForm::HighlightWidgets() -{ - return FALSE; + : m_pDocument(pDocument), + m_pInterForm(NULL), + m_bCalculate(TRUE), + m_bXfaCalculate(TRUE), + m_bXfaValidationsEnabled(TRUE), + m_bBusy(FALSE) { + ASSERT(m_pDocument != NULL); + m_pInterForm = + new CPDF_InterForm(m_pDocument->GetDocument()->GetPDFDoc(), FALSE); + ASSERT(m_pInterForm != NULL); + m_pInterForm->SetFormNotify(this); + + for (int i = 0; i < 6; i++) + m_bNeedHightlight[i] = FALSE; + m_iHighlightAlpha = 0; } -CPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const -{ - nonstd::unique_ptr pIterator( - new CBA_AnnotIterator(pWidget->GetPageView(), "Widget", "")); +CPDFSDK_InterForm::~CPDFSDK_InterForm() { + delete m_pInterForm; + m_pInterForm = nullptr; - if (bNext) { - return (CPDFSDK_Widget*)pIterator->GetNextAnnot(pWidget); - } - return (CPDFSDK_Widget*)pIterator->GetPrevAnnot(pWidget); + m_Map.clear(); + m_XFAMap.RemoveAll(); } -CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const -{ - if (!pControl || !m_pInterForm) - return nullptr; +FX_BOOL CPDFSDK_InterForm::HighlightWidgets() { + return FALSE; +} - CPDFSDK_Widget* pWidget = nullptr; - const auto it = m_Map.find(pControl); - if (it != m_Map.end()) - pWidget = it->second; +CPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget, + FX_BOOL bNext) const { + nonstd::unique_ptr pIterator( + new CBA_AnnotIterator(pWidget->GetPageView(), "Widget", "")); - if (pWidget) - return pWidget; + if (bNext) { + return (CPDFSDK_Widget*)pIterator->GetNextAnnot(pWidget); + } + return (CPDFSDK_Widget*)pIterator->GetPrevAnnot(pWidget); +} - CPDF_Dictionary* pControlDict = pControl->GetWidget(); - CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc(); - CPDFSDK_PageView* pPage = nullptr; +CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const { + if (!pControl || !m_pInterForm) + return nullptr; - if (CPDF_Dictionary* pPageDict = pControlDict->GetDict("P")) { - int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum()); - if (nPageIndex >= 0) { - pPage = m_pDocument->GetPageView(nPageIndex); - } + CPDFSDK_Widget* pWidget = nullptr; + const auto it = m_Map.find(pControl); + if (it != m_Map.end()) + pWidget = it->second; + + if (pWidget) + return pWidget; + + CPDF_Dictionary* pControlDict = pControl->GetWidget(); + CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc(); + 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 (!pPage) { + int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict); + if (nPageIndex >= 0) { + pPage = m_pDocument->GetPageView(nPageIndex); } + } - if (!pPage) - return nullptr; - return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict); + if (!pPage) + return nullptr; + return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict); } -void CPDFSDK_InterForm::GetWidgets(const CFX_WideString& sFieldName, CFX_PtrArray& widgets) -{ - ASSERT(m_pInterForm != NULL); +void CPDFSDK_InterForm::GetWidgets(const CFX_WideString& sFieldName, + CFX_PtrArray& widgets) { + ASSERT(m_pInterForm != NULL); - for (int i=0,sz=m_pInterForm->CountFields(sFieldName); iGetField(i, sFieldName); - ASSERT(pFormField != NULL); + for (int i = 0, sz = m_pInterForm->CountFields(sFieldName); i < sz; i++) { + CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName); + ASSERT(pFormField != NULL); - GetWidgets(pFormField, widgets); - } + GetWidgets(pFormField, widgets); + } } -void CPDFSDK_InterForm::GetWidgets(CPDF_FormField* pField, CFX_PtrArray& widgets) -{ - ASSERT(pField != NULL); - - for (int i=0,isz=pField->CountControls(); iGetControl(i); - ASSERT(pFormCtrl != NULL); - - CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl); +void CPDFSDK_InterForm::GetWidgets(CPDF_FormField* pField, + CFX_PtrArray& widgets) { + ASSERT(pField != NULL); - if (pWidget) - widgets.Add(pWidget); - } -} + for (int i = 0, isz = pField->CountControls(); i < isz; i++) { + CPDF_FormControl* pFormCtrl = pField->GetControl(i); + ASSERT(pFormCtrl != NULL); -int CPDFSDK_InterForm::GetPageIndexByAnnotDict(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict) const -{ - ASSERT(pDocument != NULL); - ASSERT(pAnnotDict != NULL); + CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl); - for (int i=0,sz=pDocument->GetPageCount(); iGetPage(i)) - { - if (CPDF_Array* pAnnots = pPageDict->GetArray("Annots")) - { - for (int j=0,jsz=pAnnots->GetCount(); jGetElementValue(j); - if (pAnnotDict == pDict) - { - return i; - } - } - } + if (pWidget) + widgets.Add(pWidget); + } +} + +int CPDFSDK_InterForm::GetPageIndexByAnnotDict( + CPDF_Document* pDocument, + CPDF_Dictionary* pAnnotDict) const { + ASSERT(pDocument != NULL); + ASSERT(pAnnotDict != NULL); + + for (int i = 0, sz = pDocument->GetPageCount(); i < sz; i++) { + if (CPDF_Dictionary* pPageDict = pDocument->GetPage(i)) { + if (CPDF_Array* pAnnots = pPageDict->GetArray("Annots")) { + for (int j = 0, jsz = pAnnots->GetCount(); j < jsz; j++) { + CPDF_Object* pDict = pAnnots->GetElementValue(j); + if (pAnnotDict == pDict) { + return i; + } } + } } + } - return -1; + return -1; } -void CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget) -{ - m_Map[pControl] = pWidget; +void CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl, + CPDFSDK_Widget* pWidget) { + m_Map[pControl] = pWidget; } -void CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl) -{ - m_Map.erase(pControl); +void CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl) { + m_Map.erase(pControl); } -void CPDFSDK_InterForm::AddXFAMap(IXFA_Widget* hWidget, CPDFSDK_XFAWidget* pWidget) -{ - m_XFAMap.SetAt(hWidget, pWidget); +void CPDFSDK_InterForm::AddXFAMap(IXFA_Widget* hWidget, + CPDFSDK_XFAWidget* pWidget) { + m_XFAMap.SetAt(hWidget, pWidget); } -void CPDFSDK_InterForm::RemoveXFAMap(IXFA_Widget* hWidget) -{ - m_XFAMap.RemoveKey(hWidget); +void CPDFSDK_InterForm::RemoveXFAMap(IXFA_Widget* hWidget) { + m_XFAMap.RemoveKey(hWidget); } -CPDFSDK_XFAWidget* CPDFSDK_InterForm::GetXFAWidget(IXFA_Widget* hWidget) -{ - CPDFSDK_XFAWidget* pWidget = NULL; - m_XFAMap.Lookup(hWidget, pWidget); +CPDFSDK_XFAWidget* CPDFSDK_InterForm::GetXFAWidget(IXFA_Widget* hWidget) { + CPDFSDK_XFAWidget* pWidget = NULL; + m_XFAMap.Lookup(hWidget, pWidget); - return pWidget; + return pWidget; } -void CPDFSDK_InterForm::EnableCalculate(FX_BOOL bEnabled) -{ - m_bCalculate = bEnabled; +void CPDFSDK_InterForm::EnableCalculate(FX_BOOL bEnabled) { + m_bCalculate = bEnabled; } -FX_BOOL CPDFSDK_InterForm::IsCalculateEnabled() const -{ - return m_bCalculate; +FX_BOOL CPDFSDK_InterForm::IsCalculateEnabled() const { + return m_bCalculate; } -void CPDFSDK_InterForm::XfaEnableCalculate(FX_BOOL bEnabled) -{ - m_bXfaCalculate = bEnabled; +void CPDFSDK_InterForm::XfaEnableCalculate(FX_BOOL bEnabled) { + m_bXfaCalculate = bEnabled; } -FX_BOOL CPDFSDK_InterForm::IsXfaCalculateEnabled() const -{ - return m_bXfaCalculate; +FX_BOOL CPDFSDK_InterForm::IsXfaCalculateEnabled() const { + return m_bXfaCalculate; } -FX_BOOL CPDFSDK_InterForm::IsXfaValidationsEnabled() -{ - return m_bXfaValidationsEnabled; +FX_BOOL CPDFSDK_InterForm::IsXfaValidationsEnabled() { + return m_bXfaValidationsEnabled; } -void CPDFSDK_InterForm::XfaSetValidationsEnabled(FX_BOOL bEnabled) -{ - m_bXfaValidationsEnabled = bEnabled; +void CPDFSDK_InterForm::XfaSetValidationsEnabled(FX_BOOL bEnabled) { + m_bXfaValidationsEnabled = bEnabled; } #ifdef _WIN32 -CPDF_Stream* CPDFSDK_InterForm::LoadImageFromFile(const CFX_WideString& sFile) -{ - ASSERT(m_pDocument != NULL); - CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc(); - ASSERT(pDocument != NULL); - - CPDF_Stream* pRetStream = NULL; - - if (CFX_DIBitmap* pBmp = CFX_WindowsDIB::LoadFromFile(sFile.c_str())) - { - int nWidth = pBmp->GetWidth(); - int nHeight = pBmp->GetHeight(); - - CPDF_Image Image(pDocument); - Image.SetImage(pBmp, FALSE); - CPDF_Stream* pImageStream = Image.GetStream(); - if (pImageStream) - { - if (pImageStream->GetObjNum() == 0) - pDocument->AddIndirectObject(pImageStream); - - CPDF_Dictionary* pStreamDict = new CPDF_Dictionary(); - pStreamDict->SetAtName("Subtype", "Form"); - pStreamDict->SetAtName("Name", "IMG"); - CPDF_Array* pMatrix = new CPDF_Array(); - pStreamDict->SetAt("Matrix", pMatrix); - pMatrix->AddInteger(1); - pMatrix->AddInteger(0); - pMatrix->AddInteger(0); - pMatrix->AddInteger(1); - pMatrix->AddInteger(-nWidth / 2); - pMatrix->AddInteger(-nHeight / 2); - CPDF_Dictionary* pResource = new CPDF_Dictionary(); - pStreamDict->SetAt("Resources", pResource); - CPDF_Dictionary* pXObject = new CPDF_Dictionary(); - pResource->SetAt("XObject", pXObject); - pXObject->SetAtReference("Img", pDocument, pImageStream); - CPDF_Array* pProcSet = new CPDF_Array(); - pResource->SetAt("ProcSet", pProcSet); - pProcSet->AddName("PDF"); - pProcSet->AddName("ImageC"); - pStreamDict->SetAtName("Type", "XObject"); - CPDF_Array* pBBox = new CPDF_Array(); - pStreamDict->SetAt("BBox", pBBox); - pBBox->AddInteger(0); - pBBox->AddInteger(0); - pBBox->AddInteger(nWidth); - pBBox->AddInteger(nHeight); - pStreamDict->SetAtInteger("FormType", 1); - - pRetStream = new CPDF_Stream(NULL, 0, NULL); - CFX_ByteString csStream; - csStream.Format("q\n%d 0 0 %d 0 0 cm\n/Img Do\nQ", nWidth, nHeight); - pRetStream->InitStream((uint8_t*)csStream.c_str(), csStream.GetLength(), pStreamDict); - pDocument->AddIndirectObject(pRetStream); - } - - delete pBmp; - } - - return pRetStream; +CPDF_Stream* CPDFSDK_InterForm::LoadImageFromFile(const CFX_WideString& sFile) { + ASSERT(m_pDocument != NULL); + CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc(); + ASSERT(pDocument != NULL); + + CPDF_Stream* pRetStream = NULL; + + if (CFX_DIBitmap* pBmp = CFX_WindowsDIB::LoadFromFile(sFile.c_str())) { + int nWidth = pBmp->GetWidth(); + int nHeight = pBmp->GetHeight(); + + CPDF_Image Image(pDocument); + Image.SetImage(pBmp, FALSE); + CPDF_Stream* pImageStream = Image.GetStream(); + if (pImageStream) { + if (pImageStream->GetObjNum() == 0) + pDocument->AddIndirectObject(pImageStream); + + CPDF_Dictionary* pStreamDict = new CPDF_Dictionary(); + pStreamDict->SetAtName("Subtype", "Form"); + pStreamDict->SetAtName("Name", "IMG"); + CPDF_Array* pMatrix = new CPDF_Array(); + pStreamDict->SetAt("Matrix", pMatrix); + pMatrix->AddInteger(1); + pMatrix->AddInteger(0); + pMatrix->AddInteger(0); + pMatrix->AddInteger(1); + pMatrix->AddInteger(-nWidth / 2); + pMatrix->AddInteger(-nHeight / 2); + CPDF_Dictionary* pResource = new CPDF_Dictionary(); + pStreamDict->SetAt("Resources", pResource); + CPDF_Dictionary* pXObject = new CPDF_Dictionary(); + pResource->SetAt("XObject", pXObject); + pXObject->SetAtReference("Img", pDocument, pImageStream); + CPDF_Array* pProcSet = new CPDF_Array(); + pResource->SetAt("ProcSet", pProcSet); + pProcSet->AddName("PDF"); + pProcSet->AddName("ImageC"); + pStreamDict->SetAtName("Type", "XObject"); + CPDF_Array* pBBox = new CPDF_Array(); + pStreamDict->SetAt("BBox", pBBox); + pBBox->AddInteger(0); + pBBox->AddInteger(0); + pBBox->AddInteger(nWidth); + pBBox->AddInteger(nHeight); + pStreamDict->SetAtInteger("FormType", 1); + + pRetStream = new CPDF_Stream(NULL, 0, NULL); + CFX_ByteString csStream; + csStream.Format("q\n%d 0 0 %d 0 0 cm\n/Img Do\nQ", nWidth, nHeight); + pRetStream->InitStream((uint8_t*)csStream.c_str(), csStream.GetLength(), + pStreamDict); + pDocument->AddIndirectObject(pRetStream); + } + + delete pBmp; + } + + return pRetStream; } #endif -void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) -{ - ASSERT(m_pDocument != NULL); - CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); - ASSERT(pEnv); - if(!pEnv->IsJSInitiated()) - return; +void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) { + ASSERT(m_pDocument != NULL); + CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); + ASSERT(pEnv); + if (!pEnv->IsJSInitiated()) + return; + + if (m_bBusy) + return; + + m_bBusy = TRUE; + + if (IsCalculateEnabled()) { + IFXJS_Runtime* pRuntime = m_pDocument->GetJsRuntime(); + ASSERT(pRuntime != NULL); - if (m_bBusy) return; + pRuntime->SetReaderDocument(m_pDocument); - m_bBusy = TRUE; + int nSize = m_pInterForm->CountFieldsInCalculationOrder(); + for (int i = 0; i < nSize; i++) { + if (CPDF_FormField* pField = + m_pInterForm->GetFieldInCalculationOrder(i)) { + // ASSERT(pField != NULL); + int nType = pField->GetFieldType(); + if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) { + CPDF_AAction aAction = pField->GetAdditionalAction(); + if (aAction && aAction.ActionExist(CPDF_AAction::Calculate)) { + CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate); + if (action) { + CFX_WideString csJS = action.GetJavaScript(); + if (!csJS.IsEmpty()) { + IFXJS_Context* pContext = pRuntime->NewContext(); + ASSERT(pContext != NULL); - if (IsCalculateEnabled()) - { - IFXJS_Runtime* pRuntime = m_pDocument->GetJsRuntime(); - ASSERT(pRuntime != NULL); + CFX_WideString sOldValue = pField->GetValue(); + CFX_WideString sValue = sOldValue; + FX_BOOL bRC = TRUE; + pContext->OnField_Calculate(pFormField, pField, sValue, bRC); - pRuntime->SetReaderDocument(m_pDocument); + CFX_WideString sInfo; + FX_BOOL bRet = pContext->RunScript(csJS, sInfo); + pRuntime->ReleaseContext(pContext); - int nSize = m_pInterForm->CountFieldsInCalculationOrder(); - for (int i=0; iGetFieldInCalculationOrder(i)) - { -// ASSERT(pField != NULL); - int nType = pField->GetFieldType(); - if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) - { - CPDF_AAction aAction = pField->GetAdditionalAction(); - if (aAction && aAction.ActionExist(CPDF_AAction::Calculate)) - { - CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate); - if (action) - { - CFX_WideString csJS = action.GetJavaScript(); - if (!csJS.IsEmpty()) - { - IFXJS_Context* pContext = pRuntime->NewContext(); - ASSERT(pContext != NULL); - - CFX_WideString sOldValue = pField->GetValue(); - CFX_WideString sValue = sOldValue; - FX_BOOL bRC = TRUE; - pContext->OnField_Calculate(pFormField, pField, sValue, bRC); - - CFX_WideString sInfo; - FX_BOOL bRet = pContext->RunScript(csJS, sInfo); - pRuntime->ReleaseContext(pContext); - - if (bRet) - { - if (bRC) - { - if (sValue.Compare(sOldValue) != 0) - pField->SetValue(sValue, TRUE); - } - } - } - } - } + if (bRet) { + if (bRC) { + if (sValue.Compare(sOldValue) != 0) + pField->SetValue(sValue, TRUE); + } } + } } + } } - - + } } + } - m_bBusy = FALSE; + m_bBusy = FALSE; } -CFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField, FX_BOOL& bFormated) -{ - ASSERT(m_pDocument != NULL); - ASSERT(pFormField != NULL); +CFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField, + FX_BOOL& bFormated) { + ASSERT(m_pDocument != NULL); + ASSERT(pFormField != NULL); - CFX_WideString sValue = pFormField->GetValue(); - CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); - ASSERT(pEnv); - if(!pEnv->IsJSInitiated()) - { - bFormated = FALSE; - return sValue; - } + CFX_WideString sValue = pFormField->GetValue(); + CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); + ASSERT(pEnv); + if (!pEnv->IsJSInitiated()) { + bFormated = FALSE; + return sValue; + } - IFXJS_Runtime* pRuntime = m_pDocument->GetJsRuntime(); - ASSERT(pRuntime != NULL); + IFXJS_Runtime* pRuntime = m_pDocument->GetJsRuntime(); + ASSERT(pRuntime != NULL); - pRuntime->SetReaderDocument(m_pDocument); + pRuntime->SetReaderDocument(m_pDocument); - if (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX) - { - if (pFormField->CountSelectedItems() > 0) - { - int index = pFormField->GetSelectedIndex(0); - if (index >= 0) - sValue = pFormField->GetOptionLabel(index); - } + if (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX) { + if (pFormField->CountSelectedItems() > 0) { + int index = pFormField->GetSelectedIndex(0); + if (index >= 0) + sValue = pFormField->GetOptionLabel(index); } + } - bFormated = FALSE; + bFormated = FALSE; - CPDF_AAction aAction = pFormField->GetAdditionalAction(); - if (aAction != NULL && aAction.ActionExist(CPDF_AAction::Format)) - { - CPDF_Action action = aAction.GetAction(CPDF_AAction::Format); - if (action) - { - CFX_WideString script = action.GetJavaScript(); - if (!script.IsEmpty()) - { - CFX_WideString Value = sValue; + CPDF_AAction aAction = pFormField->GetAdditionalAction(); + if (aAction != NULL && aAction.ActionExist(CPDF_AAction::Format)) { + CPDF_Action action = aAction.GetAction(CPDF_AAction::Format); + if (action) { + CFX_WideString script = action.GetJavaScript(); + if (!script.IsEmpty()) { + CFX_WideString Value = sValue; - IFXJS_Context* pContext = pRuntime->NewContext(); - ASSERT(pContext != NULL); + IFXJS_Context* pContext = pRuntime->NewContext(); + ASSERT(pContext != NULL); - pContext->OnField_Format(pFormField, Value, TRUE); + pContext->OnField_Format(pFormField, Value, TRUE); - CFX_WideString sInfo; - FX_BOOL bRet = pContext->RunScript(script, sInfo); - pRuntime->ReleaseContext(pContext); + CFX_WideString sInfo; + FX_BOOL bRet = pContext->RunScript(script, sInfo); + pRuntime->ReleaseContext(pContext); - if (bRet) - { - sValue = Value; - bFormated = TRUE; - } - } + if (bRet) { + sValue = Value; + bFormated = TRUE; } + } } + } - return sValue; + return sValue; } -void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField, const FX_WCHAR* sValue, FX_BOOL bValueChanged) -{ - ASSERT(pFormField != NULL); +void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField, + const FX_WCHAR* sValue, + FX_BOOL bValueChanged) { + ASSERT(pFormField != NULL); - for (int i=0,sz=pFormField->CountControls(); iGetControl(i); - ASSERT(pFormCtrl != NULL); + for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { + CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); + ASSERT(pFormCtrl != NULL); - ASSERT(m_pInterForm != NULL); - if(CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) - pWidget->ResetAppearance(sValue, bValueChanged); - } + ASSERT(m_pInterForm != NULL); + if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) + pWidget->ResetAppearance(sValue, bValueChanged); + } } -void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) -{ - ASSERT(pFormField != NULL); +void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) { + ASSERT(pFormField != NULL); - for (int i=0,sz=pFormField->CountControls(); iGetControl(i); - ASSERT(pFormCtrl != NULL); + for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { + CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); + ASSERT(pFormCtrl != NULL); - if(CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) - { - CPDFDoc_Environment * pEnv = m_pDocument->GetEnv(); - CFFL_IFormFiller* pIFormFiller = pEnv->GetIFormFiller(); + if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) { + CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); + CFFL_IFormFiller* pIFormFiller = pEnv->GetIFormFiller(); - CPDFXFA_Page * pPage = pWidget->GetPDFXFAPage(); - CPDFSDK_PageView * pPageView = m_pDocument->GetPageView(pPage,FALSE); + CPDFXFA_Page* pPage = pWidget->GetPDFXFAPage(); + CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage, FALSE); - FX_RECT rcBBox = pIFormFiller->GetViewBBox(pPageView, pWidget); + FX_RECT rcBBox = pIFormFiller->GetViewBBox(pPageView, pWidget); - pEnv->FFI_Invalidate(pPage,rcBBox.left, rcBBox.top, rcBBox.right, rcBBox.bottom); - } + pEnv->FFI_Invalidate(pPage, rcBBox.left, rcBBox.top, rcBBox.right, + rcBBox.bottom); } + } } -void CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC) -{ - ASSERT(pFormField != NULL); +void CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField, + CFX_WideString& csValue, + FX_BOOL& bRC) { + ASSERT(pFormField != NULL); - CPDF_AAction aAction = pFormField->GetAdditionalAction(); - if (aAction != NULL && aAction.ActionExist(CPDF_AAction::KeyStroke)) - { - CPDF_Action action = aAction.GetAction(CPDF_AAction::KeyStroke); - if (action) - { - ASSERT(m_pDocument != NULL); - CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); - ASSERT(pEnv != NULL); + CPDF_AAction aAction = pFormField->GetAdditionalAction(); + if (aAction != NULL && aAction.ActionExist(CPDF_AAction::KeyStroke)) { + CPDF_Action action = aAction.GetAction(CPDF_AAction::KeyStroke); + if (action) { + ASSERT(m_pDocument != NULL); + CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); + ASSERT(pEnv != NULL); - CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander(); - ASSERT(pActionHandler != NULL); + CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander(); + ASSERT(pActionHandler != NULL); - PDFSDK_FieldAction fa; - fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0); - fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0); - fa.sValue = csValue; + PDFSDK_FieldAction fa; + fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0); + fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0); + fa.sValue = csValue; - pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::KeyStroke, - m_pDocument, pFormField, fa); - bRC = fa.bRC; - } + pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::KeyStroke, + m_pDocument, pFormField, fa); + bRC = fa.bRC; } + } } -void CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC) -{ - ASSERT(pFormField != NULL); - - CPDF_AAction aAction = pFormField->GetAdditionalAction(); - if (aAction != NULL && aAction.ActionExist(CPDF_AAction::Validate)) - { - CPDF_Action action = aAction.GetAction(CPDF_AAction::Validate); - if (action) - { - ASSERT(m_pDocument != NULL); - CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); - ASSERT(pEnv != NULL); +void CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField, + CFX_WideString& csValue, + FX_BOOL& bRC) { + ASSERT(pFormField != NULL); - CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander(); - ASSERT(pActionHandler != NULL); + CPDF_AAction aAction = pFormField->GetAdditionalAction(); + if (aAction != NULL && aAction.ActionExist(CPDF_AAction::Validate)) { + CPDF_Action action = aAction.GetAction(CPDF_AAction::Validate); + if (action) { + ASSERT(m_pDocument != NULL); + CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); + ASSERT(pEnv != NULL); - PDFSDK_FieldAction fa; - fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0); - fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0); - fa.sValue = csValue; + CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander(); + ASSERT(pActionHandler != NULL); - pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::Validate, m_pDocument, pFormField, fa); - bRC = fa.bRC; + PDFSDK_FieldAction fa; + fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0); + fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0); + fa.sValue = csValue; - } + pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::Validate, + m_pDocument, pFormField, fa); + bRC = fa.bRC; } + } } /* ----------------------------- action ----------------------------- */ -FX_BOOL CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action) -{ - ASSERT(action); - - CPDF_ActionFields af = action.GetWidgets(); - CFX_PtrArray fieldObjects; - af.GetAllFields(fieldObjects); - CFX_PtrArray widgetArray; - CFX_PtrArray fields; - GetFieldFromObjects(fieldObjects, fields); - - FX_BOOL bHide = action.GetHideStatus(); - - FX_BOOL bChanged = FALSE; +FX_BOOL CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action) { + ASSERT(action); - for (int i=0, sz=fields.GetSize(); iCountControls(); jGetControl(j); - ASSERT(pControl != NULL); - - if (CPDFSDK_Widget* pWidget = GetWidget(pControl)) - { - int nFlags = pWidget->GetFlags(); - if (bHide) - { - nFlags &= (~ANNOTFLAG_INVISIBLE); - nFlags &= (~ANNOTFLAG_NOVIEW); - nFlags |= (ANNOTFLAG_HIDDEN); - } - else - { - nFlags &= (~ANNOTFLAG_INVISIBLE); - nFlags &= (~ANNOTFLAG_HIDDEN); - nFlags &= (~ANNOTFLAG_NOVIEW); - } - pWidget->SetFlags(nFlags); - - CPDFSDK_PageView* pPageView = pWidget->GetPageView(); - ASSERT(pPageView != NULL); + FX_BOOL bChanged = FALSE; - pPageView->UpdateView(pWidget); + for (int i = 0, sz = fields.GetSize(); i < sz; i++) { + CPDF_FormField* pField = (CPDF_FormField*)fields[i]; + ASSERT(pField != NULL); - bChanged = TRUE; - } + for (int j = 0, jsz = pField->CountControls(); j < jsz; j++) { + CPDF_FormControl* pControl = pField->GetControl(j); + ASSERT(pControl != NULL); + + if (CPDFSDK_Widget* pWidget = GetWidget(pControl)) { + int nFlags = pWidget->GetFlags(); + if (bHide) { + nFlags &= (~ANNOTFLAG_INVISIBLE); + nFlags &= (~ANNOTFLAG_NOVIEW); + nFlags |= (ANNOTFLAG_HIDDEN); + } else { + nFlags &= (~ANNOTFLAG_INVISIBLE); + nFlags &= (~ANNOTFLAG_HIDDEN); + nFlags &= (~ANNOTFLAG_NOVIEW); } - } - - return bChanged; -} + pWidget->SetFlags(nFlags); -FX_BOOL CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action) -{ - ASSERT(m_pInterForm != NULL); - CFX_WideString sDestination = action.GetFilePath(); - if (sDestination.IsEmpty()) - return FALSE; + CPDFSDK_PageView* pPageView = pWidget->GetPageView(); + ASSERT(pPageView != NULL); - CPDF_Dictionary* pActionDict = action.GetDict(); - if (pActionDict->KeyExist("Fields")) - { - CPDF_ActionFields af = action.GetWidgets(); - FX_DWORD dwFlags = action.GetFlags(); - CFX_PtrArray fieldObjects; - af.GetAllFields(fieldObjects); - - CFX_PtrArray fields; - GetFieldFromObjects(fieldObjects, fields); - if (fields.GetSize() != 0) - { - FX_BOOL bIncludeOrExclude = !(dwFlags & 0x01); - if (m_pInterForm->CheckRequiredFields(&fields, bIncludeOrExclude)) - return FALSE; + pPageView->UpdateView(pWidget); - return SubmitFields(sDestination, fields, bIncludeOrExclude, FALSE); - } + bChanged = TRUE; + } } - if (m_pInterForm->CheckRequiredFields()) - return FALSE; + } - return SubmitForm(sDestination, FALSE); + return bChanged; } -FX_BOOL CPDFSDK_InterForm::SubmitFields(const CFX_WideString& csDestination, const CFX_PtrArray& fields, - FX_BOOL bIncludeOrExclude, FX_BOOL bUrlEncoded) -{ - CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); - ASSERT(pEnv != NULL); +FX_BOOL CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action) { + ASSERT(m_pInterForm != NULL); + CFX_WideString sDestination = action.GetFilePath(); + if (sDestination.IsEmpty()) + return FALSE; - CFX_ByteTextBuf textBuf; - ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf); + CPDF_Dictionary* pActionDict = action.GetDict(); + if (pActionDict->KeyExist("Fields")) { + CPDF_ActionFields af = action.GetWidgets(); + FX_DWORD dwFlags = action.GetFlags(); + CFX_PtrArray fieldObjects; + af.GetAllFields(fieldObjects); - uint8_t* pBuffer = textBuf.GetBuffer(); - FX_STRSIZE nBufSize = textBuf.GetLength(); + CFX_PtrArray fields; + GetFieldFromObjects(fieldObjects, fields); + if (fields.GetSize() != 0) { + FX_BOOL bIncludeOrExclude = !(dwFlags & 0x01); + if (m_pInterForm->CheckRequiredFields(&fields, bIncludeOrExclude)) + return FALSE; - if (bUrlEncoded) - { - if(!FDFToURLEncodedData(pBuffer, nBufSize)) - return FALSE; + return SubmitFields(sDestination, fields, bIncludeOrExclude, FALSE); } + } + if (m_pInterForm->CheckRequiredFields()) + return FALSE; - pEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str()); - - return TRUE; + return SubmitForm(sDestination, FALSE); } -void CPDFSDK_InterForm::DoFDFBuffer(CFX_ByteString sBuffer) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL CPDFSDK_InterForm::SubmitFields(const CFX_WideString& csDestination, + const CFX_PtrArray& fields, + FX_BOOL bIncludeOrExclude, + FX_BOOL bUrlEncoded) { + CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); + ASSERT(pEnv != NULL); - if (CFDF_Document *pFDFDocument = CFDF_Document::ParseMemory((const unsigned char *)sBuffer.GetBuffer(sBuffer.GetLength()), sBuffer.GetLength())) - { - CPDF_Dictionary* pRootDic = pFDFDocument->GetRoot(); - if(pRootDic) - { - CPDF_Dictionary * pFDFDict=pRootDic->GetDict("FDF"); - if(pFDFDict) - { - CPDF_Dictionary * pJSDict = pFDFDict->GetDict("JavaScript"); - if(pJSDict) - { - CFX_WideString csJS; - - CPDF_Object* pJS = pJSDict->GetElementValue("Before"); - if (pJS != NULL) - { - int iType = pJS->GetType(); - if (iType == PDFOBJ_STRING) - csJS = pJSDict->GetUnicodeText("Before"); - else if (iType == PDFOBJ_STREAM) - csJS = pJS->GetUnicodeText(); - } + CFX_ByteTextBuf textBuf; + ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf); - } - } - } - delete pFDFDocument; - } + uint8_t* pBuffer = textBuf.GetBuffer(); + FX_STRSIZE nBufSize = textBuf.GetLength(); - sBuffer.ReleaseBuffer(); -} + if (bUrlEncoded) { + if (!FDFToURLEncodedData(pBuffer, nBufSize)) + return FALSE; + } -FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile, CFX_WideString csTxtFile) -{ - return TRUE; -} + pEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str()); -FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf, FX_STRSIZE& nBufSize) -{ - CFDF_Document* pFDF = CFDF_Document::ParseMemory(pBuf, nBufSize); - if (pFDF) - { - CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDict("FDF"); - if (pMainDict == NULL) return FALSE; + return TRUE; +} - // Get fields - CPDF_Array* pFields = pMainDict->GetArray("Fields"); - if (pFields == NULL) return FALSE; +void CPDFSDK_InterForm::DoFDFBuffer(CFX_ByteString sBuffer) { + ASSERT(m_pDocument != NULL); - CFX_ByteTextBuf fdfEncodedData; + if (CFDF_Document* pFDFDocument = CFDF_Document::ParseMemory( + (const unsigned char*)sBuffer.GetBuffer(sBuffer.GetLength()), + sBuffer.GetLength())) { + CPDF_Dictionary* pRootDic = pFDFDocument->GetRoot(); + if (pRootDic) { + CPDF_Dictionary* pFDFDict = pRootDic->GetDict("FDF"); + if (pFDFDict) { + CPDF_Dictionary* pJSDict = pFDFDict->GetDict("JavaScript"); + if (pJSDict) { + CFX_WideString csJS; - for (FX_DWORD i = 0; i < pFields->GetCount(); i ++) - { - CPDF_Dictionary* pField = pFields->GetDict(i); - if (pField == NULL) continue; - CFX_WideString name; - name = pField->GetUnicodeText("T"); - CFX_ByteString name_b = CFX_ByteString::FromUnicode(name); - CFX_ByteString csBValue = pField->GetString("V"); - CFX_WideString csWValue = PDF_DecodeText(csBValue); - CFX_ByteString csValue_b = CFX_ByteString::FromUnicode(csWValue); - - fdfEncodedData = fdfEncodedData<GetCount()-1) - fdfEncodedData = fdfEncodedData<<"&"; + CPDF_Object* pJS = pJSDict->GetElementValue("Before"); + if (pJS != NULL) { + int iType = pJS->GetType(); + if (iType == PDFOBJ_STRING) + csJS = pJSDict->GetUnicodeText("Before"); + else if (iType == PDFOBJ_STREAM) + csJS = pJS->GetUnicodeText(); + } } - - nBufSize = fdfEncodedData.GetLength(); - pBuf = FX_Alloc(uint8_t, nBufSize); - FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize); + } } - return TRUE; -} - -FX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields,FX_BOOL bIncludeOrExclude, CFX_ByteTextBuf& textBuf) -{ - ASSERT(m_pDocument != NULL); - ASSERT(m_pInterForm != NULL); - - CFDF_Document* pFDF = m_pInterForm->ExportToFDF(m_pDocument->GetPath(),(CFX_PtrArray&)fields, bIncludeOrExclude); - if (!pFDF) return FALSE; - FX_BOOL bRet = pFDF->WriteBuf(textBuf); // = FALSE;// - delete pFDF; + delete pFDFDocument; + } + + sBuffer.ReleaseBuffer(); +} + +FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile, + CFX_WideString csTxtFile) { + return TRUE; +} + +FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf, + FX_STRSIZE& nBufSize) { + CFDF_Document* pFDF = CFDF_Document::ParseMemory(pBuf, nBufSize); + if (pFDF) { + CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDict("FDF"); + if (pMainDict == NULL) + return FALSE; + + // Get fields + CPDF_Array* pFields = pMainDict->GetArray("Fields"); + if (pFields == NULL) + return FALSE; + + CFX_ByteTextBuf fdfEncodedData; + + for (FX_DWORD i = 0; i < pFields->GetCount(); i++) { + CPDF_Dictionary* pField = pFields->GetDict(i); + if (pField == NULL) + continue; + CFX_WideString name; + name = pField->GetUnicodeText("T"); + CFX_ByteString name_b = CFX_ByteString::FromUnicode(name); + CFX_ByteString csBValue = pField->GetString("V"); + CFX_WideString csWValue = PDF_DecodeText(csBValue); + CFX_ByteString csValue_b = CFX_ByteString::FromUnicode(csWValue); + + fdfEncodedData = fdfEncodedData << name_b.GetBuffer(name_b.GetLength()); + name_b.ReleaseBuffer(); + fdfEncodedData = fdfEncodedData << "="; + fdfEncodedData = fdfEncodedData + << csValue_b.GetBuffer(csValue_b.GetLength()); + csValue_b.ReleaseBuffer(); + if (i != pFields->GetCount() - 1) + fdfEncodedData = fdfEncodedData << "&"; + } + + nBufSize = fdfEncodedData.GetLength(); + pBuf = FX_Alloc(uint8_t, nBufSize); + FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize); + } + return TRUE; +} + +FX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields, + FX_BOOL bIncludeOrExclude, + CFX_ByteTextBuf& textBuf) { + ASSERT(m_pDocument != NULL); + ASSERT(m_pInterForm != NULL); + + CFDF_Document* pFDF = m_pInterForm->ExportToFDF( + m_pDocument->GetPath(), (CFX_PtrArray&)fields, bIncludeOrExclude); + if (!pFDF) + return FALSE; + FX_BOOL bRet = pFDF->WriteBuf(textBuf); // = FALSE;// + delete pFDF; - return bRet; + return bRet; } -void CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField, FX_BOOL bSynchronizeElse) -{ - ASSERT(pFormField != NULL); +void CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField, + FX_BOOL bSynchronizeElse) { + ASSERT(pFormField != NULL); - int x = 0; - if (m_FieldSynchronizeMap.Lookup(pFormField, x)) - return; + int x = 0; + if (m_FieldSynchronizeMap.Lookup(pFormField, x)) + return; - for (int i=0,sz=pFormField->CountControls(); iGetControl(i); - ASSERT(pFormCtrl != NULL); + for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { + CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); + ASSERT(pFormCtrl != NULL); - ASSERT(m_pInterForm != NULL); - if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) - { - pWidget->Synchronize(bSynchronizeElse); - } - } + ASSERT(m_pInterForm != NULL); + if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) { + pWidget->Synchronize(bSynchronizeElse); + } + } } -CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName(const CFX_WideString& sFileExt) -{ - CFX_WideString sFileName; - return L""; +CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName( + const CFX_WideString& sFileExt) { + CFX_WideString sFileName; + return L""; } -FX_BOOL CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded) -{ - if (sDestination.IsEmpty()) return FALSE; +FX_BOOL CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination, + FX_BOOL bUrlEncoded) { + if (sDestination.IsEmpty()) + return FALSE; - CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); - ASSERT(pEnv != NULL); + CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); + ASSERT(pEnv != NULL); - if(NULL == m_pDocument) return FALSE; - CFX_WideString wsPDFFilePath = m_pDocument->GetPath(); + if (NULL == m_pDocument) + return FALSE; + CFX_WideString wsPDFFilePath = m_pDocument->GetPath(); - if(NULL == m_pInterForm) return FALSE; - CFDF_Document* pFDFDoc = m_pInterForm->ExportToFDF(wsPDFFilePath); - if (NULL == pFDFDoc) return FALSE; + if (NULL == m_pInterForm) + return FALSE; + CFDF_Document* pFDFDoc = m_pInterForm->ExportToFDF(wsPDFFilePath); + if (NULL == pFDFDoc) + return FALSE; - CFX_ByteTextBuf FdfBuffer; - FX_BOOL bRet = pFDFDoc->WriteBuf(FdfBuffer); - delete pFDFDoc; - if (!bRet) return FALSE; + CFX_ByteTextBuf FdfBuffer; + FX_BOOL bRet = pFDFDoc->WriteBuf(FdfBuffer); + delete pFDFDoc; + if (!bRet) + return FALSE; - uint8_t* pBuffer = FdfBuffer.GetBuffer(); - FX_STRSIZE nBufSize = FdfBuffer.GetLength(); + uint8_t* pBuffer = FdfBuffer.GetBuffer(); + FX_STRSIZE nBufSize = FdfBuffer.GetLength(); - if (bUrlEncoded) - { - if(!FDFToURLEncodedData(pBuffer, nBufSize)) - return FALSE; - } + if (bUrlEncoded) { + if (!FDFToURLEncodedData(pBuffer, nBufSize)) + return FALSE; + } - pEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str()); + pEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str()); - if (bUrlEncoded && pBuffer) - { - FX_Free(pBuffer); - pBuffer = NULL; - } + if (bUrlEncoded && pBuffer) { + FX_Free(pBuffer); + pBuffer = NULL; + } - return TRUE; + return TRUE; } -FX_BOOL CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) -{ +FX_BOOL CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) { + ASSERT(m_pInterForm != NULL); + ASSERT(m_pDocument != NULL); - ASSERT(m_pInterForm != NULL); - ASSERT(m_pDocument != NULL); - - CFDF_Document* pFDF = m_pInterForm->ExportToFDF(m_pDocument->GetPath()); - if (!pFDF) return FALSE; + CFDF_Document* pFDF = m_pInterForm->ExportToFDF(m_pDocument->GetPath()); + if (!pFDF) + return FALSE; - FX_BOOL bRet = pFDF->WriteBuf(textBuf); - delete pFDF; + FX_BOOL bRet = pFDF->WriteBuf(textBuf); + delete pFDF; - return bRet; + return bRet; } +FX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) { + ASSERT(action); -FX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) -{ - ASSERT(action); - - CPDF_Dictionary* pActionDict = action.GetDict(); - if (pActionDict->KeyExist("Fields")) - { - CPDF_ActionFields af = action.GetWidgets(); - FX_DWORD dwFlags = action.GetFlags(); + CPDF_Dictionary* pActionDict = action.GetDict(); + if (pActionDict->KeyExist("Fields")) { + CPDF_ActionFields af = action.GetWidgets(); + FX_DWORD dwFlags = action.GetFlags(); - CFX_PtrArray fieldObjects; - af.GetAllFields(fieldObjects); - CFX_PtrArray fields; - GetFieldFromObjects(fieldObjects, fields); - return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), TRUE); - } + CFX_PtrArray fieldObjects; + af.GetAllFields(fieldObjects); + CFX_PtrArray fields; + GetFieldFromObjects(fieldObjects, fields); + return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), TRUE); + } - return m_pInterForm->ResetForm(TRUE); + return m_pInterForm->ResetForm(TRUE); } -FX_BOOL CPDFSDK_InterForm::DoAction_ImportData(const CPDF_Action& action) -{ - return FALSE; +FX_BOOL CPDFSDK_InterForm::DoAction_ImportData(const CPDF_Action& action) { + return FALSE; } -void CPDFSDK_InterForm::GetFieldFromObjects(const CFX_PtrArray& objects, CFX_PtrArray& fields) -{ - ASSERT(m_pInterForm != NULL); +void CPDFSDK_InterForm::GetFieldFromObjects(const CFX_PtrArray& objects, + CFX_PtrArray& fields) { + ASSERT(m_pInterForm != NULL); - int iCount = objects.GetSize(); - for (int i = 0; i < iCount; i ++) - { - CPDF_Object* pObject = (CPDF_Object*)objects[i]; - if (pObject == NULL) continue; + int iCount = objects.GetSize(); + for (int i = 0; i < iCount; i++) { + CPDF_Object* pObject = (CPDF_Object*)objects[i]; + if (pObject == NULL) + continue; - int iType = pObject->GetType(); - if (iType == PDFOBJ_STRING) - { - CFX_WideString csName = pObject->GetUnicodeText(); - CPDF_FormField* pField = m_pInterForm->GetField(0, csName); - if (pField != NULL) - fields.Add(pField); - } - else if (iType == PDFOBJ_DICTIONARY) - { - if (m_pInterForm->IsValidFormField(pObject)) - fields.Add(pObject); - } + int iType = pObject->GetType(); + if (iType == PDFOBJ_STRING) { + CFX_WideString csName = pObject->GetUnicodeText(); + CPDF_FormField* pField = m_pInterForm->GetField(0, csName); + if (pField != NULL) + fields.Add(pField); + } else if (iType == PDFOBJ_DICTIONARY) { + if (m_pInterForm->IsValidFormField(pObject)) + fields.Add(pObject); } + } } -/* ----------------------------- CPDF_FormNotify ----------------------------- */ +/* ----------------------------- CPDF_FormNotify ----------------------------- + */ -int CPDFSDK_InterForm::BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue) -{ - CPDF_FormField* pFormField = (CPDF_FormField*)pField; - int nType = pFormField->GetFieldType(); - if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) - { - FX_BOOL bRC = TRUE; - OnKeyStrokeCommit(pFormField, csValue, bRC); - if (bRC) - { - OnValidate(pFormField, csValue, bRC); - return bRC ? 1 : -1; - } - return -1; +int CPDFSDK_InterForm::BeforeValueChange(const CPDF_FormField* pField, + CFX_WideString& csValue) { + CPDF_FormField* pFormField = (CPDF_FormField*)pField; + int nType = pFormField->GetFieldType(); + if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) { + FX_BOOL bRC = TRUE; + OnKeyStrokeCommit(pFormField, csValue, bRC); + if (bRC) { + OnValidate(pFormField, csValue, bRC); + return bRC ? 1 : -1; } - return 0; + return -1; + } + return 0; } -int CPDFSDK_InterForm::AfterValueChange(const CPDF_FormField* pField) -{ - ASSERT(pField != NULL); +int CPDFSDK_InterForm::AfterValueChange(const CPDF_FormField* pField) { + ASSERT(pField != NULL); - CPDF_FormField* pFormField = (CPDF_FormField*)pField; + CPDF_FormField* pFormField = (CPDF_FormField*)pField; - SynchronizeField(pFormField, FALSE); + SynchronizeField(pFormField, FALSE); - int nType = pFormField->GetFieldType(); + int nType = pFormField->GetFieldType(); - if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) - { - OnCalculate(pFormField); - FX_BOOL bFormated = FALSE; - CFX_WideString sValue = OnFormat(pFormField, bFormated); - if (bFormated) - ResetFieldAppearance(pFormField, sValue.c_str(), TRUE); - else - ResetFieldAppearance(pFormField, NULL, TRUE); - UpdateField(pFormField); - } + if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) { + OnCalculate(pFormField); + FX_BOOL bFormated = FALSE; + CFX_WideString sValue = OnFormat(pFormField, bFormated); + if (bFormated) + ResetFieldAppearance(pFormField, sValue.c_str(), TRUE); + else + ResetFieldAppearance(pFormField, NULL, TRUE); + UpdateField(pFormField); + } - return 0; + return 0; } -int CPDFSDK_InterForm::BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue) -{ - CPDF_FormField* pFormField = (CPDF_FormField*)pField; - if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX) - return 0; +int CPDFSDK_InterForm::BeforeSelectionChange(const CPDF_FormField* pField, + CFX_WideString& csValue) { + CPDF_FormField* pFormField = (CPDF_FormField*)pField; + if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX) + return 0; - FX_BOOL bRC = TRUE; - OnKeyStrokeCommit(pFormField, csValue, bRC); - if (!bRC) - return -1; + FX_BOOL bRC = TRUE; + OnKeyStrokeCommit(pFormField, csValue, bRC); + if (!bRC) + return -1; - OnValidate(pFormField, csValue, bRC); - if (!bRC) - return -1; + OnValidate(pFormField, csValue, bRC); + if (!bRC) + return -1; - return 1; + return 1; } -int CPDFSDK_InterForm::AfterSelectionChange(const CPDF_FormField* pField) -{ - CPDF_FormField* pFormField = (CPDF_FormField*)pField; - if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX) - { - OnCalculate(pFormField); - ResetFieldAppearance(pFormField, NULL, TRUE); - UpdateField(pFormField); - } - return 0; +int CPDFSDK_InterForm::AfterSelectionChange(const CPDF_FormField* pField) { + CPDF_FormField* pFormField = (CPDF_FormField*)pField; + if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX) { + OnCalculate(pFormField); + ResetFieldAppearance(pFormField, NULL, TRUE); + UpdateField(pFormField); + } + return 0; } -int CPDFSDK_InterForm::AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray) -{ - CPDF_FormField* pFormField = (CPDF_FormField*)pField; - int nType = pFormField->GetFieldType(); - if (nType == FIELDTYPE_CHECKBOX || nType == FIELDTYPE_RADIOBUTTON) - { - OnCalculate(pFormField); - UpdateField(pFormField); - } - return 0; +int CPDFSDK_InterForm::AfterCheckedStatusChange( + const CPDF_FormField* pField, + const CFX_ByteArray& statusArray) { + CPDF_FormField* pFormField = (CPDF_FormField*)pField; + int nType = pFormField->GetFieldType(); + if (nType == FIELDTYPE_CHECKBOX || nType == FIELDTYPE_RADIOBUTTON) { + OnCalculate(pFormField); + UpdateField(pFormField); + } + return 0; } -int CPDFSDK_InterForm::BeforeFormReset(const CPDF_InterForm* pForm) -{ - return 0; +int CPDFSDK_InterForm::BeforeFormReset(const CPDF_InterForm* pForm) { + return 0; } -int CPDFSDK_InterForm::AfterFormReset(const CPDF_InterForm* pForm) -{ - OnCalculate(nullptr); - return 0; +int CPDFSDK_InterForm::AfterFormReset(const CPDF_InterForm* pForm) { + OnCalculate(nullptr); + return 0; } -int CPDFSDK_InterForm::BeforeFormImportData(const CPDF_InterForm* pForm) -{ - return 0; +int CPDFSDK_InterForm::BeforeFormImportData(const CPDF_InterForm* pForm) { + return 0; } -int CPDFSDK_InterForm::AfterFormImportData(const CPDF_InterForm* pForm) -{ - OnCalculate(nullptr); - return 0; +int CPDFSDK_InterForm::AfterFormImportData(const CPDF_InterForm* pForm) { + OnCalculate(nullptr); + return 0; +} + +FX_BOOL CPDFSDK_InterForm::IsNeedHighLight(int nFieldType) { + if (nFieldType < 1 || nFieldType > 7) + return FALSE; + return m_bNeedHightlight[nFieldType - 1]; +} + +void CPDFSDK_InterForm::RemoveAllHighLight() { + memset((void*)m_bNeedHightlight, 0, 7 * sizeof(FX_BOOL)); +} +void CPDFSDK_InterForm::SetHighlightColor(FX_COLORREF clr, int nFieldType) { + if (nFieldType < 0 || nFieldType > 7) + return; + switch (nFieldType) { + case 0: { + for (int i = 0; i < 7; i++) { + m_aHighlightColor[i] = clr; + m_bNeedHightlight[i] = TRUE; + } + break; + } + default: { + m_aHighlightColor[nFieldType - 1] = clr; + m_bNeedHightlight[nFieldType - 1] = TRUE; + break; + } + } } -FX_BOOL CPDFSDK_InterForm::IsNeedHighLight(int nFieldType) -{ - if(nFieldType <1 || nFieldType > 7) - return FALSE; - return m_bNeedHightlight[nFieldType-1]; -} - -void CPDFSDK_InterForm::RemoveAllHighLight() -{ - memset((void*)m_bNeedHightlight, 0, 7*sizeof(FX_BOOL)); -} -void CPDFSDK_InterForm::SetHighlightColor(FX_COLORREF clr, int nFieldType) -{ - if(nFieldType <0 || nFieldType > 7) return; - switch(nFieldType) - { - case 0: - { - for(int i=0; i<7; i++) - { - m_aHighlightColor[i] = clr; - m_bNeedHightlight[i] = TRUE; - } - break; - } - default: - { - m_aHighlightColor[nFieldType-1] = clr; - m_bNeedHightlight[nFieldType-1] = TRUE; - break; - } - } - -} - -FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) -{ - if (nFieldType < 0 || nFieldType > 7) - return FXSYS_RGB(255,255,255); - if (nFieldType == 0) - return m_aHighlightColor[0]; - return m_aHighlightColor[nFieldType-1]; +FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) { + if (nFieldType < 0 || nFieldType > 7) + return FXSYS_RGB(255, 255, 255); + if (nFieldType == 0) + return m_aHighlightColor[0]; + return m_aHighlightColor[nFieldType - 1]; } /* ------------------------- CBA_AnnotIterator ------------------------- */ -CBA_AnnotIterator::CBA_AnnotIterator(CPDFSDK_PageView* pPageView, const CFX_ByteString& sType, const CFX_ByteString& sSubType) - :m_pPageView(pPageView), - m_sType(sType), - m_sSubType(sSubType), - m_nTabs(BAI_STRUCTURE) -{ - ASSERT(m_pPageView != NULL); +CBA_AnnotIterator::CBA_AnnotIterator(CPDFSDK_PageView* pPageView, + const CFX_ByteString& sType, + const CFX_ByteString& sSubType) + : m_pPageView(pPageView), + m_sType(sType), + m_sSubType(sSubType), + m_nTabs(BAI_STRUCTURE) { + ASSERT(m_pPageView != NULL); - CPDF_Page* pPDFPage = m_pPageView->GetPDFPage(); - ASSERT(pPDFPage != NULL); - ASSERT(pPDFPage->m_pFormDict != NULL); + CPDF_Page* pPDFPage = m_pPageView->GetPDFPage(); + ASSERT(pPDFPage != NULL); + ASSERT(pPDFPage->m_pFormDict != NULL); - CFX_ByteString sTabs = pPDFPage->m_pFormDict->GetString("Tabs"); + CFX_ByteString sTabs = pPDFPage->m_pFormDict->GetString("Tabs"); - if (sTabs == "R") - { - m_nTabs = BAI_ROW; - } - else if (sTabs == "C") - { - m_nTabs = BAI_COLUMN; - } - else - { - m_nTabs = BAI_STRUCTURE; - } + if (sTabs == "R") { + m_nTabs = BAI_ROW; + } else if (sTabs == "C") { + m_nTabs = BAI_COLUMN; + } else { + m_nTabs = BAI_STRUCTURE; + } - GenerateResults(); + GenerateResults(); } -CBA_AnnotIterator::~CBA_AnnotIterator() -{ - m_Annots.RemoveAll(); +CBA_AnnotIterator::~CBA_AnnotIterator() { + m_Annots.RemoveAll(); } -CPDFSDK_Annot* CBA_AnnotIterator::GetFirstAnnot() -{ - if (m_Annots.GetSize() > 0) - return m_Annots[0]; +CPDFSDK_Annot* CBA_AnnotIterator::GetFirstAnnot() { + if (m_Annots.GetSize() > 0) + return m_Annots[0]; - return NULL; + return NULL; } -CPDFSDK_Annot* CBA_AnnotIterator::GetLastAnnot() -{ - if (m_Annots.GetSize() > 0) - return m_Annots[m_Annots.GetSize() - 1]; +CPDFSDK_Annot* CBA_AnnotIterator::GetLastAnnot() { + if (m_Annots.GetSize() > 0) + return m_Annots[m_Annots.GetSize() - 1]; - return NULL; + return NULL; } -CPDFSDK_Annot* CBA_AnnotIterator::GetNextAnnot(CPDFSDK_Annot* pAnnot) -{ - for (int i = 0, sz = m_Annots.GetSize(); i < sz; ++i) { - if (m_Annots[i] == pAnnot) - return (i + 1 < sz) ? m_Annots[i+1] : m_Annots[0]; - } - return NULL; +CPDFSDK_Annot* CBA_AnnotIterator::GetNextAnnot(CPDFSDK_Annot* pAnnot) { + for (int i = 0, sz = m_Annots.GetSize(); i < sz; ++i) { + if (m_Annots[i] == pAnnot) + return (i + 1 < sz) ? m_Annots[i + 1] : m_Annots[0]; + } + return NULL; } -CPDFSDK_Annot* CBA_AnnotIterator::GetPrevAnnot(CPDFSDK_Annot* pAnnot) -{ - for (int i = 0, sz = m_Annots.GetSize(); i < sz; ++i) { - if (m_Annots[i] == pAnnot) - return (i - 1 >= 0) ? m_Annots[i-1] : m_Annots[sz-1]; - } - return NULL; +CPDFSDK_Annot* CBA_AnnotIterator::GetPrevAnnot(CPDFSDK_Annot* pAnnot) { + for (int i = 0, sz = m_Annots.GetSize(); i < sz; ++i) { + if (m_Annots[i] == pAnnot) + return (i - 1 >= 0) ? m_Annots[i - 1] : m_Annots[sz - 1]; + } + return NULL; } -int CBA_AnnotIterator::CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) -{ - ASSERT(p1); - ASSERT(p2); +int CBA_AnnotIterator::CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) { + ASSERT(p1); + ASSERT(p2); - CPDF_Rect rcAnnot1 = GetAnnotRect(p1); - CPDF_Rect rcAnnot2 = GetAnnotRect(p2); + CPDF_Rect rcAnnot1 = GetAnnotRect(p1); + CPDF_Rect rcAnnot2 = GetAnnotRect(p2); - if (rcAnnot1.left < rcAnnot2.left) - return -1; - if (rcAnnot1.left > rcAnnot2.left) - return 1; - return 0; + if (rcAnnot1.left < rcAnnot2.left) + return -1; + if (rcAnnot1.left > rcAnnot2.left) + return 1; + return 0; } +int CBA_AnnotIterator::CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) { + ASSERT(p1 != NULL); + ASSERT(p2 != NULL); -int CBA_AnnotIterator::CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) -{ - ASSERT(p1 != NULL); - ASSERT(p2 != NULL); - - CPDF_Rect rcAnnot1 = GetAnnotRect(p1); - CPDF_Rect rcAnnot2 = GetAnnotRect(p2); + CPDF_Rect rcAnnot1 = GetAnnotRect(p1); + CPDF_Rect rcAnnot2 = GetAnnotRect(p2); - if (rcAnnot1.top < rcAnnot2.top) - return -1; - if (rcAnnot1.top > rcAnnot2.top) - return 1; - return 0; + if (rcAnnot1.top < rcAnnot2.top) + return -1; + if (rcAnnot1.top > rcAnnot2.top) + return 1; + return 0; } -void CBA_AnnotIterator::GenerateResults() -{ - ASSERT(m_pPageView != NULL); +void CBA_AnnotIterator::GenerateResults() { + ASSERT(m_pPageView != NULL); - switch (m_nTabs) - { - case BAI_STRUCTURE: - { - for (int i=0,sz=m_pPageView->CountAnnots(); iGetAnnot(i); - ASSERT(pAnnot != NULL); - - if (pAnnot->GetType() == m_sType - && pAnnot->GetSubType() == m_sSubType) - m_Annots.Add(pAnnot); - } + switch (m_nTabs) { + case BAI_STRUCTURE: { + for (int i = 0, sz = m_pPageView->CountAnnots(); i < sz; i++) { + CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i); + ASSERT(pAnnot != NULL); + + if (pAnnot->GetType() == m_sType && pAnnot->GetSubType() == m_sSubType) + m_Annots.Add(pAnnot); + } + } break; + case BAI_ROW: { + CPDFSDK_SortAnnots sa; + + { + for (int i = 0, sz = m_pPageView->CountAnnots(); i < sz; i++) { + CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i); + ASSERT(pAnnot != NULL); + + if (pAnnot->GetType() == m_sType && + pAnnot->GetSubType() == m_sSubType) + sa.Add(pAnnot); } - break; - case BAI_ROW: - { - CPDFSDK_SortAnnots sa; + } - { + if (sa.GetSize() > 0) { + sa.Sort(CBA_AnnotIterator::CompareByLeft); + } - for (int i=0,sz=m_pPageView->CountAnnots(); iGetAnnot(i); - ASSERT(pAnnot != NULL); + while (sa.GetSize() > 0) { + int nLeftTopIndex = -1; - if (pAnnot->GetType() == m_sType - && pAnnot->GetSubType() == m_sSubType) - sa.Add(pAnnot); - } - } + { + FX_FLOAT fTop = 0.0f; - if (sa.GetSize() > 0) - { - sa.Sort(CBA_AnnotIterator::CompareByLeft); - } + for (int i = sa.GetSize() - 1; i >= 0; i--) { + CPDFSDK_Annot* pAnnot = sa.GetAt(i); + ASSERT(pAnnot != NULL); - while (sa.GetSize() > 0) - { - int nLeftTopIndex = -1; + CPDF_Rect rcAnnot = GetAnnotRect(pAnnot); - { - FX_FLOAT fTop = 0.0f; + if (rcAnnot.top > fTop) { + nLeftTopIndex = i; + fTop = rcAnnot.top; + } + } + } - for (int i=sa.GetSize()-1; i>=0; i--) - { - CPDFSDK_Annot* pAnnot = sa.GetAt(i); - ASSERT(pAnnot != NULL); + if (nLeftTopIndex >= 0) { + CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex); + ASSERT(pLeftTopAnnot != NULL); - CPDF_Rect rcAnnot = GetAnnotRect(pAnnot); + CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot); - if (rcAnnot.top > fTop) - { - nLeftTopIndex = i; - fTop = rcAnnot.top; - } - } - } + m_Annots.Add(pLeftTopAnnot); + sa.RemoveAt(nLeftTopIndex); - if (nLeftTopIndex >= 0) - { - CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex); - ASSERT(pLeftTopAnnot != NULL); + CFX_ArrayTemplate aSelect; - CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot); + { + for (int i = 0, sz = sa.GetSize(); i < sz; i++) { + CPDFSDK_Annot* pAnnot = sa.GetAt(i); + ASSERT(pAnnot != NULL); - m_Annots.Add(pLeftTopAnnot); - sa.RemoveAt(nLeftTopIndex); + CPDF_Rect rcAnnot = GetAnnotRect(pAnnot); - CFX_ArrayTemplate aSelect; + FX_FLOAT fCenterY = (rcAnnot.top + rcAnnot.bottom) / 2.0f; - { - for (int i=0,sz=sa.GetSize(); i rcLeftTop.bottom && fCenterY < rcLeftTop.top) + aSelect.Add(i); + } + } - CPDF_Rect rcAnnot = GetAnnotRect(pAnnot); + { + for (int i = 0, sz = aSelect.GetSize(); i < sz; i++) { + m_Annots.Add(sa[aSelect[i]]); + } + } - FX_FLOAT fCenterY = (rcAnnot.top + rcAnnot.bottom) / 2.0f; + { + for (int i = aSelect.GetSize() - 1; i >= 0; i--) { + sa.RemoveAt(aSelect[i]); + } + } - if (fCenterY > rcLeftTop.bottom && fCenterY < rcLeftTop.top) - aSelect.Add(i); - } - } + aSelect.RemoveAll(); + } + } + sa.RemoveAll(); + } break; + case BAI_COLUMN: { + CPDFSDK_SortAnnots sa; + + { + for (int i = 0, sz = m_pPageView->CountAnnots(); i < sz; i++) { + CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i); + ASSERT(pAnnot != NULL); + + if (pAnnot->GetType() == m_sType && + pAnnot->GetSubType() == m_sSubType) + sa.Add(pAnnot); + } + } - { - for (int i=0,sz=aSelect.GetSize(); i 0) { + sa.Sort(CBA_AnnotIterator::CompareByTop, FALSE); + } - { - for (int i=aSelect.GetSize()-1; i>=0; i--) - { - sa.RemoveAt(aSelect[i]); - } - } + while (sa.GetSize() > 0) { + int nLeftTopIndex = -1; - aSelect.RemoveAll(); - } - } - sa.RemoveAll(); - } - break; - case BAI_COLUMN: { - CPDFSDK_SortAnnots sa; + FX_FLOAT fLeft = -1.0f; - { - for (int i=0,sz=m_pPageView->CountAnnots(); iGetAnnot(i); - ASSERT(pAnnot != NULL); + for (int i = sa.GetSize() - 1; i >= 0; i--) { + CPDFSDK_Annot* pAnnot = sa.GetAt(i); + ASSERT(pAnnot != NULL); - if (pAnnot->GetType() == m_sType - && pAnnot->GetSubType() == m_sSubType) - sa.Add(pAnnot); - } - } + CPDF_Rect rcAnnot = GetAnnotRect(pAnnot); - if (sa.GetSize() > 0) - { - sa.Sort(CBA_AnnotIterator::CompareByTop, FALSE); + if (fLeft < 0) { + nLeftTopIndex = 0; + fLeft = rcAnnot.left; + } else if (rcAnnot.left < fLeft) { + nLeftTopIndex = i; + fLeft = rcAnnot.left; } + } + } - while (sa.GetSize() > 0) - { - int nLeftTopIndex = -1; - - { - FX_FLOAT fLeft = -1.0f; - - for (int i=sa.GetSize()-1; i>=0; i--) - { - CPDFSDK_Annot* pAnnot = sa.GetAt(i); - ASSERT(pAnnot != NULL); - - CPDF_Rect rcAnnot = GetAnnotRect(pAnnot); - - if (fLeft < 0) - { - nLeftTopIndex = 0; - fLeft = rcAnnot.left; - } - else if (rcAnnot.left < fLeft) - { - nLeftTopIndex = i; - fLeft = rcAnnot.left; - } - } - } - - if (nLeftTopIndex >= 0) - { - CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex); - ASSERT(pLeftTopAnnot != NULL); - - CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot); + if (nLeftTopIndex >= 0) { + CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex); + ASSERT(pLeftTopAnnot != NULL); - m_Annots.Add(pLeftTopAnnot); - sa.RemoveAt(nLeftTopIndex); + CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot); - CFX_ArrayTemplate aSelect; + m_Annots.Add(pLeftTopAnnot); + sa.RemoveAt(nLeftTopIndex); - { - for (int i=0,sz=sa.GetSize(); i aSelect; - CPDF_Rect rcAnnot = GetAnnotRect(pAnnot); + { + for (int i = 0, sz = sa.GetSize(); i < sz; i++) { + CPDFSDK_Annot* pAnnot = sa.GetAt(i); + ASSERT(pAnnot != NULL); - FX_FLOAT fCenterX = (rcAnnot.left + rcAnnot.right) / 2.0f; + CPDF_Rect rcAnnot = GetAnnotRect(pAnnot); - if (fCenterX > rcLeftTop.left && fCenterX < rcLeftTop.right) - aSelect.Add(i); - } - } + FX_FLOAT fCenterX = (rcAnnot.left + rcAnnot.right) / 2.0f; - { - for (int i=0,sz=aSelect.GetSize(); i rcLeftTop.left && fCenterX < rcLeftTop.right) + aSelect.Add(i); + } + } - { - for (int i=aSelect.GetSize()-1; i>=0; i--) - { - sa.RemoveAt(aSelect[i]); - } - } + { + for (int i = 0, sz = aSelect.GetSize(); i < sz; i++) { + m_Annots.Add(sa[aSelect[i]]); + } + } - aSelect.RemoveAll(); - } + { + for (int i = aSelect.GetSize() - 1; i >= 0; i--) { + sa.RemoveAt(aSelect[i]); } - sa.RemoveAll(); + } + + aSelect.RemoveAll(); } - break; - } + } + sa.RemoveAll(); + } break; + } } -CPDF_Rect CBA_AnnotIterator::GetAnnotRect(CPDFSDK_Annot* pAnnot) -{ - ASSERT(pAnnot != NULL); +CPDF_Rect CBA_AnnotIterator::GetAnnotRect(CPDFSDK_Annot* pAnnot) { + ASSERT(pAnnot != NULL); - CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); - ASSERT(pPDFAnnot != NULL); + CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); + ASSERT(pPDFAnnot != NULL); - CPDF_Rect rcAnnot; - pPDFAnnot->GetRect(rcAnnot); + CPDF_Rect rcAnnot; + pPDFAnnot->GetRect(rcAnnot); - return rcAnnot; + return rcAnnot; } - diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp index 6190eff4ea..d471dc1e83 100644 --- a/fpdfsdk/src/fsdk_mgr.cpp +++ b/fpdfsdk/src/fsdk_mgr.cpp @@ -20,1267 +20,1202 @@ #include #endif -//extern CPDFDoc_Environment* g_pFormFillApp; -class CFX_SystemHandler:public IFX_SystemHandler -{ -public: - CFX_SystemHandler(CPDFDoc_Environment* pEnv):m_pEnv(pEnv),m_nCharSet(-1) {} -public: - virtual void InvalidateRect(FX_HWND hWnd, FX_RECT rect) ; - virtual void OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect); - - virtual FX_BOOL IsSelectionImplemented(); - - virtual CFX_WideString GetClipboardText(FX_HWND hWnd){return L"";} - virtual FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString string) {return FALSE;} - - virtual void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) {} - virtual void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) {} - - /*cursor style - FXCT_ARROW - FXCT_NESW - FXCT_NWSE - FXCT_VBEAM - FXCT_HBEAM - FXCT_HAND - */ - virtual void SetCursor(int32_t nCursorType); - - virtual FX_HMENU CreatePopupMenu() {return NULL;} - virtual FX_BOOL AppendMenuItem(FX_HMENU hMenu, int32_t nIDNewItem, CFX_WideString string) {return FALSE;} - virtual FX_BOOL EnableMenuItem(FX_HMENU hMenu, int32_t nIDItem, FX_BOOL bEnabled) {return FALSE;} - virtual int32_t TrackPopupMenu(FX_HMENU hMenu, int32_t x, int32_t y, FX_HWND hParent) {return -1;} - virtual void DestroyMenu(FX_HMENU hMenu) {} - - virtual CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset); - virtual FX_BOOL FindNativeTrueTypeFont(int32_t nCharset, CFX_ByteString sFontFaceName); - virtual CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc, CFX_ByteString sFontFaceName, uint8_t nCharset); - - virtual int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc) ; - virtual void KillTimer(int32_t nID) ; - - - virtual FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) {return m_pEnv->FFI_IsSHIFTKeyDown(nFlag);} - virtual FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) {return m_pEnv->FFI_IsCTRLKeyDown(nFlag);} - virtual FX_BOOL IsALTKeyDown(FX_DWORD nFlag) {return m_pEnv->FFI_IsALTKeyDown(nFlag);} - virtual FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) {return m_pEnv->FFI_IsINSERTKeyDown(nFlag);} - - virtual FX_SYSTEMTIME GetLocalTime(); - - virtual int32_t GetCharSet() {return m_nCharSet;} - virtual void SetCharSet(int32_t nCharSet) {m_nCharSet = nCharSet;} -private: - CPDFDoc_Environment* m_pEnv; - int m_nCharSet; -}; - -void CFX_SystemHandler::SetCursor(int32_t nCursorType) -{ - - m_pEnv->FFI_SetCursor(nCursorType); -} - -void CFX_SystemHandler::InvalidateRect(FX_HWND hWnd, FX_RECT rect) -{ - //g_pFormFillApp->FFI_Invalidate(); - CPDFSDK_Annot* pSDKAnnot = (CPDFSDK_Annot*)hWnd; - CPDFXFA_Page* pPage = NULL; - CPDFSDK_PageView* pPageView = NULL; - pPageView = pSDKAnnot->GetPageView(); - pPage = pSDKAnnot->GetPDFXFAPage(); - if(!pPage || !pPageView) - return; - CPDF_Matrix page2device; - pPageView->GetCurrentMatrix(page2device); - CPDF_Matrix device2page; - device2page.SetReverse(page2device); - FX_FLOAT left, top, right,bottom; - device2page.Transform((FX_FLOAT)rect.left, (FX_FLOAT)rect.top, left, top); - device2page.Transform((FX_FLOAT)rect.right, (FX_FLOAT)rect.bottom, right, bottom); -// m_pEnv->FFI_DeviceToPage(pPage, rect.left, rect.top, (double*)&left, (double*)&top); -// m_pEnv->FFI_DeviceToPage(pPage, rect.right, rect.bottom, (double*)&right, (double*)&bottom); - CPDF_Rect rcPDF(left, bottom, right, top); - rcPDF.Normalize(); - - m_pEnv->FFI_Invalidate(pPage, rcPDF.left, rcPDF.top, rcPDF.right, rcPDF.bottom); -} -void CFX_SystemHandler::OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect) -{ - CFFL_FormFiller* pFFL = (CFFL_FormFiller*)pFormFiller; - if(pFFL) - { - CPDF_Point leftbottom = CPDF_Point(rect.left, rect.bottom); - CPDF_Point righttop = CPDF_Point(rect.right, rect.top); - CPDF_Point ptA = pFFL->PWLtoFFL(leftbottom); - CPDF_Point ptB = pFFL->PWLtoFFL(righttop); - CPDFSDK_Annot* pAnnot = pFFL->GetSDKAnnot(); - ASSERT(pAnnot); - CPDFXFA_Page* pPage = pAnnot->GetPDFXFAPage(); - ASSERT(pPage); - m_pEnv->FFI_OutputSelectedRect(pPage, ptA.x, ptB.y, ptB.x, ptA.y); - } -} +// extern CPDFDoc_Environment* g_pFormFillApp; +class CFX_SystemHandler : public IFX_SystemHandler { + public: + CFX_SystemHandler(CPDFDoc_Environment* pEnv) : m_pEnv(pEnv), m_nCharSet(-1) {} -FX_BOOL CFX_SystemHandler::IsSelectionImplemented() -{ - if(m_pEnv) - { - FPDF_FORMFILLINFO* pInfo = m_pEnv->GetFormFillInfo(); - if(pInfo && pInfo->FFI_OutputSelectedRect) - return TRUE; - } - return FALSE; -} + public: + virtual void InvalidateRect(FX_HWND hWnd, FX_RECT rect); + virtual void OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect); -CFX_ByteString CFX_SystemHandler::GetNativeTrueTypeFont(int32_t nCharset) -{ - return ""; -} - -FX_BOOL CFX_SystemHandler::FindNativeTrueTypeFont(int32_t nCharset, CFX_ByteString sFontFaceName) -{ - CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr(); - if(pFontMgr) - { - CFX_FontMapper* pFontMapper = pFontMgr->m_pBuiltinMapper; - if(pFontMapper) - { - int nSize = pFontMapper->m_InstalledTTFonts.GetSize(); - if(nSize ==0) - { - pFontMapper->LoadInstalledFonts(); - nSize = pFontMapper->m_InstalledTTFonts.GetSize(); - } - - for(int i=0; im_InstalledTTFonts[i].Compare(sFontFaceName)) - return TRUE; - } - } - - } + virtual FX_BOOL IsSelectionImplemented(); + virtual CFX_WideString GetClipboardText(FX_HWND hWnd) { return L""; } + virtual FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString string) { return FALSE; -} + } + + virtual void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) {} + virtual void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) {} + + /*cursor style + FXCT_ARROW + FXCT_NESW + FXCT_NWSE + FXCT_VBEAM + FXCT_HBEAM + FXCT_HAND + */ + virtual void SetCursor(int32_t nCursorType); + + virtual FX_HMENU CreatePopupMenu() { return NULL; } + virtual FX_BOOL AppendMenuItem(FX_HMENU hMenu, + int32_t nIDNewItem, + CFX_WideString string) { + return FALSE; + } + virtual FX_BOOL EnableMenuItem(FX_HMENU hMenu, + int32_t nIDItem, + FX_BOOL bEnabled) { + return FALSE; + } + virtual int32_t TrackPopupMenu(FX_HMENU hMenu, + int32_t x, + int32_t y, + FX_HWND hParent) { + return -1; + } + virtual void DestroyMenu(FX_HMENU hMenu) {} + + virtual CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset); + virtual FX_BOOL FindNativeTrueTypeFont(int32_t nCharset, + CFX_ByteString sFontFaceName); + virtual CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc, + CFX_ByteString sFontFaceName, + uint8_t nCharset); + + virtual int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc); + virtual void KillTimer(int32_t nID); + + virtual FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) { + return m_pEnv->FFI_IsSHIFTKeyDown(nFlag); + } + virtual FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) { + return m_pEnv->FFI_IsCTRLKeyDown(nFlag); + } + virtual FX_BOOL IsALTKeyDown(FX_DWORD nFlag) { + return m_pEnv->FFI_IsALTKeyDown(nFlag); + } + virtual FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) { + return m_pEnv->FFI_IsINSERTKeyDown(nFlag); + } + + virtual FX_SYSTEMTIME GetLocalTime(); + + virtual int32_t GetCharSet() { return m_nCharSet; } + virtual void SetCharSet(int32_t nCharSet) { m_nCharSet = nCharSet; } + + private: + CPDFDoc_Environment* m_pEnv; + int m_nCharSet; +}; -static int CharSet2CP(int charset) -{ - if (charset == 128) - return 932; - if (charset == 134) - return 936; - if (charset == 129) - return 949; - if (charset == 136) - return 950; - return 0; -} -CPDF_Font* CFX_SystemHandler::AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc, CFX_ByteString sFontFaceName, - uint8_t nCharset) -{ - if(pDoc) - { - CFX_Font* pFXFont = new CFX_Font(); - pFXFont->LoadSubst(sFontFaceName,TRUE,0,0,0,CharSet2CP(nCharset),FALSE); - CPDF_Font* pFont = pDoc->AddFont(pFXFont,nCharset,FALSE); - delete pFXFont; - return pFont; +void CFX_SystemHandler::SetCursor(int32_t nCursorType) { + m_pEnv->FFI_SetCursor(nCursorType); +} + +void CFX_SystemHandler::InvalidateRect(FX_HWND hWnd, FX_RECT rect) { + // g_pFormFillApp->FFI_Invalidate(); + CPDFSDK_Annot* pSDKAnnot = (CPDFSDK_Annot*)hWnd; + CPDFXFA_Page* pPage = NULL; + CPDFSDK_PageView* pPageView = NULL; + pPageView = pSDKAnnot->GetPageView(); + pPage = pSDKAnnot->GetPDFXFAPage(); + if (!pPage || !pPageView) + return; + CPDF_Matrix page2device; + pPageView->GetCurrentMatrix(page2device); + CPDF_Matrix device2page; + device2page.SetReverse(page2device); + FX_FLOAT left, top, right, bottom; + device2page.Transform((FX_FLOAT)rect.left, (FX_FLOAT)rect.top, left, top); + device2page.Transform((FX_FLOAT)rect.right, (FX_FLOAT)rect.bottom, right, + bottom); + // m_pEnv->FFI_DeviceToPage(pPage, rect.left, rect.top, (double*)&left, + // (double*)&top); + // m_pEnv->FFI_DeviceToPage(pPage, rect.right, rect.bottom, (double*)&right, + // (double*)&bottom); + CPDF_Rect rcPDF(left, bottom, right, top); + rcPDF.Normalize(); + + m_pEnv->FFI_Invalidate(pPage, rcPDF.left, rcPDF.top, rcPDF.right, + rcPDF.bottom); +} +void CFX_SystemHandler::OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect) { + CFFL_FormFiller* pFFL = (CFFL_FormFiller*)pFormFiller; + if (pFFL) { + CPDF_Point leftbottom = CPDF_Point(rect.left, rect.bottom); + CPDF_Point righttop = CPDF_Point(rect.right, rect.top); + CPDF_Point ptA = pFFL->PWLtoFFL(leftbottom); + CPDF_Point ptB = pFFL->PWLtoFFL(righttop); + CPDFSDK_Annot* pAnnot = pFFL->GetSDKAnnot(); + ASSERT(pAnnot); + CPDFXFA_Page* pPage = pAnnot->GetPDFXFAPage(); + ASSERT(pPage); + m_pEnv->FFI_OutputSelectedRect(pPage, ptA.x, ptB.y, ptB.x, ptA.y); + } +} + +FX_BOOL CFX_SystemHandler::IsSelectionImplemented() { + if (m_pEnv) { + FPDF_FORMFILLINFO* pInfo = m_pEnv->GetFormFillInfo(); + if (pInfo && pInfo->FFI_OutputSelectedRect) + return TRUE; + } + return FALSE; +} + +CFX_ByteString CFX_SystemHandler::GetNativeTrueTypeFont(int32_t nCharset) { + return ""; +} + +FX_BOOL CFX_SystemHandler::FindNativeTrueTypeFont( + int32_t nCharset, + CFX_ByteString sFontFaceName) { + CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr(); + if (pFontMgr) { + CFX_FontMapper* pFontMapper = pFontMgr->m_pBuiltinMapper; + if (pFontMapper) { + int nSize = pFontMapper->m_InstalledTTFonts.GetSize(); + if (nSize == 0) { + pFontMapper->LoadInstalledFonts(); + nSize = pFontMapper->m_InstalledTTFonts.GetSize(); + } + + for (int i = 0; i < nSize; i++) { + if (pFontMapper->m_InstalledTTFonts[i].Compare(sFontFaceName)) + return TRUE; + } } - + } + + return FALSE; +} + +static int CharSet2CP(int charset) { + if (charset == 128) + return 932; + if (charset == 134) + return 936; + if (charset == 129) + return 949; + if (charset == 136) + return 950; + return 0; +} +CPDF_Font* CFX_SystemHandler::AddNativeTrueTypeFontToPDF( + CPDF_Document* pDoc, + CFX_ByteString sFontFaceName, + uint8_t nCharset) { + if (pDoc) { + CFX_Font* pFXFont = new CFX_Font(); + pFXFont->LoadSubst(sFontFaceName, TRUE, 0, 0, 0, CharSet2CP(nCharset), + FALSE); + CPDF_Font* pFont = pDoc->AddFont(pFXFont, nCharset, FALSE); + delete pFXFont; + return pFont; + } + + return NULL; +} + +int32_t CFX_SystemHandler::SetTimer(int32_t uElapse, + TimerCallback lpTimerFunc) { + return m_pEnv->FFI_SetTimer(uElapse, lpTimerFunc); +} +void CFX_SystemHandler::KillTimer(int32_t nID) { + m_pEnv->FFI_KillTimer(nID); +} + +FX_SYSTEMTIME CFX_SystemHandler::GetLocalTime() { + return m_pEnv->FFI_GetLocalTime(); +} + +CPDFDoc_Environment::CPDFDoc_Environment(CPDFXFA_Document* pDoc, + FPDF_FORMFILLINFO* pFFinfo) + : m_pAnnotHandlerMgr(NULL), + m_pActionHandler(NULL), + m_pJSRuntime(NULL), + m_pInfo(pFFinfo), + m_pSDKDoc(NULL), + m_pXFADoc(pDoc), + m_pIFormFiller(NULL) { + m_pSysHandler = new CFX_SystemHandler(this); +} + +CPDFDoc_Environment::~CPDFDoc_Environment() { + delete m_pIFormFiller; + m_pIFormFiller = NULL; + + CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); + if (m_pJSRuntime && pProvider->GetRuntimeFactory()) + pProvider->GetRuntimeFactory()->DeleteJSRuntime(m_pJSRuntime); + + if (pProvider->m_pEnvList.GetSize() == 0) { + pProvider->ReleaseRuntime(); + pProvider->InitRuntime(TRUE); + } + + delete m_pSysHandler; + m_pSysHandler = NULL; + + delete m_pAnnotHandlerMgr; + m_pAnnotHandlerMgr = NULL; + + delete m_pActionHandler; + m_pActionHandler = NULL; +} + +int CPDFDoc_Environment::JS_appAlert(const FX_WCHAR* Msg, + const FX_WCHAR* Title, + FX_UINT Type, + FX_UINT Icon) { + if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_alert) { + CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode(); + CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode(); + FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength()); + FPDF_WIDESTRING pTitle = + (FPDF_WIDESTRING)bsTitle.GetBuffer(bsTitle.GetLength()); + int ret = m_pInfo->m_pJsPlatform->app_alert(m_pInfo->m_pJsPlatform, pMsg, + pTitle, Type, Icon); + bsMsg.ReleaseBuffer(); + bsTitle.ReleaseBuffer(); + return ret; + } + return -1; +} + +int CPDFDoc_Environment::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) { + if (m_pInfo && m_pInfo->m_pJsPlatform && + m_pInfo->m_pJsPlatform->app_response) { + CFX_ByteString bsQuestion = CFX_WideString(Question).UTF16LE_Encode(); + CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode(); + CFX_ByteString bsDefault = CFX_WideString(Default).UTF16LE_Encode(); + CFX_ByteString bsLabel = CFX_WideString(cLabel).UTF16LE_Encode(); + FPDF_WIDESTRING pQuestion = + (FPDF_WIDESTRING)bsQuestion.GetBuffer(bsQuestion.GetLength()); + FPDF_WIDESTRING pTitle = + (FPDF_WIDESTRING)bsTitle.GetBuffer(bsTitle.GetLength()); + FPDF_WIDESTRING pDefault = + (FPDF_WIDESTRING)bsDefault.GetBuffer(bsDefault.GetLength()); + FPDF_WIDESTRING pLabel = + (FPDF_WIDESTRING)bsLabel.GetBuffer(bsLabel.GetLength()); + int ret = m_pInfo->m_pJsPlatform->app_response( + m_pInfo->m_pJsPlatform, pQuestion, pTitle, pDefault, pLabel, bPassword, + response, length); + bsQuestion.ReleaseBuffer(); + bsTitle.ReleaseBuffer(); + bsDefault.ReleaseBuffer(); + bsLabel.ReleaseBuffer(); + return ret; + } + return -1; +} + +CFX_WideString CPDFDoc_Environment::JS_fieldBrowse() { + if (!m_pInfo || !m_pInfo->m_pJsPlatform || + !m_pInfo->m_pJsPlatform->Field_browse) { + return L""; + } + + const int nRequiredLen = + m_pInfo->m_pJsPlatform->Field_browse(m_pInfo->m_pJsPlatform, nullptr, 0); + if (nRequiredLen <= 0) + return L""; + + nonstd::unique_ptr pBuff(new char[nRequiredLen]); + memset(pBuff.get(), 0, nRequiredLen); + const int nActualLen = m_pInfo->m_pJsPlatform->Field_browse( + m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen); + if (nActualLen <= 0 || nActualLen > nRequiredLen) + return L""; + + CFX_ByteString bsRet = CFX_ByteString(pBuff.get(), nActualLen); + CFX_WideString wsRet = CFX_WideString::FromLocal(bsRet); + return wsRet; +} + +CFX_WideString CPDFDoc_Environment::JS_docGetFilePath() { + if (!m_pInfo || !m_pInfo->m_pJsPlatform || + !m_pInfo->m_pJsPlatform->Doc_getFilePath) { + return L""; + } + + const int nRequiredLen = m_pInfo->m_pJsPlatform->Doc_getFilePath( + m_pInfo->m_pJsPlatform, nullptr, 0); + if (nRequiredLen <= 0) + return L""; + + nonstd::unique_ptr pBuff(new char[nRequiredLen]); + memset(pBuff.get(), 0, nRequiredLen); + const int nActualLen = m_pInfo->m_pJsPlatform->Doc_getFilePath( + m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen); + if (nActualLen <= 0 || nActualLen > nRequiredLen) + return L""; + + CFX_ByteString bsRet = CFX_ByteString(pBuff.get(), nActualLen); + CFX_WideString wsRet = CFX_WideString::FromLocal(bsRet); + return wsRet; +} + +void CPDFDoc_Environment::JS_docSubmitForm(void* formData, + int length, + const FX_WCHAR* URL) { + if (m_pInfo && m_pInfo->m_pJsPlatform && + m_pInfo->m_pJsPlatform->Doc_submitForm) { + CFX_ByteString bsDestination = CFX_WideString(URL).UTF16LE_Encode(); + FPDF_WIDESTRING pDestination = + (FPDF_WIDESTRING)bsDestination.GetBuffer(bsDestination.GetLength()); + m_pInfo->m_pJsPlatform->Doc_submitForm(m_pInfo->m_pJsPlatform, formData, + length, pDestination); + bsDestination.ReleaseBuffer(); + } +} + +void CPDFDoc_Environment::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) { + if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_mail) { + CFX_ByteString bsTo = CFX_WideString(To).UTF16LE_Encode(); + CFX_ByteString bsCC = CFX_WideString(Subject).UTF16LE_Encode(); + CFX_ByteString bsBcc = CFX_WideString(BCC).UTF16LE_Encode(); + CFX_ByteString bsSubject = CFX_WideString(Subject).UTF16LE_Encode(); + CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode(); + FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength()); + FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength()); + FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength()); + FPDF_WIDESTRING pSubject = + (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength()); + FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength()); + m_pInfo->m_pJsPlatform->Doc_mail(m_pInfo->m_pJsPlatform, mailData, length, + bUI, pTo, pSubject, pCC, pBcc, pMsg); + bsTo.ReleaseBuffer(); + bsCC.ReleaseBuffer(); + bsBcc.ReleaseBuffer(); + bsSubject.ReleaseBuffer(); + bsMsg.ReleaseBuffer(); + } +} + +IFXJS_Runtime* CPDFDoc_Environment::GetJSRuntime() { + if (!IsJSInitiated()) return NULL; + if (!m_pJSRuntime) + m_pJSRuntime = + CPDFXFA_App::GetInstance()->GetRuntimeFactory()->NewJSRuntime(this); + return m_pJSRuntime; } - -int32_t CFX_SystemHandler::SetTimer(int32_t uElapse, TimerCallback lpTimerFunc) -{ - return m_pEnv->FFI_SetTimer(uElapse, lpTimerFunc); -} -void CFX_SystemHandler::KillTimer(int32_t nID) -{ - m_pEnv->FFI_KillTimer(nID); +CPDFSDK_AnnotHandlerMgr* CPDFDoc_Environment::GetAnnotHandlerMgr() { + if (!m_pAnnotHandlerMgr) + m_pAnnotHandlerMgr = new CPDFSDK_AnnotHandlerMgr(this); + return m_pAnnotHandlerMgr; } -FX_SYSTEMTIME CFX_SystemHandler::GetLocalTime() -{ - return m_pEnv->FFI_GetLocalTime(); +CPDFSDK_ActionHandler* CPDFDoc_Environment::GetActionHander() { + if (!m_pActionHandler) + m_pActionHandler = new CPDFSDK_ActionHandler(this); + return m_pActionHandler; } -CPDFDoc_Environment::CPDFDoc_Environment(CPDFXFA_Document* pDoc, FPDF_FORMFILLINFO* pFFinfo) : - m_pAnnotHandlerMgr(NULL), - m_pActionHandler(NULL), - m_pJSRuntime(NULL), - m_pInfo(pFFinfo), - m_pSDKDoc(NULL), - m_pXFADoc(pDoc), - m_pIFormFiller(NULL) -{ - m_pSysHandler = new CFX_SystemHandler(this); +CFFL_IFormFiller* CPDFDoc_Environment::GetIFormFiller() { + if (!m_pIFormFiller) + m_pIFormFiller = new CFFL_IFormFiller(this); + return m_pIFormFiller; } -CPDFDoc_Environment::~CPDFDoc_Environment() -{ - delete m_pIFormFiller; - m_pIFormFiller = NULL; +CPDFSDK_Document::CPDFSDK_Document(CPDFXFA_Document* pDoc, + CPDFDoc_Environment* pEnv) + : m_pDoc(pDoc), + m_pInterForm(nullptr), + m_pFocusAnnot(nullptr), + m_pEnv(pEnv), + m_pOccontent(nullptr), + m_bChangeMask(FALSE) {} - CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); - if (m_pJSRuntime && pProvider->GetRuntimeFactory()) - pProvider->GetRuntimeFactory()->DeleteJSRuntime(m_pJSRuntime); +CPDFSDK_Document::~CPDFSDK_Document() { + for (auto& it : m_pageMap) + delete it.second; + m_pageMap.clear(); - if (pProvider->m_pEnvList.GetSize() == 0) - { - pProvider->ReleaseRuntime(); - pProvider->InitRuntime(TRUE); - } + delete m_pInterForm; + m_pInterForm = nullptr; - delete m_pSysHandler; - m_pSysHandler = NULL; + delete m_pOccontent; + m_pOccontent = nullptr; +} - delete m_pAnnotHandlerMgr; - m_pAnnotHandlerMgr = NULL; +CPDFSDK_PageView* CPDFSDK_Document::GetPageView(CPDFXFA_Page* pPDFXFAPage, + FX_BOOL ReNew) { + auto it = m_pageMap.find(pPDFXFAPage); + if (it != m_pageMap.end()) + return it->second; - delete m_pActionHandler; - m_pActionHandler = NULL; -} + if (!ReNew) + return nullptr; -int CPDFDoc_Environment::JS_appAlert(const FX_WCHAR* Msg, const FX_WCHAR* Title, FX_UINT Type, FX_UINT Icon) -{ - if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_alert) - { - CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode(); - CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode(); - FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength()); - FPDF_WIDESTRING pTitle = (FPDF_WIDESTRING)bsTitle.GetBuffer(bsTitle.GetLength()); - int ret = m_pInfo->m_pJsPlatform->app_alert(m_pInfo->m_pJsPlatform, pMsg, pTitle, Type, Icon); - bsMsg.ReleaseBuffer(); - bsTitle.ReleaseBuffer(); - return ret; - } - return -1; + 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; } -int CPDFDoc_Environment::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) -{ - if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_response) - { - CFX_ByteString bsQuestion = CFX_WideString(Question).UTF16LE_Encode(); - CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode(); - CFX_ByteString bsDefault = CFX_WideString(Default).UTF16LE_Encode(); - CFX_ByteString bsLabel = CFX_WideString(cLabel).UTF16LE_Encode(); - FPDF_WIDESTRING pQuestion = (FPDF_WIDESTRING)bsQuestion.GetBuffer(bsQuestion.GetLength()); - FPDF_WIDESTRING pTitle = (FPDF_WIDESTRING)bsTitle.GetBuffer(bsTitle.GetLength()); - FPDF_WIDESTRING pDefault = (FPDF_WIDESTRING)bsDefault.GetBuffer(bsDefault.GetLength()); - FPDF_WIDESTRING pLabel = (FPDF_WIDESTRING)bsLabel.GetBuffer(bsLabel.GetLength()); - int ret = m_pInfo->m_pJsPlatform->app_response(m_pInfo->m_pJsPlatform, pQuestion, pTitle, - pDefault, pLabel, bPassword, response, length); - bsQuestion.ReleaseBuffer(); - bsTitle.ReleaseBuffer(); - bsDefault.ReleaseBuffer(); - bsLabel.ReleaseBuffer(); - return ret; - } - return -1; +CPDFSDK_PageView* CPDFSDK_Document::GetCurrentView() { + CPDFXFA_Page* pPage = (CPDFXFA_Page*)m_pEnv->FFI_GetCurrentPage(m_pDoc); + return pPage ? GetPageView(pPage, TRUE) : nullptr; } -CFX_WideString CPDFDoc_Environment::JS_fieldBrowse() -{ - if (!m_pInfo || - !m_pInfo->m_pJsPlatform || - !m_pInfo->m_pJsPlatform->Field_browse) { - return L""; - } +CPDFSDK_PageView* CPDFSDK_Document::GetPageView(int nIndex) { + CPDFXFA_Page* pTempPage = (CPDFXFA_Page*)m_pEnv->FFI_GetPage(m_pDoc, nIndex); + if (!pTempPage) + return nullptr; - const int nRequiredLen = m_pInfo->m_pJsPlatform->Field_browse( - m_pInfo->m_pJsPlatform, nullptr, 0); - if (nRequiredLen <= 0) - return L""; - - nonstd::unique_ptr pBuff(new char[nRequiredLen]); - memset(pBuff.get(), 0, nRequiredLen); - const int nActualLen = m_pInfo->m_pJsPlatform->Field_browse( - m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen); - if (nActualLen <= 0 || nActualLen > nRequiredLen) - return L""; - - CFX_ByteString bsRet = CFX_ByteString(pBuff.get(), nActualLen); - CFX_WideString wsRet = CFX_WideString::FromLocal(bsRet); - return wsRet; -} - -CFX_WideString CPDFDoc_Environment::JS_docGetFilePath() -{ - if (!m_pInfo || - !m_pInfo->m_pJsPlatform || - !m_pInfo->m_pJsPlatform->Doc_getFilePath) { - return L""; - } - - const int nRequiredLen = m_pInfo->m_pJsPlatform->Doc_getFilePath( - m_pInfo->m_pJsPlatform, nullptr, 0); - if (nRequiredLen <= 0) - return L""; - - nonstd::unique_ptr pBuff(new char[nRequiredLen]); - memset(pBuff.get(), 0, nRequiredLen); - const int nActualLen = m_pInfo->m_pJsPlatform->Doc_getFilePath( - m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen); - if (nActualLen <= 0 || nActualLen > nRequiredLen) - return L""; - - CFX_ByteString bsRet = CFX_ByteString(pBuff.get(), nActualLen); - CFX_WideString wsRet = CFX_WideString::FromLocal(bsRet); - return wsRet; -} - -void CPDFDoc_Environment::JS_docSubmitForm(void* formData, int length, const FX_WCHAR* URL) -{ - if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_submitForm) - { - CFX_ByteString bsDestination = CFX_WideString(URL).UTF16LE_Encode(); - FPDF_WIDESTRING pDestination = (FPDF_WIDESTRING)bsDestination.GetBuffer(bsDestination.GetLength()); - m_pInfo->m_pJsPlatform->Doc_submitForm(m_pInfo->m_pJsPlatform, formData, length, pDestination); - bsDestination.ReleaseBuffer(); - } + auto it = m_pageMap.find(pTempPage); + return it->second; } -void CPDFDoc_Environment::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) -{ - if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_mail) - { - CFX_ByteString bsTo = CFX_WideString(To).UTF16LE_Encode(); - CFX_ByteString bsCC = CFX_WideString(Subject).UTF16LE_Encode(); - CFX_ByteString bsBcc = CFX_WideString(BCC).UTF16LE_Encode(); - CFX_ByteString bsSubject = CFX_WideString(Subject).UTF16LE_Encode(); - CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode(); - FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength()); - FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength()); - FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength()); - FPDF_WIDESTRING pSubject = (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength()); - FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength()); - m_pInfo->m_pJsPlatform->Doc_mail(m_pInfo->m_pJsPlatform, mailData, length, bUI, pTo, pSubject, - pCC, pBcc, pMsg); - bsTo.ReleaseBuffer(); - bsCC.ReleaseBuffer(); - bsBcc.ReleaseBuffer(); - bsSubject.ReleaseBuffer(); - bsMsg.ReleaseBuffer(); - } +void CPDFSDK_Document::ProcJavascriptFun() { + CPDFXFA_Document* pPDFDoc = GetDocument(); + CPDF_DocJSActions docJS(pPDFDoc->GetPDFDoc()); + int iCount = docJS.CountJSActions(); + if (iCount < 1) + return; + for (int i = 0; i < iCount; i++) { + CFX_ByteString csJSName; + CPDF_Action jsAction = docJS.GetJSAction(i, csJSName); + if (m_pEnv->GetActionHander()) + m_pEnv->GetActionHander()->DoAction_JavaScript( + jsAction, CFX_WideString::FromLocal(csJSName), this); + } } -IFXJS_Runtime* CPDFDoc_Environment::GetJSRuntime() -{ - if (!IsJSInitiated()) - return NULL; - if (!m_pJSRuntime) - m_pJSRuntime = CPDFXFA_App::GetInstance()->GetRuntimeFactory()->NewJSRuntime(this); - return m_pJSRuntime; -} - -CPDFSDK_AnnotHandlerMgr* CPDFDoc_Environment::GetAnnotHandlerMgr() -{ - if (!m_pAnnotHandlerMgr) - m_pAnnotHandlerMgr = new CPDFSDK_AnnotHandlerMgr(this); - return m_pAnnotHandlerMgr; -} +FX_BOOL CPDFSDK_Document::ProcOpenAction() { + if (!m_pDoc) + return FALSE; -CPDFSDK_ActionHandler* CPDFDoc_Environment::GetActionHander() -{ - if (!m_pActionHandler) - m_pActionHandler = new CPDFSDK_ActionHandler(this); - return m_pActionHandler; -} + CPDF_Dictionary* pRoot = m_pDoc->GetPDFDoc()->GetRoot(); + if (!pRoot) + return FALSE; -CFFL_IFormFiller* CPDFDoc_Environment::GetIFormFiller() -{ - if (!m_pIFormFiller) - m_pIFormFiller = new CFFL_IFormFiller(this); - return m_pIFormFiller; -} + CPDF_Object* pOpenAction = pRoot->GetDict("OpenAction"); + if (!pOpenAction) + pOpenAction = pRoot->GetArray("OpenAction"); -CPDFSDK_Document::CPDFSDK_Document(CPDFXFA_Document* pDoc,CPDFDoc_Environment* pEnv) : - m_pDoc(pDoc), - m_pInterForm(nullptr), - m_pFocusAnnot(nullptr), - m_pEnv(pEnv), - m_pOccontent(nullptr), - m_bChangeMask(FALSE) -{ -} + if (!pOpenAction) + return FALSE; -CPDFSDK_Document::~CPDFSDK_Document() -{ - for (auto& it : m_pageMap) - delete it.second; - m_pageMap.clear(); + if (pOpenAction->GetType() == PDFOBJ_ARRAY) + return TRUE; - delete m_pInterForm; - m_pInterForm = nullptr; + if (pOpenAction->GetType() == PDFOBJ_DICTIONARY) { + CPDF_Dictionary* pDict = (CPDF_Dictionary*)pOpenAction; + CPDF_Action action(pDict); + if (m_pEnv->GetActionHander()) + m_pEnv->GetActionHander()->DoAction_DocOpen(action, this); + return TRUE; + } + return FALSE; +} - delete m_pOccontent; - m_pOccontent = nullptr; +CPDF_OCContext* CPDFSDK_Document::GetOCContext() { + if (!m_pOccontent) + m_pOccontent = new CPDF_OCContext(m_pDoc->GetPDFDoc()); + return m_pOccontent; } -CPDFSDK_PageView* CPDFSDK_Document::GetPageView(CPDFXFA_Page* pPDFXFAPage, FX_BOOL ReNew) -{ - auto it = m_pageMap.find(pPDFXFAPage); - if (it != m_pageMap.end()) - return it->second; +void CPDFSDK_Document::ReMovePageView(CPDFXFA_Page* pPDFXFAPage) { + auto it = m_pageMap.find(pPDFXFAPage); + if (it == m_pageMap.end()) + return; - if (!ReNew) - return nullptr; + CPDFSDK_PageView* pPageView = it->second; + if (pPageView->IsLocked()) + return; - 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; + delete pPageView; + m_pageMap.erase(it); } -CPDFSDK_PageView* CPDFSDK_Document::GetCurrentView() -{ - CPDFXFA_Page* pPage = (CPDFXFA_Page *)m_pEnv->FFI_GetCurrentPage(m_pDoc); - return pPage ? GetPageView(pPage, TRUE) : nullptr; +CPDFXFA_Page* CPDFSDK_Document::GetPage(int nIndex) { + CPDFXFA_Page* pTempPage = (CPDFXFA_Page*)m_pEnv->FFI_GetPage(m_pDoc, nIndex); + if (!pTempPage) + return NULL; + return pTempPage; } -CPDFSDK_PageView* CPDFSDK_Document::GetPageView(int nIndex) -{ - CPDFXFA_Page* pTempPage = - (CPDFXFA_Page*)m_pEnv->FFI_GetPage(m_pDoc, nIndex); - if (!pTempPage) - return nullptr; - - auto it = m_pageMap.find(pTempPage); - return it->second; +CPDFSDK_InterForm* CPDFSDK_Document::GetInterForm() { + if (!m_pInterForm) + m_pInterForm = new CPDFSDK_InterForm(this); + return m_pInterForm; } -void CPDFSDK_Document:: ProcJavascriptFun() -{ - CPDFXFA_Document* pPDFDoc = GetDocument(); - CPDF_DocJSActions docJS(pPDFDoc->GetPDFDoc()); - int iCount = docJS.CountJSActions(); - if (iCount < 1) return; - for (int i = 0; i < iCount; i ++) - { - CFX_ByteString csJSName; - CPDF_Action jsAction = docJS.GetJSAction(i, csJSName); - if(m_pEnv->GetActionHander()) - m_pEnv->GetActionHander()->DoAction_JavaScript(jsAction,CFX_WideString::FromLocal(csJSName),this); +void CPDFSDK_Document::UpdateAllViews(CPDFSDK_PageView* pSender, + CPDFSDK_Annot* pAnnot) { + for (const auto& it : m_pageMap) { + CPDFSDK_PageView* pPageView = it.second; + if (pPageView != pSender) { + pPageView->UpdateView(pAnnot); } + } } -FX_BOOL CPDFSDK_Document::ProcOpenAction() -{ - if(!m_pDoc) - return FALSE; +CPDFSDK_Annot* CPDFSDK_Document::GetFocusAnnot() { + return m_pFocusAnnot; +} - CPDF_Dictionary* pRoot = m_pDoc->GetPDFDoc()->GetRoot(); - if (!pRoot) - return FALSE; +FX_BOOL CPDFSDK_Document::SetFocusAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) { + if (m_pFocusAnnot == pAnnot) + return TRUE; - CPDF_Object* pOpenAction = pRoot->GetDict("OpenAction"); - if(!pOpenAction) - pOpenAction = pRoot->GetArray("OpenAction"); + CPDFSDK_Annot* pLastFocusAnnot = m_pFocusAnnot; - if(!pOpenAction) - return FALSE; + if (m_pFocusAnnot) { + if (!KillFocusAnnot(nFlag)) + return FALSE; + } + CPDFSDK_PageView* pPageView = NULL; + if (pAnnot) + pPageView = pAnnot->GetPageView(); + if (pAnnot && pPageView->IsValid()) { + CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pEnv->GetAnnotHandlerMgr(); - if(pOpenAction->GetType()==PDFOBJ_ARRAY) - return TRUE; + if (pAnnotHandler && !m_pFocusAnnot) { + if (!pAnnotHandler->Annot_OnChangeFocus(pAnnot, pLastFocusAnnot)) + return FALSE; - if(pOpenAction->GetType()==PDFOBJ_DICTIONARY) - { - CPDF_Dictionary * pDict=(CPDF_Dictionary*)pOpenAction; - CPDF_Action action(pDict); - if(m_pEnv->GetActionHander()) - m_pEnv->GetActionHander()->DoAction_DocOpen(action, this); + if (!pAnnotHandler->Annot_OnSetFocus(pAnnot, nFlag)) + return FALSE; + if (!m_pFocusAnnot) { + m_pFocusAnnot = pAnnot; return TRUE; + } } - return FALSE; + } + return FALSE; } -CPDF_OCContext* CPDFSDK_Document::GetOCContext() -{ - if(!m_pOccontent) - m_pOccontent = new CPDF_OCContext(m_pDoc->GetPDFDoc()); - return m_pOccontent; -} +FX_BOOL CPDFSDK_Document::KillFocusAnnot(FX_UINT nFlag) { + if (m_pFocusAnnot) { + CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pEnv->GetAnnotHandlerMgr(); + if (pAnnotHandler) { + CPDFSDK_Annot* pFocusAnnot = m_pFocusAnnot; + m_pFocusAnnot = NULL; -void CPDFSDK_Document::ReMovePageView(CPDFXFA_Page* 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) -{ - CPDFXFA_Page * pTempPage = (CPDFXFA_Page*)m_pEnv->FFI_GetPage(m_pDoc,nIndex); - if(!pTempPage) - return NULL; - return pTempPage; -} - -CPDFSDK_InterForm* CPDFSDK_Document::GetInterForm() -{ - if(!m_pInterForm) - m_pInterForm = new CPDFSDK_InterForm(this); - return m_pInterForm; -} + if (!pAnnotHandler->Annot_OnChangeFocus(NULL, pFocusAnnot)) + return FALSE; -void CPDFSDK_Document::UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot) -{ - for (const auto& it : m_pageMap) { - CPDFSDK_PageView* pPageView = it.second; - if (pPageView != pSender) { - pPageView->UpdateView(pAnnot); + if (pAnnotHandler->Annot_OnKillFocus(pFocusAnnot, nFlag)) { + if (pFocusAnnot->GetType() == FX_BSTRC("Widget")) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pFocusAnnot; + int nFieldType = pWidget->GetFieldType(); + if (FIELDTYPE_TEXTFIELD == nFieldType || + FIELDTYPE_COMBOBOX == nFieldType) + m_pEnv->FFI_OnSetFieldInputFocus(NULL, NULL, 0, FALSE); } - } -} - -CPDFSDK_Annot* CPDFSDK_Document::GetFocusAnnot() -{ - return m_pFocusAnnot; -} - -FX_BOOL CPDFSDK_Document::SetFocusAnnot(CPDFSDK_Annot* pAnnot,FX_UINT nFlag) -{ - - if(m_pFocusAnnot==pAnnot) return TRUE; - CPDFSDK_Annot* pLastFocusAnnot = m_pFocusAnnot; - - if(m_pFocusAnnot) - { - if(!KillFocusAnnot(nFlag) ) return FALSE; - } - CPDFSDK_PageView* pPageView = NULL; - if (pAnnot) - pPageView = pAnnot->GetPageView(); - if(pAnnot && pPageView->IsValid()) - { - CPDFSDK_AnnotHandlerMgr *pAnnotHandler=m_pEnv->GetAnnotHandlerMgr(); - - if(pAnnotHandler&&!m_pFocusAnnot) - { - if (!pAnnotHandler->Annot_OnChangeFocus(pAnnot,pLastFocusAnnot)) - return FALSE; - - if (!pAnnotHandler->Annot_OnSetFocus(pAnnot,nFlag)) - return FALSE; - if(!m_pFocusAnnot) - { - m_pFocusAnnot=pAnnot; - return TRUE; - } - } + if (!m_pFocusAnnot) + return TRUE; + } else { + m_pFocusAnnot = pFocusAnnot; + } } - return FALSE; + } + return FALSE; } -FX_BOOL CPDFSDK_Document::KillFocusAnnot(FX_UINT nFlag) -{ - if(m_pFocusAnnot) - { - CPDFSDK_AnnotHandlerMgr *pAnnotHandler=m_pEnv->GetAnnotHandlerMgr(); - if(pAnnotHandler) - { - CPDFSDK_Annot* pFocusAnnot = m_pFocusAnnot; - m_pFocusAnnot = NULL; - - if (!pAnnotHandler->Annot_OnChangeFocus(NULL, pFocusAnnot)) - return FALSE; - - if(pAnnotHandler->Annot_OnKillFocus(pFocusAnnot, nFlag)) - { - - if(pFocusAnnot->GetType() == FX_BSTRC("Widget")) - { - CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pFocusAnnot; - int nFieldType = pWidget->GetFieldType(); - if(FIELDTYPE_TEXTFIELD == nFieldType || FIELDTYPE_COMBOBOX == nFieldType) - m_pEnv->FFI_OnSetFieldInputFocus(NULL, NULL, 0, FALSE); - } - - if(!m_pFocusAnnot) - return TRUE; - } - else - { - m_pFocusAnnot = pFocusAnnot; - } - } - } +FX_BOOL CPDFSDK_Document::DeletePages(int nStart, int nCount) { + if (nStart < 0 || nStart >= GetPageCount() || nCount <= 0) { return FALSE; -} + } -FX_BOOL CPDFSDK_Document::DeletePages(int nStart, int nCount) -{ - if ( nStart < 0 || nStart >= GetPageCount() || nCount <= 0 ) - { - return FALSE; - } - - CPDFXFA_Page * pTempPage = NULL; - for ( int i = nCount-1; i >= 0; i-- ) - { - pTempPage = GetPage(nStart+i); - if ( pTempPage != NULL ) - { - ReMovePageView(pTempPage); - } + CPDFXFA_Page* pTempPage = NULL; + for (int i = nCount - 1; i >= 0; i--) { + pTempPage = GetPage(nStart + i); + if (pTempPage != NULL) { + ReMovePageView(pTempPage); } - return TRUE; -} - -void CPDFSDK_Document::OnCloseDocument() -{ - KillFocusAnnot(); + } + return TRUE; } -FX_BOOL CPDFSDK_Document::GetPermissions(int nFlag) -{ - FX_DWORD dwPermissions = m_pDoc->GetPDFDoc()->GetUserPermissions(); - return dwPermissions&nFlag; +void CPDFSDK_Document::OnCloseDocument() { + KillFocusAnnot(); } -IFXJS_Runtime * CPDFSDK_Document::GetJsRuntime() -{ - ASSERT(m_pEnv!=NULL); - return m_pEnv->GetJSRuntime(); +FX_BOOL CPDFSDK_Document::GetPermissions(int nFlag) { + FX_DWORD dwPermissions = m_pDoc->GetPDFDoc()->GetUserPermissions(); + return dwPermissions & nFlag; } -CFX_WideString CPDFSDK_Document::GetPath() -{ - ASSERT(m_pEnv != NULL); - return m_pEnv->JS_docGetFilePath(); +IFXJS_Runtime* CPDFSDK_Document::GetJsRuntime() { + ASSERT(m_pEnv != NULL); + return m_pEnv->GetJSRuntime(); } - -CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc,CPDFXFA_Page* page):m_page(page),m_pSDKDoc(pSDKDoc) -{ - CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm(); - if(pInterForm) - { - CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); - if (page->GetPDFPage()) - pPDFInterForm->FixPageFields(page->GetPDFPage()); - } - m_fxAnnotArray.RemoveAll(); - - m_bEnterWidget = FALSE; - m_bExitWidget = FALSE; - m_bOnWidget = FALSE; - m_CaptureWidget = NULL; - m_bValid = FALSE; - m_bLocked = FALSE; - m_pAnnotList = NULL; +CFX_WideString CPDFSDK_Document::GetPath() { + ASSERT(m_pEnv != NULL); + return m_pEnv->JS_docGetFilePath(); } -CPDFSDK_PageView::~CPDFSDK_PageView() -{ - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - int nAnnotCount = m_fxAnnotArray.GetSize(); - for (int i=0; iGetFocusAnnot()) - KillFocusAnnot(); - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - ASSERT(pAnnotHandlerMgr); - pAnnotHandlerMgr->ReleaseAnnot(pAnnot); - } - m_fxAnnotArray.RemoveAll(); +CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc, + CPDFXFA_Page* page) + : m_page(page), m_pSDKDoc(pSDKDoc) { + CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm(); + if (pInterForm) { + CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); + if (page->GetPDFPage()) + pPDFInterForm->FixPageFields(page->GetPDFPage()); + } + m_fxAnnotArray.RemoveAll(); - delete m_pAnnotList; - m_pAnnotList = NULL; + m_bEnterWidget = FALSE; + m_bExitWidget = FALSE; + m_bOnWidget = FALSE; + m_CaptureWidget = NULL; + m_bValid = FALSE; + m_bLocked = FALSE; + m_pAnnotList = NULL; } -void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,CPDF_RenderOptions* pOptions, FX_RECT* pClip) -{ - m_curMatrix = *pUser2Device; - // m_pAnnotList->DisplayAnnots(m_page, pDevice, pUser2Device, FALSE, pOptions); - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - CPDFXFA_Page* pPage = GetPDFXFAPage(); - - if (pPage == NULL) return; - - if (pPage->GetDocument()->GetDocType() == DOCTYPE_DYNIMIC_XFA) { - CFX_Graphics gs; - gs.Create(pDevice); - if (pClip) { - CFX_RectF rectClip; - rectClip.Set(static_cast(pClip->left), - static_cast(pClip->top), - static_cast(pClip->Width()), - static_cast(pClip->Height())); - gs.SetClipRect(rectClip); - } - IXFA_RenderContext* pRenderContext = XFA_RenderContext_Create(); - if (!pRenderContext) - return; - CXFA_RenderOptions renderOptions; - renderOptions.m_bHighlight = TRUE; - pRenderContext->StartRender(pPage->GetXFAPageView(), &gs, *pUser2Device, renderOptions); - pRenderContext->DoRender(); - pRenderContext->StopRender(); - pRenderContext->Release(); - return; +CPDFSDK_PageView::~CPDFSDK_PageView() { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + int nAnnotCount = m_fxAnnotArray.GetSize(); + for (int i = 0; i < nAnnotCount; i++) { + CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i); + // if there is a focused annot on the page, we should kill the focus first. + if (pAnnot == m_pSDKDoc->GetFocusAnnot()) + KillFocusAnnot(); + CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); + ASSERT(pAnnotHandlerMgr); + pAnnotHandlerMgr->ReleaseAnnot(pAnnot); + } + m_fxAnnotArray.RemoveAll(); + + delete m_pAnnotList; + m_pAnnotList = NULL; +} + +void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + CPDF_RenderOptions* pOptions, + FX_RECT* pClip) { + m_curMatrix = *pUser2Device; + // m_pAnnotList->DisplayAnnots(m_page, pDevice, pUser2Device, FALSE, + // pOptions); + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + CPDFXFA_Page* pPage = GetPDFXFAPage(); + + if (pPage == NULL) + return; + + if (pPage->GetDocument()->GetDocType() == DOCTYPE_DYNIMIC_XFA) { + CFX_Graphics gs; + gs.Create(pDevice); + if (pClip) { + CFX_RectF rectClip; + rectClip.Set(static_cast(pClip->left), + static_cast(pClip->top), + static_cast(pClip->Width()), + static_cast(pClip->Height())); + gs.SetClipRect(rectClip); } - // for pdf/static xfa. - CPDFSDK_AnnotIterator annotIterator(this, TRUE); - CPDFSDK_Annot * pSDKAnnot=NULL; - int index=-1; + IXFA_RenderContext* pRenderContext = XFA_RenderContext_Create(); + if (!pRenderContext) + return; + CXFA_RenderOptions renderOptions; + renderOptions.m_bHighlight = TRUE; + pRenderContext->StartRender(pPage->GetXFAPageView(), &gs, *pUser2Device, + renderOptions); + pRenderContext->DoRender(); + pRenderContext->StopRender(); + pRenderContext->Release(); + return; + } + // for pdf/static xfa. + CPDFSDK_AnnotIterator annotIterator(this, TRUE); + CPDFSDK_Annot* pSDKAnnot = NULL; + int index = -1; + pSDKAnnot = annotIterator.Next(index); + while (pSDKAnnot) { + CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); + ASSERT(pAnnotHandlerMgr); + pAnnotHandlerMgr->Annot_OnDraw(this, pSDKAnnot, pDevice, pUser2Device, 0); pSDKAnnot = annotIterator.Next(index); - while(pSDKAnnot) - { - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - ASSERT(pAnnotHandlerMgr); - pAnnotHandlerMgr->Annot_OnDraw(this, pSDKAnnot, pDevice, pUser2Device, 0); - pSDKAnnot = annotIterator.Next(index); + } +} +CPDF_Annot* CPDFSDK_PageView::GetPDFAnnotAtPoint(FX_FLOAT pageX, + FX_FLOAT pageY) { + int nCount = m_pAnnotList->Count(); + for (int i = 0; i < nCount; i++) { + CPDF_Annot* pAnnot = m_pAnnotList->GetAt(i); + CFX_FloatRect annotRect; + pAnnot->GetRect(annotRect); + if (annotRect.Contains(pageX, pageY)) + return pAnnot; + } + return NULL; +} + +CPDF_Annot* CPDFSDK_PageView::GetPDFWidgetAtPoint(FX_FLOAT pageX, + FX_FLOAT pageY) { + int nCount = m_pAnnotList->Count(); + for (int i = 0; i < nCount; i++) { + CPDF_Annot* pAnnot = m_pAnnotList->GetAt(i); + if (pAnnot->GetSubType() == "Widget") { + CFX_FloatRect annotRect; + pAnnot->GetRect(annotRect); + if (annotRect.Contains(pageX, pageY)) + return pAnnot; } -} -CPDF_Annot* CPDFSDK_PageView::GetPDFAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY) -{ - - int nCount = m_pAnnotList->Count(); - for(int i = 0 ; iGetAt(i); - CFX_FloatRect annotRect; - pAnnot->GetRect(annotRect); - if(annotRect.Contains(pageX, pageY)) - return pAnnot; - } - return NULL; -} - -CPDF_Annot* CPDFSDK_PageView::GetPDFWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY) -{ - - int nCount = m_pAnnotList->Count(); - for(int i = 0 ; iGetAt(i); - if(pAnnot->GetSubType() == "Widget") - { - CFX_FloatRect annotRect; - pAnnot->GetRect(annotRect); - if(annotRect.Contains(pageX, pageY)) - return pAnnot; - } - } - return NULL; -} - -CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY) -{ - CPDFSDK_AnnotIterator annotIterator(this, FALSE); - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr(); - CPDFSDK_Annot* pSDKAnnot = NULL; - int index = -1; + } + return NULL; +} + +CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(FX_FLOAT pageX, + FX_FLOAT pageY) { + CPDFSDK_AnnotIterator annotIterator(this, FALSE); + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr(); + CPDFSDK_Annot* pSDKAnnot = NULL; + int index = -1; + pSDKAnnot = annotIterator.Next(index); + while (pSDKAnnot) { + CPDF_Rect rc = pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot); + if (rc.Contains(pageX, pageY)) + return pSDKAnnot; pSDKAnnot = annotIterator.Next(index); - while(pSDKAnnot) - { - CPDF_Rect rc = pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot); - if(rc.Contains(pageX, pageY)) - return pSDKAnnot; - pSDKAnnot = annotIterator.Next(index); + } + + return NULL; +} + +CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(FX_FLOAT pageX, + FX_FLOAT pageY) { + CPDFSDK_AnnotIterator annotIterator(this, FALSE); + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr(); + CPDFSDK_Annot* pSDKAnnot = NULL; + int index = -1; + pSDKAnnot = annotIterator.Next(index); + while (pSDKAnnot) { + if (pSDKAnnot->GetType() == "Widget" || + pSDKAnnot->GetType() == FSDK_XFAWIDGET_TYPENAME) { + pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot); + CPDF_Point point(pageX, pageY); + if (pAnnotMgr->Annot_OnHitTest(this, pSDKAnnot, point)) + return pSDKAnnot; } - - return NULL; -} - -CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY) -{ - CPDFSDK_AnnotIterator annotIterator(this, FALSE); - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr(); - CPDFSDK_Annot* pSDKAnnot = NULL; - int index = -1; pSDKAnnot = annotIterator.Next(index); - while(pSDKAnnot) - { - if(pSDKAnnot->GetType() == "Widget" || pSDKAnnot->GetType() == FSDK_XFAWIDGET_TYPENAME) - { - pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot); - CPDF_Point point(pageX, pageY); - if (pAnnotMgr->Annot_OnHitTest(this, pSDKAnnot, point)) - return pSDKAnnot; - } - pSDKAnnot = annotIterator.Next(index); - } + } - return NULL; + return NULL; } - -FX_BOOL CPDFSDK_PageView::Annot_HasAppearance(CPDF_Annot* pAnnot) -{ - CPDF_Dictionary* pAnnotDic = pAnnot->GetAnnotDict(); - if(pAnnotDic) - return pAnnotDic->KeyExist("AS"); - return FALSE; +FX_BOOL CPDFSDK_PageView::Annot_HasAppearance(CPDF_Annot* pAnnot) { + CPDF_Dictionary* pAnnotDic = pAnnot->GetAnnotDict(); + if (pAnnotDic) + return pAnnotDic->KeyExist("AS"); + return FALSE; } -CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Annot * pPDFAnnot) -{ - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - ASSERT(pEnv); - CPDFSDK_AnnotHandlerMgr * pAnnotHandler= pEnv->GetAnnotHandlerMgr(); - - CPDFSDK_Annot* pSDKAnnot =NULL; +CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Annot* pPDFAnnot) { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + ASSERT(pEnv); + CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr(); - if(pAnnotHandler) - { - pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this); - } - if(!pSDKAnnot) - return NULL; + CPDFSDK_Annot* pSDKAnnot = NULL; - m_fxAnnotArray.Add(pSDKAnnot); + if (pAnnotHandler) { + pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this); + } + if (!pSDKAnnot) + return NULL; - if(pAnnotHandler) - { - pAnnotHandler->Annot_OnCreate(pSDKAnnot); + m_fxAnnotArray.Add(pSDKAnnot); - } + if (pAnnotHandler) { + pAnnotHandler->Annot_OnCreate(pSDKAnnot); + } - return pSDKAnnot; + return pSDKAnnot; } -CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(IXFA_Widget* pPDFAnnot) -{ - if (!pPDFAnnot) return NULL; +CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(IXFA_Widget* pPDFAnnot) { + if (!pPDFAnnot) + return NULL; - CPDFSDK_Annot* pSDKAnnot = GetAnnotByXFAWidget(pPDFAnnot); - if (pSDKAnnot) - return pSDKAnnot; + CPDFSDK_Annot* pSDKAnnot = GetAnnotByXFAWidget(pPDFAnnot); + if (pSDKAnnot) + return pSDKAnnot; - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - ASSERT(pEnv); - CPDFSDK_AnnotHandlerMgr * pAnnotHandler= pEnv->GetAnnotHandlerMgr(); + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + ASSERT(pEnv); + CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr(); - pSDKAnnot =NULL; + pSDKAnnot = NULL; - if(pAnnotHandler) - { - pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this); - } - if(!pSDKAnnot) - return NULL; + if (pAnnotHandler) { + pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this); + } + if (!pSDKAnnot) + return NULL; - m_fxAnnotArray.Add(pSDKAnnot); + m_fxAnnotArray.Add(pSDKAnnot); - return pSDKAnnot; + return pSDKAnnot; } -CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Dictionary * pDict) -{ - return pDict ? AddAnnot(pDict->GetString("Subtype"), pDict) : nullptr; +CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Dictionary* pDict) { + return pDict ? AddAnnot(pDict->GetString("Subtype"), pDict) : nullptr; } -CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(const FX_CHAR* lpSubType,CPDF_Dictionary * pDict) -{ - return NULL; +CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(const FX_CHAR* lpSubType, + CPDF_Dictionary* pDict) { + return NULL; } -FX_BOOL CPDFSDK_PageView::DeleteAnnot(CPDFSDK_Annot* pAnnot) -{ - if (!pAnnot) - return FALSE; - CPDFXFA_Page* pPage = pAnnot->GetPDFXFAPage(); - if (!pPage || (pPage->GetDocument()->GetDocType() != DOCTYPE_STATIC_XFA && pPage->GetDocument()->GetDocType() != DOCTYPE_DYNIMIC_XFA)) - return FALSE; +FX_BOOL CPDFSDK_PageView::DeleteAnnot(CPDFSDK_Annot* pAnnot) { + if (!pAnnot) + return FALSE; + CPDFXFA_Page* pPage = pAnnot->GetPDFXFAPage(); + if (!pPage || (pPage->GetDocument()->GetDocType() != DOCTYPE_STATIC_XFA && + pPage->GetDocument()->GetDocType() != DOCTYPE_DYNIMIC_XFA)) + return FALSE; - int index = m_fxAnnotArray.Find(pAnnot); - m_fxAnnotArray.RemoveAt(index); - if (m_CaptureWidget == pAnnot) - m_CaptureWidget = NULL; + int index = m_fxAnnotArray.Find(pAnnot); + m_fxAnnotArray.RemoveAt(index); + if (m_CaptureWidget == pAnnot) + m_CaptureWidget = NULL; - return TRUE; + return TRUE; } -CPDF_Document* CPDFSDK_PageView::GetPDFDocument() -{ - if(m_page) - { - return m_page->GetDocument()->GetPDFDoc(); - } - return NULL; +CPDF_Document* CPDFSDK_PageView::GetPDFDocument() { + if (m_page) { + return m_page->GetDocument()->GetPDFDoc(); + } + return NULL; } -CPDF_Page* CPDFSDK_PageView::GetPDFPage() -{ - if (m_page) - { - return m_page->GetPDFPage(); - } +CPDF_Page* CPDFSDK_PageView::GetPDFPage() { + if (m_page) { + return m_page->GetPDFPage(); + } - return NULL; + return NULL; } -int CPDFSDK_PageView::CountAnnots() -{ - return m_fxAnnotArray.GetSize(); +int CPDFSDK_PageView::CountAnnots() { + return m_fxAnnotArray.GetSize(); } -CPDFSDK_Annot* CPDFSDK_PageView::GetAnnot(int nIndex) -{ - int nCount = m_fxAnnotArray.GetSize(); - if ( nIndex < 0 || nIndex >= nCount ) - { - return NULL; - } +CPDFSDK_Annot* CPDFSDK_PageView::GetAnnot(int nIndex) { + int nCount = m_fxAnnotArray.GetSize(); + if (nIndex < 0 || nIndex >= nCount) { + return NULL; + } - return (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(nIndex); + return (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(nIndex); } -CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByDict(CPDF_Dictionary * pDict) -{ - int nCount = m_fxAnnotArray.GetSize(); - for(int i=0; iGetPDFAnnot()->GetAnnotDict()) - return pAnnot; - } - return NULL; +CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByDict(CPDF_Dictionary* pDict) { + int nCount = m_fxAnnotArray.GetSize(); + for (int i = 0; i < nCount; i++) { + CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i); + if (pDict == pAnnot->GetPDFAnnot()->GetAnnotDict()) + return pAnnot; + } + return NULL; } -CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByXFAWidget(IXFA_Widget* hWidget) -{ - if (hWidget == NULL) - return NULL; - int annotCount = m_fxAnnotArray.GetSize(); - - for(int i = 0; i < annotCount; i++) - { - CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i); - if(pAnnot->GetXFAWidget() == hWidget) - return pAnnot; - } +CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByXFAWidget(IXFA_Widget* hWidget) { + if (hWidget == NULL) return NULL; -} + int annotCount = m_fxAnnotArray.GetSize(); + + for (int i = 0; i < annotCount; i++) { + CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i); + if (pAnnot->GetXFAWidget() == hWidget) + return pAnnot; + } + return NULL; +} + +FX_BOOL CPDFSDK_PageView::OnLButtonDown(const CPDF_Point& point, + FX_UINT nFlag) { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + ASSERT(pEnv); + CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y); + if (!pFXAnnot) { + KillFocusAnnot(nFlag); + } else { + CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); + ASSERT(pAnnotHandlerMgr); -FX_BOOL CPDFSDK_PageView::OnLButtonDown(const CPDF_Point & point, FX_UINT nFlag) -{ - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - ASSERT(pEnv); - CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y); - if(!pFXAnnot) - { - KillFocusAnnot(nFlag); - } - else - { - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - ASSERT(pAnnotHandlerMgr); - - FX_BOOL bRet = pAnnotHandlerMgr->Annot_OnLButtonDown(this, pFXAnnot, nFlag,point); - if(bRet) - { - SetFocusAnnot(pFXAnnot); - } - return bRet; + FX_BOOL bRet = + pAnnotHandlerMgr->Annot_OnLButtonDown(this, pFXAnnot, nFlag, point); + if (bRet) { + SetFocusAnnot(pFXAnnot); } - return FALSE; + return bRet; + } + return FALSE; } -FX_BOOL CPDFSDK_PageView::OnRButtonDown(const CPDF_Point & point, FX_UINT nFlag) -{ - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - ASSERT(pEnv); - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - ASSERT(pAnnotHandlerMgr); +FX_BOOL CPDFSDK_PageView::OnRButtonDown(const CPDF_Point& point, + FX_UINT nFlag) { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + ASSERT(pEnv); + CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); + ASSERT(pAnnotHandlerMgr); - CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y); + CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y); - if (pFXAnnot == NULL) - return FALSE; + if (pFXAnnot == NULL) + return FALSE; - FX_BOOL bRet = pAnnotHandlerMgr->Annot_OnRButtonDown(this, pFXAnnot, nFlag,point); - if (bRet) - { - SetFocusAnnot(pFXAnnot); - } - return TRUE; + FX_BOOL bRet = + pAnnotHandlerMgr->Annot_OnRButtonDown(this, pFXAnnot, nFlag, point); + if (bRet) { + SetFocusAnnot(pFXAnnot); + } + return TRUE; } -FX_BOOL CPDFSDK_PageView::OnRButtonUp(const CPDF_Point & point, FX_UINT nFlag) -{ - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - ASSERT(pEnv); - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - ASSERT(pAnnotHandlerMgr); +FX_BOOL CPDFSDK_PageView::OnRButtonUp(const CPDF_Point& point, FX_UINT nFlag) { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + ASSERT(pEnv); + CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); + ASSERT(pAnnotHandlerMgr); - CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y); + CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y); - if (pFXAnnot == NULL) - return FALSE; + if (pFXAnnot == NULL) + return FALSE; - FX_BOOL bRet = pAnnotHandlerMgr->Annot_OnRButtonUp(this, pFXAnnot, nFlag,point); - if (bRet) - { - SetFocusAnnot(pFXAnnot); + FX_BOOL bRet = + pAnnotHandlerMgr->Annot_OnRButtonUp(this, pFXAnnot, nFlag, point); + if (bRet) { + SetFocusAnnot(pFXAnnot); + } + return TRUE; +} + +FX_BOOL CPDFSDK_PageView::OnLButtonUp(const CPDF_Point& point, FX_UINT nFlag) { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + ASSERT(pEnv); + CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); + ASSERT(pAnnotHandlerMgr); + CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y); + CPDFSDK_Annot* pFocusAnnot = GetFocusAnnot(); + FX_BOOL bRet = FALSE; + if (pFocusAnnot && pFocusAnnot != pFXAnnot) { + // Last focus Annot gets a chance to handle the event. + bRet = pAnnotHandlerMgr->Annot_OnLButtonUp(this, pFocusAnnot, nFlag, point); + } + if (pFXAnnot && !bRet) { + bRet = pAnnotHandlerMgr->Annot_OnLButtonUp(this, pFXAnnot, nFlag, point); + return bRet; + } + return bRet; +} + +FX_BOOL CPDFSDK_PageView::OnMouseMove(const CPDF_Point& point, int nFlag) { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); + ASSERT(pAnnotHandlerMgr); + if (CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y)) { + if (m_CaptureWidget && m_CaptureWidget != pFXAnnot) { + m_bExitWidget = TRUE; + m_bEnterWidget = FALSE; + pAnnotHandlerMgr->Annot_OnMouseExit(this, m_CaptureWidget, nFlag); + } + m_CaptureWidget = (CPDFSDK_Widget*)pFXAnnot; + m_bOnWidget = TRUE; + if (!m_bEnterWidget) { + m_bEnterWidget = TRUE; + m_bExitWidget = FALSE; + pAnnotHandlerMgr->Annot_OnMouseEnter(this, pFXAnnot, nFlag); } + pAnnotHandlerMgr->Annot_OnMouseMove(this, pFXAnnot, nFlag, point); return TRUE; + } + if (m_bOnWidget) { + m_bOnWidget = FALSE; + m_bExitWidget = TRUE; + m_bEnterWidget = FALSE; + if (m_CaptureWidget) { + pAnnotHandlerMgr->Annot_OnMouseExit(this, m_CaptureWidget, nFlag); + m_CaptureWidget = NULL; + } + } + return FALSE; } -FX_BOOL CPDFSDK_PageView::OnLButtonUp(const CPDF_Point & point, FX_UINT nFlag) -{ +FX_BOOL CPDFSDK_PageView::OnMouseWheel(double deltaX, + double deltaY, + const CPDF_Point& point, + int nFlag) { + if (CPDFSDK_Annot* pAnnot = GetFXWidgetAtPoint(point.x, point.y)) { CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - ASSERT(pEnv); CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); ASSERT(pAnnotHandlerMgr); - CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y); - CPDFSDK_Annot* pFocusAnnot = GetFocusAnnot(); - FX_BOOL bRet = FALSE; - if(pFocusAnnot && pFocusAnnot != pFXAnnot) - { - //Last focus Annot gets a chance to handle the event. - bRet = pAnnotHandlerMgr->Annot_OnLButtonUp(this, pFocusAnnot, nFlag,point); - } - if(pFXAnnot && !bRet) - { - bRet = pAnnotHandlerMgr->Annot_OnLButtonUp(this, pFXAnnot, nFlag,point); - return bRet; - } - return bRet; + return pAnnotHandlerMgr->Annot_OnMouseWheel(this, pAnnot, nFlag, + (int)deltaY, point); + } + return FALSE; } -FX_BOOL CPDFSDK_PageView::OnMouseMove(const CPDF_Point & point, int nFlag) -{ - +FX_BOOL CPDFSDK_PageView::OnChar(int nChar, FX_UINT nFlag) { + if (CPDFSDK_Annot* pAnnot = GetFocusAnnot()) { CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); ASSERT(pAnnotHandlerMgr); - if(CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y)) - { - if(m_CaptureWidget && m_CaptureWidget != pFXAnnot) - { - m_bExitWidget = TRUE; - m_bEnterWidget = FALSE; - pAnnotHandlerMgr->Annot_OnMouseExit(this, m_CaptureWidget, nFlag); - } - m_CaptureWidget = (CPDFSDK_Widget*)pFXAnnot; - m_bOnWidget = TRUE; - if(!m_bEnterWidget) - { - m_bEnterWidget = TRUE; - m_bExitWidget = FALSE; - pAnnotHandlerMgr->Annot_OnMouseEnter(this, pFXAnnot,nFlag); - } - pAnnotHandlerMgr->Annot_OnMouseMove(this, pFXAnnot, nFlag, point); - return TRUE; - } - if(m_bOnWidget) - { - m_bOnWidget = FALSE; - m_bExitWidget = TRUE; - m_bEnterWidget = FALSE; - if(m_CaptureWidget) - { - pAnnotHandlerMgr->Annot_OnMouseExit(this, m_CaptureWidget, nFlag); - m_CaptureWidget = NULL; - } - } - return FALSE; -} - -FX_BOOL CPDFSDK_PageView::OnMouseWheel(double deltaX, double deltaY,const CPDF_Point& point, int nFlag) -{ - if(CPDFSDK_Annot* pAnnot = GetFXWidgetAtPoint(point.x, point.y)) - { - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - ASSERT(pAnnotHandlerMgr); - return pAnnotHandlerMgr->Annot_OnMouseWheel(this, pAnnot, nFlag, (int)deltaY, point); - } - return FALSE; - -} - -FX_BOOL CPDFSDK_PageView::OnChar(int nChar, FX_UINT nFlag) -{ - if(CPDFSDK_Annot* pAnnot = GetFocusAnnot()) - { - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - ASSERT(pAnnotHandlerMgr); - return pAnnotHandlerMgr->Annot_OnChar(pAnnot, nChar, nFlag); - } + return pAnnotHandlerMgr->Annot_OnChar(pAnnot, nChar, nFlag); + } - return FALSE; + return FALSE; } -FX_BOOL CPDFSDK_PageView::OnKeyDown(int nKeyCode, int nFlag) -{ - if(CPDFSDK_Annot* pAnnot = GetFocusAnnot()) - { - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - ASSERT(pAnnotHandlerMgr); - return pAnnotHandlerMgr->Annot_OnKeyDown(pAnnot, nKeyCode, nFlag); +FX_BOOL CPDFSDK_PageView::OnKeyDown(int nKeyCode, int nFlag) { + if (CPDFSDK_Annot* pAnnot = GetFocusAnnot()) { + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); + ASSERT(pAnnotHandlerMgr); + return pAnnotHandlerMgr->Annot_OnKeyDown(pAnnot, nKeyCode, nFlag); + } + return FALSE; +} + +FX_BOOL CPDFSDK_PageView::OnKeyUp(int nKeyCode, int nFlag) { + // if(CPDFSDK_Annot* pAnnot = GetFocusAnnot()) + // { + // CFFL_IFormFiller* pIFormFiller = g_pFormFillApp->GetIFormFiller(); + // return pIFormFiller->OnKeyUp(pAnnot, nKeyCode, nFlag); + // } + return FALSE; +} + +extern void CheckUnSupportAnnot(CPDF_Document* pDoc, CPDF_Annot* pPDFAnnot); + +void CPDFSDK_PageView::LoadFXAnnots() { + ASSERT(m_page != NULL); + + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + ASSERT(pEnv != NULL); + + CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); + ASSERT(pAnnotHandlerMgr != NULL); + + SetLock(TRUE); + m_page->AddRef(); + if (m_pSDKDoc->GetDocument()->GetDocType() == DOCTYPE_DYNIMIC_XFA) { + IXFA_PageView* pageView = NULL; + pageView = m_page->GetXFAPageView(); + ASSERT(pageView != NULL); + + IXFA_WidgetIterator* pWidgetHander = pageView->CreateWidgetIterator( + XFA_TRAVERSEWAY_Form, XFA_WIDGETFILTER_Visible | + XFA_WIDGETFILTER_Viewable | + XFA_WIDGETFILTER_AllType); + if (!pWidgetHander) { + m_page->Release(); + SetLock(FALSE); + return; } - return FALSE; -} - -FX_BOOL CPDFSDK_PageView::OnKeyUp(int nKeyCode, int nFlag) -{ -// if(CPDFSDK_Annot* pAnnot = GetFocusAnnot()) -// { -// CFFL_IFormFiller* pIFormFiller = g_pFormFillApp->GetIFormFiller(); -// return pIFormFiller->OnKeyUp(pAnnot, nKeyCode, nFlag); -// } - return FALSE; -} -extern void CheckUnSupportAnnot(CPDF_Document * pDoc, CPDF_Annot* pPDFAnnot); + IXFA_Widget* pXFAAnnot = pWidgetHander->MoveToNext(); + while (pXFAAnnot) { + CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pXFAAnnot, this); + if (!pAnnot) { + pXFAAnnot = pWidgetHander->MoveToNext(); + continue; + } + m_fxAnnotArray.Add(pAnnot); -void CPDFSDK_PageView::LoadFXAnnots() -{ - ASSERT(m_page != NULL); + pAnnotHandlerMgr->Annot_OnLoad(pAnnot); - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - ASSERT(pEnv != NULL); + pXFAAnnot = pWidgetHander->MoveToNext(); + } - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - ASSERT(pAnnotHandlerMgr != NULL); - - SetLock(TRUE); - m_page->AddRef(); - if (m_pSDKDoc->GetDocument()->GetDocType() == DOCTYPE_DYNIMIC_XFA) - { - IXFA_PageView* pageView = NULL; - pageView = m_page->GetXFAPageView(); - ASSERT(pageView != NULL); - - IXFA_WidgetIterator* pWidgetHander = pageView->CreateWidgetIterator(XFA_TRAVERSEWAY_Form, XFA_WIDGETFILTER_Visible|XFA_WIDGETFILTER_Viewable|XFA_WIDGETFILTER_AllType); - if (!pWidgetHander) - { - m_page->Release(); - SetLock(FALSE); - return; - } + pWidgetHander->Release(); + } else { + CPDF_Page* pPage = m_page->GetPDFPage(); + ASSERT(pPage != NULL); - IXFA_Widget* pXFAAnnot = pWidgetHander->MoveToNext(); - while (pXFAAnnot) { - CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pXFAAnnot, this); - if(!pAnnot) { - pXFAAnnot = pWidgetHander->MoveToNext(); - continue; - } - m_fxAnnotArray.Add(pAnnot); + FX_BOOL enableAPUpdate = CPDF_InterForm::UpdatingAPEnabled(); + // Disable the default AP construction. + CPDF_InterForm::EnableUpdateAP(FALSE); + m_pAnnotList = new CPDF_AnnotList(pPage); + CPDF_InterForm::EnableUpdateAP(enableAPUpdate); - pAnnotHandlerMgr->Annot_OnLoad(pAnnot); + int nCount = m_pAnnotList->Count(); + for (int i = 0; i < nCount; i++) { + CPDF_Annot* pPDFAnnot = m_pAnnotList->GetAt(i); + CPDF_Document* pDoc = GetPDFDocument(); - pXFAAnnot = pWidgetHander->MoveToNext(); + CheckUnSupportAnnot(pDoc, pPDFAnnot); - } + CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this); + if (!pAnnot) + continue; + m_fxAnnotArray.Add(pAnnot); - pWidgetHander->Release(); + pAnnotHandlerMgr->Annot_OnLoad(pAnnot); } - else - { - CPDF_Page* pPage = m_page->GetPDFPage(); - ASSERT(pPage != NULL); - - FX_BOOL enableAPUpdate = CPDF_InterForm::UpdatingAPEnabled(); - //Disable the default AP construction. - CPDF_InterForm::EnableUpdateAP(FALSE); - m_pAnnotList = new CPDF_AnnotList(pPage); - CPDF_InterForm::EnableUpdateAP(enableAPUpdate); - - int nCount = m_pAnnotList->Count(); - for(int i=0; iGetAt(i); - CPDF_Document * pDoc = GetPDFDocument(); - - CheckUnSupportAnnot(pDoc, pPDFAnnot); - - CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this); - if(!pAnnot) - continue; - m_fxAnnotArray.Add(pAnnot); - - pAnnotHandlerMgr->Annot_OnLoad(pAnnot); - } + } + m_page->Release(); + SetLock(FALSE); +} - } - m_page->Release(); - SetLock(FALSE); +void CPDFSDK_PageView::UpdateRects(CFX_RectArray& rects) { + for (int i = 0; i < rects.GetSize(); i++) { + CPDF_Rect rc = rects.GetAt(i); + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + pEnv->FFI_Invalidate(m_page, rc.left, rc.top, rc.right, rc.bottom); + } } -void CPDFSDK_PageView::UpdateRects(CFX_RectArray& rects) -{ - for(int i=0; iGetEnv(); - pEnv->FFI_Invalidate(m_page, rc.left, rc.top, rc.right, rc.bottom); - } +void CPDFSDK_PageView::UpdateView(CPDFSDK_Annot* pAnnot) { + CPDF_Rect rcWindow = pAnnot->GetRect(); + CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); + pEnv->FFI_Invalidate(m_page, rcWindow.left, rcWindow.top, rcWindow.right, + rcWindow.bottom); } -void CPDFSDK_PageView::UpdateView(CPDFSDK_Annot* pAnnot) -{ - CPDF_Rect rcWindow = pAnnot->GetRect(); - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - pEnv->FFI_Invalidate( - m_page, rcWindow.left, rcWindow.top, rcWindow.right, rcWindow.bottom); -} - -int CPDFSDK_PageView::GetPageIndex() -{ - if(m_page) - { - CPDF_Dictionary* pDic = m_page->GetPDFPage()->m_pFormDict; - CPDFXFA_Document* pDoc = m_pSDKDoc->GetDocument(); - if(pDoc && pDic) - { - return pDoc->GetPDFDoc()->GetPageIndex(pDic->GetObjNum()); - } +int CPDFSDK_PageView::GetPageIndex() { + if (m_page) { + CPDF_Dictionary* pDic = m_page->GetPDFPage()->m_pFormDict; + CPDFXFA_Document* pDoc = m_pSDKDoc->GetDocument(); + if (pDoc && pDic) { + return pDoc->GetPDFDoc()->GetPageIndex(pDic->GetObjNum()); } - return -1; + } + return -1; } -FX_BOOL CPDFSDK_PageView::IsValidAnnot(void* p) -{ - if (p == NULL) return FALSE; - int iCount = m_pAnnotList->Count(); - for (int i = 0; i < iCount; i++) - { - if (m_pAnnotList->GetAt(i) == p) - return TRUE; - } +FX_BOOL CPDFSDK_PageView::IsValidAnnot(void* p) { + if (p == NULL) return FALSE; + int iCount = m_pAnnotList->Count(); + for (int i = 0; i < iCount; i++) { + if (m_pAnnotList->GetAt(i) == p) + return TRUE; + } + return FALSE; } - -CPDFSDK_Annot* CPDFSDK_PageView::GetFocusAnnot() -{ - CPDFSDK_Annot* pFocusAnnot = m_pSDKDoc->GetFocusAnnot(); - if(!pFocusAnnot) - return NULL; - - for(int i=0; iGetFocusAnnot(); + if (!pFocusAnnot) return NULL; + + for (int i = 0; i < m_fxAnnotArray.GetSize(); i++) { + CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i); + if (pAnnot == pFocusAnnot) + return pAnnot; + } + return NULL; } diff --git a/fpdfsdk/src/fsdk_rendercontext.cpp b/fpdfsdk/src/fsdk_rendercontext.cpp index f96db94150..1320824236 100644 --- a/fpdfsdk/src/fsdk_rendercontext.cpp +++ b/fpdfsdk/src/fsdk_rendercontext.cpp @@ -6,42 +6,39 @@ #include "../include/fsdk_rendercontext.h" -void CRenderContext::Clear() -{ - m_pDevice = NULL; - m_pContext = NULL; - m_pRenderer = NULL; - m_pAnnots = NULL; - m_pOptions = NULL; +void CRenderContext::Clear() { + m_pDevice = NULL; + m_pContext = NULL; + m_pRenderer = NULL; + m_pAnnots = NULL; + m_pOptions = NULL; #ifdef _WIN32_WCE - m_pBitmap = NULL; - m_hBitmap = NULL; + m_pBitmap = NULL; + m_hBitmap = NULL; #endif } -CRenderContext::~CRenderContext() -{ - delete m_pRenderer; - delete m_pContext; - delete m_pDevice; - delete m_pAnnots; - delete m_pOptions->m_pOCContext; - delete m_pOptions; +CRenderContext::~CRenderContext() { + delete m_pRenderer; + delete m_pContext; + delete m_pDevice; + delete m_pAnnots; + delete m_pOptions->m_pOCContext; + delete m_pOptions; #ifdef _WIN32_WCE - delete m_pBitmap; - if (m_hBitmap) DeleteObject(m_hBitmap); + delete m_pBitmap; + if (m_hBitmap) + DeleteObject(m_hBitmap); #endif } -IFSDK_PAUSE_Adapter::IFSDK_PAUSE_Adapter(IFSDK_PAUSE* IPause ) -{ - m_IPause = IPause; +IFSDK_PAUSE_Adapter::IFSDK_PAUSE_Adapter(IFSDK_PAUSE* IPause) { + m_IPause = IPause; } -FX_BOOL IFSDK_PAUSE_Adapter::NeedToPauseNow() -{ - if (m_IPause->NeedToPauseNow) { - return m_IPause->NeedToPauseNow(m_IPause); - } - return FALSE; +FX_BOOL IFSDK_PAUSE_Adapter::NeedToPauseNow() { + if (m_IPause->NeedToPauseNow) { + return m_IPause->NeedToPauseNow(m_IPause); + } + return FALSE; } diff --git a/fpdfsdk/src/fxedit/fxet_ap.cpp b/fpdfsdk/src/fxedit/fxet_ap.cpp index 309a98f41e..b9900d899b 100644 --- a/fpdfsdk/src/fxedit/fxet_ap.cpp +++ b/fpdfsdk/src/fxedit/fxet_ap.cpp @@ -8,218 +8,206 @@ #include "../../include/fxedit/fx_edit.h" #include "../../include/fxedit/fxet_edit.h" -CFX_ByteString GetPDFWordString(IFX_Edit_FontMap * pFontMap, int32_t nFontIndex, FX_WORD Word, FX_WORD SubWord) -{ - ASSERT (pFontMap != NULL); - - CFX_ByteString sWord; - - if (CPDF_Font * pPDFFont = pFontMap->GetPDFFont(nFontIndex)) - { - if (SubWord > 0) - { - Word = SubWord; - } - else - { - FX_DWORD dwCharCode = -1; - - if (pPDFFont->IsUnicodeCompatible()) - dwCharCode = pPDFFont->CharCodeFromUnicode(Word); - else - dwCharCode = pFontMap->CharCodeFromUnicode(nFontIndex, Word); - - if (dwCharCode > 0 ) - { - pPDFFont->AppendChar(sWord, dwCharCode); - return sWord; - } - } - - pPDFFont->AppendChar(sWord, Word); - } - - return sWord; +CFX_ByteString GetPDFWordString(IFX_Edit_FontMap* pFontMap, + int32_t nFontIndex, + FX_WORD Word, + FX_WORD SubWord) { + ASSERT(pFontMap != NULL); + + CFX_ByteString sWord; + + if (CPDF_Font* pPDFFont = pFontMap->GetPDFFont(nFontIndex)) { + if (SubWord > 0) { + Word = SubWord; + } else { + FX_DWORD dwCharCode = -1; + + if (pPDFFont->IsUnicodeCompatible()) + dwCharCode = pPDFFont->CharCodeFromUnicode(Word); + else + dwCharCode = pFontMap->CharCodeFromUnicode(nFontIndex, Word); + + if (dwCharCode > 0) { + pPDFFont->AppendChar(sWord, dwCharCode); + return sWord; + } + } + + pPDFFont->AppendChar(sWord, Word); + } + + return sWord; } -static CFX_ByteString GetWordRenderString(const CFX_ByteString & strWords) -{ - if (strWords.GetLength() > 0) - return PDF_EncodeString(strWords) + " Tj\n"; +static CFX_ByteString GetWordRenderString(const CFX_ByteString& strWords) { + if (strWords.GetLength() > 0) + return PDF_EncodeString(strWords) + " Tj\n"; - return ""; + return ""; } -static CFX_ByteString GetFontSetString(IFX_Edit_FontMap * pFontMap, int32_t nFontIndex, FX_FLOAT fFontSize) -{ - CFX_ByteTextBuf sRet; +static CFX_ByteString GetFontSetString(IFX_Edit_FontMap* pFontMap, + int32_t nFontIndex, + FX_FLOAT fFontSize) { + CFX_ByteTextBuf sRet; - if (pFontMap) - { - CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); + if (pFontMap) { + CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); - if (sFontAlias.GetLength() > 0 && fFontSize > 0 ) - sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; - } + if (sFontAlias.GetLength() > 0 && fFontSize > 0) + sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; + } - return sRet.GetByteString(); + return sRet.GetByteString(); } -CFX_ByteString IFX_Edit::GetEditAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, - const CPVT_WordRange * pRange /* = NULL*/, FX_BOOL bContinuous/* = TRUE*/, FX_WORD SubWord/* = 0*/) -{ - CFX_ByteTextBuf sEditStream, sWords; - - CPDF_Point ptOld(0.0f,0.0f),ptNew(0.0f,0.0f); - int32_t nCurFontIndex = -1; - - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) - { - if (pRange) - pIterator->SetAt(pRange->BeginPos); - else - pIterator->SetAt(0); - - CPVT_WordPlace oldplace; - - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - - if (pRange && place.WordCmp(pRange->EndPos) > 0) break; - - if (bContinuous) - { - if (place.LineCmp(oldplace) != 0) - { - if (sWords.GetSize() > 0) - { - sEditStream << GetWordRenderString(sWords.GetByteString()); - sWords.Clear(); - } - - CPVT_Word word; - if (pIterator->GetWord(word)) - { - ptNew = CPDF_Point(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y); - } - else - { - CPVT_Line line; - pIterator->GetLine(line); - ptNew = CPDF_Point(line.ptLine.x + ptOffset.x, line.ptLine.y + ptOffset.y); - } - - if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) - { - sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y << " Td\n"; - - ptOld = ptNew; - } - } - - CPVT_Word word; - if (pIterator->GetWord(word)) - { - if (word.nFontIndex != nCurFontIndex) - { - if (sWords.GetSize() > 0) - { - sEditStream << GetWordRenderString(sWords.GetByteString()); - sWords.Clear(); - } - sEditStream << GetFontSetString(pEdit->GetFontMap(),word.nFontIndex,word.fFontSize); - nCurFontIndex = word.nFontIndex; - } - - sWords << GetPDFWordString(pEdit->GetFontMap(),nCurFontIndex,word.Word,SubWord); - } - - oldplace = place; - } - else - { - CPVT_Word word; - if (pIterator->GetWord(word)) - { - ptNew = CPDF_Point(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y); - - if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) - { - sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y << " Td\n"; - ptOld = ptNew; - } - - if (word.nFontIndex != nCurFontIndex) - { - sEditStream << GetFontSetString(pEdit->GetFontMap(),word.nFontIndex,word.fFontSize); - nCurFontIndex = word.nFontIndex; - } - - sEditStream << GetWordRenderString(GetPDFWordString(pEdit->GetFontMap(),nCurFontIndex,word.Word,SubWord)); - } - } - } - - if (sWords.GetSize() > 0) - { - sEditStream << GetWordRenderString(sWords.GetByteString()); - sWords.Clear(); - } - } - - CFX_ByteTextBuf sAppStream; - if (sEditStream.GetSize() > 0) - { - int32_t nHorzScale = pEdit->GetHorzScale(); - if (nHorzScale != 100) - { - sAppStream << nHorzScale << " Tz\n"; - } - - FX_FLOAT fCharSpace = pEdit->GetCharSpace(); - if (!FX_EDIT_IsFloatZero(fCharSpace)) - { - sAppStream << fCharSpace << " Tc\n"; - } - - sAppStream << sEditStream; - } - - return sAppStream.GetByteString(); +CFX_ByteString IFX_Edit::GetEditAppearanceStream( + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange /* = NULL*/, + FX_BOOL bContinuous /* = TRUE*/, + FX_WORD SubWord /* = 0*/) { + CFX_ByteTextBuf sEditStream, sWords; + + CPDF_Point ptOld(0.0f, 0.0f), ptNew(0.0f, 0.0f); + int32_t nCurFontIndex = -1; + + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + if (pRange) + pIterator->SetAt(pRange->BeginPos); + else + pIterator->SetAt(0); + + CPVT_WordPlace oldplace; + + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + + if (pRange && place.WordCmp(pRange->EndPos) > 0) + break; + + if (bContinuous) { + if (place.LineCmp(oldplace) != 0) { + if (sWords.GetSize() > 0) { + sEditStream << GetWordRenderString(sWords.GetByteString()); + sWords.Clear(); + } + + CPVT_Word word; + if (pIterator->GetWord(word)) { + ptNew = CPDF_Point(word.ptWord.x + ptOffset.x, + word.ptWord.y + ptOffset.y); + } else { + CPVT_Line line; + pIterator->GetLine(line); + ptNew = CPDF_Point(line.ptLine.x + ptOffset.x, + line.ptLine.y + ptOffset.y); + } + + if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) { + sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y + << " Td\n"; + + ptOld = ptNew; + } + } + + CPVT_Word word; + if (pIterator->GetWord(word)) { + if (word.nFontIndex != nCurFontIndex) { + if (sWords.GetSize() > 0) { + sEditStream << GetWordRenderString(sWords.GetByteString()); + sWords.Clear(); + } + sEditStream << GetFontSetString(pEdit->GetFontMap(), + word.nFontIndex, word.fFontSize); + nCurFontIndex = word.nFontIndex; + } + + sWords << GetPDFWordString(pEdit->GetFontMap(), nCurFontIndex, + word.Word, SubWord); + } + + oldplace = place; + } else { + CPVT_Word word; + if (pIterator->GetWord(word)) { + ptNew = CPDF_Point(word.ptWord.x + ptOffset.x, + word.ptWord.y + ptOffset.y); + + if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) { + sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y + << " Td\n"; + ptOld = ptNew; + } + + if (word.nFontIndex != nCurFontIndex) { + sEditStream << GetFontSetString(pEdit->GetFontMap(), + word.nFontIndex, word.fFontSize); + nCurFontIndex = word.nFontIndex; + } + + sEditStream << GetWordRenderString(GetPDFWordString( + pEdit->GetFontMap(), nCurFontIndex, word.Word, SubWord)); + } + } + } + + if (sWords.GetSize() > 0) { + sEditStream << GetWordRenderString(sWords.GetByteString()); + sWords.Clear(); + } + } + + CFX_ByteTextBuf sAppStream; + if (sEditStream.GetSize() > 0) { + int32_t nHorzScale = pEdit->GetHorzScale(); + if (nHorzScale != 100) { + sAppStream << nHorzScale << " Tz\n"; + } + + FX_FLOAT fCharSpace = pEdit->GetCharSpace(); + if (!FX_EDIT_IsFloatZero(fCharSpace)) { + sAppStream << fCharSpace << " Tc\n"; + } + + sAppStream << sEditStream; + } + + return sAppStream.GetByteString(); } -CFX_ByteString IFX_Edit::GetSelectAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, - const CPVT_WordRange * pRange /*= NULL*/) -{ - CFX_ByteTextBuf sRet; - - if (pRange && pRange->IsExist()) - { - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) - { - pIterator->SetAt(pRange->BeginPos); - - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - - if (pRange && place.WordCmp(pRange->EndPos) > 0) break; - - CPVT_Word word; - CPVT_Line line; - if (pIterator->GetWord(word) && pIterator->GetLine(line)) - { - //CPDF_Rect rcWordSel = CPDF_Rect(word.ptWord.x,line.ptLine.y + line.fLineDescent, - // word.ptWord.x+word.fWidth,line.ptLine.y + line.fLineAscent); - - sRet << word.ptWord.x + ptOffset.x << " " << line.ptLine.y + line.fLineDescent - << " " << word.fWidth << " " << line.fLineAscent - line.fLineDescent << " re\nf\n"; - } - } - } - } - - return sRet.GetByteString(); +CFX_ByteString IFX_Edit::GetSelectAppearanceStream( + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange /*= NULL*/) { + CFX_ByteTextBuf sRet; + + if (pRange && pRange->IsExist()) { + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + pIterator->SetAt(pRange->BeginPos); + + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + + if (pRange && place.WordCmp(pRange->EndPos) > 0) + break; + + CPVT_Word word; + CPVT_Line line; + if (pIterator->GetWord(word) && pIterator->GetLine(line)) { + // CPDF_Rect rcWordSel = CPDF_Rect(word.ptWord.x,line.ptLine.y + + // line.fLineDescent, + // word.ptWord.x+word.fWidth,line.ptLine.y + + //line.fLineAscent); + + sRet << word.ptWord.x + ptOffset.x << " " + << line.ptLine.y + line.fLineDescent << " " << word.fWidth << " " + << line.fLineAscent - line.fLineDescent << " re\nf\n"; + } + } + } + } + + return sRet.GetByteString(); } - diff --git a/fpdfsdk/src/fxedit/fxet_edit.cpp b/fpdfsdk/src/fxedit/fxet_edit.cpp index 63115c2626..efef2ca884 100644 --- a/fpdfsdk/src/fxedit/fxet_edit.cpp +++ b/fpdfsdk/src/fxedit/fxet_edit.cpp @@ -7,1495 +7,1312 @@ #include "../../include/fxedit/fxet_stub.h" #include "../../include/fxedit/fxet_edit.h" -#define FX_EDIT_UNDO_MAXITEM 10000 +#define FX_EDIT_UNDO_MAXITEM 10000 -/* ---------------------------- CFX_Edit_Iterator ---------------------------- */ +/* ---------------------------- CFX_Edit_Iterator ---------------------------- + */ -CFX_Edit_Iterator::CFX_Edit_Iterator(CFX_Edit * pEdit,IPDF_VariableText_Iterator * pVTIterator) : - m_pEdit(pEdit), - m_pVTIterator(pVTIterator) -{ -} +CFX_Edit_Iterator::CFX_Edit_Iterator(CFX_Edit* pEdit, + IPDF_VariableText_Iterator* pVTIterator) + : m_pEdit(pEdit), m_pVTIterator(pVTIterator) {} -CFX_Edit_Iterator::~CFX_Edit_Iterator() -{ -} +CFX_Edit_Iterator::~CFX_Edit_Iterator() {} -FX_BOOL CFX_Edit_Iterator::NextWord() -{ - return m_pVTIterator->NextWord(); +FX_BOOL CFX_Edit_Iterator::NextWord() { + return m_pVTIterator->NextWord(); } -FX_BOOL CFX_Edit_Iterator::NextLine() -{ - return m_pVTIterator->NextLine(); +FX_BOOL CFX_Edit_Iterator::NextLine() { + return m_pVTIterator->NextLine(); } -FX_BOOL CFX_Edit_Iterator::NextSection() -{ - return m_pVTIterator->NextSection(); +FX_BOOL CFX_Edit_Iterator::NextSection() { + return m_pVTIterator->NextSection(); } -FX_BOOL CFX_Edit_Iterator::PrevWord() -{ - return m_pVTIterator->PrevWord(); +FX_BOOL CFX_Edit_Iterator::PrevWord() { + return m_pVTIterator->PrevWord(); } -FX_BOOL CFX_Edit_Iterator::PrevLine() -{ - return m_pVTIterator->PrevLine(); +FX_BOOL CFX_Edit_Iterator::PrevLine() { + return m_pVTIterator->PrevLine(); } -FX_BOOL CFX_Edit_Iterator::PrevSection() -{ - return m_pVTIterator->PrevSection(); +FX_BOOL CFX_Edit_Iterator::PrevSection() { + return m_pVTIterator->PrevSection(); } -FX_BOOL CFX_Edit_Iterator::GetWord(CPVT_Word & word) const -{ - ASSERT(m_pEdit); +FX_BOOL CFX_Edit_Iterator::GetWord(CPVT_Word& word) const { + ASSERT(m_pEdit); - if (m_pVTIterator->GetWord(word)) - { - word.ptWord = m_pEdit->VTToEdit(word.ptWord); - return TRUE; - } - return FALSE; + if (m_pVTIterator->GetWord(word)) { + word.ptWord = m_pEdit->VTToEdit(word.ptWord); + return TRUE; + } + return FALSE; } -FX_BOOL CFX_Edit_Iterator::GetLine(CPVT_Line & line) const -{ - ASSERT(m_pEdit); +FX_BOOL CFX_Edit_Iterator::GetLine(CPVT_Line& line) const { + ASSERT(m_pEdit); - if (m_pVTIterator->GetLine(line)) - { - line.ptLine = m_pEdit->VTToEdit(line.ptLine); - return TRUE; - } - return FALSE; + if (m_pVTIterator->GetLine(line)) { + line.ptLine = m_pEdit->VTToEdit(line.ptLine); + return TRUE; + } + return FALSE; } -FX_BOOL CFX_Edit_Iterator::GetSection(CPVT_Section & section) const -{ - ASSERT(m_pEdit); +FX_BOOL CFX_Edit_Iterator::GetSection(CPVT_Section& section) const { + ASSERT(m_pEdit); - if (m_pVTIterator->GetSection(section)) - { - section.rcSection = m_pEdit->VTToEdit(section.rcSection); - return TRUE; - } - return FALSE; + if (m_pVTIterator->GetSection(section)) { + section.rcSection = m_pEdit->VTToEdit(section.rcSection); + return TRUE; + } + return FALSE; } -void CFX_Edit_Iterator::SetAt(int32_t nWordIndex) -{ - m_pVTIterator->SetAt(nWordIndex); +void CFX_Edit_Iterator::SetAt(int32_t nWordIndex) { + m_pVTIterator->SetAt(nWordIndex); } -void CFX_Edit_Iterator::SetAt(const CPVT_WordPlace & place) -{ - m_pVTIterator->SetAt(place); +void CFX_Edit_Iterator::SetAt(const CPVT_WordPlace& place) { + m_pVTIterator->SetAt(place); } -const CPVT_WordPlace & CFX_Edit_Iterator::GetAt() const -{ - return m_pVTIterator->GetAt(); +const CPVT_WordPlace& CFX_Edit_Iterator::GetAt() const { + return m_pVTIterator->GetAt(); } -IFX_Edit* CFX_Edit_Iterator::GetEdit() const -{ - return m_pEdit; +IFX_Edit* CFX_Edit_Iterator::GetEdit() const { + return m_pEdit; } -/* --------------------------- CFX_Edit_Provider ------------------------------- */ +/* --------------------------- CFX_Edit_Provider ------------------------------- + */ -CFX_Edit_Provider::CFX_Edit_Provider(IFX_Edit_FontMap * pFontMap) : m_pFontMap(pFontMap) -{ - ASSERT(m_pFontMap != NULL); +CFX_Edit_Provider::CFX_Edit_Provider(IFX_Edit_FontMap* pFontMap) + : m_pFontMap(pFontMap) { + ASSERT(m_pFontMap != NULL); } -CFX_Edit_Provider::~CFX_Edit_Provider() -{ -} +CFX_Edit_Provider::~CFX_Edit_Provider() {} -IFX_Edit_FontMap* CFX_Edit_Provider::GetFontMap() -{ - return m_pFontMap; +IFX_Edit_FontMap* CFX_Edit_Provider::GetFontMap() { + return m_pFontMap; } -int32_t CFX_Edit_Provider::GetCharWidth(int32_t nFontIndex, FX_WORD word, int32_t nWordStyle) -{ - if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) - { - FX_DWORD charcode = word; +int32_t CFX_Edit_Provider::GetCharWidth(int32_t nFontIndex, + FX_WORD word, + int32_t nWordStyle) { + if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) { + FX_DWORD charcode = word; - if (pPDFFont->IsUnicodeCompatible()) - charcode = pPDFFont->CharCodeFromUnicode(word); - else - charcode = m_pFontMap->CharCodeFromUnicode(nFontIndex, word); + if (pPDFFont->IsUnicodeCompatible()) + charcode = pPDFFont->CharCodeFromUnicode(word); + else + charcode = m_pFontMap->CharCodeFromUnicode(nFontIndex, word); - if (charcode != -1) - return pPDFFont->GetCharWidthF(charcode); - } + if (charcode != -1) + return pPDFFont->GetCharWidthF(charcode); + } - return 0; + return 0; } -int32_t CFX_Edit_Provider::GetTypeAscent(int32_t nFontIndex) -{ - if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) - return pPDFFont->GetTypeAscent(); +int32_t CFX_Edit_Provider::GetTypeAscent(int32_t nFontIndex) { + if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) + return pPDFFont->GetTypeAscent(); - return 0; + return 0; } -int32_t CFX_Edit_Provider::GetTypeDescent(int32_t nFontIndex) -{ - if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) - return pPDFFont->GetTypeDescent(); +int32_t CFX_Edit_Provider::GetTypeDescent(int32_t nFontIndex) { + if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) + return pPDFFont->GetTypeDescent(); - return 0; + return 0; } -int32_t CFX_Edit_Provider::GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex) -{ - return m_pFontMap->GetWordFontIndex(word,charset,nFontIndex); +int32_t CFX_Edit_Provider::GetWordFontIndex(FX_WORD word, + int32_t charset, + int32_t nFontIndex) { + return m_pFontMap->GetWordFontIndex(word, charset, nFontIndex); } -int32_t CFX_Edit_Provider::GetDefaultFontIndex() -{ - return 0; +int32_t CFX_Edit_Provider::GetDefaultFontIndex() { + return 0; } -FX_BOOL CFX_Edit_Provider::IsLatinWord(FX_WORD word) -{ - return FX_EDIT_ISLATINWORD(word); +FX_BOOL CFX_Edit_Provider::IsLatinWord(FX_WORD word) { + return FX_EDIT_ISLATINWORD(word); } -/* --------------------------------- CFX_Edit_Refresh --------------------------------- */ +/* --------------------------------- CFX_Edit_Refresh + * --------------------------------- */ -CFX_Edit_Refresh::CFX_Edit_Refresh() -{ -} +CFX_Edit_Refresh::CFX_Edit_Refresh() {} -CFX_Edit_Refresh::~CFX_Edit_Refresh() -{ -} +CFX_Edit_Refresh::~CFX_Edit_Refresh() {} -void CFX_Edit_Refresh::BeginRefresh() -{ - m_RefreshRects.Empty(); - m_OldLineRects = m_NewLineRects; +void CFX_Edit_Refresh::BeginRefresh() { + m_RefreshRects.Empty(); + m_OldLineRects = m_NewLineRects; } -void CFX_Edit_Refresh::Push(const CPVT_WordRange & linerange,const CPDF_Rect & rect) -{ - m_NewLineRects.Add(linerange,rect); +void CFX_Edit_Refresh::Push(const CPVT_WordRange& linerange, + const CPDF_Rect& rect) { + m_NewLineRects.Add(linerange, rect); } -void CFX_Edit_Refresh::NoAnalyse() -{ - { - for (int32_t i = 0, sz = m_OldLineRects.GetSize(); i < sz; i++) - if (CFX_Edit_LineRect * pOldRect = m_OldLineRects.GetAt(i)) - m_RefreshRects.Add(pOldRect->m_rcLine); - } +void CFX_Edit_Refresh::NoAnalyse() { + { + for (int32_t i = 0, sz = m_OldLineRects.GetSize(); i < sz; i++) + if (CFX_Edit_LineRect* pOldRect = m_OldLineRects.GetAt(i)) + m_RefreshRects.Add(pOldRect->m_rcLine); + } - { - for (int32_t i = 0, sz = m_NewLineRects.GetSize(); i < sz; i++) - if (CFX_Edit_LineRect * pNewRect = m_NewLineRects.GetAt(i)) - m_RefreshRects.Add(pNewRect->m_rcLine); - } + { + for (int32_t i = 0, sz = m_NewLineRects.GetSize(); i < sz; i++) + if (CFX_Edit_LineRect* pNewRect = m_NewLineRects.GetAt(i)) + m_RefreshRects.Add(pNewRect->m_rcLine); + } } -void CFX_Edit_Refresh::Analyse(int32_t nAlignment) -{ - FX_BOOL bLineTopChanged = FALSE; - CPDF_Rect rcResult; - FX_FLOAT fWidthDiff; - - int32_t szMax = FX_EDIT_MAX(m_OldLineRects.GetSize(),m_NewLineRects.GetSize()); - int32_t i = 0; - - while (i < szMax) - { - CFX_Edit_LineRect * pOldRect = m_OldLineRects.GetAt(i); - CFX_Edit_LineRect * pNewRect = m_NewLineRects.GetAt(i); - - if (pOldRect) - { - if (pNewRect) - { - if (bLineTopChanged) - { - rcResult = pOldRect->m_rcLine; - rcResult.Union(pNewRect->m_rcLine); - m_RefreshRects.Add(rcResult); - } - else - { - if (*pNewRect != *pOldRect) - { - if (!pNewRect->IsSameTop(*pOldRect) || !pNewRect->IsSameHeight(*pOldRect)) - { - bLineTopChanged = TRUE; - continue; - } - - if (nAlignment == 0) - { - if (pNewRect->m_wrLine.BeginPos != pOldRect->m_wrLine.BeginPos) - { - rcResult = pOldRect->m_rcLine; - rcResult.Union(pNewRect->m_rcLine); - m_RefreshRects.Add(rcResult); - } - else - { - if (!pNewRect->IsSameLeft(*pOldRect)) - { - rcResult = pOldRect->m_rcLine; - rcResult.Union(pNewRect->m_rcLine); - } - else - { - fWidthDiff = pNewRect->m_rcLine.Width() - pOldRect->m_rcLine.Width(); - rcResult = pNewRect->m_rcLine; - if (fWidthDiff > 0.0f) - rcResult.left = rcResult.right - fWidthDiff; - else - { - rcResult.left = rcResult.right; - rcResult.right += (-fWidthDiff); - } - } - m_RefreshRects.Add(rcResult); - } - } - else - { - rcResult = pOldRect->m_rcLine; - rcResult.Union(pNewRect->m_rcLine); - m_RefreshRects.Add(rcResult); - } - } - else - { - //don't need to do anything - } - } - } - else - { - m_RefreshRects.Add(pOldRect->m_rcLine); - } - } - else - { - if (pNewRect) - { - m_RefreshRects.Add(pNewRect->m_rcLine); +void CFX_Edit_Refresh::Analyse(int32_t nAlignment) { + FX_BOOL bLineTopChanged = FALSE; + CPDF_Rect rcResult; + FX_FLOAT fWidthDiff; + + int32_t szMax = + FX_EDIT_MAX(m_OldLineRects.GetSize(), m_NewLineRects.GetSize()); + int32_t i = 0; + + while (i < szMax) { + CFX_Edit_LineRect* pOldRect = m_OldLineRects.GetAt(i); + CFX_Edit_LineRect* pNewRect = m_NewLineRects.GetAt(i); + + if (pOldRect) { + if (pNewRect) { + if (bLineTopChanged) { + rcResult = pOldRect->m_rcLine; + rcResult.Union(pNewRect->m_rcLine); + m_RefreshRects.Add(rcResult); + } else { + if (*pNewRect != *pOldRect) { + if (!pNewRect->IsSameTop(*pOldRect) || + !pNewRect->IsSameHeight(*pOldRect)) { + bLineTopChanged = TRUE; + continue; } - else - { - //error + + if (nAlignment == 0) { + if (pNewRect->m_wrLine.BeginPos != pOldRect->m_wrLine.BeginPos) { + rcResult = pOldRect->m_rcLine; + rcResult.Union(pNewRect->m_rcLine); + m_RefreshRects.Add(rcResult); + } else { + if (!pNewRect->IsSameLeft(*pOldRect)) { + rcResult = pOldRect->m_rcLine; + rcResult.Union(pNewRect->m_rcLine); + } else { + fWidthDiff = + pNewRect->m_rcLine.Width() - pOldRect->m_rcLine.Width(); + rcResult = pNewRect->m_rcLine; + if (fWidthDiff > 0.0f) + rcResult.left = rcResult.right - fWidthDiff; + else { + rcResult.left = rcResult.right; + rcResult.right += (-fWidthDiff); + } + } + m_RefreshRects.Add(rcResult); + } + } else { + rcResult = pOldRect->m_rcLine; + rcResult.Union(pNewRect->m_rcLine); + m_RefreshRects.Add(rcResult); } + } else { + // don't need to do anything + } } - i++; + } else { + m_RefreshRects.Add(pOldRect->m_rcLine); + } + } else { + if (pNewRect) { + m_RefreshRects.Add(pNewRect->m_rcLine); + } else { + // error + } } + i++; + } } -void CFX_Edit_Refresh::AddRefresh(const CPDF_Rect & rect) -{ - m_RefreshRects.Add(rect); +void CFX_Edit_Refresh::AddRefresh(const CPDF_Rect& rect) { + m_RefreshRects.Add(rect); } -const CFX_Edit_RectArray * CFX_Edit_Refresh::GetRefreshRects() const -{ - return &m_RefreshRects; +const CFX_Edit_RectArray* CFX_Edit_Refresh::GetRefreshRects() const { + return &m_RefreshRects; } -void CFX_Edit_Refresh::EndRefresh() -{ - m_RefreshRects.Empty(); +void CFX_Edit_Refresh::EndRefresh() { + m_RefreshRects.Empty(); } -/* ------------------------------------- CFX_Edit_Undo ------------------------------------- */ +/* ------------------------------------- CFX_Edit_Undo + * ------------------------------------- */ -CFX_Edit_Undo::CFX_Edit_Undo(int32_t nBufsize) : m_nCurUndoPos(0), - m_nBufSize(nBufsize), - m_bModified(FALSE), - m_bVirgin(TRUE), - m_bWorking(FALSE) -{ -} +CFX_Edit_Undo::CFX_Edit_Undo(int32_t nBufsize) + : m_nCurUndoPos(0), + m_nBufSize(nBufsize), + m_bModified(FALSE), + m_bVirgin(TRUE), + m_bWorking(FALSE) {} -CFX_Edit_Undo::~CFX_Edit_Undo() -{ - Reset(); +CFX_Edit_Undo::~CFX_Edit_Undo() { + Reset(); } -FX_BOOL CFX_Edit_Undo::CanUndo() const -{ - return m_nCurUndoPos > 0; +FX_BOOL CFX_Edit_Undo::CanUndo() const { + return m_nCurUndoPos > 0; } -void CFX_Edit_Undo::Undo() -{ - m_bWorking = TRUE; +void CFX_Edit_Undo::Undo() { + m_bWorking = TRUE; - if (m_nCurUndoPos > 0) - { - IFX_Edit_UndoItem * pItem = m_UndoItemStack.GetAt(m_nCurUndoPos-1); - ASSERT(pItem != NULL); + if (m_nCurUndoPos > 0) { + IFX_Edit_UndoItem* pItem = m_UndoItemStack.GetAt(m_nCurUndoPos - 1); + ASSERT(pItem != NULL); - pItem->Undo(); + pItem->Undo(); - m_nCurUndoPos--; - m_bModified = (m_nCurUndoPos != 0); - } + m_nCurUndoPos--; + m_bModified = (m_nCurUndoPos != 0); + } - m_bWorking = FALSE; + m_bWorking = FALSE; } -FX_BOOL CFX_Edit_Undo::CanRedo() const -{ - return m_nCurUndoPos < m_UndoItemStack.GetSize(); +FX_BOOL CFX_Edit_Undo::CanRedo() const { + return m_nCurUndoPos < m_UndoItemStack.GetSize(); } -void CFX_Edit_Undo::Redo() -{ - m_bWorking = TRUE; +void CFX_Edit_Undo::Redo() { + m_bWorking = TRUE; - int32_t nStackSize = m_UndoItemStack.GetSize(); + int32_t nStackSize = m_UndoItemStack.GetSize(); - if (m_nCurUndoPos < nStackSize) - { - IFX_Edit_UndoItem * pItem = m_UndoItemStack.GetAt(m_nCurUndoPos); - ASSERT(pItem != NULL); + if (m_nCurUndoPos < nStackSize) { + IFX_Edit_UndoItem* pItem = m_UndoItemStack.GetAt(m_nCurUndoPos); + ASSERT(pItem != NULL); - pItem->Redo(); + pItem->Redo(); - m_nCurUndoPos++; - m_bModified = (m_nCurUndoPos != 0); - } + m_nCurUndoPos++; + m_bModified = (m_nCurUndoPos != 0); + } - m_bWorking = FALSE; + m_bWorking = FALSE; } -FX_BOOL CFX_Edit_Undo::IsWorking() const -{ - return m_bWorking; +FX_BOOL CFX_Edit_Undo::IsWorking() const { + return m_bWorking; } -void CFX_Edit_Undo::AddItem(IFX_Edit_UndoItem* pItem) -{ - ASSERT(!m_bWorking); - ASSERT(pItem != NULL); - ASSERT(m_nBufSize > 1); +void CFX_Edit_Undo::AddItem(IFX_Edit_UndoItem* pItem) { + ASSERT(!m_bWorking); + ASSERT(pItem != NULL); + ASSERT(m_nBufSize > 1); - if (m_nCurUndoPos < m_UndoItemStack.GetSize()) - RemoveTails(); + if (m_nCurUndoPos < m_UndoItemStack.GetSize()) + RemoveTails(); - if (m_UndoItemStack.GetSize() >= m_nBufSize) - { - RemoveHeads(); - m_bVirgin = FALSE; - } + if (m_UndoItemStack.GetSize() >= m_nBufSize) { + RemoveHeads(); + m_bVirgin = FALSE; + } - m_UndoItemStack.Add(pItem); - m_nCurUndoPos = m_UndoItemStack.GetSize(); + m_UndoItemStack.Add(pItem); + m_nCurUndoPos = m_UndoItemStack.GetSize(); - m_bModified = (m_nCurUndoPos != 0); + m_bModified = (m_nCurUndoPos != 0); } -FX_BOOL CFX_Edit_Undo::IsModified() const -{ - return m_bVirgin ? m_bModified : TRUE; +FX_BOOL CFX_Edit_Undo::IsModified() const { + return m_bVirgin ? m_bModified : TRUE; } -IFX_Edit_UndoItem* CFX_Edit_Undo::GetItem(int32_t nIndex) -{ - if (nIndex>=0 && nIndex < m_UndoItemStack.GetSize()) - return m_UndoItemStack.GetAt(nIndex); +IFX_Edit_UndoItem* CFX_Edit_Undo::GetItem(int32_t nIndex) { + if (nIndex >= 0 && nIndex < m_UndoItemStack.GetSize()) + return m_UndoItemStack.GetAt(nIndex); - return NULL; + return NULL; } -void CFX_Edit_Undo::RemoveHeads() -{ - ASSERT(m_UndoItemStack.GetSize() > 1); +void CFX_Edit_Undo::RemoveHeads() { + ASSERT(m_UndoItemStack.GetSize() > 1); - delete m_UndoItemStack.GetAt(0); - m_UndoItemStack.RemoveAt(0); + delete m_UndoItemStack.GetAt(0); + m_UndoItemStack.RemoveAt(0); } -void CFX_Edit_Undo::RemoveTails() -{ - for (int32_t i = m_UndoItemStack.GetSize()-1; i >= m_nCurUndoPos; i--) - { - delete m_UndoItemStack.GetAt(i); - m_UndoItemStack.RemoveAt(i); - } +void CFX_Edit_Undo::RemoveTails() { + for (int32_t i = m_UndoItemStack.GetSize() - 1; i >= m_nCurUndoPos; i--) { + delete m_UndoItemStack.GetAt(i); + m_UndoItemStack.RemoveAt(i); + } } -void CFX_Edit_Undo::Reset() -{ - for (int32_t i=0, sz=m_UndoItemStack.GetSize(); i < sz; i++) - { - delete m_UndoItemStack.GetAt(i); - } - m_nCurUndoPos = 0; - m_UndoItemStack.RemoveAll(); +void CFX_Edit_Undo::Reset() { + for (int32_t i = 0, sz = m_UndoItemStack.GetSize(); i < sz; i++) { + delete m_UndoItemStack.GetAt(i); + } + m_nCurUndoPos = 0; + m_UndoItemStack.RemoveAll(); } -/* -------------------------------- CFX_Edit_GroupUndoItem -------------------------------- */ +/* -------------------------------- CFX_Edit_GroupUndoItem + * -------------------------------- */ -CFX_Edit_GroupUndoItem::CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle) : m_sTitle(sTitle) -{ -} +CFX_Edit_GroupUndoItem::CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle) + : m_sTitle(sTitle) {} -CFX_Edit_GroupUndoItem::~CFX_Edit_GroupUndoItem() -{ - for (int i=0,sz=m_Items.GetSize(); iSetFirst(FALSE); - pUndoItem->SetLast(FALSE); + pUndoItem->SetFirst(FALSE); + pUndoItem->SetLast(FALSE); - m_Items.Add(pUndoItem); + m_Items.Add(pUndoItem); - if (m_sTitle.IsEmpty()) - m_sTitle = pUndoItem->GetUndoTitle(); + if (m_sTitle.IsEmpty()) + m_sTitle = pUndoItem->GetUndoTitle(); } -void CFX_Edit_GroupUndoItem::UpdateItems() -{ - if (m_Items.GetSize() > 0) - { - CFX_Edit_UndoItem* pFirstItem = m_Items[0]; - ASSERT(pFirstItem != NULL); - pFirstItem->SetFirst(TRUE); +void CFX_Edit_GroupUndoItem::UpdateItems() { + if (m_Items.GetSize() > 0) { + CFX_Edit_UndoItem* pFirstItem = m_Items[0]; + ASSERT(pFirstItem != NULL); + pFirstItem->SetFirst(TRUE); - CFX_Edit_UndoItem* pLastItem = m_Items[m_Items.GetSize() - 1]; - ASSERT(pLastItem != NULL); - pLastItem->SetLast(TRUE); - } + CFX_Edit_UndoItem* pLastItem = m_Items[m_Items.GetSize() - 1]; + ASSERT(pLastItem != NULL); + pLastItem->SetLast(TRUE); + } } -void CFX_Edit_GroupUndoItem::Undo() -{ - for (int i=m_Items.GetSize()-1; i>=0; i--) - { - CFX_Edit_UndoItem* pUndoItem = m_Items[i]; - ASSERT(pUndoItem != NULL); +void CFX_Edit_GroupUndoItem::Undo() { + for (int i = m_Items.GetSize() - 1; i >= 0; i--) { + CFX_Edit_UndoItem* pUndoItem = m_Items[i]; + ASSERT(pUndoItem != NULL); - pUndoItem->Undo(); - } + pUndoItem->Undo(); + } } -void CFX_Edit_GroupUndoItem::Redo() -{ - for (int i=0,sz=m_Items.GetSize(); iRedo(); - } + pUndoItem->Redo(); + } } -CFX_WideString CFX_Edit_GroupUndoItem::GetUndoTitle() -{ - return m_sTitle; +CFX_WideString CFX_Edit_GroupUndoItem::GetUndoTitle() { + return m_sTitle; } -/* ------------------------------------- CFX_Edit_UndoItem derived classes ------------------------------------- */ +/* ------------------------------------- CFX_Edit_UndoItem derived classes + * ------------------------------------- */ -CFXEU_InsertWord::CFXEU_InsertWord(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - FX_WORD word, int32_t charset, const CPVT_WordProps * pWordProps) - : m_pEdit(pEdit), m_wpOld(wpOldPlace), m_wpNew(wpNewPlace), m_Word(word), m_nCharset(charset), m_WordProps() -{ - if (pWordProps) - m_WordProps = *pWordProps; +CFXEU_InsertWord::CFXEU_InsertWord(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + FX_WORD word, + int32_t charset, + const CPVT_WordProps* pWordProps) + : m_pEdit(pEdit), + m_wpOld(wpOldPlace), + m_wpNew(wpNewPlace), + m_Word(word), + m_nCharset(charset), + m_WordProps() { + if (pWordProps) + m_WordProps = *pWordProps; } -CFXEU_InsertWord::~CFXEU_InsertWord() -{ -} +CFXEU_InsertWord::~CFXEU_InsertWord() {} -void CFXEU_InsertWord::Redo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wpOld); - m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,TRUE); - } +void CFXEU_InsertWord::Redo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wpOld); + m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, TRUE); + } } -void CFXEU_InsertWord::Undo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wpNew); - m_pEdit->Backspace(FALSE,TRUE); - } +void CFXEU_InsertWord::Undo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wpNew); + m_pEdit->Backspace(FALSE, TRUE); + } } /* -------------------------------------------------------------------------- */ -CFXEU_InsertReturn::CFXEU_InsertReturn(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps) : - m_pEdit(pEdit), - m_wpOld(wpOldPlace), - m_wpNew(wpNewPlace), - m_SecProps(), - m_WordProps() -{ - if (pSecProps) - m_SecProps = *pSecProps; - if (pWordProps) - m_WordProps = *pWordProps; -} - -CFXEU_InsertReturn::~CFXEU_InsertReturn() -{ -} - -void CFXEU_InsertReturn::Redo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wpOld); - m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,TRUE); - } +CFXEU_InsertReturn::CFXEU_InsertReturn(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps) + : m_pEdit(pEdit), + m_wpOld(wpOldPlace), + m_wpNew(wpNewPlace), + m_SecProps(), + m_WordProps() { + if (pSecProps) + m_SecProps = *pSecProps; + if (pWordProps) + m_WordProps = *pWordProps; } -void CFXEU_InsertReturn::Undo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wpNew); - m_pEdit->Backspace(FALSE,TRUE); - } -} +CFXEU_InsertReturn::~CFXEU_InsertReturn() {} -/* -------------------------------------------------------------------------- */ -//CFXEU_Backspace - -CFXEU_Backspace::CFXEU_Backspace(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - FX_WORD word, int32_t charset, - const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps) : - m_pEdit(pEdit), - m_wpOld(wpOldPlace), - m_wpNew(wpNewPlace), - m_Word(word), - m_nCharset(charset), - m_SecProps(SecProps), - m_WordProps(WordProps) -{ -} - -CFXEU_Backspace::~CFXEU_Backspace() -{ -} - -void CFXEU_Backspace::Redo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wpOld); - m_pEdit->Backspace(FALSE,TRUE); - } +void CFXEU_InsertReturn::Redo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wpOld); + m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, TRUE); + } } -void CFXEU_Backspace::Undo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wpNew); - if (m_wpNew.SecCmp(m_wpOld) != 0) - { - m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,TRUE); - } - else - { - m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,TRUE); - } - } +void CFXEU_InsertReturn::Undo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wpNew); + m_pEdit->Backspace(FALSE, TRUE); + } } /* -------------------------------------------------------------------------- */ -//CFXEU_Delete - -CFXEU_Delete::CFXEU_Delete(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - FX_WORD word, int32_t charset, - const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps, FX_BOOL bSecEnd) : - m_pEdit(pEdit), - m_wpOld(wpOldPlace), - m_wpNew(wpNewPlace), - m_Word(word), - m_nCharset(charset), - m_SecProps(SecProps), - m_WordProps(WordProps), - m_bSecEnd(bSecEnd) -{ -} - -CFXEU_Delete::~CFXEU_Delete() -{ -} - -void CFXEU_Delete::Redo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wpOld); - m_pEdit->Delete(FALSE,TRUE); - } +// CFXEU_Backspace + +CFXEU_Backspace::CFXEU_Backspace(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + FX_WORD word, + int32_t charset, + const CPVT_SecProps& SecProps, + const CPVT_WordProps& WordProps) + : m_pEdit(pEdit), + m_wpOld(wpOldPlace), + m_wpNew(wpNewPlace), + m_Word(word), + m_nCharset(charset), + m_SecProps(SecProps), + m_WordProps(WordProps) {} + +CFXEU_Backspace::~CFXEU_Backspace() {} + +void CFXEU_Backspace::Redo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wpOld); + m_pEdit->Backspace(FALSE, TRUE); + } +} + +void CFXEU_Backspace::Undo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wpNew); + if (m_wpNew.SecCmp(m_wpOld) != 0) { + m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, TRUE); + } else { + m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, TRUE); + } + } } -void CFXEU_Delete::Undo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wpNew); - if (m_bSecEnd) - { - m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,TRUE); - } - else - { - m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,TRUE); - } - } +/* -------------------------------------------------------------------------- */ +// CFXEU_Delete + +CFXEU_Delete::CFXEU_Delete(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + FX_WORD word, + int32_t charset, + const CPVT_SecProps& SecProps, + const CPVT_WordProps& WordProps, + FX_BOOL bSecEnd) + : m_pEdit(pEdit), + m_wpOld(wpOldPlace), + m_wpNew(wpNewPlace), + m_Word(word), + m_nCharset(charset), + m_SecProps(SecProps), + m_WordProps(WordProps), + m_bSecEnd(bSecEnd) {} + +CFXEU_Delete::~CFXEU_Delete() {} + +void CFXEU_Delete::Redo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wpOld); + m_pEdit->Delete(FALSE, TRUE); + } +} + +void CFXEU_Delete::Undo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wpNew); + if (m_bSecEnd) { + m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, TRUE); + } else { + m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, TRUE); + } + } } /* -------------------------------------------------------------------------- */ -//CFXEU_Clear +// CFXEU_Clear -CFXEU_Clear::CFXEU_Clear(CFX_Edit * pEdit, const CPVT_WordRange & wrSel, const CFX_WideString & swText) : - m_pEdit(pEdit), - m_wrSel(wrSel), - m_swText(swText) -{ -} +CFXEU_Clear::CFXEU_Clear(CFX_Edit* pEdit, + const CPVT_WordRange& wrSel, + const CFX_WideString& swText) + : m_pEdit(pEdit), m_wrSel(wrSel), m_swText(swText) {} -CFXEU_Clear::~CFXEU_Clear() -{ -} +CFXEU_Clear::~CFXEU_Clear() {} -void CFXEU_Clear::Redo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos); - m_pEdit->Clear(FALSE,TRUE); - } +void CFXEU_Clear::Redo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos); + m_pEdit->Clear(FALSE, TRUE); + } } -void CFXEU_Clear::Undo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wrSel.BeginPos); - m_pEdit->InsertText(m_swText.c_str(), DEFAULT_CHARSET, NULL, NULL, FALSE, TRUE); - m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos); - } +void CFXEU_Clear::Undo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wrSel.BeginPos); + m_pEdit->InsertText(m_swText.c_str(), DEFAULT_CHARSET, NULL, NULL, FALSE, + TRUE); + m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos); + } } /* -------------------------------------------------------------------------- */ -//CFXEU_ClearRich - -CFXEU_ClearRich::CFXEU_ClearRich(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - const CPVT_WordRange & wrSel, FX_WORD word, int32_t charset, - const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps) : - m_pEdit(pEdit), - m_wpOld(wpOldPlace), - m_wpNew(wpNewPlace), - m_wrSel(wrSel), - m_Word(word), - m_nCharset(charset), - m_SecProps(SecProps), - m_WordProps(WordProps) -{ -} - -CFXEU_ClearRich::~CFXEU_ClearRich() -{ -} - -void CFXEU_ClearRich::Redo() -{ - if (m_pEdit && IsLast()) - { - m_pEdit->SelectNone(); - m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos); - m_pEdit->Clear(FALSE,TRUE); - } -} - -void CFXEU_ClearRich::Undo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wpOld); - if (m_wpNew.SecCmp(m_wpOld) != 0) - { - m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,FALSE); - } - else - { - m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,FALSE); - } - - if (IsFirst()) - { - m_pEdit->PaintInsertText(m_wrSel.BeginPos,m_wrSel.EndPos); - m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos); - } - } +// CFXEU_ClearRich + +CFXEU_ClearRich::CFXEU_ClearRich(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + const CPVT_WordRange& wrSel, + FX_WORD word, + int32_t charset, + const CPVT_SecProps& SecProps, + const CPVT_WordProps& WordProps) + : m_pEdit(pEdit), + m_wpOld(wpOldPlace), + m_wpNew(wpNewPlace), + m_wrSel(wrSel), + m_Word(word), + m_nCharset(charset), + m_SecProps(SecProps), + m_WordProps(WordProps) {} + +CFXEU_ClearRich::~CFXEU_ClearRich() {} + +void CFXEU_ClearRich::Redo() { + if (m_pEdit && IsLast()) { + m_pEdit->SelectNone(); + m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos); + m_pEdit->Clear(FALSE, TRUE); + } +} + +void CFXEU_ClearRich::Undo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wpOld); + if (m_wpNew.SecCmp(m_wpOld) != 0) { + m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, FALSE); + } else { + m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, FALSE); + } + + if (IsFirst()) { + m_pEdit->PaintInsertText(m_wrSel.BeginPos, m_wrSel.EndPos); + m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos); + } + } } /* -------------------------------------------------------------------------- */ -//CFXEU_InsertText - -CFXEU_InsertText::CFXEU_InsertText(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace, - const CFX_WideString & swText, int32_t charset, - const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps) : - m_pEdit(pEdit), - m_wpOld(wpOldPlace), - m_wpNew(wpNewPlace), - m_swText(swText), - m_nCharset(charset), - m_SecProps(), - m_WordProps() -{ - if (pSecProps) - m_SecProps = *pSecProps; - if (pWordProps) - m_WordProps = *pWordProps; -} - -CFXEU_InsertText::~CFXEU_InsertText() -{ -} - -void CFXEU_InsertText::Redo() -{ - if (m_pEdit && IsLast()) - { - m_pEdit->SelectNone(); - m_pEdit->SetCaret(m_wpOld); - m_pEdit->InsertText(m_swText.c_str(), m_nCharset, &m_SecProps, &m_WordProps, FALSE, TRUE); - } -} - -void CFXEU_InsertText::Undo() -{ - if (m_pEdit) - { - m_pEdit->SelectNone(); - m_pEdit->SetSel(m_wpOld,m_wpNew); - m_pEdit->Clear(FALSE,TRUE); - } +// CFXEU_InsertText + +CFXEU_InsertText::CFXEU_InsertText(CFX_Edit* pEdit, + const CPVT_WordPlace& wpOldPlace, + const CPVT_WordPlace& wpNewPlace, + const CFX_WideString& swText, + int32_t charset, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps) + : m_pEdit(pEdit), + m_wpOld(wpOldPlace), + m_wpNew(wpNewPlace), + m_swText(swText), + m_nCharset(charset), + m_SecProps(), + m_WordProps() { + if (pSecProps) + m_SecProps = *pSecProps; + if (pWordProps) + m_WordProps = *pWordProps; +} + +CFXEU_InsertText::~CFXEU_InsertText() {} + +void CFXEU_InsertText::Redo() { + if (m_pEdit && IsLast()) { + m_pEdit->SelectNone(); + m_pEdit->SetCaret(m_wpOld); + m_pEdit->InsertText(m_swText.c_str(), m_nCharset, &m_SecProps, &m_WordProps, + FALSE, TRUE); + } +} + +void CFXEU_InsertText::Undo() { + if (m_pEdit) { + m_pEdit->SelectNone(); + m_pEdit->SetSel(m_wpOld, m_wpNew); + m_pEdit->Clear(FALSE, TRUE); + } } /* -------------------------------------------------------------------------- */ -CFXEU_SetSecProps::CFXEU_SetSecProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep, - const CPVT_SecProps & oldsecprops, const CPVT_WordProps & oldwordprops, - const CPVT_SecProps & newsecprops, const CPVT_WordProps & newwordprops, const CPVT_WordRange & range) - : m_pEdit(pEdit), - m_wpPlace(place), - m_wrPlace(range), - m_eProps(ep), - m_OldSecProps(oldsecprops), - m_NewSecProps(newsecprops), - m_OldWordProps(oldwordprops), - m_NewWordProps(newwordprops) -{ -} - -CFXEU_SetSecProps::~CFXEU_SetSecProps() -{ -} - -void CFXEU_SetSecProps::Redo() -{ - if (m_pEdit) - { - m_pEdit->SetSecProps(m_eProps,m_wpPlace,&m_NewSecProps,&m_NewWordProps,m_wrPlace,FALSE); - if (IsLast()) - { - m_pEdit->SelectNone(); - m_pEdit->PaintSetProps(m_eProps,m_wrPlace); - m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos); - } - } -} - -void CFXEU_SetSecProps::Undo() -{ - if (m_pEdit) - { - m_pEdit->SetSecProps(m_eProps,m_wpPlace,&m_OldSecProps,&m_OldWordProps,m_wrPlace,FALSE); - if (IsFirst()) - { - m_pEdit->SelectNone(); - m_pEdit->PaintSetProps(m_eProps,m_wrPlace); - m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos); - } - } +CFXEU_SetSecProps::CFXEU_SetSecProps(CFX_Edit* pEdit, + const CPVT_WordPlace& place, + EDIT_PROPS_E ep, + const CPVT_SecProps& oldsecprops, + const CPVT_WordProps& oldwordprops, + const CPVT_SecProps& newsecprops, + const CPVT_WordProps& newwordprops, + const CPVT_WordRange& range) + : m_pEdit(pEdit), + m_wpPlace(place), + m_wrPlace(range), + m_eProps(ep), + m_OldSecProps(oldsecprops), + m_NewSecProps(newsecprops), + m_OldWordProps(oldwordprops), + m_NewWordProps(newwordprops) {} + +CFXEU_SetSecProps::~CFXEU_SetSecProps() {} + +void CFXEU_SetSecProps::Redo() { + if (m_pEdit) { + m_pEdit->SetSecProps(m_eProps, m_wpPlace, &m_NewSecProps, &m_NewWordProps, + m_wrPlace, FALSE); + if (IsLast()) { + m_pEdit->SelectNone(); + m_pEdit->PaintSetProps(m_eProps, m_wrPlace); + m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos); + } + } +} + +void CFXEU_SetSecProps::Undo() { + if (m_pEdit) { + m_pEdit->SetSecProps(m_eProps, m_wpPlace, &m_OldSecProps, &m_OldWordProps, + m_wrPlace, FALSE); + if (IsFirst()) { + m_pEdit->SelectNone(); + m_pEdit->PaintSetProps(m_eProps, m_wrPlace); + m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos); + } + } } /* -------------------------------------------------------------------------- */ -CFXEU_SetWordProps::CFXEU_SetWordProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep, - const CPVT_WordProps & oldprops, const CPVT_WordProps & newprops, const CPVT_WordRange & range) - : m_pEdit(pEdit), - m_wpPlace(place), - m_wrPlace(range), - m_eProps(ep), - m_OldWordProps(oldprops), - m_NewWordProps(newprops) -{ -} - -CFXEU_SetWordProps::~CFXEU_SetWordProps() -{ -} - -void CFXEU_SetWordProps::Redo() -{ - if (m_pEdit) - { - m_pEdit->SetWordProps(m_eProps,m_wpPlace,&m_NewWordProps,m_wrPlace,FALSE); - if (IsLast()) - { - m_pEdit->SelectNone(); - m_pEdit->PaintSetProps(m_eProps,m_wrPlace); - m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos); - } - } -} - -void CFXEU_SetWordProps::Undo() -{ - if (m_pEdit) - { - m_pEdit->SetWordProps(m_eProps,m_wpPlace,&m_OldWordProps,m_wrPlace,FALSE); - if (IsFirst()) - { - m_pEdit->SelectNone(); - m_pEdit->PaintSetProps(m_eProps,m_wrPlace); - m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos); - } - } -} - -/* ------------------------------------- CFX_Edit ------------------------------------- */ - -CFX_Edit::CFX_Edit(IPDF_VariableText * pVT) : - m_pVT(pVT), - m_pNotify(NULL), - m_pOprNotify(NULL), - m_pVTProvide(NULL), - m_wpCaret(-1,-1,-1), - m_wpOldCaret(-1,-1,-1), - m_SelState(), - m_ptScrollPos(0,0), - m_ptRefreshScrollPos(0,0), - m_bEnableScroll(FALSE), - m_pIterator(NULL), - m_ptCaret(0.0f,0.0f), - m_Undo(FX_EDIT_UNDO_MAXITEM), - m_nAlignment(0), - m_bNotifyFlag(FALSE), - m_bEnableOverflow(FALSE), - m_bEnableRefresh(TRUE), - m_rcOldContent(0.0f,0.0f,0.0f,0.0f), - m_bEnableUndo(TRUE), - m_bNotify(TRUE), - m_bOprNotify(FALSE), - m_pGroupUndoItem(NULL) -{ - ASSERT(pVT != NULL); -} - -CFX_Edit::~CFX_Edit() -{ - delete m_pVTProvide; - m_pVTProvide = NULL; - delete m_pIterator; - m_pIterator = NULL; - ASSERT(m_pGroupUndoItem == NULL); +CFXEU_SetWordProps::CFXEU_SetWordProps(CFX_Edit* pEdit, + const CPVT_WordPlace& place, + EDIT_PROPS_E ep, + const CPVT_WordProps& oldprops, + const CPVT_WordProps& newprops, + const CPVT_WordRange& range) + : m_pEdit(pEdit), + m_wpPlace(place), + m_wrPlace(range), + m_eProps(ep), + m_OldWordProps(oldprops), + m_NewWordProps(newprops) {} + +CFXEU_SetWordProps::~CFXEU_SetWordProps() {} + +void CFXEU_SetWordProps::Redo() { + if (m_pEdit) { + m_pEdit->SetWordProps(m_eProps, m_wpPlace, &m_NewWordProps, m_wrPlace, + FALSE); + if (IsLast()) { + m_pEdit->SelectNone(); + m_pEdit->PaintSetProps(m_eProps, m_wrPlace); + m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos); + } + } +} + +void CFXEU_SetWordProps::Undo() { + if (m_pEdit) { + m_pEdit->SetWordProps(m_eProps, m_wpPlace, &m_OldWordProps, m_wrPlace, + FALSE); + if (IsFirst()) { + m_pEdit->SelectNone(); + m_pEdit->PaintSetProps(m_eProps, m_wrPlace); + m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos); + } + } +} + +/* ------------------------------------- CFX_Edit + * ------------------------------------- */ + +CFX_Edit::CFX_Edit(IPDF_VariableText* pVT) + : m_pVT(pVT), + m_pNotify(NULL), + m_pOprNotify(NULL), + m_pVTProvide(NULL), + m_wpCaret(-1, -1, -1), + m_wpOldCaret(-1, -1, -1), + m_SelState(), + m_ptScrollPos(0, 0), + m_ptRefreshScrollPos(0, 0), + m_bEnableScroll(FALSE), + m_pIterator(NULL), + m_ptCaret(0.0f, 0.0f), + m_Undo(FX_EDIT_UNDO_MAXITEM), + m_nAlignment(0), + m_bNotifyFlag(FALSE), + m_bEnableOverflow(FALSE), + m_bEnableRefresh(TRUE), + m_rcOldContent(0.0f, 0.0f, 0.0f, 0.0f), + m_bEnableUndo(TRUE), + m_bNotify(TRUE), + m_bOprNotify(FALSE), + m_pGroupUndoItem(NULL) { + ASSERT(pVT != NULL); +} + +CFX_Edit::~CFX_Edit() { + delete m_pVTProvide; + m_pVTProvide = NULL; + delete m_pIterator; + m_pIterator = NULL; + ASSERT(m_pGroupUndoItem == NULL); } // public methods -void CFX_Edit::Initialize() -{ - m_pVT->Initialize(); - SetCaret(m_pVT->GetBeginWordPlace()); - SetCaretOrigin(); +void CFX_Edit::Initialize() { + m_pVT->Initialize(); + SetCaret(m_pVT->GetBeginWordPlace()); + SetCaretOrigin(); } -void CFX_Edit::SetFontMap(IFX_Edit_FontMap * pFontMap) -{ - delete m_pVTProvide; - m_pVT->SetProvider(m_pVTProvide = new CFX_Edit_Provider(pFontMap)); +void CFX_Edit::SetFontMap(IFX_Edit_FontMap* pFontMap) { + delete m_pVTProvide; + m_pVT->SetProvider(m_pVTProvide = new CFX_Edit_Provider(pFontMap)); } -void CFX_Edit::SetVTProvider(IPDF_VariableText_Provider* pProvider) -{ - m_pVT->SetProvider(pProvider); +void CFX_Edit::SetVTProvider(IPDF_VariableText_Provider* pProvider) { + m_pVT->SetProvider(pProvider); } -void CFX_Edit::SetNotify(IFX_Edit_Notify* pNotify) -{ - m_pNotify = pNotify; +void CFX_Edit::SetNotify(IFX_Edit_Notify* pNotify) { + m_pNotify = pNotify; } -void CFX_Edit::SetOprNotify(IFX_Edit_OprNotify* pOprNotify) -{ - m_pOprNotify = pOprNotify; +void CFX_Edit::SetOprNotify(IFX_Edit_OprNotify* pOprNotify) { + m_pOprNotify = pOprNotify; } -IFX_Edit_Iterator * CFX_Edit::GetIterator() -{ - if (!m_pIterator) - m_pIterator = new CFX_Edit_Iterator(this,m_pVT->GetIterator()); +IFX_Edit_Iterator* CFX_Edit::GetIterator() { + if (!m_pIterator) + m_pIterator = new CFX_Edit_Iterator(this, m_pVT->GetIterator()); - return m_pIterator; + return m_pIterator; } -IPDF_VariableText * CFX_Edit::GetVariableText() -{ - return m_pVT; +IPDF_VariableText* CFX_Edit::GetVariableText() { + return m_pVT; } -IFX_Edit_FontMap* CFX_Edit::GetFontMap() -{ - if (m_pVTProvide) - return m_pVTProvide->GetFontMap(); +IFX_Edit_FontMap* CFX_Edit::GetFontMap() { + if (m_pVTProvide) + return m_pVTProvide->GetFontMap(); - return NULL; + return NULL; } -void CFX_Edit::SetPlateRect(const CPDF_Rect & rect, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetPlateRect(rect); - m_ptScrollPos = CPDF_Point(rect.left,rect.top); - if (bPaint) Paint(); +void CFX_Edit::SetPlateRect(const CPDF_Rect& rect, FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetPlateRect(rect); + m_ptScrollPos = CPDF_Point(rect.left, rect.top); + if (bPaint) + Paint(); } -void CFX_Edit::SetAlignmentH(int32_t nFormat/* =0 */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetAlignment(nFormat); - if (bPaint) Paint(); +void CFX_Edit::SetAlignmentH(int32_t nFormat /* =0 */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetAlignment(nFormat); + if (bPaint) + Paint(); } -void CFX_Edit::SetAlignmentV(int32_t nFormat/* =0 */, FX_BOOL bPaint/* = TRUE*/) -{ - m_nAlignment = nFormat; - if (bPaint) Paint(); +void CFX_Edit::SetAlignmentV(int32_t nFormat /* =0 */, + FX_BOOL bPaint /* = TRUE*/) { + m_nAlignment = nFormat; + if (bPaint) + Paint(); } -void CFX_Edit::SetPasswordChar(FX_WORD wSubWord/* ='*' */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetPasswordChar(wSubWord); - if (bPaint) Paint(); +void CFX_Edit::SetPasswordChar(FX_WORD wSubWord /* ='*' */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetPasswordChar(wSubWord); + if (bPaint) + Paint(); } -void CFX_Edit::SetLimitChar(int32_t nLimitChar/* =0 */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetLimitChar(nLimitChar); - if (bPaint) Paint(); +void CFX_Edit::SetLimitChar(int32_t nLimitChar /* =0 */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetLimitChar(nLimitChar); + if (bPaint) + Paint(); } -void CFX_Edit::SetCharArray(int32_t nCharArray/* =0 */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetCharArray(nCharArray); - if (bPaint) Paint(); +void CFX_Edit::SetCharArray(int32_t nCharArray /* =0 */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetCharArray(nCharArray); + if (bPaint) + Paint(); } -void CFX_Edit::SetCharSpace(FX_FLOAT fCharSpace/* =0.0f */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetCharSpace(fCharSpace); - if (bPaint) Paint(); +void CFX_Edit::SetCharSpace(FX_FLOAT fCharSpace /* =0.0f */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetCharSpace(fCharSpace); + if (bPaint) + Paint(); } -void CFX_Edit::SetHorzScale(int32_t nHorzScale/* =100 */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetHorzScale(nHorzScale); - if (bPaint) Paint(); +void CFX_Edit::SetHorzScale(int32_t nHorzScale /* =100 */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetHorzScale(nHorzScale); + if (bPaint) + Paint(); } -void CFX_Edit::SetMultiLine(FX_BOOL bMultiLine/* =TRUE */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetMultiLine(bMultiLine); - if (bPaint) Paint(); +void CFX_Edit::SetMultiLine(FX_BOOL bMultiLine /* =TRUE */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetMultiLine(bMultiLine); + if (bPaint) + Paint(); } -void CFX_Edit::SetAutoReturn(FX_BOOL bAuto/* =TRUE */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetAutoReturn(bAuto); - if (bPaint) Paint(); +void CFX_Edit::SetAutoReturn(FX_BOOL bAuto /* =TRUE */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetAutoReturn(bAuto); + if (bPaint) + Paint(); } -void CFX_Edit::SetLineLeading(FX_FLOAT fLineLeading/* =TRUE */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetLineLeading(fLineLeading); - if (bPaint) Paint(); +void CFX_Edit::SetLineLeading(FX_FLOAT fLineLeading /* =TRUE */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetLineLeading(fLineLeading); + if (bPaint) + Paint(); } -void CFX_Edit::SetAutoFontSize(FX_BOOL bAuto/* =TRUE */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetAutoFontSize(bAuto); - if (bPaint) Paint(); +void CFX_Edit::SetAutoFontSize(FX_BOOL bAuto /* =TRUE */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetAutoFontSize(bAuto); + if (bPaint) + Paint(); } -void CFX_Edit::SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetFontSize(fFontSize); - if (bPaint) Paint(); +void CFX_Edit::SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetFontSize(fFontSize); + if (bPaint) + Paint(); } -void CFX_Edit::SetAutoScroll(FX_BOOL bAuto/* =TRUE */, FX_BOOL bPaint/* = TRUE*/) -{ - m_bEnableScroll = bAuto; - if (bPaint) Paint(); +void CFX_Edit::SetAutoScroll(FX_BOOL bAuto /* =TRUE */, + FX_BOOL bPaint /* = TRUE*/) { + m_bEnableScroll = bAuto; + if (bPaint) + Paint(); } -void CFX_Edit::SetTextOverflow(FX_BOOL bAllowed /*= FALSE*/, FX_BOOL bPaint/* = TRUE*/) -{ - m_bEnableOverflow = bAllowed; - if (bPaint) Paint(); +void CFX_Edit::SetTextOverflow(FX_BOOL bAllowed /*= FALSE*/, + FX_BOOL bPaint /* = TRUE*/) { + m_bEnableOverflow = bAllowed; + if (bPaint) + Paint(); } -void CFX_Edit::SetSel(int32_t nStartChar,int32_t nEndChar) -{ - if (m_pVT->IsValid()) - { - if (nStartChar == 0 && nEndChar < 0) - { - SelectAll(); - } - else if (nStartChar < 0) - { - SelectNone(); - } - else - { - if (nStartChar < nEndChar) - { - SetSel(m_pVT->WordIndexToWordPlace(nStartChar),m_pVT->WordIndexToWordPlace(nEndChar)); - } - else - { - SetSel(m_pVT->WordIndexToWordPlace(nEndChar),m_pVT->WordIndexToWordPlace(nStartChar)); - } - } +void CFX_Edit::SetSel(int32_t nStartChar, int32_t nEndChar) { + if (m_pVT->IsValid()) { + if (nStartChar == 0 && nEndChar < 0) { + SelectAll(); + } else if (nStartChar < 0) { + SelectNone(); + } else { + if (nStartChar < nEndChar) { + SetSel(m_pVT->WordIndexToWordPlace(nStartChar), + m_pVT->WordIndexToWordPlace(nEndChar)); + } else { + SetSel(m_pVT->WordIndexToWordPlace(nEndChar), + m_pVT->WordIndexToWordPlace(nStartChar)); + } } + } } -void CFX_Edit::SetSel(const CPVT_WordPlace & begin,const CPVT_WordPlace & end) -{ - if (m_pVT->IsValid()) - { - SelectNone(); +void CFX_Edit::SetSel(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) { + if (m_pVT->IsValid()) { + SelectNone(); - m_SelState.Set(begin,end); + m_SelState.Set(begin, end); - SetCaret(m_SelState.EndPos); + SetCaret(m_SelState.EndPos); - if (m_SelState.IsExist()) - { - ScrollToCaret(); - CPVT_WordRange wr(m_SelState.BeginPos,m_SelState.EndPos); - Refresh(RP_OPTIONAL,&wr); - SetCaretInfo(); - } - else - { - ScrollToCaret(); - SetCaretInfo(); - } + if (m_SelState.IsExist()) { + ScrollToCaret(); + CPVT_WordRange wr(m_SelState.BeginPos, m_SelState.EndPos); + Refresh(RP_OPTIONAL, &wr); + SetCaretInfo(); + } else { + ScrollToCaret(); + SetCaretInfo(); } + } } -void CFX_Edit::GetSel(int32_t & nStartChar, int32_t & nEndChar) const -{ - nStartChar = -1; - nEndChar = -1; +void CFX_Edit::GetSel(int32_t& nStartChar, int32_t& nEndChar) const { + nStartChar = -1; + nEndChar = -1; - if (m_pVT->IsValid()) - { - if (m_SelState.IsExist()) - { - if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)<0) - { - nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos); - nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos); - } - else - { - nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos); - nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos); - } - } - else - { - nStartChar = m_pVT->WordPlaceToWordIndex(m_wpCaret); - nEndChar = m_pVT->WordPlaceToWordIndex(m_wpCaret); - } + if (m_pVT->IsValid()) { + if (m_SelState.IsExist()) { + if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) < 0) { + nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos); + nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos); + } else { + nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos); + nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos); + } + } else { + nStartChar = m_pVT->WordPlaceToWordIndex(m_wpCaret); + nEndChar = m_pVT->WordPlaceToWordIndex(m_wpCaret); } + } } -int32_t CFX_Edit::GetCaret() const -{ - if (m_pVT->IsValid()) - return m_pVT->WordPlaceToWordIndex(m_wpCaret); +int32_t CFX_Edit::GetCaret() const { + if (m_pVT->IsValid()) + return m_pVT->WordPlaceToWordIndex(m_wpCaret); - return -1; + return -1; } -CPVT_WordPlace CFX_Edit::GetCaretWordPlace() const -{ - return m_wpCaret; +CPVT_WordPlace CFX_Edit::GetCaretWordPlace() const { + return m_wpCaret; } -CFX_WideString CFX_Edit::GetText() const -{ - CFX_WideString swRet; +CFX_WideString CFX_Edit::GetText() const { + CFX_WideString swRet; - if (m_pVT->IsValid()) - { - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - FX_BOOL bRich = m_pVT->IsRichText(); + if (m_pVT->IsValid()) { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + FX_BOOL bRich = m_pVT->IsRichText(); - pIterator->SetAt(0); + pIterator->SetAt(0); - CPVT_Word wordinfo; - CPVT_WordPlace oldplace = pIterator->GetAt(); - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - - if (pIterator->GetWord(wordinfo)) - { - if (bRich) - { - swRet += wordinfo.Word; - } - else - { - swRet += wordinfo.Word; - } - } + CPVT_Word wordinfo; + CPVT_WordPlace oldplace = pIterator->GetAt(); + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); - if (oldplace.SecCmp(place) != 0) - { - swRet += 0x0D; - swRet += 0x0A; - } + if (pIterator->GetWord(wordinfo)) { + if (bRich) { + swRet += wordinfo.Word; + } else { + swRet += wordinfo.Word; + } + } - oldplace = place; - } + if (oldplace.SecCmp(place) != 0) { + swRet += 0x0D; + swRet += 0x0A; } + + oldplace = place; + } } + } - return swRet; + return swRet; } -CFX_WideString CFX_Edit::GetRangeText(const CPVT_WordRange & range) const -{ - CFX_WideString swRet; +CFX_WideString CFX_Edit::GetRangeText(const CPVT_WordRange& range) const { + CFX_WideString swRet; - if (m_pVT->IsValid()) - { - FX_BOOL bRich = m_pVT->IsRichText(); + if (m_pVT->IsValid()) { + FX_BOOL bRich = m_pVT->IsRichText(); - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - CPVT_WordRange wrTemp = range; - m_pVT->UpdateWordPlace(wrTemp.BeginPos); - m_pVT->UpdateWordPlace(wrTemp.EndPos); - pIterator->SetAt(wrTemp.BeginPos); + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + CPVT_WordRange wrTemp = range; + m_pVT->UpdateWordPlace(wrTemp.BeginPos); + m_pVT->UpdateWordPlace(wrTemp.EndPos); + pIterator->SetAt(wrTemp.BeginPos); - CPVT_Word wordinfo; - CPVT_WordPlace oldplace = wrTemp.BeginPos; - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - if (place.WordCmp(wrTemp.EndPos) > 0)break; - - if (pIterator->GetWord(wordinfo)) - { - if (bRich) - { - swRet += wordinfo.Word; - } - else - { - swRet += wordinfo.Word; - } - } + CPVT_Word wordinfo; + CPVT_WordPlace oldplace = wrTemp.BeginPos; + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + if (place.WordCmp(wrTemp.EndPos) > 0) + break; - if (oldplace.SecCmp(place) != 0) - { - swRet += 0x0D; - swRet += 0x0A; - } + if (pIterator->GetWord(wordinfo)) { + if (bRich) { + swRet += wordinfo.Word; + } else { + swRet += wordinfo.Word; + } + } - oldplace = place; - } + if (oldplace.SecCmp(place) != 0) { + swRet += 0x0D; + swRet += 0x0A; } + + oldplace = place; + } } + } - return swRet; + return swRet; } -CFX_WideString CFX_Edit::GetSelText() const -{ - return GetRangeText(m_SelState.ConvertToWordRange()); +CFX_WideString CFX_Edit::GetSelText() const { + return GetRangeText(m_SelState.ConvertToWordRange()); } -int32_t CFX_Edit::GetTotalWords() const -{ - return m_pVT->GetTotalWords(); +int32_t CFX_Edit::GetTotalWords() const { + return m_pVT->GetTotalWords(); } -int32_t CFX_Edit::GetTotalLines() const -{ - int32_t nLines = 0; +int32_t CFX_Edit::GetTotalLines() const { + int32_t nLines = 0; - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - pIterator->SetAt(0); - while (pIterator->NextLine()) - nLines++; - } + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + pIterator->SetAt(0); + while (pIterator->NextLine()) + nLines++; + } - return nLines+1; + return nLines + 1; } -CPVT_WordRange CFX_Edit::GetSelectWordRange() const -{ - return m_SelState.ConvertToWordRange(); +CPVT_WordRange CFX_Edit::GetSelectWordRange() const { + return m_SelState.ConvertToWordRange(); } -CPVT_WordRange CFX_Edit::CombineWordRange(const CPVT_WordRange & wr1, const CPVT_WordRange & wr2) -{ - CPVT_WordRange wrRet; +CPVT_WordRange CFX_Edit::CombineWordRange(const CPVT_WordRange& wr1, + const CPVT_WordRange& wr2) { + CPVT_WordRange wrRet; - if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) - { - wrRet.BeginPos = wr1.BeginPos; - } - else - { - wrRet.BeginPos = wr2.BeginPos; - } + if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) { + wrRet.BeginPos = wr1.BeginPos; + } else { + wrRet.BeginPos = wr2.BeginPos; + } - if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) - { - wrRet.EndPos = wr2.EndPos; - } - else - { - wrRet.EndPos = wr1.EndPos; - } + if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) { + wrRet.EndPos = wr2.EndPos; + } else { + wrRet.EndPos = wr1.EndPos; + } - return wrRet; + return wrRet; } -FX_BOOL CFX_Edit::IsRichText() const -{ - return m_pVT->IsRichText(); +FX_BOOL CFX_Edit::IsRichText() const { + return m_pVT->IsRichText(); } -void CFX_Edit::SetRichText(FX_BOOL bRichText/* =TRUE */, FX_BOOL bPaint/* = TRUE*/) -{ - m_pVT->SetRichText(bRichText); - if (bPaint) Paint(); +void CFX_Edit::SetRichText(FX_BOOL bRichText /* =TRUE */, + FX_BOOL bPaint /* = TRUE*/) { + m_pVT->SetRichText(bRichText); + if (bPaint) + Paint(); } -FX_BOOL CFX_Edit::SetRichFontIndex(int32_t nFontIndex) -{ - CPVT_WordProps WordProps; - WordProps.nFontIndex = nFontIndex; - return SetRichTextProps(EP_FONTINDEX,NULL,&WordProps); +FX_BOOL CFX_Edit::SetRichFontIndex(int32_t nFontIndex) { + CPVT_WordProps WordProps; + WordProps.nFontIndex = nFontIndex; + return SetRichTextProps(EP_FONTINDEX, NULL, &WordProps); } -FX_BOOL CFX_Edit::SetRichFontSize(FX_FLOAT fFontSize) -{ - CPVT_WordProps WordProps; - WordProps.fFontSize = fFontSize; - return SetRichTextProps(EP_FONTSIZE,NULL,&WordProps); +FX_BOOL CFX_Edit::SetRichFontSize(FX_FLOAT fFontSize) { + CPVT_WordProps WordProps; + WordProps.fFontSize = fFontSize; + return SetRichTextProps(EP_FONTSIZE, NULL, &WordProps); } -FX_BOOL CFX_Edit::SetRichTextColor(FX_COLORREF dwColor) -{ - CPVT_WordProps WordProps; - WordProps.dwWordColor = dwColor; - return SetRichTextProps(EP_WORDCOLOR,NULL,&WordProps); +FX_BOOL CFX_Edit::SetRichTextColor(FX_COLORREF dwColor) { + CPVT_WordProps WordProps; + WordProps.dwWordColor = dwColor; + return SetRichTextProps(EP_WORDCOLOR, NULL, &WordProps); } -FX_BOOL CFX_Edit::SetRichTextScript(int32_t nScriptType) -{ - CPVT_WordProps WordProps; - WordProps.nScriptType = nScriptType; - return SetRichTextProps(EP_SCRIPTTYPE,NULL,&WordProps); +FX_BOOL CFX_Edit::SetRichTextScript(int32_t nScriptType) { + CPVT_WordProps WordProps; + WordProps.nScriptType = nScriptType; + return SetRichTextProps(EP_SCRIPTTYPE, NULL, &WordProps); } -FX_BOOL CFX_Edit::SetRichTextBold(FX_BOOL bBold) -{ - CPVT_WordProps WordProps; - if (bBold) - WordProps.nWordStyle |= PVTWORD_STYLE_BOLD; - return SetRichTextProps(EP_BOLD,NULL,&WordProps); +FX_BOOL CFX_Edit::SetRichTextBold(FX_BOOL bBold) { + CPVT_WordProps WordProps; + if (bBold) + WordProps.nWordStyle |= PVTWORD_STYLE_BOLD; + return SetRichTextProps(EP_BOLD, NULL, &WordProps); } -FX_BOOL CFX_Edit::SetRichTextItalic(FX_BOOL bItalic) -{ - CPVT_WordProps WordProps; - if (bItalic) - WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC; - return SetRichTextProps(EP_ITALIC,NULL,&WordProps); +FX_BOOL CFX_Edit::SetRichTextItalic(FX_BOOL bItalic) { + CPVT_WordProps WordProps; + if (bItalic) + WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC; + return SetRichTextProps(EP_ITALIC, NULL, &WordProps); } -FX_BOOL CFX_Edit::SetRichTextUnderline(FX_BOOL bUnderline) -{ - CPVT_WordProps WordProps; - if (bUnderline) - WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE; - return SetRichTextProps(EP_UNDERLINE,NULL,&WordProps); +FX_BOOL CFX_Edit::SetRichTextUnderline(FX_BOOL bUnderline) { + CPVT_WordProps WordProps; + if (bUnderline) + WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE; + return SetRichTextProps(EP_UNDERLINE, NULL, &WordProps); } -FX_BOOL CFX_Edit::SetRichTextCrossout(FX_BOOL bCrossout) -{ - CPVT_WordProps WordProps; - if (bCrossout) - WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT; - return SetRichTextProps(EP_CROSSOUT,NULL,&WordProps); +FX_BOOL CFX_Edit::SetRichTextCrossout(FX_BOOL bCrossout) { + CPVT_WordProps WordProps; + if (bCrossout) + WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT; + return SetRichTextProps(EP_CROSSOUT, NULL, &WordProps); } -FX_BOOL CFX_Edit::SetRichTextCharSpace(FX_FLOAT fCharSpace) -{ - CPVT_WordProps WordProps; - WordProps.fCharSpace = fCharSpace; - return SetRichTextProps(EP_CHARSPACE,NULL,&WordProps); +FX_BOOL CFX_Edit::SetRichTextCharSpace(FX_FLOAT fCharSpace) { + CPVT_WordProps WordProps; + WordProps.fCharSpace = fCharSpace; + return SetRichTextProps(EP_CHARSPACE, NULL, &WordProps); } -FX_BOOL CFX_Edit::SetRichTextHorzScale(int32_t nHorzScale /*= 100*/) -{ - CPVT_WordProps WordProps; - WordProps.nHorzScale = nHorzScale; - return SetRichTextProps(EP_HORZSCALE,NULL,&WordProps); +FX_BOOL CFX_Edit::SetRichTextHorzScale(int32_t nHorzScale /*= 100*/) { + CPVT_WordProps WordProps; + WordProps.nHorzScale = nHorzScale; + return SetRichTextProps(EP_HORZSCALE, NULL, &WordProps); } -FX_BOOL CFX_Edit::SetRichTextLineLeading(FX_FLOAT fLineLeading) -{ - CPVT_SecProps SecProps; - SecProps.fLineLeading = fLineLeading; - return SetRichTextProps(EP_LINELEADING,&SecProps,NULL); +FX_BOOL CFX_Edit::SetRichTextLineLeading(FX_FLOAT fLineLeading) { + CPVT_SecProps SecProps; + SecProps.fLineLeading = fLineLeading; + return SetRichTextProps(EP_LINELEADING, &SecProps, NULL); } -FX_BOOL CFX_Edit::SetRichTextLineIndent(FX_FLOAT fLineIndent) -{ - CPVT_SecProps SecProps; - SecProps.fLineIndent = fLineIndent; - return SetRichTextProps(EP_LINEINDENT,&SecProps,NULL); +FX_BOOL CFX_Edit::SetRichTextLineIndent(FX_FLOAT fLineIndent) { + CPVT_SecProps SecProps; + SecProps.fLineIndent = fLineIndent; + return SetRichTextProps(EP_LINEINDENT, &SecProps, NULL); } -FX_BOOL CFX_Edit::SetRichTextAlignment(int32_t nAlignment) -{ - CPVT_SecProps SecProps; - SecProps.nAlignment = nAlignment; - return SetRichTextProps(EP_ALIGNMENT,&SecProps,NULL); +FX_BOOL CFX_Edit::SetRichTextAlignment(int32_t nAlignment) { + CPVT_SecProps SecProps; + SecProps.nAlignment = nAlignment; + return SetRichTextProps(EP_ALIGNMENT, &SecProps, NULL); } -FX_BOOL CFX_Edit::SetRichTextProps(EDIT_PROPS_E eProps, const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps) -{ - FX_BOOL bSet = FALSE; - FX_BOOL bSet1,bSet2; - if (m_pVT->IsValid() && m_pVT->IsRichText()) - { - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange(); +FX_BOOL CFX_Edit::SetRichTextProps(EDIT_PROPS_E eProps, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps) { + FX_BOOL bSet = FALSE; + FX_BOOL bSet1, bSet2; + if (m_pVT->IsValid() && m_pVT->IsRichText()) { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange(); - m_pVT->UpdateWordPlace(wrTemp.BeginPos); - m_pVT->UpdateWordPlace(wrTemp.EndPos); - pIterator->SetAt(wrTemp.BeginPos); + m_pVT->UpdateWordPlace(wrTemp.BeginPos); + m_pVT->UpdateWordPlace(wrTemp.EndPos); + pIterator->SetAt(wrTemp.BeginPos); - BeginGroupUndo(L"");; + BeginGroupUndo(L""); + ; - bSet = SetSecProps(eProps,wrTemp.BeginPos,pSecProps,pWordProps,wrTemp,TRUE); + bSet = SetSecProps(eProps, wrTemp.BeginPos, pSecProps, pWordProps, wrTemp, + TRUE); - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - if (place.WordCmp(wrTemp.EndPos) > 0) break; - bSet1 = SetSecProps(eProps,place,pSecProps,pWordProps,wrTemp,TRUE); - bSet2 = SetWordProps(eProps,place,pWordProps,wrTemp,TRUE); + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + if (place.WordCmp(wrTemp.EndPos) > 0) + break; + bSet1 = SetSecProps(eProps, place, pSecProps, pWordProps, wrTemp, TRUE); + bSet2 = SetWordProps(eProps, place, pWordProps, wrTemp, TRUE); - if (!bSet) - bSet = (bSet1 || bSet2); - } + if (!bSet) + bSet = (bSet1 || bSet2); + } - EndGroupUndo(); + EndGroupUndo(); - if (bSet) - { - PaintSetProps(eProps,wrTemp); - } - } + if (bSet) { + PaintSetProps(eProps, wrTemp); + } } + } - return bSet; + return bSet; } -void CFX_Edit::PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange & wr) -{ - switch(eProps) - { +void CFX_Edit::PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange& wr) { + switch (eProps) { case EP_LINELEADING: case EP_LINEINDENT: case EP_ALIGNMENT: - RearrangePart(wr); - ScrollToCaret(); - Refresh(RP_ANALYSE); - SetCaretOrigin(); - SetCaretInfo(); - break; + RearrangePart(wr); + ScrollToCaret(); + Refresh(RP_ANALYSE); + SetCaretOrigin(); + SetCaretInfo(); + break; case EP_WORDCOLOR: case EP_UNDERLINE: case EP_CROSSOUT: - Refresh(RP_OPTIONAL,&wr); - break; + Refresh(RP_OPTIONAL, &wr); + break; case EP_FONTINDEX: case EP_FONTSIZE: case EP_SCRIPTTYPE: @@ -1503,2053 +1320,1814 @@ void CFX_Edit::PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange & wr) case EP_HORZSCALE: case EP_BOLD: case EP_ITALIC: - RearrangePart(wr); - ScrollToCaret(); - - CPVT_WordRange wrRefresh(m_pVT->GetSectionBeginPlace(wr.BeginPos), - m_pVT->GetSectionEndPlace(wr.EndPos)); - Refresh(RP_ANALYSE,&wrRefresh); - - SetCaretOrigin(); - SetCaretInfo(); - break; - } -} - -FX_BOOL CFX_Edit::SetSecProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place, - const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps, - const CPVT_WordRange & wr, FX_BOOL bAddUndo) -{ - if (m_pVT->IsValid() && m_pVT->IsRichText()) - { - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - FX_BOOL bSet = FALSE; - CPVT_Section secinfo; - CPVT_Section OldSecinfo; - - CPVT_WordPlace oldplace = pIterator->GetAt(); - - if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT || eProps == EP_ALIGNMENT) - { - if (pSecProps) - { - pIterator->SetAt(place); - if (pIterator->GetSection(secinfo)) - { - if (bAddUndo) OldSecinfo = secinfo; - - switch(eProps) - { - case EP_LINELEADING: - if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading,pSecProps->fLineLeading)) - { - secinfo.SecProps.fLineLeading = pSecProps->fLineLeading; - bSet = TRUE; - } - break; - case EP_LINEINDENT: - if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent,pSecProps->fLineIndent)) - { - secinfo.SecProps.fLineIndent = pSecProps->fLineIndent; - bSet = TRUE; - } - break; - case EP_ALIGNMENT: - if (secinfo.SecProps.nAlignment != pSecProps->nAlignment) - { - secinfo.SecProps.nAlignment = pSecProps->nAlignment; - bSet = TRUE; - } - break; - default: - break; - } - } + RearrangePart(wr); + ScrollToCaret(); + + CPVT_WordRange wrRefresh(m_pVT->GetSectionBeginPlace(wr.BeginPos), + m_pVT->GetSectionEndPlace(wr.EndPos)); + Refresh(RP_ANALYSE, &wrRefresh); + + SetCaretOrigin(); + SetCaretInfo(); + break; + } +} + +FX_BOOL CFX_Edit::SetSecProps(EDIT_PROPS_E eProps, + const CPVT_WordPlace& place, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps, + const CPVT_WordRange& wr, + FX_BOOL bAddUndo) { + if (m_pVT->IsValid() && m_pVT->IsRichText()) { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + FX_BOOL bSet = FALSE; + CPVT_Section secinfo; + CPVT_Section OldSecinfo; + + CPVT_WordPlace oldplace = pIterator->GetAt(); + + if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT || + eProps == EP_ALIGNMENT) { + if (pSecProps) { + pIterator->SetAt(place); + if (pIterator->GetSection(secinfo)) { + if (bAddUndo) + OldSecinfo = secinfo; + + switch (eProps) { + case EP_LINELEADING: + if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading, + pSecProps->fLineLeading)) { + secinfo.SecProps.fLineLeading = pSecProps->fLineLeading; + bSet = TRUE; } - } - else - { - if (pWordProps && place == m_pVT->GetSectionBeginPlace(place)) - { - pIterator->SetAt(place); - if (pIterator->GetSection(secinfo)) - { - if (bAddUndo) OldSecinfo = secinfo; - - switch(eProps) - { - case EP_FONTINDEX: - if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex) - { - secinfo.WordProps.nFontIndex = pWordProps->nFontIndex; - bSet = TRUE; - } - break; - case EP_FONTSIZE: - if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize,pWordProps->fFontSize)) - { - secinfo.WordProps.fFontSize = pWordProps->fFontSize; - bSet = TRUE; - } - break; - case EP_WORDCOLOR: - if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor) - { - secinfo.WordProps.dwWordColor = pWordProps->dwWordColor; - bSet = TRUE; - } - break; - case EP_SCRIPTTYPE: - if (secinfo.WordProps.nScriptType != pWordProps->nScriptType) - { - secinfo.WordProps.nScriptType = pWordProps->nScriptType; - bSet = TRUE; - } - break; - case EP_CHARSPACE: - if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace,pWordProps->fCharSpace)) - { - secinfo.WordProps.fCharSpace = pWordProps->fCharSpace; - bSet = TRUE; - } - break; - case EP_HORZSCALE: - if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale) - { - secinfo.WordProps.nHorzScale = pWordProps->nHorzScale; - bSet = TRUE; - } - break; - case EP_UNDERLINE: - if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) - { - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) == 0) - { - secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE; - bSet = TRUE; - } - } - else - { - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) != 0) - { - secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE; - bSet = TRUE; - } - } - break; - case EP_CROSSOUT: - if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) - { - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == 0) - { - secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT; - bSet = TRUE; - } - } - else - { - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != 0) - { - secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT; - bSet = TRUE; - } - } - break; - case EP_BOLD: - if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) - { - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) - { - secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD; - bSet = TRUE; - } - } - else - { - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) - { - secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD; - bSet = TRUE; - } - } - break; - case EP_ITALIC: - if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) - { - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0) - { - secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC; - bSet = TRUE; - } - } - else - { - if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0) - { - secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC; - bSet = TRUE; - } - } - break; - default: - break; - } - } + break; + case EP_LINEINDENT: + if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent, + pSecProps->fLineIndent)) { + secinfo.SecProps.fLineIndent = pSecProps->fLineIndent; + bSet = TRUE; } + break; + case EP_ALIGNMENT: + if (secinfo.SecProps.nAlignment != pSecProps->nAlignment) { + secinfo.SecProps.nAlignment = pSecProps->nAlignment; + bSet = TRUE; + } + break; + default: + break; } - - if (bSet) - { - pIterator->SetSection(secinfo); - - if (bAddUndo && m_bEnableUndo) - { - AddEditUndoItem(new CFXEU_SetSecProps - (this,place,eProps,OldSecinfo.SecProps,OldSecinfo.WordProps,secinfo.SecProps,secinfo.WordProps,wr)); + } + } + } else { + if (pWordProps && place == m_pVT->GetSectionBeginPlace(place)) { + pIterator->SetAt(place); + if (pIterator->GetSection(secinfo)) { + if (bAddUndo) + OldSecinfo = secinfo; + + switch (eProps) { + case EP_FONTINDEX: + if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex) { + secinfo.WordProps.nFontIndex = pWordProps->nFontIndex; + bSet = TRUE; + } + break; + case EP_FONTSIZE: + if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize, + pWordProps->fFontSize)) { + secinfo.WordProps.fFontSize = pWordProps->fFontSize; + bSet = TRUE; + } + break; + case EP_WORDCOLOR: + if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor) { + secinfo.WordProps.dwWordColor = pWordProps->dwWordColor; + bSet = TRUE; + } + break; + case EP_SCRIPTTYPE: + if (secinfo.WordProps.nScriptType != pWordProps->nScriptType) { + secinfo.WordProps.nScriptType = pWordProps->nScriptType; + bSet = TRUE; + } + break; + case EP_CHARSPACE: + if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace, + pWordProps->fCharSpace)) { + secinfo.WordProps.fCharSpace = pWordProps->fCharSpace; + bSet = TRUE; + } + break; + case EP_HORZSCALE: + if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale) { + secinfo.WordProps.nHorzScale = pWordProps->nHorzScale; + bSet = TRUE; + } + break; + case EP_UNDERLINE: + if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) { + if ((secinfo.WordProps.nWordStyle & + PVTWORD_STYLE_UNDERLINE) == 0) { + secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE; + bSet = TRUE; + } + } else { + if ((secinfo.WordProps.nWordStyle & + PVTWORD_STYLE_UNDERLINE) != 0) { + secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE; + bSet = TRUE; + } + } + break; + case EP_CROSSOUT: + if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) { + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == + 0) { + secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT; + bSet = TRUE; + } + } else { + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != + 0) { + secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT; + bSet = TRUE; + } + } + break; + case EP_BOLD: + if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) { + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == + 0) { + secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD; + bSet = TRUE; + } + } else { + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != + 0) { + secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD; + bSet = TRUE; + } + } + break; + case EP_ITALIC: + if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) { + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == + 0) { + secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC; + bSet = TRUE; + } + } else { + if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != + 0) { + secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC; + bSet = TRUE; + } } + break; + default: + break; } + } + } + } - pIterator->SetAt(oldplace); + if (bSet) { + pIterator->SetSection(secinfo); - return bSet; + if (bAddUndo && m_bEnableUndo) { + AddEditUndoItem(new CFXEU_SetSecProps( + this, place, eProps, OldSecinfo.SecProps, OldSecinfo.WordProps, + secinfo.SecProps, secinfo.WordProps, wr)); } + } + + pIterator->SetAt(oldplace); + + return bSet; } + } - return FALSE; + return FALSE; } -FX_BOOL CFX_Edit::SetWordProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place, - const CPVT_WordProps * pWordProps, const CPVT_WordRange & wr, FX_BOOL bAddUndo) -{ - if (m_pVT->IsValid() && m_pVT->IsRichText()) - { - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - FX_BOOL bSet = FALSE; - CPVT_Word wordinfo; - CPVT_Word OldWordinfo; - - CPVT_WordPlace oldplace = pIterator->GetAt(); - - if (pWordProps) - { - pIterator->SetAt(place); - if (pIterator->GetWord(wordinfo)) - { - if (bAddUndo) OldWordinfo = wordinfo; - - switch(eProps) - { - case EP_FONTINDEX: - if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex) - { - if (IFX_Edit_FontMap* pFontMap = GetFontMap()) - { - wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex(wordinfo.Word,wordinfo.nCharset,pWordProps->nFontIndex); - } - bSet = TRUE; - } - break; - case EP_FONTSIZE: - if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize,pWordProps->fFontSize)) - { - wordinfo.WordProps.fFontSize = pWordProps->fFontSize; - bSet = TRUE; - } - break; - case EP_WORDCOLOR: - if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor) - { - wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor; - bSet = TRUE; - } - break; - case EP_SCRIPTTYPE: - if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType) - { - wordinfo.WordProps.nScriptType = pWordProps->nScriptType; - bSet = TRUE; - } - break; - case EP_CHARSPACE: - if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace,pWordProps->fCharSpace)) - { - wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace; - bSet = TRUE; - } - break; - case EP_HORZSCALE: - if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale) - { - wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale; - bSet = TRUE; - } - break; - case EP_UNDERLINE: - if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) - { - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) == 0) - { - wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE; - bSet = TRUE; - } - } - else - { - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) != 0) - { - wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE; - bSet = TRUE; - } - } - break; - case EP_CROSSOUT: - if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) - { - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == 0) - { - wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT; - bSet = TRUE; - } - } - else - { - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != 0) - { - wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT; - bSet = TRUE; - } - } - break; - case EP_BOLD: - if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) - { - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) - { - wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD; - bSet = TRUE; - } - } - else - { - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) - { - wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD; - bSet = TRUE; - } - } - break; - case EP_ITALIC: - if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) - { - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0) - { - wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC; - bSet = TRUE; - } - } - else - { - if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0) - { - wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC; - bSet = TRUE; - } - } - break; - default: - break; - } - } - } +FX_BOOL CFX_Edit::SetWordProps(EDIT_PROPS_E eProps, + const CPVT_WordPlace& place, + const CPVT_WordProps* pWordProps, + const CPVT_WordRange& wr, + FX_BOOL bAddUndo) { + if (m_pVT->IsValid() && m_pVT->IsRichText()) { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + FX_BOOL bSet = FALSE; + CPVT_Word wordinfo; + CPVT_Word OldWordinfo; - if (bSet) - { - pIterator->SetWord(wordinfo); + CPVT_WordPlace oldplace = pIterator->GetAt(); - if (bAddUndo && m_bEnableUndo) - { - AddEditUndoItem(new CFXEU_SetWordProps - (this,place,eProps,OldWordinfo.WordProps,wordinfo.WordProps,wr)); + if (pWordProps) { + pIterator->SetAt(place); + if (pIterator->GetWord(wordinfo)) { + if (bAddUndo) + OldWordinfo = wordinfo; + + switch (eProps) { + case EP_FONTINDEX: + if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex) { + if (IFX_Edit_FontMap* pFontMap = GetFontMap()) { + wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex( + wordinfo.Word, wordinfo.nCharset, pWordProps->nFontIndex); } - } + bSet = TRUE; + } + break; + case EP_FONTSIZE: + if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize, + pWordProps->fFontSize)) { + wordinfo.WordProps.fFontSize = pWordProps->fFontSize; + bSet = TRUE; + } + break; + case EP_WORDCOLOR: + if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor) { + wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor; + bSet = TRUE; + } + break; + case EP_SCRIPTTYPE: + if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType) { + wordinfo.WordProps.nScriptType = pWordProps->nScriptType; + bSet = TRUE; + } + break; + case EP_CHARSPACE: + if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace, + pWordProps->fCharSpace)) { + wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace; + bSet = TRUE; + } + break; + case EP_HORZSCALE: + if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale) { + wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale; + bSet = TRUE; + } + break; + case EP_UNDERLINE: + if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) { + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) == + 0) { + wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE; + bSet = TRUE; + } + } else { + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) != + 0) { + wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE; + bSet = TRUE; + } + } + break; + case EP_CROSSOUT: + if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) { + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == + 0) { + wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT; + bSet = TRUE; + } + } else { + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != + 0) { + wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT; + bSet = TRUE; + } + } + break; + case EP_BOLD: + if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) { + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) { + wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD; + bSet = TRUE; + } + } else { + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) { + wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD; + bSet = TRUE; + } + } + break; + case EP_ITALIC: + if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) { + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == + 0) { + wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC; + bSet = TRUE; + } + } else { + if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != + 0) { + wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC; + bSet = TRUE; + } + } + break; + default: + break; + } + } + } + + if (bSet) { + pIterator->SetWord(wordinfo); - pIterator->SetAt(oldplace); - return bSet; + if (bAddUndo && m_bEnableUndo) { + AddEditUndoItem(new CFXEU_SetWordProps(this, place, eProps, + OldWordinfo.WordProps, + wordinfo.WordProps, wr)); } + } + + pIterator->SetAt(oldplace); + return bSet; } + } - return FALSE; + return FALSE; } -void CFX_Edit::SetText(const FX_WCHAR* text,int32_t charset /*= DEFAULT_CHARSET*/, - const CPVT_SecProps * pSecProps /*= NULL*/,const CPVT_WordProps * pWordProps /*= NULL*/) -{ - SetText(text,charset,pSecProps,pWordProps,TRUE,TRUE); +void CFX_Edit::SetText(const FX_WCHAR* text, + int32_t charset /*= DEFAULT_CHARSET*/, + const CPVT_SecProps* pSecProps /*= NULL*/, + const CPVT_WordProps* pWordProps /*= NULL*/) { + SetText(text, charset, pSecProps, pWordProps, TRUE, TRUE); } -FX_BOOL CFX_Edit::InsertWord(FX_WORD word, int32_t charset /*= DEFAULT_CHARSET*/, const CPVT_WordProps * pWordProps /*= NULL*/) -{ - return InsertWord(word,charset,pWordProps,TRUE,TRUE); +FX_BOOL CFX_Edit::InsertWord(FX_WORD word, + int32_t charset /*= DEFAULT_CHARSET*/, + const CPVT_WordProps* pWordProps /*= NULL*/) { + return InsertWord(word, charset, pWordProps, TRUE, TRUE); } -FX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps * pSecProps /*= NULL*/,const CPVT_WordProps * pWordProps /*= NULL*/) -{ - return InsertReturn(pSecProps,pWordProps,TRUE,TRUE); +FX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps* pSecProps /*= NULL*/, + const CPVT_WordProps* pWordProps /*= NULL*/) { + return InsertReturn(pSecProps, pWordProps, TRUE, TRUE); } -FX_BOOL CFX_Edit::Backspace() -{ - return Backspace(TRUE,TRUE); +FX_BOOL CFX_Edit::Backspace() { + return Backspace(TRUE, TRUE); } -FX_BOOL CFX_Edit::Delete() -{ - return Delete(TRUE,TRUE); +FX_BOOL CFX_Edit::Delete() { + return Delete(TRUE, TRUE); } -FX_BOOL CFX_Edit::Clear() -{ - return Clear(TRUE,TRUE); +FX_BOOL CFX_Edit::Clear() { + return Clear(TRUE, TRUE); } -FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text, int32_t charset /*= DEFAULT_CHARSET*/, - const CPVT_SecProps * pSecProps /*= NULL*/,const CPVT_WordProps * pWordProps /*= NULL*/) -{ - return InsertText(text,charset,pSecProps,pWordProps,TRUE,TRUE); +FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text, + int32_t charset /*= DEFAULT_CHARSET*/, + const CPVT_SecProps* pSecProps /*= NULL*/, + const CPVT_WordProps* pWordProps /*= NULL*/) { + return InsertText(text, charset, pSecProps, pWordProps, TRUE, TRUE); } -FX_FLOAT CFX_Edit::GetFontSize() const -{ - return m_pVT->GetFontSize(); +FX_FLOAT CFX_Edit::GetFontSize() const { + return m_pVT->GetFontSize(); } -FX_WORD CFX_Edit::GetPasswordChar() const -{ - return m_pVT->GetPasswordChar(); +FX_WORD CFX_Edit::GetPasswordChar() const { + return m_pVT->GetPasswordChar(); } -int32_t CFX_Edit::GetCharArray() const -{ - return m_pVT->GetCharArray(); +int32_t CFX_Edit::GetCharArray() const { + return m_pVT->GetCharArray(); } -CPDF_Rect CFX_Edit::GetPlateRect() const -{ - return m_pVT->GetPlateRect(); +CPDF_Rect CFX_Edit::GetPlateRect() const { + return m_pVT->GetPlateRect(); } -CPDF_Rect CFX_Edit::GetContentRect() const -{ - return VTToEdit(m_pVT->GetContentRect()); +CPDF_Rect CFX_Edit::GetContentRect() const { + return VTToEdit(m_pVT->GetContentRect()); } -int32_t CFX_Edit::GetHorzScale() const -{ - return m_pVT->GetHorzScale(); +int32_t CFX_Edit::GetHorzScale() const { + return m_pVT->GetHorzScale(); } -FX_FLOAT CFX_Edit::GetCharSpace() const -{ - return m_pVT->GetCharSpace(); +FX_FLOAT CFX_Edit::GetCharSpace() const { + return m_pVT->GetCharSpace(); } // inner methods -CPVT_WordRange CFX_Edit::GetWholeWordRange() const -{ - if (m_pVT->IsValid()) - return CPVT_WordRange(m_pVT->GetBeginWordPlace(),m_pVT->GetEndWordPlace()); +CPVT_WordRange CFX_Edit::GetWholeWordRange() const { + if (m_pVT->IsValid()) + return CPVT_WordRange(m_pVT->GetBeginWordPlace(), m_pVT->GetEndWordPlace()); - return CPVT_WordRange(); + return CPVT_WordRange(); } -CPVT_WordRange CFX_Edit::GetVisibleWordRange() const -{ - if (m_bEnableOverflow) return GetWholeWordRange(); +CPVT_WordRange CFX_Edit::GetVisibleWordRange() const { + if (m_bEnableOverflow) + return GetWholeWordRange(); - if (m_pVT->IsValid()) - { - CPDF_Rect rcPlate = m_pVT->GetPlateRect(); + if (m_pVT->IsValid()) { + CPDF_Rect rcPlate = m_pVT->GetPlateRect(); - CPVT_WordPlace place1 = m_pVT->SearchWordPlace(EditToVT(CPDF_Point(rcPlate.left,rcPlate.top))); - CPVT_WordPlace place2 = m_pVT->SearchWordPlace(EditToVT(CPDF_Point(rcPlate.right,rcPlate.bottom))); + CPVT_WordPlace place1 = + m_pVT->SearchWordPlace(EditToVT(CPDF_Point(rcPlate.left, rcPlate.top))); + CPVT_WordPlace place2 = m_pVT->SearchWordPlace( + EditToVT(CPDF_Point(rcPlate.right, rcPlate.bottom))); - return CPVT_WordRange(place1,place2); - } + return CPVT_WordRange(place1, place2); + } - return CPVT_WordRange(); + return CPVT_WordRange(); } -CPVT_WordPlace CFX_Edit::SearchWordPlace(const CPDF_Point& point) const -{ - if (m_pVT->IsValid()) - { - return m_pVT->SearchWordPlace(EditToVT(point)); - } - - return CPVT_WordPlace(); -} +CPVT_WordPlace CFX_Edit::SearchWordPlace(const CPDF_Point& point) const { + if (m_pVT->IsValid()) { + return m_pVT->SearchWordPlace(EditToVT(point)); + } -void CFX_Edit::Paint() -{ - if (m_pVT->IsValid()) - { - RearrangeAll(); - ScrollToCaret(); - Refresh(RP_NOANALYSE); - SetCaretOrigin(); - SetCaretInfo(); - } + return CPVT_WordPlace(); } -void CFX_Edit::RearrangeAll() -{ - if (m_pVT->IsValid()) - { - m_pVT->UpdateWordPlace(m_wpCaret); - m_pVT->RearrangeAll(); - m_pVT->UpdateWordPlace(m_wpCaret); - SetScrollInfo(); - SetContentChanged(); - } +void CFX_Edit::Paint() { + if (m_pVT->IsValid()) { + RearrangeAll(); + ScrollToCaret(); + Refresh(RP_NOANALYSE); + SetCaretOrigin(); + SetCaretInfo(); + } } -void CFX_Edit::RearrangePart(const CPVT_WordRange & range) -{ - if (m_pVT->IsValid()) - { - m_pVT->UpdateWordPlace(m_wpCaret); - m_pVT->RearrangePart(range); - m_pVT->UpdateWordPlace(m_wpCaret); - SetScrollInfo(); - SetContentChanged(); - } +void CFX_Edit::RearrangeAll() { + if (m_pVT->IsValid()) { + m_pVT->UpdateWordPlace(m_wpCaret); + m_pVT->RearrangeAll(); + m_pVT->UpdateWordPlace(m_wpCaret); + SetScrollInfo(); + SetContentChanged(); + } } -void CFX_Edit::SetContentChanged() -{ - if (m_bNotify && m_pNotify) - { - CPDF_Rect rcContent = m_pVT->GetContentRect(); - if (rcContent.Width() != m_rcOldContent.Width() || - rcContent.Height() != m_rcOldContent.Height()) - { - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - m_pNotify->IOnContentChange(rcContent); - m_bNotifyFlag = FALSE; - } - m_rcOldContent = rcContent; - } - } +void CFX_Edit::RearrangePart(const CPVT_WordRange& range) { + if (m_pVT->IsValid()) { + m_pVT->UpdateWordPlace(m_wpCaret); + m_pVT->RearrangePart(range); + m_pVT->UpdateWordPlace(m_wpCaret); + SetScrollInfo(); + SetContentChanged(); + } } -void CFX_Edit::SelectAll() -{ - if (m_pVT->IsValid()) - { - m_SelState = GetWholeWordRange(); - SetCaret(m_SelState.EndPos); - - ScrollToCaret(); - CPVT_WordRange wrVisible = GetVisibleWordRange(); - Refresh(RP_OPTIONAL,&wrVisible); - SetCaretInfo(); - } +void CFX_Edit::SetContentChanged() { + if (m_bNotify && m_pNotify) { + CPDF_Rect rcContent = m_pVT->GetContentRect(); + if (rcContent.Width() != m_rcOldContent.Width() || + rcContent.Height() != m_rcOldContent.Height()) { + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + m_pNotify->IOnContentChange(rcContent); + m_bNotifyFlag = FALSE; + } + m_rcOldContent = rcContent; + } + } +} + +void CFX_Edit::SelectAll() { + if (m_pVT->IsValid()) { + m_SelState = GetWholeWordRange(); + SetCaret(m_SelState.EndPos); + + ScrollToCaret(); + CPVT_WordRange wrVisible = GetVisibleWordRange(); + Refresh(RP_OPTIONAL, &wrVisible); + SetCaretInfo(); + } } -void CFX_Edit::SelectNone() -{ - if (m_pVT->IsValid()) - { - if (m_SelState.IsExist()) - { - CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange(); - m_SelState.Default(); - Refresh(RP_OPTIONAL,&wrTemp); - } +void CFX_Edit::SelectNone() { + if (m_pVT->IsValid()) { + if (m_SelState.IsExist()) { + CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange(); + m_SelState.Default(); + Refresh(RP_OPTIONAL, &wrTemp); } + } } -FX_BOOL CFX_Edit::IsSelected() const -{ - return m_SelState.IsExist(); +FX_BOOL CFX_Edit::IsSelected() const { + return m_SelState.IsExist(); } -CPDF_Point CFX_Edit::VTToEdit(const CPDF_Point & point) const -{ - CPDF_Rect rcContent = m_pVT->GetContentRect(); - CPDF_Rect rcPlate = m_pVT->GetPlateRect(); +CPDF_Point CFX_Edit::VTToEdit(const CPDF_Point& point) const { + CPDF_Rect rcContent = m_pVT->GetContentRect(); + CPDF_Rect rcPlate = m_pVT->GetPlateRect(); - FX_FLOAT fPadding = 0.0f; + FX_FLOAT fPadding = 0.0f; - switch (m_nAlignment) - { + switch (m_nAlignment) { case 0: - fPadding = 0.0f; - break; + fPadding = 0.0f; + break; case 1: - fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f; - break; + fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f; + break; case 2: - fPadding = rcPlate.Height() - rcContent.Height(); - break; - } + fPadding = rcPlate.Height() - rcContent.Height(); + break; + } - return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left), - point.y - (m_ptScrollPos.y + fPadding - rcPlate.top)); + return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left), + point.y - (m_ptScrollPos.y + fPadding - rcPlate.top)); } -CPDF_Point CFX_Edit::EditToVT(const CPDF_Point & point) const -{ - CPDF_Rect rcContent = m_pVT->GetContentRect(); - CPDF_Rect rcPlate = m_pVT->GetPlateRect(); +CPDF_Point CFX_Edit::EditToVT(const CPDF_Point& point) const { + CPDF_Rect rcContent = m_pVT->GetContentRect(); + CPDF_Rect rcPlate = m_pVT->GetPlateRect(); - FX_FLOAT fPadding = 0.0f; + FX_FLOAT fPadding = 0.0f; - switch (m_nAlignment) - { + switch (m_nAlignment) { case 0: - fPadding = 0.0f; - break; + fPadding = 0.0f; + break; case 1: - fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f; - break; + fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f; + break; case 2: - fPadding = rcPlate.Height() - rcContent.Height(); - break; - } + fPadding = rcPlate.Height() - rcContent.Height(); + break; + } - return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left), - point.y + (m_ptScrollPos.y + fPadding - rcPlate.top)); + return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left), + point.y + (m_ptScrollPos.y + fPadding - rcPlate.top)); } -CPDF_Rect CFX_Edit::VTToEdit(const CPDF_Rect & rect) const -{ - CPDF_Point ptLeftBottom = VTToEdit(CPDF_Point(rect.left,rect.bottom)); - CPDF_Point ptRightTop = VTToEdit(CPDF_Point(rect.right,rect.top)); +CPDF_Rect CFX_Edit::VTToEdit(const CPDF_Rect& rect) const { + CPDF_Point ptLeftBottom = VTToEdit(CPDF_Point(rect.left, rect.bottom)); + CPDF_Point ptRightTop = VTToEdit(CPDF_Point(rect.right, rect.top)); - return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y); + return CPDF_Rect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y); } -CPDF_Rect CFX_Edit::EditToVT(const CPDF_Rect & rect) const -{ - CPDF_Point ptLeftBottom = EditToVT(CPDF_Point(rect.left,rect.bottom)); - CPDF_Point ptRightTop = EditToVT(CPDF_Point(rect.right,rect.top)); +CPDF_Rect CFX_Edit::EditToVT(const CPDF_Rect& rect) const { + CPDF_Point ptLeftBottom = EditToVT(CPDF_Point(rect.left, rect.bottom)); + CPDF_Point ptRightTop = EditToVT(CPDF_Point(rect.right, rect.top)); - return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y); + return CPDF_Rect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y); } -void CFX_Edit::SetScrollInfo() -{ - if (m_bNotify && m_pNotify) - { - CPDF_Rect rcPlate = m_pVT->GetPlateRect(); - CPDF_Rect rcContent = m_pVT->GetContentRect(); - - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - m_pNotify->IOnSetScrollInfoX(rcPlate.left, rcPlate.right, - rcContent.left, rcContent.right, rcPlate.Width() / 3, rcPlate.Width()); +void CFX_Edit::SetScrollInfo() { + if (m_bNotify && m_pNotify) { + CPDF_Rect rcPlate = m_pVT->GetPlateRect(); + CPDF_Rect rcContent = m_pVT->GetContentRect(); - m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top, - rcContent.bottom, rcContent.top, rcPlate.Height() / 3, rcPlate.Height()); - m_bNotifyFlag = FALSE; - } + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + m_pNotify->IOnSetScrollInfoX(rcPlate.left, rcPlate.right, rcContent.left, + rcContent.right, rcPlate.Width() / 3, + rcPlate.Width()); + + m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top, + rcContent.bottom, rcContent.top, + rcPlate.Height() / 3, rcPlate.Height()); + m_bNotifyFlag = FALSE; } + } } -void CFX_Edit::SetScrollPosX(FX_FLOAT fx) -{ - if (!m_bEnableScroll) return; - - if (m_pVT->IsValid()) - { - if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.x,fx)) - { - m_ptScrollPos.x = fx; - Refresh(RP_NOANALYSE); - - if (m_bNotify && m_pNotify) - { - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - m_pNotify->IOnSetScrollPosX(fx); - m_bNotifyFlag = FALSE; - } - } +void CFX_Edit::SetScrollPosX(FX_FLOAT fx) { + if (!m_bEnableScroll) + return; + + if (m_pVT->IsValid()) { + if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.x, fx)) { + m_ptScrollPos.x = fx; + Refresh(RP_NOANALYSE); + + if (m_bNotify && m_pNotify) { + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + m_pNotify->IOnSetScrollPosX(fx); + m_bNotifyFlag = FALSE; } + } } + } } -void CFX_Edit::SetScrollPosY(FX_FLOAT fy) -{ - if (!m_bEnableScroll) return; - - if (m_pVT->IsValid()) - { - if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y,fy)) - { - m_ptScrollPos.y = fy; - Refresh(RP_NOANALYSE); - - if (m_bNotify && m_pNotify) - { - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - m_pNotify->IOnSetScrollPosY(fy); - m_bNotifyFlag = FALSE; - } - } +void CFX_Edit::SetScrollPosY(FX_FLOAT fy) { + if (!m_bEnableScroll) + return; + + if (m_pVT->IsValid()) { + if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y, fy)) { + m_ptScrollPos.y = fy; + Refresh(RP_NOANALYSE); + + if (m_bNotify && m_pNotify) { + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + m_pNotify->IOnSetScrollPosY(fy); + m_bNotifyFlag = FALSE; } + } } + } } -void CFX_Edit::SetScrollPos(const CPDF_Point & point) -{ - SetScrollPosX(point.x); - SetScrollPosY(point.y); - SetScrollLimit(); - SetCaretInfo(); +void CFX_Edit::SetScrollPos(const CPDF_Point& point) { + SetScrollPosX(point.x); + SetScrollPosY(point.y); + SetScrollLimit(); + SetCaretInfo(); } -CPDF_Point CFX_Edit::GetScrollPos() const -{ - return m_ptScrollPos; +CPDF_Point CFX_Edit::GetScrollPos() const { + return m_ptScrollPos; } -void CFX_Edit::SetScrollLimit() -{ - if (m_pVT->IsValid()) - { - CPDF_Rect rcContent = m_pVT->GetContentRect(); - CPDF_Rect rcPlate = m_pVT->GetPlateRect(); - - if (rcPlate.Width() > rcContent.Width()) - { - SetScrollPosX(rcPlate.left); - } - else - { - if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.x, rcContent.left)) - { - SetScrollPosX(rcContent.left); - } - else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.x, rcContent.right - rcPlate.Width())) - { - SetScrollPosX(rcContent.right - rcPlate.Width()); - } - } +void CFX_Edit::SetScrollLimit() { + if (m_pVT->IsValid()) { + CPDF_Rect rcContent = m_pVT->GetContentRect(); + CPDF_Rect rcPlate = m_pVT->GetPlateRect(); - if (rcPlate.Height() > rcContent.Height()) - { - SetScrollPosY(rcPlate.top); - } - else - { - if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.y, rcContent.bottom + rcPlate.Height())) - { - SetScrollPosY(rcContent.bottom + rcPlate.Height()); - } - else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.y, rcContent.top)) - { - SetScrollPosY(rcContent.top); - } - } - } -} + if (rcPlate.Width() > rcContent.Width()) { + SetScrollPosX(rcPlate.left); + } else { + if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.x, rcContent.left)) { + SetScrollPosX(rcContent.left); + } else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.x, + rcContent.right - rcPlate.Width())) { + SetScrollPosX(rcContent.right - rcPlate.Width()); + } + } + + if (rcPlate.Height() > rcContent.Height()) { + SetScrollPosY(rcPlate.top); + } else { + if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.y, + rcContent.bottom + rcPlate.Height())) { + SetScrollPosY(rcContent.bottom + rcPlate.Height()); + } else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.y, rcContent.top)) { + SetScrollPosY(rcContent.top); + } + } + } +} + +void CFX_Edit::ScrollToCaret() { + SetScrollLimit(); + + if (m_pVT->IsValid()) { + CPDF_Point ptHead(0, 0); + CPDF_Point ptFoot(0, 0); + + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + pIterator->SetAt(m_wpCaret); + + CPVT_Word word; + CPVT_Line line; + if (pIterator->GetWord(word)) { + ptHead.x = word.ptWord.x + word.fWidth; + ptHead.y = word.ptWord.y + word.fAscent; + ptFoot.x = word.ptWord.x + word.fWidth; + ptFoot.y = word.ptWord.y + word.fDescent; + } else if (pIterator->GetLine(line)) { + ptHead.x = line.ptLine.x; + ptHead.y = line.ptLine.y + line.fLineAscent; + ptFoot.x = line.ptLine.x; + ptFoot.y = line.ptLine.y + line.fLineDescent; + } + } + + CPDF_Point ptHeadEdit = VTToEdit(ptHead); + CPDF_Point ptFootEdit = VTToEdit(ptFoot); -void CFX_Edit::ScrollToCaret() -{ - SetScrollLimit(); + CPDF_Rect rcPlate = m_pVT->GetPlateRect(); - if (m_pVT->IsValid()) - { - CPDF_Point ptHead(0,0); - CPDF_Point ptFoot(0,0); + if (!FX_EDIT_IsFloatEqual(rcPlate.left, rcPlate.right)) { + if (FX_EDIT_IsFloatSmaller(ptHeadEdit.x, rcPlate.left) || + FX_EDIT_IsFloatEqual(ptHeadEdit.x, rcPlate.left)) { + SetScrollPosX(ptHead.x); + } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.x, rcPlate.right)) { + SetScrollPosX(ptHead.x - rcPlate.Width()); + } + } + + if (!FX_EDIT_IsFloatEqual(rcPlate.top, rcPlate.bottom)) { + if (FX_EDIT_IsFloatSmaller(ptFootEdit.y, rcPlate.bottom) || + FX_EDIT_IsFloatEqual(ptFootEdit.y, rcPlate.bottom)) { + if (FX_EDIT_IsFloatSmaller(ptHeadEdit.y, rcPlate.top)) { + SetScrollPosY(ptFoot.y + rcPlate.Height()); + } + } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.y, rcPlate.top)) { + if (FX_EDIT_IsFloatBigger(ptFootEdit.y, rcPlate.bottom)) { + SetScrollPosY(ptHead.y); + } + } + } + } +} + +void CFX_Edit::Refresh(REFRESH_PLAN_E ePlan, + const CPVT_WordRange* pRange1, + const CPVT_WordRange* pRange2) { + if (m_bEnableRefresh && m_pVT->IsValid()) { + m_Refresh.BeginRefresh(); + RefreshPushLineRects(GetVisibleWordRange()); + + // if (!FX_EDIT_IsFloatEqual(m_ptRefreshScrollPos.x,m_ptScrollPos.x) || + // !FX_EDIT_IsFloatEqual(m_ptRefreshScrollPos.y,m_ptScrollPos.y)) + // { + m_Refresh.NoAnalyse(); + m_ptRefreshScrollPos = m_ptScrollPos; + // } + // else + // { + // switch (ePlan) + // { + // case RP_ANALYSE: + // m_Refresh.Analyse(m_pVT->GetAlignment()); + // + // if (pRange1) RefreshPushRandomRects(*pRange1); + // if (pRange2) RefreshPushRandomRects(*pRange2); + // break; + // case RP_NOANALYSE: + // m_Refresh.NoAnalyse(); + // break; + // case RP_OPTIONAL: + // if (pRange1) RefreshPushRandomRects(*pRange1); + // if (pRange2) RefreshPushRandomRects(*pRange2); + // break; + // } + // } + + if (m_bNotify && m_pNotify) { + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + if (const CFX_Edit_RectArray* pRects = m_Refresh.GetRefreshRects()) { + for (int32_t i = 0, sz = pRects->GetSize(); i < sz; i++) + m_pNotify->IOnInvalidateRect(pRects->GetAt(i)); + } + m_bNotifyFlag = FALSE; + } + } + + m_Refresh.EndRefresh(); + } +} + +void CFX_Edit::RefreshPushLineRects(const CPVT_WordRange& wr) { + if (m_pVT->IsValid()) { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + CPVT_WordPlace wpBegin = wr.BeginPos; + m_pVT->UpdateWordPlace(wpBegin); + CPVT_WordPlace wpEnd = wr.EndPos; + m_pVT->UpdateWordPlace(wpEnd); + pIterator->SetAt(wpBegin); + + CPVT_Line lineinfo; + do { + if (!pIterator->GetLine(lineinfo)) + break; + if (lineinfo.lineplace.LineCmp(wpEnd) > 0) + break; + + CPDF_Rect rcLine(lineinfo.ptLine.x, + lineinfo.ptLine.y + lineinfo.fLineDescent, + lineinfo.ptLine.x + lineinfo.fLineWidth, + lineinfo.ptLine.y + lineinfo.fLineAscent); + + m_Refresh.Push(CPVT_WordRange(lineinfo.lineplace, lineinfo.lineEnd), + VTToEdit(rcLine)); + + } while (pIterator->NextLine()); + } + } +} + +void CFX_Edit::RefreshPushRandomRects(const CPVT_WordRange& wr) { + if (m_pVT->IsValid()) { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + CPVT_WordRange wrTemp = wr; + + m_pVT->UpdateWordPlace(wrTemp.BeginPos); + m_pVT->UpdateWordPlace(wrTemp.EndPos); + pIterator->SetAt(wrTemp.BeginPos); + + CPVT_Word wordinfo; + CPVT_Line lineinfo; + CPVT_WordPlace place; + + while (pIterator->NextWord()) { + place = pIterator->GetAt(); + if (place.WordCmp(wrTemp.EndPos) > 0) + break; + + pIterator->GetWord(wordinfo); + pIterator->GetLine(lineinfo); + + if (place.LineCmp(wrTemp.BeginPos) == 0 || + place.LineCmp(wrTemp.EndPos) == 0) { + CPDF_Rect rcWord(wordinfo.ptWord.x, + lineinfo.ptLine.y + lineinfo.fLineDescent, + wordinfo.ptWord.x + wordinfo.fWidth, + lineinfo.ptLine.y + lineinfo.fLineAscent); + + m_Refresh.AddRefresh(VTToEdit(rcWord)); + } else { + CPDF_Rect rcLine(lineinfo.ptLine.x, + lineinfo.ptLine.y + lineinfo.fLineDescent, + lineinfo.ptLine.x + lineinfo.fLineWidth, + lineinfo.ptLine.y + lineinfo.fLineAscent); + + m_Refresh.AddRefresh(VTToEdit(rcLine)); + + pIterator->NextLine(); + } + } + } + } +} + +void CFX_Edit::RefreshWordRange(const CPVT_WordRange& wr) { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + CPVT_WordRange wrTemp = wr; - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - pIterator->SetAt(m_wpCaret); + m_pVT->UpdateWordPlace(wrTemp.BeginPos); + m_pVT->UpdateWordPlace(wrTemp.EndPos); + pIterator->SetAt(wrTemp.BeginPos); - CPVT_Word word; - CPVT_Line line; - if (pIterator->GetWord(word)) - { - ptHead.x = word.ptWord.x + word.fWidth; - ptHead.y = word.ptWord.y + word.fAscent; - ptFoot.x = word.ptWord.x + word.fWidth; - ptFoot.y = word.ptWord.y + word.fDescent; - } - else if (pIterator->GetLine(line)) - { - ptHead.x = line.ptLine.x; - ptHead.y = line.ptLine.y + line.fLineAscent; - ptFoot.x = line.ptLine.x; - ptFoot.y = line.ptLine.y + line.fLineDescent; - } - } + CPVT_Word wordinfo; + CPVT_Line lineinfo; + CPVT_WordPlace place; - CPDF_Point ptHeadEdit = VTToEdit(ptHead); - CPDF_Point ptFootEdit = VTToEdit(ptFoot); + while (pIterator->NextWord()) { + place = pIterator->GetAt(); + if (place.WordCmp(wrTemp.EndPos) > 0) + break; - CPDF_Rect rcPlate = m_pVT->GetPlateRect(); + pIterator->GetWord(wordinfo); + pIterator->GetLine(lineinfo); - if (!FX_EDIT_IsFloatEqual(rcPlate.left,rcPlate.right)) - { - if (FX_EDIT_IsFloatSmaller(ptHeadEdit.x, rcPlate.left) || - FX_EDIT_IsFloatEqual(ptHeadEdit.x, rcPlate.left)) - { - SetScrollPosX(ptHead.x); - } - else if (FX_EDIT_IsFloatBigger(ptHeadEdit.x, rcPlate.right)) - { - SetScrollPosX(ptHead.x - rcPlate.Width()); - } - } + if (place.LineCmp(wrTemp.BeginPos) == 0 || + place.LineCmp(wrTemp.EndPos) == 0) { + CPDF_Rect rcWord(wordinfo.ptWord.x, + lineinfo.ptLine.y + lineinfo.fLineDescent, + wordinfo.ptWord.x + wordinfo.fWidth, + lineinfo.ptLine.y + lineinfo.fLineAscent); - if (!FX_EDIT_IsFloatEqual(rcPlate.top,rcPlate.bottom)) - { - if (FX_EDIT_IsFloatSmaller(ptFootEdit.y, rcPlate.bottom) || - FX_EDIT_IsFloatEqual(ptFootEdit.y, rcPlate.bottom)) - { - if (FX_EDIT_IsFloatSmaller(ptHeadEdit.y, rcPlate.top)) - { - SetScrollPosY(ptFoot.y + rcPlate.Height()); - } - } - else if (FX_EDIT_IsFloatBigger(ptHeadEdit.y, rcPlate.top)) - { - if (FX_EDIT_IsFloatBigger(ptFootEdit.y, rcPlate.bottom)) - { - SetScrollPosY(ptHead.y); - } - } + if (m_bNotify && m_pNotify) { + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + CPDF_Rect rcRefresh = VTToEdit(rcWord); + m_pNotify->IOnInvalidateRect(&rcRefresh); + m_bNotifyFlag = FALSE; + } } - } -} + } else { + CPDF_Rect rcLine(lineinfo.ptLine.x, + lineinfo.ptLine.y + lineinfo.fLineDescent, + lineinfo.ptLine.x + lineinfo.fLineWidth, + lineinfo.ptLine.y + lineinfo.fLineAscent); -void CFX_Edit::Refresh(REFRESH_PLAN_E ePlan,const CPVT_WordRange * pRange1,const CPVT_WordRange * pRange2) -{ - if (m_bEnableRefresh && m_pVT->IsValid()) - { - m_Refresh.BeginRefresh(); - RefreshPushLineRects(GetVisibleWordRange()); - -// if (!FX_EDIT_IsFloatEqual(m_ptRefreshScrollPos.x,m_ptScrollPos.x) || -// !FX_EDIT_IsFloatEqual(m_ptRefreshScrollPos.y,m_ptScrollPos.y)) -// { - m_Refresh.NoAnalyse(); - m_ptRefreshScrollPos = m_ptScrollPos; -// } -// else -// { -// switch (ePlan) -// { -// case RP_ANALYSE: -// m_Refresh.Analyse(m_pVT->GetAlignment()); -// -// if (pRange1) RefreshPushRandomRects(*pRange1); -// if (pRange2) RefreshPushRandomRects(*pRange2); -// break; -// case RP_NOANALYSE: -// m_Refresh.NoAnalyse(); -// break; -// case RP_OPTIONAL: -// if (pRange1) RefreshPushRandomRects(*pRange1); -// if (pRange2) RefreshPushRandomRects(*pRange2); -// break; -// } -// } - - if (m_bNotify && m_pNotify) - { - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - if (const CFX_Edit_RectArray * pRects = m_Refresh.GetRefreshRects()) - { - for (int32_t i = 0, sz = pRects->GetSize(); i < sz; i++) - m_pNotify->IOnInvalidateRect(pRects->GetAt(i)); - } - m_bNotifyFlag = FALSE; - } + if (m_bNotify && m_pNotify) { + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + CPDF_Rect rcRefresh = VTToEdit(rcLine); + m_pNotify->IOnInvalidateRect(&rcRefresh); + m_bNotifyFlag = FALSE; + } } - m_Refresh.EndRefresh(); + pIterator->NextLine(); + } } + } } -void CFX_Edit::RefreshPushLineRects(const CPVT_WordRange & wr) -{ - if (m_pVT->IsValid()) - { - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - CPVT_WordPlace wpBegin = wr.BeginPos; - m_pVT->UpdateWordPlace(wpBegin); - CPVT_WordPlace wpEnd = wr.EndPos; - m_pVT->UpdateWordPlace(wpEnd); - pIterator->SetAt(wpBegin); - - CPVT_Line lineinfo; - do - { - if (!pIterator->GetLine(lineinfo))break; - if (lineinfo.lineplace.LineCmp(wpEnd) > 0)break; - - CPDF_Rect rcLine(lineinfo.ptLine.x, - lineinfo.ptLine.y + lineinfo.fLineDescent, - lineinfo.ptLine.x + lineinfo.fLineWidth, - lineinfo.ptLine.y + lineinfo.fLineAscent); - - m_Refresh.Push(CPVT_WordRange(lineinfo.lineplace,lineinfo.lineEnd),VTToEdit(rcLine)); - - }while (pIterator->NextLine()); - } - } +void CFX_Edit::SetCaret(const CPVT_WordPlace& place) { + m_wpOldCaret = m_wpCaret; + m_wpCaret = place; } -void CFX_Edit::RefreshPushRandomRects(const CPVT_WordRange & wr) -{ - if (m_pVT->IsValid()) - { - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - CPVT_WordRange wrTemp = wr; +void CFX_Edit::SetCaretInfo() { + if (m_bNotify && m_pNotify) { + if (!m_bNotifyFlag) { + CPDF_Point ptHead(0.0f, 0.0f), ptFoot(0.0f, 0.0f); - m_pVT->UpdateWordPlace(wrTemp.BeginPos); - m_pVT->UpdateWordPlace(wrTemp.EndPos); - pIterator->SetAt(wrTemp.BeginPos); + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + pIterator->SetAt(m_wpCaret); + CPVT_Word word; + CPVT_Line line; + if (pIterator->GetWord(word)) { + ptHead.x = word.ptWord.x + word.fWidth; + ptHead.y = word.ptWord.y + word.fAscent; + ptFoot.x = word.ptWord.x + word.fWidth; + ptFoot.y = word.ptWord.y + word.fDescent; + } else if (pIterator->GetLine(line)) { + ptHead.x = line.ptLine.x; + ptHead.y = line.ptLine.y + line.fLineAscent; + ptFoot.x = line.ptLine.x; + ptFoot.y = line.ptLine.y + line.fLineDescent; + } + } - CPVT_Word wordinfo; - CPVT_Line lineinfo; - CPVT_WordPlace place; + m_bNotifyFlag = TRUE; + m_pNotify->IOnSetCaret(!m_SelState.IsExist(), VTToEdit(ptHead), + VTToEdit(ptFoot), m_wpCaret); + m_bNotifyFlag = FALSE; + } + } - while (pIterator->NextWord()) - { - place = pIterator->GetAt(); - if (place.WordCmp(wrTemp.EndPos) > 0) break; + SetCaretChange(); +} - pIterator->GetWord(wordinfo); - pIterator->GetLine(lineinfo); +void CFX_Edit::SetCaretChange() { + if (m_wpCaret == m_wpOldCaret) + return; - if (place.LineCmp(wrTemp.BeginPos) == 0 || place.LineCmp(wrTemp.EndPos) == 0) - { - CPDF_Rect rcWord(wordinfo.ptWord.x, - lineinfo.ptLine.y + lineinfo.fLineDescent, - wordinfo.ptWord.x + wordinfo.fWidth, - lineinfo.ptLine.y + lineinfo.fLineAscent); + if (m_bNotify && m_pVT->IsRichText() && m_pNotify) { + CPVT_SecProps SecProps; + CPVT_WordProps WordProps; - m_Refresh.AddRefresh(VTToEdit(rcWord)); - } - else - { - CPDF_Rect rcLine(lineinfo.ptLine.x, - lineinfo.ptLine.y + lineinfo.fLineDescent, - lineinfo.ptLine.x + lineinfo.fLineWidth, - lineinfo.ptLine.y + lineinfo.fLineAscent); + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + pIterator->SetAt(m_wpCaret); + CPVT_Word word; + CPVT_Section section; - m_Refresh.AddRefresh(VTToEdit(rcLine)); + if (pIterator->GetSection(section)) { + SecProps = section.SecProps; + WordProps = section.WordProps; + } - pIterator->NextLine(); - } - } - } + if (pIterator->GetWord(word)) { + WordProps = word.WordProps; + } } -} -void CFX_Edit::RefreshWordRange(const CPVT_WordRange& wr) -{ - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - CPVT_WordRange wrTemp = wr; - - m_pVT->UpdateWordPlace(wrTemp.BeginPos); - m_pVT->UpdateWordPlace(wrTemp.EndPos); - pIterator->SetAt(wrTemp.BeginPos); - - CPVT_Word wordinfo; - CPVT_Line lineinfo; - CPVT_WordPlace place; - - while (pIterator->NextWord()) - { - place = pIterator->GetAt(); - if (place.WordCmp(wrTemp.EndPos) > 0) break; - - pIterator->GetWord(wordinfo); - pIterator->GetLine(lineinfo); - - if (place.LineCmp(wrTemp.BeginPos) == 0 || place.LineCmp(wrTemp.EndPos) == 0) - { - CPDF_Rect rcWord(wordinfo.ptWord.x, - lineinfo.ptLine.y + lineinfo.fLineDescent, - wordinfo.ptWord.x + wordinfo.fWidth, - lineinfo.ptLine.y + lineinfo.fLineAscent); - - if (m_bNotify && m_pNotify) - { - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - CPDF_Rect rcRefresh = VTToEdit(rcWord); - m_pNotify->IOnInvalidateRect(&rcRefresh); - m_bNotifyFlag = FALSE; - } - } - } - else - { - CPDF_Rect rcLine(lineinfo.ptLine.x, - lineinfo.ptLine.y + lineinfo.fLineDescent, - lineinfo.ptLine.x + lineinfo.fLineWidth, - lineinfo.ptLine.y + lineinfo.fLineAscent); - - if (m_bNotify && m_pNotify) - { - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - CPDF_Rect rcRefresh = VTToEdit(rcLine); - m_pNotify->IOnInvalidateRect(&rcRefresh); - m_bNotifyFlag = FALSE; - } - } - - pIterator->NextLine(); - } - } + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + m_pNotify->IOnCaretChange(SecProps, WordProps); + m_bNotifyFlag = FALSE; } + } } -void CFX_Edit::SetCaret(const CPVT_WordPlace & place) -{ - m_wpOldCaret = m_wpCaret; - m_wpCaret = place; -} - -void CFX_Edit::SetCaretInfo() -{ - if (m_bNotify && m_pNotify) - { - if (!m_bNotifyFlag) - { - CPDF_Point ptHead(0.0f,0.0f),ptFoot(0.0f,0.0f); - - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - pIterator->SetAt(m_wpCaret); - CPVT_Word word; - CPVT_Line line; - if (pIterator->GetWord(word)) - { - ptHead.x = word.ptWord.x + word.fWidth; - ptHead.y = word.ptWord.y + word.fAscent; - ptFoot.x = word.ptWord.x + word.fWidth; - ptFoot.y = word.ptWord.y + word.fDescent; - } - else if (pIterator->GetLine(line)) - { - ptHead.x = line.ptLine.x; - ptHead.y = line.ptLine.y + line.fLineAscent; - ptFoot.x = line.ptLine.x; - ptFoot.y = line.ptLine.y + line.fLineDescent; - } - } +void CFX_Edit::SetCaret(int32_t nPos) { + if (m_pVT->IsValid()) { + SelectNone(); + SetCaret(m_pVT->WordIndexToWordPlace(nPos)); + m_SelState.Set(m_wpCaret, m_wpCaret); - m_bNotifyFlag = TRUE; - m_pNotify->IOnSetCaret(!m_SelState.IsExist(),VTToEdit(ptHead),VTToEdit(ptFoot), m_wpCaret); - m_bNotifyFlag = FALSE; - } - } - - SetCaretChange(); + ScrollToCaret(); + SetCaretOrigin(); + SetCaretInfo(); + } } -void CFX_Edit::SetCaretChange() -{ - if (m_wpCaret == m_wpOldCaret) return; - - if (m_bNotify && m_pVT->IsRichText() && m_pNotify) - { - CPVT_SecProps SecProps; - CPVT_WordProps WordProps; +void CFX_Edit::OnMouseDown(const CPDF_Point& point, + FX_BOOL bShift, + FX_BOOL bCtrl) { + if (m_pVT->IsValid()) { + SelectNone(); + SetCaret(m_pVT->SearchWordPlace(EditToVT(point))); + m_SelState.Set(m_wpCaret, m_wpCaret); - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - pIterator->SetAt(m_wpCaret); - CPVT_Word word; - CPVT_Section section; + ScrollToCaret(); + SetCaretOrigin(); + SetCaretInfo(); + } +} - if (pIterator->GetSection(section)) - { - SecProps = section.SecProps; - WordProps = section.WordProps; - } +void CFX_Edit::OnMouseMove(const CPDF_Point& point, + FX_BOOL bShift, + FX_BOOL bCtrl) { + if (m_pVT->IsValid()) { + SetCaret(m_pVT->SearchWordPlace(EditToVT(point))); - if (pIterator->GetWord(word)) - { - WordProps = word.WordProps; - } - } + if (m_wpCaret != m_wpOldCaret) { + m_SelState.SetEndPos(m_wpCaret); - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - m_pNotify->IOnCaretChange(SecProps,WordProps); - m_bNotifyFlag = FALSE; - } + ScrollToCaret(); + CPVT_WordRange wr(m_wpOldCaret, m_wpCaret); + Refresh(RP_OPTIONAL, &wr); + SetCaretOrigin(); + SetCaretInfo(); } + } } -void CFX_Edit::SetCaret(int32_t nPos) -{ - if (m_pVT->IsValid()) - { - SelectNone(); - SetCaret(m_pVT->WordIndexToWordPlace(nPos)); - m_SelState.Set(m_wpCaret,m_wpCaret); +void CFX_Edit::OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) { + if (m_pVT->IsValid()) { + SetCaret(m_pVT->GetUpWordPlace(m_wpCaret, m_ptCaret)); + + if (bShift) { + if (m_SelState.IsExist()) + m_SelState.SetEndPos(m_wpCaret); + else + m_SelState.Set(m_wpOldCaret, m_wpCaret); + if (m_wpOldCaret != m_wpCaret) { ScrollToCaret(); - SetCaretOrigin(); + CPVT_WordRange wr(m_wpOldCaret, m_wpCaret); + Refresh(RP_OPTIONAL, &wr); SetCaretInfo(); + } + } else { + SelectNone(); + + ScrollToCaret(); + SetCaretInfo(); } + } } -void CFX_Edit::OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) -{ - if (m_pVT->IsValid()) - { - SelectNone(); - SetCaret(m_pVT->SearchWordPlace(EditToVT(point))); - m_SelState.Set(m_wpCaret,m_wpCaret); +void CFX_Edit::OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) { + if (m_pVT->IsValid()) { + SetCaret(m_pVT->GetDownWordPlace(m_wpCaret, m_ptCaret)); + if (bShift) { + if (m_SelState.IsExist()) + m_SelState.SetEndPos(m_wpCaret); + else + m_SelState.Set(m_wpOldCaret, m_wpCaret); + + if (m_wpOldCaret != m_wpCaret) { ScrollToCaret(); - SetCaretOrigin(); + CPVT_WordRange wr(m_wpOldCaret, m_wpCaret); + Refresh(RP_OPTIONAL, &wr); SetCaretInfo(); + } + } else { + SelectNone(); + + ScrollToCaret(); + SetCaretInfo(); } + } } -void CFX_Edit::OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) -{ - if (m_pVT->IsValid()) - { - SetCaret(m_pVT->SearchWordPlace(EditToVT(point))); +void CFX_Edit::OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) { + if (m_pVT->IsValid()) { + if (bShift) { + if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) && + m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret)) + SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret)); - if (m_wpCaret != m_wpOldCaret) - { - m_SelState.SetEndPos(m_wpCaret); + SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret)); - ScrollToCaret(); - CPVT_WordRange wr(m_wpOldCaret,m_wpCaret); - Refresh(RP_OPTIONAL,&wr); - SetCaretOrigin(); - SetCaretInfo(); - } - } -} + if (m_SelState.IsExist()) + m_SelState.SetEndPos(m_wpCaret); + else + m_SelState.Set(m_wpOldCaret, m_wpCaret); -void CFX_Edit::OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl) -{ - if (m_pVT->IsValid()) - { - SetCaret(m_pVT->GetUpWordPlace(m_wpCaret,m_ptCaret)); - - if (bShift) - { - if (m_SelState.IsExist()) - m_SelState.SetEndPos(m_wpCaret); - else - m_SelState.Set(m_wpOldCaret,m_wpCaret); - - if (m_wpOldCaret != m_wpCaret) - { - ScrollToCaret(); - CPVT_WordRange wr(m_wpOldCaret, m_wpCaret); - Refresh(RP_OPTIONAL, &wr); - SetCaretInfo(); - } - } + if (m_wpOldCaret != m_wpCaret) { + ScrollToCaret(); + CPVT_WordRange wr(m_wpOldCaret, m_wpCaret); + Refresh(RP_OPTIONAL, &wr); + SetCaretInfo(); + } + } else { + if (m_SelState.IsExist()) { + if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) < 0) + SetCaret(m_SelState.BeginPos); else - { - SelectNone(); + SetCaret(m_SelState.EndPos); - ScrollToCaret(); - SetCaretInfo(); - } - } -} + SelectNone(); + ScrollToCaret(); + SetCaretInfo(); + } else { + if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) && + m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret)) + SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret)); -void CFX_Edit::OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl) -{ - if (m_pVT->IsValid()) - { - SetCaret(m_pVT->GetDownWordPlace(m_wpCaret,m_ptCaret)); - - if (bShift) - { - if (m_SelState.IsExist()) - m_SelState.SetEndPos(m_wpCaret); - else - m_SelState.Set(m_wpOldCaret,m_wpCaret); - - if (m_wpOldCaret != m_wpCaret) - { - ScrollToCaret(); - CPVT_WordRange wr(m_wpOldCaret,m_wpCaret); - Refresh(RP_OPTIONAL, &wr); - SetCaretInfo(); - } - } - else - { - SelectNone(); + SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret)); - ScrollToCaret(); - SetCaretInfo(); - } + ScrollToCaret(); + SetCaretOrigin(); + SetCaretInfo(); + } } + } } -void CFX_Edit::OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl) -{ - if (m_pVT->IsValid()) - { - if (bShift) - { - if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) && - m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret)) - SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret)); - - SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret)); - - if (m_SelState.IsExist()) - m_SelState.SetEndPos(m_wpCaret); - else - m_SelState.Set(m_wpOldCaret, m_wpCaret); - - if (m_wpOldCaret != m_wpCaret) - { - ScrollToCaret(); - CPVT_WordRange wr(m_wpOldCaret,m_wpCaret); - Refresh(RP_OPTIONAL,&wr); - SetCaretInfo(); - } - } - else - { - if (m_SelState.IsExist()) - { - if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)<0) - SetCaret(m_SelState.BeginPos); - else - SetCaret(m_SelState.EndPos); - - SelectNone(); - ScrollToCaret(); - SetCaretInfo(); - } - else - { - if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) && - m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret)) - SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret)); +void CFX_Edit::OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) { + if (m_pVT->IsValid()) { + if (bShift) { + SetCaret(m_pVT->GetNextWordPlace(m_wpCaret)); - SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret)); + if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) && + m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret)) + SetCaret(m_pVT->GetNextWordPlace(m_wpCaret)); - ScrollToCaret(); - SetCaretOrigin(); - SetCaretInfo(); - } - } - } -} + if (m_SelState.IsExist()) + m_SelState.SetEndPos(m_wpCaret); + else + m_SelState.Set(m_wpOldCaret, m_wpCaret); -void CFX_Edit::OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl) -{ - if (m_pVT->IsValid()) - { - if (bShift) - { - SetCaret(m_pVT->GetNextWordPlace(m_wpCaret)); - - if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) && - m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret)) - SetCaret(m_pVT->GetNextWordPlace(m_wpCaret)); - - if (m_SelState.IsExist()) - m_SelState.SetEndPos(m_wpCaret); - else - m_SelState.Set(m_wpOldCaret,m_wpCaret); - - if (m_wpOldCaret != m_wpCaret) - { - ScrollToCaret(); - CPVT_WordRange wr(m_wpOldCaret,m_wpCaret); - Refresh(RP_OPTIONAL,&wr); - SetCaretInfo(); - } - } + if (m_wpOldCaret != m_wpCaret) { + ScrollToCaret(); + CPVT_WordRange wr(m_wpOldCaret, m_wpCaret); + Refresh(RP_OPTIONAL, &wr); + SetCaretInfo(); + } + } else { + if (m_SelState.IsExist()) { + if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) > 0) + SetCaret(m_SelState.BeginPos); else - { - if (m_SelState.IsExist()) - { - if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)>0) - SetCaret(m_SelState.BeginPos); - else - SetCaret(m_SelState.EndPos); - - SelectNone(); - ScrollToCaret(); - SetCaretInfo(); - } - else - { - SetCaret(m_pVT->GetNextWordPlace(m_wpCaret)); + SetCaret(m_SelState.EndPos); - if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) && - m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret)) - SetCaret(m_pVT->GetNextWordPlace(m_wpCaret)); + SelectNone(); + ScrollToCaret(); + SetCaretInfo(); + } else { + SetCaret(m_pVT->GetNextWordPlace(m_wpCaret)); - ScrollToCaret(); - SetCaretOrigin(); - SetCaretInfo(); - } - } + if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) && + m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret)) + SetCaret(m_pVT->GetNextWordPlace(m_wpCaret)); + + ScrollToCaret(); + SetCaretOrigin(); + SetCaretInfo(); + } } + } } -void CFX_Edit::OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl) -{ - if (m_pVT->IsValid()) - { - if (bShift) - { - if (bCtrl) - SetCaret(m_pVT->GetBeginWordPlace()); - else - SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret)); - - if (m_SelState.IsExist()) - m_SelState.SetEndPos(m_wpCaret); - else - m_SelState.Set(m_wpOldCaret,m_wpCaret); - - ScrollToCaret(); - CPVT_WordRange wr(m_wpOldCaret, m_wpCaret); - Refresh(RP_OPTIONAL, &wr); - SetCaretInfo(); - } +void CFX_Edit::OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) { + if (m_pVT->IsValid()) { + if (bShift) { + if (bCtrl) + SetCaret(m_pVT->GetBeginWordPlace()); + else + SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret)); + + if (m_SelState.IsExist()) + m_SelState.SetEndPos(m_wpCaret); + else + m_SelState.Set(m_wpOldCaret, m_wpCaret); + + ScrollToCaret(); + CPVT_WordRange wr(m_wpOldCaret, m_wpCaret); + Refresh(RP_OPTIONAL, &wr); + SetCaretInfo(); + } else { + if (m_SelState.IsExist()) { + if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) < 0) + SetCaret(m_SelState.BeginPos); else - { - if (m_SelState.IsExist()) - { - if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)<0) - SetCaret(m_SelState.BeginPos); - else - SetCaret(m_SelState.EndPos); - - SelectNone(); - ScrollToCaret(); - SetCaretInfo(); - } - else - { - if (bCtrl) - SetCaret(m_pVT->GetBeginWordPlace()); - else - SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret)); - - ScrollToCaret(); - SetCaretOrigin(); - SetCaretInfo(); - } - } - } -} + SetCaret(m_SelState.EndPos); -void CFX_Edit::OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl) -{ - if (m_pVT->IsValid()) - { - if (bShift) - { - if (bCtrl) - SetCaret(m_pVT->GetEndWordPlace()); - else - SetCaret(m_pVT->GetLineEndPlace(m_wpCaret)); - - if (m_SelState.IsExist()) - m_SelState.SetEndPos(m_wpCaret); - else - m_SelState.Set(m_wpOldCaret, m_wpCaret); - - ScrollToCaret(); - CPVT_WordRange wr(m_wpOldCaret, m_wpCaret); - Refresh(RP_OPTIONAL, &wr); - SetCaretInfo(); - } + SelectNone(); + ScrollToCaret(); + SetCaretInfo(); + } else { + if (bCtrl) + SetCaret(m_pVT->GetBeginWordPlace()); else - { - if (m_SelState.IsExist()) - { - if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)>0) - SetCaret(m_SelState.BeginPos); - else - SetCaret(m_SelState.EndPos); - - SelectNone(); - ScrollToCaret(); - SetCaretInfo(); - } - else - { - if (bCtrl) - SetCaret(m_pVT->GetEndWordPlace()); - else - SetCaret(m_pVT->GetLineEndPlace(m_wpCaret)); - - ScrollToCaret(); - SetCaretOrigin(); - SetCaretInfo(); - } - } - } -} + SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret)); -void CFX_Edit::SetText(const FX_WCHAR* text,int32_t charset, - const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps, FX_BOOL bAddUndo, FX_BOOL bPaint) -{ - Empty(); - DoInsertText(CPVT_WordPlace(0,0,-1), text, charset, pSecProps, pWordProps); - if (bPaint) Paint(); - if (m_bOprNotify && m_pOprNotify) - m_pOprNotify->OnSetText(m_wpCaret, m_wpOldCaret); - //if (bAddUndo) -} + ScrollToCaret(); + SetCaretOrigin(); + SetCaretInfo(); + } + } + } +} + +void CFX_Edit::OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) { + if (m_pVT->IsValid()) { + if (bShift) { + if (bCtrl) + SetCaret(m_pVT->GetEndWordPlace()); + else + SetCaret(m_pVT->GetLineEndPlace(m_wpCaret)); + + if (m_SelState.IsExist()) + m_SelState.SetEndPos(m_wpCaret); + else + m_SelState.Set(m_wpOldCaret, m_wpCaret); + + ScrollToCaret(); + CPVT_WordRange wr(m_wpOldCaret, m_wpCaret); + Refresh(RP_OPTIONAL, &wr); + SetCaretInfo(); + } else { + if (m_SelState.IsExist()) { + if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) > 0) + SetCaret(m_SelState.BeginPos); + else + SetCaret(m_SelState.EndPos); -FX_BOOL CFX_Edit::InsertWord(FX_WORD word, int32_t charset, const CPVT_WordProps * pWordProps, FX_BOOL bAddUndo, FX_BOOL bPaint) -{ - if (IsTextOverflow()) return FALSE; + SelectNone(); + ScrollToCaret(); + SetCaretInfo(); + } else { + if (bCtrl) + SetCaret(m_pVT->GetEndWordPlace()); + else + SetCaret(m_pVT->GetLineEndPlace(m_wpCaret)); - if (m_pVT->IsValid()) - { - m_pVT->UpdateWordPlace(m_wpCaret); + ScrollToCaret(); + SetCaretOrigin(); + SetCaretInfo(); + } + } + } +} + +void CFX_Edit::SetText(const FX_WCHAR* text, + int32_t charset, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps, + FX_BOOL bAddUndo, + FX_BOOL bPaint) { + Empty(); + DoInsertText(CPVT_WordPlace(0, 0, -1), text, charset, pSecProps, pWordProps); + if (bPaint) + Paint(); + if (m_bOprNotify && m_pOprNotify) + m_pOprNotify->OnSetText(m_wpCaret, m_wpOldCaret); + // if (bAddUndo) +} + +FX_BOOL CFX_Edit::InsertWord(FX_WORD word, + int32_t charset, + const CPVT_WordProps* pWordProps, + FX_BOOL bAddUndo, + FX_BOOL bPaint) { + if (IsTextOverflow()) + return FALSE; - SetCaret(m_pVT->InsertWord(m_wpCaret,word,GetCharSetFromUnicode(word, charset),pWordProps)); - m_SelState.Set(m_wpCaret,m_wpCaret); + if (m_pVT->IsValid()) { + m_pVT->UpdateWordPlace(m_wpCaret); - if (m_wpCaret != m_wpOldCaret) - { - if (bAddUndo && m_bEnableUndo) - { - AddEditUndoItem(new CFXEU_InsertWord(this,m_wpOldCaret,m_wpCaret,word,charset,pWordProps)); - } + SetCaret(m_pVT->InsertWord( + m_wpCaret, word, GetCharSetFromUnicode(word, charset), pWordProps)); + m_SelState.Set(m_wpCaret, m_wpCaret); - if (bPaint) - PaintInsertText(m_wpOldCaret, m_wpCaret); + if (m_wpCaret != m_wpOldCaret) { + if (bAddUndo && m_bEnableUndo) { + AddEditUndoItem(new CFXEU_InsertWord(this, m_wpOldCaret, m_wpCaret, + word, charset, pWordProps)); + } - if (m_bOprNotify && m_pOprNotify) - m_pOprNotify->OnInsertWord(m_wpCaret, m_wpOldCaret); + if (bPaint) + PaintInsertText(m_wpOldCaret, m_wpCaret); - return TRUE; - } + if (m_bOprNotify && m_pOprNotify) + m_pOprNotify->OnInsertWord(m_wpCaret, m_wpOldCaret); + + return TRUE; } + } - return FALSE; + return FALSE; } -FX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps, - FX_BOOL bAddUndo, FX_BOOL bPaint) -{ - if (IsTextOverflow()) return FALSE; +FX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps, + FX_BOOL bAddUndo, + FX_BOOL bPaint) { + if (IsTextOverflow()) + return FALSE; - if (m_pVT->IsValid()) - { - m_pVT->UpdateWordPlace(m_wpCaret); - SetCaret(m_pVT->InsertSection(m_wpCaret,pSecProps,pWordProps)); - m_SelState.Set(m_wpCaret,m_wpCaret); + if (m_pVT->IsValid()) { + m_pVT->UpdateWordPlace(m_wpCaret); + SetCaret(m_pVT->InsertSection(m_wpCaret, pSecProps, pWordProps)); + m_SelState.Set(m_wpCaret, m_wpCaret); - if (m_wpCaret != m_wpOldCaret) - { - if (bAddUndo && m_bEnableUndo) - { - AddEditUndoItem(new CFXEU_InsertReturn(this,m_wpOldCaret,m_wpCaret,pSecProps,pWordProps)); - } + if (m_wpCaret != m_wpOldCaret) { + if (bAddUndo && m_bEnableUndo) { + AddEditUndoItem(new CFXEU_InsertReturn(this, m_wpOldCaret, m_wpCaret, + pSecProps, pWordProps)); + } - if (bPaint) - { - RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret)); - ScrollToCaret(); - CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos); - Refresh(RP_ANALYSE, &wr); - SetCaretOrigin(); - SetCaretInfo(); - } + if (bPaint) { + RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret)); + ScrollToCaret(); + CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos); + Refresh(RP_ANALYSE, &wr); + SetCaretOrigin(); + SetCaretInfo(); + } - if (m_bOprNotify && m_pOprNotify) - m_pOprNotify->OnInsertReturn(m_wpCaret, m_wpOldCaret); + if (m_bOprNotify && m_pOprNotify) + m_pOprNotify->OnInsertReturn(m_wpCaret, m_wpOldCaret); - return TRUE; - } + return TRUE; } + } - return FALSE; + return FALSE; } -FX_BOOL CFX_Edit::Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint) -{ - if (m_pVT->IsValid()) - { - if (m_wpCaret == m_pVT->GetBeginWordPlace()) return FALSE; +FX_BOOL CFX_Edit::Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint) { + if (m_pVT->IsValid()) { + if (m_wpCaret == m_pVT->GetBeginWordPlace()) + return FALSE; - CPVT_Section section; - CPVT_Word word; + CPVT_Section section; + CPVT_Word word; - if (bAddUndo) - { - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - pIterator->SetAt(m_wpCaret); - pIterator->GetSection(section); - pIterator->GetWord(word); - } - } + if (bAddUndo) { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + pIterator->SetAt(m_wpCaret); + pIterator->GetSection(section); + pIterator->GetWord(word); + } + } - m_pVT->UpdateWordPlace(m_wpCaret); - SetCaret(m_pVT->BackSpaceWord(m_wpCaret)); - m_SelState.Set(m_wpCaret,m_wpCaret); - - if (m_wpCaret != m_wpOldCaret) - { - if (bAddUndo && m_bEnableUndo) - { - if (m_wpCaret.SecCmp(m_wpOldCaret) != 0) - AddEditUndoItem(new CFXEU_Backspace(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset, - section.SecProps,section.WordProps)); - else - AddEditUndoItem(new CFXEU_Backspace(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset, - section.SecProps,word.WordProps)); - } + m_pVT->UpdateWordPlace(m_wpCaret); + SetCaret(m_pVT->BackSpaceWord(m_wpCaret)); + m_SelState.Set(m_wpCaret, m_wpCaret); + + if (m_wpCaret != m_wpOldCaret) { + if (bAddUndo && m_bEnableUndo) { + if (m_wpCaret.SecCmp(m_wpOldCaret) != 0) + AddEditUndoItem(new CFXEU_Backspace( + this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset, + section.SecProps, section.WordProps)); + else + AddEditUndoItem(new CFXEU_Backspace( + this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset, + section.SecProps, word.WordProps)); + } - if (bPaint) - { - RearrangePart(CPVT_WordRange(m_wpCaret,m_wpOldCaret)); - ScrollToCaret(); + if (bPaint) { + RearrangePart(CPVT_WordRange(m_wpCaret, m_wpOldCaret)); + ScrollToCaret(); - CPVT_WordRange wr; - if (m_wpCaret.SecCmp(m_wpOldCaret) !=0) - wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret),GetVisibleWordRange().EndPos); - else if (m_wpCaret.LineCmp(m_wpOldCaret) !=0) - wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret),m_pVT->GetSectionEndPlace(m_wpCaret)); - else - wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret),m_pVT->GetSectionEndPlace(m_wpCaret)); + CPVT_WordRange wr; + if (m_wpCaret.SecCmp(m_wpOldCaret) != 0) + wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret), + GetVisibleWordRange().EndPos); + else if (m_wpCaret.LineCmp(m_wpOldCaret) != 0) + wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret), + m_pVT->GetSectionEndPlace(m_wpCaret)); + else + wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret), + m_pVT->GetSectionEndPlace(m_wpCaret)); - Refresh(RP_ANALYSE, &wr); + Refresh(RP_ANALYSE, &wr); - SetCaretOrigin(); - SetCaretInfo(); - } + SetCaretOrigin(); + SetCaretInfo(); + } - if (m_bOprNotify && m_pOprNotify) - m_pOprNotify->OnBackSpace(m_wpCaret, m_wpOldCaret); + if (m_bOprNotify && m_pOprNotify) + m_pOprNotify->OnBackSpace(m_wpCaret, m_wpOldCaret); - return TRUE; - } + return TRUE; } + } - return FALSE; + return FALSE; } -FX_BOOL CFX_Edit::Delete(FX_BOOL bAddUndo, FX_BOOL bPaint) -{ - if (m_pVT->IsValid()) - { - if (m_wpCaret == m_pVT->GetEndWordPlace()) return FALSE; +FX_BOOL CFX_Edit::Delete(FX_BOOL bAddUndo, FX_BOOL bPaint) { + if (m_pVT->IsValid()) { + if (m_wpCaret == m_pVT->GetEndWordPlace()) + return FALSE; - CPVT_Section section; - CPVT_Word word; + CPVT_Section section; + CPVT_Word word; - if (bAddUndo) - { - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret)); - pIterator->GetSection(section); - pIterator->GetWord(word); - } - } + if (bAddUndo) { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret)); + pIterator->GetSection(section); + pIterator->GetWord(word); + } + } - m_pVT->UpdateWordPlace(m_wpCaret); - FX_BOOL bSecEnd = (m_wpCaret == m_pVT->GetSectionEndPlace(m_wpCaret)); + m_pVT->UpdateWordPlace(m_wpCaret); + FX_BOOL bSecEnd = (m_wpCaret == m_pVT->GetSectionEndPlace(m_wpCaret)); - SetCaret(m_pVT->DeleteWord(m_wpCaret)); - m_SelState.Set(m_wpCaret,m_wpCaret); + SetCaret(m_pVT->DeleteWord(m_wpCaret)); + m_SelState.Set(m_wpCaret, m_wpCaret); - if (bAddUndo && m_bEnableUndo) - { - if (bSecEnd) - AddEditUndoItem(new CFXEU_Delete(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset, - section.SecProps,section.WordProps,bSecEnd)); - else - AddEditUndoItem(new CFXEU_Delete(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset, - section.SecProps,word.WordProps,bSecEnd)); - } + if (bAddUndo && m_bEnableUndo) { + if (bSecEnd) + AddEditUndoItem(new CFXEU_Delete( + this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset, + section.SecProps, section.WordProps, bSecEnd)); + else + AddEditUndoItem(new CFXEU_Delete( + this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset, + section.SecProps, word.WordProps, bSecEnd)); + } - if (bPaint) - { - RearrangePart(CPVT_WordRange(m_wpOldCaret,m_wpCaret)); - ScrollToCaret(); + if (bPaint) { + RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret)); + ScrollToCaret(); - CPVT_WordRange wr; - if (bSecEnd) - wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret),GetVisibleWordRange().EndPos); - else if (m_wpCaret.LineCmp(m_wpOldCaret) !=0) - wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret),m_pVT->GetSectionEndPlace(m_wpCaret)); - else - wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret),m_pVT->GetSectionEndPlace(m_wpCaret)); + CPVT_WordRange wr; + if (bSecEnd) + wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret), + GetVisibleWordRange().EndPos); + else if (m_wpCaret.LineCmp(m_wpOldCaret) != 0) + wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret), + m_pVT->GetSectionEndPlace(m_wpCaret)); + else + wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret), + m_pVT->GetSectionEndPlace(m_wpCaret)); - Refresh(RP_ANALYSE, &wr); + Refresh(RP_ANALYSE, &wr); - SetCaretOrigin(); - SetCaretInfo(); - } + SetCaretOrigin(); + SetCaretInfo(); + } - if (m_bOprNotify && m_pOprNotify) - m_pOprNotify->OnDelete(m_wpCaret, m_wpOldCaret); + if (m_bOprNotify && m_pOprNotify) + m_pOprNotify->OnDelete(m_wpCaret, m_wpOldCaret); - return TRUE; - } + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CFX_Edit::Empty() -{ - if (m_pVT->IsValid()) - { - m_pVT->DeleteWords(GetWholeWordRange()); - SetCaret(m_pVT->GetBeginWordPlace()); +FX_BOOL CFX_Edit::Empty() { + if (m_pVT->IsValid()) { + m_pVT->DeleteWords(GetWholeWordRange()); + SetCaret(m_pVT->GetBeginWordPlace()); - return TRUE; - } + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CFX_Edit::Clear(FX_BOOL bAddUndo, FX_BOOL bPaint) -{ - if (m_pVT->IsValid()) - { - if (m_SelState.IsExist()) - { - CPVT_WordRange range = m_SelState.ConvertToWordRange(); - - if (bAddUndo && m_bEnableUndo) - { - if (m_pVT->IsRichText()) - { - BeginGroupUndo(L""); - - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - pIterator->SetAt(range.EndPos); - - CPVT_Word wordinfo; - CPVT_Section secinfo; - do - { - CPVT_WordPlace place = pIterator->GetAt(); - if (place.WordCmp(range.BeginPos) <= 0)break; - - CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place); - - if (oldplace.SecCmp(place) != 0) - { - if (pIterator->GetSection(secinfo)) - { - AddEditUndoItem(new CFXEU_ClearRich(this,oldplace,place,range,wordinfo.Word, - wordinfo.nCharset,secinfo.SecProps,secinfo.WordProps)); - } - } - else - { - if (pIterator->GetWord(wordinfo)) - { - oldplace = m_pVT->AjustLineHeader(oldplace,TRUE); - place = m_pVT->AjustLineHeader(place,TRUE); - - AddEditUndoItem(new CFXEU_ClearRich(this,oldplace,place,range,wordinfo.Word, - wordinfo.nCharset,secinfo.SecProps,wordinfo.WordProps)); - } - } - }while (pIterator->PrevWord()); - } - EndGroupUndo(); +FX_BOOL CFX_Edit::Clear(FX_BOOL bAddUndo, FX_BOOL bPaint) { + if (m_pVT->IsValid()) { + if (m_SelState.IsExist()) { + CPVT_WordRange range = m_SelState.ConvertToWordRange(); + + if (bAddUndo && m_bEnableUndo) { + if (m_pVT->IsRichText()) { + BeginGroupUndo(L""); + + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + pIterator->SetAt(range.EndPos); + + CPVT_Word wordinfo; + CPVT_Section secinfo; + do { + CPVT_WordPlace place = pIterator->GetAt(); + if (place.WordCmp(range.BeginPos) <= 0) + break; + + CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place); + + if (oldplace.SecCmp(place) != 0) { + if (pIterator->GetSection(secinfo)) { + AddEditUndoItem(new CFXEU_ClearRich( + this, oldplace, place, range, wordinfo.Word, + wordinfo.nCharset, secinfo.SecProps, secinfo.WordProps)); } - else - { - AddEditUndoItem(new CFXEU_Clear(this,range,GetSelText())); + } else { + if (pIterator->GetWord(wordinfo)) { + oldplace = m_pVT->AjustLineHeader(oldplace, TRUE); + place = m_pVT->AjustLineHeader(place, TRUE); + + AddEditUndoItem(new CFXEU_ClearRich( + this, oldplace, place, range, wordinfo.Word, + wordinfo.nCharset, secinfo.SecProps, wordinfo.WordProps)); } - } + } + } while (pIterator->PrevWord()); + } + EndGroupUndo(); + } else { + AddEditUndoItem(new CFXEU_Clear(this, range, GetSelText())); + } + } - SelectNone(); - SetCaret(m_pVT->DeleteWords(range)); - m_SelState.Set(m_wpCaret,m_wpCaret); + SelectNone(); + SetCaret(m_pVT->DeleteWords(range)); + m_SelState.Set(m_wpCaret, m_wpCaret); - if (bPaint) - { - RearrangePart(range); - ScrollToCaret(); + if (bPaint) { + RearrangePart(range); + ScrollToCaret(); - CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos); - Refresh(RP_ANALYSE, &wr); + CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos); + Refresh(RP_ANALYSE, &wr); - SetCaretOrigin(); - SetCaretInfo(); - } + SetCaretOrigin(); + SetCaretInfo(); + } - if (m_bOprNotify && m_pOprNotify) - m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret); + if (m_bOprNotify && m_pOprNotify) + m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret); - return TRUE; - } + return TRUE; } + } - return FALSE; + return FALSE; } -FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text, int32_t charset, - const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps, FX_BOOL bAddUndo, FX_BOOL bPaint) -{ - if (IsTextOverflow()) return FALSE; +FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text, + int32_t charset, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps, + FX_BOOL bAddUndo, + FX_BOOL bPaint) { + if (IsTextOverflow()) + return FALSE; - m_pVT->UpdateWordPlace(m_wpCaret); - SetCaret(DoInsertText(m_wpCaret, text, charset, pSecProps, pWordProps)); - m_SelState.Set(m_wpCaret,m_wpCaret); - - if (m_wpCaret != m_wpOldCaret) - { - if (bAddUndo && m_bEnableUndo) - { - AddEditUndoItem(new CFXEU_InsertText(this,m_wpOldCaret,m_wpCaret,text,charset,pSecProps,pWordProps)); - } + m_pVT->UpdateWordPlace(m_wpCaret); + SetCaret(DoInsertText(m_wpCaret, text, charset, pSecProps, pWordProps)); + m_SelState.Set(m_wpCaret, m_wpCaret); - if (bPaint) - PaintInsertText(m_wpOldCaret, m_wpCaret); + if (m_wpCaret != m_wpOldCaret) { + if (bAddUndo && m_bEnableUndo) { + AddEditUndoItem(new CFXEU_InsertText(this, m_wpOldCaret, m_wpCaret, text, + charset, pSecProps, pWordProps)); + } - if (m_bOprNotify && m_pOprNotify) - m_pOprNotify->OnInsertText(m_wpCaret, m_wpOldCaret); + if (bPaint) + PaintInsertText(m_wpOldCaret, m_wpCaret); - return TRUE; - } - return FALSE; + if (m_bOprNotify && m_pOprNotify) + m_pOprNotify->OnInsertText(m_wpCaret, m_wpOldCaret); + + return TRUE; + } + return FALSE; } -void CFX_Edit::PaintInsertText(const CPVT_WordPlace & wpOld, const CPVT_WordPlace & wpNew) -{ - if (m_pVT->IsValid()) - { - RearrangePart(CPVT_WordRange(wpOld,wpNew)); - ScrollToCaret(); +void CFX_Edit::PaintInsertText(const CPVT_WordPlace& wpOld, + const CPVT_WordPlace& wpNew) { + if (m_pVT->IsValid()) { + RearrangePart(CPVT_WordRange(wpOld, wpNew)); + ScrollToCaret(); - CPVT_WordRange wr; - if (m_wpCaret.LineCmp(wpOld) !=0) - wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(wpOld),m_pVT->GetSectionEndPlace(wpNew)); - else - wr = CPVT_WordRange(wpOld,m_pVT->GetSectionEndPlace(wpNew)); - Refresh(RP_ANALYSE, &wr); - SetCaretOrigin(); - SetCaretInfo(); - } + CPVT_WordRange wr; + if (m_wpCaret.LineCmp(wpOld) != 0) + wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(wpOld), + m_pVT->GetSectionEndPlace(wpNew)); + else + wr = CPVT_WordRange(wpOld, m_pVT->GetSectionEndPlace(wpNew)); + Refresh(RP_ANALYSE, &wr); + SetCaretOrigin(); + SetCaretInfo(); + } } -FX_BOOL CFX_Edit::Redo() -{ - if (m_bEnableUndo) - { - if (m_Undo.CanRedo()) - { - m_Undo.Redo(); - return TRUE; - } +FX_BOOL CFX_Edit::Redo() { + if (m_bEnableUndo) { + if (m_Undo.CanRedo()) { + m_Undo.Redo(); + return TRUE; } + } - return FALSE; + return FALSE; } -FX_BOOL CFX_Edit::Undo() -{ - if (m_bEnableUndo) - { - if (m_Undo.CanUndo()) - { - m_Undo.Undo(); - return TRUE; - } +FX_BOOL CFX_Edit::Undo() { + if (m_bEnableUndo) { + if (m_Undo.CanUndo()) { + m_Undo.Undo(); + return TRUE; } + } - return FALSE; + return FALSE; } -void CFX_Edit::SetCaretOrigin() -{ - if (m_pVT->IsValid()) - { - if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator()) - { - pIterator->SetAt(m_wpCaret); - CPVT_Word word; - CPVT_Line line; - if (pIterator->GetWord(word)) - { - m_ptCaret.x = word.ptWord.x + word.fWidth; - m_ptCaret.y = word.ptWord.y; - } - else if (pIterator->GetLine(line)) - { - m_ptCaret.x = line.ptLine.x; - m_ptCaret.y = line.ptLine.y; - } - } +void CFX_Edit::SetCaretOrigin() { + if (m_pVT->IsValid()) { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + pIterator->SetAt(m_wpCaret); + CPVT_Word word; + CPVT_Line line; + if (pIterator->GetWord(word)) { + m_ptCaret.x = word.ptWord.x + word.fWidth; + m_ptCaret.y = word.ptWord.y; + } else if (pIterator->GetLine(line)) { + m_ptCaret.x = line.ptLine.x; + m_ptCaret.y = line.ptLine.y; + } } + } } -int32_t CFX_Edit::WordPlaceToWordIndex(const CPVT_WordPlace & place) const -{ - if (m_pVT->IsValid()) - return m_pVT->WordPlaceToWordIndex(place); +int32_t CFX_Edit::WordPlaceToWordIndex(const CPVT_WordPlace& place) const { + if (m_pVT->IsValid()) + return m_pVT->WordPlaceToWordIndex(place); - return -1; + return -1; } -CPVT_WordPlace CFX_Edit::WordIndexToWordPlace(int32_t index) const -{ - if (m_pVT->IsValid()) - return m_pVT->WordIndexToWordPlace(index); +CPVT_WordPlace CFX_Edit::WordIndexToWordPlace(int32_t index) const { + if (m_pVT->IsValid()) + return m_pVT->WordIndexToWordPlace(index); - return CPVT_WordPlace(); + return CPVT_WordPlace(); } -FX_BOOL CFX_Edit::IsTextFull() const -{ - int32_t nTotalWords = m_pVT->GetTotalWords(); - int32_t nLimitChar = m_pVT->GetLimitChar(); - int32_t nCharArray = m_pVT->GetCharArray(); +FX_BOOL CFX_Edit::IsTextFull() const { + int32_t nTotalWords = m_pVT->GetTotalWords(); + int32_t nLimitChar = m_pVT->GetLimitChar(); + int32_t nCharArray = m_pVT->GetCharArray(); - return IsTextOverflow() || (nLimitChar>0 && nTotalWords >= nLimitChar) - || (nCharArray>0 && nTotalWords >= nCharArray); + return IsTextOverflow() || (nLimitChar > 0 && nTotalWords >= nLimitChar) || + (nCharArray > 0 && nTotalWords >= nCharArray); } -FX_BOOL CFX_Edit::IsTextOverflow() const -{ - if (!m_bEnableScroll && !m_bEnableOverflow) - { - CPDF_Rect rcPlate = m_pVT->GetPlateRect(); - CPDF_Rect rcContent = m_pVT->GetContentRect(); - - if (m_pVT->IsMultiLine() && GetTotalLines() > 1) - { - if (FX_EDIT_IsFloatBigger(rcContent.Height(),rcPlate.Height())) return TRUE; - } +FX_BOOL CFX_Edit::IsTextOverflow() const { + if (!m_bEnableScroll && !m_bEnableOverflow) { + CPDF_Rect rcPlate = m_pVT->GetPlateRect(); + CPDF_Rect rcContent = m_pVT->GetContentRect(); - if (FX_EDIT_IsFloatBigger(rcContent.Width(),rcPlate.Width())) return TRUE; + if (m_pVT->IsMultiLine() && GetTotalLines() > 1) { + if (FX_EDIT_IsFloatBigger(rcContent.Height(), rcPlate.Height())) + return TRUE; } - return FALSE; + if (FX_EDIT_IsFloatBigger(rcContent.Width(), rcPlate.Width())) + return TRUE; + } + + return FALSE; } -CPVT_WordPlace CFX_Edit::GetLineBeginPlace(const CPVT_WordPlace & place) const -{ - return m_pVT->GetLineBeginPlace(place); +CPVT_WordPlace CFX_Edit::GetLineBeginPlace(const CPVT_WordPlace& place) const { + return m_pVT->GetLineBeginPlace(place); } -CPVT_WordPlace CFX_Edit::GetLineEndPlace(const CPVT_WordPlace & place) const -{ - return m_pVT->GetLineEndPlace(place); +CPVT_WordPlace CFX_Edit::GetLineEndPlace(const CPVT_WordPlace& place) const { + return m_pVT->GetLineEndPlace(place); } -CPVT_WordPlace CFX_Edit::GetSectionBeginPlace(const CPVT_WordPlace & place) const -{ - return m_pVT->GetSectionBeginPlace(place); +CPVT_WordPlace CFX_Edit::GetSectionBeginPlace( + const CPVT_WordPlace& place) const { + return m_pVT->GetSectionBeginPlace(place); } -CPVT_WordPlace CFX_Edit::GetSectionEndPlace(const CPVT_WordPlace & place) const -{ - return m_pVT->GetSectionEndPlace(place); +CPVT_WordPlace CFX_Edit::GetSectionEndPlace(const CPVT_WordPlace& place) const { + return m_pVT->GetSectionEndPlace(place); } -FX_BOOL CFX_Edit::CanUndo() const -{ - if (m_bEnableUndo) - { - return m_Undo.CanUndo(); - } +FX_BOOL CFX_Edit::CanUndo() const { + if (m_bEnableUndo) { + return m_Undo.CanUndo(); + } - return FALSE; + return FALSE; } -FX_BOOL CFX_Edit::CanRedo() const -{ - if (m_bEnableUndo) - { - return m_Undo.CanRedo(); - } +FX_BOOL CFX_Edit::CanRedo() const { + if (m_bEnableUndo) { + return m_Undo.CanRedo(); + } - return FALSE; + return FALSE; } -FX_BOOL CFX_Edit::IsModified() const -{ - if (m_bEnableUndo) - { - return m_Undo.IsModified(); - } +FX_BOOL CFX_Edit::IsModified() const { + if (m_bEnableUndo) { + return m_Undo.IsModified(); + } - return FALSE; + return FALSE; } -void CFX_Edit::EnableRefresh(FX_BOOL bRefresh) -{ - m_bEnableRefresh = bRefresh; +void CFX_Edit::EnableRefresh(FX_BOOL bRefresh) { + m_bEnableRefresh = bRefresh; } -void CFX_Edit::EnableUndo(FX_BOOL bUndo) -{ - m_bEnableUndo = bUndo; +void CFX_Edit::EnableUndo(FX_BOOL bUndo) { + m_bEnableUndo = bUndo; } -void CFX_Edit::EnableNotify(FX_BOOL bNotify) -{ - m_bNotify = bNotify; +void CFX_Edit::EnableNotify(FX_BOOL bNotify) { + m_bNotify = bNotify; } -void CFX_Edit::EnableOprNotify(FX_BOOL bNotify) -{ - m_bOprNotify = bNotify; +void CFX_Edit::EnableOprNotify(FX_BOOL bNotify) { + m_bOprNotify = bNotify; } -FX_FLOAT CFX_Edit::GetLineTop(const CPVT_WordPlace& place) const -{ - if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) - { - CPVT_WordPlace wpOld = pIterator->GetAt(); +FX_FLOAT CFX_Edit::GetLineTop(const CPVT_WordPlace& place) const { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + CPVT_WordPlace wpOld = pIterator->GetAt(); - pIterator->SetAt(place); - CPVT_Line line; - pIterator->GetLine(line); + pIterator->SetAt(place); + CPVT_Line line; + pIterator->GetLine(line); - pIterator->SetAt(wpOld); + pIterator->SetAt(wpOld); - return line.ptLine.y + line.fLineAscent; - } + return line.ptLine.y + line.fLineAscent; + } - return 0.0f; + return 0.0f; } -FX_FLOAT CFX_Edit::GetLineBottom(const CPVT_WordPlace& place) const -{ - if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) - { - CPVT_WordPlace wpOld = pIterator->GetAt(); +FX_FLOAT CFX_Edit::GetLineBottom(const CPVT_WordPlace& place) const { + if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) { + CPVT_WordPlace wpOld = pIterator->GetAt(); - pIterator->SetAt(place); - CPVT_Line line; - pIterator->GetLine(line); + pIterator->SetAt(place); + CPVT_Line line; + pIterator->GetLine(line); - pIterator->SetAt(wpOld); + pIterator->SetAt(wpOld); - return line.ptLine.y + line.fLineDescent; - } + return line.ptLine.y + line.fLineDescent; + } - return 0.0f; + return 0.0f; } -CPVT_WordPlace CFX_Edit::DoInsertText(const CPVT_WordPlace& place, const FX_WCHAR* text, int32_t charset, - const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps) -{ - CPVT_WordPlace wp = place; +CPVT_WordPlace CFX_Edit::DoInsertText(const CPVT_WordPlace& place, + const FX_WCHAR* text, + int32_t charset, + const CPVT_SecProps* pSecProps, + const CPVT_WordProps* pWordProps) { + CPVT_WordPlace wp = place; - if (m_pVT->IsValid()) - { - CFX_WideString sText = text; + if (m_pVT->IsValid()) { + CFX_WideString sText = text; - for (int32_t i = 0, sz = sText.GetLength(); i < sz; i++) - { - FX_WORD word = sText[i]; - switch (word) - { - case 0x0D: - wp = m_pVT->InsertSection(wp,pSecProps,pWordProps); - if (sText[i+1] == 0x0A) - i++; - break; - case 0x0A: - wp = m_pVT->InsertSection(wp,pSecProps,pWordProps); - if (sText[i+1] == 0x0D) - i++; - break; - case 0x09: - word = 0x20; - default: - wp = m_pVT->InsertWord(wp,word,GetCharSetFromUnicode(word, charset),pWordProps); - break; - } - } + for (int32_t i = 0, sz = sText.GetLength(); i < sz; i++) { + FX_WORD word = sText[i]; + switch (word) { + case 0x0D: + wp = m_pVT->InsertSection(wp, pSecProps, pWordProps); + if (sText[i + 1] == 0x0A) + i++; + break; + case 0x0A: + wp = m_pVT->InsertSection(wp, pSecProps, pWordProps); + if (sText[i + 1] == 0x0D) + i++; + break; + case 0x09: + word = 0x20; + default: + wp = m_pVT->InsertWord(wp, word, GetCharSetFromUnicode(word, charset), + pWordProps); + break; + } } + } - return wp; + return wp; } -int32_t CFX_Edit::GetCharSetFromUnicode(FX_WORD word, int32_t nOldCharset) -{ - if (IFX_Edit_FontMap* pFontMap = GetFontMap()) - return pFontMap->CharSetFromUnicode(word, nOldCharset); - return nOldCharset; +int32_t CFX_Edit::GetCharSetFromUnicode(FX_WORD word, int32_t nOldCharset) { + if (IFX_Edit_FontMap* pFontMap = GetFontMap()) + return pFontMap->CharSetFromUnicode(word, nOldCharset); + return nOldCharset; } -void CFX_Edit::BeginGroupUndo(const CFX_WideString& sTitle) -{ - ASSERT(m_pGroupUndoItem == NULL); +void CFX_Edit::BeginGroupUndo(const CFX_WideString& sTitle) { + ASSERT(m_pGroupUndoItem == NULL); - m_pGroupUndoItem = new CFX_Edit_GroupUndoItem(sTitle); + m_pGroupUndoItem = new CFX_Edit_GroupUndoItem(sTitle); } -void CFX_Edit::EndGroupUndo() -{ - ASSERT(m_pGroupUndoItem != NULL); +void CFX_Edit::EndGroupUndo() { + ASSERT(m_pGroupUndoItem != NULL); - m_pGroupUndoItem->UpdateItems(); - m_Undo.AddItem(m_pGroupUndoItem); - if (m_bOprNotify && m_pOprNotify) - m_pOprNotify->OnAddUndo(m_pGroupUndoItem); - m_pGroupUndoItem = NULL; + m_pGroupUndoItem->UpdateItems(); + m_Undo.AddItem(m_pGroupUndoItem); + if (m_bOprNotify && m_pOprNotify) + m_pOprNotify->OnAddUndo(m_pGroupUndoItem); + m_pGroupUndoItem = NULL; } -void CFX_Edit::AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem) -{ - if (m_pGroupUndoItem) - m_pGroupUndoItem->AddUndoItem(pEditUndoItem); - else - { - m_Undo.AddItem(pEditUndoItem); - if (m_bOprNotify && m_pOprNotify) - m_pOprNotify->OnAddUndo(pEditUndoItem); - } -} - -void CFX_Edit::AddUndoItem(IFX_Edit_UndoItem* pUndoItem) -{ - m_Undo.AddItem(pUndoItem); +void CFX_Edit::AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem) { + if (m_pGroupUndoItem) + m_pGroupUndoItem->AddUndoItem(pEditUndoItem); + else { + m_Undo.AddItem(pEditUndoItem); if (m_bOprNotify && m_pOprNotify) - m_pOprNotify->OnAddUndo(pUndoItem); + m_pOprNotify->OnAddUndo(pEditUndoItem); + } } +void CFX_Edit::AddUndoItem(IFX_Edit_UndoItem* pUndoItem) { + m_Undo.AddItem(pUndoItem); + if (m_bOprNotify && m_pOprNotify) + m_pOprNotify->OnAddUndo(pUndoItem); +} diff --git a/fpdfsdk/src/fxedit/fxet_list.cpp b/fpdfsdk/src/fxedit/fxet_list.cpp index d94cc16c86..70dc8d5262 100644 --- a/fpdfsdk/src/fxedit/fxet_list.cpp +++ b/fpdfsdk/src/fxedit/fxet_list.cpp @@ -8,1004 +8,829 @@ #include "../../include/fxedit/fxet_edit.h" #include "../../include/fxedit/fxet_list.h" -/* ------------------------------- CFX_ListItem ---------------------------------- */ +/* ------------------------------- CFX_ListItem + * ---------------------------------- */ -CFX_ListItem::CFX_ListItem() : m_pEdit(NULL), - m_bSelected(FALSE), - m_bCaret(FALSE), - m_rcListItem(0.0f,0.0f,0.0f,0.0f) -{ - m_pEdit = IFX_Edit::NewEdit(); - ASSERT(m_pEdit != NULL); +CFX_ListItem::CFX_ListItem() + : m_pEdit(NULL), + m_bSelected(FALSE), + m_bCaret(FALSE), + m_rcListItem(0.0f, 0.0f, 0.0f, 0.0f) { + m_pEdit = IFX_Edit::NewEdit(); + ASSERT(m_pEdit != NULL); - m_pEdit->SetAlignmentV(1); - m_pEdit->Initialize(); + m_pEdit->SetAlignmentV(1); + m_pEdit->Initialize(); } -CFX_ListItem::~CFX_ListItem() -{ - IFX_Edit::DelEdit(m_pEdit); +CFX_ListItem::~CFX_ListItem() { + IFX_Edit::DelEdit(m_pEdit); } -void CFX_ListItem::SetFontMap(IFX_Edit_FontMap * pFontMap) -{ - if (m_pEdit) - m_pEdit->SetFontMap(pFontMap); +void CFX_ListItem::SetFontMap(IFX_Edit_FontMap* pFontMap) { + if (m_pEdit) + m_pEdit->SetFontMap(pFontMap); } -IFX_Edit* CFX_ListItem::GetEdit() const -{ - return m_pEdit; +IFX_Edit* CFX_ListItem::GetEdit() const { + return m_pEdit; } -IFX_Edit_Iterator* CFX_ListItem::GetIterator() const -{ - if (m_pEdit) - return m_pEdit->GetIterator(); +IFX_Edit_Iterator* CFX_ListItem::GetIterator() const { + if (m_pEdit) + return m_pEdit->GetIterator(); - return NULL; + return NULL; } -void CFX_ListItem::SetRect(const CLST_Rect & rect) -{ - m_rcListItem = rect; +void CFX_ListItem::SetRect(const CLST_Rect& rect) { + m_rcListItem = rect; } -CLST_Rect CFX_ListItem::GetRect() const -{ - return m_rcListItem; +CLST_Rect CFX_ListItem::GetRect() const { + return m_rcListItem; } -FX_BOOL CFX_ListItem::IsSelected() const -{ - return m_bSelected; +FX_BOOL CFX_ListItem::IsSelected() const { + return m_bSelected; } -void CFX_ListItem::SetSelect(FX_BOOL bSelected) -{ - m_bSelected = bSelected; +void CFX_ListItem::SetSelect(FX_BOOL bSelected) { + m_bSelected = bSelected; } -FX_BOOL CFX_ListItem::IsCaret() const -{ - return m_bCaret; +FX_BOOL CFX_ListItem::IsCaret() const { + return m_bCaret; } -void CFX_ListItem::SetCaret(FX_BOOL bCaret) -{ - m_bCaret = bCaret; +void CFX_ListItem::SetCaret(FX_BOOL bCaret) { + m_bCaret = bCaret; } -void CFX_ListItem::SetText(const FX_WCHAR* text) -{ - if (m_pEdit) - m_pEdit->SetText(text); +void CFX_ListItem::SetText(const FX_WCHAR* text) { + if (m_pEdit) + m_pEdit->SetText(text); } -void CFX_ListItem::SetFontSize(FX_FLOAT fFontSize) -{ - if (m_pEdit) - m_pEdit->SetFontSize(fFontSize); +void CFX_ListItem::SetFontSize(FX_FLOAT fFontSize) { + if (m_pEdit) + m_pEdit->SetFontSize(fFontSize); } -FX_FLOAT CFX_ListItem::GetItemHeight() const -{ - if (m_pEdit) - return m_pEdit->GetContentRect().Height(); +FX_FLOAT CFX_ListItem::GetItemHeight() const { + if (m_pEdit) + return m_pEdit->GetContentRect().Height(); - return 0.0f; + return 0.0f; } -FX_WORD CFX_ListItem::GetFirstChar() const -{ - CPVT_Word word; +FX_WORD CFX_ListItem::GetFirstChar() const { + CPVT_Word word; - if (IFX_Edit_Iterator* pIterator = GetIterator()) - { - pIterator->SetAt(1); - pIterator->GetWord(word); - } + if (IFX_Edit_Iterator* pIterator = GetIterator()) { + pIterator->SetAt(1); + pIterator->GetWord(word); + } - return word.Word; + return word.Word; } -CFX_WideString CFX_ListItem::GetText() const -{ - if (m_pEdit) - return m_pEdit->GetText(); +CFX_WideString CFX_ListItem::GetText() const { + if (m_pEdit) + return m_pEdit->GetText(); - return L""; + return L""; } -/* ------------------------------------ CFX_List --------------------------------- */ +/* ------------------------------------ CFX_List + * --------------------------------- */ -CFX_List::CFX_List() : m_fFontSize(0.0f), m_pFontMap(NULL), m_bMultiple(FALSE) -{ +CFX_List::CFX_List() + : m_fFontSize(0.0f), m_pFontMap(NULL), m_bMultiple(FALSE) {} + +CFX_List::~CFX_List() { + Empty(); } -CFX_List::~CFX_List() -{ - Empty(); +void CFX_List::Empty() { + for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) + delete m_aListItems.GetAt(i); + + m_aListItems.RemoveAll(); } -void CFX_List::Empty() -{ - for (int32_t i=0,sz=m_aListItems.GetSize(); iSetFontMap(m_pFontMap); + pListItem->SetFontSize(m_fFontSize); + pListItem->SetText(str); + m_aListItems.Add(pListItem); + } } -void CFX_List::SetFontSize(FX_FLOAT fFontSize) -{ - m_fFontSize = fFontSize; +void CFX_List::ReArrange(int32_t nItemIndex) { + FX_FLOAT fPosY = 0.0f; + + if (CFX_ListItem* pPrevItem = m_aListItems.GetAt(nItemIndex - 1)) + fPosY = pPrevItem->GetRect().bottom; + + for (int32_t i = nItemIndex, sz = m_aListItems.GetSize(); i < sz; i++) { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) { + FX_FLOAT fListItemHeight = pListItem->GetItemHeight(); + pListItem->SetRect(CLST_Rect(0.0f, fPosY, 0.0f, fPosY + fListItemHeight)); + fPosY += fListItemHeight; + } + } + + SetContentRect(CLST_Rect(0.0f, 0.0f, 0.0f, fPosY)); } -void CFX_List::AddItem(const FX_WCHAR* str) -{ - if (CFX_ListItem * pListItem = new CFX_ListItem()) - { - pListItem->SetFontMap(m_pFontMap); - pListItem->SetFontSize(m_fFontSize); - pListItem->SetText(str); - m_aListItems.Add(pListItem); - } +IFX_Edit* CFX_List::GetItemEdit(int32_t nIndex) const { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) { + return pListItem->GetEdit(); + } + + return NULL; } -void CFX_List::ReArrange(int32_t nItemIndex) -{ - FX_FLOAT fPosY = 0.0f; +int32_t CFX_List::GetCount() const { + return m_aListItems.GetSize(); +} - if (CFX_ListItem * pPrevItem = m_aListItems.GetAt(nItemIndex - 1)) - fPosY = pPrevItem->GetRect().bottom; +CPDF_Rect CFX_List::GetPlateRect() const { + return CFX_ListContainer::GetPlateRect(); +} - for (int32_t i=nItemIndex,sz=m_aListItems.GetSize(); iGetItemHeight(); - pListItem->SetRect(CLST_Rect(0.0f,fPosY,0.0f,fPosY + fListItemHeight)); - fPosY += fListItemHeight; - } - } +CPDF_Rect CFX_List::GetContentRect() const { + return InnerToOuter(CFX_ListContainer::GetContentRect()); +} - SetContentRect(CLST_Rect(0.0f,0.0f,0.0f,fPosY)); +FX_FLOAT CFX_List::GetFontSize() const { + return m_fFontSize; } -IFX_Edit * CFX_List::GetItemEdit(int32_t nIndex) const -{ - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex)) - { - return pListItem->GetEdit(); - } +int32_t CFX_List::GetItemIndex(const CPDF_Point& point) const { + CPDF_Point pt = OuterToInner(point); + + FX_BOOL bFirst = TRUE; + FX_BOOL bLast = TRUE; - return NULL; + for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) { + CLST_Rect rcListItem = pListItem->GetRect(); + + if (FX_EDIT_IsFloatBigger(pt.y, rcListItem.top)) { + bFirst = FALSE; + } + + if (FX_EDIT_IsFloatSmaller(pt.y, rcListItem.bottom)) { + bLast = FALSE; + } + + if (pt.y >= rcListItem.top && pt.y < rcListItem.bottom) { + return i; + } + } + } + + if (bFirst) + return 0; + if (bLast) + return m_aListItems.GetSize() - 1; + + return -1; } -int32_t CFX_List::GetCount() const -{ - return m_aListItems.GetSize(); +FX_FLOAT CFX_List::GetFirstHeight() const { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(0)) { + return pListItem->GetItemHeight(); + } + + return 1.0f; } -CPDF_Rect CFX_List::GetPlateRect() const -{ - return CFX_ListContainer::GetPlateRect(); +int32_t CFX_List::GetFirstSelected() const { + for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) { + if (pListItem->IsSelected()) + return i; + } + } + return -1; } -CPDF_Rect CFX_List::GetContentRect() const -{ - return InnerToOuter(CFX_ListContainer::GetContentRect()); +int32_t CFX_List::GetLastSelected() const { + for (int32_t i = m_aListItems.GetSize() - 1; i >= 0; i--) { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) { + if (pListItem->IsSelected()) + return i; + } + } + return -1; } -FX_FLOAT CFX_List::GetFontSize() const -{ - return m_fFontSize; +FX_WCHAR CFX_List::Toupper(FX_WCHAR c) const { + if ((c >= 'a') && (c <= 'z')) + c = c - ('a' - 'A'); + return c; } -int32_t CFX_List::GetItemIndex(const CPDF_Point & point) const -{ - CPDF_Point pt = OuterToInner(point); +int32_t CFX_List::FindNext(int32_t nIndex, FX_WCHAR nChar) const { + int32_t nCircleIndex = nIndex; - FX_BOOL bFirst = TRUE; - FX_BOOL bLast = TRUE; + for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) { + nCircleIndex++; + if (nCircleIndex >= sz) + nCircleIndex = 0; - for (int32_t i=0,sz=m_aListItems.GetSize(); iGetRect(); + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nCircleIndex)) { + if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar)) + return nCircleIndex; + } + } - if (FX_EDIT_IsFloatBigger(pt.y, rcListItem.top)) - { - bFirst = FALSE; - } + return nCircleIndex; +} - if (FX_EDIT_IsFloatSmaller(pt.y, rcListItem.bottom)) - { - bLast = FALSE; - } +CPDF_Rect CFX_List::GetItemRect(int32_t nIndex) const { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) { + CPDF_Rect rcItem = pListItem->GetRect(); + rcItem.left = 0.0f; + rcItem.right = GetPlateRect().Width(); + return InnerToOuter(rcItem); + } - if (pt.y >= rcListItem.top && pt.y < rcListItem.bottom) - { - return i; - } - } - } + return CPDF_Rect(); +} - if (bFirst) return 0; - if (bLast) return m_aListItems.GetSize()-1; +FX_BOOL CFX_List::IsItemSelected(int32_t nIndex) const { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) { + return pListItem->IsSelected(); + } + + return FALSE; +} - return -1; +void CFX_List::SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected) { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) { + pListItem->SetSelect(bSelected); + } } -FX_FLOAT CFX_List::GetFirstHeight() const -{ - if (CFX_ListItem * pListItem = m_aListItems.GetAt(0)) - { - return pListItem->GetItemHeight(); - } +void CFX_List::SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret) { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) { + pListItem->SetCaret(bCaret); + } +} - return 1.0f; +void CFX_List::SetMultipleSel(FX_BOOL bMultiple) { + m_bMultiple = bMultiple; } -int32_t CFX_List::GetFirstSelected() const -{ - for (int32_t i=0,sz=m_aListItems.GetSize(); iIsSelected()) - return i; - } - } - return -1; +FX_BOOL CFX_List::IsMultipleSel() const { + return m_bMultiple; } -int32_t CFX_List::GetLastSelected() const -{ - for (int32_t i=m_aListItems.GetSize()-1; i>=0; i--) - { - if (CFX_ListItem * pListItem = m_aListItems.GetAt(i)) - { - if (pListItem->IsSelected()) - return i; - } - } - return -1; +FX_BOOL CFX_List::IsValid(int32_t nItemIndex) const { + return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize(); } -FX_WCHAR CFX_List::Toupper(FX_WCHAR c) const -{ - if ( (c >= 'a') && (c <= 'z') ) - c = c - ('a' - 'A'); - return c; +CFX_WideString CFX_List::GetItemText(int32_t nIndex) const { + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) { + return pListItem->GetText(); + } + + return L""; } -int32_t CFX_List::FindNext(int32_t nIndex,FX_WCHAR nChar) const -{ - int32_t nCircleIndex = nIndex; +/* ------------------------------------ CPLST_Select + * ---------------------------------- */ - for (int32_t i=0,sz=m_aListItems.GetSize(); i= sz) nCircleIndex = 0; +CPLST_Select::CPLST_Select() {} - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nCircleIndex)) - { - if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar)) - return nCircleIndex; - } - } +CPLST_Select::~CPLST_Select() { + for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++) + delete m_aItems.GetAt(i); - return nCircleIndex; + m_aItems.RemoveAll(); } -CPDF_Rect CFX_List::GetItemRect(int32_t nIndex) const -{ - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex)) - { - CPDF_Rect rcItem = pListItem->GetRect(); - rcItem.left = 0.0f; - rcItem.right = GetPlateRect().Width(); - return InnerToOuter(rcItem); - } +void CPLST_Select::Add(int32_t nItemIndex) { + int32_t nIndex = Find(nItemIndex); - return CPDF_Rect(); + if (nIndex < 0) + m_aItems.Add(new CPLST_Select_Item(nItemIndex, 1)); + else { + if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex)) { + pItem->nState = 1; + } + } } -FX_BOOL CFX_List::IsItemSelected(int32_t nIndex) const -{ - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex)) - { - return pListItem->IsSelected(); - } +void CPLST_Select::Add(int32_t nBeginIndex, int32_t nEndIndex) { + if (nBeginIndex > nEndIndex) { + int32_t nTemp = nEndIndex; + nEndIndex = nBeginIndex; + nBeginIndex = nTemp; + } - return FALSE; + for (int32_t i = nBeginIndex; i <= nEndIndex; i++) + Add(i); } -void CFX_List::SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected) -{ - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nItemIndex)) - { - pListItem->SetSelect(bSelected); - } +void CPLST_Select::Sub(int32_t nItemIndex) { + for (int32_t i = m_aItems.GetSize() - 1; i >= 0; i--) { + if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) + if (pItem->nItemIndex == nItemIndex) + pItem->nState = -1; + } } -void CFX_List::SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret) -{ - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nItemIndex)) - { - pListItem->SetCaret(bCaret); - } +void CPLST_Select::Sub(int32_t nBeginIndex, int32_t nEndIndex) { + if (nBeginIndex > nEndIndex) { + int32_t nTemp = nEndIndex; + nEndIndex = nBeginIndex; + nBeginIndex = nTemp; + } + + for (int32_t i = nBeginIndex; i <= nEndIndex; i++) + Sub(i); } -void CFX_List::SetMultipleSel(FX_BOOL bMultiple) -{ - m_bMultiple = bMultiple; +int32_t CPLST_Select::Find(int32_t nItemIndex) const { + for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++) { + if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) { + if (pItem->nItemIndex == nItemIndex) + return i; + } + } + + return -1; } -FX_BOOL CFX_List::IsMultipleSel() const -{ - return m_bMultiple; +FX_BOOL CPLST_Select::IsExist(int32_t nItemIndex) const { + return Find(nItemIndex) >= 0; } -FX_BOOL CFX_List::IsValid(int32_t nItemIndex) const -{ - return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize(); +int32_t CPLST_Select::GetCount() const { + return m_aItems.GetSize(); } -CFX_WideString CFX_List::GetItemText(int32_t nIndex) const -{ - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex)) - { - return pListItem->GetText(); - } +int32_t CPLST_Select::GetItemIndex(int32_t nIndex) const { + if (nIndex >= 0 && nIndex < m_aItems.GetSize()) + if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex)) + return pItem->nItemIndex; - return L""; + return -1; } -/* ------------------------------------ CPLST_Select ---------------------------------- */ +int32_t CPLST_Select::GetState(int32_t nIndex) const { + if (nIndex >= 0 && nIndex < m_aItems.GetSize()) + if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex)) + return pItem->nState; -CPLST_Select::CPLST_Select() -{ + return 0; } -CPLST_Select::~CPLST_Select() -{ - for (int32_t i=0,sz=m_aItems.GetSize(); inState = -1; + } + } +} - m_aItems.RemoveAll(); +void CPLST_Select::Done() { + for (int32_t i = m_aItems.GetSize() - 1; i >= 0; i--) { + if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) { + if (pItem->nState == -1) { + delete pItem; + m_aItems.RemoveAt(i); + } else { + pItem->nState = 0; + } + } + } } -void CPLST_Select::Add(int32_t nItemIndex) -{ - int32_t nIndex = Find(nItemIndex); +/* ------------------------------------ CFX_ListCtrl + * --------------------------------- */ + +CFX_ListCtrl::CFX_ListCtrl() + : m_pNotify(NULL), + m_bNotifyFlag(FALSE), + m_ptScrollPos(0.0f, 0.0f), + m_nSelItem(-1), + m_nFootIndex(-1), + m_bCtrlSel(FALSE), + m_nCaretIndex(-1) {} - if (nIndex < 0) - m_aItems.Add(new CPLST_Select_Item(nItemIndex,1)); - else - { - if (CPLST_Select_Item * pItem = m_aItems.GetAt(nIndex)) - { - pItem->nState = 1; - } - } +CFX_ListCtrl::~CFX_ListCtrl() {} + +void CFX_ListCtrl::SetNotify(IFX_List_Notify* pNotify) { + m_pNotify = pNotify; } -void CPLST_Select::Add(int32_t nBeginIndex, int32_t nEndIndex) -{ - if (nBeginIndex > nEndIndex) - { - int32_t nTemp = nEndIndex; - nEndIndex = nBeginIndex; - nBeginIndex = nTemp; - } +CPDF_Point CFX_ListCtrl::InToOut(const CPDF_Point& point) const { + CPDF_Rect rcPlate = GetPlateRect(); - for (int32_t i=nBeginIndex; i<=nEndIndex; i++) Add(i); + return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left), + point.y - (m_ptScrollPos.y - rcPlate.top)); } -void CPLST_Select::Sub(int32_t nItemIndex) -{ - for (int32_t i=m_aItems.GetSize()-1; i>=0; i--) - { - if (CPLST_Select_Item * pItem = m_aItems.GetAt(i)) - if (pItem->nItemIndex == nItemIndex) - pItem->nState = -1; - } +CPDF_Point CFX_ListCtrl::OutToIn(const CPDF_Point& point) const { + CPDF_Rect rcPlate = GetPlateRect(); + + return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left), + point.y + (m_ptScrollPos.y - rcPlate.top)); } -void CPLST_Select::Sub(int32_t nBeginIndex, int32_t nEndIndex) -{ - if (nBeginIndex > nEndIndex) - { - int32_t nTemp = nEndIndex; - nEndIndex = nBeginIndex; - nBeginIndex = nTemp; - } +CPDF_Rect CFX_ListCtrl::InToOut(const CPDF_Rect& rect) const { + CPDF_Point ptLeftBottom = InToOut(CPDF_Point(rect.left, rect.bottom)); + CPDF_Point ptRightTop = InToOut(CPDF_Point(rect.right, rect.top)); - for (int32_t i=nBeginIndex; i<=nEndIndex; i++) Sub(i); + return CPDF_Rect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y); } -int32_t CPLST_Select::Find(int32_t nItemIndex) const -{ - for (int32_t i=0,sz=m_aItems.GetSize(); inItemIndex == nItemIndex) - return i; - } - } +CPDF_Rect CFX_ListCtrl::OutToIn(const CPDF_Rect& rect) const { + CPDF_Point ptLeftBottom = OutToIn(CPDF_Point(rect.left, rect.bottom)); + CPDF_Point ptRightTop = OutToIn(CPDF_Point(rect.right, rect.top)); - return -1; + return CPDF_Rect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y); } -FX_BOOL CPLST_Select::IsExist(int32_t nItemIndex) const -{ - return Find(nItemIndex) >= 0; +void CFX_ListCtrl::OnMouseDown(const CPDF_Point& point, + FX_BOOL bShift, + FX_BOOL bCtrl) { + int32_t nHitIndex = GetItemIndex(point); + + if (IsMultipleSel()) { + if (bCtrl) { + if (IsItemSelected(nHitIndex)) { + m_aSelItems.Sub(nHitIndex); + SelectItems(); + m_bCtrlSel = FALSE; + } else { + m_aSelItems.Add(nHitIndex); + SelectItems(); + m_bCtrlSel = TRUE; + } + + m_nFootIndex = nHitIndex; + } else if (bShift) { + m_aSelItems.DeselectAll(); + m_aSelItems.Add(m_nFootIndex, nHitIndex); + SelectItems(); + } else { + m_aSelItems.DeselectAll(); + m_aSelItems.Add(nHitIndex); + SelectItems(); + + m_nFootIndex = nHitIndex; + } + + SetCaret(nHitIndex); + } else { + SetSingleSelect(nHitIndex); + } + + if (!IsItemVisible(nHitIndex)) + ScrollToListItem(nHitIndex); } -int32_t CPLST_Select::GetCount() const -{ - return m_aItems.GetSize(); +void CFX_ListCtrl::OnMouseMove(const CPDF_Point& point, + FX_BOOL bShift, + FX_BOOL bCtrl) { + int32_t nHitIndex = GetItemIndex(point); + + if (IsMultipleSel()) { + if (bCtrl) { + if (m_bCtrlSel) + m_aSelItems.Add(m_nFootIndex, nHitIndex); + else + m_aSelItems.Sub(m_nFootIndex, nHitIndex); + + SelectItems(); + } else { + m_aSelItems.DeselectAll(); + m_aSelItems.Add(m_nFootIndex, nHitIndex); + SelectItems(); + } + + SetCaret(nHitIndex); + } else { + SetSingleSelect(nHitIndex); + } + + if (!IsItemVisible(nHitIndex)) + ScrollToListItem(nHitIndex); } -int32_t CPLST_Select::GetItemIndex(int32_t nIndex) const -{ - if (nIndex >= 0 && nIndex < m_aItems.GetSize()) - if (CPLST_Select_Item * pItem = m_aItems.GetAt(nIndex)) - return pItem->nItemIndex; +void CFX_ListCtrl::OnVK(int32_t nItemIndex, FX_BOOL bShift, FX_BOOL bCtrl) { + if (IsMultipleSel()) { + if (nItemIndex >= 0 && nItemIndex < GetCount()) { + if (bCtrl) { + } else if (bShift) { + m_aSelItems.DeselectAll(); + m_aSelItems.Add(m_nFootIndex, nItemIndex); + SelectItems(); + } else { + m_aSelItems.DeselectAll(); + m_aSelItems.Add(nItemIndex); + SelectItems(); + m_nFootIndex = nItemIndex; + } + + SetCaret(nItemIndex); + } + } else { + SetSingleSelect(nItemIndex); + } - return -1; + if (!IsItemVisible(nItemIndex)) + ScrollToListItem(nItemIndex); } -int32_t CPLST_Select::GetState(int32_t nIndex) const -{ - if (nIndex >= 0 && nIndex < m_aItems.GetSize()) - if (CPLST_Select_Item * pItem = m_aItems.GetAt(nIndex)) - return pItem->nState; +void CFX_ListCtrl::OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) { + OnVK(IsMultipleSel() ? GetCaret() - 1 : GetSelect() - 1, bShift, bCtrl); +} - return 0; +void CFX_ListCtrl::OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) { + OnVK(IsMultipleSel() ? GetCaret() + 1 : GetSelect() + 1, bShift, bCtrl); } -void CPLST_Select::DeselectAll() -{ - for (int32_t i=0,sz=m_aItems.GetSize(); inState = -1; - } - } -} - -void CPLST_Select::Done() -{ - for (int32_t i=m_aItems.GetSize()-1; i>=0; i--) - { - if (CPLST_Select_Item * pItem = m_aItems.GetAt(i)) - { - if (pItem->nState == -1) - { - delete pItem; - m_aItems.RemoveAt(i); - } - else - { - pItem->nState = 0; - } - } - } -} - -/* ------------------------------------ CFX_ListCtrl --------------------------------- */ +void CFX_ListCtrl::OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) { + OnVK(0, bShift, bCtrl); +} -CFX_ListCtrl::CFX_ListCtrl() : m_pNotify(NULL), - m_bNotifyFlag(FALSE), - m_ptScrollPos(0.0f,0.0f), - m_nSelItem(-1), - m_nFootIndex(-1), - m_bCtrlSel(FALSE), - m_nCaretIndex(-1) -{ -} - -CFX_ListCtrl::~CFX_ListCtrl() -{ +void CFX_ListCtrl::OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) { + OnVK(GetCount() - 1, bShift, bCtrl); } - -void CFX_ListCtrl::SetNotify(IFX_List_Notify * pNotify) -{ - m_pNotify = pNotify; -} - -CPDF_Point CFX_ListCtrl::InToOut(const CPDF_Point & point) const -{ - CPDF_Rect rcPlate = GetPlateRect(); - - return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left), - point.y - (m_ptScrollPos.y - rcPlate.top)); -} - -CPDF_Point CFX_ListCtrl::OutToIn(const CPDF_Point & point) const -{ - CPDF_Rect rcPlate = GetPlateRect(); - - return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left), - point.y + (m_ptScrollPos.y - rcPlate.top)); -} - -CPDF_Rect CFX_ListCtrl::InToOut(const CPDF_Rect & rect) const -{ - CPDF_Point ptLeftBottom = InToOut(CPDF_Point(rect.left,rect.bottom)); - CPDF_Point ptRightTop = InToOut(CPDF_Point(rect.right,rect.top)); - - return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y); -} - -CPDF_Rect CFX_ListCtrl::OutToIn(const CPDF_Rect & rect) const -{ - CPDF_Point ptLeftBottom = OutToIn(CPDF_Point(rect.left,rect.bottom)); - CPDF_Point ptRightTop = OutToIn(CPDF_Point(rect.right,rect.top)); - - return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y); -} - -void CFX_ListCtrl::OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) -{ - int32_t nHitIndex = GetItemIndex(point); - - if (IsMultipleSel()) - { - if (bCtrl) - { - if (IsItemSelected(nHitIndex)) - { - m_aSelItems.Sub(nHitIndex); - SelectItems(); - m_bCtrlSel = FALSE; - } - else - { - m_aSelItems.Add(nHitIndex); - SelectItems(); - m_bCtrlSel = TRUE; - } - - m_nFootIndex = nHitIndex; - } - else if (bShift) - { - m_aSelItems.DeselectAll(); - m_aSelItems.Add(m_nFootIndex,nHitIndex); - SelectItems(); - } - else - { - m_aSelItems.DeselectAll(); - m_aSelItems.Add(nHitIndex); - SelectItems(); - - m_nFootIndex = nHitIndex; - } - - SetCaret(nHitIndex); - } - else - { - SetSingleSelect(nHitIndex); - } - - if (!IsItemVisible(nHitIndex)) - ScrollToListItem(nHitIndex); -} - -void CFX_ListCtrl::OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) -{ - int32_t nHitIndex = GetItemIndex(point); - - if (IsMultipleSel()) - { - if (bCtrl) - { - if (m_bCtrlSel) - m_aSelItems.Add(m_nFootIndex,nHitIndex); - else - m_aSelItems.Sub(m_nFootIndex,nHitIndex); - - SelectItems(); - } - else - { - m_aSelItems.DeselectAll(); - m_aSelItems.Add(m_nFootIndex,nHitIndex); - SelectItems(); - } - - SetCaret(nHitIndex); - } - else - { - SetSingleSelect(nHitIndex); - } - - if (!IsItemVisible(nHitIndex)) - ScrollToListItem(nHitIndex); -} - -void CFX_ListCtrl::OnVK(int32_t nItemIndex,FX_BOOL bShift,FX_BOOL bCtrl) -{ - if (IsMultipleSel()) - { - if (nItemIndex >= 0 && nItemIndex < GetCount()) - { - if (bCtrl) - { - } - else if (bShift) - { - m_aSelItems.DeselectAll(); - m_aSelItems.Add(m_nFootIndex,nItemIndex); - SelectItems(); - } - else - { - m_aSelItems.DeselectAll(); - m_aSelItems.Add(nItemIndex); - SelectItems(); - m_nFootIndex = nItemIndex; - } - - SetCaret(nItemIndex); - } - } - else - { - SetSingleSelect(nItemIndex); - } - - if (!IsItemVisible(nItemIndex)) - ScrollToListItem(nItemIndex); -} - -void CFX_ListCtrl::OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl) -{ - OnVK(IsMultipleSel() ? GetCaret()-1 : GetSelect()-1, bShift, bCtrl); -} - -void CFX_ListCtrl::OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl) -{ - OnVK(IsMultipleSel() ? GetCaret()+1 : GetSelect()+1, bShift, bCtrl); -} - -void CFX_ListCtrl::OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl) -{ - OnVK(0, bShift, bCtrl); -} - -void CFX_ListCtrl::OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl) -{ - OnVK(GetCount()-1, bShift, bCtrl); -} - -void CFX_ListCtrl::OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl) -{ - OnVK(0, bShift, bCtrl); -} - -void CFX_ListCtrl::OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl) -{ - OnVK(GetCount()-1, bShift, bCtrl); -} - -FX_BOOL CFX_ListCtrl::OnChar(FX_WORD nChar,FX_BOOL bShift,FX_BOOL bCtrl) -{ - int32_t nIndex = GetLastSelected(); - int32_t nFindIndex = FindNext(nIndex,nChar); - - if (nFindIndex != nIndex) - { - OnVK(nFindIndex, bShift, bCtrl); - return TRUE; - } - return FALSE; + +void CFX_ListCtrl::OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) { + OnVK(0, bShift, bCtrl); +} + +void CFX_ListCtrl::OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) { + OnVK(GetCount() - 1, bShift, bCtrl); +} + +FX_BOOL CFX_ListCtrl::OnChar(FX_WORD nChar, FX_BOOL bShift, FX_BOOL bCtrl) { + int32_t nIndex = GetLastSelected(); + int32_t nFindIndex = FindNext(nIndex, nChar); + + if (nFindIndex != nIndex) { + OnVK(nFindIndex, bShift, bCtrl); + return TRUE; + } + return FALSE; } /* -------- inner methods ------- */ -void CFX_ListCtrl::SetPlateRect(const CPDF_Rect & rect) -{ - CFX_ListContainer::SetPlateRect(rect); - m_ptScrollPos.x = rect.left; - SetScrollPos(CPDF_Point(rect.left,rect.top)); - ReArrange(0); - InvalidateItem(-1); -} - -CPDF_Rect CFX_ListCtrl::GetItemRect(int32_t nIndex) const -{ - return InToOut(CFX_List::GetItemRect(nIndex)); -} - -void CFX_ListCtrl::AddString(const FX_WCHAR* string) -{ - AddItem(string); - ReArrange(GetCount() - 1); -} - -void CFX_ListCtrl::SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected) -{ - if (!IsValid(nItemIndex)) return; - - if (bSelected != IsItemSelected(nItemIndex)) - { - if (bSelected) - { - SetItemSelect(nItemIndex,TRUE); - InvalidateItem(nItemIndex); - } - else - { - SetItemSelect(nItemIndex,FALSE); - InvalidateItem(nItemIndex); - } - } -} - -void CFX_ListCtrl::SetSingleSelect(int32_t nItemIndex) -{ - if (!IsValid(nItemIndex)) return; - - if (m_nSelItem != nItemIndex) - { - if (m_nSelItem >= 0) - { - SetItemSelect(m_nSelItem,FALSE); - InvalidateItem(m_nSelItem); - } - - SetItemSelect(nItemIndex,TRUE); - InvalidateItem(nItemIndex); - m_nSelItem = nItemIndex; - } -} - -void CFX_ListCtrl::SetCaret(int32_t nItemIndex) -{ - if (!IsValid(nItemIndex)) return; - - if (IsMultipleSel()) - { - int32_t nOldIndex = m_nCaretIndex; - - if (nOldIndex != nItemIndex) - { - m_nCaretIndex = nItemIndex; - - SetItemCaret(nOldIndex, FALSE); - SetItemCaret(nItemIndex,TRUE); - - InvalidateItem(nOldIndex); - InvalidateItem(nItemIndex); - } - } -} - -void CFX_ListCtrl::InvalidateItem(int32_t nItemIndex) -{ - if (m_pNotify) - { - if (nItemIndex == -1) - { - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - CPDF_Rect rcRefresh = GetPlateRect(); - m_pNotify->IOnInvalidateRect(&rcRefresh); - m_bNotifyFlag = FALSE; - } - } - else - { - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - CPDF_Rect rcRefresh = GetItemRect(nItemIndex); - rcRefresh.left -= 1.0f; - rcRefresh.right += 1.0f; - rcRefresh.bottom -= 1.0f; - rcRefresh.top += 1.0f; - - m_pNotify->IOnInvalidateRect(&rcRefresh); - m_bNotifyFlag = FALSE; - } - } - } -} - -void CFX_ListCtrl::SelectItems() -{ - for (int32_t i=0,sz=m_aSelItems.GetCount(); i= rcPlate.bottom && rcItem.top <= rcPlate.top; -} - -void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex) -{ - if (!IsValid(nItemIndex)) return; - - CPDF_Rect rcPlate = GetPlateRect(); - CPDF_Rect rcItem = CFX_List::GetItemRect(nItemIndex); - CPDF_Rect rcItemCtrl = GetItemRect(nItemIndex); - - if (FX_EDIT_IsFloatSmaller(rcItemCtrl.bottom, rcPlate.bottom)) - { - if (FX_EDIT_IsFloatSmaller(rcItemCtrl.top, rcPlate.top)) - { - SetScrollPosY(rcItem.bottom + rcPlate.Height()); - } - } - else if (FX_EDIT_IsFloatBigger(rcItemCtrl.top, rcPlate.top)) - { - if (FX_EDIT_IsFloatBigger(rcItemCtrl.bottom, rcPlate.bottom)) - { - SetScrollPosY(rcItem.top); - } - } -} - -void CFX_ListCtrl::SetScrollInfo() -{ - if (m_pNotify) - { - CPDF_Rect rcPlate = GetPlateRect(); - CPDF_Rect rcContent = CFX_List::GetContentRect(); - - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top, - rcContent.bottom, rcContent.top, GetFirstHeight(), rcPlate.Height()); - m_bNotifyFlag = FALSE; - } - } -} - -void CFX_ListCtrl::SetScrollPos(const CPDF_Point & point) -{ - SetScrollPosY(point.y); -} - -void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy) -{ - if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y,fy)) - { - CPDF_Rect rcPlate = GetPlateRect(); - CPDF_Rect rcContent = CFX_List::GetContentRect(); - - if (rcPlate.Height() > rcContent.Height()) - { - fy = rcPlate.top; - } - else - { - if (FX_EDIT_IsFloatSmaller(fy - rcPlate.Height(), rcContent.bottom)) - { - fy = rcContent.bottom + rcPlate.Height(); - } - else if (FX_EDIT_IsFloatBigger(fy, rcContent.top)) - { - fy = rcContent.top; - } - } - - m_ptScrollPos.y = fy; - InvalidateItem(-1); +void CFX_ListCtrl::SetPlateRect(const CPDF_Rect& rect) { + CFX_ListContainer::SetPlateRect(rect); + m_ptScrollPos.x = rect.left; + SetScrollPos(CPDF_Point(rect.left, rect.top)); + ReArrange(0); + InvalidateItem(-1); +} + +CPDF_Rect CFX_ListCtrl::GetItemRect(int32_t nIndex) const { + return InToOut(CFX_List::GetItemRect(nIndex)); +} + +void CFX_ListCtrl::AddString(const FX_WCHAR* string) { + AddItem(string); + ReArrange(GetCount() - 1); +} + +void CFX_ListCtrl::SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected) { + if (!IsValid(nItemIndex)) + return; - if (m_pNotify) - { - if (!m_bNotifyFlag) - { - m_bNotifyFlag = TRUE; - m_pNotify->IOnSetScrollPosY(fy); - m_bNotifyFlag = FALSE; - } - } - } -} - -CPDF_Rect CFX_ListCtrl::GetContentRect() const -{ - return InToOut(CFX_List::GetContentRect()); + if (bSelected != IsItemSelected(nItemIndex)) { + if (bSelected) { + SetItemSelect(nItemIndex, TRUE); + InvalidateItem(nItemIndex); + } else { + SetItemSelect(nItemIndex, FALSE); + InvalidateItem(nItemIndex); + } + } } -void CFX_ListCtrl::ReArrange(int32_t nItemIndex) -{ - CFX_List::ReArrange(nItemIndex); - SetScrollInfo(); -} - -void CFX_ListCtrl::SetTopItem(int32_t nIndex) -{ - if (IsValid(nIndex)) - { - GetPlateRect(); - CPDF_Rect rcItem = CFX_List::GetItemRect(nIndex); - SetScrollPosY(rcItem.top); - } -} - -int32_t CFX_ListCtrl::GetTopItem() const -{ - int32_t nItemIndex = GetItemIndex(GetBTPoint()); - - if (!IsItemVisible(nItemIndex) && IsItemVisible(nItemIndex + 1)) - nItemIndex += 1; - - return nItemIndex; -} - -void CFX_ListCtrl::Empty() -{ - CFX_List::Empty(); - InvalidateItem(-1); +void CFX_ListCtrl::SetSingleSelect(int32_t nItemIndex) { + if (!IsValid(nItemIndex)) + return; + + if (m_nSelItem != nItemIndex) { + if (m_nSelItem >= 0) { + SetItemSelect(m_nSelItem, FALSE); + InvalidateItem(m_nSelItem); + } + + SetItemSelect(nItemIndex, TRUE); + InvalidateItem(nItemIndex); + m_nSelItem = nItemIndex; + } } -void CFX_ListCtrl::Cancel() -{ - m_aSelItems.DeselectAll(); +void CFX_ListCtrl::SetCaret(int32_t nItemIndex) { + if (!IsValid(nItemIndex)) + return; + + if (IsMultipleSel()) { + int32_t nOldIndex = m_nCaretIndex; + + if (nOldIndex != nItemIndex) { + m_nCaretIndex = nItemIndex; + + SetItemCaret(nOldIndex, FALSE); + SetItemCaret(nItemIndex, TRUE); + + InvalidateItem(nOldIndex); + InvalidateItem(nItemIndex); + } + } } -int32_t CFX_ListCtrl::GetItemIndex(const CPDF_Point & point) const -{ - return CFX_List::GetItemIndex(OutToIn(point)); +void CFX_ListCtrl::InvalidateItem(int32_t nItemIndex) { + if (m_pNotify) { + if (nItemIndex == -1) { + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + CPDF_Rect rcRefresh = GetPlateRect(); + m_pNotify->IOnInvalidateRect(&rcRefresh); + m_bNotifyFlag = FALSE; + } + } else { + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + CPDF_Rect rcRefresh = GetItemRect(nItemIndex); + rcRefresh.left -= 1.0f; + rcRefresh.right += 1.0f; + rcRefresh.bottom -= 1.0f; + rcRefresh.top += 1.0f; + + m_pNotify->IOnInvalidateRect(&rcRefresh); + m_bNotifyFlag = FALSE; + } + } + } +} + +void CFX_ListCtrl::SelectItems() { + for (int32_t i = 0, sz = m_aSelItems.GetCount(); i < sz; i++) { + int32_t nItemIndex = m_aSelItems.GetItemIndex(i); + int32_t nState = m_aSelItems.GetState(i); + + switch (nState) { + case 1: + SetMultipleSelect(nItemIndex, TRUE); + break; + case -1: + SetMultipleSelect(nItemIndex, FALSE); + break; + } + } + + m_aSelItems.Done(); +} + +void CFX_ListCtrl::Select(int32_t nItemIndex) { + if (!IsValid(nItemIndex)) + return; + + if (IsMultipleSel()) { + m_aSelItems.Add(nItemIndex); + SelectItems(); + } else + SetSingleSelect(nItemIndex); } -CFX_WideString CFX_ListCtrl::GetText() const -{ - if (IsMultipleSel()) - return GetItemText(m_nCaretIndex); - return GetItemText(m_nSelItem); +FX_BOOL CFX_ListCtrl::IsItemVisible(int32_t nItemIndex) const { + CPDF_Rect rcPlate = GetPlateRect(); + CPDF_Rect rcItem = GetItemRect(nItemIndex); + + return rcItem.bottom >= rcPlate.bottom && rcItem.top <= rcPlate.top; } +void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex) { + if (!IsValid(nItemIndex)) + return; + + CPDF_Rect rcPlate = GetPlateRect(); + CPDF_Rect rcItem = CFX_List::GetItemRect(nItemIndex); + CPDF_Rect rcItemCtrl = GetItemRect(nItemIndex); + + if (FX_EDIT_IsFloatSmaller(rcItemCtrl.bottom, rcPlate.bottom)) { + if (FX_EDIT_IsFloatSmaller(rcItemCtrl.top, rcPlate.top)) { + SetScrollPosY(rcItem.bottom + rcPlate.Height()); + } + } else if (FX_EDIT_IsFloatBigger(rcItemCtrl.top, rcPlate.top)) { + if (FX_EDIT_IsFloatBigger(rcItemCtrl.bottom, rcPlate.bottom)) { + SetScrollPosY(rcItem.top); + } + } +} + +void CFX_ListCtrl::SetScrollInfo() { + if (m_pNotify) { + CPDF_Rect rcPlate = GetPlateRect(); + CPDF_Rect rcContent = CFX_List::GetContentRect(); + + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top, + rcContent.bottom, rcContent.top, + GetFirstHeight(), rcPlate.Height()); + m_bNotifyFlag = FALSE; + } + } +} + +void CFX_ListCtrl::SetScrollPos(const CPDF_Point& point) { + SetScrollPosY(point.y); +} + +void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy) { + if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y, fy)) { + CPDF_Rect rcPlate = GetPlateRect(); + CPDF_Rect rcContent = CFX_List::GetContentRect(); + + if (rcPlate.Height() > rcContent.Height()) { + fy = rcPlate.top; + } else { + if (FX_EDIT_IsFloatSmaller(fy - rcPlate.Height(), rcContent.bottom)) { + fy = rcContent.bottom + rcPlate.Height(); + } else if (FX_EDIT_IsFloatBigger(fy, rcContent.top)) { + fy = rcContent.top; + } + } + + m_ptScrollPos.y = fy; + InvalidateItem(-1); + + if (m_pNotify) { + if (!m_bNotifyFlag) { + m_bNotifyFlag = TRUE; + m_pNotify->IOnSetScrollPosY(fy); + m_bNotifyFlag = FALSE; + } + } + } +} + +CPDF_Rect CFX_ListCtrl::GetContentRect() const { + return InToOut(CFX_List::GetContentRect()); +} + +void CFX_ListCtrl::ReArrange(int32_t nItemIndex) { + CFX_List::ReArrange(nItemIndex); + SetScrollInfo(); +} + +void CFX_ListCtrl::SetTopItem(int32_t nIndex) { + if (IsValid(nIndex)) { + GetPlateRect(); + CPDF_Rect rcItem = CFX_List::GetItemRect(nIndex); + SetScrollPosY(rcItem.top); + } +} + +int32_t CFX_ListCtrl::GetTopItem() const { + int32_t nItemIndex = GetItemIndex(GetBTPoint()); + + if (!IsItemVisible(nItemIndex) && IsItemVisible(nItemIndex + 1)) + nItemIndex += 1; + + return nItemIndex; +} + +void CFX_ListCtrl::Empty() { + CFX_List::Empty(); + InvalidateItem(-1); +} + +void CFX_ListCtrl::Cancel() { + m_aSelItems.DeselectAll(); +} + +int32_t CFX_ListCtrl::GetItemIndex(const CPDF_Point& point) const { + return CFX_List::GetItemIndex(OutToIn(point)); +} + +CFX_WideString CFX_ListCtrl::GetText() const { + if (IsMultipleSel()) + return GetItemText(m_nCaretIndex); + return GetItemText(m_nSelItem); +} diff --git a/fpdfsdk/src/fxedit/fxet_module.cpp b/fpdfsdk/src/fxedit/fxet_module.cpp index d1421641bc..5c0086ae21 100644 --- a/fpdfsdk/src/fxedit/fxet_module.cpp +++ b/fpdfsdk/src/fxedit/fxet_module.cpp @@ -10,37 +10,30 @@ /* ---------------------- IFX_Edit ---------------------- */ -IFX_Edit* IFX_Edit::NewEdit() -{ - if (IPDF_VariableText * pVT = IPDF_VariableText::NewVariableText()) - { - return new CFX_Edit(pVT); - } - - return NULL; +IFX_Edit* IFX_Edit::NewEdit() { + if (IPDF_VariableText* pVT = IPDF_VariableText::NewVariableText()) { + return new CFX_Edit(pVT); + } + + return NULL; } -void IFX_Edit::DelEdit(IFX_Edit* pEdit) -{ - ASSERT(pEdit != NULL); +void IFX_Edit::DelEdit(IFX_Edit* pEdit) { + ASSERT(pEdit != NULL); - IPDF_VariableText::DelVariableText(pEdit->GetVariableText()); + IPDF_VariableText::DelVariableText(pEdit->GetVariableText()); - delete (CFX_Edit*)pEdit; + delete (CFX_Edit*)pEdit; } - /* ---------------------- IFX_List ---------------------- */ -IFX_List* IFX_List::NewList() -{ - return new CFX_ListCtrl(); +IFX_List* IFX_List::NewList() { + return new CFX_ListCtrl(); } -void IFX_List::DelList(IFX_List* pList) -{ - ASSERT(pList != NULL); +void IFX_List::DelList(IFX_List* pList) { + ASSERT(pList != NULL); - delete (CFX_ListCtrl*)pList; + delete (CFX_ListCtrl*)pList; } - diff --git a/fpdfsdk/src/fxedit/fxet_pageobjs.cpp b/fpdfsdk/src/fxedit/fxet_pageobjs.cpp index 1c0269b682..1fb669bb57 100644 --- a/fpdfsdk/src/fxedit/fxet_pageobjs.cpp +++ b/fpdfsdk/src/fxedit/fxet_pageobjs.cpp @@ -8,634 +8,665 @@ #include "../../include/fxedit/fx_edit.h" #include "../../include/fxedit/fxet_edit.h" -#define FX_EDIT_UNDERLINEHALFWIDTH 0.5f -#define FX_EDIT_CROSSOUTHALFWIDTH 0.5f - -extern CFX_ByteString GetPDFWordString(IFX_Edit_FontMap * pFontMap, int32_t nFontIndex, FX_WORD Word, FX_WORD SubWord); - -CPDF_Rect GetUnderLineRect(const CPVT_Word& word) -{ - return CPDF_Rect(word.ptWord.x, word.ptWord.y + word.fDescent * 0.5f, - word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent * 0.25f); +#define FX_EDIT_UNDERLINEHALFWIDTH 0.5f +#define FX_EDIT_CROSSOUTHALFWIDTH 0.5f + +extern CFX_ByteString GetPDFWordString(IFX_Edit_FontMap* pFontMap, + int32_t nFontIndex, + FX_WORD Word, + FX_WORD SubWord); + +CPDF_Rect GetUnderLineRect(const CPVT_Word& word) { + return CPDF_Rect(word.ptWord.x, word.ptWord.y + word.fDescent * 0.5f, + word.ptWord.x + word.fWidth, + word.ptWord.y + word.fDescent * 0.25f); } -CPDF_Rect GetCrossoutRect(const CPVT_Word& word) -{ - return CPDF_Rect(word.ptWord.x, word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f + word.fDescent * 0.25f, - word.ptWord.x + word.fWidth, word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f); +CPDF_Rect GetCrossoutRect(const CPVT_Word& word) { + return CPDF_Rect(word.ptWord.x, + word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f + + word.fDescent * 0.25f, + word.ptWord.x + word.fWidth, + word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f); } -static void DrawTextString(CFX_RenderDevice* pDevice, const CPDF_Point& pt, CPDF_Font* pFont, FX_FLOAT fFontSize, CPDF_Matrix* pUser2Device, - const CFX_ByteString& str, FX_ARGB crTextFill, FX_ARGB crTextStroke, int32_t nHorzScale) -{ - FX_FLOAT x = pt.x, y = pt.y; - pUser2Device->Transform(x, y); - - if (pFont) - { - if (nHorzScale != 100) - { - CPDF_Matrix mt(nHorzScale/100.0f,0,0,1,0,0); - mt.Concat(*pUser2Device); - - CPDF_RenderOptions ro; - ro.m_Flags = RENDER_CLEARTYPE; - ro.m_ColorMode = RENDER_COLOR_NORMAL; - - if (crTextStroke != 0) - { - CPDF_Point pt1(0,0), pt2(1,0); - pUser2Device->Transform(pt1.x, pt1.y); - pUser2Device->Transform(pt2.x, pt2.y); - CFX_GraphStateData gsd; - gsd.m_LineWidth = (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y)); - - CPDF_TextRenderer::DrawTextString(pDevice,x, y, pFont, fFontSize, &mt, str, crTextFill, crTextStroke, &gsd, &ro); - } - else - CPDF_TextRenderer::DrawTextString(pDevice,x, y, pFont, fFontSize, &mt, str, crTextFill, 0, NULL, &ro); - } - else - { - CPDF_RenderOptions ro; - ro.m_Flags = RENDER_CLEARTYPE; - ro.m_ColorMode = RENDER_COLOR_NORMAL; - - if (crTextStroke != 0) - { - CPDF_Point pt1(0,0), pt2(1,0); - pUser2Device->Transform(pt1.x, pt1.y); - pUser2Device->Transform(pt2.x, pt2.y); - CFX_GraphStateData gsd; - gsd.m_LineWidth = (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y)); - - CPDF_TextRenderer::DrawTextString(pDevice,x, y, pFont, fFontSize, pUser2Device, str, crTextFill, crTextStroke, &gsd, &ro); - } - else - CPDF_TextRenderer::DrawTextString(pDevice,x, y, pFont, fFontSize, pUser2Device, str, crTextFill, 0, NULL, &ro); - } - } +static void DrawTextString(CFX_RenderDevice* pDevice, + const CPDF_Point& pt, + CPDF_Font* pFont, + FX_FLOAT fFontSize, + CPDF_Matrix* pUser2Device, + const CFX_ByteString& str, + FX_ARGB crTextFill, + FX_ARGB crTextStroke, + int32_t nHorzScale) { + FX_FLOAT x = pt.x, y = pt.y; + pUser2Device->Transform(x, y); + + if (pFont) { + if (nHorzScale != 100) { + CPDF_Matrix mt(nHorzScale / 100.0f, 0, 0, 1, 0, 0); + mt.Concat(*pUser2Device); + + CPDF_RenderOptions ro; + ro.m_Flags = RENDER_CLEARTYPE; + ro.m_ColorMode = RENDER_COLOR_NORMAL; + + if (crTextStroke != 0) { + CPDF_Point pt1(0, 0), pt2(1, 0); + pUser2Device->Transform(pt1.x, pt1.y); + pUser2Device->Transform(pt2.x, pt2.y); + CFX_GraphStateData gsd; + gsd.m_LineWidth = + (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y)); + + CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, &mt, + str, crTextFill, crTextStroke, &gsd, + &ro); + } else + CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, &mt, + str, crTextFill, 0, NULL, &ro); + } else { + CPDF_RenderOptions ro; + ro.m_Flags = RENDER_CLEARTYPE; + ro.m_ColorMode = RENDER_COLOR_NORMAL; + + if (crTextStroke != 0) { + CPDF_Point pt1(0, 0), pt2(1, 0); + pUser2Device->Transform(pt1.x, pt1.y); + pUser2Device->Transform(pt2.x, pt2.y); + CFX_GraphStateData gsd; + gsd.m_LineWidth = + (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y)); + + CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, + pUser2Device, str, crTextFill, + crTextStroke, &gsd, &ro); + } else + CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, + pUser2Device, str, crTextFill, 0, + NULL, &ro); + } + } } -void IFX_Edit::DrawUnderline(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF color, - const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange) -{ - pDevice->SaveState(); - - if (!rcClip.IsEmpty()) - { - CPDF_Rect rcTemp = rcClip; - pUser2Device->TransformRect(rcTemp); - FX_RECT rcDevClip; - rcDevClip.left = (int32_t)rcTemp.left; - rcDevClip.right = (int32_t)rcTemp.right; - rcDevClip.top = (int32_t)rcTemp.top; - rcDevClip.bottom = (int32_t)rcTemp.bottom; - pDevice->SetClip_Rect(&rcDevClip); - } - - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) - { - if (pEdit->GetFontMap()) - { - if (pRange) - pIterator->SetAt(pRange->BeginPos); - else - pIterator->SetAt(0); - - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - if (pRange && place.WordCmp(pRange->EndPos) > 0) break; - - CPVT_Word word; - if (pIterator->GetWord(word)) - { - CFX_PathData pathUnderline; - CPDF_Rect rcUnderline = GetUnderLineRect(word); - rcUnderline.left += ptOffset.x; - rcUnderline.right += ptOffset.x; - rcUnderline.top += ptOffset.y; - rcUnderline.bottom += ptOffset.y; - pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom, rcUnderline.right, rcUnderline.top); - - pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, color, 0, FXFILL_WINDING); - } - } - } - } - - pDevice->RestoreState(); +void IFX_Edit::DrawUnderline(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + IFX_Edit* pEdit, + FX_COLORREF color, + const CPDF_Rect& rcClip, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange) { + pDevice->SaveState(); + + if (!rcClip.IsEmpty()) { + CPDF_Rect rcTemp = rcClip; + pUser2Device->TransformRect(rcTemp); + FX_RECT rcDevClip; + rcDevClip.left = (int32_t)rcTemp.left; + rcDevClip.right = (int32_t)rcTemp.right; + rcDevClip.top = (int32_t)rcTemp.top; + rcDevClip.bottom = (int32_t)rcTemp.bottom; + pDevice->SetClip_Rect(&rcDevClip); + } + + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + if (pEdit->GetFontMap()) { + if (pRange) + pIterator->SetAt(pRange->BeginPos); + else + pIterator->SetAt(0); + + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + if (pRange && place.WordCmp(pRange->EndPos) > 0) + break; + + CPVT_Word word; + if (pIterator->GetWord(word)) { + CFX_PathData pathUnderline; + CPDF_Rect rcUnderline = GetUnderLineRect(word); + rcUnderline.left += ptOffset.x; + rcUnderline.right += ptOffset.x; + rcUnderline.top += ptOffset.y; + rcUnderline.bottom += ptOffset.y; + pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom, + rcUnderline.right, rcUnderline.top); + + pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, color, 0, + FXFILL_WINDING); + } + } + } + } + + pDevice->RestoreState(); } -void IFX_Edit::DrawEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF crTextFill, FX_COLORREF crTextStroke, - const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, IFX_SystemHandler* pSystemHandler, void* pFFLData) -{ - - FX_BOOL bContinuous = pEdit->GetCharArray() == 0; - if (pEdit->GetCharSpace() > 0.0f) - bContinuous = FALSE; - - FX_WORD SubWord = pEdit->GetPasswordChar(); - FX_FLOAT fFontSize = pEdit->GetFontSize(); - CPVT_WordRange wrSelect = pEdit->GetSelectWordRange(); - int32_t nHorzScale = pEdit->GetHorzScale(); - - FX_COLORREF crCurFill = crTextFill; - FX_COLORREF crOldFill = crCurFill; - - FX_BOOL bSelect = FALSE; - const FX_COLORREF crWhite = ArgbEncode(255,255,255,255); - const FX_COLORREF crSelBK = ArgbEncode(255,0,51,113); - - CFX_ByteTextBuf sTextBuf; - int32_t nFontIndex = -1; - CPDF_Point ptBT(0.0f,0.0f); - - pDevice->SaveState(); - - if (!rcClip.IsEmpty()) - { - CPDF_Rect rcTemp = rcClip; - pUser2Device->TransformRect(rcTemp); - FX_RECT rcDevClip; - rcDevClip.left = (int32_t)rcTemp.left; - rcDevClip.right = (int32_t)rcTemp.right; - rcDevClip.top = (int32_t)rcTemp.top; - rcDevClip.bottom = (int32_t)rcTemp.bottom; - pDevice->SetClip_Rect(&rcDevClip); - } - - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) - { - if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) - { - if (pRange) - pIterator->SetAt(pRange->BeginPos); - else - pIterator->SetAt(0); - - CPVT_WordPlace oldplace; - - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - if (pRange && place.WordCmp(pRange->EndPos) > 0) break; - - if (wrSelect.IsExist()) - { - bSelect = place.WordCmp(wrSelect.BeginPos) > 0 && place.WordCmp(wrSelect.EndPos) <= 0; - if (bSelect) - { - crCurFill = crWhite; - } - else - { - crCurFill = crTextFill; - } - } - if(pSystemHandler && pSystemHandler->IsSelectionImplemented()) - { - crCurFill = crTextFill; - crOldFill = crCurFill; - } - CPVT_Word word; - if (pIterator->GetWord(word)) - { - - if (bSelect) - { - - CPVT_Line line; - pIterator->GetLine(line); - - if(pSystemHandler && pSystemHandler->IsSelectionImplemented()) - { - CPDF_Rect rc(word.ptWord.x,line.ptLine.y + line.fLineDescent, - word.ptWord.x+word.fWidth,line.ptLine.y + line.fLineAscent); - rc.Intersect(rcClip); - //CFX_Edit* pEt = (CFX_Edit*)pEdit; - //CPDF_Rect rcEdit = pEt->VTToEdit(rc); - pSystemHandler->OutputSelectedRect(pFFLData,rc); - } - else - { - CFX_PathData pathSelBK; - pathSelBK.AppendRect(word.ptWord.x,line.ptLine.y + line.fLineDescent, - word.ptWord.x+word.fWidth,line.ptLine.y + line.fLineAscent); - - pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0, FXFILL_WINDING); - } - } - - if (bContinuous) - { - if (place.LineCmp(oldplace) != 0 || word.nFontIndex != nFontIndex || - crOldFill != crCurFill) - { - if (sTextBuf.GetLength() > 0) - { - DrawTextString(pDevice, CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), pFontMap->GetPDFFont(nFontIndex), - fFontSize, pUser2Device, sTextBuf.GetByteString(), crOldFill, crTextStroke, nHorzScale); - - sTextBuf.Clear(); - } - nFontIndex = word.nFontIndex; - ptBT = word.ptWord; - crOldFill = crCurFill; - } - - sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord); - } - else - { - DrawTextString(pDevice,CPDF_Point(word.ptWord.x+ptOffset.x, word.ptWord.y+ptOffset.y), pFontMap->GetPDFFont(word.nFontIndex), - fFontSize, pUser2Device, GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord), crCurFill, crTextStroke, nHorzScale); - - } - oldplace = place; - - - } - } - - if (sTextBuf.GetLength() > 0) - { - DrawTextString(pDevice, CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), pFontMap->GetPDFFont(nFontIndex), - fFontSize, pUser2Device, sTextBuf.GetByteString(), crOldFill, crTextStroke, nHorzScale); - } - } - } - - pDevice->RestoreState(); +void IFX_Edit::DrawEdit(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + IFX_Edit* pEdit, + FX_COLORREF crTextFill, + FX_COLORREF crTextStroke, + const CPDF_Rect& rcClip, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + IFX_SystemHandler* pSystemHandler, + void* pFFLData) { + FX_BOOL bContinuous = pEdit->GetCharArray() == 0; + if (pEdit->GetCharSpace() > 0.0f) + bContinuous = FALSE; + + FX_WORD SubWord = pEdit->GetPasswordChar(); + FX_FLOAT fFontSize = pEdit->GetFontSize(); + CPVT_WordRange wrSelect = pEdit->GetSelectWordRange(); + int32_t nHorzScale = pEdit->GetHorzScale(); + + FX_COLORREF crCurFill = crTextFill; + FX_COLORREF crOldFill = crCurFill; + + FX_BOOL bSelect = FALSE; + const FX_COLORREF crWhite = ArgbEncode(255, 255, 255, 255); + const FX_COLORREF crSelBK = ArgbEncode(255, 0, 51, 113); + + CFX_ByteTextBuf sTextBuf; + int32_t nFontIndex = -1; + CPDF_Point ptBT(0.0f, 0.0f); + + pDevice->SaveState(); + + if (!rcClip.IsEmpty()) { + CPDF_Rect rcTemp = rcClip; + pUser2Device->TransformRect(rcTemp); + FX_RECT rcDevClip; + rcDevClip.left = (int32_t)rcTemp.left; + rcDevClip.right = (int32_t)rcTemp.right; + rcDevClip.top = (int32_t)rcTemp.top; + rcDevClip.bottom = (int32_t)rcTemp.bottom; + pDevice->SetClip_Rect(&rcDevClip); + } + + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) { + if (pRange) + pIterator->SetAt(pRange->BeginPos); + else + pIterator->SetAt(0); + + CPVT_WordPlace oldplace; + + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + if (pRange && place.WordCmp(pRange->EndPos) > 0) + break; + + if (wrSelect.IsExist()) { + bSelect = place.WordCmp(wrSelect.BeginPos) > 0 && + place.WordCmp(wrSelect.EndPos) <= 0; + if (bSelect) { + crCurFill = crWhite; + } else { + crCurFill = crTextFill; + } + } + if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) { + crCurFill = crTextFill; + crOldFill = crCurFill; + } + CPVT_Word word; + if (pIterator->GetWord(word)) { + if (bSelect) { + CPVT_Line line; + pIterator->GetLine(line); + + if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) { + CPDF_Rect rc(word.ptWord.x, line.ptLine.y + line.fLineDescent, + word.ptWord.x + word.fWidth, + line.ptLine.y + line.fLineAscent); + rc.Intersect(rcClip); + // CFX_Edit* pEt = (CFX_Edit*)pEdit; + // CPDF_Rect rcEdit = pEt->VTToEdit(rc); + pSystemHandler->OutputSelectedRect(pFFLData, rc); + } else { + CFX_PathData pathSelBK; + pathSelBK.AppendRect(word.ptWord.x, + line.ptLine.y + line.fLineDescent, + word.ptWord.x + word.fWidth, + line.ptLine.y + line.fLineAscent); + + pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0, + FXFILL_WINDING); + } + } + + if (bContinuous) { + if (place.LineCmp(oldplace) != 0 || word.nFontIndex != nFontIndex || + crOldFill != crCurFill) { + if (sTextBuf.GetLength() > 0) { + DrawTextString(pDevice, CPDF_Point(ptBT.x + ptOffset.x, + ptBT.y + ptOffset.y), + pFontMap->GetPDFFont(nFontIndex), fFontSize, + pUser2Device, sTextBuf.GetByteString(), + crOldFill, crTextStroke, nHorzScale); + + sTextBuf.Clear(); + } + nFontIndex = word.nFontIndex; + ptBT = word.ptWord; + crOldFill = crCurFill; + } + + sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, + SubWord); + } else { + DrawTextString( + pDevice, CPDF_Point(word.ptWord.x + ptOffset.x, + word.ptWord.y + ptOffset.y), + pFontMap->GetPDFFont(word.nFontIndex), fFontSize, pUser2Device, + GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord), + crCurFill, crTextStroke, nHorzScale); + } + oldplace = place; + } + } + + if (sTextBuf.GetLength() > 0) { + DrawTextString( + pDevice, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), + pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device, + sTextBuf.GetByteString(), crOldFill, crTextStroke, nHorzScale); + } + } + } + + pDevice->RestoreState(); } -void IFX_Edit::DrawRichEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, - const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange) -{ - //FX_FLOAT fFontSize = pEdit->GetFontSize(); - CPVT_WordRange wrSelect = pEdit->GetSelectWordRange(); - - FX_COLORREF crCurText = ArgbEncode(255, 0,0,0); - FX_COLORREF crOld = crCurText; - FX_BOOL bSelect = FALSE; - const FX_COLORREF crWhite = ArgbEncode(255,255,255,255); - const FX_COLORREF crSelBK = ArgbEncode(255,0,51,113); - - CFX_ByteTextBuf sTextBuf; - CPVT_WordProps wp; - CPDF_Point ptBT(0.0f,0.0f); - - pDevice->SaveState(); - - if (!rcClip.IsEmpty()) - { - CPDF_Rect rcTemp = rcClip; - pUser2Device->TransformRect(rcTemp); - FX_RECT rcDevClip; - rcDevClip.left = (int32_t)rcTemp.left; - rcDevClip.right = (int32_t)rcTemp.right; - rcDevClip.top = (int32_t)rcTemp.top; - rcDevClip.bottom = (int32_t)rcTemp.bottom; - pDevice->SetClip_Rect(&rcDevClip); - } - - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) - { - if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) - { - if (pRange) - pIterator->SetAt(pRange->BeginPos); - else - pIterator->SetAt(0); - - CPVT_WordPlace oldplace; - - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - if (pRange && place.WordCmp(pRange->EndPos) > 0) break; - - CPVT_Word word; - if (pIterator->GetWord(word)) - { - word.WordProps.fFontSize = word.fFontSize; - - crCurText = ArgbEncode(255,word.WordProps.dwWordColor); - - if (wrSelect.IsExist()) - { - bSelect = place.WordCmp(wrSelect.BeginPos) > 0 && place.WordCmp(wrSelect.EndPos) <= 0; - if (bSelect) - { - crCurText = crWhite; - } - } - - if (bSelect) - { - CPVT_Line line; - pIterator->GetLine(line); - - CFX_PathData pathSelBK; - pathSelBK.AppendRect(word.ptWord.x + ptOffset.x, - line.ptLine.y + line.fLineDescent + ptOffset.y, - word.ptWord.x+word.fWidth + ptOffset.x, - line.ptLine.y + line.fLineAscent + ptOffset.y); - - pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0, FXFILL_WINDING); - } - - if (place.LineCmp(oldplace) != 0 || word.WordProps.fCharSpace > 0.0f || word.WordProps.nHorzScale != 100 || - FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 || - crOld != crCurText) - { - if (sTextBuf.GetLength() > 0) - { - DrawTextString(pDevice, CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), pFontMap->GetPDFFont(wp.nFontIndex), - wp.fFontSize, pUser2Device, sTextBuf.GetByteString(), crOld, 0, wp.nHorzScale); - - sTextBuf.Clear(); - } - wp = word.WordProps; - ptBT = word.ptWord; - crOld = crCurText; - } - - sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex, word.Word, 0); - - if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) - { - CFX_PathData pathUnderline; - CPDF_Rect rcUnderline = GetUnderLineRect(word); - pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom, rcUnderline.right, rcUnderline.top); - - pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, crCurText, 0, FXFILL_WINDING); - } - - if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) - { - CFX_PathData pathCrossout; - CPDF_Rect rcCrossout = GetCrossoutRect(word); - pathCrossout.AppendRect(rcCrossout.left, rcCrossout.bottom, rcCrossout.right, rcCrossout.top); - - pDevice->DrawPath(&pathCrossout, pUser2Device, NULL, crCurText, 0, FXFILL_WINDING); - } - - oldplace = place; - } - } - - if (sTextBuf.GetLength() > 0) - { - DrawTextString(pDevice, CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), pFontMap->GetPDFFont(wp.nFontIndex), - wp.fFontSize, pUser2Device, sTextBuf.GetByteString(), crOld, 0, wp.nHorzScale); - } - } - } - - pDevice->RestoreState(); +void IFX_Edit::DrawRichEdit(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + IFX_Edit* pEdit, + const CPDF_Rect& rcClip, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange) { + // FX_FLOAT fFontSize = pEdit->GetFontSize(); + CPVT_WordRange wrSelect = pEdit->GetSelectWordRange(); + + FX_COLORREF crCurText = ArgbEncode(255, 0, 0, 0); + FX_COLORREF crOld = crCurText; + FX_BOOL bSelect = FALSE; + const FX_COLORREF crWhite = ArgbEncode(255, 255, 255, 255); + const FX_COLORREF crSelBK = ArgbEncode(255, 0, 51, 113); + + CFX_ByteTextBuf sTextBuf; + CPVT_WordProps wp; + CPDF_Point ptBT(0.0f, 0.0f); + + pDevice->SaveState(); + + if (!rcClip.IsEmpty()) { + CPDF_Rect rcTemp = rcClip; + pUser2Device->TransformRect(rcTemp); + FX_RECT rcDevClip; + rcDevClip.left = (int32_t)rcTemp.left; + rcDevClip.right = (int32_t)rcTemp.right; + rcDevClip.top = (int32_t)rcTemp.top; + rcDevClip.bottom = (int32_t)rcTemp.bottom; + pDevice->SetClip_Rect(&rcDevClip); + } + + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) { + if (pRange) + pIterator->SetAt(pRange->BeginPos); + else + pIterator->SetAt(0); + + CPVT_WordPlace oldplace; + + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + if (pRange && place.WordCmp(pRange->EndPos) > 0) + break; + + CPVT_Word word; + if (pIterator->GetWord(word)) { + word.WordProps.fFontSize = word.fFontSize; + + crCurText = ArgbEncode(255, word.WordProps.dwWordColor); + + if (wrSelect.IsExist()) { + bSelect = place.WordCmp(wrSelect.BeginPos) > 0 && + place.WordCmp(wrSelect.EndPos) <= 0; + if (bSelect) { + crCurText = crWhite; + } + } + + if (bSelect) { + CPVT_Line line; + pIterator->GetLine(line); + + CFX_PathData pathSelBK; + pathSelBK.AppendRect(word.ptWord.x + ptOffset.x, + line.ptLine.y + line.fLineDescent + ptOffset.y, + word.ptWord.x + word.fWidth + ptOffset.x, + line.ptLine.y + line.fLineAscent + ptOffset.y); + + pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0, + FXFILL_WINDING); + } + + if (place.LineCmp(oldplace) != 0 || + word.WordProps.fCharSpace > 0.0f || + word.WordProps.nHorzScale != 100 || + FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 || + crOld != crCurText) { + if (sTextBuf.GetLength() > 0) { + DrawTextString( + pDevice, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), + pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, + pUser2Device, sTextBuf.GetByteString(), crOld, 0, + wp.nHorzScale); + + sTextBuf.Clear(); + } + wp = word.WordProps; + ptBT = word.ptWord; + crOld = crCurText; + } + + sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex, + word.Word, 0); + + if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) { + CFX_PathData pathUnderline; + CPDF_Rect rcUnderline = GetUnderLineRect(word); + pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom, + rcUnderline.right, rcUnderline.top); + + pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, crCurText, 0, + FXFILL_WINDING); + } + + if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) { + CFX_PathData pathCrossout; + CPDF_Rect rcCrossout = GetCrossoutRect(word); + pathCrossout.AppendRect(rcCrossout.left, rcCrossout.bottom, + rcCrossout.right, rcCrossout.top); + + pDevice->DrawPath(&pathCrossout, pUser2Device, NULL, crCurText, 0, + FXFILL_WINDING); + } + + oldplace = place; + } + } + + if (sTextBuf.GetLength() > 0) { + DrawTextString( + pDevice, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), + pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, pUser2Device, + sTextBuf.GetByteString(), crOld, 0, wp.nHorzScale); + } + } + } + + pDevice->RestoreState(); } -static void AddRectToPageObjects(CPDF_PageObjects* pPageObjs, FX_COLORREF crFill, const CPDF_Rect& rcFill) -{ - CPDF_PathObject* pPathObj = new CPDF_PathObject; - CPDF_PathData* pPathData = pPathObj->m_Path.GetModify(); - pPathData->AppendRect(rcFill.left,rcFill.bottom,rcFill.right,rcFill.top); +static void AddRectToPageObjects(CPDF_PageObjects* pPageObjs, + FX_COLORREF crFill, + const CPDF_Rect& rcFill) { + CPDF_PathObject* pPathObj = new CPDF_PathObject; + CPDF_PathData* pPathData = pPathObj->m_Path.GetModify(); + pPathData->AppendRect(rcFill.left, rcFill.bottom, rcFill.right, rcFill.top); - FX_FLOAT rgb[3]; - rgb[0] = FXARGB_R(crFill) / 255.0f ; - rgb[1] = FXARGB_G(crFill) / 255.0f; - rgb[2] = FXARGB_B(crFill) / 255.0f; - pPathObj->m_ColorState.SetFillColor(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3); + FX_FLOAT rgb[3]; + rgb[0] = FXARGB_R(crFill) / 255.0f; + rgb[1] = FXARGB_G(crFill) / 255.0f; + rgb[2] = FXARGB_B(crFill) / 255.0f; + pPathObj->m_ColorState.SetFillColor( + CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3); - pPathObj->m_FillType = FXFILL_ALTERNATE; - pPathObj->m_bStroke = FALSE; + pPathObj->m_FillType = FXFILL_ALTERNATE; + pPathObj->m_bStroke = FALSE; - pPageObjs->InsertObject(pPageObjs->GetLastObjectPosition(),pPathObj); + pPageObjs->InsertObject(pPageObjs->GetLastObjectPosition(), pPathObj); } -static CPDF_TextObject* AddTextObjToPageObjects(CPDF_PageObjects* pPageObjs, FX_COLORREF crText, - CPDF_Font* pFont, FX_FLOAT fFontSize, FX_FLOAT fCharSpace, int32_t nHorzScale, - const CPDF_Point& point, const CFX_ByteString& text) -{ - CPDF_TextObject* pTxtObj = new CPDF_TextObject; - - CPDF_TextStateData* pTextStateData = pTxtObj->m_TextState.GetModify(); - pTextStateData->m_pFont = pFont; - pTextStateData->m_FontSize = fFontSize; - pTextStateData->m_CharSpace = fCharSpace; - pTextStateData->m_WordSpace = 0; - pTextStateData->m_TextMode = 0; - pTextStateData->m_Matrix[0] = nHorzScale / 100.0f; - pTextStateData->m_Matrix[1] = 0; - pTextStateData->m_Matrix[2] = 0; - pTextStateData->m_Matrix[3] = 1; - - FX_FLOAT rgb[3]; - rgb[0] = FXARGB_R(crText) / 255.0f ; - rgb[1] = FXARGB_G(crText) / 255.0f; - rgb[2] = FXARGB_B(crText) / 255.0f; - pTxtObj->m_ColorState.SetFillColor(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB),rgb, 3); - pTxtObj->m_ColorState.SetStrokeColor(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB),rgb, 3); - - pTxtObj->SetPosition(point.x,point.y); - pTxtObj->SetText(text); - - pPageObjs->InsertObject(pPageObjs->GetLastObjectPosition(),pTxtObj); - - return pTxtObj; +static CPDF_TextObject* AddTextObjToPageObjects(CPDF_PageObjects* pPageObjs, + FX_COLORREF crText, + CPDF_Font* pFont, + FX_FLOAT fFontSize, + FX_FLOAT fCharSpace, + int32_t nHorzScale, + const CPDF_Point& point, + const CFX_ByteString& text) { + CPDF_TextObject* pTxtObj = new CPDF_TextObject; + + CPDF_TextStateData* pTextStateData = pTxtObj->m_TextState.GetModify(); + pTextStateData->m_pFont = pFont; + pTextStateData->m_FontSize = fFontSize; + pTextStateData->m_CharSpace = fCharSpace; + pTextStateData->m_WordSpace = 0; + pTextStateData->m_TextMode = 0; + pTextStateData->m_Matrix[0] = nHorzScale / 100.0f; + pTextStateData->m_Matrix[1] = 0; + pTextStateData->m_Matrix[2] = 0; + pTextStateData->m_Matrix[3] = 1; + + FX_FLOAT rgb[3]; + rgb[0] = FXARGB_R(crText) / 255.0f; + rgb[1] = FXARGB_G(crText) / 255.0f; + rgb[2] = FXARGB_B(crText) / 255.0f; + pTxtObj->m_ColorState.SetFillColor( + CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3); + pTxtObj->m_ColorState.SetStrokeColor( + CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3); + + pTxtObj->SetPosition(point.x, point.y); + pTxtObj->SetText(text); + + pPageObjs->InsertObject(pPageObjs->GetLastObjectPosition(), pTxtObj); + + return pTxtObj; } -void IFX_Edit::GeneratePageObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit, - const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, FX_COLORREF crText, CFX_ArrayTemplate& ObjArray) -{ - FX_FLOAT fFontSize = pEdit->GetFontSize(); - - int32_t nOldFontIndex = -1; - - CFX_ByteTextBuf sTextBuf; - CPDF_Point ptBT(0.0f,0.0f); - - ObjArray.RemoveAll(); - - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) - { - if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) - { - if (pRange) - pIterator->SetAt(pRange->BeginPos); - else - pIterator->SetAt(0); - - CPVT_WordPlace oldplace; - - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - if (pRange && place.WordCmp(pRange->EndPos) > 0) break; - - CPVT_Word word; - if (pIterator->GetWord(word)) - { - if (place.LineCmp(oldplace) != 0 || nOldFontIndex != word.nFontIndex) - { - if (sTextBuf.GetLength() > 0) - { - ObjArray.Add(AddTextObjToPageObjects(pPageObjects, crText, pFontMap->GetPDFFont(nOldFontIndex), fFontSize, 0.0f, 100, - CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), sTextBuf.GetByteString())); - - sTextBuf.Clear(); - } - - ptBT = word.ptWord; - nOldFontIndex = word.nFontIndex; - } - - sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, 0); - oldplace = place; - } - } - - if (sTextBuf.GetLength() > 0) - { - ObjArray.Add(AddTextObjToPageObjects(pPageObjects, crText, pFontMap->GetPDFFont(nOldFontIndex), fFontSize, 0.0f, 100, - CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), sTextBuf.GetByteString())); - } - } - } +void IFX_Edit::GeneratePageObjects( + CPDF_PageObjects* pPageObjects, + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + FX_COLORREF crText, + CFX_ArrayTemplate& ObjArray) { + FX_FLOAT fFontSize = pEdit->GetFontSize(); + + int32_t nOldFontIndex = -1; + + CFX_ByteTextBuf sTextBuf; + CPDF_Point ptBT(0.0f, 0.0f); + + ObjArray.RemoveAll(); + + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) { + if (pRange) + pIterator->SetAt(pRange->BeginPos); + else + pIterator->SetAt(0); + + CPVT_WordPlace oldplace; + + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + if (pRange && place.WordCmp(pRange->EndPos) > 0) + break; + + CPVT_Word word; + if (pIterator->GetWord(word)) { + if (place.LineCmp(oldplace) != 0 || + nOldFontIndex != word.nFontIndex) { + if (sTextBuf.GetLength() > 0) { + ObjArray.Add(AddTextObjToPageObjects( + pPageObjects, crText, pFontMap->GetPDFFont(nOldFontIndex), + fFontSize, 0.0f, 100, + CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), + sTextBuf.GetByteString())); + + sTextBuf.Clear(); + } + + ptBT = word.ptWord; + nOldFontIndex = word.nFontIndex; + } + + sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, 0); + oldplace = place; + } + } + + if (sTextBuf.GetLength() > 0) { + ObjArray.Add(AddTextObjToPageObjects( + pPageObjects, crText, pFontMap->GetPDFFont(nOldFontIndex), + fFontSize, 0.0f, 100, + CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), + sTextBuf.GetByteString())); + } + } + } } -void IFX_Edit::GenerateRichPageObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit, - const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, CFX_ArrayTemplate& ObjArray) -{ - - - FX_COLORREF crCurText = ArgbEncode(255, 0, 0, 0); - FX_COLORREF crOld = crCurText; - - - CFX_ByteTextBuf sTextBuf; - CPVT_WordProps wp; - CPDF_Point ptBT(0.0f,0.0f); - - ObjArray.RemoveAll(); - - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) - { - if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) - { - if (pRange) - pIterator->SetAt(pRange->BeginPos); - else - pIterator->SetAt(0); - - CPVT_WordPlace oldplace; - - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - if (pRange && place.WordCmp(pRange->EndPos) > 0) break; - - CPVT_Word word; - if (pIterator->GetWord(word)) - { - word.WordProps.fFontSize = word.fFontSize; - - crCurText = ArgbEncode(255,word.WordProps.dwWordColor); - - if (place.LineCmp(oldplace) != 0 || word.WordProps.fCharSpace > 0.0f || word.WordProps.nHorzScale != 100 || - FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 || - crOld != crCurText) - { - if (sTextBuf.GetLength() > 0) - { - ObjArray.Add(AddTextObjToPageObjects(pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, wp.fCharSpace, wp.nHorzScale, - CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), sTextBuf.GetByteString())); - - sTextBuf.Clear(); - } - - wp = word.WordProps; - ptBT = word.ptWord; - crOld = crCurText; - - } - - sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex, word.Word, 0); - - if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) - {/* - AddLineToPageObjects(pPageObjects, crCurText, - CPDF_Point(word.ptWord.x, word.ptWord.y + word.fDescent * 0.4f), - CPDF_Point(word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent * 0.4f)); +void IFX_Edit::GenerateRichPageObjects( + CPDF_PageObjects* pPageObjects, + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + CFX_ArrayTemplate& ObjArray) { + FX_COLORREF crCurText = ArgbEncode(255, 0, 0, 0); + FX_COLORREF crOld = crCurText; + + CFX_ByteTextBuf sTextBuf; + CPVT_WordProps wp; + CPDF_Point ptBT(0.0f, 0.0f); + + ObjArray.RemoveAll(); + + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) { + if (pRange) + pIterator->SetAt(pRange->BeginPos); + else + pIterator->SetAt(0); + + CPVT_WordPlace oldplace; + + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + if (pRange && place.WordCmp(pRange->EndPos) > 0) + break; + + CPVT_Word word; + if (pIterator->GetWord(word)) { + word.WordProps.fFontSize = word.fFontSize; + + crCurText = ArgbEncode(255, word.WordProps.dwWordColor); + + if (place.LineCmp(oldplace) != 0 || + word.WordProps.fCharSpace > 0.0f || + word.WordProps.nHorzScale != 100 || + FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 || + crOld != crCurText) { + if (sTextBuf.GetLength() > 0) { + ObjArray.Add(AddTextObjToPageObjects( + pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex), + wp.fFontSize, wp.fCharSpace, wp.nHorzScale, + CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), + sTextBuf.GetByteString())); + + sTextBuf.Clear(); + } + + wp = word.WordProps; + ptBT = word.ptWord; + crOld = crCurText; + } + + sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex, + word.Word, 0); + + if (word.WordProps.nWordStyle & + PVTWORD_STYLE_UNDERLINE) { /* + AddLineToPageObjects(pPageObjects, + crCurText, + CPDF_Point(word.ptWord.x, + word.ptWord.y + word.fDescent * + 0.4f), + CPDF_Point(word.ptWord.x + + word.fWidth, word.ptWord.y + + word.fDescent * 0.4f)); */ - CPDF_Rect rcUnderline = GetUnderLineRect(word); - rcUnderline.left += ptOffset.x; - rcUnderline.right += ptOffset.x; - rcUnderline.top += ptOffset.y; - rcUnderline.bottom += ptOffset.y; - - AddRectToPageObjects(pPageObjects, crCurText, rcUnderline); - } - - if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) - { - CPDF_Rect rcCrossout = GetCrossoutRect(word); - rcCrossout.left += ptOffset.x; - rcCrossout.right += ptOffset.x; - rcCrossout.top += ptOffset.y; - rcCrossout.bottom += ptOffset.y; - - AddRectToPageObjects(pPageObjects, crCurText, rcCrossout); - } - - oldplace = place; - } - } - - if (sTextBuf.GetLength() > 0) - { - ObjArray.Add(AddTextObjToPageObjects(pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, wp.fCharSpace, wp.nHorzScale, - CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), sTextBuf.GetByteString())); - } - } - } + CPDF_Rect rcUnderline = GetUnderLineRect(word); + rcUnderline.left += ptOffset.x; + rcUnderline.right += ptOffset.x; + rcUnderline.top += ptOffset.y; + rcUnderline.bottom += ptOffset.y; + + AddRectToPageObjects(pPageObjects, crCurText, rcUnderline); + } + + if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) { + CPDF_Rect rcCrossout = GetCrossoutRect(word); + rcCrossout.left += ptOffset.x; + rcCrossout.right += ptOffset.x; + rcCrossout.top += ptOffset.y; + rcCrossout.bottom += ptOffset.y; + + AddRectToPageObjects(pPageObjects, crCurText, rcCrossout); + } + + oldplace = place; + } + } + + if (sTextBuf.GetLength() > 0) { + ObjArray.Add(AddTextObjToPageObjects( + pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex), + wp.fFontSize, wp.fCharSpace, wp.nHorzScale, + CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y), + sTextBuf.GetByteString())); + } + } + } } -void IFX_Edit::GenerateUnderlineObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit, - const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, FX_COLORREF color) -{ - - - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) - { - if (pEdit->GetFontMap()) - { - if (pRange) - pIterator->SetAt(pRange->BeginPos); - else - pIterator->SetAt(0); - - CPVT_WordPlace oldplace; - - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - if (pRange && place.WordCmp(pRange->EndPos) > 0) break; - - CPVT_Word word; - if (pIterator->GetWord(word)) - { - CPDF_Rect rcUnderline = GetUnderLineRect(word); - rcUnderline.left += ptOffset.x; - rcUnderline.right += ptOffset.x; - rcUnderline.top += ptOffset.y; - rcUnderline.bottom += ptOffset.y; - AddRectToPageObjects(pPageObjects, color, rcUnderline); - } - } - } - } +void IFX_Edit::GenerateUnderlineObjects(CPDF_PageObjects* pPageObjects, + IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + FX_COLORREF color) { + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + if (pEdit->GetFontMap()) { + if (pRange) + pIterator->SetAt(pRange->BeginPos); + else + pIterator->SetAt(0); + + CPVT_WordPlace oldplace; + + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + if (pRange && place.WordCmp(pRange->EndPos) > 0) + break; + + CPVT_Word word; + if (pIterator->GetWord(word)) { + CPDF_Rect rcUnderline = GetUnderLineRect(word); + rcUnderline.left += ptOffset.x; + rcUnderline.right += ptOffset.x; + rcUnderline.top += ptOffset.y; + rcUnderline.bottom += ptOffset.y; + AddRectToPageObjects(pPageObjects, color, rcUnderline); + } + } + } + } } - diff --git a/fpdfsdk/src/javascript/Consts.cpp b/fpdfsdk/src/javascript/Consts.cpp index 9edb6f443b..ca8d787ec0 100644 --- a/fpdfsdk/src/javascript/Consts.cpp +++ b/fpdfsdk/src/javascript/Consts.cpp @@ -14,234 +14,251 @@ /* ------------------------------ border ------------------------------ */ BEGIN_JS_STATIC_CONST(CJS_Border) - JS_STATIC_CONST_ENTRY_STRING(s, solid) - JS_STATIC_CONST_ENTRY_STRING(b, beveled) - JS_STATIC_CONST_ENTRY_STRING(d, dashed) - JS_STATIC_CONST_ENTRY_STRING(i, inset) - JS_STATIC_CONST_ENTRY_STRING(u, underline) +JS_STATIC_CONST_ENTRY_STRING(s, solid) +JS_STATIC_CONST_ENTRY_STRING(b, beveled) +JS_STATIC_CONST_ENTRY_STRING(d, dashed) +JS_STATIC_CONST_ENTRY_STRING(i, inset) +JS_STATIC_CONST_ENTRY_STRING(u, underline) END_JS_STATIC_CONST() -IMPLEMENT_JS_CLASS_CONST(CJS_Border,border) +IMPLEMENT_JS_CLASS_CONST(CJS_Border, border) /* ------------------------------ display ------------------------------ */ BEGIN_JS_STATIC_CONST(CJS_Display) - JS_STATIC_CONST_ENTRY_NUMBER(visible, 0) - JS_STATIC_CONST_ENTRY_NUMBER(hidden, 1) - JS_STATIC_CONST_ENTRY_NUMBER(noPrint, 2) - JS_STATIC_CONST_ENTRY_NUMBER(noView, 3) +JS_STATIC_CONST_ENTRY_NUMBER(visible, 0) +JS_STATIC_CONST_ENTRY_NUMBER(hidden, 1) +JS_STATIC_CONST_ENTRY_NUMBER(noPrint, 2) +JS_STATIC_CONST_ENTRY_NUMBER(noView, 3) END_JS_STATIC_CONST() -IMPLEMENT_JS_CLASS_CONST(CJS_Display,display) +IMPLEMENT_JS_CLASS_CONST(CJS_Display, display) /* ------------------------------ font ------------------------------ */ BEGIN_JS_STATIC_CONST(CJS_Font) - JS_STATIC_CONST_ENTRY_STRING(Times, Times-Roman) - JS_STATIC_CONST_ENTRY_STRING(TimesB, Times-Bold) - JS_STATIC_CONST_ENTRY_STRING(TimesI, Times-Italic) - JS_STATIC_CONST_ENTRY_STRING(TimesBI, Times-BoldItalic) - JS_STATIC_CONST_ENTRY_STRING(Helv, Helvetica) - JS_STATIC_CONST_ENTRY_STRING(HelvB, Helvetica-Bold) - JS_STATIC_CONST_ENTRY_STRING(HelvI, Helvetica-Oblique) - JS_STATIC_CONST_ENTRY_STRING(HelvBI, Helvetica-BoldOblique) - JS_STATIC_CONST_ENTRY_STRING(Cour, Courier) - JS_STATIC_CONST_ENTRY_STRING(CourB, Courier-Bold) - JS_STATIC_CONST_ENTRY_STRING(CourI, Courier-Oblique) - JS_STATIC_CONST_ENTRY_STRING(CourBI, Courier-BoldOblique) - JS_STATIC_CONST_ENTRY_STRING(Symbol, Symbol) - JS_STATIC_CONST_ENTRY_STRING(ZapfD, ZapfDingbats) +JS_STATIC_CONST_ENTRY_STRING(Times, Times-Roman) +JS_STATIC_CONST_ENTRY_STRING(TimesB, Times-Bold) +JS_STATIC_CONST_ENTRY_STRING(TimesI, Times-Italic) +JS_STATIC_CONST_ENTRY_STRING(TimesBI, Times-BoldItalic) +JS_STATIC_CONST_ENTRY_STRING(Helv, Helvetica) +JS_STATIC_CONST_ENTRY_STRING(HelvB, Helvetica-Bold) +JS_STATIC_CONST_ENTRY_STRING(HelvI, Helvetica-Oblique) +JS_STATIC_CONST_ENTRY_STRING(HelvBI, Helvetica-BoldOblique) +JS_STATIC_CONST_ENTRY_STRING(Cour, Courier) +JS_STATIC_CONST_ENTRY_STRING(CourB, Courier-Bold) +JS_STATIC_CONST_ENTRY_STRING(CourI, Courier-Oblique) +JS_STATIC_CONST_ENTRY_STRING(CourBI, Courier-BoldOblique) +JS_STATIC_CONST_ENTRY_STRING(Symbol, Symbol) +JS_STATIC_CONST_ENTRY_STRING(ZapfD, ZapfDingbats) END_JS_STATIC_CONST() -IMPLEMENT_JS_CLASS_CONST(CJS_Font,font) +IMPLEMENT_JS_CLASS_CONST(CJS_Font, font) /* ------------------------------ highlight ------------------------------ */ BEGIN_JS_STATIC_CONST(CJS_Highlight) - JS_STATIC_CONST_ENTRY_STRING(n, none) - JS_STATIC_CONST_ENTRY_STRING(i, invert) - JS_STATIC_CONST_ENTRY_STRING(p, push) - JS_STATIC_CONST_ENTRY_STRING(o, outline) +JS_STATIC_CONST_ENTRY_STRING(n, none) +JS_STATIC_CONST_ENTRY_STRING(i, invert) +JS_STATIC_CONST_ENTRY_STRING(p, push) +JS_STATIC_CONST_ENTRY_STRING(o, outline) END_JS_STATIC_CONST() -IMPLEMENT_JS_CLASS_CONST(CJS_Highlight,highlight) +IMPLEMENT_JS_CLASS_CONST(CJS_Highlight, highlight) /* ------------------------------ position ------------------------------ */ BEGIN_JS_STATIC_CONST(CJS_Position) - JS_STATIC_CONST_ENTRY_NUMBER(textOnly, 0) - JS_STATIC_CONST_ENTRY_NUMBER(iconOnly, 1) - JS_STATIC_CONST_ENTRY_NUMBER(iconTextV, 2) - JS_STATIC_CONST_ENTRY_NUMBER(textIconV, 3) - JS_STATIC_CONST_ENTRY_NUMBER(iconTextH, 4) - JS_STATIC_CONST_ENTRY_NUMBER(textIconH, 5) - JS_STATIC_CONST_ENTRY_NUMBER(overlay, 6) +JS_STATIC_CONST_ENTRY_NUMBER(textOnly, 0) +JS_STATIC_CONST_ENTRY_NUMBER(iconOnly, 1) +JS_STATIC_CONST_ENTRY_NUMBER(iconTextV, 2) +JS_STATIC_CONST_ENTRY_NUMBER(textIconV, 3) +JS_STATIC_CONST_ENTRY_NUMBER(iconTextH, 4) +JS_STATIC_CONST_ENTRY_NUMBER(textIconH, 5) +JS_STATIC_CONST_ENTRY_NUMBER(overlay, 6) END_JS_STATIC_CONST() -IMPLEMENT_JS_CLASS_CONST(CJS_Position,position) +IMPLEMENT_JS_CLASS_CONST(CJS_Position, position) /* ------------------------------ scaleHow ------------------------------ */ BEGIN_JS_STATIC_CONST(CJS_ScaleHow) - JS_STATIC_CONST_ENTRY_NUMBER(proportional, 0) - JS_STATIC_CONST_ENTRY_NUMBER(anamorphic, 1) +JS_STATIC_CONST_ENTRY_NUMBER(proportional, 0) +JS_STATIC_CONST_ENTRY_NUMBER(anamorphic, 1) END_JS_STATIC_CONST() -IMPLEMENT_JS_CLASS_CONST(CJS_ScaleHow,scaleHow) +IMPLEMENT_JS_CLASS_CONST(CJS_ScaleHow, scaleHow) /* ------------------------------ scaleWhen ------------------------------ */ BEGIN_JS_STATIC_CONST(CJS_ScaleWhen) - JS_STATIC_CONST_ENTRY_NUMBER(always, 0) - JS_STATIC_CONST_ENTRY_NUMBER(never, 1) - JS_STATIC_CONST_ENTRY_NUMBER(tooBig, 2) - JS_STATIC_CONST_ENTRY_NUMBER(tooSmall, 3) +JS_STATIC_CONST_ENTRY_NUMBER(always, 0) +JS_STATIC_CONST_ENTRY_NUMBER(never, 1) +JS_STATIC_CONST_ENTRY_NUMBER(tooBig, 2) +JS_STATIC_CONST_ENTRY_NUMBER(tooSmall, 3) END_JS_STATIC_CONST() -IMPLEMENT_JS_CLASS_CONST(CJS_ScaleWhen,scaleWhen) +IMPLEMENT_JS_CLASS_CONST(CJS_ScaleWhen, scaleWhen) /* ------------------------------ style ------------------------------ */ BEGIN_JS_STATIC_CONST(CJS_Style) - JS_STATIC_CONST_ENTRY_STRING(ch, check) - JS_STATIC_CONST_ENTRY_STRING(cr, cross) - JS_STATIC_CONST_ENTRY_STRING(di, diamond) - JS_STATIC_CONST_ENTRY_STRING(ci, circle) - JS_STATIC_CONST_ENTRY_STRING(st, star) - JS_STATIC_CONST_ENTRY_STRING(sq, square) +JS_STATIC_CONST_ENTRY_STRING(ch, check) +JS_STATIC_CONST_ENTRY_STRING(cr, cross) +JS_STATIC_CONST_ENTRY_STRING(di, diamond) +JS_STATIC_CONST_ENTRY_STRING(ci, circle) +JS_STATIC_CONST_ENTRY_STRING(st, star) +JS_STATIC_CONST_ENTRY_STRING(sq, square) END_JS_STATIC_CONST() -IMPLEMENT_JS_CLASS_CONST(CJS_Style,style) - +IMPLEMENT_JS_CLASS_CONST(CJS_Style, style) /* ------------------------------ zoomtype ------------------------------ */ BEGIN_JS_STATIC_CONST(CJS_Zoomtype) - JS_STATIC_CONST_ENTRY_STRING(none, NoVary) - JS_STATIC_CONST_ENTRY_STRING(fitP, FitPage) - JS_STATIC_CONST_ENTRY_STRING(fitW, FitWidth) - JS_STATIC_CONST_ENTRY_STRING(fitH, FitHeight) - JS_STATIC_CONST_ENTRY_STRING(fitV, FitVisibleWidth) - JS_STATIC_CONST_ENTRY_STRING(pref, Preferred) - JS_STATIC_CONST_ENTRY_STRING(refW, ReflowWidth) +JS_STATIC_CONST_ENTRY_STRING(none, NoVary) +JS_STATIC_CONST_ENTRY_STRING(fitP, FitPage) +JS_STATIC_CONST_ENTRY_STRING(fitW, FitWidth) +JS_STATIC_CONST_ENTRY_STRING(fitH, FitHeight) +JS_STATIC_CONST_ENTRY_STRING(fitV, FitVisibleWidth) +JS_STATIC_CONST_ENTRY_STRING(pref, Preferred) +JS_STATIC_CONST_ENTRY_STRING(refW, ReflowWidth) END_JS_STATIC_CONST() -IMPLEMENT_JS_CLASS_CONST(CJS_Zoomtype,zoomtype) - -/* ------------------------------ CJS_GlobalConsts ------------------------------ */ - -int CJS_GlobalConsts::Init(IJS_Runtime* pRuntime) -{ - DEFINE_GLOBAL_CONST(pRuntime, IDS_GREATER_THAN , Invalid value: must be greater than or equal to %s.); - DEFINE_GLOBAL_CONST(pRuntime, IDS_GT_AND_LT,Invalid value: must be greater than or equal to %s and less than or equal to %s.); - DEFINE_GLOBAL_CONST(pRuntime, IDS_LESS_THAN,Invalid value: must be less than or equal to %s.); - DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_MONTH,** Invalid **); - DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_DATE,Invalid date/time: please ensure that the date/time exists. Field); - DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_VALUE,The value entered does not match the format of the field); - DEFINE_GLOBAL_CONST(pRuntime, IDS_AM,am); - DEFINE_GLOBAL_CONST(pRuntime, IDS_PM,pm); - DEFINE_GLOBAL_CONST(pRuntime, IDS_MONTH_INFO,January[1]February[2]March[3]April[4]May[5]June[6]July[7]August[8]September[9]October[10]November[11]December[12]Sept[9]Jan[1]Feb[2]Mar[3]Apr[4]Jun[6]Jul[7]Aug[8]Sep[9]Oct[10]Nov[11]Dec[12]); - DEFINE_GLOBAL_CONST(pRuntime, IDS_STARTUP_CONSOLE_MSG, ** ^_^ **); - - return 0; +IMPLEMENT_JS_CLASS_CONST(CJS_Zoomtype, zoomtype) + +/* ------------------------------ CJS_GlobalConsts + * ------------------------------ */ + +int CJS_GlobalConsts::Init(IJS_Runtime* pRuntime) { + DEFINE_GLOBAL_CONST(pRuntime, IDS_GREATER_THAN, Invalid value + : must be greater than or equal to % s.); + DEFINE_GLOBAL_CONST( + pRuntime, IDS_GT_AND_LT, Invalid value + : must be greater than or equal to % s and less than or equal to % s.); + DEFINE_GLOBAL_CONST(pRuntime, IDS_LESS_THAN, Invalid value + : must be less than or equal to % s.); + DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_MONTH, **Invalid**); + DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_DATE, Invalid date / time + : please ensure that the date / time exists.Field); + DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_VALUE, + The value entered does not match the format of the field); + DEFINE_GLOBAL_CONST(pRuntime, IDS_AM, am); + DEFINE_GLOBAL_CONST(pRuntime, IDS_PM, pm); + DEFINE_GLOBAL_CONST( + pRuntime, IDS_MONTH_INFO, + January[1] February[2] March[3] April[4] May[5] June[6] July[7] August + [8] September[9] October[10] November[11] December[12] Sept[9] Jan + [1] Feb[2] Mar[3] Apr[4] Jun[6] Jul[7] Aug[8] Sep[9] Oct[10] Nov + [11] Dec[12]); + DEFINE_GLOBAL_CONST(pRuntime, IDS_STARTUP_CONSOLE_MSG, ** ^ _ ^ **); + + return 0; } -/* ------------------------------ CJS_GlobalArrays ------------------------------ */ - -int CJS_GlobalArrays::Init(IJS_Runtime* pRuntime) -{ - { - const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_DOT_SEP"; - const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*\\.?\\d*"}; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_DOT_SEP"; - const FX_WCHAR* ArrayContent[] = { L"[+-]?\\d+(\\.\\d+)?", /* -1.0 or -1 */ - L"[+-]?\\.\\d+", /* -.1 */ - L"[+-]?\\d+\\." /* -1. */ - }; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_COMMA_SEP"; - const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*,?\\d*"}; - - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_COMMA_SEP"; - const FX_WCHAR* ArrayContent[] = { L"[+-]?\\d+([.,]\\d+)?", /* -1,0 or -1 */ - L"[+-]?[.,]\\d+", /* -,1 */ - L"[+-]?\\d+[.,]" /* -1, */ - }; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_ZIP_ENTRY"; - const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}"}; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_ZIP_COMMIT"; - const FX_WCHAR* ArrayContent[] = {L"\\d{5}"}; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_ZIP4_ENTRY"; - const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}(\\.|[- ])?\\d{0,4}"}; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_ZIP4_COMMIT"; - const FX_WCHAR* ArrayContent[] = {L"\\d{5}(\\.|[- ])?\\d{4}"}; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_PHONE_ENTRY"; - const FX_WCHAR* ArrayContent[] = { - L"\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 555-1234 or 408 555-1234 */ - L"\\(\\d{0,3}", /* (408 */ - L"\\(\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408) 555-1234 */ - /* (allow the addition of parens as an afterthought) */ - L"\\(\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408 555-1234 */ - L"\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 408) 555-1234 */ - L"011(\\.|[- \\d])*" /* international */ - }; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_PHONE_COMMIT"; - const FX_WCHAR* ArrayContent[] = { - L"\\d{3}(\\.|[- ])?\\d{4}", /* 555-1234 */ - L"\\d{3}(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* 408 555-1234 */ - L"\\(\\d{3}\\)(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* (408) 555-1234 */ - L"011(\\.|[- \\d])*" /* international */ - }; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_SSN_ENTRY"; - const FX_WCHAR* ArrayContent[] = {L"\\d{0,3}(\\.|[- ])?\\d{0,2}(\\.|[- ])?\\d{0,4}"}; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - { - const FX_WCHAR* ArrayName = L"RE_SSN_COMMIT"; - const FX_WCHAR* ArrayContent[] = {L"\\d{3}(\\.|[- ])?\\d{2}(\\.|[- ])?\\d{4}"}; - DEFINE_GLOBAL_ARRAY(pRuntime); - } - - return 0; +/* ------------------------------ CJS_GlobalArrays + * ------------------------------ */ + +int CJS_GlobalArrays::Init(IJS_Runtime* pRuntime) { + { + const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_DOT_SEP"; + const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*\\.?\\d*"}; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_DOT_SEP"; + const FX_WCHAR* ArrayContent[] = { + L"[+-]?\\d+(\\.\\d+)?", /* -1.0 or -1 */ + L"[+-]?\\.\\d+", /* -.1 */ + L"[+-]?\\d+\\." /* -1. */ + }; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_COMMA_SEP"; + const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*,?\\d*"}; + + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_COMMA_SEP"; + const FX_WCHAR* ArrayContent[] = { + L"[+-]?\\d+([.,]\\d+)?", /* -1,0 or -1 */ + L"[+-]?[.,]\\d+", /* -,1 */ + L"[+-]?\\d+[.,]" /* -1, */ + }; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_ZIP_ENTRY"; + const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}"}; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_ZIP_COMMIT"; + const FX_WCHAR* ArrayContent[] = {L"\\d{5}"}; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_ZIP4_ENTRY"; + const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}(\\.|[- ])?\\d{0,4}"}; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_ZIP4_COMMIT"; + const FX_WCHAR* ArrayContent[] = {L"\\d{5}(\\.|[- ])?\\d{4}"}; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_PHONE_ENTRY"; + const FX_WCHAR* ArrayContent[] = { + L"\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 555-1234 or 408 + 555-1234 */ + L"\\(\\d{0,3}", /* (408 */ + L"\\(\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408) + 555-1234 */ + /* (allow the addition of parens as an afterthought) */ + L"\\(\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408 555-1234 + */ + L"\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 408) 555-1234 + */ + L"011(\\.|[- \\d])*" /* international */ + }; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_PHONE_COMMIT"; + const FX_WCHAR* ArrayContent[] = { + L"\\d{3}(\\.|[- ])?\\d{4}", /* 555-1234 */ + L"\\d{3}(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* 408 555-1234 */ + L"\\(\\d{3}\\)(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* (408) 555-1234 */ + L"011(\\.|[- \\d])*" /* international */ + }; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_SSN_ENTRY"; + const FX_WCHAR* ArrayContent[] = { + L"\\d{0,3}(\\.|[- ])?\\d{0,2}(\\.|[- ])?\\d{0,4}"}; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + { + const FX_WCHAR* ArrayName = L"RE_SSN_COMMIT"; + const FX_WCHAR* ArrayContent[] = { + L"\\d{3}(\\.|[- ])?\\d{2}(\\.|[- ])?\\d{4}"}; + DEFINE_GLOBAL_ARRAY(pRuntime); + } + + return 0; } - diff --git a/fpdfsdk/src/javascript/Document.cpp b/fpdfsdk/src/javascript/Document.cpp index 0fa612c223..9d231581df 100644 --- a/fpdfsdk/src/javascript/Document.cpp +++ b/fpdfsdk/src/javascript/Document.cpp @@ -20,15 +20,14 @@ #include "../../../third_party/base/numerics/safe_math.h" -static v8::Isolate* GetIsolate(IFXJS_Context* cc) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); +static v8::Isolate* GetIsolate(IFXJS_Context* cc) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); - return pRuntime->GetIsolate(); + return pRuntime->GetIsolate(); } BEGIN_JS_STATIC_CONST(CJS_PrintParamsObj) @@ -43,1745 +42,1755 @@ END_JS_STATIC_METHOD() IMPLEMENT_JS_CLASS(CJS_PrintParamsObj, PrintParamsObj) PrintParamsObj::PrintParamsObj(CJS_Object* pJSObject) -: CJS_EmbedObj(pJSObject) -{ - bUI = TRUE; - nStart = 0; - nEnd = 0; - bSilent = FALSE; - bShrinkToFit = FALSE; - bPrintAsImage = FALSE; - bReverse = FALSE; - bAnnotations = TRUE; + : CJS_EmbedObj(pJSObject) { + bUI = TRUE; + nStart = 0; + nEnd = 0; + bSilent = FALSE; + bShrinkToFit = FALSE; + bPrintAsImage = FALSE; + bReverse = FALSE; + bAnnotations = TRUE; } /* ---------------------- Document ---------------------- */ -#define MINWIDTH 5.0f +#define MINWIDTH 5.0f #define MINHEIGHT 5.0f BEGIN_JS_STATIC_CONST(CJS_Document) END_JS_STATIC_CONST() BEGIN_JS_STATIC_PROP(CJS_Document) - JS_STATIC_PROP_ENTRY(ADBE) - JS_STATIC_PROP_ENTRY(author) - JS_STATIC_PROP_ENTRY(baseURL) - JS_STATIC_PROP_ENTRY(bookmarkRoot) - JS_STATIC_PROP_ENTRY(calculate) - JS_STATIC_PROP_ENTRY(Collab) - JS_STATIC_PROP_ENTRY(creationDate) - JS_STATIC_PROP_ENTRY(creator) - JS_STATIC_PROP_ENTRY(delay) - JS_STATIC_PROP_ENTRY(dirty) - JS_STATIC_PROP_ENTRY(documentFileName) - JS_STATIC_PROP_ENTRY(external) - JS_STATIC_PROP_ENTRY(filesize) - JS_STATIC_PROP_ENTRY(icons) - JS_STATIC_PROP_ENTRY(info) - JS_STATIC_PROP_ENTRY(keywords) - JS_STATIC_PROP_ENTRY(layout) - JS_STATIC_PROP_ENTRY(media) - JS_STATIC_PROP_ENTRY(modDate) - JS_STATIC_PROP_ENTRY(mouseX) - JS_STATIC_PROP_ENTRY(mouseY) - JS_STATIC_PROP_ENTRY(numFields) - JS_STATIC_PROP_ENTRY(numPages) - JS_STATIC_PROP_ENTRY(pageNum) - JS_STATIC_PROP_ENTRY(pageWindowRect) - JS_STATIC_PROP_ENTRY(path) - JS_STATIC_PROP_ENTRY(producer) - JS_STATIC_PROP_ENTRY(subject) - JS_STATIC_PROP_ENTRY(title) - JS_STATIC_PROP_ENTRY(zoom) - JS_STATIC_PROP_ENTRY(zoomType) +JS_STATIC_PROP_ENTRY(ADBE) +JS_STATIC_PROP_ENTRY(author) +JS_STATIC_PROP_ENTRY(baseURL) +JS_STATIC_PROP_ENTRY(bookmarkRoot) +JS_STATIC_PROP_ENTRY(calculate) +JS_STATIC_PROP_ENTRY(Collab) +JS_STATIC_PROP_ENTRY(creationDate) +JS_STATIC_PROP_ENTRY(creator) +JS_STATIC_PROP_ENTRY(delay) +JS_STATIC_PROP_ENTRY(dirty) +JS_STATIC_PROP_ENTRY(documentFileName) +JS_STATIC_PROP_ENTRY(external) +JS_STATIC_PROP_ENTRY(filesize) +JS_STATIC_PROP_ENTRY(icons) +JS_STATIC_PROP_ENTRY(info) +JS_STATIC_PROP_ENTRY(keywords) +JS_STATIC_PROP_ENTRY(layout) +JS_STATIC_PROP_ENTRY(media) +JS_STATIC_PROP_ENTRY(modDate) +JS_STATIC_PROP_ENTRY(mouseX) +JS_STATIC_PROP_ENTRY(mouseY) +JS_STATIC_PROP_ENTRY(numFields) +JS_STATIC_PROP_ENTRY(numPages) +JS_STATIC_PROP_ENTRY(pageNum) +JS_STATIC_PROP_ENTRY(pageWindowRect) +JS_STATIC_PROP_ENTRY(path) +JS_STATIC_PROP_ENTRY(producer) +JS_STATIC_PROP_ENTRY(subject) +JS_STATIC_PROP_ENTRY(title) +JS_STATIC_PROP_ENTRY(zoom) +JS_STATIC_PROP_ENTRY(zoomType) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_Document) - JS_STATIC_METHOD_ENTRY(addAnnot) - JS_STATIC_METHOD_ENTRY(addField) - JS_STATIC_METHOD_ENTRY(addLink) - JS_STATIC_METHOD_ENTRY(addIcon) - JS_STATIC_METHOD_ENTRY(calculateNow) - JS_STATIC_METHOD_ENTRY(closeDoc) - JS_STATIC_METHOD_ENTRY(createDataObject) - JS_STATIC_METHOD_ENTRY(deletePages) - JS_STATIC_METHOD_ENTRY(exportAsText) - JS_STATIC_METHOD_ENTRY(exportAsFDF) - JS_STATIC_METHOD_ENTRY(exportAsXFDF) - JS_STATIC_METHOD_ENTRY(extractPages) - JS_STATIC_METHOD_ENTRY(getAnnot) - JS_STATIC_METHOD_ENTRY(getAnnots) - JS_STATIC_METHOD_ENTRY(getAnnot3D) - JS_STATIC_METHOD_ENTRY(getAnnots3D) - JS_STATIC_METHOD_ENTRY(getField) - JS_STATIC_METHOD_ENTRY(getIcon) - JS_STATIC_METHOD_ENTRY(getLinks) - JS_STATIC_METHOD_ENTRY(getNthFieldName) - JS_STATIC_METHOD_ENTRY(getOCGs) - JS_STATIC_METHOD_ENTRY(getPageBox) - JS_STATIC_METHOD_ENTRY(getPageNthWord) - JS_STATIC_METHOD_ENTRY(getPageNthWordQuads) - JS_STATIC_METHOD_ENTRY(getPageNumWords) - JS_STATIC_METHOD_ENTRY(getPrintParams) - JS_STATIC_METHOD_ENTRY(getURL) - JS_STATIC_METHOD_ENTRY(importAnFDF) - JS_STATIC_METHOD_ENTRY(importAnXFDF) - JS_STATIC_METHOD_ENTRY(importTextData) - JS_STATIC_METHOD_ENTRY(insertPages) - JS_STATIC_METHOD_ENTRY(mailForm) - JS_STATIC_METHOD_ENTRY(print) - JS_STATIC_METHOD_ENTRY(removeField) - JS_STATIC_METHOD_ENTRY(replacePages) - JS_STATIC_METHOD_ENTRY(resetForm) - JS_STATIC_METHOD_ENTRY(removeIcon) - JS_STATIC_METHOD_ENTRY(saveAs) - JS_STATIC_METHOD_ENTRY(submitForm) - JS_STATIC_METHOD_ENTRY(mailDoc) +JS_STATIC_METHOD_ENTRY(addAnnot) +JS_STATIC_METHOD_ENTRY(addField) +JS_STATIC_METHOD_ENTRY(addLink) +JS_STATIC_METHOD_ENTRY(addIcon) +JS_STATIC_METHOD_ENTRY(calculateNow) +JS_STATIC_METHOD_ENTRY(closeDoc) +JS_STATIC_METHOD_ENTRY(createDataObject) +JS_STATIC_METHOD_ENTRY(deletePages) +JS_STATIC_METHOD_ENTRY(exportAsText) +JS_STATIC_METHOD_ENTRY(exportAsFDF) +JS_STATIC_METHOD_ENTRY(exportAsXFDF) +JS_STATIC_METHOD_ENTRY(extractPages) +JS_STATIC_METHOD_ENTRY(getAnnot) +JS_STATIC_METHOD_ENTRY(getAnnots) +JS_STATIC_METHOD_ENTRY(getAnnot3D) +JS_STATIC_METHOD_ENTRY(getAnnots3D) +JS_STATIC_METHOD_ENTRY(getField) +JS_STATIC_METHOD_ENTRY(getIcon) +JS_STATIC_METHOD_ENTRY(getLinks) +JS_STATIC_METHOD_ENTRY(getNthFieldName) +JS_STATIC_METHOD_ENTRY(getOCGs) +JS_STATIC_METHOD_ENTRY(getPageBox) +JS_STATIC_METHOD_ENTRY(getPageNthWord) +JS_STATIC_METHOD_ENTRY(getPageNthWordQuads) +JS_STATIC_METHOD_ENTRY(getPageNumWords) +JS_STATIC_METHOD_ENTRY(getPrintParams) +JS_STATIC_METHOD_ENTRY(getURL) +JS_STATIC_METHOD_ENTRY(importAnFDF) +JS_STATIC_METHOD_ENTRY(importAnXFDF) +JS_STATIC_METHOD_ENTRY(importTextData) +JS_STATIC_METHOD_ENTRY(insertPages) +JS_STATIC_METHOD_ENTRY(mailForm) +JS_STATIC_METHOD_ENTRY(print) +JS_STATIC_METHOD_ENTRY(removeField) +JS_STATIC_METHOD_ENTRY(replacePages) +JS_STATIC_METHOD_ENTRY(resetForm) +JS_STATIC_METHOD_ENTRY(removeIcon) +JS_STATIC_METHOD_ENTRY(saveAs) +JS_STATIC_METHOD_ENTRY(submitForm) +JS_STATIC_METHOD_ENTRY(mailDoc) END_JS_STATIC_METHOD() IMPLEMENT_JS_CLASS(CJS_Document, Document) -FX_BOOL CJS_Document::InitInstance(IFXJS_Context* cc) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); +FX_BOOL CJS_Document::InitInstance(IFXJS_Context* cc) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - Document* pDoc = (Document*)GetEmbedObject(); - ASSERT(pDoc != NULL); + Document* pDoc = (Document*)GetEmbedObject(); + ASSERT(pDoc != NULL); - pDoc->AttachDoc(pContext->GetReaderDocument()); - pDoc->SetIsolate(pContext->GetJSRuntime()->GetIsolate()); - return TRUE; + pDoc->AttachDoc(pContext->GetReaderDocument()); + pDoc->SetIsolate(pContext->GetJSRuntime()->GetIsolate()); + return TRUE; }; -/* --------------------------------- Document --------------------------------- */ - -Document::Document(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject), - m_isolate(NULL), - m_pIconTree(NULL), - m_pDocument(NULL), - m_cwBaseURL(L""), - m_bDelay(FALSE) -{ -} - -Document::~Document() -{ - if (m_pIconTree) - { - m_pIconTree->DeleteIconTree(); - delete m_pIconTree; - m_pIconTree = NULL; - } - for (int i=0; i(cc); - sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); - return FALSE; - } - CPDFSDK_InterForm *pInterForm = m_pDocument->GetInterForm(); - CPDF_InterForm *pPDFForm = pInterForm->GetInterForm(); - vp << (int)pPDFForm->CountFields(); - return TRUE; +/* --------------------------------- Document --------------------------------- + */ + +Document::Document(CJS_Object* pJSObject) + : CJS_EmbedObj(pJSObject), + m_isolate(NULL), + m_pIconTree(NULL), + m_pDocument(NULL), + m_cwBaseURL(L""), + m_bDelay(FALSE) {} + +Document::~Document() { + if (m_pIconTree) { + m_pIconTree->DeleteIconTree(); + delete m_pIconTree; + m_pIconTree = NULL; + } + for (int i = 0; i < m_DelayData.GetSize(); i++) { + if (CJS_DelayData* pData = m_DelayData.GetAt(i)) { + delete pData; + pData = NULL; + m_DelayData.SetAt(i, NULL); + } + } + + m_DelayData.RemoveAll(); + m_DelayAnnotData.RemoveAll(); +} + +// the total number of fileds in document. +FX_BOOL Document::numFields(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsSetting()) { + CJS_Context* pContext = static_cast(cc); + sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); + return FALSE; + } + CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm(); + CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); + vp << (int)pPDFForm->CountFields(); + return TRUE; } -FX_BOOL Document::dirty(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Document::dirty(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsGetting()) - { - if (m_pDocument->GetChangeMark()) - vp << true; - else - vp << false; - } + if (vp.IsGetting()) { + if (m_pDocument->GetChangeMark()) + vp << true; else - { - bool bChanged = false; + vp << false; + } else { + bool bChanged = false; - vp >> bChanged; + vp >> bChanged; - if (bChanged) - m_pDocument->SetChangeMark(); - else - m_pDocument->ClearChangeMark(); - } + if (bChanged) + m_pDocument->SetChangeMark(); + else + m_pDocument->ClearChangeMark(); + } - return TRUE; + return TRUE; } -FX_BOOL Document::ADBE(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Document::ADBE(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsGetting()) - { - vp.SetNull(); - } - else - { - } + if (vp.IsGetting()) { + vp.SetNull(); + } else { + } - return TRUE; + return TRUE; } -FX_BOOL Document::pageNum(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Document::pageNum(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsGetting()) - { - if (CPDFSDK_PageView* pPageView = m_pDocument->GetCurrentView()) - { - vp << pPageView->GetPageIndex(); - } + if (vp.IsGetting()) { + if (CPDFSDK_PageView* pPageView = m_pDocument->GetCurrentView()) { + vp << pPageView->GetPageIndex(); } - else - { - int iPageCount = m_pDocument->GetPageCount(); - int iPageNum = 0; - vp >> iPageNum; - - CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); - if (iPageNum >= 0 && iPageNum < iPageCount) - { - pEnv->JS_docgotoPage(iPageNum); - } - else if (iPageNum >= iPageCount) - { - pEnv->JS_docgotoPage(iPageCount-1); - } - else if (iPageNum < 0) - { - pEnv->JS_docgotoPage(0); - } + } else { + int iPageCount = m_pDocument->GetPageCount(); + int iPageNum = 0; + vp >> iPageNum; + + CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); + if (iPageNum >= 0 && iPageNum < iPageCount) { + pEnv->JS_docgotoPage(iPageNum); + } else if (iPageNum >= iPageCount) { + pEnv->JS_docgotoPage(iPageCount - 1); + } else if (iPageNum < 0) { + pEnv->JS_docgotoPage(0); } + } - return TRUE; + return TRUE; } -FX_BOOL Document::ParserParams(JSObject* pObj,CJS_AnnotObj& annotobj) -{ - // Not supported. - return TRUE; +FX_BOOL Document::ParserParams(JSObject* pObj, CJS_AnnotObj& annotobj) { + // Not supported. + return TRUE; } -FX_BOOL Document::addAnnot(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - // Not supported. - return TRUE; +FX_BOOL Document::addAnnot(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + // Not supported. + return TRUE; } -FX_BOOL Document::addField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - // Not supported. - return TRUE; +FX_BOOL Document::addField(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + // Not supported. + return TRUE; } -FX_BOOL Document::exportAsText(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - // Unsafe, not supported. - return TRUE; +FX_BOOL Document::exportAsText(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + // Unsafe, not supported. + return TRUE; } -FX_BOOL Document::exportAsFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - // Unsafe, not supported. - return TRUE; +FX_BOOL Document::exportAsFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + // Unsafe, not supported. + return TRUE; } -FX_BOOL Document::exportAsXFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - // Unsafe, not supported. - return TRUE; +FX_BOOL Document::exportAsXFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + // Unsafe, not supported. + return TRUE; } -//Maps a field object in PDF document to a JavaScript variable -//comment: -//note: the paremter cName, this is clue how to treat if the cName is not a valiable filed name in this document +// Maps a field object in PDF document to a JavaScript variable +// comment: +// note: the paremter cName, this is clue how to treat if the cName is not a +// valiable filed name in this document -FX_BOOL Document::getField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - if (params.size() < 1) { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } +FX_BOOL Document::getField(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + if (params.size() < 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - CFX_WideString wideName = params[0].ToCFXWideString(); + CFX_WideString wideName = params[0].ToCFXWideString(); - CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm(); - CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); - if (pPDFForm->CountFields(wideName) <= 0) - { - vRet.SetNull(); - return TRUE; - } + CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm(); + CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); + if (pPDFForm->CountFields(wideName) <= 0) { + vRet.SetNull(); + return TRUE; + } - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - JSFXObject pFieldObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Field")); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + JSFXObject pFieldObj = JS_NewFxDynamicObj( + *pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Field")); - v8::Isolate* isolate = GetIsolate(cc); - CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(isolate,pFieldObj); - Field* pField = (Field *)pJSField->GetEmbedObject(); - pField->AttachField(this, wideName); + v8::Isolate* isolate = GetIsolate(cc); + CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(isolate, pFieldObj); + Field* pField = (Field*)pJSField->GetEmbedObject(); + pField->AttachField(this, wideName); - vRet = pJSField; - return TRUE; + vRet = pJSField; + return TRUE; } -//Gets the name of the nth field in the document -FX_BOOL Document::getNthFieldName(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - if (params.size() != 1) { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } +// Gets the name of the nth field in the document +FX_BOOL Document::getNthFieldName(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + if (params.size() != 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - int nIndex = params[0].ToInt(); - if (nIndex < 0) { - sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR); - return FALSE; - } + int nIndex = params[0].ToInt(); + if (nIndex < 0) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR); + return FALSE; + } - CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm(); - CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); - CPDF_FormField* pField = pPDFForm->GetField(nIndex); - if (!pField) - return FALSE; + CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm(); + CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); + CPDF_FormField* pField = pPDFForm->GetField(nIndex); + if (!pField) + return FALSE; - vRet = pField->GetFullName().c_str(); - return TRUE; + vRet = pField->GetFullName().c_str(); + return TRUE; } -FX_BOOL Document::importAnFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - // Unsafe, not supported. - return TRUE; +FX_BOOL Document::importAnFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + // Unsafe, not supported. + return TRUE; } -FX_BOOL Document::importAnXFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - // Unsafe, not supported. - return TRUE; +FX_BOOL Document::importAnXFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + // Unsafe, not supported. + return TRUE; } -FX_BOOL Document::importTextData(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - // Unsafe, not supported. - return TRUE; +FX_BOOL Document::importTextData(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + // Unsafe, not supported. + return TRUE; } -//exports the form data and mails the resulting fdf file as an attachment to all recipients. -//comment: need reader supports -//note: -//int CPDFSDK_Document::mailForm(FX_BOOL bUI,String cto,string ccc,string cbcc,string cSubject,string cms); +// exports the form data and mails the resulting fdf file as an attachment to +// all recipients. +// comment: need reader supports +// note: +// int CPDFSDK_Document::mailForm(FX_BOOL bUI,String cto,string ccc,string +// cbcc,string cSubject,string cms); -FX_BOOL Document::mailForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Document::mailForm(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE; - - int iLength = params.size(); + if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) + return FALSE; - FX_BOOL bUI = iLength > 0 ? params[0].ToBool() : TRUE; - CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString() : L""; - CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString() : L""; - CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString() : L""; - CFX_WideString cSubject = iLength > 4 ? params[4].ToCFXWideString() : L""; - CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString() : L""; + int iLength = params.size(); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + FX_BOOL bUI = iLength > 0 ? params[0].ToBool() : TRUE; + CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString() : L""; + CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString() : L""; + CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString() : L""; + CFX_WideString cSubject = iLength > 4 ? params[4].ToCFXWideString() : L""; + CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString() : L""; - CFX_ByteTextBuf textBuf; - if (!pInterForm->ExportFormToFDFTextBuf(textBuf)) - return FALSE; + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CPDFDoc_Environment* pEnv = pContext->GetReaderApp(); - ASSERT(pEnv != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); + CFX_ByteTextBuf textBuf; + if (!pInterForm->ExportFormToFDFTextBuf(textBuf)) + return FALSE; - pRuntime->BeginBlock(); - pEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str()); - pRuntime->EndBlock(); - return TRUE; + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CPDFDoc_Environment* pEnv = pContext->GetReaderApp(); + ASSERT(pEnv != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); + + pRuntime->BeginBlock(); + pEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI, + cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), + cMsg.c_str()); + pRuntime->EndBlock(); + return TRUE; } -FX_BOOL Document::print(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); - - FX_BOOL bUI = TRUE; - int nStart = 0; - int nEnd = 0; - FX_BOOL bSilent = FALSE; - FX_BOOL bShrinkToFit = FALSE; - FX_BOOL bPrintAsImage = FALSE; - FX_BOOL bReverse = FALSE; - FX_BOOL bAnnotations = FALSE; - - int nlength = params.size(); - if(nlength ==9) - { - if (params[8].GetType() == VT_fxobject) - { - JSFXObject pObj = params[8].ToV8Object(); - { - if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"PrintParamsObj")) - { - if (CJS_Object* pJSObj = params[8].ToCJSObject()) - { - if (PrintParamsObj* pprintparamsObj = (PrintParamsObj*)pJSObj->GetEmbedObject()) - { - bUI = pprintparamsObj->bUI; - nStart = pprintparamsObj->nStart; - nEnd = pprintparamsObj->nEnd; - bSilent = pprintparamsObj->bSilent; - bShrinkToFit = pprintparamsObj->bShrinkToFit; - bPrintAsImage = pprintparamsObj->bPrintAsImage; - bReverse = pprintparamsObj->bReverse; - bAnnotations = pprintparamsObj->bAnnotations; - } - } - } +FX_BOOL Document::print(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); + + FX_BOOL bUI = TRUE; + int nStart = 0; + int nEnd = 0; + FX_BOOL bSilent = FALSE; + FX_BOOL bShrinkToFit = FALSE; + FX_BOOL bPrintAsImage = FALSE; + FX_BOOL bReverse = FALSE; + FX_BOOL bAnnotations = FALSE; + + int nlength = params.size(); + if (nlength == 9) { + if (params[8].GetType() == VT_fxobject) { + JSFXObject pObj = params[8].ToV8Object(); + { + if (JS_GetObjDefnID(pObj) == + JS_GetObjDefnID(*pRuntime, L"PrintParamsObj")) { + if (CJS_Object* pJSObj = params[8].ToCJSObject()) { + if (PrintParamsObj* pprintparamsObj = + (PrintParamsObj*)pJSObj->GetEmbedObject()) { + bUI = pprintparamsObj->bUI; + nStart = pprintparamsObj->nStart; + nEnd = pprintparamsObj->nEnd; + bSilent = pprintparamsObj->bSilent; + bShrinkToFit = pprintparamsObj->bShrinkToFit; + bPrintAsImage = pprintparamsObj->bPrintAsImage; + bReverse = pprintparamsObj->bReverse; + bAnnotations = pprintparamsObj->bAnnotations; } + } } - } - else - { - if(nlength >= 1) - bUI = params[0].ToBool(); - if(nlength >= 2) - nStart = params[1].ToInt(); - if(nlength >= 3) - nEnd = params[2].ToInt(); - if(nlength >= 4) - bSilent = params[3].ToBool(); - if(nlength >= 5) - bShrinkToFit = params[4].ToBool(); - if(nlength >= 6) - bPrintAsImage = params[5].ToBool(); - if(nlength >= 7) - bReverse = params[6].ToBool(); - if(nlength >= 8) - bAnnotations = params[7].ToBool(); - } - - ASSERT(m_pDocument != NULL); - - if (CPDFDoc_Environment* pEnv = m_pDocument->GetEnv()) - { - pEnv->JS_docprint(bUI, nStart, nEnd, bSilent, bShrinkToFit, bPrintAsImage, bReverse, bAnnotations); - return TRUE; - } - return FALSE; + } + } + } else { + if (nlength >= 1) + bUI = params[0].ToBool(); + if (nlength >= 2) + nStart = params[1].ToInt(); + if (nlength >= 3) + nEnd = params[2].ToInt(); + if (nlength >= 4) + bSilent = params[3].ToBool(); + if (nlength >= 5) + bShrinkToFit = params[4].ToBool(); + if (nlength >= 6) + bPrintAsImage = params[5].ToBool(); + if (nlength >= 7) + bReverse = params[6].ToBool(); + if (nlength >= 8) + bAnnotations = params[7].ToBool(); + } + + ASSERT(m_pDocument != NULL); + + if (CPDFDoc_Environment* pEnv = m_pDocument->GetEnv()) { + pEnv->JS_docprint(bUI, nStart, nEnd, bSilent, bShrinkToFit, bPrintAsImage, + bReverse, bAnnotations); + return TRUE; + } + return FALSE; } -//removes the specified field from the document. -//comment: -//note: if the filed name is not retional, adobe is dumb for it. +// removes the specified field from the document. +// comment: +// note: if the filed name is not retional, adobe is dumb for it. -FX_BOOL Document::removeField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Document::removeField(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) || - m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM))) return FALSE; + if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) || + m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM))) + return FALSE; - CJS_Context* pContext = (CJS_Context*)cc; - if (params.size() != 1) { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } + CJS_Context* pContext = (CJS_Context*)cc; + if (params.size() != 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - CFX_WideString sFieldName = params[0].ToCFXWideString(); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CFX_WideString sFieldName = params[0].ToCFXWideString(); + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - CFX_PtrArray widgets; - pInterForm->GetWidgets(sFieldName, widgets); + CFX_PtrArray widgets; + pInterForm->GetWidgets(sFieldName, widgets); - int nSize = widgets.GetSize(); + int nSize = widgets.GetSize(); - if (nSize > 0) - { - for (int i=0; i 0) { + for (int i = 0; i < nSize; i++) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets[i]; + ASSERT(pWidget != NULL); - CPDF_Rect rcAnnot = pWidget->GetRect(); - rcAnnot.left -= 1; - rcAnnot.bottom -= 1; - rcAnnot.right += 1; - rcAnnot.top += 1; + CPDF_Rect rcAnnot = pWidget->GetRect(); + rcAnnot.left -= 1; + rcAnnot.bottom -= 1; + rcAnnot.right += 1; + rcAnnot.top += 1; - CFX_RectArray aRefresh; - aRefresh.Add(rcAnnot); + CFX_RectArray aRefresh; + aRefresh.Add(rcAnnot); - CPDFXFA_Page* pPage = pWidget->GetPDFXFAPage(); - ASSERT(pPage != NULL); + CPDFXFA_Page* pPage = pWidget->GetPDFXFAPage(); + ASSERT(pPage != NULL); - CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage); - pPageView->DeleteAnnot(pWidget); + CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage); + pPageView->DeleteAnnot(pWidget); - pPageView->UpdateRects(aRefresh); - } - m_pDocument->SetChangeMark(); + pPageView->UpdateRects(aRefresh); } + m_pDocument->SetChangeMark(); + } - return TRUE; + return TRUE; } -//reset filed values within a document. -//comment: -//note: if the fields names r not rational, aodbe is dumb for it. +// reset filed values within a document. +// comment: +// note: if the fields names r not rational, aodbe is dumb for it. -FX_BOOL Document::resetForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Document::resetForm(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) || + if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) || m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) || - m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) return FALSE; + m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) + return FALSE; - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); - ASSERT(pPDFForm != NULL); - - v8::Isolate* isolate = GetIsolate(cc); - CJS_Array aName(isolate); - - if (params.size() > 0) - { - switch (params[0].GetType()) - { - default: - aName.Attach(params[0].ToV8Array()); - break; - case VT_string: - aName.SetElement(0,params[0]); - break; - } + CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); + ASSERT(pPDFForm != NULL); - CFX_PtrArray aFields; + v8::Isolate* isolate = GetIsolate(cc); + CJS_Array aName(isolate); - for (int i=0,isz=aName.GetLength(); i 0) { + switch (params[0].GetType()) { + default: + aName.Attach(params[0].ToV8Array()); + break; + case VT_string: + aName.SetElement(0, params[0]); + break; + } - for (int j=0,jsz=pPDFForm->CountFields(swVal); jGetField(j,swVal)); - } - } + CFX_PtrArray aFields; - if (aFields.GetSize() > 0) - { - pPDFForm->ResetForm(aFields, TRUE, TRUE); - m_pDocument->SetChangeMark(); + for (int i = 0, isz = aName.GetLength(); i < isz; i++) { + CJS_Value valElement(isolate); + aName.GetElement(i, valElement); + CFX_WideString swVal = valElement.ToCFXWideString(); - } + for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; j++) { + aFields.Add((void*)pPDFForm->GetField(j, swVal)); + } } - else - { - pPDFForm->ResetForm(TRUE); - m_pDocument->SetChangeMark(); + if (aFields.GetSize() > 0) { + pPDFForm->ResetForm(aFields, TRUE, TRUE); + m_pDocument->SetChangeMark(); } + } else { + pPDFForm->ResetForm(TRUE); + m_pDocument->SetChangeMark(); + } - return TRUE; + return TRUE; } - -FX_BOOL Document::saveAs(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL Document::saveAs(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Unsafe, not supported. return TRUE; } - -FX_BOOL Document::submitForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - CJS_Context* pContext = (CJS_Context*)cc; - int nSize = params.size(); - if (nSize < 1) { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; +FX_BOOL Document::submitForm(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + CJS_Context* pContext = (CJS_Context*)cc; + int nSize = params.size(); + if (nSize < 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + CFX_WideString strURL; + FX_BOOL bFDF = TRUE; + FX_BOOL bEmpty = FALSE; + v8::Isolate* isolate = GetIsolate(cc); + CJS_Array aFields(isolate); + + CJS_Value v = params[0]; + if (v.GetType() == VT_string) { + strURL = params[0].ToCFXWideString(); + if (nSize > 1) + bFDF = params[1].ToBool(); + if (nSize > 2) + bEmpty = params[2].ToBool(); + if (nSize > 3) + aFields.Attach(params[3].ToV8Array()); + } else if (v.GetType() == VT_object) { + JSObject pObj = params[0].ToV8Object(); + v8::Local pValue = JS_GetObjectElement(isolate, pObj, L"cURL"); + if (!pValue.IsEmpty()) + strURL = + CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + pValue = JS_GetObjectElement(isolate, pObj, L"bFDF"); + bFDF = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool(); + pValue = JS_GetObjectElement(isolate, pObj, L"bEmpty"); + bEmpty = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool(); + pValue = JS_GetObjectElement(isolate, pObj, L"aFields"); + aFields.Attach( + CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToV8Array()); + } + + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); + FX_BOOL bAll = (aFields.GetLength() == 0); + if (bAll && bEmpty) { + if (pPDFInterForm->CheckRequiredFields()) { + pRuntime->BeginBlock(); + pInterForm->SubmitForm(strURL, FALSE); + pRuntime->EndBlock(); } + return TRUE; + } - CFX_WideString strURL; - FX_BOOL bFDF = TRUE; - FX_BOOL bEmpty = FALSE; - v8::Isolate* isolate = GetIsolate(cc); - CJS_Array aFields(isolate); - - CJS_Value v = params[0]; - if (v.GetType() == VT_string) - { - strURL = params[0].ToCFXWideString(); - if (nSize > 1) - bFDF = params[1].ToBool(); - if (nSize > 2) - bEmpty = params[2].ToBool(); - if (nSize > 3) - aFields.Attach(params[3].ToV8Array()); - } - else if (v.GetType() == VT_object) - { - JSObject pObj = params[0].ToV8Object(); - v8::Local pValue = JS_GetObjectElement(isolate, pObj, L"cURL"); - if (!pValue.IsEmpty()) - strURL = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); - pValue = JS_GetObjectElement(isolate, pObj, L"bFDF"); - bFDF = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool(); - pValue = JS_GetObjectElement(isolate, pObj, L"bEmpty"); - bEmpty = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool(); - pValue = JS_GetObjectElement(isolate, pObj,L"aFields"); - aFields.Attach(CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToV8Array()); - } + CFX_PtrArray fieldObjects; + for (int i = 0, sz = aFields.GetLength(); i < sz; i++) { + CJS_Value valName(isolate); + aFields.GetElement(i, valName); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); - FX_BOOL bAll = (aFields.GetLength() == 0); - if (bAll && bEmpty) - { - if (pPDFInterForm->CheckRequiredFields()) - { - pRuntime->BeginBlock(); - pInterForm->SubmitForm(strURL, FALSE); - pRuntime->EndBlock(); - } - return TRUE; - } + CFX_WideString sName = valName.ToCFXWideString(); + CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); + for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) { + CPDF_FormField* pField = pPDFForm->GetField(j, sName); + if (!bEmpty && pField->GetValue().IsEmpty()) + continue; - CFX_PtrArray fieldObjects; - for (int i=0,sz=aFields.GetLength(); iGetInterForm(); - for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) - { - CPDF_FormField* pField = pPDFForm->GetField(j, sName); - if (!bEmpty && pField->GetValue().IsEmpty()) - continue; - - fieldObjects.Add(pField); - } + fieldObjects.Add(pField); } + } - if (pPDFInterForm->CheckRequiredFields(&fieldObjects, TRUE)) - { - pRuntime->BeginBlock(); - pInterForm->SubmitFields(strURL, fieldObjects, TRUE, !bFDF); - pRuntime->EndBlock(); - } - return TRUE; + if (pPDFInterForm->CheckRequiredFields(&fieldObjects, TRUE)) { + pRuntime->BeginBlock(); + pInterForm->SubmitFields(strURL, fieldObjects, TRUE, !bFDF); + pRuntime->EndBlock(); + } + return TRUE; } ////////////////////////////////////////////////////////////////////////////////////////////// -void Document::AttachDoc(CPDFSDK_Document *pDoc) -{ - m_pDocument = pDoc; +void Document::AttachDoc(CPDFSDK_Document* pDoc) { + m_pDocument = pDoc; } -CPDFSDK_Document * Document::GetReaderDoc() -{ - return m_pDocument; +CPDFSDK_Document* Document::GetReaderDoc() { + return m_pDocument; } -FX_BOOL Document::ExtractFileName(CPDFSDK_Document *pDoc,CFX_ByteString &strFileName) -{ - return FALSE; +FX_BOOL Document::ExtractFileName(CPDFSDK_Document* pDoc, + CFX_ByteString& strFileName) { + return FALSE; } -FX_BOOL Document::ExtractFolderName(CPDFSDK_Document *pDoc,CFX_ByteString &strFolderName) -{ - return FALSE; +FX_BOOL Document::ExtractFolderName(CPDFSDK_Document* pDoc, + CFX_ByteString& strFolderName) { + return FALSE; } -FX_BOOL Document::bookmarkRoot(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::bookmarkRoot(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::mailDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - FX_BOOL bUI = TRUE; - CFX_WideString cTo = L""; - CFX_WideString cCc = L""; - CFX_WideString cBcc = L""; - CFX_WideString cSubject = L""; - CFX_WideString cMsg = L""; - - if (params.size() >= 1) - bUI = params[0].ToBool(); - if (params.size() >= 2) - cTo = params[1].ToCFXWideString(); - if (params.size() >= 3) - cCc = params[2].ToCFXWideString(); - if (params.size() >= 4) - cBcc = params[3].ToCFXWideString(); - if (params.size() >= 5) - cSubject = params[4].ToCFXWideString(); - if (params.size() >= 6) - cMsg = params[5].ToCFXWideString(); +FX_BOOL Document::mailDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + + FX_BOOL bUI = TRUE; + CFX_WideString cTo = L""; + CFX_WideString cCc = L""; + CFX_WideString cBcc = L""; + CFX_WideString cSubject = L""; + CFX_WideString cMsg = L""; + + if (params.size() >= 1) + bUI = params[0].ToBool(); + if (params.size() >= 2) + cTo = params[1].ToCFXWideString(); + if (params.size() >= 3) + cCc = params[2].ToCFXWideString(); + if (params.size() >= 4) + cBcc = params[3].ToCFXWideString(); + if (params.size() >= 5) + cSubject = params[4].ToCFXWideString(); + if (params.size() >= 6) + cMsg = params[5].ToCFXWideString(); + + v8::Isolate* isolate = GetIsolate(cc); + + if (params.size() >= 1 && params[0].GetType() == VT_object) { + JSObject pObj = params[0].ToV8Object(); + + v8::Local pValue = JS_GetObjectElement(isolate, pObj, L"bUI"); + bUI = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToInt(); + + pValue = JS_GetObjectElement(isolate, pObj, L"cTo"); + cTo = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + + pValue = JS_GetObjectElement(isolate, pObj, L"cCc"); + cCc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + + pValue = JS_GetObjectElement(isolate, pObj, L"cBcc"); + cBcc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + + pValue = JS_GetObjectElement(isolate, pObj, L"cSubject"); + cSubject = + CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + + pValue = JS_GetObjectElement(isolate, pObj, L"cMsg"); + cMsg = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + } + + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); + + pRuntime->BeginBlock(); + CPDFDoc_Environment* pEnv = pRuntime->GetReaderApp(); + pEnv->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), + cBcc.c_str(), cMsg.c_str()); + pRuntime->EndBlock(); - v8::Isolate* isolate = GetIsolate(cc); - - if(params.size() >= 1 && params[0].GetType() == VT_object) - { - JSObject pObj = params[0].ToV8Object(); - - v8::Local pValue = JS_GetObjectElement(isolate,pObj, L"bUI"); - bUI = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToInt(); - - pValue = JS_GetObjectElement(isolate,pObj, L"cTo"); - cTo = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString(); + return TRUE; +} - pValue = JS_GetObjectElement(isolate,pObj, L"cCc"); - cCc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString(); +FX_BOOL Document::author(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - pValue = JS_GetObjectElement(isolate,pObj, L"cBcc"); - cBcc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString(); + CPDF_Dictionary* pDictionary = + m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); + if (!pDictionary) + return FALSE; - pValue = JS_GetObjectElement(isolate,pObj, L"cSubject"); - cSubject = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString(); + if (vp.IsGetting()) { + vp << pDictionary->GetUnicodeText("Author"); + return TRUE; + } else { + if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) + return FALSE; + + CFX_WideString csAuthor; + vp >> csAuthor; + pDictionary->SetAtString("Author", PDF_EncodeText(csAuthor)); + m_pDocument->SetChangeMark(); + return TRUE; + } +} - pValue = JS_GetObjectElement(isolate,pObj, L"cMsg"); - cMsg = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString(); +FX_BOOL Document::info(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - } + CPDF_Dictionary* pDictionary = + m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); + if (!pDictionary) + return FALSE; + CFX_WideString cwAuthor = pDictionary->GetUnicodeText("Author"); + CFX_WideString cwTitle = pDictionary->GetUnicodeText("Title"); + CFX_WideString cwSubject = pDictionary->GetUnicodeText("Subject"); + CFX_WideString cwKeywords = pDictionary->GetUnicodeText("Keywords"); + CFX_WideString cwCreator = pDictionary->GetUnicodeText("Creator"); + CFX_WideString cwProducer = pDictionary->GetUnicodeText("Producer"); + CFX_WideString cwCreationDate = pDictionary->GetUnicodeText("CreationDate"); + CFX_WideString cwModDate = pDictionary->GetUnicodeText("ModDate"); + CFX_WideString cwTrapped = pDictionary->GetUnicodeText("Trapped"); + + v8::Isolate* isolate = GetIsolate(cc); + if (vp.IsGetting()) { CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); - - pRuntime->BeginBlock(); - CPDFDoc_Environment* pEnv = pRuntime->GetReaderApp(); - pEnv->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str()); - pRuntime->EndBlock(); + JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, -1); + + JS_PutObjectString(isolate, pObj, L"Author", cwAuthor.c_str()); + JS_PutObjectString(isolate, pObj, L"Title", cwTitle.c_str()); + JS_PutObjectString(isolate, pObj, L"Subject", cwSubject.c_str()); + JS_PutObjectString(isolate, pObj, L"Keywords", cwKeywords.c_str()); + JS_PutObjectString(isolate, pObj, L"Creator", cwCreator.c_str()); + JS_PutObjectString(isolate, pObj, L"Producer", cwProducer.c_str()); + JS_PutObjectString(isolate, pObj, L"CreationDate", cwCreationDate.c_str()); + JS_PutObjectString(isolate, pObj, L"ModDate", cwModDate.c_str()); + JS_PutObjectString(isolate, pObj, L"Trapped", cwTrapped.c_str()); + + // It's to be compatible to non-standard info dictionary. + FX_POSITION pos = pDictionary->GetStartPos(); + while (pos) { + CFX_ByteString bsKey; + CPDF_Object* pValueObj = pDictionary->GetNextElement(pos, bsKey); + CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey, bsKey.GetLength()); + if ((pValueObj->GetType() == PDFOBJ_STRING) || + (pValueObj->GetType() == PDFOBJ_NAME)) + JS_PutObjectString(isolate, pObj, wsKey.c_str(), + pValueObj->GetUnicodeText().c_str()); + if (pValueObj->GetType() == PDFOBJ_NUMBER) + JS_PutObjectNumber(isolate, pObj, wsKey.c_str(), + (float)pValueObj->GetNumber()); + if (pValueObj->GetType() == PDFOBJ_BOOLEAN) + JS_PutObjectBoolean(isolate, pObj, wsKey.c_str(), + (bool)pValueObj->GetInteger()); + } + + vp << pObj; + return TRUE; + } else { return TRUE; + } } -FX_BOOL Document::author(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); - if (!pDictionary)return FALSE; +FX_BOOL Document::creationDate(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CPDF_Dictionary* pDictionary = + m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); + if (!pDictionary) + return FALSE; - if (vp.IsGetting()) - { - vp << pDictionary->GetUnicodeText("Author"); - return TRUE; - } - else - { - if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE; - - CFX_WideString csAuthor; - vp >> csAuthor; - pDictionary->SetAtString("Author", PDF_EncodeText(csAuthor)); - m_pDocument->SetChangeMark(); - return TRUE; - } + if (vp.IsGetting()) { + vp << pDictionary->GetUnicodeText("CreationDate"); + } else { + if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) + return FALSE; + + CFX_WideString csCreationDate; + vp >> csCreationDate; + pDictionary->SetAtString("CreationDate", PDF_EncodeText(csCreationDate)); + m_pDocument->SetChangeMark(); + } + return TRUE; } -FX_BOOL Document::info(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); - if (!pDictionary)return FALSE; - - CFX_WideString cwAuthor = pDictionary->GetUnicodeText("Author"); - CFX_WideString cwTitle = pDictionary->GetUnicodeText("Title"); - CFX_WideString cwSubject = pDictionary->GetUnicodeText("Subject"); - CFX_WideString cwKeywords = pDictionary->GetUnicodeText("Keywords"); - CFX_WideString cwCreator = pDictionary->GetUnicodeText("Creator"); - CFX_WideString cwProducer = pDictionary->GetUnicodeText("Producer"); - CFX_WideString cwCreationDate = pDictionary->GetUnicodeText("CreationDate"); - CFX_WideString cwModDate = pDictionary->GetUnicodeText("ModDate"); - CFX_WideString cwTrapped = pDictionary->GetUnicodeText("Trapped"); - - v8::Isolate* isolate = GetIsolate(cc); - if (vp.IsGetting()) - { - CJS_Context* pContext = (CJS_Context *)cc; - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - - JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, -1); - - JS_PutObjectString(isolate, pObj, L"Author", cwAuthor.c_str()); - JS_PutObjectString(isolate, pObj, L"Title", cwTitle.c_str()); - JS_PutObjectString(isolate, pObj, L"Subject", cwSubject.c_str()); - JS_PutObjectString(isolate, pObj, L"Keywords", cwKeywords.c_str()); - JS_PutObjectString(isolate, pObj, L"Creator", cwCreator.c_str()); - JS_PutObjectString(isolate, pObj, L"Producer", cwProducer.c_str()); - JS_PutObjectString(isolate, pObj, L"CreationDate", cwCreationDate.c_str()); - JS_PutObjectString(isolate, pObj, L"ModDate", cwModDate.c_str()); - JS_PutObjectString(isolate, pObj, L"Trapped", cwTrapped.c_str()); - -// It's to be compatible to non-standard info dictionary. - FX_POSITION pos = pDictionary->GetStartPos(); - while(pos) - { - CFX_ByteString bsKey; - CPDF_Object* pValueObj = pDictionary->GetNextElement(pos, bsKey); - CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey, bsKey.GetLength()); - if((pValueObj->GetType()==PDFOBJ_STRING) || (pValueObj->GetType()==PDFOBJ_NAME) ) - JS_PutObjectString(isolate, pObj, wsKey.c_str(), pValueObj->GetUnicodeText().c_str()); - if(pValueObj->GetType()==PDFOBJ_NUMBER) - JS_PutObjectNumber(isolate,pObj, wsKey.c_str(), (float)pValueObj->GetNumber()); - if(pValueObj->GetType()==PDFOBJ_BOOLEAN) - JS_PutObjectBoolean(isolate,pObj, wsKey.c_str(), (bool)pValueObj->GetInteger()); - } - - vp << pObj; - return TRUE; - } - else - { - return TRUE; - } -} - -FX_BOOL Document::creationDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); - if (!pDictionary) - return FALSE; +FX_BOOL Document::creator(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CPDF_Dictionary* pDictionary = + m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); + if (!pDictionary) + return FALSE; - if (vp.IsGetting()) - { - vp << pDictionary->GetUnicodeText("CreationDate"); - } - else - { - if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) - return FALSE; - - CFX_WideString csCreationDate; - vp >> csCreationDate; - pDictionary->SetAtString("CreationDate", PDF_EncodeText(csCreationDate)); - m_pDocument->SetChangeMark(); - } - return TRUE; + if (vp.IsGetting()) { + vp << pDictionary->GetUnicodeText("Creator"); + } else { + if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) + return FALSE; + + CFX_WideString csCreator; + vp >> csCreator; + pDictionary->SetAtString("Creator", PDF_EncodeText(csCreator)); + m_pDocument->SetChangeMark(); + } + return TRUE; } -FX_BOOL Document::creator(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); - if (!pDictionary) - return FALSE; - - if (vp.IsGetting()) - { - vp << pDictionary->GetUnicodeText("Creator"); - } - else - { - if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) - return FALSE; - - CFX_WideString csCreator; - vp >> csCreator; - pDictionary->SetAtString("Creator", PDF_EncodeText(csCreator)); - m_pDocument->SetChangeMark(); +FX_BOOL Document::delay(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsGetting()) { + vp << m_bDelay; + } else { + if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) + return FALSE; + + vp >> m_bDelay; + if (m_bDelay) { + for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++) + delete m_DelayData.GetAt(i); + + m_DelayData.RemoveAll(); + } else { + for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++) { + if (CJS_DelayData* pData = m_DelayData.GetAt(i)) { + Field::DoDelay(m_pDocument, pData); + delete m_DelayData.GetAt(i); + } + } + m_DelayData.RemoveAll(); } - return TRUE; -} - -FX_BOOL Document::delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsGetting()) - { - vp << m_bDelay; - } - else - { - if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) - return FALSE; - - vp >> m_bDelay; - if (m_bDelay) - { - for (int i=0,sz=m_DelayData.GetSize(); iGetDocument()->GetPDFDoc()->GetInfo(); - if (!pDictionary) - return FALSE; +FX_BOOL Document::keywords(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CPDF_Dictionary* pDictionary = + m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); + if (!pDictionary) + return FALSE; - if (vp.IsGetting()) - { - vp << pDictionary->GetUnicodeText("Keywords"); - } - else - { - if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) - return FALSE; - - CFX_WideString csKeywords; - vp >> csKeywords; - pDictionary->SetAtString("Keywords", PDF_EncodeText(csKeywords)); - m_pDocument->SetChangeMark(); - } - return TRUE; + if (vp.IsGetting()) { + vp << pDictionary->GetUnicodeText("Keywords"); + } else { + if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) + return FALSE; + + CFX_WideString csKeywords; + vp >> csKeywords; + pDictionary->SetAtString("Keywords", PDF_EncodeText(csKeywords)); + m_pDocument->SetChangeMark(); + } + return TRUE; } -FX_BOOL Document::modDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); - if (!pDictionary) - return FALSE; +FX_BOOL Document::modDate(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CPDF_Dictionary* pDictionary = + m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); + if (!pDictionary) + return FALSE; - if (vp.IsGetting()) - { - vp << pDictionary->GetUnicodeText("ModDate"); - } - else - { - if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) - return FALSE; - - CFX_WideString csmodDate; - vp >> csmodDate; - pDictionary->SetAtString("ModDate", PDF_EncodeText(csmodDate)); - m_pDocument->SetChangeMark(); - } - return TRUE; + if (vp.IsGetting()) { + vp << pDictionary->GetUnicodeText("ModDate"); + } else { + if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) + return FALSE; + + CFX_WideString csmodDate; + vp >> csmodDate; + pDictionary->SetAtString("ModDate", PDF_EncodeText(csmodDate)); + m_pDocument->SetChangeMark(); + } + return TRUE; } -FX_BOOL Document::producer(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); - if (!pDictionary) - return FALSE; +FX_BOOL Document::producer(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CPDF_Dictionary* pDictionary = + m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); + if (!pDictionary) + return FALSE; - if (vp.IsGetting()) - { - vp << pDictionary->GetUnicodeText("Producer"); - } - else - { - if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) - return FALSE; - - CFX_WideString csproducer; - vp >> csproducer; - pDictionary->SetAtString("Producer", PDF_EncodeText(csproducer)); - m_pDocument->SetChangeMark(); - } - return TRUE; + if (vp.IsGetting()) { + vp << pDictionary->GetUnicodeText("Producer"); + } else { + if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) + return FALSE; + + CFX_WideString csproducer; + vp >> csproducer; + pDictionary->SetAtString("Producer", PDF_EncodeText(csproducer)); + m_pDocument->SetChangeMark(); + } + return TRUE; } -FX_BOOL Document::subject(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); - if (!pDictionary) - return FALSE; +FX_BOOL Document::subject(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CPDF_Dictionary* pDictionary = + m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); + if (!pDictionary) + return FALSE; - if (vp.IsGetting()) - { - vp << pDictionary->GetUnicodeText("Subject"); - } - else - { - if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) - return FALSE; - - CFX_WideString cssubject; - vp >> cssubject; - pDictionary->SetAtString("Subject", PDF_EncodeText(cssubject)); - m_pDocument->SetChangeMark(); - } - return TRUE; + if (vp.IsGetting()) { + vp << pDictionary->GetUnicodeText("Subject"); + } else { + if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) + return FALSE; + + CFX_WideString cssubject; + vp >> cssubject; + pDictionary->SetAtString("Subject", PDF_EncodeText(cssubject)); + m_pDocument->SetChangeMark(); + } + return TRUE; } -FX_BOOL Document::title(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (m_pDocument == NULL || m_pDocument->GetDocument() == NULL) - return FALSE; +FX_BOOL Document::title(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (m_pDocument == NULL || m_pDocument->GetDocument() == NULL) + return FALSE; - CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); - if (!pDictionary) - return FALSE; + CPDF_Dictionary* pDictionary = + m_pDocument->GetDocument()->GetPDFDoc()->GetInfo(); + if (!pDictionary) + return FALSE; - if (vp.IsGetting()) - { - vp << pDictionary->GetUnicodeText("Title"); - } - else - { - if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) - return FALSE; - - CFX_WideString cstitle; - vp >> cstitle; - pDictionary->SetAtString("Title", PDF_EncodeText(cstitle)); - m_pDocument->SetChangeMark(); - } - return TRUE; + if (vp.IsGetting()) { + vp << pDictionary->GetUnicodeText("Title"); + } else { + if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) + return FALSE; + + CFX_WideString cstitle; + vp >> cstitle; + pDictionary->SetAtString("Title", PDF_EncodeText(cstitle)); + m_pDocument->SetChangeMark(); + } + return TRUE; } -FX_BOOL Document::numPages(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsSetting()) { - CJS_Context* pContext = static_cast(cc); - sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); - return FALSE; - } - vp << m_pDocument->GetPageCount(); - return TRUE; +FX_BOOL Document::numPages(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsSetting()) { + CJS_Context* pContext = static_cast(cc); + sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); + return FALSE; + } + vp << m_pDocument->GetPageCount(); + return TRUE; } -FX_BOOL Document::external(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - //In Chrome case,should always return true. - if (vp.IsGetting()) { - vp << true; - } - return TRUE; +FX_BOOL Document::external(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + // In Chrome case,should always return true. + if (vp.IsGetting()) { + vp << true; + } + return TRUE; } -FX_BOOL Document::filesize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsSetting()) { - CJS_Context* pContext = static_cast(cc); - sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); - return FALSE; - } - vp << 0; - return TRUE; +FX_BOOL Document::filesize(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsSetting()) { + CJS_Context* pContext = static_cast(cc); + sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); + return FALSE; + } + vp << 0; + return TRUE; } -FX_BOOL Document::mouseX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::mouseX(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::mouseY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::mouseY(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::baseURL(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsGetting()) - { - vp << m_cwBaseURL; - } - else - { - vp >> m_cwBaseURL; - } - return TRUE; +FX_BOOL Document::baseURL(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsGetting()) { + vp << m_cwBaseURL; + } else { + vp >> m_cwBaseURL; + } + return TRUE; } -FX_BOOL Document::calculate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Document::calculate(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - if (vp.IsGetting()) - { - if (pInterForm->IsCalculateEnabled()) - vp << true; - else - vp << false; - } + if (vp.IsGetting()) { + if (pInterForm->IsCalculateEnabled()) + vp << true; else - { - bool bCalculate; - vp >> bCalculate; + vp << false; + } else { + bool bCalculate; + vp >> bCalculate; - pInterForm->EnableCalculate(bCalculate); - } + pInterForm->EnableCalculate(bCalculate); + } - return TRUE; + return TRUE; } -FX_BOOL Document::documentFileName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsSetting()) { - CJS_Context* pContext = static_cast(cc); - sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); - return FALSE; - } - CFX_WideString wsFilePath = m_pDocument->GetPath(); - int32_t i = wsFilePath.GetLength() - 1; - for ( ; i >= 0; i-- ) - { - if ( wsFilePath.GetAt( i ) == L'\\' || wsFilePath.GetAt( i ) == L'/' ) - break; - } - if ( i >= 0 && i < wsFilePath.GetLength() - 1 ) - { - vp << ( wsFilePath.GetBuffer( wsFilePath.GetLength() ) + i + 1 ); - }else{ - vp << L""; - } - return TRUE; +FX_BOOL Document::documentFileName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsSetting()) { + CJS_Context* pContext = static_cast(cc); + sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); + return FALSE; + } + CFX_WideString wsFilePath = m_pDocument->GetPath(); + int32_t i = wsFilePath.GetLength() - 1; + for (; i >= 0; i--) { + if (wsFilePath.GetAt(i) == L'\\' || wsFilePath.GetAt(i) == L'/') + break; + } + if (i >= 0 && i < wsFilePath.GetLength() - 1) { + vp << (wsFilePath.GetBuffer(wsFilePath.GetLength()) + i + 1); + } else { + vp << L""; + } + return TRUE; } -CFX_WideString Document::ReversalStr(CFX_WideString cbFrom) -{ - size_t iLength = cbFrom.GetLength(); - pdfium::base::CheckedNumeric iSize = sizeof(wchar_t); - iSize *= (iLength + 1); - wchar_t* pResult = (wchar_t*)malloc(iSize.ValueOrDie()); - wchar_t* pFrom = (wchar_t*)cbFrom.GetBuffer(iLength); - - for (size_t i = 0; i < iLength; i++) - { - pResult[i] = *(pFrom + iLength - i - 1); - } - pResult[iLength] = L'\0'; - - cbFrom.ReleaseBuffer(); - CFX_WideString cbRet = CFX_WideString(pResult); - free(pResult); - pResult = NULL; - return cbRet; -} - -CFX_WideString Document::CutString(CFX_WideString cbFrom) -{ - size_t iLength = cbFrom.GetLength(); - pdfium::base::CheckedNumeric iSize = sizeof(wchar_t); - iSize *= (iLength + 1); - wchar_t* pResult = (wchar_t*)malloc(iSize.ValueOrDie()); - wchar_t* pFrom = (wchar_t*)cbFrom.GetBuffer(iLength); - - for (int i = 0; i < iLength; i++) - { - if (pFrom[i] == L'\\' || pFrom[i] == L'/') - { - pResult[i] = L'\0'; - break; - } - pResult[i] = pFrom[i]; - } - pResult[iLength] = L'\0'; +CFX_WideString Document::ReversalStr(CFX_WideString cbFrom) { + size_t iLength = cbFrom.GetLength(); + pdfium::base::CheckedNumeric iSize = sizeof(wchar_t); + iSize *= (iLength + 1); + wchar_t* pResult = (wchar_t*)malloc(iSize.ValueOrDie()); + wchar_t* pFrom = (wchar_t*)cbFrom.GetBuffer(iLength); + + for (size_t i = 0; i < iLength; i++) { + pResult[i] = *(pFrom + iLength - i - 1); + } + pResult[iLength] = L'\0'; + + cbFrom.ReleaseBuffer(); + CFX_WideString cbRet = CFX_WideString(pResult); + free(pResult); + pResult = NULL; + return cbRet; +} + +CFX_WideString Document::CutString(CFX_WideString cbFrom) { + size_t iLength = cbFrom.GetLength(); + pdfium::base::CheckedNumeric iSize = sizeof(wchar_t); + iSize *= (iLength + 1); + wchar_t* pResult = (wchar_t*)malloc(iSize.ValueOrDie()); + wchar_t* pFrom = (wchar_t*)cbFrom.GetBuffer(iLength); + + for (int i = 0; i < iLength; i++) { + if (pFrom[i] == L'\\' || pFrom[i] == L'/') { + pResult[i] = L'\0'; + break; + } + pResult[i] = pFrom[i]; + } + pResult[iLength] = L'\0'; + + cbFrom.ReleaseBuffer(); + CFX_WideString cbRet = CFX_WideString(pResult); + free(pResult); + pResult = NULL; + return cbRet; +} + +FX_BOOL Document::path(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsSetting()) { + CJS_Context* pContext = static_cast(cc); + sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); + return FALSE; + } + vp << app::SysPathToPDFPath(m_pDocument->GetPath()); + return TRUE; +} - cbFrom.ReleaseBuffer(); - CFX_WideString cbRet = CFX_WideString(pResult); - free(pResult); - pResult = NULL; - return cbRet; +FX_BOOL Document::pageWindowRect(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::path(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsSetting()) { - CJS_Context* pContext = static_cast(cc); - sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); - return FALSE; - } - vp << app::SysPathToPDFPath(m_pDocument->GetPath()); - return TRUE; +FX_BOOL Document::layout(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::pageWindowRect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::addLink(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::layout(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::closeDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + return TRUE; } -FX_BOOL Document::addLink(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::getPageBox(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::closeDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - return TRUE; +FX_BOOL Document::getAnnot(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::getPageBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::getAnnots(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + vRet.SetNull(); + return TRUE; } -FX_BOOL Document::getAnnot(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::getAnnot3D(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + vRet.SetNull(); + return TRUE; } -FX_BOOL Document::getAnnots(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - vRet.SetNull(); - return TRUE; +FX_BOOL Document::getAnnots3D(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + vRet = VT_undefined; + return TRUE; } -FX_BOOL Document::getAnnot3D(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - vRet.SetNull(); - return TRUE; +FX_BOOL Document::getOCGs(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::getAnnots3D(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - vRet = VT_undefined; - return TRUE; +FX_BOOL Document::getLinks(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::getOCGs(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +bool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect) { + return (rect.left <= LinkRect.left && rect.top <= LinkRect.top && + rect.right >= LinkRect.right && rect.bottom >= LinkRect.bottom); } -FX_BOOL Document::getLinks(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +void IconTree::InsertIconElement(IconElement* pNewIcon) { + if (!pNewIcon) + return; + + if (m_pHead == NULL && m_pEnd == NULL) { + m_pHead = m_pEnd = pNewIcon; + m_iLength++; + } else { + m_pEnd->NextIcon = pNewIcon; + m_pEnd = pNewIcon; + m_iLength++; + } } -bool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect) -{ - return (rect.left <= LinkRect.left && - rect.top <= LinkRect.top && - rect.right >= LinkRect.right && - rect.bottom >= LinkRect.bottom); +void IconTree::DeleteIconTree() { + if (!m_pHead || !m_pEnd) + return; + + IconElement* pTemp = NULL; + while (m_pEnd != m_pHead) { + pTemp = m_pHead; + m_pHead = m_pHead->NextIcon; + delete pTemp; + } + + delete m_pEnd; + m_pHead = NULL; + m_pEnd = NULL; } -void IconTree::InsertIconElement(IconElement* pNewIcon) -{ - if (!pNewIcon)return; +int IconTree::GetLength() { + return m_iLength; +} - if (m_pHead == NULL && m_pEnd == NULL) - { - m_pHead = m_pEnd = pNewIcon; - m_iLength++; - } - else - { - m_pEnd->NextIcon = pNewIcon; - m_pEnd = pNewIcon; - m_iLength++; +IconElement* IconTree::operator[](int iIndex) { + if (iIndex >= 0 && iIndex <= m_iLength) { + IconElement* pTemp = m_pHead; + for (int i = 0; i < iIndex; i++) { + pTemp = pTemp->NextIcon; } + return pTemp; + } + return NULL; } -void IconTree::DeleteIconTree() -{ - if (!m_pHead || !m_pEnd)return; +void IconTree::DeleteIconElement(CFX_WideString swIconName) { + IconElement* pTemp = m_pHead; + int iLoopCount = m_iLength; + for (int i = 0; i < iLoopCount - 1; i++) { + if (pTemp == m_pEnd) + break; - IconElement* pTemp = NULL; - while(m_pEnd != m_pHead) - { - pTemp = m_pHead; - m_pHead = m_pHead->NextIcon; - delete pTemp; + if (m_pHead->IconName == swIconName) { + m_pHead = m_pHead->NextIcon; + delete pTemp; + m_iLength--; + pTemp = m_pHead; } + if (pTemp->NextIcon->IconName == swIconName) { + if (pTemp->NextIcon == m_pEnd) { + m_pEnd = pTemp; + delete pTemp->NextIcon; + m_iLength--; + pTemp->NextIcon = NULL; + } else { + IconElement* pElement = pTemp->NextIcon; + pTemp->NextIcon = pTemp->NextIcon->NextIcon; + delete pElement; + m_iLength--; + pElement = NULL; + } - delete m_pEnd; - m_pHead = NULL; - m_pEnd = NULL; -} + continue; + } -int IconTree::GetLength() -{ - return m_iLength; + pTemp = pTemp->NextIcon; + } } -IconElement* IconTree::operator [](int iIndex) -{ - if (iIndex >= 0 && iIndex <= m_iLength) - { - IconElement* pTemp = m_pHead; - for (int i = 0; i < iIndex; i++) - { - pTemp = pTemp->NextIcon; - } - return pTemp; - } - return NULL; -} - -void IconTree::DeleteIconElement(CFX_WideString swIconName) -{ - IconElement* pTemp = m_pHead; - int iLoopCount = m_iLength; - for (int i = 0; i < iLoopCount - 1; i++) - { - if (pTemp == m_pEnd) - break; - - if (m_pHead->IconName == swIconName) - { - m_pHead = m_pHead->NextIcon; - delete pTemp; - m_iLength--; - pTemp = m_pHead; - } - if (pTemp->NextIcon->IconName == swIconName) - { - if (pTemp->NextIcon == m_pEnd) - { - m_pEnd = pTemp; - delete pTemp->NextIcon; - m_iLength--; - pTemp->NextIcon = NULL; - } - else - { - IconElement* pElement = pTemp->NextIcon; - pTemp->NextIcon = pTemp->NextIcon->NextIcon; - delete pElement; - m_iLength--; - pElement = NULL; - } - - continue; - } - - pTemp = pTemp->NextIcon; - } -} - -FX_BOOL Document::addIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - if (params.size() != 2) { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } +FX_BOOL Document::addIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + if (params.size() != 2) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - CFX_WideString swIconName = params[0].ToCFXWideString(); - JSFXObject pJSIcon = params[1].ToV8Object(); + CFX_WideString swIconName = params[0].ToCFXWideString(); + JSFXObject pJSIcon = params[1].ToV8Object(); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - if (JS_GetObjDefnID(pJSIcon) != JS_GetObjDefnID(*pRuntime, L"Icon")) { - sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR); - return FALSE; - } + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + if (JS_GetObjDefnID(pJSIcon) != JS_GetObjDefnID(*pRuntime, L"Icon")) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR); + return FALSE; + } - CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject()->GetEmbedObject(); - if (!pEmbedObj) { - sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR); - return FALSE; - } + CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject()->GetEmbedObject(); + if (!pEmbedObj) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR); + return FALSE; + } - Icon* pIcon = (Icon*)pEmbedObj; - if (!m_pIconTree) - m_pIconTree = new IconTree(); + Icon* pIcon = (Icon*)pEmbedObj; + if (!m_pIconTree) + m_pIconTree = new IconTree(); - IconElement* pNewIcon = new IconElement(); - pNewIcon->IconName = swIconName; - pNewIcon->NextIcon = NULL; - pNewIcon->IconStream = pIcon; - m_pIconTree->InsertIconElement(pNewIcon); - return TRUE; + IconElement* pNewIcon = new IconElement(); + pNewIcon->IconName = swIconName; + pNewIcon->NextIcon = NULL; + pNewIcon->IconStream = pIcon; + m_pIconTree->InsertIconElement(pNewIcon); + return TRUE; } -FX_BOOL Document::icons(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsSetting()) { - CJS_Context* pContext = static_cast(cc); - sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); - return FALSE; - } +FX_BOOL Document::icons(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsSetting()) { + CJS_Context* pContext = static_cast(cc); + sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY); + return FALSE; + } - if (!m_pIconTree) - { - vp.SetNull(); - return TRUE; - } + if (!m_pIconTree) { + vp.SetNull(); + return TRUE; + } - CJS_Array Icons(m_isolate); - IconElement* pIconElement = NULL; - int iIconTreeLength = m_pIconTree->GetLength(); + CJS_Array Icons(m_isolate); + IconElement* pIconElement = NULL; + int iIconTreeLength = m_pIconTree->GetLength(); - CJS_Context* pContext = (CJS_Context *)cc; - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + CJS_Context* pContext = (CJS_Context*)cc; + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - for (int i = 0; i < iIconTreeLength; i++) - { - pIconElement = (*m_pIconTree)[i]; + for (int i = 0; i < iIconTreeLength; i++) { + pIconElement = (*m_pIconTree)[i]; - JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Icon")); - if (pObj.IsEmpty()) return FALSE; + JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, + JS_GetObjDefnID(*pRuntime, L"Icon")); + if (pObj.IsEmpty()) + return FALSE; - CJS_Icon * pJS_Icon = (CJS_Icon *)JS_GetPrivate(pObj); - if (!pJS_Icon) return FALSE; + CJS_Icon* pJS_Icon = (CJS_Icon*)JS_GetPrivate(pObj); + if (!pJS_Icon) + return FALSE; - Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject(); - if (!pIcon)return FALSE; + Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject(); + if (!pIcon) + return FALSE; - pIcon->SetStream(pIconElement->IconStream->GetStream()); - pIcon->SetIconName(pIconElement->IconName); - Icons.SetElement(i, CJS_Value(m_isolate,pJS_Icon)); - } + pIcon->SetStream(pIconElement->IconStream->GetStream()); + pIcon->SetIconName(pIconElement->IconName); + Icons.SetElement(i, CJS_Value(m_isolate, pJS_Icon)); + } - vp << Icons; - return TRUE; + vp << Icons; + return TRUE; } -FX_BOOL Document::getIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context *)cc; - if (params.size() != 1) { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } +FX_BOOL Document::getIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + if (params.size() != 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - if(!m_pIconTree) - return FALSE; - CFX_WideString swIconName = params[0].ToCFXWideString(); - int iIconCounts = m_pIconTree->GetLength(); + if (!m_pIconTree) + return FALSE; + CFX_WideString swIconName = params[0].ToCFXWideString(); + int iIconCounts = m_pIconTree->GetLength(); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - for (int i = 0; i < iIconCounts; i++) - { - if ((*m_pIconTree)[i]->IconName == swIconName) - { - Icon* pRetIcon = (*m_pIconTree)[i]->IconStream; + for (int i = 0; i < iIconCounts; i++) { + if ((*m_pIconTree)[i]->IconName == swIconName) { + Icon* pRetIcon = (*m_pIconTree)[i]->IconStream; - JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Icon")); - if (pObj.IsEmpty()) return FALSE; + JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, + JS_GetObjDefnID(*pRuntime, L"Icon")); + if (pObj.IsEmpty()) + return FALSE; - CJS_Icon * pJS_Icon = (CJS_Icon *)JS_GetPrivate(pObj); - if (!pJS_Icon) return FALSE; + CJS_Icon* pJS_Icon = (CJS_Icon*)JS_GetPrivate(pObj); + if (!pJS_Icon) + return FALSE; - Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject(); - if (!pIcon)return FALSE; + Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject(); + if (!pIcon) + return FALSE; - pIcon->SetIconName(swIconName); - pIcon->SetStream(pRetIcon->GetStream()); - vRet = pJS_Icon; - return TRUE; - } + pIcon->SetIconName(swIconName); + pIcon->SetStream(pRetIcon->GetStream()); + vRet = pJS_Icon; + return TRUE; } + } - return FALSE; + return FALSE; } -FX_BOOL Document::removeIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context *)cc; - if (params.size() != 1) { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } +FX_BOOL Document::removeIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + if (params.size() != 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - if(!m_pIconTree) - return FALSE; - CFX_WideString swIconName = params[0].ToCFXWideString(); - return TRUE; + if (!m_pIconTree) + return FALSE; + CFX_WideString swIconName = params[0].ToCFXWideString(); + return TRUE; } -FX_BOOL Document::createDataObject(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL Document::createDataObject(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Unsafe, not implemented. return TRUE; } -FX_BOOL Document::media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::media(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::calculateNow(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Document::calculateNow(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) || + if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) || m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) || - m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) return FALSE; + m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) + return FALSE; - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); - pInterForm->OnCalculate(); - return TRUE; + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); + pInterForm->OnCalculate(); + return TRUE; } -FX_BOOL Document::Collab(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::Collab(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::getPageNthWord(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Document::getPageNthWord(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE; - - int nPageNo = params.GetSize() > 0 ? params[0].ToInt() : 0; - int nWordNo = params.GetSize() > 1 ? params[1].ToInt() : 0; - bool bStrip = params.GetSize() > 2 ? params[2].ToBool() : true; + if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) + return FALSE; - CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc(); - if (!pDocument) - return FALSE; + int nPageNo = params.GetSize() > 0 ? params[0].ToInt() : 0; + int nWordNo = params.GetSize() > 1 ? params[1].ToInt() : 0; + bool bStrip = params.GetSize() > 2 ? params[2].ToBool() : true; - CJS_Context* pContext = static_cast(cc); - if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR); - return FALSE; - } + CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc(); + if (!pDocument) + return FALSE; - CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo); - if (!pPageDict) return FALSE; + CJS_Context* pContext = static_cast(cc); + if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR); + return FALSE; + } - CPDF_Page page; - page.Load(pDocument, pPageDict); - page.StartParse(); - page.ParseContent(); + CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo); + if (!pPageDict) + return FALSE; - FX_POSITION pos = page.GetFirstObjectPosition(); + CPDF_Page page; + page.Load(pDocument, pPageDict); + page.StartParse(); + page.ParseContent(); - int nWords = 0; + FX_POSITION pos = page.GetFirstObjectPosition(); - CFX_WideString swRet; + int nWords = 0; - while (pos) - { - if (CPDF_PageObject* pPageObj = page.GetNextObject(pos)) - { - if (pPageObj->m_Type == PDFPAGE_TEXT) - { - int nObjWords = CountWords((CPDF_TextObject*)pPageObj); + CFX_WideString swRet; - if (nWords + nObjWords >= nWordNo) - { - swRet = GetObjWordStr((CPDF_TextObject*)pPageObj, nWordNo - nWords); - break; - } + while (pos) { + if (CPDF_PageObject* pPageObj = page.GetNextObject(pos)) { + if (pPageObj->m_Type == PDFPAGE_TEXT) { + int nObjWords = CountWords((CPDF_TextObject*)pPageObj); - nWords += nObjWords; - } + if (nWords + nObjWords >= nWordNo) { + swRet = GetObjWordStr((CPDF_TextObject*)pPageObj, nWordNo - nWords); + break; } - } - if (bStrip) - { - swRet.TrimLeft(); - swRet.TrimRight(); + nWords += nObjWords; + } } + } - vRet = swRet.c_str(); - return TRUE; -} + if (bStrip) { + swRet.TrimLeft(); + swRet.TrimRight(); + } -FX_BOOL Document::getPageNthWordQuads(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); + vRet = swRet.c_str(); + return TRUE; +} - if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE; +FX_BOOL Document::getPageNthWordQuads(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE; + + return FALSE; } -FX_BOOL Document::getPageNumWords(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Document::getPageNumWords(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE; + if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) + return FALSE; - int nPageNo = params.GetSize() > 0 ? params[0].ToInt() : 0; - CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc(); - CJS_Context* pContext = static_cast(cc); - if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR); - return FALSE; - } + int nPageNo = params.GetSize() > 0 ? params[0].ToInt() : 0; + CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc(); + CJS_Context* pContext = static_cast(cc); + if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR); + return FALSE; + } - CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo); - if (!pPageDict) return FALSE; + CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo); + if (!pPageDict) + return FALSE; - CPDF_Page page; - page.Load(pDocument, pPageDict); - page.StartParse(); - page.ParseContent(); + CPDF_Page page; + page.Load(pDocument, pPageDict); + page.StartParse(); + page.ParseContent(); - FX_POSITION pos = page.GetFirstObjectPosition(); + FX_POSITION pos = page.GetFirstObjectPosition(); - int nWords = 0; + int nWords = 0; - while (pos) - { - if (CPDF_PageObject* pPageObj = page.GetNextObject(pos)) - { - if (pPageObj->m_Type == PDFPAGE_TEXT) - { - CPDF_TextObject* pTextObj = (CPDF_TextObject*)pPageObj; - nWords += CountWords(pTextObj); - } - } + while (pos) { + if (CPDF_PageObject* pPageObj = page.GetNextObject(pos)) { + if (pPageObj->m_Type == PDFPAGE_TEXT) { + CPDF_TextObject* pTextObj = (CPDF_TextObject*)pPageObj; + nWords += CountWords(pTextObj); + } } + } - vRet = nWords; + vRet = nWords; - return TRUE; + return TRUE; } -FX_BOOL Document::getPrintParams(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"PrintParamsObj")); +FX_BOOL Document::getPrintParams(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + JSFXObject pRetObj = JS_NewFxDynamicObj( + *pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"PrintParamsObj")); - // Not implemented yet. + // Not implemented yet. - vRet = pRetObj; - return TRUE; + vRet = pRetObj; + return TRUE; } -#define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF) +#define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF) -int Document::CountWords(CPDF_TextObject* pTextObj) -{ - if (!pTextObj) return 0; +int Document::CountWords(CPDF_TextObject* pTextObj) { + if (!pTextObj) + return 0; - int nWords = 0; + int nWords = 0; - CPDF_Font* pFont = pTextObj->GetFont(); - if (!pFont) return 0; + CPDF_Font* pFont = pTextObj->GetFont(); + if (!pFont) + return 0; - FX_BOOL bIsLatin = FALSE; + FX_BOOL bIsLatin = FALSE; - for (int i=0, sz=pTextObj->CountChars(); iCountChars(); i < sz; i++) { + FX_DWORD charcode = -1; + FX_FLOAT kerning; - pTextObj->GetCharInfo(i, charcode, kerning); - CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode); + pTextObj->GetCharInfo(i, charcode, kerning); + CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode); - FX_WORD unicode = 0; - if (swUnicode.GetLength() > 0) - unicode = swUnicode[0]; + FX_WORD unicode = 0; + if (swUnicode.GetLength() > 0) + unicode = swUnicode[0]; - if (ISLATINWORD(unicode) && bIsLatin) - continue; + if (ISLATINWORD(unicode) && bIsLatin) + continue; - bIsLatin = ISLATINWORD(unicode); - if (unicode != 0x20) - nWords++; - } + bIsLatin = ISLATINWORD(unicode); + if (unicode != 0x20) + nWords++; + } - return nWords; + return nWords; } -CFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex) -{ - ASSERT(pTextObj != NULL); +CFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj, + int nWordIndex) { + ASSERT(pTextObj != NULL); - CFX_WideString swRet; + CFX_WideString swRet; - CPDF_Font* pFont = pTextObj->GetFont(); - if (!pFont) return L""; + CPDF_Font* pFont = pTextObj->GetFont(); + if (!pFont) + return L""; - int nWords = 0; - FX_BOOL bIsLatin = FALSE; + int nWords = 0; + FX_BOOL bIsLatin = FALSE; - for (int i=0, sz=pTextObj->CountChars(); iCountChars(); i < sz; i++) { + FX_DWORD charcode = -1; + FX_FLOAT kerning; - pTextObj->GetCharInfo(i, charcode, kerning); - CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode); + pTextObj->GetCharInfo(i, charcode, kerning); + CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode); - FX_WORD unicode = 0; - if (swUnicode.GetLength() > 0) - unicode = swUnicode[0]; + FX_WORD unicode = 0; + if (swUnicode.GetLength() > 0) + unicode = swUnicode[0]; - if (ISLATINWORD(unicode) && bIsLatin) - { - } - else - { - bIsLatin = ISLATINWORD(unicode); - if (unicode != 0x20) - nWords++; - } - - if (nWords-1 == nWordIndex) - swRet += unicode; + if (ISLATINWORD(unicode) && bIsLatin) { + } else { + bIsLatin = ISLATINWORD(unicode); + if (unicode != 0x20) + nWords++; } - return swRet; -} + if (nWords - 1 == nWordIndex) + swRet += unicode; + } -FX_BOOL Document::zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ + return swRet; +} - return TRUE; +FX_BOOL Document::zoom(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; } /** @@ -1794,133 +1803,133 @@ FX_BOOL Document::zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sEr (refW, ReflowWidth) */ -FX_BOOL Document::zoomType(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Document::zoomType(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Document::deletePages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = GetIsolate(cc); - ASSERT(m_pDocument != NULL); +FX_BOOL Document::deletePages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = GetIsolate(cc); + ASSERT(m_pDocument != NULL); - if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) || - m_pDocument->GetPermissions(FPDFPERM_ASSEMBLE))) return FALSE; - - int iSize = params.size(); - - int nStart = 0; - int nEnd = 0; + if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) || + m_pDocument->GetPermissions(FPDFPERM_ASSEMBLE))) + return FALSE; - if (iSize < 1) - { - } - else if (iSize == 1) - { - if (params[0].GetType() == VT_object) - { - JSObject pObj = params[0].ToV8Object(); - v8::Local pValue = JS_GetObjectElement(isolate, pObj, L"nStart"); - nStart = CJS_Value(m_isolate, pValue, GET_VALUE_TYPE(pValue)).ToInt(); + int iSize = params.size(); - pValue = JS_GetObjectElement(isolate, pObj, L"nEnd"); - nEnd = CJS_Value(m_isolate, pValue, GET_VALUE_TYPE(pValue)).ToInt(); - } - else - { - nStart = params[0].ToInt(); - } - } - else - { - nStart = params[0].ToInt(); - nEnd = params[1].ToInt(); - } + int nStart = 0; + int nEnd = 0; - int nTotal = m_pDocument->GetPageCount(); + if (iSize < 1) { + } else if (iSize == 1) { + if (params[0].GetType() == VT_object) { + JSObject pObj = params[0].ToV8Object(); + v8::Local pValue = + JS_GetObjectElement(isolate, pObj, L"nStart"); + nStart = CJS_Value(m_isolate, pValue, GET_VALUE_TYPE(pValue)).ToInt(); - if (nStart < 0) nStart = 0; - if (nStart >= nTotal) nStart = nTotal - 1; + pValue = JS_GetObjectElement(isolate, pObj, L"nEnd"); + nEnd = CJS_Value(m_isolate, pValue, GET_VALUE_TYPE(pValue)).ToInt(); + } else { + nStart = params[0].ToInt(); + } + } else { + nStart = params[0].ToInt(); + nEnd = params[1].ToInt(); + } - if (nEnd < 0) nEnd = 0; - if (nEnd >= nTotal) nEnd = nTotal - 1; + int nTotal = m_pDocument->GetPageCount(); - if (nEnd < nStart) nEnd = nStart; + if (nStart < 0) + nStart = 0; + if (nStart >= nTotal) + nStart = nTotal - 1; + if (nEnd < 0) + nEnd = 0; + if (nEnd >= nTotal) + nEnd = nTotal - 1; + if (nEnd < nStart) + nEnd = nStart; - return TRUE; + return TRUE; } -FX_BOOL Document::extractPages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL Document::extractPages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Unsafe, not supported. return TRUE; } -FX_BOOL Document::insertPages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL Document::insertPages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Unsafe, not supported. return TRUE; } -FX_BOOL Document::replacePages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL Document::replacePages(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Unsafe, not supported. return TRUE; } -FX_BOOL Document::getURL(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL Document::getURL(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Unsafe, not supported. return TRUE; } -void Document::AddDelayData(CJS_DelayData* pData) -{ - m_DelayData.Add(pData); +void Document::AddDelayData(CJS_DelayData* pData) { + m_DelayData.Add(pData); } -void Document::DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex) -{ - CFX_DWordArray DelArray; +void Document::DoFieldDelay(const CFX_WideString& sFieldName, + int nControlIndex) { + CFX_DWordArray DelArray; - for (int i=0,sz=m_DelayData.GetSize(); isFieldName == sFieldName && pData->nControlIndex == nControlIndex) - { - Field::DoDelay(m_pDocument, pData); - delete pData; - m_DelayData.SetAt(i, NULL); - DelArray.Add(i); - } - } - } + for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++) { + if (CJS_DelayData* pData = m_DelayData.GetAt(i)) { + if (pData->sFieldName == sFieldName && + pData->nControlIndex == nControlIndex) { + Field::DoDelay(m_pDocument, pData); + delete pData; + m_DelayData.SetAt(i, NULL); + DelArray.Add(i); + } + } + } - for (int j=DelArray.GetSize()-1; j>=0; j--) - { - m_DelayData.RemoveAt(DelArray[j]); - } + for (int j = DelArray.GetSize() - 1; j >= 0; j--) { + m_DelayData.RemoveAt(DelArray[j]); + } } -void Document::AddDelayAnnotData(CJS_AnnotObj *pData) -{ - m_DelayAnnotData.Add(pData); +void Document::AddDelayAnnotData(CJS_AnnotObj* pData) { + m_DelayAnnotData.Add(pData); } -void Document::DoAnnotDelay() -{ - CFX_DWordArray DelArray; +void Document::DoAnnotDelay() { + CFX_DWordArray DelArray; - for (int j=DelArray.GetSize()-1; j>=0; j--) - { - m_DelayData.RemoveAt(DelArray[j]); - } + for (int j = DelArray.GetSize() - 1; j >= 0; j--) { + m_DelayData.RemoveAt(DelArray[j]); + } } -CJS_Document* Document::GetCJSDoc() const -{ - return static_cast(m_pJSObject); +CJS_Document* Document::GetCJSDoc() const { + return static_cast(m_pJSObject); } diff --git a/fpdfsdk/src/javascript/Field.cpp b/fpdfsdk/src/javascript/Field.cpp index 3857e8098b..e3c44e953f 100644 --- a/fpdfsdk/src/javascript/Field.cpp +++ b/fpdfsdk/src/javascript/Field.cpp @@ -18,3448 +18,3335 @@ #include "../../include/javascript/PublicMethods.h" #include "../../include/javascript/Icon.h" - /* ---------------------- Field ---------------------- */ BEGIN_JS_STATIC_CONST(CJS_Field) END_JS_STATIC_CONST() BEGIN_JS_STATIC_PROP(CJS_Field) - JS_STATIC_PROP_ENTRY(alignment) - JS_STATIC_PROP_ENTRY(borderStyle) - JS_STATIC_PROP_ENTRY(buttonAlignX) - JS_STATIC_PROP_ENTRY(buttonAlignY) - JS_STATIC_PROP_ENTRY(buttonFitBounds) - JS_STATIC_PROP_ENTRY(buttonPosition) - JS_STATIC_PROP_ENTRY(buttonScaleHow) - JS_STATIC_PROP_ENTRY(buttonScaleWhen) - JS_STATIC_PROP_ENTRY(calcOrderIndex) - JS_STATIC_PROP_ENTRY(charLimit) - JS_STATIC_PROP_ENTRY(comb) - JS_STATIC_PROP_ENTRY(commitOnSelChange) - JS_STATIC_PROP_ENTRY(currentValueIndices) - JS_STATIC_PROP_ENTRY(defaultStyle) - JS_STATIC_PROP_ENTRY(defaultValue) - JS_STATIC_PROP_ENTRY(doNotScroll) - JS_STATIC_PROP_ENTRY(doNotSpellCheck) - JS_STATIC_PROP_ENTRY(delay) - JS_STATIC_PROP_ENTRY(display) - JS_STATIC_PROP_ENTRY(doc) - JS_STATIC_PROP_ENTRY(editable) - JS_STATIC_PROP_ENTRY(exportValues) - JS_STATIC_PROP_ENTRY(hidden) - JS_STATIC_PROP_ENTRY(fileSelect) - JS_STATIC_PROP_ENTRY(fillColor) - JS_STATIC_PROP_ENTRY(lineWidth) - JS_STATIC_PROP_ENTRY(highlight) - JS_STATIC_PROP_ENTRY(multiline) - JS_STATIC_PROP_ENTRY(multipleSelection) - JS_STATIC_PROP_ENTRY(name) - JS_STATIC_PROP_ENTRY(numItems) - JS_STATIC_PROP_ENTRY(page) - JS_STATIC_PROP_ENTRY(password) - JS_STATIC_PROP_ENTRY(print) - JS_STATIC_PROP_ENTRY(radiosInUnison) - JS_STATIC_PROP_ENTRY(readonly) - JS_STATIC_PROP_ENTRY(rect) - JS_STATIC_PROP_ENTRY(required) - JS_STATIC_PROP_ENTRY(richText) - JS_STATIC_PROP_ENTRY(richValue) - JS_STATIC_PROP_ENTRY(rotation) - JS_STATIC_PROP_ENTRY(strokeColor) - JS_STATIC_PROP_ENTRY(style) - JS_STATIC_PROP_ENTRY(submitName) - JS_STATIC_PROP_ENTRY(textColor) - JS_STATIC_PROP_ENTRY(textFont) - JS_STATIC_PROP_ENTRY(textSize) - JS_STATIC_PROP_ENTRY(type) - JS_STATIC_PROP_ENTRY(userName) - JS_STATIC_PROP_ENTRY(value) - JS_STATIC_PROP_ENTRY(valueAsString) - JS_STATIC_PROP_ENTRY(source) +JS_STATIC_PROP_ENTRY(alignment) +JS_STATIC_PROP_ENTRY(borderStyle) +JS_STATIC_PROP_ENTRY(buttonAlignX) +JS_STATIC_PROP_ENTRY(buttonAlignY) +JS_STATIC_PROP_ENTRY(buttonFitBounds) +JS_STATIC_PROP_ENTRY(buttonPosition) +JS_STATIC_PROP_ENTRY(buttonScaleHow) +JS_STATIC_PROP_ENTRY(buttonScaleWhen) +JS_STATIC_PROP_ENTRY(calcOrderIndex) +JS_STATIC_PROP_ENTRY(charLimit) +JS_STATIC_PROP_ENTRY(comb) +JS_STATIC_PROP_ENTRY(commitOnSelChange) +JS_STATIC_PROP_ENTRY(currentValueIndices) +JS_STATIC_PROP_ENTRY(defaultStyle) +JS_STATIC_PROP_ENTRY(defaultValue) +JS_STATIC_PROP_ENTRY(doNotScroll) +JS_STATIC_PROP_ENTRY(doNotSpellCheck) +JS_STATIC_PROP_ENTRY(delay) +JS_STATIC_PROP_ENTRY(display) +JS_STATIC_PROP_ENTRY(doc) +JS_STATIC_PROP_ENTRY(editable) +JS_STATIC_PROP_ENTRY(exportValues) +JS_STATIC_PROP_ENTRY(hidden) +JS_STATIC_PROP_ENTRY(fileSelect) +JS_STATIC_PROP_ENTRY(fillColor) +JS_STATIC_PROP_ENTRY(lineWidth) +JS_STATIC_PROP_ENTRY(highlight) +JS_STATIC_PROP_ENTRY(multiline) +JS_STATIC_PROP_ENTRY(multipleSelection) +JS_STATIC_PROP_ENTRY(name) +JS_STATIC_PROP_ENTRY(numItems) +JS_STATIC_PROP_ENTRY(page) +JS_STATIC_PROP_ENTRY(password) +JS_STATIC_PROP_ENTRY(print) +JS_STATIC_PROP_ENTRY(radiosInUnison) +JS_STATIC_PROP_ENTRY(readonly) +JS_STATIC_PROP_ENTRY(rect) +JS_STATIC_PROP_ENTRY(required) +JS_STATIC_PROP_ENTRY(richText) +JS_STATIC_PROP_ENTRY(richValue) +JS_STATIC_PROP_ENTRY(rotation) +JS_STATIC_PROP_ENTRY(strokeColor) +JS_STATIC_PROP_ENTRY(style) +JS_STATIC_PROP_ENTRY(submitName) +JS_STATIC_PROP_ENTRY(textColor) +JS_STATIC_PROP_ENTRY(textFont) +JS_STATIC_PROP_ENTRY(textSize) +JS_STATIC_PROP_ENTRY(type) +JS_STATIC_PROP_ENTRY(userName) +JS_STATIC_PROP_ENTRY(value) +JS_STATIC_PROP_ENTRY(valueAsString) +JS_STATIC_PROP_ENTRY(source) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_Field) - JS_STATIC_METHOD_ENTRY(browseForFileToSubmit) - JS_STATIC_METHOD_ENTRY(buttonGetCaption) - JS_STATIC_METHOD_ENTRY(buttonGetIcon) - JS_STATIC_METHOD_ENTRY(buttonImportIcon) - JS_STATIC_METHOD_ENTRY(buttonSetCaption) - JS_STATIC_METHOD_ENTRY(buttonSetIcon) - JS_STATIC_METHOD_ENTRY(checkThisBox) - JS_STATIC_METHOD_ENTRY(clearItems) - JS_STATIC_METHOD_ENTRY(defaultIsChecked) - JS_STATIC_METHOD_ENTRY(deleteItemAt) - JS_STATIC_METHOD_ENTRY(getArray ) - JS_STATIC_METHOD_ENTRY(getItemAt) - JS_STATIC_METHOD_ENTRY(getLock) - JS_STATIC_METHOD_ENTRY(insertItemAt) - JS_STATIC_METHOD_ENTRY(isBoxChecked) - JS_STATIC_METHOD_ENTRY(isDefaultChecked) - JS_STATIC_METHOD_ENTRY(setAction) - JS_STATIC_METHOD_ENTRY(setFocus) - JS_STATIC_METHOD_ENTRY(setItems) - JS_STATIC_METHOD_ENTRY(setLock) - JS_STATIC_METHOD_ENTRY(signatureGetModifications) - JS_STATIC_METHOD_ENTRY(signatureGetSeedValue) - JS_STATIC_METHOD_ENTRY(signatureInfo) - JS_STATIC_METHOD_ENTRY(signatureSetSeedValue) - JS_STATIC_METHOD_ENTRY(signatureSign) - JS_STATIC_METHOD_ENTRY(signatureValidate) +JS_STATIC_METHOD_ENTRY(browseForFileToSubmit) +JS_STATIC_METHOD_ENTRY(buttonGetCaption) +JS_STATIC_METHOD_ENTRY(buttonGetIcon) +JS_STATIC_METHOD_ENTRY(buttonImportIcon) +JS_STATIC_METHOD_ENTRY(buttonSetCaption) +JS_STATIC_METHOD_ENTRY(buttonSetIcon) +JS_STATIC_METHOD_ENTRY(checkThisBox) +JS_STATIC_METHOD_ENTRY(clearItems) +JS_STATIC_METHOD_ENTRY(defaultIsChecked) +JS_STATIC_METHOD_ENTRY(deleteItemAt) +JS_STATIC_METHOD_ENTRY(getArray) +JS_STATIC_METHOD_ENTRY(getItemAt) +JS_STATIC_METHOD_ENTRY(getLock) +JS_STATIC_METHOD_ENTRY(insertItemAt) +JS_STATIC_METHOD_ENTRY(isBoxChecked) +JS_STATIC_METHOD_ENTRY(isDefaultChecked) +JS_STATIC_METHOD_ENTRY(setAction) +JS_STATIC_METHOD_ENTRY(setFocus) +JS_STATIC_METHOD_ENTRY(setItems) +JS_STATIC_METHOD_ENTRY(setLock) +JS_STATIC_METHOD_ENTRY(signatureGetModifications) +JS_STATIC_METHOD_ENTRY(signatureGetSeedValue) +JS_STATIC_METHOD_ENTRY(signatureInfo) +JS_STATIC_METHOD_ENTRY(signatureSetSeedValue) +JS_STATIC_METHOD_ENTRY(signatureSign) +JS_STATIC_METHOD_ENTRY(signatureValidate) END_JS_STATIC_METHOD() IMPLEMENT_JS_CLASS(CJS_Field, Field) -FX_BOOL CJS_Field::InitInstance(IFXJS_Context* cc) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); +FX_BOOL CJS_Field::InitInstance(IFXJS_Context* cc) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - Field* pField = (Field*)GetEmbedObject(); - ASSERT(pField != NULL); + Field* pField = (Field*)GetEmbedObject(); + ASSERT(pField != NULL); - pField->SetIsolate(pContext->GetJSRuntime()->GetIsolate()); + pField->SetIsolate(pContext->GetJSRuntime()->GetIsolate()); - return TRUE; + return TRUE; }; -Field::Field(CJS_Object* pJSObject): CJS_EmbedObj(pJSObject), - m_pJSDoc(NULL), - m_pDocument(NULL), - m_nFormControlIndex(-1), - m_bCanSet(FALSE), - m_bDelay(FALSE), - m_isolate(NULL) -{ -} +Field::Field(CJS_Object* pJSObject) + : CJS_EmbedObj(pJSObject), + m_pJSDoc(NULL), + m_pDocument(NULL), + m_nFormControlIndex(-1), + m_bCanSet(FALSE), + m_bDelay(FALSE), + m_isolate(NULL) {} -Field::~Field() -{ -} +Field::~Field() {} -//note: iControlNo = -1, means not a widget. -void Field::ParseFieldName(const std::wstring &strFieldNameParsed,std::wstring &strFieldName,int & iControlNo) -{ - int iStart = strFieldNameParsed.find_last_of(L'.'); - if (iStart == -1) - { - strFieldName = strFieldNameParsed; - iControlNo = -1; - return; +// note: iControlNo = -1, means not a widget. +void Field::ParseFieldName(const std::wstring& strFieldNameParsed, + std::wstring& strFieldName, + int& iControlNo) { + int iStart = strFieldNameParsed.find_last_of(L'.'); + if (iStart == -1) { + strFieldName = strFieldNameParsed; + iControlNo = -1; + return; + } + std::wstring suffixal = strFieldNameParsed.substr(iStart + 1); + iControlNo = FXSYS_wtoi(suffixal.c_str()); + if (iControlNo == 0) { + int iStart; + while ((iStart = suffixal.find_last_of(L" ")) != -1) { + suffixal.erase(iStart, 1); } - std::wstring suffixal = strFieldNameParsed.substr(iStart+1); - iControlNo = FXSYS_wtoi(suffixal.c_str()); - if (iControlNo == 0) - { - int iStart; - while((iStart = suffixal.find_last_of(L" ")) != -1) - { - suffixal.erase(iStart,1); - } - - if (suffixal.compare(L"0") != 0) - { - strFieldName = strFieldNameParsed; - iControlNo = -1; - return; - } + if (suffixal.compare(L"0") != 0) { + strFieldName = strFieldNameParsed; + iControlNo = -1; + return; } - strFieldName = strFieldNameParsed.substr(0,iStart); + } + strFieldName = strFieldNameParsed.substr(0, iStart); } -FX_BOOL Field::AttachField(Document* pDocument, const CFX_WideString& csFieldName) -{ - ASSERT(pDocument != NULL); - m_pJSDoc = pDocument; +FX_BOOL Field::AttachField(Document* pDocument, + const CFX_WideString& csFieldName) { + ASSERT(pDocument != NULL); + m_pJSDoc = pDocument; - m_pDocument = pDocument->GetReaderDoc(); - ASSERT(m_pDocument != NULL); + m_pDocument = pDocument->GetReaderDoc(); + ASSERT(m_pDocument != NULL); - m_bCanSet = m_pDocument->GetPermissions(FPDFPERM_FILL_FORM) || - m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) || - m_pDocument->GetPermissions(FPDFPERM_MODIFY); + m_bCanSet = m_pDocument->GetPermissions(FPDFPERM_FILL_FORM) || + m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) || + m_pDocument->GetPermissions(FPDFPERM_MODIFY); - CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm(); - ASSERT(pRDInterForm != NULL); + CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm(); + ASSERT(pRDInterForm != NULL); - CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm(); + ASSERT(pInterForm != NULL); - CFX_WideString swFieldNameTemp = csFieldName; - swFieldNameTemp.Replace(L"..", L"."); + CFX_WideString swFieldNameTemp = csFieldName; + swFieldNameTemp.Replace(L"..", L"."); - if (pInterForm->CountFields(swFieldNameTemp) <= 0) - { - std::wstring strFieldName; - int iControlNo = -1; - ParseFieldName(swFieldNameTemp.c_str(), strFieldName, iControlNo); - if (iControlNo == -1) return FALSE; + if (pInterForm->CountFields(swFieldNameTemp) <= 0) { + std::wstring strFieldName; + int iControlNo = -1; + ParseFieldName(swFieldNameTemp.c_str(), strFieldName, iControlNo); + if (iControlNo == -1) + return FALSE; - m_FieldName = strFieldName.c_str(); - m_nFormControlIndex = iControlNo; - return TRUE; - } + m_FieldName = strFieldName.c_str(); + m_nFormControlIndex = iControlNo; + return TRUE; + } - m_FieldName = swFieldNameTemp; - m_nFormControlIndex = -1; + m_FieldName = swFieldNameTemp; + m_nFormControlIndex = -1; - return TRUE; + return TRUE; } -void Field::GetFormFields(CPDFSDK_Document* pDocument, const CFX_WideString& csFieldName, CFX_PtrArray& FieldArray) -{ - ASSERT(pDocument != NULL); +void Field::GetFormFields(CPDFSDK_Document* pDocument, + const CFX_WideString& csFieldName, + CFX_PtrArray& FieldArray) { + ASSERT(pDocument != NULL); - CPDFSDK_InterForm* pReaderInterForm = pDocument->GetInterForm(); - ASSERT(pReaderInterForm != NULL); + CPDFSDK_InterForm* pReaderInterForm = pDocument->GetInterForm(); + ASSERT(pReaderInterForm != NULL); - CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm(); + ASSERT(pInterForm != NULL); - ASSERT(FieldArray.GetSize() == 0); + ASSERT(FieldArray.GetSize() == 0); - for (int i=0,sz=pInterForm->CountFields(csFieldName); iGetField(i, csFieldName)) - FieldArray.Add((void*)pFormField); - } + for (int i = 0, sz = pInterForm->CountFields(csFieldName); i < sz; i++) { + if (CPDF_FormField* pFormField = pInterForm->GetField(i, csFieldName)) + FieldArray.Add((void*)pFormField); + } } -void Field::GetFormFields(const CFX_WideString& csFieldName, CFX_PtrArray& FieldArray) -{ - ASSERT(m_pDocument != NULL); +void Field::GetFormFields(const CFX_WideString& csFieldName, + CFX_PtrArray& FieldArray) { + ASSERT(m_pDocument != NULL); - Field::GetFormFields(m_pDocument, csFieldName, FieldArray); + Field::GetFormFields(m_pDocument, csFieldName, FieldArray); } -void Field::UpdateFormField(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, - FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh) -{ - ASSERT(pDocument != NULL); - ASSERT(pFormField != NULL); +void Field::UpdateFormField(CPDFSDK_Document* pDocument, + CPDF_FormField* pFormField, + FX_BOOL bChangeMark, + FX_BOOL bResetAP, + FX_BOOL bRefresh) { + ASSERT(pDocument != NULL); + ASSERT(pFormField != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - CFX_PtrArray widgets; - pInterForm->GetWidgets(pFormField, widgets); + CFX_PtrArray widgets; + pInterForm->GetWidgets(pFormField, widgets); - if (bResetAP) - { - int nFieldType = pFormField->GetFieldType(); - if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD) - { - for (int i=0,sz=widgets.GetSize(); iOnFormat(bFormated); - if (bFormated) - pWidget->ResetAppearance(sValue.c_str(), FALSE); - else - pWidget->ResetAppearance(NULL, FALSE); - } - } + if (bResetAP) { + int nFieldType = pFormField->GetFieldType(); + if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD) { + for (int i = 0, sz = widgets.GetSize(); i < sz; i++) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i); + ASSERT(pWidget != NULL); + + FX_BOOL bFormated = FALSE; + CFX_WideString sValue = pWidget->OnFormat(bFormated); + if (bFormated) + pWidget->ResetAppearance(sValue.c_str(), FALSE); else - { - for (int i=0,sz=widgets.GetSize(); iResetAppearance(NULL, FALSE); + } + } else { + for (int i = 0, sz = widgets.GetSize(); i < sz; i++) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i); + ASSERT(pWidget != NULL); - pWidget->ResetAppearance(NULL, FALSE); - } - } + pWidget->ResetAppearance(NULL, FALSE); + } } + } - if (bRefresh) - { - for (int i=0,sz=widgets.GetSize(); iGetInterForm(); - CPDFSDK_Document* pDoc = pInterForm->GetDocument(); -// CReader_Page* pPage = pWidget->GetPage(); - ASSERT(pDoc != NULL); - pDoc->UpdateAllViews(NULL, pWidget); - } + if (bRefresh) { + for (int i = 0, sz = widgets.GetSize(); i < sz; i++) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i); + ASSERT(pWidget != NULL); + + CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm(); + CPDFSDK_Document* pDoc = pInterForm->GetDocument(); + // CReader_Page* pPage = pWidget->GetPage(); + ASSERT(pDoc != NULL); + pDoc->UpdateAllViews(NULL, pWidget); } + } - if (bChangeMark) - pDocument->SetChangeMark(); + if (bChangeMark) + pDocument->SetChangeMark(); } -void Field::UpdateFormControl(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl, - FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh) -{ - ASSERT(pDocument != NULL); - ASSERT(pFormControl != NULL); +void Field::UpdateFormControl(CPDFSDK_Document* pDocument, + CPDF_FormControl* pFormControl, + FX_BOOL bChangeMark, + FX_BOOL bResetAP, + FX_BOOL bRefresh) { + ASSERT(pDocument != NULL); + ASSERT(pFormControl != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); - - CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl); + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - if (pWidget) - { - if (bResetAP) - { - int nFieldType = pWidget->GetFieldType(); - if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD) - { - FX_BOOL bFormated = FALSE; - CFX_WideString sValue = pWidget->OnFormat(bFormated); - if (bFormated) - pWidget->ResetAppearance(sValue.c_str(), FALSE); - else - pWidget->ResetAppearance(NULL, FALSE); - } - else - { - pWidget->ResetAppearance(NULL, FALSE); - } - } + CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl); - if (bRefresh) - { - CPDFSDK_InterForm * pInterForm = pWidget->GetInterForm(); - CPDFSDK_Document* pDoc = pInterForm->GetDocument(); - ASSERT(pDoc != NULL); - pDoc->UpdateAllViews(NULL, pWidget); - } + if (pWidget) { + if (bResetAP) { + int nFieldType = pWidget->GetFieldType(); + if (nFieldType == FIELDTYPE_COMBOBOX || + nFieldType == FIELDTYPE_TEXTFIELD) { + FX_BOOL bFormated = FALSE; + CFX_WideString sValue = pWidget->OnFormat(bFormated); + if (bFormated) + pWidget->ResetAppearance(sValue.c_str(), FALSE); + else + pWidget->ResetAppearance(NULL, FALSE); + } else { + pWidget->ResetAppearance(NULL, FALSE); + } + } + if (bRefresh) { + CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm(); + CPDFSDK_Document* pDoc = pInterForm->GetDocument(); + ASSERT(pDoc != NULL); + pDoc->UpdateAllViews(NULL, pWidget); } + } - if (bChangeMark) - pDocument->SetChangeMark(); + if (bChangeMark) + pDocument->SetChangeMark(); } -CPDFSDK_Widget* Field::GetWidget(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl) -{ - ASSERT(pDocument != NULL); - ASSERT(pFormControl != NULL); +CPDFSDK_Widget* Field::GetWidget(CPDFSDK_Document* pDocument, + CPDF_FormControl* pFormControl) { + ASSERT(pDocument != NULL); + ASSERT(pFormControl != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - return pInterForm->GetWidget(pFormControl); + return pInterForm->GetWidget(pFormControl); } -FX_BOOL Field::ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel) -{ - ASSERT(pFormField != NULL); +FX_BOOL Field::ValueIsOccur(CPDF_FormField* pFormField, + CFX_WideString csOptLabel) { + ASSERT(pFormField != NULL); - for (int i=0,sz = pFormField->CountOptions(); i < sz; i++) - { - if (csOptLabel.Compare(pFormField->GetOptionLabel(i)) == 0) - return TRUE; - } + for (int i = 0, sz = pFormField->CountOptions(); i < sz; i++) { + if (csOptLabel.Compare(pFormField->GetOptionLabel(i)) == 0) + return TRUE; + } - return FALSE; + return FALSE; } -CPDF_FormControl* Field::GetSmartFieldControl(CPDF_FormField* pFormField) -{ - if (!pFormField->CountControls() || m_nFormControlIndex >= pFormField->CountControls()) - return NULL; +CPDF_FormControl* Field::GetSmartFieldControl(CPDF_FormField* pFormField) { + if (!pFormField->CountControls() || + m_nFormControlIndex >= pFormField->CountControls()) + return NULL; - if (m_nFormControlIndex < 0) - return pFormField->GetControl(0); + if (m_nFormControlIndex < 0) + return pFormField->GetControl(0); - return pFormField->GetControl(m_nFormControlIndex); + return pFormField->GetControl(m_nFormControlIndex); } -/* ---------------------------------------- property ---------------------------------------- */ +/* ---------------------------------------- property + * ---------------------------------------- */ -FX_BOOL Field::alignment(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::alignment(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - CFX_ByteString alignStr; - vp >> alignStr; + CFX_ByteString alignStr; + vp >> alignStr; - if (m_bDelay) - { - AddDelay_String(FP_ALIGNMENT, alignStr); - } - else - { - Field::SetAlignment(m_pDocument, m_FieldName, m_nFormControlIndex, alignStr); - } + if (m_bDelay) { + AddDelay_String(FP_ALIGNMENT, alignStr); + } else { + Field::SetAlignment(m_pDocument, m_FieldName, m_nFormControlIndex, + alignStr); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) + return FALSE; - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - switch (pFormControl->GetControlAlignment()) - { - case 1: - vp << L"center"; - break; - case 0: - vp << L"left"; - break; - case 2: - vp << L"right"; - break; - default: - vp << L""; - } + switch (pFormControl->GetControlAlignment()) { + case 1: + vp << L"center"; + break; + case 0: + vp << L"left"; + break; + case 2: + vp << L"right"; + break; + default: + vp << L""; } + } - return TRUE; + return TRUE; } -void Field::SetAlignment(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, - const CFX_ByteString& string) -{ - //Not supported. +void Field::SetAlignment(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string) { + // Not supported. } -FX_BOOL Field::borderStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::borderStyle(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - CFX_ByteString strType = ""; - vp >> strType; + CFX_ByteString strType = ""; + vp >> strType; - if (m_bDelay) - { - AddDelay_String(FP_BORDERSTYLE, strType); - } - else - { - Field::SetBorderStyle(m_pDocument, m_FieldName, m_nFormControlIndex, strType); - } + if (m_bDelay) { + AddDelay_String(FP_BORDERSTYLE, strType); + } else { + Field::SetBorderStyle(m_pDocument, m_FieldName, m_nFormControlIndex, + strType); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; - - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - if (!pFormField) return FALSE; - - CPDFSDK_Widget* pWidget = GetWidget(m_pDocument, GetSmartFieldControl(pFormField)); - if (!pWidget) return FALSE; - - int nBorderstyle = pWidget->GetBorderStyle(); - - switch (nBorderstyle) - { - case BBS_SOLID: - vp << L"solid"; - break; - case BBS_DASH: - vp << L"dashed"; - break; - case BBS_BEVELED: - vp << L"beveled"; - break; - case BBS_INSET: - vp << L"inset"; - break; - case BBS_UNDERLINE: - vp << L"underline"; - break; - default: - vp << L""; - break; - } + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; + + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + if (!pFormField) + return FALSE; + + CPDFSDK_Widget* pWidget = + GetWidget(m_pDocument, GetSmartFieldControl(pFormField)); + if (!pWidget) + return FALSE; + + int nBorderstyle = pWidget->GetBorderStyle(); + + switch (nBorderstyle) { + case BBS_SOLID: + vp << L"solid"; + break; + case BBS_DASH: + vp << L"dashed"; + break; + case BBS_BEVELED: + vp << L"beveled"; + break; + case BBS_INSET: + vp << L"inset"; + break; + case BBS_UNDERLINE: + vp << L"underline"; + break; + default: + vp << L""; + break; } + } - return TRUE; + return TRUE; } -void Field::SetBorderStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, - const CFX_ByteString& string) -{ - ASSERT(pDocument != NULL); +void Field::SetBorderStyle(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string) { + ASSERT(pDocument != NULL); - int nBorderStyle = 0; + int nBorderStyle = 0; - if (string == "solid") - nBorderStyle = BBS_SOLID; - else if (string == "beveled") - nBorderStyle = BBS_BEVELED; - else if (string == "dashed") - nBorderStyle = BBS_DASH; - else if (string == "inset") - nBorderStyle = BBS_INSET; - else if (string == "underline") - nBorderStyle = BBS_UNDERLINE; - else return; + if (string == "solid") + nBorderStyle = BBS_SOLID; + else if (string == "beveled") + nBorderStyle = BBS_BEVELED; + else if (string == "dashed") + nBorderStyle = BBS_DASH; + else if (string == "inset") + nBorderStyle = BBS_INSET; + else if (string == "underline") + nBorderStyle = BBS_UNDERLINE; + else + return; - CFX_PtrArray FieldArray; - GetFormFields(pDocument, swFieldName, FieldArray); + CFX_PtrArray FieldArray; + GetFormFields(pDocument, swFieldName, FieldArray); - for (int i=0,isz=FieldArray.GetSize(); iCountControls(); jGetControl(j))) - { - if (pWidget->GetBorderStyle() != nBorderStyle) - { - pWidget->SetBorderStyle(nBorderStyle); - bSet = TRUE; - } - } - } - if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE); - } - else - { - if(nControlIndex >= pFormField->CountControls()) return; - if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex)) - { - if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormControl)) - { - if (pWidget->GetBorderStyle() != nBorderStyle) - { - pWidget->SetBorderStyle(nBorderStyle); - UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE); - } - } - } + for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i); + ASSERT(pFormField != NULL); + + if (nControlIndex < 0) { + FX_BOOL bSet = FALSE; + for (int j = 0, jsz = pFormField->CountControls(); j < jsz; j++) { + if (CPDFSDK_Widget* pWidget = + GetWidget(pDocument, pFormField->GetControl(j))) { + if (pWidget->GetBorderStyle() != nBorderStyle) { + pWidget->SetBorderStyle(nBorderStyle); + bSet = TRUE; + } + } + } + if (bSet) + UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE); + } else { + if (nControlIndex >= pFormField->CountControls()) + return; + if (CPDF_FormControl* pFormControl = + pFormField->GetControl(nControlIndex)) { + if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormControl)) { + if (pWidget->GetBorderStyle() != nBorderStyle) { + pWidget->SetBorderStyle(nBorderStyle); + UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE); + } } + } } + } } -FX_BOOL Field::buttonAlignX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::buttonAlignX(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - int nVP; - vp >> nVP; + int nVP; + vp >> nVP; - if (m_bDelay) - { - AddDelay_Int(FP_BUTTONALIGNX, nVP); - } - else - { - Field::SetButtonAlignX(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); - } + if (m_bDelay) { + AddDelay_Int(FP_BUTTONALIGNX, nVP); + } else { + Field::SetButtonAlignX(m_pDocument, m_FieldName, m_nFormControlIndex, + nVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) + return FALSE; - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - CPDF_IconFit IconFit = pFormControl->GetIconFit(); + CPDF_IconFit IconFit = pFormControl->GetIconFit(); - FX_FLOAT fLeft,fBottom; - IconFit.GetIconPosition(fLeft,fBottom); + FX_FLOAT fLeft, fBottom; + IconFit.GetIconPosition(fLeft, fBottom); - vp << (int32_t)fLeft; - } + vp << (int32_t)fLeft; + } - return TRUE; + return TRUE; } -void Field::SetButtonAlignX(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - //Not supported. +void Field::SetButtonAlignX(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + // Not supported. } -FX_BOOL Field::buttonAlignY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::buttonAlignY(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - int nVP; - vp >> nVP; + int nVP; + vp >> nVP; - if (m_bDelay) - { - AddDelay_Int(FP_BUTTONALIGNY, nVP); - } - else - { - Field::SetButtonAlignY(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); - } + if (m_bDelay) { + AddDelay_Int(FP_BUTTONALIGNY, nVP); + } else { + Field::SetButtonAlignY(m_pDocument, m_FieldName, m_nFormControlIndex, + nVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) + return FALSE; - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - CPDF_IconFit IconFit = pFormControl->GetIconFit(); + CPDF_IconFit IconFit = pFormControl->GetIconFit(); - FX_FLOAT fLeft,fBottom; - IconFit.GetIconPosition(fLeft,fBottom); + FX_FLOAT fLeft, fBottom; + IconFit.GetIconPosition(fLeft, fBottom); - vp << (int32_t)fBottom; - } + vp << (int32_t)fBottom; + } - return TRUE; + return TRUE; } -void Field::SetButtonAlignY(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - //Not supported. +void Field::SetButtonAlignY(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + // Not supported. } -FX_BOOL Field::buttonFitBounds(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::buttonFitBounds(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - if (m_bDelay) - { - AddDelay_Bool(FP_BUTTONFITBOUNDS, bVP); - } - else - { - Field::SetButtonFitBounds(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); - } + if (m_bDelay) { + AddDelay_Bool(FP_BUTTONFITBOUNDS, bVP); + } else { + Field::SetButtonFitBounds(m_pDocument, m_FieldName, m_nFormControlIndex, + bVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) + return FALSE; - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - CPDF_IconFit IconFit = pFormControl->GetIconFit(); - vp << IconFit.GetFittingBounds(); - } + CPDF_IconFit IconFit = pFormControl->GetIconFit(); + vp << IconFit.GetFittingBounds(); + } - return TRUE; + return TRUE; } -void Field::SetButtonFitBounds(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b) -{ - //Not supported. +void Field::SetButtonFitBounds(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b) { + // Not supported. } -FX_BOOL Field::buttonPosition(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::buttonPosition(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - int nVP; - vp >> nVP; + int nVP; + vp >> nVP; - if (m_bDelay) - { - AddDelay_Int(FP_BUTTONPOSITION, nVP); - } - else - { - Field::SetButtonPosition(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); - } + if (m_bDelay) { + AddDelay_Int(FP_BUTTONPOSITION, nVP); + } else { + Field::SetButtonPosition(m_pDocument, m_FieldName, m_nFormControlIndex, + nVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) + return FALSE; - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - vp << pFormControl->GetTextPosition(); - } - return TRUE; + vp << pFormControl->GetTextPosition(); + } + return TRUE; } -void Field::SetButtonPosition(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - //Not supported. +void Field::SetButtonPosition(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + // Not supported. } -FX_BOOL Field::buttonScaleHow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::buttonScaleHow(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - int nVP; - vp >> nVP; + int nVP; + vp >> nVP; - if (m_bDelay) - { - AddDelay_Int(FP_BUTTONSCALEHOW, nVP); - } - else - { - Field::SetButtonScaleHow(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); - } + if (m_bDelay) { + AddDelay_Int(FP_BUTTONSCALEHOW, nVP); + } else { + Field::SetButtonScaleHow(m_pDocument, m_FieldName, m_nFormControlIndex, + nVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) + return FALSE; - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - CPDF_IconFit IconFit = pFormControl->GetIconFit(); - if (IconFit.IsProportionalScale()) - vp << (int32_t)0; - else - vp << (int32_t)1; - } + CPDF_IconFit IconFit = pFormControl->GetIconFit(); + if (IconFit.IsProportionalScale()) + vp << (int32_t)0; + else + vp << (int32_t)1; + } - return TRUE; + return TRUE; } -void Field::SetButtonScaleHow(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - //Not supported. +void Field::SetButtonScaleHow(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + // Not supported. } -FX_BOOL Field::buttonScaleWhen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::buttonScaleWhen(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - int nVP; - vp >> nVP; + int nVP; + vp >> nVP; - if (m_bDelay) - { - AddDelay_Int(FP_BUTTONSCALEWHEN, nVP); - } - else - { - Field::SetButtonScaleWhen(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); - } + if (m_bDelay) { + AddDelay_Int(FP_BUTTONSCALEWHEN, nVP); + } else { + Field::SetButtonScaleWhen(m_pDocument, m_FieldName, m_nFormControlIndex, + nVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; - - CPDF_FormField* pFormField = (CPDF_FormField*) FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); - - if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) - return FALSE; - - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl) return FALSE; - - CPDF_IconFit IconFit = pFormControl->GetIconFit(); - int ScaleM = IconFit.GetScaleMethod(); - switch (ScaleM) - { - case CPDF_IconFit::Always : - vp << (int32_t) CPDF_IconFit::Always; - break; - case CPDF_IconFit::Bigger : - vp << (int32_t) CPDF_IconFit::Bigger; - break; - case CPDF_IconFit::Never : - vp << (int32_t) CPDF_IconFit::Never; - break; - case CPDF_IconFit::Smaller : - vp << (int32_t) CPDF_IconFit::Smaller; - break; - } + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; + + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); + + if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) + return FALSE; + + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; + + CPDF_IconFit IconFit = pFormControl->GetIconFit(); + int ScaleM = IconFit.GetScaleMethod(); + switch (ScaleM) { + case CPDF_IconFit::Always: + vp << (int32_t)CPDF_IconFit::Always; + break; + case CPDF_IconFit::Bigger: + vp << (int32_t)CPDF_IconFit::Bigger; + break; + case CPDF_IconFit::Never: + vp << (int32_t)CPDF_IconFit::Never; + break; + case CPDF_IconFit::Smaller: + vp << (int32_t)CPDF_IconFit::Smaller; + break; } + } - return TRUE; + return TRUE; } -void Field::SetButtonScaleWhen(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - //Not supported. +void Field::SetButtonScaleWhen(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + // Not supported. } -FX_BOOL Field::calcOrderIndex(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::calcOrderIndex(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - int nVP; - vp >> nVP; + int nVP; + vp >> nVP; - if (m_bDelay) - { - AddDelay_Int(FP_CALCORDERINDEX, nVP); - } - else - { - Field::SetCalcOrderIndex(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); - } + if (m_bDelay) { + AddDelay_Int(FP_CALCORDERINDEX, nVP); + } else { + Field::SetCalcOrderIndex(m_pDocument, m_FieldName, m_nFormControlIndex, + nVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && + pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) + return FALSE; - CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm(); - ASSERT(pRDInterForm != NULL); + CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm(); + ASSERT(pRDInterForm != NULL); - CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm(); + ASSERT(pInterForm != NULL); - vp << (int32_t)pInterForm->FindFieldInCalculationOrder(pFormField); - } + vp << (int32_t)pInterForm->FindFieldInCalculationOrder(pFormField); + } - return TRUE; + return TRUE; } -void Field::SetCalcOrderIndex(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - //Not supported. +void Field::SetCalcOrderIndex(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + // Not supported. } -FX_BOOL Field::charLimit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::charLimit(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - int nVP; - vp >> nVP; + int nVP; + vp >> nVP; - if (m_bDelay) - { - AddDelay_Int(FP_CHARLIMIT, nVP); - } - else - { - Field::SetCharLimit(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); - } + if (m_bDelay) { + AddDelay_Int(FP_CHARLIMIT, nVP); + } else { + Field::SetCharLimit(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) + return FALSE; - vp << (int32_t)pFormField->GetMaxLen(); - } - return TRUE; + vp << (int32_t)pFormField->GetMaxLen(); + } + return TRUE; } -void Field::SetCharLimit(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - //Not supported. +void Field::SetCharLimit(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + // Not supported. } -FX_BOOL Field::comb(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::comb(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - if (m_bDelay) - { - AddDelay_Bool(FP_COMB, bVP); - } - else - { - Field::SetComb(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); - } + if (m_bDelay) { + AddDelay_Bool(FP_COMB, bVP); + } else { + Field::SetComb(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) + return FALSE; - if (pFormField->GetFieldFlags() & FIELDFLAG_COMB) - vp << true; - else - vp << false; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_COMB) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -void Field::SetComb(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b) -{ - //Not supported. +void Field::SetComb(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b) { + // Not supported. } -FX_BOOL Field::commitOnSelChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::commitOnSelChange(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - if (m_bDelay) - { - AddDelay_Bool(FP_COMMITONSELCHANGE, bVP); - } - else - { - Field::SetCommitOnSelChange(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); - } + if (m_bDelay) { + AddDelay_Bool(FP_COMMITONSELCHANGE, bVP); + } else { + Field::SetCommitOnSelChange(m_pDocument, m_FieldName, m_nFormControlIndex, + bVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_LISTBOX) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && + pFormField->GetFieldType() != FIELDTYPE_LISTBOX) + return FALSE; - if (pFormField->GetFieldFlags() & FIELDFLAG_COMMITONSELCHANGE) - vp << true; - else - vp << false; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_COMMITONSELCHANGE) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -void Field::SetCommitOnSelChange(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b) -{ - //Not supported. +void Field::SetCommitOnSelChange(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b) { + // Not supported. } -FX_BOOL Field::currentValueIndices(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::currentValueIndices(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; - - CFX_DWordArray array; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - if (vp.GetType() == VT_number) - { - int iSelecting = 0; - vp >> iSelecting; - array.Add(iSelecting); - } - else if (vp.IsArrayObject()) - { - CJS_Array SelArray(m_isolate); - CJS_Value SelValue(m_isolate); - int iSelecting; - vp >> SelArray; - for (int i=0,sz=SelArray.GetLength(); iGetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_LISTBOX) - return FALSE; - - if (pFormField->CountSelectedItems() == 1) - vp << pFormField->GetSelectedIndex(0); - else if (pFormField->CountSelectedItems() > 1) - { - CJS_Array SelArray(m_isolate); - for (int i=0,sz=pFormField->CountSelectedItems(); iGetSelectedIndex(i))); - } - vp << SelArray; - } - else - vp << -1; + if (vp.GetType() == VT_number) { + int iSelecting = 0; + vp >> iSelecting; + array.Add(iSelecting); + } else if (vp.IsArrayObject()) { + CJS_Array SelArray(m_isolate); + CJS_Value SelValue(m_isolate); + int iSelecting; + vp >> SelArray; + for (int i = 0, sz = SelArray.GetLength(); i < sz; i++) { + SelArray.GetElement(i, SelValue); + iSelecting = SelValue.ToInt(); + array.Add(iSelecting); + } } - return TRUE; -} + if (m_bDelay) { + AddDelay_WordArray(FP_CURRENTVALUEINDICES, array); + } else { + Field::SetCurrentValueIndices(m_pDocument, m_FieldName, + m_nFormControlIndex, array); + } + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; -void Field::SetCurrentValueIndices(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, - const CFX_DWordArray& array) -{ - ASSERT(pDocument != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - CFX_PtrArray FieldArray; - GetFormFields(pDocument, swFieldName, FieldArray); + if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && + pFormField->GetFieldType() != FIELDTYPE_LISTBOX) + return FALSE; + + if (pFormField->CountSelectedItems() == 1) + vp << pFormField->GetSelectedIndex(0); + else if (pFormField->CountSelectedItems() > 1) { + CJS_Array SelArray(m_isolate); + for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) { + SelArray.SetElement( + i, CJS_Value(m_isolate, pFormField->GetSelectedIndex(i))); + } + vp << SelArray; + } else + vp << -1; + } + + return TRUE; +} + +void Field::SetCurrentValueIndices(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_DWordArray& array) { + ASSERT(pDocument != NULL); + + CFX_PtrArray FieldArray; + GetFormFields(pDocument, swFieldName, FieldArray); + + for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i); + ASSERT(pFormField != NULL); - for (int i=0,isz=FieldArray.GetSize(); iGetFieldType(); - if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_LISTBOX) - { - FX_DWORD dwFieldFlags = pFormField->GetFieldFlags(); - pFormField->ClearSelection(TRUE); - - for (int i=0,sz=array.GetSize(); i0 && !(dwFieldFlags & (1<<21))) - { - break; - } - - int iSelecting = (int32_t)array.GetAt(i); - if (iSelecting < pFormField->CountOptions() && !pFormField->IsItemSelected(iSelecting)) - pFormField->SetItemSelection(iSelecting, TRUE); + int nFieldType = pFormField->GetFieldType(); + if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_LISTBOX) { + FX_DWORD dwFieldFlags = pFormField->GetFieldFlags(); + pFormField->ClearSelection(TRUE); - } - UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE); + for (int i = 0, sz = array.GetSize(); i < sz; i++) { + if (i > 0 && !(dwFieldFlags & (1 << 21))) { + break; } + + int iSelecting = (int32_t)array.GetAt(i); + if (iSelecting < pFormField->CountOptions() && + !pFormField->IsItemSelected(iSelecting)) + pFormField->SetItemSelection(iSelecting, TRUE); + } + UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE); } + } } -FX_BOOL Field::defaultStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - // MQG sError = JSGetStringFromID(IDS_STRING_NOTSUPPORT); - return FALSE; +FX_BOOL Field::defaultStyle(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + // MQG sError = JSGetStringFromID(IDS_STRING_NOTSUPPORT); + return FALSE; - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - ; - } - else - { - ; - } - return TRUE; + ; + } else { + ; + } + return TRUE; } -void Field::SetDefaultStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex) -{ - //Not supported. +void Field::SetDefaultStyle(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex) { + // Not supported. } -FX_BOOL Field::defaultValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::defaultValue(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - CFX_WideString WideStr; - vp >> WideStr; + CFX_WideString WideStr; + vp >> WideStr; - if (m_bDelay) - { - AddDelay_WideString(FP_DEFAULTVALUE, WideStr); - } - else - { - Field::SetDefaultValue(m_pDocument, m_FieldName, m_nFormControlIndex, WideStr); - } + if (m_bDelay) { + AddDelay_WideString(FP_DEFAULTVALUE, WideStr); + } else { + Field::SetDefaultValue(m_pDocument, m_FieldName, m_nFormControlIndex, + WideStr); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON || - pFormField->GetFieldType() == FIELDTYPE_SIGNATURE) - return FALSE; + if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON || + pFormField->GetFieldType() == FIELDTYPE_SIGNATURE) + return FALSE; - vp << pFormField->GetDefaultValue(); - } - return TRUE; + vp << pFormField->GetDefaultValue(); + } + return TRUE; } -void Field::SetDefaultValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, - const CFX_WideString& string) -{ - //Not supported. +void Field::SetDefaultValue(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_WideString& string) { + // Not supported. } -FX_BOOL Field::doNotScroll(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::doNotScroll(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - if (m_bDelay) - { - AddDelay_Bool(FP_DONOTSCROLL, bVP); - } - else - { - Field::SetDoNotScroll(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); - } + if (m_bDelay) { + AddDelay_Bool(FP_DONOTSCROLL, bVP); + } else { + Field::SetDoNotScroll(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) + return FALSE; - if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSCROLL) - vp << true; - else - vp << false; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSCROLL) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -void Field::SetDoNotScroll(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b) -{ - //Not supported. +void Field::SetDoNotScroll(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b) { + // Not supported. } -FX_BOOL Field::doNotSpellCheck(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::doNotSpellCheck(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; - } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + bool bVP; + vp >> bVP; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD && - pFormField->GetFieldType() != FIELDTYPE_COMBOBOX) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD && + pFormField->GetFieldType() != FIELDTYPE_COMBOBOX) + return FALSE; - if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSPELLCHECK) - vp << true; - else - vp << false; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSPELLCHECK) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -void Field::SetDelay(FX_BOOL bDelay) -{ - m_bDelay = bDelay; +void Field::SetDelay(FX_BOOL bDelay) { + m_bDelay = bDelay; - if (!m_bDelay) - { - if (m_pJSDoc) - m_pJSDoc->DoFieldDelay(m_FieldName, m_nFormControlIndex); - } + if (!m_bDelay) { + if (m_pJSDoc) + m_pJSDoc->DoFieldDelay(m_FieldName, m_nFormControlIndex); + } } -FX_BOOL Field::delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; +FX_BOOL Field::delay(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - SetDelay(bVP); - } - else - { - vp << m_bDelay; - } - return TRUE; + SetDelay(bVP); + } else { + vp << m_bDelay; + } + return TRUE; } -FX_BOOL Field::display(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; +FX_BOOL Field::display(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - int nVP; - vp >> nVP; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - if (m_bDelay) - { - AddDelay_Int(FP_DISPLAY, nVP); - } - else - { - Field::SetDisplay(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); - } - } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + int nVP; + vp >> nVP; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); - - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); - - CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField)); - if (!pWidget)return FALSE; - - FX_DWORD dwFlag = pWidget->GetFlags(); - - if (ANNOTFLAG_INVISIBLE & dwFlag || ANNOTFLAG_HIDDEN & dwFlag) - { - vp << (int32_t)1; - } - else - { - if (ANNOTFLAG_PRINT & dwFlag) - { - if (ANNOTFLAG_NOVIEW & dwFlag) - { - vp << (int32_t)3; - } - else - { - vp << (int32_t)0; - } - } - else - { - vp << (int32_t)2; - } - } + if (m_bDelay) { + AddDelay_Int(FP_DISPLAY, nVP); + } else { + Field::SetDisplay(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); } + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - return TRUE; -} - -void Field::SetDisplay(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - ASSERT(pDocument != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); ASSERT(pInterForm != NULL); - CFX_PtrArray FieldArray; - GetFormFields(pDocument, swFieldName, FieldArray); + CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(GetSmartFieldControl(pFormField)); + if (!pWidget) + return FALSE; - for (int i=0,isz=FieldArray.GetSize(); iCountControls(); jGetControl(j); - ASSERT(pFormControl != NULL); - - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) - { - FX_DWORD dwFlag = pWidget->GetFlags(); - switch (number) - { - case 0: - dwFlag &= (~ANNOTFLAG_INVISIBLE); - dwFlag &= (~ANNOTFLAG_HIDDEN); - dwFlag &= (~ANNOTFLAG_NOVIEW); - dwFlag |= ANNOTFLAG_PRINT; - break; - case 1: - dwFlag &= (~ANNOTFLAG_INVISIBLE); - dwFlag &= (~ANNOTFLAG_NOVIEW); - dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT); - break; - case 2: - dwFlag &= (~ANNOTFLAG_INVISIBLE); - dwFlag &= (~ANNOTFLAG_PRINT); - dwFlag &= (~ANNOTFLAG_HIDDEN); - dwFlag &= (~ANNOTFLAG_NOVIEW); - break; - case 3: - dwFlag |= ANNOTFLAG_NOVIEW; - dwFlag |= ANNOTFLAG_PRINT; - dwFlag &= (~ANNOTFLAG_HIDDEN); - break; - } - - if (dwFlag != pWidget->GetFlags()) - { - pWidget->SetFlags(dwFlag); - bSet = TRUE; - } - } - } + FX_DWORD dwFlag = pWidget->GetFlags(); - if (bSet) UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE); - } - else - { - if(nControlIndex >= pFormField->CountControls()) return; - if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex)) - { - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) - { - - FX_DWORD dwFlag = pWidget->GetFlags(); - switch (number) - { - case 0: - dwFlag &= (~ANNOTFLAG_INVISIBLE); - dwFlag &= (~ANNOTFLAG_HIDDEN); - dwFlag &= (~ANNOTFLAG_NOVIEW); - dwFlag |= ANNOTFLAG_PRINT; - break; - case 1: - dwFlag &= (~ANNOTFLAG_INVISIBLE); - dwFlag &= (~ANNOTFLAG_NOVIEW); - dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT); - break; - case 2: - dwFlag &= (~ANNOTFLAG_INVISIBLE); - dwFlag &= (~ANNOTFLAG_PRINT); - dwFlag &= (~ANNOTFLAG_HIDDEN); - dwFlag &= (~ANNOTFLAG_NOVIEW); - break; - case 3: - dwFlag |= ANNOTFLAG_NOVIEW; - dwFlag |= ANNOTFLAG_PRINT; - dwFlag &= (~ANNOTFLAG_HIDDEN); - break; - } - if (dwFlag != pWidget->GetFlags()) - { - pWidget->SetFlags(dwFlag); - UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE); - } - } - } + if (ANNOTFLAG_INVISIBLE & dwFlag || ANNOTFLAG_HIDDEN & dwFlag) { + vp << (int32_t)1; + } else { + if (ANNOTFLAG_PRINT & dwFlag) { + if (ANNOTFLAG_NOVIEW & dwFlag) { + vp << (int32_t)3; + } else { + vp << (int32_t)0; } + } else { + vp << (int32_t)2; + } } -} + } -FX_BOOL Field::doc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting()) { - return FALSE; - } - vp << m_pJSDoc->GetCJSDoc(); - return TRUE; + return TRUE; } -FX_BOOL Field::editable(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; +void Field::SetDisplay(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + ASSERT(pDocument != NULL); - bool bVP; - vp >> bVP; - } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CFX_PtrArray FieldArray; + GetFormFields(pDocument, swFieldName, FieldArray); - if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX) - return FALSE; - - if (pFormField->GetFieldFlags() & FIELDFLAG_EDIT) - vp << true; - else - vp << false; - } + for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i); + ASSERT(pFormField != NULL); - return TRUE; -} - -FX_BOOL Field::exportValues(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); + if (nControlIndex < 0) { + FX_BOOL bSet = FALSE; + for (int j = 0, jsz = pFormField->CountControls(); j < jsz; j++) { + CPDF_FormControl* pFormControl = pFormField->GetControl(j); + ASSERT(pFormControl != NULL); + if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + FX_DWORD dwFlag = pWidget->GetFlags(); + switch (number) { + case 0: + dwFlag &= (~ANNOTFLAG_INVISIBLE); + dwFlag &= (~ANNOTFLAG_HIDDEN); + dwFlag &= (~ANNOTFLAG_NOVIEW); + dwFlag |= ANNOTFLAG_PRINT; + break; + case 1: + dwFlag &= (~ANNOTFLAG_INVISIBLE); + dwFlag &= (~ANNOTFLAG_NOVIEW); + dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT); + break; + case 2: + dwFlag &= (~ANNOTFLAG_INVISIBLE); + dwFlag &= (~ANNOTFLAG_PRINT); + dwFlag &= (~ANNOTFLAG_HIDDEN); + dwFlag &= (~ANNOTFLAG_NOVIEW); + break; + case 3: + dwFlag |= ANNOTFLAG_NOVIEW; + dwFlag |= ANNOTFLAG_PRINT; + dwFlag &= (~ANNOTFLAG_HIDDEN); + break; + } + + if (dwFlag != pWidget->GetFlags()) { + pWidget->SetFlags(dwFlag); + bSet = TRUE; + } + } + } + + if (bSet) + UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE); + } else { + if (nControlIndex >= pFormField->CountControls()) + return; + if (CPDF_FormControl* pFormControl = + pFormField->GetControl(nControlIndex)) { + if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + FX_DWORD dwFlag = pWidget->GetFlags(); + switch (number) { + case 0: + dwFlag &= (~ANNOTFLAG_INVISIBLE); + dwFlag &= (~ANNOTFLAG_HIDDEN); + dwFlag &= (~ANNOTFLAG_NOVIEW); + dwFlag |= ANNOTFLAG_PRINT; + break; + case 1: + dwFlag &= (~ANNOTFLAG_INVISIBLE); + dwFlag &= (~ANNOTFLAG_NOVIEW); + dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT); + break; + case 2: + dwFlag &= (~ANNOTFLAG_INVISIBLE); + dwFlag &= (~ANNOTFLAG_PRINT); + dwFlag &= (~ANNOTFLAG_HIDDEN); + dwFlag &= (~ANNOTFLAG_NOVIEW); + break; + case 3: + dwFlag |= ANNOTFLAG_NOVIEW; + dwFlag |= ANNOTFLAG_PRINT; + dwFlag &= (~ANNOTFLAG_HIDDEN); + break; + } + if (dwFlag != pWidget->GetFlags()) { + pWidget->SetFlags(dwFlag); + UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE); + } + } + } + } + } +} + +FX_BOOL Field::doc(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) { + return FALSE; + } + vp << m_pJSDoc->GetCJSDoc(); + return TRUE; +} + +FX_BOOL Field::editable(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; + + bool bVP; + vp >> bVP; + } else { CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); + GetFormFields(m_FieldName, FieldArray); if (FieldArray.GetSize() <= 0) - return FALSE; + return FALSE; CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX && - pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON) - return FALSE; + ASSERT(pFormField != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX) + return FALSE; - if (!vp.IsArrayObject()) - return FALSE; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_EDIT) + vp << true; else - { - CJS_Array ExportValusArray(m_isolate); - if (m_nFormControlIndex < 0) - { - for (int i=0,sz=pFormField->CountControls(); iGetControl(i); - ExportValusArray.SetElement(i, CJS_Value(m_isolate,pFormControl->GetExportValue().c_str())); - } - } - else - { - if (m_nFormControlIndex >= pFormField->CountControls()) - return FALSE; + vp << false; + } - CPDF_FormControl* pFormControl = pFormField->GetControl(m_nFormControlIndex); - if (!pFormControl) - return FALSE; - - ExportValusArray.SetElement(0, CJS_Value(m_isolate,pFormControl->GetExportValue().c_str())); - } - vp << ExportValusArray; - } - return TRUE; + return TRUE; } -FX_BOOL Field::fileSelect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::exportValues(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) - return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX && + pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON) + return FALSE; + + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; + + if (!vp.IsArrayObject()) + return FALSE; + } else { + CJS_Array ExportValusArray(m_isolate); + if (m_nFormControlIndex < 0) { + for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { + CPDF_FormControl* pFormControl = pFormField->GetControl(i); + ExportValusArray.SetElement( + i, CJS_Value(m_isolate, pFormControl->GetExportValue().c_str())); + } + } else { + if (m_nFormControlIndex >= pFormField->CountControls()) return FALSE; - if (vp.IsSetting()) - { - if (!m_bCanSet) - return FALSE; + CPDF_FormControl* pFormControl = + pFormField->GetControl(m_nFormControlIndex); + if (!pFormControl) + return FALSE; - bool bVP; - vp >> bVP; - } - else - { - if (pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT) - vp << true; - else - vp << false; + ExportValusArray.SetElement( + 0, CJS_Value(m_isolate, pFormControl->GetExportValue().c_str())); } - return TRUE; + vp << ExportValusArray; + } + return TRUE; } -FX_BOOL Field::fillColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - CJS_Array crArray(m_isolate); +FX_BOOL Field::fileSelect(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) - return FALSE; - - if (vp.IsSetting()) - { - if (!m_bCanSet) - return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - if (!vp.IsArrayObject()) - return FALSE; + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) + return FALSE; - vp >> crArray; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - CPWL_Color color; - color::ConvertArrayToPWLColor(crArray, color); - if (m_bDelay) - { - AddDelay_Color(FP_FILLCOLOR, color); - } - else - { - Field::SetFillColor(m_pDocument, m_FieldName, m_nFormControlIndex, color); - } - } + bool bVP; + vp >> bVP; + } else { + if (pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT) + vp << true; else - { - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); - - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl) - return FALSE; - - int iColorType; - pFormControl->GetBackgroundColor(iColorType); - - CPWL_Color color; - if (iColorType == COLORTYPE_TRANSPARENT) - { - color = CPWL_Color(COLORTYPE_TRANSPARENT); - } - else if (iColorType == COLORTYPE_GRAY) - { - color = CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBackgroundColor(0)); - } - else if (iColorType == COLORTYPE_RGB) - { - color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBackgroundColor(0), - pFormControl->GetOriginalBackgroundColor(1), - pFormControl->GetOriginalBackgroundColor(2)); - } - else if (iColorType == COLORTYPE_CMYK) - { - color = CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBackgroundColor(0), - pFormControl->GetOriginalBackgroundColor(1), - pFormControl->GetOriginalBackgroundColor(2), - pFormControl->GetOriginalBackgroundColor(3)); - } - else - return FALSE; - - color::ConvertPWLColorToArray(color, crArray); - vp << crArray; - } - - return TRUE; -} - -void Field::SetFillColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color) -{ - //Not supported. + vp << false; + } + return TRUE; } -FX_BOOL Field::hidden(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; +FX_BOOL Field::fillColor(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - bool bVP; - vp >> bVP; + CJS_Array crArray(m_isolate); - if (m_bDelay) - { - AddDelay_Bool(FP_HIDDEN, bVP); - } - else - { - Field::SetHidden(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); - } - } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; - - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField)); - if (!pWidget) return FALSE; + if (!vp.IsArrayObject()) + return FALSE; - FX_DWORD dwFlags = pWidget->GetFlags(); + vp >> crArray; - if (ANNOTFLAG_INVISIBLE & dwFlags || ANNOTFLAG_HIDDEN & dwFlags) - { - vp << true; - } - else - vp << false; + CPWL_Color color; + color::ConvertArrayToPWLColor(crArray, color); + if (m_bDelay) { + AddDelay_Color(FP_FILLCOLOR, color); + } else { + Field::SetFillColor(m_pDocument, m_FieldName, m_nFormControlIndex, color); } + } else { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - return TRUE; -} + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; + + int iColorType; + pFormControl->GetBackgroundColor(iColorType); + + CPWL_Color color; + if (iColorType == COLORTYPE_TRANSPARENT) { + color = CPWL_Color(COLORTYPE_TRANSPARENT); + } else if (iColorType == COLORTYPE_GRAY) { + color = CPWL_Color(COLORTYPE_GRAY, + pFormControl->GetOriginalBackgroundColor(0)); + } else if (iColorType == COLORTYPE_RGB) { + color = + CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBackgroundColor(0), + pFormControl->GetOriginalBackgroundColor(1), + pFormControl->GetOriginalBackgroundColor(2)); + } else if (iColorType == COLORTYPE_CMYK) { + color = CPWL_Color(COLORTYPE_CMYK, + pFormControl->GetOriginalBackgroundColor(0), + pFormControl->GetOriginalBackgroundColor(1), + pFormControl->GetOriginalBackgroundColor(2), + pFormControl->GetOriginalBackgroundColor(3)); + } else + return FALSE; + + color::ConvertPWLColorToArray(color, crArray); + vp << crArray; + } + + return TRUE; +} + +void Field::SetFillColor(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPWL_Color& color) { + // Not supported. +} + +FX_BOOL Field::hidden(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; + + bool bVP; + vp >> bVP; + + if (m_bDelay) { + AddDelay_Bool(FP_HIDDEN, bVP); + } else { + Field::SetHidden(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); + } + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; -void Field::SetHidden(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b) -{ - ASSERT(pDocument != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); ASSERT(pInterForm != NULL); - CFX_PtrArray FieldArray; - GetFormFields(pDocument, swFieldName, FieldArray); + CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(GetSmartFieldControl(pFormField)); + if (!pWidget) + return FALSE; - for (int i=0,isz=FieldArray.GetSize(); iCountControls(); jGetWidget(pFormField->GetControl(j))) - { - FX_DWORD dwFlags = pWidget->GetFlags(); - - if (b) - { - dwFlags &= (~ANNOTFLAG_INVISIBLE); - dwFlags &= (~ANNOTFLAG_NOVIEW); - dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT); - } - else - { - dwFlags &= (~ANNOTFLAG_INVISIBLE); - dwFlags &= (~ANNOTFLAG_HIDDEN); - dwFlags &= (~ANNOTFLAG_NOVIEW); - dwFlags |= ANNOTFLAG_PRINT; - } - - if (dwFlags != pWidget->GetFlags()) - { - pWidget->SetFlags(dwFlags); - bSet = TRUE; - } - } - } + FX_DWORD dwFlags = pWidget->GetFlags(); - if (bSet) - UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE); - } - else - { - if(nControlIndex >= pFormField->CountControls()) return; - if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex)) - { - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) - { - FX_DWORD dwFlags = pWidget->GetFlags(); - - if (b) - { - dwFlags &= (~ANNOTFLAG_INVISIBLE); - dwFlags &= (~ANNOTFLAG_NOVIEW); - dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT); - } - else - { - dwFlags &= (~ANNOTFLAG_INVISIBLE); - dwFlags &= (~ANNOTFLAG_HIDDEN); - dwFlags &= (~ANNOTFLAG_NOVIEW); - dwFlags |= ANNOTFLAG_PRINT; - } - - if (dwFlags != pWidget->GetFlags()) - { - pWidget->SetFlags(dwFlags); - UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE); - } - } - } - } - } + if (ANNOTFLAG_INVISIBLE & dwFlags || ANNOTFLAG_HIDDEN & dwFlags) { + vp << true; + } else + vp << false; + } + + return TRUE; } -FX_BOOL Field::highlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +void Field::SetHidden(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b) { + ASSERT(pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - CFX_ByteString strMode; - vp >> strMode; + CFX_PtrArray FieldArray; + GetFormFields(pDocument, swFieldName, FieldArray); - if (m_bDelay) - { - AddDelay_String(FP_HIGHLIGHT, strMode); - } - else - { - Field::SetHighlight(m_pDocument, m_FieldName, m_nFormControlIndex, strMode); - } - } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i); + ASSERT(pFormField != NULL); - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + if (nControlIndex < 0) { + FX_BOOL bSet = FALSE; + for (int j = 0, jsz = pFormField->CountControls(); j < jsz; j++) { + if (CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormField->GetControl(j))) { + FX_DWORD dwFlags = pWidget->GetFlags(); + + if (b) { + dwFlags &= (~ANNOTFLAG_INVISIBLE); + dwFlags &= (~ANNOTFLAG_NOVIEW); + dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT); + } else { + dwFlags &= (~ANNOTFLAG_INVISIBLE); + dwFlags &= (~ANNOTFLAG_HIDDEN); + dwFlags &= (~ANNOTFLAG_NOVIEW); + dwFlags |= ANNOTFLAG_PRINT; + } + + if (dwFlags != pWidget->GetFlags()) { + pWidget->SetFlags(dwFlags); + bSet = TRUE; + } + } + } + + if (bSet) + UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE); + } else { + if (nControlIndex >= pFormField->CountControls()) + return; + if (CPDF_FormControl* pFormControl = + pFormField->GetControl(nControlIndex)) { + if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + FX_DWORD dwFlags = pWidget->GetFlags(); + + if (b) { + dwFlags &= (~ANNOTFLAG_INVISIBLE); + dwFlags &= (~ANNOTFLAG_NOVIEW); + dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT); + } else { + dwFlags &= (~ANNOTFLAG_INVISIBLE); + dwFlags &= (~ANNOTFLAG_HIDDEN); + dwFlags &= (~ANNOTFLAG_NOVIEW); + dwFlags |= ANNOTFLAG_PRINT; + } + + if (dwFlags != pWidget->GetFlags()) { + pWidget->SetFlags(dwFlags); + UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE); + } + } + } + } + } +} + +FX_BOOL Field::highlight(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; + + CFX_ByteString strMode; + vp >> strMode; + + if (m_bDelay) { + AddDelay_String(FP_HIGHLIGHT, strMode); + } else { + Field::SetHighlight(m_pDocument, m_FieldName, m_nFormControlIndex, + strMode); + } + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; + + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) + return FALSE; - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl) return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - int eHM = pFormControl->GetHighlightingMode(); - switch (eHM) - { - case CPDF_FormControl::None: - vp << L"none"; - break; - case CPDF_FormControl::Push: - vp << L"push"; - break; - case CPDF_FormControl::Invert: - vp << L"invert"; - break; - case CPDF_FormControl::Outline: - vp << L"outline"; - break; - case CPDF_FormControl::Toggle: - vp << L"toggle"; - break; - } + int eHM = pFormControl->GetHighlightingMode(); + switch (eHM) { + case CPDF_FormControl::None: + vp << L"none"; + break; + case CPDF_FormControl::Push: + vp << L"push"; + break; + case CPDF_FormControl::Invert: + vp << L"invert"; + break; + case CPDF_FormControl::Outline: + vp << L"outline"; + break; + case CPDF_FormControl::Toggle: + vp << L"toggle"; + break; } + } - return TRUE; + return TRUE; } -void Field::SetHighlight(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string) -{ - //Not supported. +void Field::SetHighlight(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string) { + // Not supported. } -FX_BOOL Field::lineWidth(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::lineWidth(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - int iWidth; - vp >> iWidth; + int iWidth; + vp >> iWidth; - if (m_bDelay) - { - AddDelay_Int(FP_LINEWIDTH, iWidth); - } - else - { - Field::SetLineWidth(m_pDocument, m_FieldName, m_nFormControlIndex, iWidth); - } + if (m_bDelay) { + AddDelay_Int(FP_LINEWIDTH, iWidth); + } else { + Field::SetLineWidth(m_pDocument, m_FieldName, m_nFormControlIndex, + iWidth); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl) return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - if(!pFormField->CountControls()) return FALSE; + if (!pFormField->CountControls()) + return FALSE; - CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(0)); - if (!pWidget) return FALSE; + CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(0)); + if (!pWidget) + return FALSE; - vp << (int32_t)pWidget->GetBorderWidth(); - } + vp << (int32_t)pWidget->GetBorderWidth(); + } - return TRUE; + return TRUE; } -void Field::SetLineWidth(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - ASSERT(pDocument != NULL); +void Field::SetLineWidth(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + ASSERT(pDocument != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - CFX_PtrArray FieldArray; - GetFormFields(pDocument, swFieldName, FieldArray); + CFX_PtrArray FieldArray; + GetFormFields(pDocument, swFieldName, FieldArray); - for (int i=0,isz=FieldArray.GetSize(); iCountControls(); jGetControl(j); - ASSERT(pFormControl != NULL); - - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) - { - if (number != pWidget->GetBorderWidth()) - { - pWidget->SetBorderWidth(number); - bSet = TRUE; - } - } - } - if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE); - } - else - { - if(nControlIndex >= pFormField->CountControls()) return; - if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex)) - { - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) - { - if (number != pWidget->GetBorderWidth()) - { - pWidget->SetBorderWidth(number); - UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE); - } - } - } + for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i); + ASSERT(pFormField != NULL); + + if (nControlIndex < 0) { + FX_BOOL bSet = FALSE; + for (int j = 0, jsz = pFormField->CountControls(); j < jsz; j++) { + CPDF_FormControl* pFormControl = pFormField->GetControl(j); + ASSERT(pFormControl != NULL); + + if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + if (number != pWidget->GetBorderWidth()) { + pWidget->SetBorderWidth(number); + bSet = TRUE; + } + } + } + if (bSet) + UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE); + } else { + if (nControlIndex >= pFormField->CountControls()) + return; + if (CPDF_FormControl* pFormControl = + pFormField->GetControl(nControlIndex)) { + if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + if (number != pWidget->GetBorderWidth()) { + pWidget->SetBorderWidth(number); + UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE); + } } + } } + } } -FX_BOOL Field::multiline(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::multiline(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - if (m_bDelay) - { - AddDelay_Bool(FP_MULTILINE, bVP); - } - else - { - Field::SetMultiline(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); - } + if (m_bDelay) { + AddDelay_Bool(FP_MULTILINE, bVP); + } else { + Field::SetMultiline(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) + return FALSE; - if (pFormField->GetFieldFlags() & FIELDFLAG_MULTILINE) - vp << true; - else - vp << false; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_MULTILINE) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -void Field::SetMultiline(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b) -{ - //Not supported. +void Field::SetMultiline(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b) { + // Not supported. } -FX_BOOL Field::multipleSelection(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::multipleSelection(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - if (m_bDelay) - { - AddDelay_Bool(FP_MULTIPLESELECTION, bVP); - } - else - { - Field::SetMultipleSelection(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); - } + if (m_bDelay) { + AddDelay_Bool(FP_MULTIPLESELECTION, bVP); + } else { + Field::SetMultipleSelection(m_pDocument, m_FieldName, m_nFormControlIndex, + bVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX) + return FALSE; - if (pFormField->GetFieldFlags() & FIELDFLAG_MULTISELECT) - vp << true; - else - vp << false; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_MULTISELECT) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -void Field::SetMultipleSelection(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b) -{ - //Not supported. +void Field::SetMultipleSelection(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b) { + // Not supported. } -FX_BOOL Field::name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting()) return FALSE; +FX_BOOL Field::name(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - vp << m_FieldName; + vp << m_FieldName; - return TRUE; + return TRUE; } -FX_BOOL Field::numItems(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; +FX_BOOL Field::numItems(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && - pFormField->GetFieldType() != FIELDTYPE_LISTBOX) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && + pFormField->GetFieldType() != FIELDTYPE_LISTBOX) + return FALSE; - if (!vp.IsGetting()) return FALSE; + if (!vp.IsGetting()) + return FALSE; - vp << (int32_t)pFormField->CountOptions(); + vp << (int32_t)pFormField->CountOptions(); - return TRUE; + return TRUE; } -FX_BOOL Field::page(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting()) return FALSE; - - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; +FX_BOOL Field::page(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - if (!pFormField) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - ASSERT(m_pDocument != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + if (!pFormField) + return FALSE; - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + ASSERT(m_pDocument != NULL); - CFX_PtrArray widgetArray; - pInterForm->GetWidgets(pFormField, widgetArray); + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - if (widgetArray.GetSize() > 0) - { - CJS_Array PageArray(m_isolate); + CFX_PtrArray widgetArray; + pInterForm->GetWidgets(pFormField, widgetArray); - for (int i=0,sz=widgetArray.GetSize(); i 0) { + CJS_Array PageArray(m_isolate); - CPDFSDK_PageView* pPageView = pWidget->GetPageView(); - if(!pPageView) - return FALSE; + for (int i = 0, sz = widgetArray.GetSize(); i < sz; i++) { + CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgetArray.GetAt(i); + ASSERT(pWidget != NULL); - PageArray.SetElement(i, CJS_Value(m_isolate,(int32_t)pPageView->GetPageIndex())); - } + CPDFSDK_PageView* pPageView = pWidget->GetPageView(); + if (!pPageView) + return FALSE; - vp << PageArray; - } - else - { - vp << (int32_t) -1; + PageArray.SetElement( + i, CJS_Value(m_isolate, (int32_t)pPageView->GetPageIndex())); } - return TRUE; + vp << PageArray; + } else { + vp << (int32_t)-1; + } + + return TRUE; } -FX_BOOL Field::password(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::password(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - if (m_bDelay) - { - AddDelay_Bool(FP_PASSWORD, bVP); - } - else - { - Field::SetPassword(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); - } + if (m_bDelay) { + AddDelay_Bool(FP_PASSWORD, bVP); + } else { + Field::SetPassword(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) + return FALSE; - if (pFormField->GetFieldFlags() & FIELDFLAG_PASSWORD) - vp << true; - else - vp << false; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_PASSWORD) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -void Field::SetPassword(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b) -{ - //Not supported. +void Field::SetPassword(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b) { + // Not supported. } -FX_BOOL Field::print(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::print(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; - - bool bVP; - vp >> bVP; - - for (int i=0,isz=FieldArray.GetSize(); iCountControls(); jGetWidget(pFormField->GetControl(j))) - { - FX_DWORD dwFlags = pWidget->GetFlags(); - if (bVP) - dwFlags |= ANNOTFLAG_PRINT; - else - dwFlags &= ~ANNOTFLAG_PRINT; - - if (dwFlags != pWidget->GetFlags()) - { - pWidget->SetFlags(dwFlags); - bSet = TRUE; - } - } - } - - if (bSet) - UpdateFormField(m_pDocument, pFormField, TRUE, FALSE, TRUE); + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; + + bool bVP; + vp >> bVP; + + for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i); + ASSERT(pFormField != NULL); + + if (m_nFormControlIndex < 0) { + FX_BOOL bSet = FALSE; + for (int j = 0, jsz = pFormField->CountControls(); j < jsz; j++) { + if (CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormField->GetControl(j))) { + FX_DWORD dwFlags = pWidget->GetFlags(); + if (bVP) + dwFlags |= ANNOTFLAG_PRINT; + else + dwFlags &= ~ANNOTFLAG_PRINT; + + if (dwFlags != pWidget->GetFlags()) { + pWidget->SetFlags(dwFlags); + bSet = TRUE; } + } + } + + if (bSet) + UpdateFormField(m_pDocument, pFormField, TRUE, FALSE, TRUE); + } else { + if (m_nFormControlIndex >= pFormField->CountControls()) + return FALSE; + if (CPDF_FormControl* pFormControl = + pFormField->GetControl(m_nFormControlIndex)) { + if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + FX_DWORD dwFlags = pWidget->GetFlags(); + if (bVP) + dwFlags |= ANNOTFLAG_PRINT; else - { - if(m_nFormControlIndex >= pFormField->CountControls()) return FALSE; - if (CPDF_FormControl* pFormControl = pFormField->GetControl(m_nFormControlIndex)) - { - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) - { - FX_DWORD dwFlags = pWidget->GetFlags(); - if (bVP) - dwFlags |= ANNOTFLAG_PRINT; - else - dwFlags &= ~ANNOTFLAG_PRINT; - - if (dwFlags != pWidget->GetFlags()) - { - pWidget->SetFlags(dwFlags); - UpdateFormControl(m_pDocument, pFormField->GetControl(m_nFormControlIndex), TRUE, FALSE, TRUE); - } - } - } + dwFlags &= ~ANNOTFLAG_PRINT; + + if (dwFlags != pWidget->GetFlags()) { + pWidget->SetFlags(dwFlags); + UpdateFormControl(m_pDocument, + pFormField->GetControl(m_nFormControlIndex), + TRUE, FALSE, TRUE); } + } } + } } - else - { - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + } else { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField)); - if (!pWidget) return FALSE; + CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(GetSmartFieldControl(pFormField)); + if (!pWidget) + return FALSE; - if (pWidget->GetFlags() & ANNOTFLAG_PRINT) - vp << true; - else - vp << false; - } + if (pWidget->GetFlags() & ANNOTFLAG_PRINT) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -FX_BOOL Field::radiosInUnison(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::radiosInUnison(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - } - else - { - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + } else { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON) + return FALSE; - if (pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON) - vp << true; - else - vp << false; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -FX_BOOL Field::readonly(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::readonly(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - } + } else { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); + + if (pFormField->GetFieldFlags() & FIELDFLAG_READONLY) + vp << true; else - { - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + vp << false; + } + + return TRUE; +} + +FX_BOOL Field::rect(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; + if (!vp.IsArrayObject()) + return FALSE; + + CJS_Array rcArray(m_isolate); + vp >> rcArray; + CJS_Value Upper_Leftx(m_isolate), Upper_Lefty(m_isolate), + Lower_Rightx(m_isolate), Lower_Righty(m_isolate); + rcArray.GetElement(0, Upper_Leftx); + rcArray.GetElement(1, Upper_Lefty); + rcArray.GetElement(2, Lower_Rightx); + rcArray.GetElement(3, Lower_Righty); + + FX_FLOAT pArray[4] = {0.0f, 0.0f, 0.0f, 0.0f}; + pArray[0] = (FX_FLOAT)Upper_Leftx.ToInt(); + pArray[1] = (FX_FLOAT)Lower_Righty.ToInt(); + pArray[2] = (FX_FLOAT)Lower_Rightx.ToInt(); + pArray[3] = (FX_FLOAT)Upper_Lefty.ToInt(); + + CPDF_Rect crRect(pArray); + + if (m_bDelay) { + AddDelay_Rect(FP_RECT, crRect); + } else { + Field::SetRect(m_pDocument, m_FieldName, m_nFormControlIndex, crRect); + } + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; + + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); + + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); + + CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(GetSmartFieldControl(pFormField)); + if (!pWidget) + return FALSE; + + CFX_FloatRect crRect = pWidget->GetRect(); + CJS_Value Upper_Leftx(m_isolate), Upper_Lefty(m_isolate), + Lower_Rightx(m_isolate), Lower_Righty(m_isolate); + Upper_Leftx = (int32_t)crRect.left; + Upper_Lefty = (int32_t)crRect.top; + Lower_Rightx = (int32_t)crRect.right; + Lower_Righty = (int32_t)crRect.bottom; - if (pFormField->GetFieldFlags() & FIELDFLAG_READONLY) - vp << true; - else - vp << false; - } + CJS_Array rcArray(m_isolate); + rcArray.SetElement(0, Upper_Leftx); + rcArray.SetElement(1, Upper_Lefty); + rcArray.SetElement(2, Lower_Rightx); + rcArray.SetElement(3, Lower_Righty); - return TRUE; + vp << rcArray; + } + + return TRUE; } -FX_BOOL Field::rect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +void Field::SetRect(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPDF_Rect& rect) { + ASSERT(pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; - if (!vp.IsArrayObject())return FALSE; - - CJS_Array rcArray(m_isolate); - vp >> rcArray; - CJS_Value Upper_Leftx(m_isolate), Upper_Lefty(m_isolate), Lower_Rightx(m_isolate), Lower_Righty(m_isolate); - rcArray.GetElement(0, Upper_Leftx); - rcArray.GetElement(1, Upper_Lefty); - rcArray.GetElement(2, Lower_Rightx); - rcArray.GetElement(3, Lower_Righty); - - FX_FLOAT pArray[4] = {0.0f,0.0f,0.0f,0.0f}; - pArray[0] = (FX_FLOAT)Upper_Leftx.ToInt(); - pArray[1] = (FX_FLOAT)Lower_Righty.ToInt(); - pArray[2] = (FX_FLOAT)Lower_Rightx.ToInt(); - pArray[3] = (FX_FLOAT)Upper_Lefty.ToInt(); - - CPDF_Rect crRect(pArray); - - if (m_bDelay) - { - AddDelay_Rect(FP_RECT, crRect); - } - else - { - Field::SetRect(m_pDocument, m_FieldName, m_nFormControlIndex, crRect); - } - } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CFX_PtrArray FieldArray; + GetFormFields(pDocument, swFieldName, FieldArray); - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i); + ASSERT(pFormField != NULL); - CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField)); - if (!pWidget) return FALSE; + if (nControlIndex < 0) { + FX_BOOL bSet = FALSE; + for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { + CPDF_FormControl* pFormControl = pFormField->GetControl(i); + ASSERT(pFormControl != NULL); - CFX_FloatRect crRect = pWidget->GetRect(); - CJS_Value Upper_Leftx(m_isolate),Upper_Lefty(m_isolate),Lower_Rightx(m_isolate),Lower_Righty(m_isolate); - Upper_Leftx = (int32_t)crRect.left; - Upper_Lefty = (int32_t)crRect.top; - Lower_Rightx = (int32_t)crRect.right; - Lower_Righty = (int32_t)crRect.bottom; + if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + CPDF_Rect crRect = rect; - CJS_Array rcArray(m_isolate); - rcArray.SetElement(0,Upper_Leftx); - rcArray.SetElement(1,Upper_Lefty); - rcArray.SetElement(2,Lower_Rightx); - rcArray.SetElement(3,Lower_Righty); + CPDF_Page* pPDFPage = pWidget->GetPDFPage(); + ASSERT(pPDFPage != NULL); - vp << rcArray; - } + // CPDF_Page* pPDFPage = pPage->GetPage(); + // ASSERT(pPDFPage != NULL); - return TRUE; -} + crRect.Intersect(pPDFPage->GetPageBBox()); -void Field::SetRect(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPDF_Rect& rect) -{ - ASSERT(pDocument != NULL); + if (!crRect.IsEmpty()) { + CPDF_Rect rcOld = pWidget->GetRect(); + if (crRect.left != rcOld.left || crRect.right != rcOld.right || + crRect.top != rcOld.top || crRect.bottom != rcOld.bottom) { + pWidget->SetRect(crRect); + bSet = TRUE; + } + } + } + } - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); + if (bSet) + UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE); + } else { + if (nControlIndex >= pFormField->CountControls()) + return; + if (CPDF_FormControl* pFormControl = + pFormField->GetControl(nControlIndex)) { + if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + CPDF_Rect crRect = rect; - CFX_PtrArray FieldArray; - GetFormFields(pDocument, swFieldName, FieldArray); + CPDF_Page* pPDFPage = pWidget->GetPDFPage(); + ASSERT(pPDFPage != NULL); - for (int i=0,isz=FieldArray.GetSize(); iCountControls(); iGetControl(i); - ASSERT(pFormControl != NULL); - - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) - { - CPDF_Rect crRect = rect; - - CPDF_Page* pPDFPage = pWidget->GetPDFPage(); - ASSERT(pPDFPage != NULL); - -// CPDF_Page* pPDFPage = pPage->GetPage(); -// ASSERT(pPDFPage != NULL); - - crRect.Intersect(pPDFPage->GetPageBBox()); - - if (!crRect.IsEmpty()) - { - CPDF_Rect rcOld = pWidget->GetRect(); - if (crRect.left != rcOld.left || - crRect.right != rcOld.right || - crRect.top != rcOld.top || - crRect.bottom != rcOld.bottom) - { - pWidget->SetRect(crRect); - bSet = TRUE; - } - } - } - } + // CPDF_Page* pPDFPage = pPage->GetPage(); + // ASSERT(pPDFPage != NULL); - if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE); - } - else - { - if(nControlIndex >= pFormField->CountControls()) return; - if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex)) - { - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) - { - CPDF_Rect crRect = rect; - - CPDF_Page* pPDFPage = pWidget->GetPDFPage(); - ASSERT(pPDFPage != NULL); - -// CPDF_Page* pPDFPage = pPage->GetPage(); -// ASSERT(pPDFPage != NULL); - - crRect.Intersect(pPDFPage->GetPageBBox()); - - if (!crRect.IsEmpty()) - { - CPDF_Rect rcOld = pWidget->GetRect(); - if (crRect.left != rcOld.left || - crRect.right != rcOld.right || - crRect.top != rcOld.top || - crRect.bottom != rcOld.bottom) - { - pWidget->SetRect(crRect); - UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE); - } - } - } + crRect.Intersect(pPDFPage->GetPageBBox()); + + if (!crRect.IsEmpty()) { + CPDF_Rect rcOld = pWidget->GetRect(); + if (crRect.left != rcOld.left || crRect.right != rcOld.right || + crRect.top != rcOld.top || crRect.bottom != rcOld.bottom) { + pWidget->SetRect(crRect); + UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE); } + } } + } } + } } -FX_BOOL Field::required(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; +FX_BOOL Field::required(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - } - else - { - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + } else { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON) - return FALSE; + if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON) + return FALSE; - if (pFormField->GetFieldFlags() & FIELDFLAG_REQUIRED) - vp << true; - else - vp << false; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_REQUIRED) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -FX_BOOL Field::richText(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::richText(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - bool bVP; - vp >> bVP; + bool bVP; + vp >> bVP; - if (m_bDelay) - { - AddDelay_Bool(FP_RICHTEXT, bVP); - } - else - { - Field::SetRichText(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); - } + if (m_bDelay) { + AddDelay_Bool(FP_RICHTEXT, bVP); + } else { + Field::SetRichText(m_pDocument, m_FieldName, m_nFormControlIndex, bVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD) + return FALSE; - if (pFormField->GetFieldFlags() & FIELDFLAG_RICHTEXT) - vp << true; - else - vp << false; - } + if (pFormField->GetFieldFlags() & FIELDFLAG_RICHTEXT) + vp << true; + else + vp << false; + } - return TRUE; + return TRUE; } -void Field::SetRichText(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b) -{ - //Not supported. +void Field::SetRichText(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + bool b) { + // Not supported. } -FX_BOOL Field::richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; - ; - } - else - { - ; - } - return TRUE; +FX_BOOL Field::richValue(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; + ; + } else { + ; + } + return TRUE; } -void Field::SetRichValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex) -{ - //Not supported. +void Field::SetRichValue(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex) { + // Not supported. } -FX_BOOL Field::rotation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::rotation(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - int nVP; - vp >> nVP; + int nVP; + vp >> nVP; - if (m_bDelay) - { - AddDelay_Int(FP_ROTATION, nVP); - } - else - { - Field::SetRotation(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); - } + if (m_bDelay) { + AddDelay_Int(FP_ROTATION, nVP); + } else { + Field::SetRotation(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - vp << (int32_t)pFormControl->GetRotation(); - } + vp << (int32_t)pFormControl->GetRotation(); + } - return TRUE; + return TRUE; } -void Field::SetRotation(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - //Not supported. +void Field::SetRotation(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + // Not supported. } -FX_BOOL Field::strokeColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::strokeColor(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - if (!vp.IsArrayObject())return FALSE; + if (!vp.IsArrayObject()) + return FALSE; - CJS_Array crArray(m_isolate); - vp >> crArray; + CJS_Array crArray(m_isolate); + vp >> crArray; - CPWL_Color color; - color::ConvertArrayToPWLColor(crArray, color); + CPWL_Color color; + color::ConvertArrayToPWLColor(crArray, color); - if (m_bDelay) - { - AddDelay_Color(FP_STROKECOLOR, color); - } - else - { - Field::SetStrokeColor(m_pDocument, m_FieldName, m_nFormControlIndex, color); - } + if (m_bDelay) { + AddDelay_Color(FP_STROKECOLOR, color); + } else { + Field::SetStrokeColor(m_pDocument, m_FieldName, m_nFormControlIndex, + color); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; - - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); - - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; - - int iColorType; - pFormControl->GetBorderColor(iColorType); + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPWL_Color color; + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (iColorType == COLORTYPE_TRANSPARENT) - { - color = CPWL_Color(COLORTYPE_TRANSPARENT); - } - else if (iColorType == COLORTYPE_GRAY) - { - color = CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBorderColor(0)); - } - else if (iColorType == COLORTYPE_RGB) - { - color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBorderColor(0), - pFormControl->GetOriginalBorderColor(1), - pFormControl->GetOriginalBorderColor(2)); - } - else if (iColorType == COLORTYPE_CMYK) - { - color = CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBorderColor(0), - pFormControl->GetOriginalBorderColor(1), - pFormControl->GetOriginalBorderColor(2), - pFormControl->GetOriginalBorderColor(3)); - } - else - return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; + + int iColorType; + pFormControl->GetBorderColor(iColorType); + + CPWL_Color color; + + if (iColorType == COLORTYPE_TRANSPARENT) { + color = CPWL_Color(COLORTYPE_TRANSPARENT); + } else if (iColorType == COLORTYPE_GRAY) { + color = + CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBorderColor(0)); + } else if (iColorType == COLORTYPE_RGB) { + color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBorderColor(0), + pFormControl->GetOriginalBorderColor(1), + pFormControl->GetOriginalBorderColor(2)); + } else if (iColorType == COLORTYPE_CMYK) { + color = + CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBorderColor(0), + pFormControl->GetOriginalBorderColor(1), + pFormControl->GetOriginalBorderColor(2), + pFormControl->GetOriginalBorderColor(3)); + } else + return FALSE; - CJS_Array crArray(m_isolate); - color::ConvertPWLColorToArray(color, crArray); - vp << crArray; - } + CJS_Array crArray(m_isolate); + color::ConvertPWLColorToArray(color, crArray); + vp << crArray; + } - return TRUE; + return TRUE; } -void Field::SetStrokeColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color) -{ - //Not supported. +void Field::SetStrokeColor(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPWL_Color& color) { + // Not supported. } -FX_BOOL Field::style(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::style(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - CFX_ByteString csBCaption; - vp >> csBCaption; + CFX_ByteString csBCaption; + vp >> csBCaption; - if (m_bDelay) - { - AddDelay_String(FP_STYLE, csBCaption); - } - else - { - Field::SetStyle(m_pDocument, m_FieldName, m_nFormControlIndex, csBCaption); - } + if (m_bDelay) { + AddDelay_String(FP_STYLE, csBCaption); + } else { + Field::SetStyle(m_pDocument, m_FieldName, m_nFormControlIndex, + csBCaption); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; - - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); - - if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON && - pFormField->GetFieldType() != FIELDTYPE_CHECKBOX) - return FALSE; - - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl) return FALSE; - - CFX_WideString csWCaption = pFormControl->GetNormalCaption(); - CFX_ByteString csBCaption; - - switch (csWCaption[0]) - { - case L'l': - csBCaption = "circle"; - break; - case L'8': - csBCaption = "cross"; - break; - case L'u': - csBCaption = "diamond"; - break; - case L'n': - csBCaption = "square"; - break; - case L'H': - csBCaption = "star"; - break; - default: //L'4' - csBCaption = "check"; - break; - } - vp << csBCaption; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; + + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); + + if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON && + pFormField->GetFieldType() != FIELDTYPE_CHECKBOX) + return FALSE; + + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; + + CFX_WideString csWCaption = pFormControl->GetNormalCaption(); + CFX_ByteString csBCaption; + + switch (csWCaption[0]) { + case L'l': + csBCaption = "circle"; + break; + case L'8': + csBCaption = "cross"; + break; + case L'u': + csBCaption = "diamond"; + break; + case L'n': + csBCaption = "square"; + break; + case L'H': + csBCaption = "star"; + break; + default: // L'4' + csBCaption = "check"; + break; } + vp << csBCaption; + } - return TRUE; + return TRUE; } -void Field::SetStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, - const CFX_ByteString& string) -{ - //Not supported. +void Field::SetStyle(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string) { + // Not supported. } -FX_BOOL Field::submitName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Field::submitName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Field::textColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::textColor(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - CJS_Array crArray(m_isolate); - if (!vp.IsArrayObject())return FALSE; - vp >> crArray; + CJS_Array crArray(m_isolate); + if (!vp.IsArrayObject()) + return FALSE; + vp >> crArray; - CPWL_Color color; - color::ConvertArrayToPWLColor(crArray, color); + CPWL_Color color; + color::ConvertArrayToPWLColor(crArray, color); - if (m_bDelay) - { - AddDelay_Color(FP_TEXTCOLOR, color); - } - else - { - Field::SetTextColor(m_pDocument, m_FieldName, m_nFormControlIndex, color); - } + if (m_bDelay) { + AddDelay_Color(FP_TEXTCOLOR, color); + } else { + Field::SetTextColor(m_pDocument, m_FieldName, m_nFormControlIndex, color); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - int iColorType; - FX_ARGB color; - CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance(); - FieldAppearance.GetColor(color, iColorType); - int32_t a,r,g,b; - ArgbDecode(color, a, r, g, b); + int iColorType; + FX_ARGB color; + CPDF_DefaultAppearance FieldAppearance = + pFormControl->GetDefaultAppearance(); + FieldAppearance.GetColor(color, iColorType); + int32_t a, r, g, b; + ArgbDecode(color, a, r, g, b); - CPWL_Color crRet = CPWL_Color(COLORTYPE_RGB, r / 255.0f, - g / 255.0f, - b / 255.0f); + CPWL_Color crRet = + CPWL_Color(COLORTYPE_RGB, r / 255.0f, g / 255.0f, b / 255.0f); - if (iColorType == COLORTYPE_TRANSPARENT) - crRet = CPWL_Color(COLORTYPE_TRANSPARENT); + if (iColorType == COLORTYPE_TRANSPARENT) + crRet = CPWL_Color(COLORTYPE_TRANSPARENT); - CJS_Array crArray(m_isolate); - color::ConvertPWLColorToArray(crRet, crArray); - vp << crArray; - } + CJS_Array crArray(m_isolate); + color::ConvertPWLColorToArray(crRet, crArray); + vp << crArray; + } - return TRUE; + return TRUE; } -void Field::SetTextColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color) -{ - //Not supported. +void Field::SetTextColor(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CPWL_Color& color) { + // Not supported. } -FX_BOOL Field::textFont(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::textFont(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - CFX_ByteString csFontName; - vp >> csFontName; - if (csFontName.IsEmpty()) return FALSE; + CFX_ByteString csFontName; + vp >> csFontName; + if (csFontName.IsEmpty()) + return FALSE; - if (m_bDelay) - { - AddDelay_String(FP_TEXTFONT, csFontName); - } - else - { - Field::SetTextFont(m_pDocument, m_FieldName, m_nFormControlIndex, csFontName); - } + if (m_bDelay) { + AddDelay_String(FP_TEXTFONT, csFontName); + } else { + Field::SetTextFont(m_pDocument, m_FieldName, m_nFormControlIndex, + csFontName); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - int nFieldType = pFormField->GetFieldType(); + int nFieldType = pFormField->GetFieldType(); - if (nFieldType == FIELDTYPE_PUSHBUTTON || - nFieldType == FIELDTYPE_COMBOBOX || - nFieldType == FIELDTYPE_LISTBOX || - nFieldType == FIELDTYPE_TEXTFIELD) - { - CPDF_Font * pFont = pFormControl->GetDefaultControlFont(); - if (!pFont) return FALSE; + if (nFieldType == FIELDTYPE_PUSHBUTTON || + nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_LISTBOX || + nFieldType == FIELDTYPE_TEXTFIELD) { + CPDF_Font* pFont = pFormControl->GetDefaultControlFont(); + if (!pFont) + return FALSE; - vp << pFont->GetBaseFont(); - } - else - return FALSE; - } + vp << pFont->GetBaseFont(); + } else + return FALSE; + } - return TRUE; + return TRUE; } -void Field::SetTextFont(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string) -{ - //Not supported. +void Field::SetTextFont(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_ByteString& string) { + // Not supported. } -FX_BOOL Field::textSize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::textSize(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - int nVP; - vp >> nVP; + int nVP; + vp >> nVP; - if (m_bDelay) - { - AddDelay_Int(FP_TEXTSIZE, nVP); - } - else - { - Field::SetTextSize(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); - } + if (m_bDelay) { + AddDelay_Int(FP_TEXTSIZE, nVP); + } else { + Field::SetTextSize(m_pDocument, m_FieldName, m_nFormControlIndex, nVP); } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance(); + CPDF_DefaultAppearance FieldAppearance = + pFormControl->GetDefaultAppearance(); - CFX_ByteString csFontNameTag; - FX_FLOAT fFontSize; - FieldAppearance.GetFont(csFontNameTag,fFontSize); + CFX_ByteString csFontNameTag; + FX_FLOAT fFontSize; + FieldAppearance.GetFont(csFontNameTag, fFontSize); - vp << (int)fFontSize; - } + vp << (int)fFontSize; + } - return TRUE; + return TRUE; } -void Field::SetTextSize(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number) -{ - //Not supported. +void Field::SetTextSize(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + int number) { + // Not supported. } -FX_BOOL Field::type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::type(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + + if (!vp.IsGetting()) + return FALSE; - if (!vp.IsGetting()) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); + + switch (pFormField->GetFieldType()) { + case FIELDTYPE_UNKNOWN: + vp << L"unknown"; + break; + case FIELDTYPE_PUSHBUTTON: + vp << L"button"; + break; + case FIELDTYPE_CHECKBOX: + vp << L"checkbox"; + break; + case FIELDTYPE_RADIOBUTTON: + vp << L"radiobutton"; + break; + case FIELDTYPE_COMBOBOX: + vp << L"combobox"; + break; + case FIELDTYPE_LISTBOX: + vp << L"listbox"; + break; + case FIELDTYPE_TEXTFIELD: + vp << L"text"; + break; + case FIELDTYPE_SIGNATURE: + vp << L"signature"; + break; + default: + vp << L"unknown"; + break; + } + + return TRUE; +} + +FX_BOOL Field::userName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; + + CFX_WideString swName; + vp >> swName; + + if (m_bDelay) { + AddDelay_WideString(FP_USERNAME, swName); + } else { + Field::SetUserName(m_pDocument, m_FieldName, m_nFormControlIndex, swName); + } + } else { CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); ASSERT(pFormField != NULL); - switch (pFormField->GetFieldType()) - { - case FIELDTYPE_UNKNOWN: - vp << L"unknown"; - break; - case FIELDTYPE_PUSHBUTTON: - vp << L"button"; - break; - case FIELDTYPE_CHECKBOX: - vp << L"checkbox"; - break; - case FIELDTYPE_RADIOBUTTON: - vp << L"radiobutton"; - break; - case FIELDTYPE_COMBOBOX: - vp << L"combobox"; - break; - case FIELDTYPE_LISTBOX: - vp << L"listbox"; - break; - case FIELDTYPE_TEXTFIELD: - vp << L"text"; - break; - case FIELDTYPE_SIGNATURE: - vp << L"signature"; - break; - default : - vp << L"unknown"; - break; - } + vp << (CFX_WideString)pFormField->GetAlternateName(); + } - return TRUE; + return TRUE; } -FX_BOOL Field::userName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +void Field::SetUserName(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CFX_WideString& string) { + // Not supported. +} - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; +FX_BOOL Field::value(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - CFX_WideString swName; - vp >> swName; + if (vp.IsSetting()) { + if (!m_bCanSet) + return FALSE; - if (m_bDelay) - { - AddDelay_WideString(FP_USERNAME, swName); - } - else - { - Field::SetUserName(m_pDocument, m_FieldName, m_nFormControlIndex, swName); - } - } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CJS_WideStringArray strArray; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + if (vp.IsArrayObject()) { + CJS_Array ValueArray(m_isolate); + vp.ConvertToArray(ValueArray); + for (int i = 0, sz = ValueArray.GetLength(); i < sz; i++) { + CJS_Value ElementValue(m_isolate); + ValueArray.GetElement(i, ElementValue); + strArray.Add(ElementValue.ToCFXWideString()); + } + } else { + CFX_WideString swValue; + vp >> swValue; - vp << (CFX_WideString)pFormField->GetAlternateName(); + strArray.Add(swValue); } - return TRUE; -} - -void Field::SetUserName(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_WideString& string) -{ - //Not supported. -} - -FX_BOOL Field::value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - if (vp.IsSetting()) - { - if (!m_bCanSet) return FALSE; - - CJS_WideStringArray strArray; - - if (vp.IsArrayObject()) - { - CJS_Array ValueArray(m_isolate); - vp.ConvertToArray(ValueArray); - for (int i = 0,sz = ValueArray.GetLength(); i < sz; i++) - { - CJS_Value ElementValue(m_isolate); - ValueArray.GetElement(i, ElementValue); - strArray.Add(ElementValue.ToCFXWideString()); - } - } - else - { - CFX_WideString swValue; - vp >> swValue; + if (m_bDelay) { + AddDelay_WideStringArray(FP_VALUE, strArray); + } else { + Field::SetValue(m_pDocument, m_FieldName, m_nFormControlIndex, strArray); + } + } else { + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - strArray.Add(swValue); - } + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (m_bDelay) - { - AddDelay_WideStringArray(FP_VALUE, strArray); - } - else - { - Field::SetValue(m_pDocument, m_FieldName, m_nFormControlIndex, strArray); - } - } - else - { - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; - - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); - - - - switch (pFormField->GetFieldType()) - { - case FIELDTYPE_PUSHBUTTON: - return FALSE; - case FIELDTYPE_COMBOBOX: - case FIELDTYPE_TEXTFIELD: - { - CFX_WideString swValue = pFormField->GetValue(); - - double dRet; - FX_BOOL bDot; - if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot)) - { - if (bDot) - vp << dRet; - else - vp << dRet; - } - else - vp << swValue; - } - break; - case FIELDTYPE_LISTBOX: - { - if (pFormField->CountSelectedItems() > 1) - { - CJS_Array ValueArray(m_isolate); - CJS_Value ElementValue(m_isolate); - int iIndex; - for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) - { - iIndex = pFormField->GetSelectedIndex(i); - ElementValue = pFormField->GetOptionValue(iIndex).c_str(); - if (FXSYS_wcslen(ElementValue.ToCFXWideString().c_str()) == 0) - ElementValue = pFormField->GetOptionLabel(iIndex).c_str(); - ValueArray.SetElement(i, ElementValue); - } - vp << ValueArray; - } - else - { - CFX_WideString swValue = pFormField->GetValue(); - - double dRet; - FX_BOOL bDot; - if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot)) - { - if (bDot) - vp << dRet; - else - vp << dRet; - } - else - vp << swValue; - } - } - break; - case FIELDTYPE_CHECKBOX: - case FIELDTYPE_RADIOBUTTON: - { - FX_BOOL bFind = FALSE; - for (int i = 0 , sz = pFormField->CountControls(); i < sz; i++) - { - if (pFormField->GetControl(i)->IsChecked()) - { - CFX_WideString swValue = pFormField->GetControl(i)->GetExportValue(); - double dRet; - FX_BOOL bDot; - if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot)) - { - if (bDot) - vp << dRet; - else - vp << dRet; - } - else - vp << swValue; - - bFind = TRUE; - break; - } - else - continue; - } - if (!bFind) - vp << L"Off"; - } - break; - default: - vp << pFormField->GetValue(); + switch (pFormField->GetFieldType()) { + case FIELDTYPE_PUSHBUTTON: + return FALSE; + case FIELDTYPE_COMBOBOX: + case FIELDTYPE_TEXTFIELD: { + CFX_WideString swValue = pFormField->GetValue(); + + double dRet; + FX_BOOL bDot; + if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, + bDot)) { + if (bDot) + vp << dRet; + else + vp << dRet; + } else + vp << swValue; + } break; + case FIELDTYPE_LISTBOX: { + if (pFormField->CountSelectedItems() > 1) { + CJS_Array ValueArray(m_isolate); + CJS_Value ElementValue(m_isolate); + int iIndex; + for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) { + iIndex = pFormField->GetSelectedIndex(i); + ElementValue = pFormField->GetOptionValue(iIndex).c_str(); + if (FXSYS_wcslen(ElementValue.ToCFXWideString().c_str()) == 0) + ElementValue = pFormField->GetOptionLabel(iIndex).c_str(); + ValueArray.SetElement(i, ElementValue); + } + vp << ValueArray; + } else { + CFX_WideString swValue = pFormField->GetValue(); + + double dRet; + FX_BOOL bDot; + if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, + bDot)) { + if (bDot) + vp << dRet; + else + vp << dRet; + } else + vp << swValue; + } + } break; + case FIELDTYPE_CHECKBOX: + case FIELDTYPE_RADIOBUTTON: { + FX_BOOL bFind = FALSE; + for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { + if (pFormField->GetControl(i)->IsChecked()) { + CFX_WideString swValue = + pFormField->GetControl(i)->GetExportValue(); + double dRet; + FX_BOOL bDot; + if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, + bDot)) { + if (bDot) + vp << dRet; + else + vp << dRet; + } else + vp << swValue; + + bFind = TRUE; break; + } else + continue; } + if (!bFind) + vp << L"Off"; + } break; + default: + vp << pFormField->GetValue(); + break; } + } - return TRUE; + return TRUE; } -void Field::SetValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, - int nControlIndex, const CJS_WideStringArray& strArray) -{ - ASSERT(pDocument != NULL); +void Field::SetValue(CPDFSDK_Document* pDocument, + const CFX_WideString& swFieldName, + int nControlIndex, + const CJS_WideStringArray& strArray) { + ASSERT(pDocument != NULL); - if (strArray.GetSize() < 1) return; + if (strArray.GetSize() < 1) + return; + + CFX_PtrArray FieldArray; + GetFormFields(pDocument, swFieldName, FieldArray); + + for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i); + ASSERT(pFormField != NULL); + + if (pFormField->GetFullName().Compare(swFieldName) != 0) + continue; + + switch (pFormField->GetFieldType()) { + case FIELDTYPE_TEXTFIELD: + case FIELDTYPE_COMBOBOX: + if (pFormField->GetValue() != strArray.GetAt(0)) { + CFX_WideString WideString = strArray.GetAt(0); + pFormField->SetValue(strArray.GetAt(0), TRUE); + UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE); + } + break; + case FIELDTYPE_CHECKBOX: // mantis: 0004493 + case FIELDTYPE_RADIOBUTTON: { + if (pFormField->GetValue() != strArray.GetAt(0)) { + pFormField->SetValue(strArray.GetAt(0), TRUE); + UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE); + } + } break; + case FIELDTYPE_LISTBOX: { + FX_BOOL bModified = FALSE; - CFX_PtrArray FieldArray; - GetFormFields(pDocument, swFieldName, FieldArray); + for (int i = 0, sz = strArray.GetSize(); i < sz; i++) { + int iIndex = pFormField->FindOption(strArray.GetAt(i)); - for (int i=0,isz=FieldArray.GetSize(); iIsItemSelected(iIndex)) { + bModified = TRUE; + break; + } + } - if (pFormField->GetFullName().Compare(swFieldName) != 0) - continue; + if (bModified) { + pFormField->ClearSelection(TRUE); + for (int i = 0, sz = strArray.GetSize(); i < sz; i++) { + int iIndex = pFormField->FindOption(strArray.GetAt(i)); + pFormField->SetItemSelection(iIndex, TRUE, TRUE); + } - switch (pFormField->GetFieldType()) - { - case FIELDTYPE_TEXTFIELD: - case FIELDTYPE_COMBOBOX: - if (pFormField->GetValue() != strArray.GetAt(0)) - { - CFX_WideString WideString = strArray.GetAt(0); - pFormField->SetValue(strArray.GetAt(0), TRUE); - UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE); - } - break; - case FIELDTYPE_CHECKBOX: //mantis: 0004493 - case FIELDTYPE_RADIOBUTTON: - { - if (pFormField->GetValue() != strArray.GetAt(0)) - { - pFormField->SetValue(strArray.GetAt(0), TRUE); - UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE); - } - } - break; - case FIELDTYPE_LISTBOX: - { - FX_BOOL bModified = FALSE; - - for (int i=0,sz=strArray.GetSize(); iFindOption(strArray.GetAt(i)); - - if (!pFormField->IsItemSelected(iIndex)) - { - bModified = TRUE; - break; - } - } - - if (bModified) - { - pFormField->ClearSelection(TRUE); - for (int i=0,sz=strArray.GetSize(); iFindOption(strArray.GetAt(i)); - pFormField->SetItemSelection(iIndex, TRUE, TRUE); - } - - UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE); - } - } - break; - default: - break; + UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE); } + } break; + default: + break; } + } } -FX_BOOL Field::valueAsString(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::valueAsString(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (!vp.IsGetting()) return FALSE; + if (!vp.IsGetting()) + return FALSE; - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON) - return FALSE; + if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON) + return FALSE; - if (pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) - { - if(!pFormField->CountControls()) return FALSE; + if (pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) { + if (!pFormField->CountControls()) + return FALSE; - if (pFormField->GetControl(0)->IsChecked()) - vp << L"Yes"; - else - vp << L"Off"; - } - else if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON && !(pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON)) - { - for (int i=0, sz=pFormField->CountControls(); iGetControl(i)->IsChecked()) - { - vp << pFormField->GetControl(i)->GetExportValue().c_str(); - break; - } - else - vp << L"Off"; - } - } - else if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX && (pFormField->CountSelectedItems() > 1)) - { - vp << L""; - } + if (pFormField->GetControl(0)->IsChecked()) + vp << L"Yes"; else - vp << pFormField->GetValue().c_str(); + vp << L"Off"; + } else if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON && + !(pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON)) { + for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { + if (pFormField->GetControl(i)->IsChecked()) { + vp << pFormField->GetControl(i)->GetExportValue().c_str(); + break; + } else + vp << L"Off"; + } + } else if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX && + (pFormField->CountSelectedItems() > 1)) { + vp << L""; + } else + vp << pFormField->GetValue().c_str(); - return TRUE; + return TRUE; } -/* --------------------------------- methods --------------------------------- */ +/* --------------------------------- methods --------------------------------- + */ -FX_BOOL Field::browseForFileToSubmit(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::browseForFileToSubmit(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName, FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - CPDFDoc_Environment* pApp = m_pDocument->GetEnv(); - ASSERT(pApp != NULL); + CPDFDoc_Environment* pApp = m_pDocument->GetEnv(); + ASSERT(pApp != NULL); - if ((pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT) && - (pFormField->GetFieldType() == FIELDTYPE_TEXTFIELD)) - { - CFX_WideString wsFileName = pApp->JS_fieldBrowse(); - if(!wsFileName.IsEmpty()) - { - pFormField->SetValue(wsFileName); - UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE); - } + if ((pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT) && + (pFormField->GetFieldType() == FIELDTYPE_TEXTFIELD)) { + CFX_WideString wsFileName = pApp->JS_fieldBrowse(); + if (!wsFileName.IsEmpty()) { + pFormField->SetValue(wsFileName); + UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE); } - else - return FALSE; + } else + return FALSE; - return TRUE; + return TRUE; } +FX_BOOL Field::buttonGetCaption(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); -FX_BOOL Field::buttonGetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - int nface = 0; - int iSize = params.size(); - if (iSize >= 1) - nface = params[0].ToInt(); + int nface = 0; + int iSize = params.size(); + if (iSize >= 1) + nface = params[0].ToInt(); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) + return FALSE; - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - if (nface == 0) - vRet = pFormControl->GetNormalCaption().c_str(); - else if (nface == 1) - vRet = pFormControl->GetDownCaption().c_str(); - else if (nface == 2) - vRet = pFormControl->GetRolloverCaption().c_str(); - else - return FALSE; + if (nface == 0) + vRet = pFormControl->GetNormalCaption().c_str(); + else if (nface == 1) + vRet = pFormControl->GetDownCaption().c_str(); + else if (nface == 2) + vRet = pFormControl->GetRolloverCaption().c_str(); + else + return FALSE; - return TRUE; + return TRUE; } //#pragma warning(disable: 4800) -FX_BOOL Field::buttonGetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::buttonGetIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - int nface = 0; - int iSize = params.size(); - if (iSize >= 1) - nface = params[0].ToInt(); + int nface = 0; + int iSize = params.size(); + if (iSize >= 1) + nface = params[0].ToInt(); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) - return FALSE; + if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON) + return FALSE; - CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); - if (!pFormControl)return FALSE; + CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField); + if (!pFormControl) + return FALSE; - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); - JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Icon")); - ASSERT(pObj.IsEmpty() == FALSE); + JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, + JS_GetObjDefnID(*pRuntime, L"Icon")); + ASSERT(pObj.IsEmpty() == FALSE); - CJS_Icon* pJS_Icon = (CJS_Icon*)JS_GetPrivate(pObj); - ASSERT(pJS_Icon != NULL); + CJS_Icon* pJS_Icon = (CJS_Icon*)JS_GetPrivate(pObj); + ASSERT(pJS_Icon != NULL); - Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject(); - ASSERT(pIcon != NULL); + Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject(); + ASSERT(pIcon != NULL); - CPDF_Stream* pIconStream = NULL; - if (nface == 0) - pIconStream = pFormControl->GetNormalIcon(); - else if (nface == 1) - pIconStream = pFormControl->GetDownIcon(); - else if (nface == 2) - pIconStream = pFormControl->GetRolloverIcon(); - else - return FALSE; + CPDF_Stream* pIconStream = NULL; + if (nface == 0) + pIconStream = pFormControl->GetNormalIcon(); + else if (nface == 1) + pIconStream = pFormControl->GetDownIcon(); + else if (nface == 2) + pIconStream = pFormControl->GetRolloverIcon(); + else + return FALSE; - pIcon->SetStream(pIconStream); - vRet = pJS_Icon; + pIcon->SetStream(pIconStream); + vRet = pJS_Icon; - return TRUE; + return TRUE; } //#pragma warning(default: 4800) -FX_BOOL Field::buttonImportIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL Field::buttonImportIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { #if 0 ASSERT(m_pDocument != NULL); @@ -3497,620 +3384,681 @@ FX_BOOL Field::buttonImportIcon(IFXJS_Context* cc, const CJS_Parameters& params, UpdateFormControl(m_pDocument, pFormControl, TRUE, TRUE, TRUE); vRet = 0; -#endif // 0 - return TRUE; +#endif // 0 + return TRUE; } -FX_BOOL Field::buttonSetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; +FX_BOOL Field::buttonSetCaption(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; } -FX_BOOL Field::buttonSetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; +FX_BOOL Field::buttonSetIcon(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; } -FX_BOOL Field::checkThisBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::checkThisBox(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - if (!m_bCanSet) return FALSE; + if (!m_bCanSet) + return FALSE; - int iSize = params.size(); - if (iSize < 1) - return FALSE; + int iSize = params.size(); + if (iSize < 1) + return FALSE; - int nWidget = params[0].ToInt(); + int nWidget = params[0].ToInt(); - FX_BOOL bCheckit = TRUE; - if (iSize >= 2) - bCheckit = params[1].ToBool(); + FX_BOOL bCheckit = TRUE; + if (iSize >= 2) + bCheckit = params[1].ToBool(); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX && pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON) - return FALSE; - if(nWidget <0 || nWidget >= pFormField->CountControls()) - return FALSE; - if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON) - pFormField->CheckControl(nWidget, bCheckit, TRUE); - else - pFormField->CheckControl(nWidget, bCheckit, TRUE); + if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX && + pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON) + return FALSE; + if (nWidget < 0 || nWidget >= pFormField->CountControls()) + return FALSE; + if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON) + pFormField->CheckControl(nWidget, bCheckit, TRUE); + else + pFormField->CheckControl(nWidget, bCheckit, TRUE); - UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE); - return TRUE; + UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE); + return TRUE; } -FX_BOOL Field::clearItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Field::clearItems(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Field::defaultIsChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - if (!m_bCanSet) return FALSE; +FX_BOOL Field::defaultIsChecked(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - int iSize = params.size(); - if (iSize < 1) - return FALSE; + if (!m_bCanSet) + return FALSE; - int nWidget = params[0].ToInt(); + int iSize = params.size(); + if (iSize < 1) + return FALSE; - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + int nWidget = params[0].ToInt(); - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - if(nWidget <0 || nWidget >= pFormField->CountControls()) - { - vRet = FALSE; - return FALSE; - } - if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) - || (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) - { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - vRet = TRUE; - } - else - vRet = FALSE; + if (nWidget < 0 || nWidget >= pFormField->CountControls()) { + vRet = FALSE; + return FALSE; + } + if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) || + (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) { + vRet = TRUE; + } else + vRet = FALSE; - return TRUE; + return TRUE; } -FX_BOOL Field::deleteItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Field::deleteItemAt(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -int JS_COMPARESTRING(CFX_WideString* ps1, CFX_WideString* ps2) -{ - ASSERT(ps1 != NULL); - ASSERT(ps2 != NULL); +int JS_COMPARESTRING(CFX_WideString* ps1, CFX_WideString* ps2) { + ASSERT(ps1 != NULL); + ASSERT(ps2 != NULL); - return ps1->Compare(*ps2); + return ps1->Compare(*ps2); } +FX_BOOL Field::getArray(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); -FX_BOOL Field::getArray(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; - - CGW_ArrayTemplate swSort; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - for (int i=0,sz=FieldArray.GetSize(); i swSort; - swSort.Add(new CFX_WideString(pFormField->GetFullName())); + for (int i = 0, sz = FieldArray.GetSize(); i < sz; i++) { + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i); + ASSERT(pFormField != NULL); - } - swSort.Sort(JS_COMPARESTRING); + swSort.Add(new CFX_WideString(pFormField->GetFullName())); + } + swSort.Sort(JS_COMPARESTRING); - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); - CJS_Array FormFieldArray(m_isolate); - for (int j=0,jsz = swSort.GetSize(); jGetEmbedObject(); - ASSERT(pField != NULL); + Field* pField = (Field*)pJSField->GetEmbedObject(); + ASSERT(pField != NULL); - pField->AttachField(m_pJSDoc, *pStr); + pField->AttachField(m_pJSDoc, *pStr); - CJS_Value FormFieldValue(m_isolate); - FormFieldValue = pJSField; - FormFieldArray.SetElement(j, FormFieldValue); + CJS_Value FormFieldValue(m_isolate); + FormFieldValue = pJSField; + FormFieldArray.SetElement(j, FormFieldValue); - delete pStr; - } + delete pStr; + } - vRet = FormFieldArray; - swSort.RemoveAll(); - return TRUE; + vRet = FormFieldArray; + swSort.RemoveAll(); + return TRUE; } -FX_BOOL Field::getItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - int iSize = params.size(); - - int nIdx = -1; - if (iSize >= 1) - nIdx = params[0].ToInt(); +FX_BOOL Field::getItemAt(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); + int iSize = params.size(); - FX_BOOL bExport = TRUE; - if (iSize >= 2) - bExport = params[1].ToBool(); + int nIdx = -1; + if (iSize >= 1) + nIdx = params[0].ToInt(); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + FX_BOOL bExport = TRUE; + if (iSize >= 2) + bExport = params[1].ToBool(); - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - if ((pFormField->GetFieldType() == FIELDTYPE_LISTBOX) - || (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX)) - { - if (nIdx == -1 || nIdx > pFormField->CountOptions()) - nIdx = pFormField->CountOptions() -1; - if (bExport) - { - CFX_WideString strval = pFormField->GetOptionValue(nIdx); - if (strval.IsEmpty()) - vRet = pFormField->GetOptionLabel(nIdx).c_str(); - else - vRet = strval.c_str(); - } - else - vRet = pFormField->GetOptionLabel(nIdx).c_str(); - } - else - return FALSE; + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); + + if ((pFormField->GetFieldType() == FIELDTYPE_LISTBOX) || + (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX)) { + if (nIdx == -1 || nIdx > pFormField->CountOptions()) + nIdx = pFormField->CountOptions() - 1; + if (bExport) { + CFX_WideString strval = pFormField->GetOptionValue(nIdx); + if (strval.IsEmpty()) + vRet = pFormField->GetOptionLabel(nIdx).c_str(); + else + vRet = strval.c_str(); + } else + vRet = pFormField->GetOptionLabel(nIdx).c_str(); + } else + return FALSE; - return TRUE; + return TRUE; } -FX_BOOL Field::getLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; +FX_BOOL Field::getLock(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; } -FX_BOOL Field::insertItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Field::insertItemAt(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Field::isBoxChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::isBoxChecked(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - int nIndex = -1; - if (params.size() >= 1) - nIndex = params[0].ToInt(); + int nIndex = -1; + if (params.size() >= 1) + nIndex = params[0].ToInt(); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if(nIndex <0 || nIndex >= pFormField->CountControls()) - { - vRet = FALSE; - return FALSE; - } + if (nIndex < 0 || nIndex >= pFormField->CountControls()) { + vRet = FALSE; + return FALSE; + } - if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) - || (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) - { - if (pFormField->GetControl(nIndex)->IsChecked() !=0 ) - vRet = TRUE; - else - vRet = FALSE; - } + if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) || + (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) { + if (pFormField->GetControl(nIndex)->IsChecked() != 0) + vRet = TRUE; else - vRet = FALSE; + vRet = FALSE; + } else + vRet = FALSE; - return TRUE; + return TRUE; } -FX_BOOL Field::isDefaultChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); +FX_BOOL Field::isDefaultChecked(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); - int nIndex = -1; - if (params.size() >= 1) - nIndex = params[0].ToInt(); + int nIndex = -1; + if (params.size() >= 1) + nIndex = params[0].ToInt(); - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) + return FALSE; - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); - if(nIndex <0 || nIndex >= pFormField->CountControls()) - { - vRet = FALSE; - return FALSE; - } - if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) - || (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) - { - if (pFormField->GetControl(nIndex)->IsDefaultChecked() != 0) - vRet = TRUE; - else - vRet = FALSE; - } + if (nIndex < 0 || nIndex >= pFormField->CountControls()) { + vRet = FALSE; + return FALSE; + } + if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) || + (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) { + if (pFormField->GetControl(nIndex)->IsDefaultChecked() != 0) + vRet = TRUE; else - vRet = FALSE; + vRet = FALSE; + } else + vRet = FALSE; - return TRUE; + return TRUE; } -FX_BOOL Field::setAction(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL Field::setAction(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Field::setFocus(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - ASSERT(m_pDocument != NULL); - - CFX_PtrArray FieldArray; - GetFormFields(m_FieldName,FieldArray); - if (FieldArray.GetSize() <= 0) return FALSE; - - CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); - ASSERT(pFormField != NULL); - - int32_t nCount = pFormField->CountControls(); - - if (nCount < 1) return FALSE; - - CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); - ASSERT(pInterForm != NULL); - - CPDFSDK_Widget* pWidget = NULL; - if (nCount == 1) - { - pWidget = pInterForm->GetWidget(pFormField->GetControl(0)); - } - else - { - CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); - ASSERT(pEnv); - CPDFXFA_Page* pPage = (CPDFXFA_Page*)pEnv->FFI_GetCurrentPage(m_pDocument->GetDocument()); - if(!pPage) - return FALSE; - if (CPDFSDK_PageView* pCurPageView = m_pDocument->GetPageView(pPage)) - { - for (int32_t i=0; iGetWidget(pFormField->GetControl(i))) - { - if (pTempWidget->GetPDFPage() == pCurPageView->GetPDFPage()) - { - pWidget = pTempWidget; - break; - } - } - } - } - } - - if (pWidget) - { - m_pDocument->SetFocusAnnot(pWidget); - } - - return TRUE; -} - -FX_BOOL Field::setItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; -} +FX_BOOL Field::setFocus(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + ASSERT(m_pDocument != NULL); -FX_BOOL Field::setLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ + CFX_PtrArray FieldArray; + GetFormFields(m_FieldName, FieldArray); + if (FieldArray.GetSize() <= 0) return FALSE; -} -FX_BOOL Field::signatureGetModifications(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ + CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0); + ASSERT(pFormField != NULL); + + int32_t nCount = pFormField->CountControls(); + + if (nCount < 1) return FALSE; + + CPDFSDK_InterForm* pInterForm = + (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); + ASSERT(pInterForm != NULL); + + CPDFSDK_Widget* pWidget = NULL; + if (nCount == 1) { + pWidget = pInterForm->GetWidget(pFormField->GetControl(0)); + } else { + CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); + ASSERT(pEnv); + CPDFXFA_Page* pPage = + (CPDFXFA_Page*)pEnv->FFI_GetCurrentPage(m_pDocument->GetDocument()); + if (!pPage) + return FALSE; + if (CPDFSDK_PageView* pCurPageView = m_pDocument->GetPageView(pPage)) { + for (int32_t i = 0; i < nCount; i++) { + if (CPDFSDK_Widget* pTempWidget = + pInterForm->GetWidget(pFormField->GetControl(i))) { + if (pTempWidget->GetPDFPage() == pCurPageView->GetPDFPage()) { + pWidget = pTempWidget; + break; + } + } + } + } + } + + if (pWidget) { + m_pDocument->SetFocusAnnot(pWidget); + } + + return TRUE; } -FX_BOOL Field::signatureGetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; +FX_BOOL Field::setItems(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL Field::signatureInfo(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; +FX_BOOL Field::setLock(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; } -FX_BOOL Field::signatureSetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; +FX_BOOL Field::signatureGetModifications(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; } -FX_BOOL Field::signatureSign(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; +FX_BOOL Field::signatureGetSeedValue(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; } -FX_BOOL Field::signatureValidate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; +FX_BOOL Field::signatureInfo(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; } -FX_BOOL Field::source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsGetting()) - { - vp << (CJS_Object*)NULL; - } +FX_BOOL Field::signatureSetSeedValue(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; +} - return TRUE; +FX_BOOL Field::signatureSign(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; +} + +FX_BOOL Field::signatureValidate(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; } -/////////////////////////////////////////// delay ///////////////////////////////////////////// +FX_BOOL Field::source(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsGetting()) { + vp << (CJS_Object*)NULL; + } -void Field::AddDelay_Int(enum FIELD_PROP prop, int32_t n) -{ - ASSERT(m_pJSDoc != NULL); + return TRUE; +} + +/////////////////////////////////////////// delay +//////////////////////////////////////////////// - CJS_DelayData* pNewData = new CJS_DelayData; - pNewData->sFieldName = m_FieldName; - pNewData->nControlIndex = m_nFormControlIndex; - pNewData->eProp = prop; - pNewData->num = n; +void Field::AddDelay_Int(enum FIELD_PROP prop, int32_t n) { + ASSERT(m_pJSDoc != NULL); - m_pJSDoc->AddDelayData(pNewData); + CJS_DelayData* pNewData = new CJS_DelayData; + pNewData->sFieldName = m_FieldName; + pNewData->nControlIndex = m_nFormControlIndex; + pNewData->eProp = prop; + pNewData->num = n; + + m_pJSDoc->AddDelayData(pNewData); } -void Field::AddDelay_Bool(enum FIELD_PROP prop,bool b) -{ - ASSERT(m_pJSDoc != NULL); +void Field::AddDelay_Bool(enum FIELD_PROP prop, bool b) { + ASSERT(m_pJSDoc != NULL); - CJS_DelayData* pNewData = new CJS_DelayData; - pNewData->sFieldName = m_FieldName; - pNewData->nControlIndex = m_nFormControlIndex; - pNewData->eProp = prop; - pNewData->b = b; + CJS_DelayData* pNewData = new CJS_DelayData; + pNewData->sFieldName = m_FieldName; + pNewData->nControlIndex = m_nFormControlIndex; + pNewData->eProp = prop; + pNewData->b = b; - m_pJSDoc->AddDelayData(pNewData); + m_pJSDoc->AddDelayData(pNewData); } -void Field::AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string) -{ - ASSERT(m_pJSDoc != NULL); +void Field::AddDelay_String(enum FIELD_PROP prop, + const CFX_ByteString& string) { + ASSERT(m_pJSDoc != NULL); - CJS_DelayData* pNewData = new CJS_DelayData; - pNewData->sFieldName = m_FieldName; - pNewData->nControlIndex = m_nFormControlIndex; - pNewData->eProp = prop; - pNewData->string = string; + CJS_DelayData* pNewData = new CJS_DelayData; + pNewData->sFieldName = m_FieldName; + pNewData->nControlIndex = m_nFormControlIndex; + pNewData->eProp = prop; + pNewData->string = string; - m_pJSDoc->AddDelayData(pNewData); + m_pJSDoc->AddDelayData(pNewData); } -void Field::AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string) -{ - ASSERT(m_pJSDoc != NULL); +void Field::AddDelay_WideString(enum FIELD_PROP prop, + const CFX_WideString& string) { + ASSERT(m_pJSDoc != NULL); - CJS_DelayData* pNewData = new CJS_DelayData; - pNewData->sFieldName = m_FieldName; - pNewData->nControlIndex = m_nFormControlIndex; - pNewData->eProp = prop; - pNewData->widestring = string; + CJS_DelayData* pNewData = new CJS_DelayData; + pNewData->sFieldName = m_FieldName; + pNewData->nControlIndex = m_nFormControlIndex; + pNewData->eProp = prop; + pNewData->widestring = string; - m_pJSDoc->AddDelayData(pNewData); + m_pJSDoc->AddDelayData(pNewData); } -void Field::AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect) -{ - ASSERT(m_pJSDoc != NULL); +void Field::AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect) { + ASSERT(m_pJSDoc != NULL); - CJS_DelayData* pNewData = new CJS_DelayData; - pNewData->sFieldName = m_FieldName; - pNewData->nControlIndex = m_nFormControlIndex; - pNewData->eProp = prop; - pNewData->rect = rect; + CJS_DelayData* pNewData = new CJS_DelayData; + pNewData->sFieldName = m_FieldName; + pNewData->nControlIndex = m_nFormControlIndex; + pNewData->eProp = prop; + pNewData->rect = rect; - m_pJSDoc->AddDelayData(pNewData); + m_pJSDoc->AddDelayData(pNewData); } -void Field::AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color) -{ - ASSERT(m_pJSDoc != NULL); +void Field::AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color) { + ASSERT(m_pJSDoc != NULL); - CJS_DelayData* pNewData = new CJS_DelayData; - pNewData->sFieldName = m_FieldName; - pNewData->nControlIndex = m_nFormControlIndex; - pNewData->eProp = prop; - pNewData->color = color; + CJS_DelayData* pNewData = new CJS_DelayData; + pNewData->sFieldName = m_FieldName; + pNewData->nControlIndex = m_nFormControlIndex; + pNewData->eProp = prop; + pNewData->color = color; - m_pJSDoc->AddDelayData(pNewData); + m_pJSDoc->AddDelayData(pNewData); } -void Field::AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array) -{ - ASSERT(m_pJSDoc != NULL); +void Field::AddDelay_WordArray(enum FIELD_PROP prop, + const CFX_DWordArray& array) { + ASSERT(m_pJSDoc != NULL); - CJS_DelayData* pNewData = new CJS_DelayData; - pNewData->sFieldName = m_FieldName; - pNewData->nControlIndex = m_nFormControlIndex; - pNewData->eProp = prop; + CJS_DelayData* pNewData = new CJS_DelayData; + pNewData->sFieldName = m_FieldName; + pNewData->nControlIndex = m_nFormControlIndex; + pNewData->eProp = prop; - for (int i=0,sz=array.GetSize(); iwordarray.Add(array.GetAt(i)); + for (int i = 0, sz = array.GetSize(); i < sz; i++) + pNewData->wordarray.Add(array.GetAt(i)); - m_pJSDoc->AddDelayData(pNewData); + m_pJSDoc->AddDelayData(pNewData); } -void Field::AddDelay_WideStringArray(enum FIELD_PROP prop, const CJS_WideStringArray& array) -{ - ASSERT(m_pJSDoc != NULL); +void Field::AddDelay_WideStringArray(enum FIELD_PROP prop, + const CJS_WideStringArray& array) { + ASSERT(m_pJSDoc != NULL); - CJS_DelayData* pNewData = new CJS_DelayData; - pNewData->sFieldName = m_FieldName; - pNewData->nControlIndex = m_nFormControlIndex; - pNewData->eProp = prop; - for (int i=0,sz=array.GetSize(); iwidestringarray.Add(array.GetAt(i)); + CJS_DelayData* pNewData = new CJS_DelayData; + pNewData->sFieldName = m_FieldName; + pNewData->nControlIndex = m_nFormControlIndex; + pNewData->eProp = prop; + for (int i = 0, sz = array.GetSize(); i < sz; i++) + pNewData->widestringarray.Add(array.GetAt(i)); - m_pJSDoc->AddDelayData(pNewData); + m_pJSDoc->AddDelayData(pNewData); } -void Field::DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData) -{ - ASSERT(pDocument != NULL); - ASSERT(pData != NULL); +void Field::DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData) { + ASSERT(pDocument != NULL); + ASSERT(pData != NULL); - switch (pData->eProp) - { + switch (pData->eProp) { case FP_ALIGNMENT: - Field::SetAlignment(pDocument, pData->sFieldName, pData->nControlIndex, pData->string); - break; + Field::SetAlignment(pDocument, pData->sFieldName, pData->nControlIndex, + pData->string); + break; case FP_BORDERSTYLE: - Field::SetBorderStyle(pDocument, pData->sFieldName, pData->nControlIndex, pData->string); - break; + Field::SetBorderStyle(pDocument, pData->sFieldName, pData->nControlIndex, + pData->string); + break; case FP_BUTTONALIGNX: - Field::SetButtonAlignX(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetButtonAlignX(pDocument, pData->sFieldName, pData->nControlIndex, + pData->num); + break; case FP_BUTTONALIGNY: - Field::SetButtonAlignY(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetButtonAlignY(pDocument, pData->sFieldName, pData->nControlIndex, + pData->num); + break; case FP_BUTTONFITBOUNDS: - Field::SetButtonFitBounds(pDocument, pData->sFieldName, pData->nControlIndex, pData->b); - break; + Field::SetButtonFitBounds(pDocument, pData->sFieldName, + pData->nControlIndex, pData->b); + break; case FP_BUTTONPOSITION: - Field::SetButtonPosition(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetButtonPosition(pDocument, pData->sFieldName, + pData->nControlIndex, pData->num); + break; case FP_BUTTONSCALEHOW: - Field::SetButtonScaleHow(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetButtonScaleHow(pDocument, pData->sFieldName, + pData->nControlIndex, pData->num); + break; case FP_BUTTONSCALEWHEN: - Field::SetButtonScaleWhen(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetButtonScaleWhen(pDocument, pData->sFieldName, + pData->nControlIndex, pData->num); + break; case FP_CALCORDERINDEX: - Field::SetCalcOrderIndex(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetCalcOrderIndex(pDocument, pData->sFieldName, + pData->nControlIndex, pData->num); + break; case FP_CHARLIMIT: - Field::SetCharLimit(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetCharLimit(pDocument, pData->sFieldName, pData->nControlIndex, + pData->num); + break; case FP_COMB: - Field::SetComb(pDocument, pData->sFieldName, pData->nControlIndex, pData->b); - break; + Field::SetComb(pDocument, pData->sFieldName, pData->nControlIndex, + pData->b); + break; case FP_COMMITONSELCHANGE: - Field::SetCommitOnSelChange(pDocument, pData->sFieldName, pData->nControlIndex, pData->b); - break; + Field::SetCommitOnSelChange(pDocument, pData->sFieldName, + pData->nControlIndex, pData->b); + break; case FP_CURRENTVALUEINDICES: - Field::SetCurrentValueIndices(pDocument, pData->sFieldName, pData->nControlIndex, pData->wordarray); - break; + Field::SetCurrentValueIndices(pDocument, pData->sFieldName, + pData->nControlIndex, pData->wordarray); + break; case FP_DEFAULTVALUE: - Field::SetDefaultValue(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestring); - break; + Field::SetDefaultValue(pDocument, pData->sFieldName, pData->nControlIndex, + pData->widestring); + break; case FP_DONOTSCROLL: - Field::SetDoNotScroll(pDocument, pData->sFieldName, pData->nControlIndex, pData->b); - break; + Field::SetDoNotScroll(pDocument, pData->sFieldName, pData->nControlIndex, + pData->b); + break; case FP_DISPLAY: - Field::SetDisplay(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetDisplay(pDocument, pData->sFieldName, pData->nControlIndex, + pData->num); + break; case FP_FILLCOLOR: - Field::SetFillColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color); - break; + Field::SetFillColor(pDocument, pData->sFieldName, pData->nControlIndex, + pData->color); + break; case FP_HIDDEN: - Field::SetHidden(pDocument, pData->sFieldName, pData->nControlIndex, pData->b); - break; + Field::SetHidden(pDocument, pData->sFieldName, pData->nControlIndex, + pData->b); + break; case FP_HIGHLIGHT: - Field::SetHighlight(pDocument, pData->sFieldName, pData->nControlIndex, pData->string); - break; + Field::SetHighlight(pDocument, pData->sFieldName, pData->nControlIndex, + pData->string); + break; case FP_LINEWIDTH: - Field::SetLineWidth(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetLineWidth(pDocument, pData->sFieldName, pData->nControlIndex, + pData->num); + break; case FP_MULTILINE: - Field::SetMultiline(pDocument, pData->sFieldName, pData->nControlIndex, pData->b); - break; + Field::SetMultiline(pDocument, pData->sFieldName, pData->nControlIndex, + pData->b); + break; case FP_MULTIPLESELECTION: - Field::SetMultipleSelection(pDocument, pData->sFieldName, pData->nControlIndex, pData->b); - break; + Field::SetMultipleSelection(pDocument, pData->sFieldName, + pData->nControlIndex, pData->b); + break; case FP_PASSWORD: - Field::SetPassword(pDocument, pData->sFieldName, pData->nControlIndex, pData->b); - break; + Field::SetPassword(pDocument, pData->sFieldName, pData->nControlIndex, + pData->b); + break; case FP_RECT: - Field::SetRect(pDocument, pData->sFieldName, pData->nControlIndex, pData->rect); - break; + Field::SetRect(pDocument, pData->sFieldName, pData->nControlIndex, + pData->rect); + break; case FP_RICHTEXT: - Field::SetRichText(pDocument, pData->sFieldName, pData->nControlIndex, pData->b); - break; + Field::SetRichText(pDocument, pData->sFieldName, pData->nControlIndex, + pData->b); + break; case FP_RICHVALUE: - break; + break; case FP_ROTATION: - Field::SetRotation(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetRotation(pDocument, pData->sFieldName, pData->nControlIndex, + pData->num); + break; case FP_STROKECOLOR: - Field::SetStrokeColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color); - break; + Field::SetStrokeColor(pDocument, pData->sFieldName, pData->nControlIndex, + pData->color); + break; case FP_STYLE: - Field::SetStyle(pDocument, pData->sFieldName, pData->nControlIndex, pData->string); - break; + Field::SetStyle(pDocument, pData->sFieldName, pData->nControlIndex, + pData->string); + break; case FP_TEXTCOLOR: - Field::SetTextColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color); - break; + Field::SetTextColor(pDocument, pData->sFieldName, pData->nControlIndex, + pData->color); + break; case FP_TEXTFONT: - Field::SetTextFont(pDocument, pData->sFieldName, pData->nControlIndex, pData->string); - break; + Field::SetTextFont(pDocument, pData->sFieldName, pData->nControlIndex, + pData->string); + break; case FP_TEXTSIZE: - Field::SetTextSize(pDocument, pData->sFieldName, pData->nControlIndex, pData->num); - break; + Field::SetTextSize(pDocument, pData->sFieldName, pData->nControlIndex, + pData->num); + break; case FP_USERNAME: - Field::SetUserName(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestring); - break; + Field::SetUserName(pDocument, pData->sFieldName, pData->nControlIndex, + pData->widestring); + break; case FP_VALUE: - Field::SetValue(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestringarray); - break; - } + Field::SetValue(pDocument, pData->sFieldName, pData->nControlIndex, + pData->widestringarray); + break; + } } -#define JS_FIELD_MINWIDTH 1 -#define JS_FIELD_MINHEIGHT 1 +#define JS_FIELD_MINWIDTH 1 +#define JS_FIELD_MINHEIGHT 1 -void Field::AddField(CPDFSDK_Document* pDocument, int nPageIndex, int nFieldType, - const CFX_WideString& sName, const CPDF_Rect& rcCoords) -{ - //Not supported. +void Field::AddField(CPDFSDK_Document* pDocument, + int nPageIndex, + int nFieldType, + const CFX_WideString& sName, + const CPDF_Rect& rcCoords) { + // Not supported. } - diff --git a/fpdfsdk/src/javascript/Icon.cpp b/fpdfsdk/src/javascript/Icon.cpp index 6b3e02e1ec..0e96a05e5e 100644 --- a/fpdfsdk/src/javascript/Icon.cpp +++ b/fpdfsdk/src/javascript/Icon.cpp @@ -17,51 +17,42 @@ BEGIN_JS_STATIC_CONST(CJS_Icon) END_JS_STATIC_CONST() BEGIN_JS_STATIC_PROP(CJS_Icon) - JS_STATIC_PROP_ENTRY(name) +JS_STATIC_PROP_ENTRY(name) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_Icon) END_JS_STATIC_METHOD() -IMPLEMENT_JS_CLASS(CJS_Icon,Icon) +IMPLEMENT_JS_CLASS(CJS_Icon, Icon) -Icon::Icon(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject), - m_pIconStream(NULL), - m_swIconName(L"") -{ -} - -Icon::~Icon() -{ +Icon::Icon(CJS_Object* pJSObject) + : CJS_EmbedObj(pJSObject), m_pIconStream(NULL), m_swIconName(L"") {} -} +Icon::~Icon() {} -void Icon::SetStream(CPDF_Stream* pIconStream) -{ - if(pIconStream) - m_pIconStream = pIconStream; +void Icon::SetStream(CPDF_Stream* pIconStream) { + if (pIconStream) + m_pIconStream = pIconStream; } -CPDF_Stream* Icon::GetStream() -{ - return m_pIconStream; +CPDF_Stream* Icon::GetStream() { + return m_pIconStream; } -void Icon::SetIconName(CFX_WideString name) -{ - m_swIconName = name; +void Icon::SetIconName(CFX_WideString name) { + m_swIconName = name; } -CFX_WideString Icon::GetIconName() -{ - return m_swIconName; +CFX_WideString Icon::GetIconName() { + return m_swIconName; } -FX_BOOL Icon::name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if(!vp.IsGetting())return FALSE; +FX_BOOL Icon::name(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; - vp << m_swIconName; - return TRUE; + vp << m_swIconName; + return TRUE; } - diff --git a/fpdfsdk/src/javascript/JS_Context.cpp b/fpdfsdk/src/javascript/JS_Context.cpp index e789657469..9c142e6b1e 100644 --- a/fpdfsdk/src/javascript/JS_Context.cpp +++ b/fpdfsdk/src/javascript/JS_Context.cpp @@ -14,338 +14,346 @@ /* -------------------------- CJS_Context -------------------------- */ -CJS_Context::CJS_Context(CJS_Runtime* pRuntime) : - m_pRuntime(pRuntime), - m_bBusy(FALSE), - m_bMsgBoxEnable(TRUE) -{ - m_pEventHandler = new CJS_EventHandler(this); +CJS_Context::CJS_Context(CJS_Runtime* pRuntime) + : m_pRuntime(pRuntime), m_bBusy(FALSE), m_bMsgBoxEnable(TRUE) { + m_pEventHandler = new CJS_EventHandler(this); } -CJS_Context::~CJS_Context(void) -{ - delete m_pEventHandler; +CJS_Context::~CJS_Context(void) { + delete m_pEventHandler; } -CPDFSDK_Document* CJS_Context::GetReaderDocument() -{ - ASSERT(m_pRuntime != NULL); +CPDFSDK_Document* CJS_Context::GetReaderDocument() { + ASSERT(m_pRuntime != NULL); - return m_pRuntime->GetReaderDocument(); + return m_pRuntime->GetReaderDocument(); } -CPDFDoc_Environment* CJS_Context::GetReaderApp() -{ - ASSERT(m_pRuntime != NULL); +CPDFDoc_Environment* CJS_Context::GetReaderApp() { + ASSERT(m_pRuntime != NULL); - return m_pRuntime->GetReaderApp(); + return m_pRuntime->GetReaderApp(); } -FX_BOOL CJS_Context::DoJob(int nMode, const CFX_WideString& script, CFX_WideString& info) -{ - if (m_bBusy) - { - info = JSGetStringFromID(this, IDS_STRING_JSBUSY); - return FALSE; - } +FX_BOOL CJS_Context::DoJob(int nMode, + const CFX_WideString& script, + CFX_WideString& info) { + if (m_bBusy) { + info = JSGetStringFromID(this, IDS_STRING_JSBUSY); + return FALSE; + } - m_bBusy = TRUE; + m_bBusy = TRUE; - ASSERT(m_pRuntime != NULL); - ASSERT(m_pEventHandler != NULL); - ASSERT(m_pEventHandler->IsValid()); + ASSERT(m_pRuntime != NULL); + ASSERT(m_pEventHandler != NULL); + ASSERT(m_pEventHandler->IsValid()); - if (!m_pRuntime->AddEventToLoop(m_pEventHandler->TargetName(), m_pEventHandler->EventType())) - { - info = JSGetStringFromID(this, IDS_STRING_JSEVENT); - return FALSE; - } + if (!m_pRuntime->AddEventToLoop(m_pEventHandler->TargetName(), + m_pEventHandler->EventType())) { + info = JSGetStringFromID(this, IDS_STRING_JSEVENT); + return FALSE; + } - FXJSErr error ={NULL,NULL, 0}; - int nRet = 0; + FXJSErr error = {NULL, NULL, 0}; + int nRet = 0; - if (script.GetLength() > 0) - { - if (nMode == 0) - { - nRet = JS_Execute(*m_pRuntime, this, script.c_str(), script.GetLength(), &error); - } - else - { - nRet = JS_Parse(*m_pRuntime, this, script.c_str(), script.GetLength(), &error); - } - } + if (script.GetLength() > 0) { + if (nMode == 0) { + nRet = JS_Execute(*m_pRuntime, this, script.c_str(), script.GetLength(), + &error); + } else { + nRet = JS_Parse(*m_pRuntime, this, script.c_str(), script.GetLength(), + &error); + } + } - if (nRet < 0) - { - CFX_WideString sLine; - sLine.Format(L"[ Line: %05d { %s } ] : %s",error.linnum-1,error.srcline,error.message); + if (nRet < 0) { + CFX_WideString sLine; + sLine.Format(L"[ Line: %05d { %s } ] : %s", error.linnum - 1, error.srcline, + error.message); -// TRACE(L"/* -------------- JS Error -------------- */\n"); -// TRACE(sLine); -// TRACE(L"\n"); - //CFX_ByteString sTemp = CFX_ByteString::FromUnicode(error.message); - info += sLine; - } - else - { - info = JSGetStringFromID(this, IDS_STRING_RUN); - } + // TRACE(L"/* -------------- JS Error -------------- + //*/\n"); + // TRACE(sLine); + // TRACE(L"\n"); + // CFX_ByteString sTemp = CFX_ByteString::FromUnicode(error.message); + info += sLine; + } else { + info = JSGetStringFromID(this, IDS_STRING_RUN); + } - m_pRuntime->RemoveEventInLoop(m_pEventHandler->TargetName(), m_pEventHandler->EventType()); + m_pRuntime->RemoveEventInLoop(m_pEventHandler->TargetName(), + m_pEventHandler->EventType()); - m_pEventHandler->Destroy(); - m_bBusy = FALSE; + m_pEventHandler->Destroy(); + m_bBusy = FALSE; - return nRet >= 0; + return nRet >= 0; } -FX_BOOL CJS_Context::RunScript(const CFX_WideString& script, CFX_WideString& info) -{ - v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate()); - v8::Locker locker(m_pRuntime->GetIsolate()); - v8::HandleScope handle_scope(m_pRuntime->GetIsolate()); - v8::Local context = m_pRuntime->NewJSContext(); - v8::Context::Scope context_scope(context); +FX_BOOL CJS_Context::RunScript(const CFX_WideString& script, + CFX_WideString& info) { + v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate()); + v8::Locker locker(m_pRuntime->GetIsolate()); + v8::HandleScope handle_scope(m_pRuntime->GetIsolate()); + v8::Local context = m_pRuntime->NewJSContext(); + v8::Context::Scope context_scope(context); - return DoJob(0, script, info); + return DoJob(0, script, info); } -FX_BOOL CJS_Context::Compile(const CFX_WideString& script, CFX_WideString& info) -{ - v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate()); - v8::HandleScope handle_scope(m_pRuntime->GetIsolate()); - v8::Local context = m_pRuntime->NewJSContext(); - v8::Context::Scope context_scope(context); +FX_BOOL CJS_Context::Compile(const CFX_WideString& script, + CFX_WideString& info) { + v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate()); + v8::HandleScope handle_scope(m_pRuntime->GetIsolate()); + v8::Local context = m_pRuntime->NewJSContext(); + v8::Context::Scope context_scope(context); - return DoJob(1, script, info); + return DoJob(1, script, info); } -void CJS_Context::OnApp_Init() -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnApp_Init(); +void CJS_Context::OnApp_Init() { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnApp_Init(); } -void CJS_Context::OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString &strTargetName) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnDoc_Open(pDoc,strTargetName); +void CJS_Context::OnDoc_Open(CPDFSDK_Document* pDoc, + const CFX_WideString& strTargetName) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnDoc_Open(pDoc, strTargetName); } -void CJS_Context::OnDoc_WillPrint(CPDFSDK_Document* pDoc) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnDoc_WillPrint(pDoc); +void CJS_Context::OnDoc_WillPrint(CPDFSDK_Document* pDoc) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnDoc_WillPrint(pDoc); } -void CJS_Context::OnDoc_DidPrint(CPDFSDK_Document* pDoc) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnDoc_DidPrint(pDoc); +void CJS_Context::OnDoc_DidPrint(CPDFSDK_Document* pDoc) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnDoc_DidPrint(pDoc); } -void CJS_Context::OnDoc_WillSave(CPDFSDK_Document* pDoc) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnDoc_WillSave(pDoc); +void CJS_Context::OnDoc_WillSave(CPDFSDK_Document* pDoc) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnDoc_WillSave(pDoc); } -void CJS_Context::OnDoc_DidSave(CPDFSDK_Document* pDoc) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnDoc_DidSave(pDoc); +void CJS_Context::OnDoc_DidSave(CPDFSDK_Document* pDoc) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnDoc_DidSave(pDoc); } -void CJS_Context::OnDoc_WillClose(CPDFSDK_Document* pDoc) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnDoc_WillClose(pDoc); +void CJS_Context::OnDoc_WillClose(CPDFSDK_Document* pDoc) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnDoc_WillClose(pDoc); } -void CJS_Context::OnPage_Open(CPDFSDK_Document* pTarget) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnPage_Open(pTarget); +void CJS_Context::OnPage_Open(CPDFSDK_Document* pTarget) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnPage_Open(pTarget); } -void CJS_Context::OnPage_Close(CPDFSDK_Document* pTarget) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnPage_Close(pTarget); +void CJS_Context::OnPage_Close(CPDFSDK_Document* pTarget) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnPage_Close(pTarget); } -void CJS_Context::OnPage_InView(CPDFSDK_Document* pTarget) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnPage_InView(pTarget); +void CJS_Context::OnPage_InView(CPDFSDK_Document* pTarget) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnPage_InView(pTarget); } -void CJS_Context::OnPage_OutView(CPDFSDK_Document* pTarget) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnPage_OutView(pTarget); +void CJS_Context::OnPage_OutView(CPDFSDK_Document* pTarget) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnPage_OutView(pTarget); } -void CJS_Context::OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnField_MouseDown(bModifier, bShift, pTarget); +void CJS_Context::OnField_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnField_MouseDown(bModifier, bShift, pTarget); } -void CJS_Context::OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnField_MouseEnter(bModifier, bShift, pTarget); +void CJS_Context::OnField_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnField_MouseEnter(bModifier, bShift, pTarget); } -void CJS_Context::OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnField_MouseExit(bModifier, bShift, pTarget); +void CJS_Context::OnField_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnField_MouseExit(bModifier, bShift, pTarget); } -void CJS_Context::OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnField_MouseUp(bModifier, bShift, pTarget); +void CJS_Context::OnField_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnField_MouseUp(bModifier, bShift, pTarget); } -void CJS_Context::OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value); +void CJS_Context::OnField_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value); } -void CJS_Context::OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value); +void CJS_Context::OnField_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value); } -void CJS_Context::OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnField_Calculate(pSource, pTarget, Value, bRc); +void CJS_Context::OnField_Calculate(CPDF_FormField* pSource, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnField_Calculate(pSource, pTarget, Value, bRc); } -void CJS_Context::OnField_Format(CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit) -{ - m_pEventHandler->OnField_Format(pTarget, Value, bWillCommit); +void CJS_Context::OnField_Format(CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit) { + m_pEventHandler->OnField_Format(pTarget, Value, bWillCommit); } - -void CJS_Context::OnField_Keystroke(CFX_WideString& strChange, const CFX_WideString& strChangeEx, - FX_BOOL bKeyDown, FX_BOOL bModifier, int &nSelEnd,int &nSelStart, - FX_BOOL bShift, CPDF_FormField* pTarget, CFX_WideString& Value, - FX_BOOL bWillCommit, FX_BOOL bFieldFull, FX_BOOL& bRc) -{ - m_pEventHandler->OnField_Keystroke( - strChange, strChangeEx, bKeyDown, bModifier, nSelEnd, nSelStart, - bShift, pTarget, Value, bWillCommit, bFieldFull, bRc); +void CJS_Context::OnField_Keystroke(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + int& nSelEnd, + int& nSelStart, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit, + FX_BOOL bFieldFull, + FX_BOOL& bRc) { + m_pEventHandler->OnField_Keystroke( + strChange, strChangeEx, bKeyDown, bModifier, nSelEnd, nSelStart, bShift, + pTarget, Value, bWillCommit, bFieldFull, bRc); } -void CJS_Context::OnField_Validate(CFX_WideString& strChange,const CFX_WideString& strChangeEx, - FX_BOOL bKeyDown, FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, - CFX_WideString& Value, FX_BOOL& bRc) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier, bShift, pTarget, Value, bRc); +void CJS_Context::OnField_Validate(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier, + bShift, pTarget, Value, bRc); } -void CJS_Context::OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnScreen_Focus(bModifier, bShift, pScreen); +void CJS_Context::OnScreen_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnScreen_Focus(bModifier, bShift, pScreen); } -void CJS_Context::OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnScreen_Blur(bModifier, bShift, pScreen); +void CJS_Context::OnScreen_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnScreen_Blur(bModifier, bShift, pScreen); } -void CJS_Context::OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnScreen_Open(bModifier, bShift, pScreen); +void CJS_Context::OnScreen_Open(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnScreen_Open(bModifier, bShift, pScreen); } -void CJS_Context::OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnScreen_Close(bModifier, bShift, pScreen); +void CJS_Context::OnScreen_Close(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnScreen_Close(bModifier, bShift, pScreen); } -void CJS_Context::OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnScreen_MouseDown(bModifier, bShift, pScreen); +void CJS_Context::OnScreen_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnScreen_MouseDown(bModifier, bShift, pScreen); } -void CJS_Context::OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnScreen_MouseUp(bModifier, bShift, pScreen); +void CJS_Context::OnScreen_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnScreen_MouseUp(bModifier, bShift, pScreen); } -void CJS_Context::OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnScreen_MouseEnter(bModifier, bShift, pScreen); +void CJS_Context::OnScreen_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnScreen_MouseEnter(bModifier, bShift, pScreen); } -void CJS_Context::OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnScreen_MouseExit(bModifier, bShift, pScreen); +void CJS_Context::OnScreen_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnScreen_MouseExit(bModifier, bShift, pScreen); } -void CJS_Context::OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnScreen_InView(bModifier, bShift, pScreen); +void CJS_Context::OnScreen_InView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnScreen_InView(bModifier, bShift, pScreen); } -void CJS_Context::OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnScreen_OutView(bModifier, bShift, pScreen); +void CJS_Context::OnScreen_OutView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnScreen_OutView(bModifier, bShift, pScreen); } -void CJS_Context::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnBookmark_MouseUp(pBookMark); +void CJS_Context::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnBookmark_MouseUp(pBookMark); } -void CJS_Context::OnLink_MouseUp(CPDFSDK_Document* pTarget) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnLink_MouseUp(pTarget); +void CJS_Context::OnLink_MouseUp(CPDFSDK_Document* pTarget) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnLink_MouseUp(pTarget); } -void CJS_Context::OnConsole_Exec() -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnConsole_Exec(); +void CJS_Context::OnConsole_Exec() { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnConsole_Exec(); } -void CJS_Context::OnExternal_Exec() -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnExternal_Exec(); +void CJS_Context::OnExternal_Exec() { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnExternal_Exec(); } -void CJS_Context::OnBatchExec(CPDFSDK_Document* pTarget) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnBatchExec(pTarget); +void CJS_Context::OnBatchExec(CPDFSDK_Document* pTarget) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnBatchExec(pTarget); } -void CJS_Context::OnMenu_Exec(CPDFSDK_Document* pTarget,const CFX_WideString& strTargetName) -{ - ASSERT(m_pEventHandler != NULL); - m_pEventHandler->OnMenu_Exec(pTarget, strTargetName); +void CJS_Context::OnMenu_Exec(CPDFSDK_Document* pTarget, + const CFX_WideString& strTargetName) { + ASSERT(m_pEventHandler != NULL); + m_pEventHandler->OnMenu_Exec(pTarget, strTargetName); } - diff --git a/fpdfsdk/src/javascript/JS_EventHandler.cpp b/fpdfsdk/src/javascript/JS_EventHandler.cpp index 1769e3053f..1eee92ddc1 100644 --- a/fpdfsdk/src/javascript/JS_EventHandler.cpp +++ b/fpdfsdk/src/javascript/JS_EventHandler.cpp @@ -17,511 +17,536 @@ /* ---------------------------- CJS_EventHandler ---------------------------- */ -CJS_EventHandler::CJS_EventHandler(CJS_Context * pContext) : - m_pJSContext(pContext), - m_eEventType(JET_UNKNOWN), - m_bValid(FALSE), - m_pWideStrChange(NULL), - m_nCommitKey(-1), - m_bKeyDown(FALSE), - m_bModifier(FALSE), - m_bShift(FALSE), - m_pISelEnd(NULL), - m_nSelEndDu(0), - m_pISelStart(NULL), - m_nSelStartDu(0), - m_bWillCommit(FALSE), - m_pValue(NULL), - m_bFieldFull(FALSE), - m_pbRc(NULL), - m_bRcDu(FALSE), - m_pSourceDoc(NULL), - m_pTargetBookMark(NULL), - m_pTargetDoc(NULL), - m_pTargetAnnot(NULL) -{ -} +CJS_EventHandler::CJS_EventHandler(CJS_Context* pContext) + : m_pJSContext(pContext), + m_eEventType(JET_UNKNOWN), + m_bValid(FALSE), + m_pWideStrChange(NULL), + m_nCommitKey(-1), + m_bKeyDown(FALSE), + m_bModifier(FALSE), + m_bShift(FALSE), + m_pISelEnd(NULL), + m_nSelEndDu(0), + m_pISelStart(NULL), + m_nSelStartDu(0), + m_bWillCommit(FALSE), + m_pValue(NULL), + m_bFieldFull(FALSE), + m_pbRc(NULL), + m_bRcDu(FALSE), + m_pSourceDoc(NULL), + m_pTargetBookMark(NULL), + m_pTargetDoc(NULL), + m_pTargetAnnot(NULL) {} -CJS_EventHandler::~CJS_EventHandler() -{ -} +CJS_EventHandler::~CJS_EventHandler() {} -void CJS_EventHandler::OnApp_Init() -{ - Initial(JET_APP_INIT); +void CJS_EventHandler::OnApp_Init() { + Initial(JET_APP_INIT); } -void CJS_EventHandler::OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName) -{ - Initial(JET_DOC_OPEN); +void CJS_EventHandler::OnDoc_Open(CPDFSDK_Document* pDoc, + const CFX_WideString& strTargetName) { + Initial(JET_DOC_OPEN); - m_pTargetDoc = pDoc; - m_strTargetName = strTargetName; + m_pTargetDoc = pDoc; + m_strTargetName = strTargetName; } -void CJS_EventHandler::OnDoc_WillPrint(CPDFSDK_Document* pDoc) -{ - Initial(JET_DOC_WILLPRINT); +void CJS_EventHandler::OnDoc_WillPrint(CPDFSDK_Document* pDoc) { + Initial(JET_DOC_WILLPRINT); - m_pTargetDoc = pDoc; + m_pTargetDoc = pDoc; } -void CJS_EventHandler::OnDoc_DidPrint(CPDFSDK_Document* pDoc) -{ - Initial(JET_DOC_DIDPRINT); +void CJS_EventHandler::OnDoc_DidPrint(CPDFSDK_Document* pDoc) { + Initial(JET_DOC_DIDPRINT); - m_pTargetDoc = pDoc; + m_pTargetDoc = pDoc; } -void CJS_EventHandler::OnDoc_WillSave(CPDFSDK_Document* pDoc) -{ - Initial(JET_DOC_WILLSAVE); - m_pTargetDoc = pDoc; +void CJS_EventHandler::OnDoc_WillSave(CPDFSDK_Document* pDoc) { + Initial(JET_DOC_WILLSAVE); + m_pTargetDoc = pDoc; } -void CJS_EventHandler::OnDoc_DidSave(CPDFSDK_Document* pDoc) -{ - Initial(JET_DOC_DIDSAVE); +void CJS_EventHandler::OnDoc_DidSave(CPDFSDK_Document* pDoc) { + Initial(JET_DOC_DIDSAVE); - m_pTargetDoc = pDoc; + m_pTargetDoc = pDoc; } -void CJS_EventHandler::OnDoc_WillClose(CPDFSDK_Document* pDoc) -{ - Initial(JET_DOC_WILLCLOSE); +void CJS_EventHandler::OnDoc_WillClose(CPDFSDK_Document* pDoc) { + Initial(JET_DOC_WILLCLOSE); - m_pTargetDoc = pDoc; + m_pTargetDoc = pDoc; } -void CJS_EventHandler::OnPage_Open(CPDFSDK_Document* pDoc) -{ - Initial(JET_PAGE_OPEN); +void CJS_EventHandler::OnPage_Open(CPDFSDK_Document* pDoc) { + Initial(JET_PAGE_OPEN); - m_pTargetDoc = pDoc; + m_pTargetDoc = pDoc; } -void CJS_EventHandler::OnPage_Close(CPDFSDK_Document* pDoc) -{ - Initial(JET_PAGE_CLOSE); +void CJS_EventHandler::OnPage_Close(CPDFSDK_Document* pDoc) { + Initial(JET_PAGE_CLOSE); - m_pTargetDoc = pDoc; + m_pTargetDoc = pDoc; } -void CJS_EventHandler::OnPage_InView(CPDFSDK_Document* pDoc) -{ - Initial(JET_PAGE_INVIEW); +void CJS_EventHandler::OnPage_InView(CPDFSDK_Document* pDoc) { + Initial(JET_PAGE_INVIEW); - m_pTargetDoc = pDoc; + m_pTargetDoc = pDoc; } -void CJS_EventHandler::OnPage_OutView(CPDFSDK_Document* pDoc) -{ - Initial(JET_PAGE_OUTVIEW); +void CJS_EventHandler::OnPage_OutView(CPDFSDK_Document* pDoc) { + Initial(JET_PAGE_OUTVIEW); - m_pTargetDoc = pDoc; + m_pTargetDoc = pDoc; } -void CJS_EventHandler::OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) -{ - Initial(JET_FIELD_MOUSEENTER); +void CJS_EventHandler::OnField_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + Initial(JET_FIELD_MOUSEENTER); - m_bModifier = bModifier; - m_bShift = bShift; + m_bModifier = bModifier; + m_bShift = bShift; - ASSERT(pTarget != NULL); - m_strTargetName = pTarget->GetFullName(); + ASSERT(pTarget != NULL); + m_strTargetName = pTarget->GetFullName(); } -void CJS_EventHandler::OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) -{ - Initial(JET_FIELD_MOUSEEXIT); +void CJS_EventHandler::OnField_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + Initial(JET_FIELD_MOUSEEXIT); - m_bModifier = bModifier; - m_bShift = bShift; - ASSERT(pTarget != NULL); - m_strTargetName = pTarget->GetFullName(); + m_bModifier = bModifier; + m_bShift = bShift; + ASSERT(pTarget != NULL); + m_strTargetName = pTarget->GetFullName(); } -void CJS_EventHandler::OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) -{ - Initial(JET_FIELD_MOUSEDOWN); - m_eEventType = JET_FIELD_MOUSEDOWN; +void CJS_EventHandler::OnField_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + Initial(JET_FIELD_MOUSEDOWN); + m_eEventType = JET_FIELD_MOUSEDOWN; - m_bModifier = bModifier; - m_bShift = bShift; - ASSERT(pTarget != NULL); - m_strTargetName = pTarget->GetFullName(); + m_bModifier = bModifier; + m_bShift = bShift; + ASSERT(pTarget != NULL); + m_strTargetName = pTarget->GetFullName(); } -void CJS_EventHandler::OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) -{ - Initial(JET_FIELD_MOUSEUP); +void CJS_EventHandler::OnField_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget) { + Initial(JET_FIELD_MOUSEUP); - m_bModifier = bModifier; - m_bShift = bShift; - ASSERT(pTarget != NULL); - m_strTargetName = pTarget->GetFullName(); + m_bModifier = bModifier; + m_bShift = bShift; + ASSERT(pTarget != NULL); + m_strTargetName = pTarget->GetFullName(); } -void CJS_EventHandler::OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, - const CFX_WideString& Value) -{ - Initial(JET_FIELD_FOCUS); +void CJS_EventHandler::OnField_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) { + Initial(JET_FIELD_FOCUS); - m_bModifier = bModifier; - m_bShift = bShift; - ASSERT(pTarget != NULL); - m_strTargetName = pTarget->GetFullName(); - m_pValue = (CFX_WideString*)&Value; + m_bModifier = bModifier; + m_bShift = bShift; + ASSERT(pTarget != NULL); + m_strTargetName = pTarget->GetFullName(); + m_pValue = (CFX_WideString*)&Value; } -void CJS_EventHandler::OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, - const CFX_WideString& Value) -{ - Initial(JET_FIELD_BLUR); +void CJS_EventHandler::OnField_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + const CFX_WideString& Value) { + Initial(JET_FIELD_BLUR); - m_bModifier = bModifier; - m_bShift = bShift; - ASSERT(pTarget != NULL); - m_strTargetName = pTarget->GetFullName(); - m_pValue = (CFX_WideString*)&Value; + m_bModifier = bModifier; + m_bShift = bShift; + ASSERT(pTarget != NULL); + m_strTargetName = pTarget->GetFullName(); + m_pValue = (CFX_WideString*)&Value; } -void CJS_EventHandler::OnField_Keystroke(CFX_WideString &strChange, - const CFX_WideString& strChangeEx, FX_BOOL KeyDown, - FX_BOOL bModifier, int& nSelEnd, int& nSelStart, - FX_BOOL bShift, CPDF_FormField* pTarget, - CFX_WideString& Value, FX_BOOL bWillCommit, - FX_BOOL bFieldFull, FX_BOOL& bRc) -{ - Initial(JET_FIELD_KEYSTROKE); - - m_nCommitKey = 0; - m_pWideStrChange = &strChange; - m_WideStrChangeEx = strChangeEx; - m_bKeyDown = KeyDown; - m_bModifier = bModifier; - m_pISelEnd = &nSelEnd; - m_pISelStart = &nSelStart; - m_bShift = bShift; - ASSERT(pTarget != NULL); - m_strTargetName = pTarget->GetFullName(); - m_pValue = &Value; - m_bWillCommit = bWillCommit; - m_pbRc = &bRc; - m_bFieldFull = bFieldFull; -} - -void CJS_EventHandler::OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx, - FX_BOOL bKeyDown, FX_BOOL bModifier, FX_BOOL bShift, - CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc) -{ - Initial(JET_FIELD_VALIDATE); - - m_pWideStrChange = &strChange; - m_WideStrChangeEx = strChangeEx; - m_bKeyDown = bKeyDown; - m_bModifier = bModifier; - m_bShift = bShift; - ASSERT(pTarget != NULL); - m_strTargetName = pTarget->GetFullName(); - m_pValue = &Value; - m_pbRc = &bRc; -} - -void CJS_EventHandler::OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, - CFX_WideString& Value, FX_BOOL& bRc) -{ - Initial(JET_FIELD_CALCULATE); - - if (pSource) - m_strSourceName = pSource->GetFullName(); - ASSERT(pTarget != NULL); - m_strTargetName = pTarget->GetFullName(); - m_pValue = &Value; - m_pbRc = &bRc; +void CJS_EventHandler::OnField_Keystroke(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL KeyDown, + FX_BOOL bModifier, + int& nSelEnd, + int& nSelStart, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL bWillCommit, + FX_BOOL bFieldFull, + FX_BOOL& bRc) { + Initial(JET_FIELD_KEYSTROKE); + + m_nCommitKey = 0; + m_pWideStrChange = &strChange; + m_WideStrChangeEx = strChangeEx; + m_bKeyDown = KeyDown; + m_bModifier = bModifier; + m_pISelEnd = &nSelEnd; + m_pISelStart = &nSelStart; + m_bShift = bShift; + ASSERT(pTarget != NULL); + m_strTargetName = pTarget->GetFullName(); + m_pValue = &Value; + m_bWillCommit = bWillCommit; + m_pbRc = &bRc; + m_bFieldFull = bFieldFull; +} + +void CJS_EventHandler::OnField_Validate(CFX_WideString& strChange, + const CFX_WideString& strChangeEx, + FX_BOOL bKeyDown, + FX_BOOL bModifier, + FX_BOOL bShift, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) { + Initial(JET_FIELD_VALIDATE); + + m_pWideStrChange = &strChange; + m_WideStrChangeEx = strChangeEx; + m_bKeyDown = bKeyDown; + m_bModifier = bModifier; + m_bShift = bShift; + ASSERT(pTarget != NULL); + m_strTargetName = pTarget->GetFullName(); + m_pValue = &Value; + m_pbRc = &bRc; +} + +void CJS_EventHandler::OnField_Calculate(CPDF_FormField* pSource, + CPDF_FormField* pTarget, + CFX_WideString& Value, + FX_BOOL& bRc) { + Initial(JET_FIELD_CALCULATE); + + if (pSource) + m_strSourceName = pSource->GetFullName(); + ASSERT(pTarget != NULL); + m_strTargetName = pTarget->GetFullName(); + m_pValue = &Value; + m_pbRc = &bRc; } void CJS_EventHandler::OnField_Format(CPDF_FormField* pTarget, CFX_WideString& Value, - FX_BOOL bWillCommit) -{ - Initial(JET_FIELD_FORMAT); + FX_BOOL bWillCommit) { + Initial(JET_FIELD_FORMAT); - m_nCommitKey = 0; - ASSERT(pTarget != NULL); - m_strTargetName = pTarget->GetFullName(); - m_pValue = &Value; - m_bWillCommit = bWillCommit; + m_nCommitKey = 0; + ASSERT(pTarget != NULL); + m_strTargetName = pTarget->GetFullName(); + m_pValue = &Value; + m_bWillCommit = bWillCommit; } -void CJS_EventHandler::OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - Initial(JET_SCREEN_FOCUS); +void CJS_EventHandler::OnScreen_Focus(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + Initial(JET_SCREEN_FOCUS); - m_bModifier = bModifier; - m_bShift = bShift; - m_pTargetAnnot = pScreen; + m_bModifier = bModifier; + m_bShift = bShift; + m_pTargetAnnot = pScreen; } -void CJS_EventHandler::OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - Initial(JET_SCREEN_BLUR); +void CJS_EventHandler::OnScreen_Blur(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + Initial(JET_SCREEN_BLUR); - m_bModifier = bModifier; - m_bShift = bShift; - m_pTargetAnnot = pScreen; + m_bModifier = bModifier; + m_bShift = bShift; + m_pTargetAnnot = pScreen; } -void CJS_EventHandler::OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - Initial(JET_SCREEN_OPEN); +void CJS_EventHandler::OnScreen_Open(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + Initial(JET_SCREEN_OPEN); - m_bModifier = bModifier; - m_bShift = bShift; - m_pTargetAnnot = pScreen; + m_bModifier = bModifier; + m_bShift = bShift; + m_pTargetAnnot = pScreen; } -void CJS_EventHandler::OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - Initial(JET_SCREEN_CLOSE); +void CJS_EventHandler::OnScreen_Close(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + Initial(JET_SCREEN_CLOSE); - m_bModifier = bModifier; - m_bShift = bShift; - m_pTargetAnnot = pScreen; + m_bModifier = bModifier; + m_bShift = bShift; + m_pTargetAnnot = pScreen; } -void CJS_EventHandler::OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - Initial(JET_SCREEN_MOUSEDOWN); +void CJS_EventHandler::OnScreen_MouseDown(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + Initial(JET_SCREEN_MOUSEDOWN); - m_bModifier = bModifier; - m_bShift = bShift; - m_pTargetAnnot = pScreen; + m_bModifier = bModifier; + m_bShift = bShift; + m_pTargetAnnot = pScreen; } -void CJS_EventHandler::OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - Initial(JET_SCREEN_MOUSEUP); +void CJS_EventHandler::OnScreen_MouseUp(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + Initial(JET_SCREEN_MOUSEUP); - m_bModifier = bModifier; - m_bShift = bShift; - m_pTargetAnnot = pScreen; + m_bModifier = bModifier; + m_bShift = bShift; + m_pTargetAnnot = pScreen; } -void CJS_EventHandler::OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - Initial(JET_SCREEN_MOUSEENTER); +void CJS_EventHandler::OnScreen_MouseEnter(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + Initial(JET_SCREEN_MOUSEENTER); - m_bModifier = bModifier; - m_bShift = bShift; - m_pTargetAnnot = pScreen; + m_bModifier = bModifier; + m_bShift = bShift; + m_pTargetAnnot = pScreen; } -void CJS_EventHandler::OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - Initial(JET_SCREEN_MOUSEEXIT); +void CJS_EventHandler::OnScreen_MouseExit(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + Initial(JET_SCREEN_MOUSEEXIT); - m_bModifier = bModifier; - m_bShift = bShift; - m_pTargetAnnot = pScreen; + m_bModifier = bModifier; + m_bShift = bShift; + m_pTargetAnnot = pScreen; } -void CJS_EventHandler::OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - Initial(JET_SCREEN_INVIEW); +void CJS_EventHandler::OnScreen_InView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + Initial(JET_SCREEN_INVIEW); - m_bModifier = bModifier; - m_bShift = bShift; - m_pTargetAnnot = pScreen; + m_bModifier = bModifier; + m_bShift = bShift; + m_pTargetAnnot = pScreen; } -void CJS_EventHandler::OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) -{ - Initial(JET_SCREEN_OUTVIEW); +void CJS_EventHandler::OnScreen_OutView(FX_BOOL bModifier, + FX_BOOL bShift, + CPDFSDK_Annot* pScreen) { + Initial(JET_SCREEN_OUTVIEW); - m_bModifier = bModifier; - m_bShift = bShift; - m_pTargetAnnot = pScreen; + m_bModifier = bModifier; + m_bShift = bShift; + m_pTargetAnnot = pScreen; } -void CJS_EventHandler::OnLink_MouseUp(CPDFSDK_Document* pTarget) -{ - Initial(JET_LINK_MOUSEUP); +void CJS_EventHandler::OnLink_MouseUp(CPDFSDK_Document* pTarget) { + Initial(JET_LINK_MOUSEUP); - m_pTargetDoc = pTarget; + m_pTargetDoc = pTarget; } -void CJS_EventHandler::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) -{ - Initial(JET_BOOKMARK_MOUSEUP); +void CJS_EventHandler::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) { + Initial(JET_BOOKMARK_MOUSEUP); - m_pTargetBookMark = pBookMark; + m_pTargetBookMark = pBookMark; } -void CJS_EventHandler::OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString& strTargetName) -{ - Initial(JET_MENU_EXEC); +void CJS_EventHandler::OnMenu_Exec(CPDFSDK_Document* pTarget, + const CFX_WideString& strTargetName) { + Initial(JET_MENU_EXEC); - m_pTargetDoc = pTarget; - m_strTargetName = strTargetName; + m_pTargetDoc = pTarget; + m_strTargetName = strTargetName; } -void CJS_EventHandler::OnExternal_Exec() -{ - Initial(JET_EXTERNAL_EXEC); +void CJS_EventHandler::OnExternal_Exec() { + Initial(JET_EXTERNAL_EXEC); } -void CJS_EventHandler::OnBatchExec(CPDFSDK_Document* pTarget) -{ - Initial(JET_BATCH_EXEC); +void CJS_EventHandler::OnBatchExec(CPDFSDK_Document* pTarget) { + Initial(JET_BATCH_EXEC); - m_pTargetDoc = pTarget; + m_pTargetDoc = pTarget; } -void CJS_EventHandler::OnConsole_Exec() -{ - Initial(JET_CONSOLE_EXEC); +void CJS_EventHandler::OnConsole_Exec() { + Initial(JET_CONSOLE_EXEC); } +void CJS_EventHandler::Initial(JS_EVENT_T type) { + m_eEventType = type; -void CJS_EventHandler::Initial(JS_EVENT_T type) -{ - m_eEventType = type; - - m_strTargetName = L""; - m_strSourceName = L""; - m_pWideStrChange = NULL; - m_WideStrChangeDu = L""; - m_WideStrChangeEx = L""; - m_nCommitKey = -1; - m_bKeyDown = FALSE; - m_bModifier = FALSE; - m_bShift = FALSE; - m_pISelEnd = NULL; - m_nSelEndDu = 0; - m_pISelStart = NULL; - m_nSelStartDu = 0; - m_bWillCommit = FALSE; - m_pValue = NULL; - m_bFieldFull = FALSE; - m_pbRc = NULL; - m_bRcDu = FALSE; + m_strTargetName = L""; + m_strSourceName = L""; + m_pWideStrChange = NULL; + m_WideStrChangeDu = L""; + m_WideStrChangeEx = L""; + m_nCommitKey = -1; + m_bKeyDown = FALSE; + m_bModifier = FALSE; + m_bShift = FALSE; + m_pISelEnd = NULL; + m_nSelEndDu = 0; + m_pISelStart = NULL; + m_nSelStartDu = 0; + m_bWillCommit = FALSE; + m_pValue = NULL; + m_bFieldFull = FALSE; + m_pbRc = NULL; + m_bRcDu = FALSE; - m_pSourceDoc = NULL; - m_pTargetBookMark = NULL; - m_pTargetDoc = NULL; - m_pTargetAnnot = NULL; + m_pSourceDoc = NULL; + m_pTargetBookMark = NULL; + m_pTargetDoc = NULL; + m_pTargetAnnot = NULL; - m_bValid = TRUE; + m_bValid = TRUE; } -void CJS_EventHandler::Destroy() -{ - m_bValid = FALSE; +void CJS_EventHandler::Destroy() { + m_bValid = FALSE; } -FX_BOOL CJS_EventHandler::IsValid() -{ - return m_bValid; +FX_BOOL CJS_EventHandler::IsValid() { + return m_bValid; } -CFX_WideString & CJS_EventHandler::Change() -{ - if (m_pWideStrChange) { - return *m_pWideStrChange; - } - return m_WideStrChangeDu; +CFX_WideString& CJS_EventHandler::Change() { + if (m_pWideStrChange) { + return *m_pWideStrChange; + } + return m_WideStrChangeDu; } -CFX_WideString CJS_EventHandler::ChangeEx() -{ - return m_WideStrChangeEx; +CFX_WideString CJS_EventHandler::ChangeEx() { + return m_WideStrChangeEx; } -int CJS_EventHandler::CommitKey() -{ - return m_nCommitKey; +int CJS_EventHandler::CommitKey() { + return m_nCommitKey; } -FX_BOOL CJS_EventHandler::FieldFull() -{ - return m_bFieldFull; +FX_BOOL CJS_EventHandler::FieldFull() { + return m_bFieldFull; } -FX_BOOL CJS_EventHandler::KeyDown() -{ - return m_bKeyDown; +FX_BOOL CJS_EventHandler::KeyDown() { + return m_bKeyDown; } -FX_BOOL CJS_EventHandler::Modifier() -{ - return m_bModifier; +FX_BOOL CJS_EventHandler::Modifier() { + return m_bModifier; } -const FX_WCHAR* CJS_EventHandler::Name() -{ - switch (m_eEventType) - { - case JET_APP_INIT: return L"Init"; - case JET_BATCH_EXEC: return L"Exec"; - case JET_BOOKMARK_MOUSEUP: return L"Mouse Up"; - case JET_CONSOLE_EXEC: return L"Exec"; - case JET_DOC_DIDPRINT: return L"DidPrint"; - case JET_DOC_DIDSAVE: return L"DidSave"; - case JET_DOC_OPEN: return L"Open"; - case JET_DOC_WILLCLOSE: return L"WillClose"; - case JET_DOC_WILLPRINT: return L"WillPrint"; - case JET_DOC_WILLSAVE: return L"WillSave"; - case JET_EXTERNAL_EXEC: return L"Exec"; +const FX_WCHAR* CJS_EventHandler::Name() { + switch (m_eEventType) { + case JET_APP_INIT: + return L"Init"; + case JET_BATCH_EXEC: + return L"Exec"; + case JET_BOOKMARK_MOUSEUP: + return L"Mouse Up"; + case JET_CONSOLE_EXEC: + return L"Exec"; + case JET_DOC_DIDPRINT: + return L"DidPrint"; + case JET_DOC_DIDSAVE: + return L"DidSave"; + case JET_DOC_OPEN: + return L"Open"; + case JET_DOC_WILLCLOSE: + return L"WillClose"; + case JET_DOC_WILLPRINT: + return L"WillPrint"; + case JET_DOC_WILLSAVE: + return L"WillSave"; + case JET_EXTERNAL_EXEC: + return L"Exec"; case JET_FIELD_FOCUS: - case JET_SCREEN_FOCUS: return L"Focus"; + case JET_SCREEN_FOCUS: + return L"Focus"; case JET_FIELD_BLUR: - case JET_SCREEN_BLUR: return L"Blur"; + case JET_SCREEN_BLUR: + return L"Blur"; case JET_FIELD_MOUSEDOWN: - case JET_SCREEN_MOUSEDOWN: return L"Mouse Down"; + case JET_SCREEN_MOUSEDOWN: + return L"Mouse Down"; case JET_FIELD_MOUSEUP: - case JET_SCREEN_MOUSEUP: return L"Mouse Up"; + case JET_SCREEN_MOUSEUP: + return L"Mouse Up"; case JET_FIELD_MOUSEENTER: - case JET_SCREEN_MOUSEENTER: return L"Mouse Enter"; + case JET_SCREEN_MOUSEENTER: + return L"Mouse Enter"; case JET_FIELD_MOUSEEXIT: - case JET_SCREEN_MOUSEEXIT: return L"Mouse Exit"; - case JET_FIELD_CALCULATE: return L"Calculate"; - case JET_FIELD_FORMAT: return L"Format"; - case JET_FIELD_KEYSTROKE: return L"Keystroke"; - case JET_FIELD_VALIDATE: return L"Validate"; - case JET_LINK_MOUSEUP: return L"Mouse Up"; - case JET_MENU_EXEC: return L"Exec"; + case JET_SCREEN_MOUSEEXIT: + return L"Mouse Exit"; + case JET_FIELD_CALCULATE: + return L"Calculate"; + case JET_FIELD_FORMAT: + return L"Format"; + case JET_FIELD_KEYSTROKE: + return L"Keystroke"; + case JET_FIELD_VALIDATE: + return L"Validate"; + case JET_LINK_MOUSEUP: + return L"Mouse Up"; + case JET_MENU_EXEC: + return L"Exec"; case JET_PAGE_OPEN: - case JET_SCREEN_OPEN: return L"Open"; + case JET_SCREEN_OPEN: + return L"Open"; case JET_PAGE_CLOSE: - case JET_SCREEN_CLOSE: return L"Close"; + case JET_SCREEN_CLOSE: + return L"Close"; case JET_SCREEN_INVIEW: - case JET_PAGE_INVIEW: return L"InView"; + case JET_PAGE_INVIEW: + return L"InView"; case JET_PAGE_OUTVIEW: - case JET_SCREEN_OUTVIEW: return L"OutView"; + case JET_SCREEN_OUTVIEW: + return L"OutView"; default: - return L""; - } - - return L""; -} - -const FX_WCHAR* CJS_EventHandler::Type() -{ - switch (m_eEventType) - { - case JET_APP_INIT: return L"App"; - case JET_BATCH_EXEC: return L"Batch"; - case JET_BOOKMARK_MOUSEUP: return L"BookMark"; - case JET_CONSOLE_EXEC: return L"Console"; + return L""; + } + + return L""; +} + +const FX_WCHAR* CJS_EventHandler::Type() { + switch (m_eEventType) { + case JET_APP_INIT: + return L"App"; + case JET_BATCH_EXEC: + return L"Batch"; + case JET_BOOKMARK_MOUSEUP: + return L"BookMark"; + case JET_CONSOLE_EXEC: + return L"Console"; case JET_DOC_DIDPRINT: case JET_DOC_DIDSAVE: case JET_DOC_OPEN: case JET_DOC_WILLCLOSE: case JET_DOC_WILLPRINT: - case JET_DOC_WILLSAVE: return L"Doc"; - case JET_EXTERNAL_EXEC: return L"External"; + case JET_DOC_WILLSAVE: + return L"Doc"; + case JET_EXTERNAL_EXEC: + return L"External"; case JET_FIELD_BLUR: case JET_FIELD_FOCUS: case JET_FIELD_MOUSEDOWN: @@ -531,7 +556,8 @@ const FX_WCHAR* CJS_EventHandler::Type() case JET_FIELD_CALCULATE: case JET_FIELD_FORMAT: case JET_FIELD_KEYSTROKE: - case JET_FIELD_VALIDATE: return L"Field"; + case JET_FIELD_VALIDATE: + return L"Field"; case JET_SCREEN_FOCUS: case JET_SCREEN_BLUR: case JET_SCREEN_OPEN: @@ -541,124 +567,123 @@ const FX_WCHAR* CJS_EventHandler::Type() case JET_SCREEN_MOUSEENTER: case JET_SCREEN_MOUSEEXIT: case JET_SCREEN_INVIEW: - case JET_SCREEN_OUTVIEW: return L"Screen"; - case JET_LINK_MOUSEUP: return L"Link"; - case JET_MENU_EXEC: return L"Menu"; + case JET_SCREEN_OUTVIEW: + return L"Screen"; + case JET_LINK_MOUSEUP: + return L"Link"; + case JET_MENU_EXEC: + return L"Menu"; case JET_PAGE_OPEN: case JET_PAGE_CLOSE: case JET_PAGE_INVIEW: - case JET_PAGE_OUTVIEW:return L"Page"; + case JET_PAGE_OUTVIEW: + return L"Page"; default: - return L""; - } + return L""; + } - return L""; + return L""; } -FX_BOOL& CJS_EventHandler::Rc() -{ - if (m_pbRc) { - return *m_pbRc; - } - return m_bRcDu; +FX_BOOL& CJS_EventHandler::Rc() { + if (m_pbRc) { + return *m_pbRc; + } + return m_bRcDu; } -int & CJS_EventHandler::SelEnd() -{ - if (m_pISelEnd) { - return *m_pISelEnd; - } - return m_nSelEndDu; +int& CJS_EventHandler::SelEnd() { + if (m_pISelEnd) { + return *m_pISelEnd; + } + return m_nSelEndDu; } -int & CJS_EventHandler::SelStart() -{ - if (m_pISelStart) { - return *m_pISelStart; - } - return m_nSelStartDu; +int& CJS_EventHandler::SelStart() { + if (m_pISelStart) { + return *m_pISelStart; + } + return m_nSelStartDu; } -FX_BOOL CJS_EventHandler::Shift() -{ - return m_bShift; +FX_BOOL CJS_EventHandler::Shift() { + return m_bShift; } -Field* CJS_EventHandler::Source() -{ - ASSERT(m_pJSContext != NULL); +Field* CJS_EventHandler::Source() { + ASSERT(m_pJSContext != NULL); - CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime(); + CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime(); - JSFXObject pDocObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document")); - ASSERT(pDocObj.IsEmpty() == FALSE); - JSFXObject pFieldObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field")); - ASSERT(pFieldObj.IsEmpty() == FALSE); + JSFXObject pDocObj = JS_NewFxDynamicObj( + *pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document")); + ASSERT(pDocObj.IsEmpty() == FALSE); + JSFXObject pFieldObj = JS_NewFxDynamicObj( + *pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field")); + ASSERT(pFieldObj.IsEmpty() == FALSE); - CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj); - ASSERT(pJSDocument != NULL); - Document* pDocument = (Document*)pJSDocument->GetEmbedObject(); - ASSERT(pDocument != NULL); - if (m_pTargetDoc != NULL) - pDocument->AttachDoc(m_pTargetDoc); - else - pDocument->AttachDoc(m_pJSContext->GetReaderDocument()); + CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj); + ASSERT(pJSDocument != NULL); + Document* pDocument = (Document*)pJSDocument->GetEmbedObject(); + ASSERT(pDocument != NULL); + if (m_pTargetDoc != NULL) + pDocument->AttachDoc(m_pTargetDoc); + else + pDocument->AttachDoc(m_pJSContext->GetReaderDocument()); - //if (m_pSourceField == NULL) - // return NULL; - //CRAO_Widget *pWidget = IBCL_Widget::GetWidget(m_pSourceField); - //CPDF_FormField* pFormField = pWidget->GetFormField(); - //ASSERT(pFormField); - //CFX_WideString csFieldName = pFormField->GetFullName(); - CJS_Field * pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj); - ASSERT(pJSField != NULL); - Field * pField = (Field *)pJSField->GetEmbedObject(); - ASSERT(pField != NULL); - pField->AttachField(pDocument, m_strSourceName); - return pField; + // if (m_pSourceField == NULL) + // return NULL; + // CRAO_Widget *pWidget = IBCL_Widget::GetWidget(m_pSourceField); + // CPDF_FormField* pFormField = pWidget->GetFormField(); + // ASSERT(pFormField); + // CFX_WideString csFieldName = pFormField->GetFullName(); + CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj); + ASSERT(pJSField != NULL); + Field* pField = (Field*)pJSField->GetEmbedObject(); + ASSERT(pField != NULL); + pField->AttachField(pDocument, m_strSourceName); + return pField; } -Field* CJS_EventHandler::Target_Field() -{ - ASSERT(m_pJSContext != NULL); +Field* CJS_EventHandler::Target_Field() { + ASSERT(m_pJSContext != NULL); - CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime(); + CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime(); - JSFXObject pDocObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document")); - ASSERT(pDocObj.IsEmpty() == FALSE); - JSFXObject pFieldObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field")); - ASSERT(pFieldObj.IsEmpty() == FALSE); + JSFXObject pDocObj = JS_NewFxDynamicObj( + *pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document")); + ASSERT(pDocObj.IsEmpty() == FALSE); + JSFXObject pFieldObj = JS_NewFxDynamicObj( + *pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field")); + ASSERT(pFieldObj.IsEmpty() == FALSE); - CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj); - ASSERT(pJSDocument != NULL); - Document* pDocument = (Document*)pJSDocument->GetEmbedObject(); - ASSERT(pDocument != NULL); - if (m_pTargetDoc != NULL) - pDocument->AttachDoc(m_pTargetDoc); - else - pDocument->AttachDoc(m_pJSContext->GetReaderDocument()); + CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj); + ASSERT(pJSDocument != NULL); + Document* pDocument = (Document*)pJSDocument->GetEmbedObject(); + ASSERT(pDocument != NULL); + if (m_pTargetDoc != NULL) + pDocument->AttachDoc(m_pTargetDoc); + else + pDocument->AttachDoc(m_pJSContext->GetReaderDocument()); - CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj); - ASSERT(pJSField != NULL); + CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj); + ASSERT(pJSField != NULL); - Field* pField = (Field *)pJSField->GetEmbedObject(); - ASSERT(pField != NULL); + Field* pField = (Field*)pJSField->GetEmbedObject(); + ASSERT(pField != NULL); - pField->AttachField(pDocument, m_strTargetName); - return pField; + pField->AttachField(pDocument, m_strTargetName); + return pField; } -CFX_WideString& CJS_EventHandler::Value() -{ - return *m_pValue; +CFX_WideString& CJS_EventHandler::Value() { + return *m_pValue; } -FX_BOOL CJS_EventHandler::WillCommit() -{ - return m_bWillCommit; +FX_BOOL CJS_EventHandler::WillCommit() { + return m_bWillCommit; } -CFX_WideString CJS_EventHandler::TargetName() -{ - return m_strTargetName; +CFX_WideString CJS_EventHandler::TargetName() { + return m_strTargetName; } diff --git a/fpdfsdk/src/javascript/JS_GlobalData.cpp b/fpdfsdk/src/javascript/JS_GlobalData.cpp index 2b4248ccbf..715374d96f 100644 --- a/fpdfsdk/src/javascript/JS_GlobalData.cpp +++ b/fpdfsdk/src/javascript/JS_GlobalData.cpp @@ -9,449 +9,393 @@ #include "../../include/javascript/IJavaScript.h" #include "../../include/javascript/JS_GlobalData.h" -#define JS_MAXGLOBALDATA (1024 * 4 - 8) +#define JS_MAXGLOBALDATA (1024 * 4 - 8) /* --------------------- CJS_GlobalVariableArray --------------------- */ -CJS_GlobalVariableArray::CJS_GlobalVariableArray() -{ -} +CJS_GlobalVariableArray::CJS_GlobalVariableArray() {} -CJS_GlobalVariableArray::~CJS_GlobalVariableArray() -{ - Empty(); +CJS_GlobalVariableArray::~CJS_GlobalVariableArray() { + Empty(); } -void CJS_GlobalVariableArray::Copy(const CJS_GlobalVariableArray& array) -{ - Empty(); - for (int i=0,sz=array.Count(); inType) - { - case JS_GLOBALDATA_TYPE_NUMBER: - { - CJS_KeyValue* pNewObjData = new CJS_KeyValue; - pNewObjData->sKey = pOldObjData->sKey; - pNewObjData->nType = pOldObjData->nType; - pNewObjData->dData = pOldObjData->dData; - Add(pNewObjData); - } - break; - case JS_GLOBALDATA_TYPE_BOOLEAN: - { - CJS_KeyValue* pNewObjData = new CJS_KeyValue; - pNewObjData->sKey = pOldObjData->sKey; - pNewObjData->nType = pOldObjData->nType; - pNewObjData->bData = pOldObjData->bData; - Add(pNewObjData); - } - break; - case JS_GLOBALDATA_TYPE_STRING: - { - CJS_KeyValue* pNewObjData = new CJS_KeyValue; - pNewObjData->sKey = pOldObjData->sKey; - pNewObjData->nType = pOldObjData->nType; - pNewObjData->sData = pOldObjData->sData; - Add(pNewObjData); - } - break; - case JS_GLOBALDATA_TYPE_OBJECT: - { - CJS_KeyValue* pNewObjData = new CJS_KeyValue; - pNewObjData->sKey = pOldObjData->sKey; - pNewObjData->nType = pOldObjData->nType; - pNewObjData->objData.Copy(pOldObjData->objData); - Add(pNewObjData); - } - case JS_GLOBALDATA_TYPE_NULL: - { - CJS_KeyValue* pNewObjData = new CJS_KeyValue; - pNewObjData->sKey = pOldObjData->sKey; - pNewObjData->nType = pOldObjData->nType; - Add(pNewObjData); - } - } +void CJS_GlobalVariableArray::Copy(const CJS_GlobalVariableArray& array) { + Empty(); + for (int i = 0, sz = array.Count(); i < sz; i++) { + CJS_KeyValue* pOldObjData = array.GetAt(i); + ASSERT(pOldObjData != NULL); + + switch (pOldObjData->nType) { + case JS_GLOBALDATA_TYPE_NUMBER: { + CJS_KeyValue* pNewObjData = new CJS_KeyValue; + pNewObjData->sKey = pOldObjData->sKey; + pNewObjData->nType = pOldObjData->nType; + pNewObjData->dData = pOldObjData->dData; + Add(pNewObjData); + } break; + case JS_GLOBALDATA_TYPE_BOOLEAN: { + CJS_KeyValue* pNewObjData = new CJS_KeyValue; + pNewObjData->sKey = pOldObjData->sKey; + pNewObjData->nType = pOldObjData->nType; + pNewObjData->bData = pOldObjData->bData; + Add(pNewObjData); + } break; + case JS_GLOBALDATA_TYPE_STRING: { + CJS_KeyValue* pNewObjData = new CJS_KeyValue; + pNewObjData->sKey = pOldObjData->sKey; + pNewObjData->nType = pOldObjData->nType; + pNewObjData->sData = pOldObjData->sData; + Add(pNewObjData); + } break; + case JS_GLOBALDATA_TYPE_OBJECT: { + CJS_KeyValue* pNewObjData = new CJS_KeyValue; + pNewObjData->sKey = pOldObjData->sKey; + pNewObjData->nType = pOldObjData->nType; + pNewObjData->objData.Copy(pOldObjData->objData); + Add(pNewObjData); + } + case JS_GLOBALDATA_TYPE_NULL: { + CJS_KeyValue* pNewObjData = new CJS_KeyValue; + pNewObjData->sKey = pOldObjData->sKey; + pNewObjData->nType = pOldObjData->nType; + Add(pNewObjData); + } } + } } -void CJS_GlobalVariableArray::Add(CJS_KeyValue* p) -{ - array.Add(p); +void CJS_GlobalVariableArray::Add(CJS_KeyValue* p) { + array.Add(p); } -int CJS_GlobalVariableArray::Count() const -{ - return array.GetSize(); +int CJS_GlobalVariableArray::Count() const { + return array.GetSize(); } -CJS_KeyValue* CJS_GlobalVariableArray::GetAt(int index) const -{ - return array.GetAt(index); +CJS_KeyValue* CJS_GlobalVariableArray::GetAt(int index) const { + return array.GetAt(index); } -void CJS_GlobalVariableArray::Empty() -{ - for (int i=0,sz=array.GetSize(); iGetUserPath(); - m_sFilePath += SDK_JS_GLOBALDATA_FILENAME; - - LoadGlobalPersistentVariables(); +#define READER_JS_GLOBALDATA_FILENAME L"Reader_JsGlobal.Data" +#define PHANTOM_JS_GLOBALDATA_FILENAME L"Phantom_JsGlobal.Data" +#define SDK_JS_GLOBALDATA_FILENAME L"SDK_JsGlobal.Data" + +static const uint8_t JS_RC4KEY[] = { + 0x19, 0xa8, 0xe8, 0x01, 0xf6, 0xa8, 0xb6, 0x4d, 0x82, 0x04, 0x45, 0x6d, + 0xb4, 0xcf, 0xd7, 0x77, 0x67, 0xf9, 0x75, 0x9f, 0xf0, 0xe0, 0x1e, 0x51, + 0xee, 0x46, 0xfd, 0x0b, 0xc9, 0x93, 0x25, 0x55, 0x4a, 0xee, 0xe0, 0x16, + 0xd0, 0xdf, 0x8c, 0xfa, 0x2a, 0xa9, 0x49, 0xfd, 0x97, 0x1c, 0x0e, 0x22, + 0x13, 0x28, 0x7c, 0xaf, 0xc4, 0xfc, 0x9c, 0x12, 0x65, 0x8c, 0x4e, 0x5b, + 0x04, 0x75, 0x89, 0xc9, 0xb1, 0xed, 0x50, 0xca, 0x96, 0x6f, 0x1a, 0x7a, + 0xfe, 0x58, 0x5d, 0xec, 0x19, 0x4a, 0xf6, 0x35, 0x6a, 0x97, 0x14, 0x00, + 0x0e, 0xd0, 0x6b, 0xbb, 0xd5, 0x75, 0x55, 0x8b, 0x6e, 0x6b, 0x19, 0xa0, + 0xf8, 0x77, 0xd5, 0xa3}; + +CJS_GlobalData::CJS_GlobalData(CPDFDoc_Environment* pApp) : m_pApp(pApp) { + // IBaseAnnot* pBaseAnnot = IBaseAnnot::GetBaseAnnot(m_pApp); + // ASSERT(pBaseAnnot != NULL); + // + // m_sFilePath = pBaseAnnot->GetUserPath(); + m_sFilePath += SDK_JS_GLOBALDATA_FILENAME; + + LoadGlobalPersistentVariables(); } -CJS_GlobalData::~CJS_GlobalData() -{ - SaveGlobalPersisitentVariables(); +CJS_GlobalData::~CJS_GlobalData() { + SaveGlobalPersisitentVariables(); - for (int i=0,sz=m_arrayGlobalData.GetSize(); idata.sKey[0] == *propname && pTemp->data.sKey == propname) - { - nRet = i; - break; - } + for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++) { + CJS_GlobalData_Element* pTemp = m_arrayGlobalData.GetAt(i); + if (pTemp->data.sKey[0] == *propname && pTemp->data.sKey == propname) { + nRet = i; + break; } + } - return nRet; + return nRet; } -CJS_GlobalData_Element* CJS_GlobalData::GetGlobalVariable(const FX_CHAR* propname) -{ - ASSERT(propname != NULL); +CJS_GlobalData_Element* CJS_GlobalData::GetGlobalVariable( + const FX_CHAR* propname) { + ASSERT(propname != NULL); - int nFind = FindGlobalVariable(propname); - if (nFind >= 0) - return m_arrayGlobalData.GetAt(nFind); + int nFind = FindGlobalVariable(propname); + if (nFind >= 0) + return m_arrayGlobalData.GetAt(nFind); - return NULL; + return NULL; } -void CJS_GlobalData::SetGlobalVariableNumber(const FX_CHAR* propname, double dData) -{ - ASSERT(propname != NULL); - - CFX_ByteString sPropName = propname; - sPropName.TrimLeft(); - sPropName.TrimRight(); - if (sPropName.GetLength() == 0) - return; - - if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) - { - pData->data.nType = JS_GLOBALDATA_TYPE_NUMBER; - pData->data.dData = dData; - } - else - { - CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element; - pNewData->data.sKey = sPropName; - pNewData->data.nType = JS_GLOBALDATA_TYPE_NUMBER; - pNewData->data.dData = dData; - m_arrayGlobalData.Add(pNewData); - } +void CJS_GlobalData::SetGlobalVariableNumber(const FX_CHAR* propname, + double dData) { + ASSERT(propname != NULL); + + CFX_ByteString sPropName = propname; + sPropName.TrimLeft(); + sPropName.TrimRight(); + if (sPropName.GetLength() == 0) + return; + + if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { + pData->data.nType = JS_GLOBALDATA_TYPE_NUMBER; + pData->data.dData = dData; + } else { + CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element; + pNewData->data.sKey = sPropName; + pNewData->data.nType = JS_GLOBALDATA_TYPE_NUMBER; + pNewData->data.dData = dData; + m_arrayGlobalData.Add(pNewData); + } } -void CJS_GlobalData::SetGlobalVariableBoolean(const FX_CHAR* propname, bool bData) -{ - ASSERT(propname != NULL); - CFX_ByteString sPropName = propname; +void CJS_GlobalData::SetGlobalVariableBoolean(const FX_CHAR* propname, + bool bData) { + ASSERT(propname != NULL); + CFX_ByteString sPropName = propname; - sPropName.TrimLeft(); - sPropName.TrimRight(); + sPropName.TrimLeft(); + sPropName.TrimRight(); - if (sPropName.GetLength() == 0) return; + if (sPropName.GetLength() == 0) + return; - if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) - { - pData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN; - pData->data.bData = bData; - } - else - { - CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element; - pNewData->data.sKey = sPropName; - pNewData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN; - pNewData->data.bData = bData; - - m_arrayGlobalData.Add(pNewData); - } -} - -void CJS_GlobalData::SetGlobalVariableString(const FX_CHAR* propname, const CFX_ByteString& sData) -{ - ASSERT(propname != NULL); - CFX_ByteString sPropName = propname; + if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { + pData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN; + pData->data.bData = bData; + } else { + CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element; + pNewData->data.sKey = sPropName; + pNewData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN; + pNewData->data.bData = bData; - sPropName.TrimLeft(); - sPropName.TrimRight(); + m_arrayGlobalData.Add(pNewData); + } +} - if (sPropName.GetLength() == 0) return; +void CJS_GlobalData::SetGlobalVariableString(const FX_CHAR* propname, + const CFX_ByteString& sData) { + ASSERT(propname != NULL); + CFX_ByteString sPropName = propname; - if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) - { - pData->data.nType = JS_GLOBALDATA_TYPE_STRING; - pData->data.sData = sData; - } - else - { - CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element; - pNewData->data.sKey = sPropName; - pNewData->data.nType = JS_GLOBALDATA_TYPE_STRING; - pNewData->data.sData = sData; - - m_arrayGlobalData.Add(pNewData); - } -} + sPropName.TrimLeft(); + sPropName.TrimRight(); -void CJS_GlobalData::SetGlobalVariableObject(const FX_CHAR* propname, const CJS_GlobalVariableArray& array) -{ - ASSERT(propname != NULL); - CFX_ByteString sPropName = propname; + if (sPropName.GetLength() == 0) + return; - sPropName.TrimLeft(); - sPropName.TrimRight(); + if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { + pData->data.nType = JS_GLOBALDATA_TYPE_STRING; + pData->data.sData = sData; + } else { + CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element; + pNewData->data.sKey = sPropName; + pNewData->data.nType = JS_GLOBALDATA_TYPE_STRING; + pNewData->data.sData = sData; - if (sPropName.GetLength() == 0) return; + m_arrayGlobalData.Add(pNewData); + } +} - if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) - { - pData->data.nType = JS_GLOBALDATA_TYPE_OBJECT; - pData->data.objData.Copy(array); - } - else - { - CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element; - pNewData->data.sKey = sPropName; - pNewData->data.nType = JS_GLOBALDATA_TYPE_OBJECT; - pNewData->data.objData.Copy(array); - - m_arrayGlobalData.Add(pNewData); - } +void CJS_GlobalData::SetGlobalVariableObject( + const FX_CHAR* propname, + const CJS_GlobalVariableArray& array) { + ASSERT(propname != NULL); + CFX_ByteString sPropName = propname; + + sPropName.TrimLeft(); + sPropName.TrimRight(); + + if (sPropName.GetLength() == 0) + return; + + if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { + pData->data.nType = JS_GLOBALDATA_TYPE_OBJECT; + pData->data.objData.Copy(array); + } else { + CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element; + pNewData->data.sKey = sPropName; + pNewData->data.nType = JS_GLOBALDATA_TYPE_OBJECT; + pNewData->data.objData.Copy(array); + + m_arrayGlobalData.Add(pNewData); + } } -void CJS_GlobalData::SetGlobalVariableNull(const FX_CHAR* propname) -{ - ASSERT(propname != NULL); - CFX_ByteString sPropName = propname; +void CJS_GlobalData::SetGlobalVariableNull(const FX_CHAR* propname) { + ASSERT(propname != NULL); + CFX_ByteString sPropName = propname; - sPropName.TrimLeft(); - sPropName.TrimRight(); + sPropName.TrimLeft(); + sPropName.TrimRight(); - if (sPropName.GetLength() == 0) return; + if (sPropName.GetLength() == 0) + return; - if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) - { - pData->data.nType = JS_GLOBALDATA_TYPE_NULL; - } - else - { - CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element; - pNewData->data.sKey = sPropName; - pNewData->data.nType = JS_GLOBALDATA_TYPE_NULL; + if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { + pData->data.nType = JS_GLOBALDATA_TYPE_NULL; + } else { + CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element; + pNewData->data.sKey = sPropName; + pNewData->data.nType = JS_GLOBALDATA_TYPE_NULL; - m_arrayGlobalData.Add(pNewData); - } + m_arrayGlobalData.Add(pNewData); + } } -FX_BOOL CJS_GlobalData::SetGlobalVariablePersistent(const FX_CHAR* propname, FX_BOOL bPersistent) -{ - ASSERT(propname != NULL); - CFX_ByteString sPropName = propname; +FX_BOOL CJS_GlobalData::SetGlobalVariablePersistent(const FX_CHAR* propname, + FX_BOOL bPersistent) { + ASSERT(propname != NULL); + CFX_ByteString sPropName = propname; - sPropName.TrimLeft(); - sPropName.TrimRight(); + sPropName.TrimLeft(); + sPropName.TrimRight(); - if (sPropName.GetLength() == 0) return FALSE; + if (sPropName.GetLength() == 0) + return FALSE; - if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) - { - pData->bPersistent = bPersistent; - return TRUE; - } + if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) { + pData->bPersistent = bPersistent; + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CJS_GlobalData::DeleteGlobalVariable(const FX_CHAR* propname) -{ - ASSERT(propname != NULL); - CFX_ByteString sPropName = propname; +FX_BOOL CJS_GlobalData::DeleteGlobalVariable(const FX_CHAR* propname) { + ASSERT(propname != NULL); + CFX_ByteString sPropName = propname; - sPropName.TrimLeft(); - sPropName.TrimRight(); + sPropName.TrimLeft(); + sPropName.TrimRight(); - if (sPropName.GetLength() == 0) return FALSE; + if (sPropName.GetLength() == 0) + return FALSE; - int nFind = FindGlobalVariable(sPropName); + int nFind = FindGlobalVariable(sPropName); - if (nFind >= 0) - { - delete m_arrayGlobalData.GetAt(nFind); - m_arrayGlobalData.RemoveAt(nFind); - return TRUE; - } + if (nFind >= 0) { + delete m_arrayGlobalData.GetAt(nFind); + m_arrayGlobalData.RemoveAt(nFind); + return TRUE; + } - return FALSE; + return FALSE; } -int32_t CJS_GlobalData::GetSize() const -{ - return m_arrayGlobalData.GetSize(); +int32_t CJS_GlobalData::GetSize() const { + return m_arrayGlobalData.GetSize(); } -CJS_GlobalData_Element* CJS_GlobalData::GetAt(int index) const -{ - return m_arrayGlobalData.GetAt(index); +CJS_GlobalData_Element* CJS_GlobalData::GetAt(int index) const { + return m_arrayGlobalData.GetAt(index); } -void CJS_GlobalData::LoadGlobalPersistentVariables() -{ - uint8_t* pBuffer = NULL; - int32_t nLength = 0; - - LoadFileBuffer(m_sFilePath.c_str(), pBuffer, nLength); - CRYPT_ArcFourCryptBlock(pBuffer, nLength, JS_RC4KEY, sizeof(JS_RC4KEY)); - - if (pBuffer) - { - uint8_t* p = pBuffer; - FX_WORD wType = *((FX_WORD*)p); - p += sizeof(FX_WORD); - - //FX_WORD wTemp = (FX_WORD)(('X' << 8) | 'F'); - - if (wType == (FX_WORD)(('X' << 8) | 'F')) - { - FX_WORD wVersion = *((FX_WORD*)p); - p += sizeof(FX_WORD); - - ASSERT(wVersion <= 2); - - FX_DWORD dwCount = *((FX_DWORD*)p); - p += sizeof(FX_DWORD); - - FX_DWORD dwSize = *((FX_DWORD*)p); - p += sizeof(FX_DWORD); - - if (dwSize == nLength - sizeof(FX_WORD) * 2 - sizeof(FX_DWORD)* 2) - { - for (int32_t i=0,sz=dwCount; i pBuffer + nLength) - break; - - FX_DWORD dwNameLen = *((FX_DWORD*)p); - p += sizeof(FX_DWORD); - - if (p + dwNameLen > pBuffer + nLength) - break; - - CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen); - p += sizeof(char) * dwNameLen; - - FX_WORD wDataType = *((FX_WORD*)p); - p += sizeof(FX_WORD); - - switch (wDataType) - { - case JS_GLOBALDATA_TYPE_NUMBER: - { - double dData = 0; - switch (wVersion) - { - case 1: - { - FX_DWORD dwData = *((FX_DWORD*)p); - p += sizeof(FX_DWORD); - dData = dwData; - } - break; - case 2: - { - dData = *((double*)p); - p += sizeof(double); - } - break; - } - SetGlobalVariableNumber(sEntry, dData); - SetGlobalVariablePersistent(sEntry, TRUE); - } - break; - case JS_GLOBALDATA_TYPE_BOOLEAN: - { - FX_WORD wData = *((FX_WORD*)p); - p += sizeof(FX_WORD); - SetGlobalVariableBoolean(sEntry, (bool)(wData == 1)); - SetGlobalVariablePersistent(sEntry, TRUE); - } - break; - case JS_GLOBALDATA_TYPE_STRING: - { - FX_DWORD dwLength = *((FX_DWORD*)p); - p += sizeof(FX_DWORD); - - if (p + dwLength > pBuffer + nLength) - break; - - SetGlobalVariableString(sEntry, CFX_ByteString(p, dwLength)); - SetGlobalVariablePersistent(sEntry, TRUE); - p += sizeof(char) * dwLength; - } - break; - case JS_GLOBALDATA_TYPE_NULL: - { - SetGlobalVariableNull(sEntry); - SetGlobalVariablePersistent(sEntry, TRUE); - } - } - } +void CJS_GlobalData::LoadGlobalPersistentVariables() { + uint8_t* pBuffer = NULL; + int32_t nLength = 0; + + LoadFileBuffer(m_sFilePath.c_str(), pBuffer, nLength); + CRYPT_ArcFourCryptBlock(pBuffer, nLength, JS_RC4KEY, sizeof(JS_RC4KEY)); + + if (pBuffer) { + uint8_t* p = pBuffer; + FX_WORD wType = *((FX_WORD*)p); + p += sizeof(FX_WORD); + + // FX_WORD wTemp = (FX_WORD)(('X' << 8) | 'F'); + + if (wType == (FX_WORD)(('X' << 8) | 'F')) { + FX_WORD wVersion = *((FX_WORD*)p); + p += sizeof(FX_WORD); + + ASSERT(wVersion <= 2); + + FX_DWORD dwCount = *((FX_DWORD*)p); + p += sizeof(FX_DWORD); + + FX_DWORD dwSize = *((FX_DWORD*)p); + p += sizeof(FX_DWORD); + + if (dwSize == nLength - sizeof(FX_WORD) * 2 - sizeof(FX_DWORD) * 2) { + for (int32_t i = 0, sz = dwCount; i < sz; i++) { + if (p > pBuffer + nLength) + break; + + FX_DWORD dwNameLen = *((FX_DWORD*)p); + p += sizeof(FX_DWORD); + + if (p + dwNameLen > pBuffer + nLength) + break; + + CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen); + p += sizeof(char) * dwNameLen; + + FX_WORD wDataType = *((FX_WORD*)p); + p += sizeof(FX_WORD); + + switch (wDataType) { + case JS_GLOBALDATA_TYPE_NUMBER: { + double dData = 0; + switch (wVersion) { + case 1: { + FX_DWORD dwData = *((FX_DWORD*)p); + p += sizeof(FX_DWORD); + dData = dwData; + } break; + case 2: { + dData = *((double*)p); + p += sizeof(double); + } break; + } + SetGlobalVariableNumber(sEntry, dData); + SetGlobalVariablePersistent(sEntry, TRUE); + } break; + case JS_GLOBALDATA_TYPE_BOOLEAN: { + FX_WORD wData = *((FX_WORD*)p); + p += sizeof(FX_WORD); + SetGlobalVariableBoolean(sEntry, (bool)(wData == 1)); + SetGlobalVariablePersistent(sEntry, TRUE); + } break; + case JS_GLOBALDATA_TYPE_STRING: { + FX_DWORD dwLength = *((FX_DWORD*)p); + p += sizeof(FX_DWORD); + + if (p + dwLength > pBuffer + nLength) + break; + + SetGlobalVariableString(sEntry, CFX_ByteString(p, dwLength)); + SetGlobalVariablePersistent(sEntry, TRUE); + p += sizeof(char) * dwLength; + } break; + case JS_GLOBALDATA_TYPE_NULL: { + SetGlobalVariableNull(sEntry); + SetGlobalVariablePersistent(sEntry, TRUE); } + } } - FX_Free(pBuffer); + } } + FX_Free(pBuffer); + } } /* @@ -471,104 +415,96 @@ struct js_global_datafile_data }; */ -void CJS_GlobalData::SaveGlobalPersisitentVariables() -{ - FX_DWORD nCount = 0; - CFX_BinaryBuf sData; +void CJS_GlobalData::SaveGlobalPersisitentVariables() { + FX_DWORD nCount = 0; + CFX_BinaryBuf sData; - for (int i=0,sz=m_arrayGlobalData.GetSize(); ibPersistent) - { - CFX_BinaryBuf sElement; - MakeByteString(pElement->data.sKey, &pElement->data, sElement); + if (pElement->bPersistent) { + CFX_BinaryBuf sElement; + MakeByteString(pElement->data.sKey, &pElement->data, sElement); - if (sData.GetSize() + sElement.GetSize() > JS_MAXGLOBALDATA) - break; + if (sData.GetSize() + sElement.GetSize() > JS_MAXGLOBALDATA) + break; - sData.AppendBlock(sElement.GetBuffer(), sElement.GetSize()); - nCount++; - } + sData.AppendBlock(sElement.GetBuffer(), sElement.GetSize()); + nCount++; } + } - CFX_BinaryBuf sFile; + CFX_BinaryBuf sFile; - FX_WORD wType = (FX_WORD)(('X' << 8) | 'F'); - sFile.AppendBlock(&wType, sizeof(FX_WORD)); - FX_WORD wVersion = 2; - sFile.AppendBlock(&wVersion, sizeof(FX_WORD)); - sFile.AppendBlock(&nCount, sizeof(FX_DWORD)); - FX_DWORD dwSize = sData.GetSize(); - sFile.AppendBlock(&dwSize, sizeof(FX_DWORD)); + FX_WORD wType = (FX_WORD)(('X' << 8) | 'F'); + sFile.AppendBlock(&wType, sizeof(FX_WORD)); + FX_WORD wVersion = 2; + sFile.AppendBlock(&wVersion, sizeof(FX_WORD)); + sFile.AppendBlock(&nCount, sizeof(FX_DWORD)); + FX_DWORD dwSize = sData.GetSize(); + sFile.AppendBlock(&dwSize, sizeof(FX_DWORD)); - sFile.AppendBlock(sData.GetBuffer(), sData.GetSize()); + sFile.AppendBlock(sData.GetBuffer(), sData.GetSize()); - CRYPT_ArcFourCryptBlock(sFile.GetBuffer(), sFile.GetSize(), JS_RC4KEY, sizeof(JS_RC4KEY)); - WriteFileBuffer(m_sFilePath.c_str(), (const FX_CHAR*)sFile.GetBuffer(), sFile.GetSize()); + CRYPT_ArcFourCryptBlock(sFile.GetBuffer(), sFile.GetSize(), JS_RC4KEY, + sizeof(JS_RC4KEY)); + WriteFileBuffer(m_sFilePath.c_str(), (const FX_CHAR*)sFile.GetBuffer(), + sFile.GetSize()); } -void CJS_GlobalData::LoadFileBuffer(const FX_WCHAR* sFilePath, uint8_t*& pBuffer, int32_t& nLength) -{ -//UnSupport. +void CJS_GlobalData::LoadFileBuffer(const FX_WCHAR* sFilePath, + uint8_t*& pBuffer, + int32_t& nLength) { + // UnSupport. } -void CJS_GlobalData::WriteFileBuffer(const FX_WCHAR* sFilePath, const FX_CHAR* pBuffer, int32_t nLength) -{ -//UnSupport. +void CJS_GlobalData::WriteFileBuffer(const FX_WCHAR* sFilePath, + const FX_CHAR* pBuffer, + int32_t nLength) { + // UnSupport. } -void CJS_GlobalData::MakeByteString(const CFX_ByteString& name, CJS_KeyValue* pData, CFX_BinaryBuf& sData) -{ - FX_WORD wType = (FX_WORD)pData->nType; - switch (wType) - { - case JS_GLOBALDATA_TYPE_NUMBER: - { - FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); - sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); - sData.AppendString(name); - sData.AppendBlock(&wType, sizeof(FX_WORD)); - - double dData = pData->dData; - sData.AppendBlock(&dData, sizeof(double)); - } - break; - case JS_GLOBALDATA_TYPE_BOOLEAN: - { - FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); - sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); - sData.AppendString(name); - sData.AppendBlock(&wType, sizeof(FX_WORD)); - - FX_WORD wData = (FX_WORD)pData->bData; - sData.AppendBlock(&wData, sizeof(FX_WORD)); - } - break; - case JS_GLOBALDATA_TYPE_STRING: - { - FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); - sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); - sData.AppendString(name); - sData.AppendBlock(&wType, sizeof(FX_WORD)); - - FX_DWORD dwDataLen = (FX_DWORD)pData->sData.GetLength(); - sData.AppendBlock(&dwDataLen, sizeof(FX_DWORD)); - sData.AppendString(pData->sData); - } - break; - case JS_GLOBALDATA_TYPE_NULL: - { - FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); - sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); - sData.AppendString(name); - sData.AppendBlock(&wType, sizeof(FX_DWORD)); - } - break; +void CJS_GlobalData::MakeByteString(const CFX_ByteString& name, + CJS_KeyValue* pData, + CFX_BinaryBuf& sData) { + FX_WORD wType = (FX_WORD)pData->nType; + switch (wType) { + case JS_GLOBALDATA_TYPE_NUMBER: { + FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); + sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); + sData.AppendString(name); + sData.AppendBlock(&wType, sizeof(FX_WORD)); + + double dData = pData->dData; + sData.AppendBlock(&dData, sizeof(double)); + } break; + case JS_GLOBALDATA_TYPE_BOOLEAN: { + FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); + sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); + sData.AppendString(name); + sData.AppendBlock(&wType, sizeof(FX_WORD)); + + FX_WORD wData = (FX_WORD)pData->bData; + sData.AppendBlock(&wData, sizeof(FX_WORD)); + } break; + case JS_GLOBALDATA_TYPE_STRING: { + FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); + sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); + sData.AppendString(name); + sData.AppendBlock(&wType, sizeof(FX_WORD)); + + FX_DWORD dwDataLen = (FX_DWORD)pData->sData.GetLength(); + sData.AppendBlock(&dwDataLen, sizeof(FX_DWORD)); + sData.AppendString(pData->sData); + } break; + case JS_GLOBALDATA_TYPE_NULL: { + FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); + sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); + sData.AppendString(name); + sData.AppendBlock(&wType, sizeof(FX_DWORD)); + } break; default: - break; - } + break; + } } - diff --git a/fpdfsdk/src/javascript/JS_Object.cpp b/fpdfsdk/src/javascript/JS_Object.cpp index 2ee23f8877..eb089ed563 100644 --- a/fpdfsdk/src/javascript/JS_Object.cpp +++ b/fpdfsdk/src/javascript/JS_Object.cpp @@ -10,137 +10,130 @@ #include "../../include/javascript/JS_Object.h" #include "../../include/javascript/JS_Context.h" -JS_TIMER_MAPARRAY& GetTimeMap() -{ +JS_TIMER_MAPARRAY& GetTimeMap() { // Leak the timer array at shutdown. static auto* timeMap = new JS_TIMER_MAPARRAY; return *timeMap; } -int FXJS_MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, const FX_WCHAR* swMsg, const FX_WCHAR* swTitle, FX_UINT nType, FX_UINT nIcon) -{ - if (!pApp) - return 0; +int FXJS_MsgBox(CPDFDoc_Environment* pApp, + CPDFSDK_PageView* pPageView, + const FX_WCHAR* swMsg, + const FX_WCHAR* swTitle, + FX_UINT nType, + FX_UINT nIcon) { + if (!pApp) + return 0; - if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument()) - pDoc->KillFocusAnnot(); + if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument()) + pDoc->KillFocusAnnot(); - return pApp->JS_appAlert(swMsg, swTitle, nType, nIcon); + return pApp->JS_appAlert(swMsg, swTitle, nType, nIcon); } -CPDFSDK_PageView* FXJS_GetPageView(IFXJS_Context* cc) -{ - if (CJS_Context* pContext = (CJS_Context *)cc) - { - if (pContext->GetReaderDocument()) - return NULL; - } - return NULL; +CPDFSDK_PageView* FXJS_GetPageView(IFXJS_Context* cc) { + if (CJS_Context* pContext = (CJS_Context*)cc) { + if (pContext->GetReaderDocument()) + return NULL; + } + return NULL; } -/* --------------------------------- CJS_EmbedObj --------------------------------- */ +/* --------------------------------- CJS_EmbedObj + * --------------------------------- */ -CJS_EmbedObj::CJS_EmbedObj(CJS_Object* pJSObject) : - m_pJSObject(pJSObject) -{ -} - -CJS_EmbedObj::~CJS_EmbedObj() -{ - m_pJSObject = NULL; +CJS_EmbedObj::CJS_EmbedObj(CJS_Object* pJSObject) : m_pJSObject(pJSObject) {} +CJS_EmbedObj::~CJS_EmbedObj() { + m_pJSObject = NULL; } -CPDFSDK_PageView* CJS_EmbedObj::JSGetPageView(IFXJS_Context* cc) -{ - return FXJS_GetPageView(cc); +CPDFSDK_PageView* CJS_EmbedObj::JSGetPageView(IFXJS_Context* cc) { + return FXJS_GetPageView(cc); } -int CJS_EmbedObj::MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView,const FX_WCHAR* swMsg,const FX_WCHAR* swTitle,FX_UINT nType,FX_UINT nIcon) -{ - return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon); +int CJS_EmbedObj::MsgBox(CPDFDoc_Environment* pApp, + CPDFSDK_PageView* pPageView, + const FX_WCHAR* swMsg, + const FX_WCHAR* swTitle, + FX_UINT nType, + FX_UINT nIcon) { + return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon); } -void CJS_EmbedObj::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) -{ - CJS_Object::Alert(pContext, swMsg); +void CJS_EmbedObj::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) { + CJS_Object::Alert(pContext, swMsg); } -CJS_Timer* CJS_EmbedObj::BeginTimer(CPDFDoc_Environment* pApp, FX_UINT nElapse) -{ - CJS_Timer* pTimer = new CJS_Timer(this,pApp); - pTimer->SetJSTimer(nElapse); +CJS_Timer* CJS_EmbedObj::BeginTimer(CPDFDoc_Environment* pApp, + FX_UINT nElapse) { + CJS_Timer* pTimer = new CJS_Timer(this, pApp); + pTimer->SetJSTimer(nElapse); - return pTimer; + return pTimer; } -void CJS_EmbedObj::EndTimer(CJS_Timer* pTimer) -{ - ASSERT(pTimer != NULL); - pTimer->KillJSTimer(); - delete pTimer; +void CJS_EmbedObj::EndTimer(CJS_Timer* pTimer) { + ASSERT(pTimer != NULL); + pTimer->KillJSTimer(); + delete pTimer; } -/* --------------------------------- CJS_Object --------------------------------- */ -void FreeObject(const v8::WeakCallbackInfo& data) -{ - CJS_Object* pJSObj = data.GetParameter(); - pJSObj->ExitInstance(); - delete pJSObj; - JS_FreePrivate(data.GetInternalField(0)); +/* --------------------------------- CJS_Object + * --------------------------------- */ +void FreeObject(const v8::WeakCallbackInfo& data) { + CJS_Object* pJSObj = data.GetParameter(); + pJSObj->ExitInstance(); + delete pJSObj; + JS_FreePrivate(data.GetInternalField(0)); } -void DisposeObject(const v8::WeakCallbackInfo& data) -{ - CJS_Object* pJSObj = data.GetParameter(); - pJSObj->Dispose(); - data.SetSecondPassCallback(FreeObject); +void DisposeObject(const v8::WeakCallbackInfo& data) { + CJS_Object* pJSObj = data.GetParameter(); + pJSObj->Dispose(); + data.SetSecondPassCallback(FreeObject); } -CJS_Object::CJS_Object(JSFXObject pObject) :m_pEmbedObj(NULL) -{ - v8::Local context = pObject->CreationContext(); - m_pIsolate = context->GetIsolate(); - m_pObject.Reset(m_pIsolate, pObject); +CJS_Object::CJS_Object(JSFXObject pObject) : m_pEmbedObj(NULL) { + v8::Local context = pObject->CreationContext(); + m_pIsolate = context->GetIsolate(); + m_pObject.Reset(m_pIsolate, pObject); }; -CJS_Object::~CJS_Object(void) -{ - delete m_pEmbedObj; - m_pEmbedObj = NULL; +CJS_Object::~CJS_Object(void) { + delete m_pEmbedObj; + m_pEmbedObj = NULL; - m_pObject.Reset(); + m_pObject.Reset(); }; -void CJS_Object::MakeWeak() -{ - m_pObject.SetWeak( - this, DisposeObject, v8::WeakCallbackType::kInternalFields); +void CJS_Object::MakeWeak() { + m_pObject.SetWeak(this, DisposeObject, v8::WeakCallbackType::kInternalFields); } -void CJS_Object::Dispose() -{ - m_pObject.Reset(); +void CJS_Object::Dispose() { + m_pObject.Reset(); } -CPDFSDK_PageView* CJS_Object::JSGetPageView(IFXJS_Context* cc) -{ - return FXJS_GetPageView(cc); +CPDFSDK_PageView* CJS_Object::JSGetPageView(IFXJS_Context* cc) { + return FXJS_GetPageView(cc); } -int CJS_Object::MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, const FX_WCHAR* swMsg, const FX_WCHAR* swTitle, FX_UINT nType, FX_UINT nIcon) -{ - return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon); +int CJS_Object::MsgBox(CPDFDoc_Environment* pApp, + CPDFSDK_PageView* pPageView, + const FX_WCHAR* swMsg, + const FX_WCHAR* swTitle, + FX_UINT nType, + FX_UINT nIcon) { + return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon); } -void CJS_Object::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) -{ - ASSERT(pContext != NULL); +void CJS_Object::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) { + ASSERT(pContext != NULL); - if (pContext->IsMsgBoxEnabled()) - { - CPDFDoc_Environment* pApp = pContext->GetReaderApp(); - if(pApp) - pApp->JS_appAlert(swMsg, NULL, 0, 3); - } + if (pContext->IsMsgBoxEnabled()) { + CPDFDoc_Environment* pApp = pContext->GetReaderApp(); + if (pApp) + pApp->JS_appAlert(swMsg, NULL, 0, 3); + } } diff --git a/fpdfsdk/src/javascript/JS_Runtime.cpp b/fpdfsdk/src/javascript/JS_Runtime.cpp index d68b268591..7dfe326c54 100644 --- a/fpdfsdk/src/javascript/JS_Runtime.cpp +++ b/fpdfsdk/src/javascript/JS_Runtime.cpp @@ -29,376 +29,372 @@ #include "../../include/fpdfxfa/fpdfxfa_app.h" #include "../../../xfa/src/fxjse/src/value.h" -CJS_RuntimeFactory::~CJS_RuntimeFactory() -{ -} - -IFXJS_Runtime* CJS_RuntimeFactory::NewJSRuntime(CPDFDoc_Environment* pApp) -{ - if (!m_bInit) - { - unsigned int embedderDataSlot = 0; - if (pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) { - embedderDataSlot = pApp->GetFormFillInfo()->m_pJsPlatform->m_v8EmbedderSlot; - } - JS_Initial(embedderDataSlot); - m_bInit = TRUE; - } - return new CJS_Runtime(pApp); +CJS_RuntimeFactory::~CJS_RuntimeFactory() {} + +IFXJS_Runtime* CJS_RuntimeFactory::NewJSRuntime(CPDFDoc_Environment* pApp) { + if (!m_bInit) { + unsigned int embedderDataSlot = 0; + if (pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) { + embedderDataSlot = + pApp->GetFormFillInfo()->m_pJsPlatform->m_v8EmbedderSlot; + } + JS_Initial(embedderDataSlot); + m_bInit = TRUE; + } + return new CJS_Runtime(pApp); } -void CJS_RuntimeFactory::AddRef() -{ - //to do.Should be implemented as atom manipulation. - m_nRef++; +void CJS_RuntimeFactory::AddRef() { + // to do.Should be implemented as atom manipulation. + m_nRef++; } -void CJS_RuntimeFactory::Release() -{ - if(m_bInit) - { - //to do.Should be implemented as atom manipulation. - if (--m_nRef == 0) - { - JS_Release(); - ReleaseGlobalData(); - m_bInit = FALSE; - } +void CJS_RuntimeFactory::Release() { + if (m_bInit) { + // to do.Should be implemented as atom manipulation. + if (--m_nRef == 0) { + JS_Release(); + ReleaseGlobalData(); + m_bInit = FALSE; } + } } -void CJS_RuntimeFactory::DeleteJSRuntime(IFXJS_Runtime* pRuntime) -{ - delete (CJS_Runtime*)pRuntime; +void CJS_RuntimeFactory::DeleteJSRuntime(IFXJS_Runtime* pRuntime) { + delete (CJS_Runtime*)pRuntime; } -CJS_GlobalData* CJS_RuntimeFactory::NewGlobalData(CPDFDoc_Environment* pApp) -{ - if (m_pGlobalData) - { - m_nGlobalDataCount++; - return m_pGlobalData; - } - m_nGlobalDataCount = 1; - m_pGlobalData = new CJS_GlobalData(pApp); +CJS_GlobalData* CJS_RuntimeFactory::NewGlobalData(CPDFDoc_Environment* pApp) { + if (m_pGlobalData) { + m_nGlobalDataCount++; return m_pGlobalData; + } + m_nGlobalDataCount = 1; + m_pGlobalData = new CJS_GlobalData(pApp); + return m_pGlobalData; } -void CJS_RuntimeFactory::ReleaseGlobalData() -{ - m_nGlobalDataCount--; +void CJS_RuntimeFactory::ReleaseGlobalData() { + m_nGlobalDataCount--; - if (m_nGlobalDataCount <= 0) - { - delete m_pGlobalData; - m_pGlobalData = NULL; - } + if (m_nGlobalDataCount <= 0) { + delete m_pGlobalData; + m_pGlobalData = NULL; + } } void* CJS_ArrayBufferAllocator::Allocate(size_t length) { - return calloc(1, length); + return calloc(1, length); } void* CJS_ArrayBufferAllocator::AllocateUninitialized(size_t length) { - return malloc(length); + return malloc(length); } void CJS_ArrayBufferAllocator::Free(void* data, size_t length) { - free(data); + free(data); } /* ------------------------------ CJS_Runtime ------------------------------ */ -extern v8::Global& _getGlobalObjectTemplate(IJS_Runtime* pJSRuntime); -CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp) : - m_pApp(pApp), - m_pDocument(NULL), - m_bBlocking(FALSE), - m_pFieldEventPath(NULL), - m_isolate(NULL) -{ - if (CPDFXFA_App::GetInstance()->GetJSERuntime()) { - // TODO(tsepez): CPDFXFA_App should also use the embedder provided isolate. - m_isolate = (v8::Isolate*)CPDFXFA_App::GetInstance()->GetJSERuntime(); - } else if (m_pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) { - m_isolate = reinterpret_cast(m_pApp->GetFormFillInfo()->m_pJsPlatform->m_isolate); - } - if (!m_isolate) { - m_pArrayBufferAllocator.reset(new CJS_ArrayBufferAllocator()); - - v8::Isolate::CreateParams params; - params.array_buffer_allocator = m_pArrayBufferAllocator.get(); - m_isolate = v8::Isolate::New(params); - } - - v8::Isolate* isolate = m_isolate; - v8::Isolate::Scope isolate_scope(isolate); - v8::Locker locker(isolate); - v8::HandleScope handle_scope(isolate); - if (CPDFXFA_App::GetInstance()->InitRuntime(FALSE)) { - CJS_Context * pContext = (CJS_Context*)NewContext(); - JS_InitialRuntime(*this, this, pContext, m_context); - ReleaseContext(pContext); - return; - } - - InitJSObjects(); - - CJS_Context * pContext = (CJS_Context*)NewContext(); +extern v8::Global& _getGlobalObjectTemplate( + IJS_Runtime* pJSRuntime); +CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp) + : m_pApp(pApp), + m_pDocument(NULL), + m_bBlocking(FALSE), + m_pFieldEventPath(NULL), + m_isolate(NULL) { + if (CPDFXFA_App::GetInstance()->GetJSERuntime()) { + // TODO(tsepez): CPDFXFA_App should also use the embedder provided isolate. + m_isolate = (v8::Isolate*)CPDFXFA_App::GetInstance()->GetJSERuntime(); + } else if (m_pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) { + m_isolate = reinterpret_cast( + m_pApp->GetFormFillInfo()->m_pJsPlatform->m_isolate); + } + if (!m_isolate) { + m_pArrayBufferAllocator.reset(new CJS_ArrayBufferAllocator()); + + v8::Isolate::CreateParams params; + params.array_buffer_allocator = m_pArrayBufferAllocator.get(); + m_isolate = v8::Isolate::New(params); + } + + v8::Isolate* isolate = m_isolate; + v8::Isolate::Scope isolate_scope(isolate); + v8::Locker locker(isolate); + v8::HandleScope handle_scope(isolate); + if (CPDFXFA_App::GetInstance()->InitRuntime(FALSE)) { + CJS_Context* pContext = (CJS_Context*)NewContext(); JS_InitialRuntime(*this, this, pContext, m_context); ReleaseContext(pContext); + return; + } + + InitJSObjects(); + + CJS_Context* pContext = (CJS_Context*)NewContext(); + JS_InitialRuntime(*this, this, pContext, m_context); + ReleaseContext(pContext); } -CJS_Runtime::~CJS_Runtime() -{ - int size = m_ContextArray.GetSize(); - for (int i=0;i < size; i++) - delete m_ContextArray.GetAt(i); +CJS_Runtime::~CJS_Runtime() { + int size = m_ContextArray.GetSize(); + for (int i = 0; i < size; i++) + delete m_ContextArray.GetAt(i); - m_ContextArray.RemoveAll(); + m_ContextArray.RemoveAll(); - RemoveEventsInLoop(m_pFieldEventPath); + RemoveEventsInLoop(m_pFieldEventPath); - m_pApp = NULL; - m_pDocument = NULL; - m_pFieldEventPath = NULL; - m_context.Reset(); + m_pApp = NULL; + m_pDocument = NULL; + m_pFieldEventPath = NULL; + m_context.Reset(); - m_isolate = NULL; + m_isolate = NULL; } -FX_BOOL CJS_Runtime::InitJSObjects() -{ - v8::Isolate::Scope isolate_scope(GetIsolate()); - v8::Locker locker(GetIsolate()); - v8::HandleScope handle_scope(GetIsolate()); - v8::Local context = v8::Context::New(GetIsolate()); - v8::Context::Scope context_scope(context); - //0 - 8 - if (CJS_Border::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_Display::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_Font::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_Highlight::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_Position::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_ScaleHow::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_ScaleWhen::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_Style::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_Zoomtype::Init(*this, JS_STATIC) < 0) return FALSE; - - //9 - 11 - if (CJS_App::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_Color::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_Console::Init(*this, JS_STATIC) < 0) return FALSE; - - //12 - 14 - if (CJS_Document::Init(*this, JS_DYNAMIC) < 0) return FALSE; - if (CJS_Event::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_Field::Init(*this, JS_DYNAMIC) < 0) return FALSE; - - //15 - 17 - if (CJS_Global::Init(*this, JS_STATIC) < 0) return FALSE; - if (CJS_Icon::Init(*this, JS_DYNAMIC) < 0) return FALSE; - if (CJS_Util::Init(*this, JS_STATIC) < 0) return FALSE; - - if (CJS_PublicMethods::Init(*this) < 0) return FALSE; - if (CJS_GlobalConsts::Init(*this) < 0) return FALSE; - if (CJS_GlobalArrays::Init(*this) < 0) return FALSE; - - if (CJS_TimerObj::Init(*this, JS_DYNAMIC) < 0) return FALSE; - if (CJS_PrintParamsObj::Init(*this, JS_DYNAMIC) <0) return FALSE; - - return TRUE; +FX_BOOL CJS_Runtime::InitJSObjects() { + v8::Isolate::Scope isolate_scope(GetIsolate()); + v8::Locker locker(GetIsolate()); + v8::HandleScope handle_scope(GetIsolate()); + v8::Local context = v8::Context::New(GetIsolate()); + v8::Context::Scope context_scope(context); + // 0 - 8 + if (CJS_Border::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_Display::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_Font::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_Highlight::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_Position::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_ScaleHow::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_ScaleWhen::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_Style::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_Zoomtype::Init(*this, JS_STATIC) < 0) + return FALSE; + + // 9 - 11 + if (CJS_App::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_Color::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_Console::Init(*this, JS_STATIC) < 0) + return FALSE; + + // 12 - 14 + if (CJS_Document::Init(*this, JS_DYNAMIC) < 0) + return FALSE; + if (CJS_Event::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_Field::Init(*this, JS_DYNAMIC) < 0) + return FALSE; + + // 15 - 17 + if (CJS_Global::Init(*this, JS_STATIC) < 0) + return FALSE; + if (CJS_Icon::Init(*this, JS_DYNAMIC) < 0) + return FALSE; + if (CJS_Util::Init(*this, JS_STATIC) < 0) + return FALSE; + + if (CJS_PublicMethods::Init(*this) < 0) + return FALSE; + if (CJS_GlobalConsts::Init(*this) < 0) + return FALSE; + if (CJS_GlobalArrays::Init(*this) < 0) + return FALSE; + + if (CJS_TimerObj::Init(*this, JS_DYNAMIC) < 0) + return FALSE; + if (CJS_PrintParamsObj::Init(*this, JS_DYNAMIC) < 0) + return FALSE; + + return TRUE; } -IFXJS_Context* CJS_Runtime::NewContext() -{ - CJS_Context * p = new CJS_Context(this); - m_ContextArray.Add(p); - return p; +IFXJS_Context* CJS_Runtime::NewContext() { + CJS_Context* p = new CJS_Context(this); + m_ContextArray.Add(p); + return p; } -void CJS_Runtime::ReleaseContext(IFXJS_Context * pContext) -{ - CJS_Context* pJSContext = (CJS_Context*)pContext; - - for (int i=0, sz=m_ContextArray.GetSize(); i context =v8::Local::New(m_isolate, m_context); - v8::Context::Scope context_scope(context); - - m_pDocument = pReaderDoc; - - if (pReaderDoc) - { - JSObject pThis = JS_GetThisObj(*this); - if(!pThis.IsEmpty()) - { - if (JS_GetObjDefnID(pThis) == JS_GetObjDefnID(*this, L"Document")) - { - if (CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pThis)) - { - if (Document * pDocument = (Document*)pJSDocument->GetEmbedObject()) - pDocument->AttachDoc(pReaderDoc); - } - } - } - JS_SetThisObj(*this, JS_GetObjDefnID(*this, L"Document")); - } - else - { - JS_SetThisObj(*this, JS_GetObjDefnID(*this, L"app")); - } - } +IFXJS_Context* CJS_Runtime::GetCurrentContext() { + if (!m_ContextArray.GetSize()) + return NULL; + return m_ContextArray.GetAt(m_ContextArray.GetSize() - 1); } -FX_BOOL CJS_Runtime::AddEventToLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType) -{ - if (m_pFieldEventPath == NULL) - { - m_pFieldEventPath = new CJS_FieldEvent; - m_pFieldEventPath->sTargetName = sTargetName; - m_pFieldEventPath->eEventType = eEventType; - m_pFieldEventPath->pNext = NULL; - - return TRUE; - } +void CJS_Runtime::SetReaderDocument(CPDFSDK_Document* pReaderDoc) { + if (m_pDocument != pReaderDoc) { + v8::Isolate::Scope isolate_scope(m_isolate); + v8::Locker locker(m_isolate); + v8::HandleScope handle_scope(m_isolate); + v8::Local context = + v8::Local::New(m_isolate, m_context); + v8::Context::Scope context_scope(context); - //to search - CJS_FieldEvent* p = m_pFieldEventPath; - CJS_FieldEvent* pLast = m_pFieldEventPath; - while (p) - { - if (p->eEventType == eEventType && p->sTargetName == sTargetName) - return FALSE; + m_pDocument = pReaderDoc; - pLast = p; - p = p->pNext; + if (pReaderDoc) { + JSObject pThis = JS_GetThisObj(*this); + if (!pThis.IsEmpty()) { + if (JS_GetObjDefnID(pThis) == JS_GetObjDefnID(*this, L"Document")) { + if (CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pThis)) { + if (Document* pDocument = (Document*)pJSDocument->GetEmbedObject()) + pDocument->AttachDoc(pReaderDoc); + } + } + } + JS_SetThisObj(*this, JS_GetObjDefnID(*this, L"Document")); + } else { + JS_SetThisObj(*this, JS_GetObjDefnID(*this, L"app")); } + } +} - //to add - CJS_FieldEvent* pNew = new CJS_FieldEvent; - pNew->sTargetName = sTargetName; - pNew->eEventType = eEventType; - pNew->pNext = NULL; - - pLast->pNext = pNew; +FX_BOOL CJS_Runtime::AddEventToLoop(const CFX_WideString& sTargetName, + JS_EVENT_T eEventType) { + if (m_pFieldEventPath == NULL) { + m_pFieldEventPath = new CJS_FieldEvent; + m_pFieldEventPath->sTargetName = sTargetName; + m_pFieldEventPath->eEventType = eEventType; + m_pFieldEventPath->pNext = NULL; return TRUE; -} + } -void CJS_Runtime::RemoveEventInLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType) -{ - FX_BOOL bFind = FALSE; - - CJS_FieldEvent* p = m_pFieldEventPath; - CJS_FieldEvent* pLast = NULL; - while (p) - { - if (p->eEventType == eEventType && p->sTargetName == sTargetName) - { - bFind = TRUE; - break; - } + // to search + CJS_FieldEvent* p = m_pFieldEventPath; + CJS_FieldEvent* pLast = m_pFieldEventPath; + while (p) { + if (p->eEventType == eEventType && p->sTargetName == sTargetName) + return FALSE; - pLast = p; - p = p->pNext; - } + pLast = p; + p = p->pNext; + } - if (bFind) - { - RemoveEventsInLoop(p); + // to add + CJS_FieldEvent* pNew = new CJS_FieldEvent; + pNew->sTargetName = sTargetName; + pNew->eEventType = eEventType; + pNew->pNext = NULL; - if (p == m_pFieldEventPath) - m_pFieldEventPath = NULL; + pLast->pNext = pNew; - if (pLast) - pLast->pNext = NULL; - } + return TRUE; } -void CJS_Runtime::RemoveEventsInLoop(CJS_FieldEvent* pStart) -{ - CJS_FieldEvent* p = pStart; - - while (p) - { - CJS_FieldEvent* pOld = p; - p = pOld->pNext; +void CJS_Runtime::RemoveEventInLoop(const CFX_WideString& sTargetName, + JS_EVENT_T eEventType) { + FX_BOOL bFind = FALSE; - delete pOld; + CJS_FieldEvent* p = m_pFieldEventPath; + CJS_FieldEvent* pLast = NULL; + while (p) { + if (p->eEventType == eEventType && p->sTargetName == sTargetName) { + bFind = TRUE; + break; } -} -v8::Local CJS_Runtime::NewJSContext() -{ - return v8::Local::New(m_isolate, m_context); -} + pLast = p; + p = p->pNext; + } -CFX_WideString ChangeObjName(const CFX_WideString& str) -{ - CFX_WideString sRet = str; - sRet.Replace(L"_", L"."); - return sRet; -} -FX_BOOL CJS_Runtime::GetHValueByName(const CFX_ByteStringC& utf8Name, FXJSE_HVALUE hValue) -{ - const FX_CHAR* name = utf8Name.GetCStr(); + if (bFind) { + RemoveEventsInLoop(p); - v8::Locker lock(GetIsolate()); - v8::Isolate::Scope isolate_scope(GetIsolate()); - v8::HandleScope handle_scope(GetIsolate()); - v8::Local context = - v8::Local::New(GetIsolate(), m_context); - v8::Context::Scope context_scope(context); + if (p == m_pFieldEventPath) + m_pFieldEventPath = NULL; + if (pLast) + pLast->pNext = NULL; + } +} - //v8::Local tmpCotext = v8::Local::New(GetIsolate(), m_context); - v8::Local propvalue = context->Global()->Get(v8::String::NewFromUtf8(GetIsolate(), name, v8::String::kNormalString, utf8Name.GetLength())); +void CJS_Runtime::RemoveEventsInLoop(CJS_FieldEvent* pStart) { + CJS_FieldEvent* p = pStart; - if (propvalue.IsEmpty()) { - FXJSE_Value_SetUndefined(hValue); - return FALSE; - } - ((CFXJSE_Value*)hValue)->ForceSetValue(propvalue); + while (p) { + CJS_FieldEvent* pOld = p; + p = pOld->pNext; - return TRUE; + delete pOld; + } } -FX_BOOL CJS_Runtime::SetHValueByName(const CFX_ByteStringC& utf8Name, FXJSE_HVALUE hValue) -{ - if (utf8Name.IsEmpty() || hValue == NULL) - return FALSE; - const FX_CHAR* name = utf8Name.GetCStr(); - v8::Isolate* pIsolate = GetIsolate(); - v8::Locker lock(pIsolate); - v8::Isolate::Scope isolate_scope(pIsolate); - v8::HandleScope handle_scope(pIsolate); - v8::Local context = - v8::Local::New(pIsolate, m_context); - v8::Context::Scope context_scope(context); - //v8::Local tmpCotext = v8::Local::New(GetIsolate(), m_context); - v8::Local propvalue = v8::Local::New(GetIsolate(),((CFXJSE_Value*)hValue)->DirectGetValue()); - context->Global()->Set(v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString, utf8Name.GetLength()), propvalue); +v8::Local CJS_Runtime::NewJSContext() { + return v8::Local::New(m_isolate, m_context); +} - return TRUE; +CFX_WideString ChangeObjName(const CFX_WideString& str) { + CFX_WideString sRet = str; + sRet.Replace(L"_", L"."); + return sRet; +} +FX_BOOL CJS_Runtime::GetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) { + const FX_CHAR* name = utf8Name.GetCStr(); + + v8::Locker lock(GetIsolate()); + v8::Isolate::Scope isolate_scope(GetIsolate()); + v8::HandleScope handle_scope(GetIsolate()); + v8::Local context = + v8::Local::New(GetIsolate(), m_context); + v8::Context::Scope context_scope(context); + + // v8::Local tmpCotext = + // v8::Local::New(GetIsolate(), m_context); + v8::Local propvalue = + context->Global()->Get(v8::String::NewFromUtf8( + GetIsolate(), name, v8::String::kNormalString, utf8Name.GetLength())); + + if (propvalue.IsEmpty()) { + FXJSE_Value_SetUndefined(hValue); + return FALSE; + } + ((CFXJSE_Value*)hValue)->ForceSetValue(propvalue); + + return TRUE; +} +FX_BOOL CJS_Runtime::SetHValueByName(const CFX_ByteStringC& utf8Name, + FXJSE_HVALUE hValue) { + if (utf8Name.IsEmpty() || hValue == NULL) + return FALSE; + const FX_CHAR* name = utf8Name.GetCStr(); + v8::Isolate* pIsolate = GetIsolate(); + v8::Locker lock(pIsolate); + v8::Isolate::Scope isolate_scope(pIsolate); + v8::HandleScope handle_scope(pIsolate); + v8::Local context = + v8::Local::New(pIsolate, m_context); + v8::Context::Scope context_scope(context); + + // v8::Local tmpCotext = + // v8::Local::New(GetIsolate(), m_context); + v8::Local propvalue = v8::Local::New( + GetIsolate(), ((CFXJSE_Value*)hValue)->DirectGetValue()); + context->Global()->Set( + v8::String::NewFromUtf8(pIsolate, name, v8::String::kNormalString, + utf8Name.GetLength()), + propvalue); + + return TRUE; } diff --git a/fpdfsdk/src/javascript/JS_Value.cpp b/fpdfsdk/src/javascript/JS_Value.cpp index 058f2eaf45..faa1eeb6fc 100644 --- a/fpdfsdk/src/javascript/JS_Value.cpp +++ b/fpdfsdk/src/javascript/JS_Value.cpp @@ -12,651 +12,577 @@ /* ---------------------------- CJS_Value ---------------------------- */ -CJS_Value::CJS_Value(v8::Isolate* isolate) : m_eType(VT_unknown),m_isolate(isolate) -{ -} -CJS_Value::CJS_Value(v8::Isolate* isolate, v8::Local pValue,FXJSVALUETYPE t) : - m_pValue(pValue), m_eType(t), m_isolate(isolate) -{ -} +CJS_Value::CJS_Value(v8::Isolate* isolate) + : m_eType(VT_unknown), m_isolate(isolate) {} +CJS_Value::CJS_Value(v8::Isolate* isolate, + v8::Local pValue, + FXJSVALUETYPE t) + : m_pValue(pValue), m_eType(t), m_isolate(isolate) {} -CJS_Value::CJS_Value(v8::Isolate* isolate, const int &iValue):m_isolate(isolate) -{ - operator =(iValue); +CJS_Value::CJS_Value(v8::Isolate* isolate, const int& iValue) + : m_isolate(isolate) { + operator=(iValue); } -CJS_Value::CJS_Value(v8::Isolate* isolate, const bool &bValue):m_isolate(isolate) -{ - operator =(bValue); +CJS_Value::CJS_Value(v8::Isolate* isolate, const bool& bValue) + : m_isolate(isolate) { + operator=(bValue); } -CJS_Value::CJS_Value(v8::Isolate* isolate, const float &fValue):m_isolate(isolate) -{ - operator =(fValue); +CJS_Value::CJS_Value(v8::Isolate* isolate, const float& fValue) + : m_isolate(isolate) { + operator=(fValue); } -CJS_Value::CJS_Value(v8::Isolate* isolate, const double &dValue):m_isolate(isolate) -{ - operator =(dValue); +CJS_Value::CJS_Value(v8::Isolate* isolate, const double& dValue) + : m_isolate(isolate) { + operator=(dValue); } -CJS_Value::CJS_Value(v8::Isolate* isolate, JSFXObject pJsObj):m_isolate(isolate) -{ - operator =(pJsObj); +CJS_Value::CJS_Value(v8::Isolate* isolate, JSFXObject pJsObj) + : m_isolate(isolate) { + operator=(pJsObj); } -CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Object* pJsObj):m_isolate(isolate) -{ - operator =(pJsObj); +CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Object* pJsObj) + : m_isolate(isolate) { + operator=(pJsObj); } -CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Document* pJsDoc):m_isolate(isolate) -{ - m_eType = VT_object; - if (pJsDoc) - m_pValue = (JSFXObject)*pJsDoc; +CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Document* pJsDoc) + : m_isolate(isolate) { + m_eType = VT_object; + if (pJsDoc) + m_pValue = (JSFXObject)*pJsDoc; } -CJS_Value::CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr):m_isolate(isolate) -{ - operator =(pWstr); +CJS_Value::CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr) + : m_isolate(isolate) { + operator=(pWstr); } -CJS_Value::CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr):m_isolate(isolate) -{ - operator = (pStr); +CJS_Value::CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr) + : m_isolate(isolate) { + operator=(pStr); } -CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Array& array):m_isolate(isolate) -{ - operator = (array); +CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Array& array) + : m_isolate(isolate) { + operator=(array); } -CJS_Value::~CJS_Value() -{ -} +CJS_Value::~CJS_Value() {} -void CJS_Value::Attach(v8::Local pValue,FXJSVALUETYPE t) -{ - m_pValue = pValue; - m_eType = t; +void CJS_Value::Attach(v8::Local pValue, FXJSVALUETYPE t) { + m_pValue = pValue; + m_eType = t; } -void CJS_Value::Attach(CJS_Value *pValue) -{ - if (pValue) - Attach(pValue->ToV8Value(), pValue->GetType()); +void CJS_Value::Attach(CJS_Value* pValue) { + if (pValue) + Attach(pValue->ToV8Value(), pValue->GetType()); } -void CJS_Value::Detach() -{ - m_pValue = v8::Local(); - m_eType = VT_unknown; +void CJS_Value::Detach() { + m_pValue = v8::Local(); + m_eType = VT_unknown; } -/* ---------------------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------------------------- + */ -int CJS_Value::ToInt() const -{ - return JS_ToInt32(m_isolate, m_pValue); +int CJS_Value::ToInt() const { + return JS_ToInt32(m_isolate, m_pValue); } -bool CJS_Value::ToBool() const -{ - return JS_ToBoolean(m_isolate, m_pValue); +bool CJS_Value::ToBool() const { + return JS_ToBoolean(m_isolate, m_pValue); } -double CJS_Value::ToDouble() const -{ - return JS_ToNumber(m_isolate, m_pValue); +double CJS_Value::ToDouble() const { + return JS_ToNumber(m_isolate, m_pValue); } -float CJS_Value::ToFloat() const -{ - return (float)ToDouble(); +float CJS_Value::ToFloat() const { + return (float)ToDouble(); } -CJS_Object* CJS_Value::ToCJSObject() const -{ - v8::Local pObj = JS_ToObject(m_isolate, m_pValue); - return (CJS_Object*)JS_GetPrivate(m_isolate, pObj); +CJS_Object* CJS_Value::ToCJSObject() const { + v8::Local pObj = JS_ToObject(m_isolate, m_pValue); + return (CJS_Object*)JS_GetPrivate(m_isolate, pObj); } -v8::Local CJS_Value::ToV8Object() const -{ - return JS_ToObject(m_isolate, m_pValue); +v8::Local CJS_Value::ToV8Object() const { + return JS_ToObject(m_isolate, m_pValue); } -CFX_WideString CJS_Value::ToCFXWideString() const -{ - return JS_ToString(m_isolate, m_pValue); +CFX_WideString CJS_Value::ToCFXWideString() const { + return JS_ToString(m_isolate, m_pValue); } -CFX_ByteString CJS_Value::ToCFXByteString() const -{ - return CFX_ByteString::FromUnicode(ToCFXWideString()); +CFX_ByteString CJS_Value::ToCFXByteString() const { + return CFX_ByteString::FromUnicode(ToCFXWideString()); } -v8::Local CJS_Value::ToV8Value() const -{ - return m_pValue; +v8::Local CJS_Value::ToV8Value() const { + return m_pValue; } -v8::LocalCJS_Value::ToV8Array() const -{ - if (IsArrayObject()) - return v8::Local::Cast(JS_ToObject(m_isolate, m_pValue)); - return v8::Local(); +v8::Local CJS_Value::ToV8Array() const { + if (IsArrayObject()) + return v8::Local::Cast(JS_ToObject(m_isolate, m_pValue)); + return v8::Local(); } -/* ---------------------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------------------------- + */ -void CJS_Value::operator =(int iValue) -{ - m_pValue = JS_NewNumber(m_isolate, iValue); +void CJS_Value::operator=(int iValue) { + m_pValue = JS_NewNumber(m_isolate, iValue); - m_eType = VT_number; + m_eType = VT_number; } -void CJS_Value::operator =(bool bValue) -{ - m_pValue = JS_NewBoolean(m_isolate, bValue); +void CJS_Value::operator=(bool bValue) { + m_pValue = JS_NewBoolean(m_isolate, bValue); - m_eType = VT_boolean; + m_eType = VT_boolean; } -void CJS_Value::operator =(double dValue) -{ - m_pValue = JS_NewNumber(m_isolate,dValue); +void CJS_Value::operator=(double dValue) { + m_pValue = JS_NewNumber(m_isolate, dValue); - m_eType = VT_number; + m_eType = VT_number; } -void CJS_Value::operator = (float fValue) -{ - m_pValue = JS_NewNumber(m_isolate,fValue); - m_eType = VT_number; +void CJS_Value::operator=(float fValue) { + m_pValue = JS_NewNumber(m_isolate, fValue); + m_eType = VT_number; } -void CJS_Value::operator =(v8::Local pObj) -{ +void CJS_Value::operator=(v8::Local pObj) { + m_pValue = JS_NewObject(m_isolate, pObj); - m_pValue = JS_NewObject(m_isolate,pObj); - - m_eType = VT_fxobject; + m_eType = VT_fxobject; } -void CJS_Value::operator =(CJS_Object * pObj) -{ - if (pObj) - operator = ((JSFXObject)*pObj); +void CJS_Value::operator=(CJS_Object* pObj) { + if (pObj) + operator=((JSFXObject)*pObj); } -void CJS_Value::operator = (CJS_Document* pJsDoc) -{ - m_eType = VT_object; - if (pJsDoc) { - m_pValue = static_cast(*pJsDoc); - } +void CJS_Value::operator=(CJS_Document* pJsDoc) { + m_eType = VT_object; + if (pJsDoc) { + m_pValue = static_cast(*pJsDoc); + } } -void CJS_Value::operator =(const FX_WCHAR* pWstr) -{ - m_pValue = JS_NewString(m_isolate,(wchar_t *)pWstr); +void CJS_Value::operator=(const FX_WCHAR* pWstr) { + m_pValue = JS_NewString(m_isolate, (wchar_t*)pWstr); - m_eType = VT_string; + m_eType = VT_string; } -void CJS_Value::SetNull() -{ - m_pValue = JS_NewNull(); +void CJS_Value::SetNull() { + m_pValue = JS_NewNull(); - m_eType = VT_null; + m_eType = VT_null; } -void CJS_Value::operator = (const FX_CHAR* pStr) -{ - operator = (CFX_WideString::FromLocal(pStr).c_str()); +void CJS_Value::operator=(const FX_CHAR* pStr) { + operator=(CFX_WideString::FromLocal(pStr).c_str()); } -void CJS_Value::operator = (CJS_Array & array) -{ - m_pValue = JS_NewObject2(m_isolate,(v8::Local)array); +void CJS_Value::operator=(CJS_Array& array) { + m_pValue = JS_NewObject2(m_isolate, (v8::Local)array); - m_eType = VT_object; + m_eType = VT_object; } -void CJS_Value::operator = (CJS_Date & date) -{ - m_pValue = JS_NewDate(m_isolate, (double)date); +void CJS_Value::operator=(CJS_Date& date) { + m_pValue = JS_NewDate(m_isolate, (double)date); - m_eType = VT_date; + m_eType = VT_date; } -void CJS_Value::operator = (CJS_Value value) -{ - m_pValue = value.ToV8Value(); +void CJS_Value::operator=(CJS_Value value) { + m_pValue = value.ToV8Value(); - m_eType = value.m_eType; - m_isolate = value.m_isolate; + m_eType = value.m_eType; + m_isolate = value.m_isolate; } -/* ---------------------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------------------------- + */ -FXJSVALUETYPE CJS_Value::GetType() const -{ - if(m_pValue.IsEmpty()) return VT_unknown; - if(m_pValue->IsString()) return VT_string; - if(m_pValue->IsNumber()) return VT_number; - if(m_pValue->IsBoolean()) return VT_boolean; - if(m_pValue->IsDate()) return VT_date; - if(m_pValue->IsObject()) return VT_object; - if(m_pValue->IsNull()) return VT_null; - if(m_pValue->IsUndefined()) return VT_undefined; - return VT_unknown; +FXJSVALUETYPE CJS_Value::GetType() const { + if (m_pValue.IsEmpty()) + return VT_unknown; + if (m_pValue->IsString()) + return VT_string; + if (m_pValue->IsNumber()) + return VT_number; + if (m_pValue->IsBoolean()) + return VT_boolean; + if (m_pValue->IsDate()) + return VT_date; + if (m_pValue->IsObject()) + return VT_object; + if (m_pValue->IsNull()) + return VT_null; + if (m_pValue->IsUndefined()) + return VT_undefined; + return VT_unknown; } -FX_BOOL CJS_Value::IsArrayObject() const -{ - if(m_pValue.IsEmpty()) return FALSE; - return m_pValue->IsArray(); +FX_BOOL CJS_Value::IsArrayObject() const { + if (m_pValue.IsEmpty()) + return FALSE; + return m_pValue->IsArray(); } -FX_BOOL CJS_Value::IsDateObject() const -{ - if(m_pValue.IsEmpty()) return FALSE; - return m_pValue->IsDate(); +FX_BOOL CJS_Value::IsDateObject() const { + if (m_pValue.IsEmpty()) + return FALSE; + return m_pValue->IsDate(); } -//CJS_Value::operator CJS_Array() -FX_BOOL CJS_Value::ConvertToArray(CJS_Array &array) const -{ - if (IsArrayObject()) - { - array.Attach(JS_ToArray(m_isolate, m_pValue)); - return TRUE; - } +// CJS_Value::operator CJS_Array() +FX_BOOL CJS_Value::ConvertToArray(CJS_Array& array) const { + if (IsArrayObject()) { + array.Attach(JS_ToArray(m_isolate, m_pValue)); + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL CJS_Value::ConvertToDate(CJS_Date &date) const -{ -// if (GetType() == VT_date) -// { -// date = (double)(*this); -// return TRUE; -// } +FX_BOOL CJS_Value::ConvertToDate(CJS_Date& date) const { + // if (GetType() == VT_date) + // { + // date = (double)(*this); + // return TRUE; + // } - if (IsDateObject()) - { - date.Attach(m_pValue); - return TRUE; - } + if (IsDateObject()) { + date.Attach(m_pValue); + return TRUE; + } - return FALSE; + return FALSE; } /* ---------------------------- CJS_PropValue ---------------------------- */ -CJS_PropValue::CJS_PropValue(const CJS_Value &value) : - CJS_Value(value), - m_bIsSetting(0) -{ -} +CJS_PropValue::CJS_PropValue(const CJS_Value& value) + : CJS_Value(value), m_bIsSetting(0) {} -CJS_PropValue::CJS_PropValue(v8::Isolate* isolate) : CJS_Value(isolate), - m_bIsSetting(0) -{ -} +CJS_PropValue::CJS_PropValue(v8::Isolate* isolate) + : CJS_Value(isolate), m_bIsSetting(0) {} -CJS_PropValue::~CJS_PropValue() -{ -} +CJS_PropValue::~CJS_PropValue() {} -FX_BOOL CJS_PropValue::IsSetting() -{ - return m_bIsSetting; +FX_BOOL CJS_PropValue::IsSetting() { + return m_bIsSetting; } -FX_BOOL CJS_PropValue::IsGetting() -{ - return !m_bIsSetting; +FX_BOOL CJS_PropValue::IsGetting() { + return !m_bIsSetting; } -void CJS_PropValue::operator <<(int iValue) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator =(iValue); +void CJS_PropValue::operator<<(int iValue) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(iValue); } -void CJS_PropValue::operator >>(int & iValue) const -{ - ASSERT(m_bIsSetting); - iValue = CJS_Value::ToInt(); +void CJS_PropValue::operator>>(int& iValue) const { + ASSERT(m_bIsSetting); + iValue = CJS_Value::ToInt(); } - -void CJS_PropValue::operator <<(bool bValue) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator =(bValue); +void CJS_PropValue::operator<<(bool bValue) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(bValue); } -void CJS_PropValue::operator >>(bool& bValue) const -{ - ASSERT(m_bIsSetting); - bValue = CJS_Value::ToBool(); +void CJS_PropValue::operator>>(bool& bValue) const { + ASSERT(m_bIsSetting); + bValue = CJS_Value::ToBool(); } -void CJS_PropValue::operator <<(double dValue) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator =(dValue); +void CJS_PropValue::operator<<(double dValue) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(dValue); } -void CJS_PropValue::operator >>(double& dValue) const -{ - ASSERT(m_bIsSetting); - dValue = CJS_Value::ToDouble(); +void CJS_PropValue::operator>>(double& dValue) const { + ASSERT(m_bIsSetting); + dValue = CJS_Value::ToDouble(); } -void CJS_PropValue::operator <<(CJS_Object* pObj) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator = (pObj); +void CJS_PropValue::operator<<(CJS_Object* pObj) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(pObj); } -void CJS_PropValue::operator >>(CJS_Object*& ppObj) const -{ - ASSERT(m_bIsSetting); - ppObj = CJS_Value::ToCJSObject(); +void CJS_PropValue::operator>>(CJS_Object*& ppObj) const { + ASSERT(m_bIsSetting); + ppObj = CJS_Value::ToCJSObject(); } -void CJS_PropValue::operator <<(CJS_Document* pJsDoc) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator = (pJsDoc); +void CJS_PropValue::operator<<(CJS_Document* pJsDoc) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(pJsDoc); } -void CJS_PropValue::operator >>(CJS_Document*& ppJsDoc) const -{ - ASSERT(m_bIsSetting); - ppJsDoc = static_cast(CJS_Value::ToCJSObject()); +void CJS_PropValue::operator>>(CJS_Document*& ppJsDoc) const { + ASSERT(m_bIsSetting); + ppJsDoc = static_cast(CJS_Value::ToCJSObject()); } -void CJS_PropValue::operator<<(JSFXObject pObj) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator = (pObj); +void CJS_PropValue::operator<<(JSFXObject pObj) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(pObj); } -void CJS_PropValue::operator>>(JSFXObject &ppObj) const -{ - ASSERT(m_bIsSetting); - ppObj = CJS_Value::ToV8Object(); +void CJS_PropValue::operator>>(JSFXObject& ppObj) const { + ASSERT(m_bIsSetting); + ppObj = CJS_Value::ToV8Object(); } - -void CJS_PropValue::StartSetting() -{ - m_bIsSetting = 1; +void CJS_PropValue::StartSetting() { + m_bIsSetting = 1; } -void CJS_PropValue::StartGetting() -{ - m_bIsSetting = 0; +void CJS_PropValue::StartGetting() { + m_bIsSetting = 0; } -void CJS_PropValue::operator <<(CFX_ByteString string) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator = (string.c_str()); +void CJS_PropValue::operator<<(CFX_ByteString string) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(string.c_str()); } -void CJS_PropValue::operator >>(CFX_ByteString &string) const -{ - ASSERT(m_bIsSetting); - string = CJS_Value::ToCFXByteString(); +void CJS_PropValue::operator>>(CFX_ByteString& string) const { + ASSERT(m_bIsSetting); + string = CJS_Value::ToCFXByteString(); } -void CJS_PropValue::operator <<(const FX_WCHAR* c_string) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator =(c_string); +void CJS_PropValue::operator<<(const FX_WCHAR* c_string) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(c_string); } -void CJS_PropValue::operator >>(CFX_WideString &wide_string) const -{ - ASSERT(m_bIsSetting); - wide_string = CJS_Value::ToCFXWideString(); +void CJS_PropValue::operator>>(CFX_WideString& wide_string) const { + ASSERT(m_bIsSetting); + wide_string = CJS_Value::ToCFXWideString(); } -void CJS_PropValue::operator <<(CFX_WideString wide_string) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator = (wide_string.c_str()); +void CJS_PropValue::operator<<(CFX_WideString wide_string) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(wide_string.c_str()); } -void CJS_PropValue::operator >>(CJS_Array &array) const -{ - ASSERT(m_bIsSetting); - ConvertToArray(array); +void CJS_PropValue::operator>>(CJS_Array& array) const { + ASSERT(m_bIsSetting); + ConvertToArray(array); } -void CJS_PropValue::operator <<(CJS_Array &array) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator=(array); +void CJS_PropValue::operator<<(CJS_Array& array) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(array); } -void CJS_PropValue::operator>>(CJS_Date &date) const -{ - ASSERT(m_bIsSetting); - ConvertToDate(date); +void CJS_PropValue::operator>>(CJS_Date& date) const { + ASSERT(m_bIsSetting); + ConvertToDate(date); } -void CJS_PropValue::operator<<(CJS_Date &date) -{ - ASSERT(!m_bIsSetting); - CJS_Value::operator=(date); +void CJS_PropValue::operator<<(CJS_Date& date) { + ASSERT(!m_bIsSetting); + CJS_Value::operator=(date); } -CJS_PropValue::operator v8::Local() const -{ - return m_pValue; +CJS_PropValue::operator v8::Local() const { + return m_pValue; } -/* ======================================== CJS_Array ========================================= */ -CJS_Array::CJS_Array(v8::Isolate* isolate):m_isolate(isolate) -{ -} +/* ======================================== CJS_Array + * ========================================= */ +CJS_Array::CJS_Array(v8::Isolate* isolate) : m_isolate(isolate) {} -CJS_Array::~CJS_Array() -{ -} +CJS_Array::~CJS_Array() {} -void CJS_Array::Attach(v8::Local pArray) -{ - m_pArray = pArray; +void CJS_Array::Attach(v8::Local pArray) { + m_pArray = pArray; } -FX_BOOL CJS_Array::IsAttached() -{ - return FALSE; +FX_BOOL CJS_Array::IsAttached() { + return FALSE; } -void CJS_Array::GetElement(unsigned index,CJS_Value &value) -{ - if (m_pArray.IsEmpty()) - return; - v8::Local p = JS_GetArrayElement(m_isolate, m_pArray,index); - value.Attach(p,VT_object); +void CJS_Array::GetElement(unsigned index, CJS_Value& value) { + if (m_pArray.IsEmpty()) + return; + v8::Local p = JS_GetArrayElement(m_isolate, m_pArray, index); + value.Attach(p, VT_object); } -void CJS_Array::SetElement(unsigned index,CJS_Value value) -{ - if (m_pArray.IsEmpty()) - m_pArray = JS_NewArray(m_isolate); +void CJS_Array::SetElement(unsigned index, CJS_Value value) { + if (m_pArray.IsEmpty()) + m_pArray = JS_NewArray(m_isolate); - JS_PutArrayElement(m_isolate, m_pArray, index, value.ToV8Value(), value.GetType()); + JS_PutArrayElement(m_isolate, m_pArray, index, value.ToV8Value(), + value.GetType()); } -int CJS_Array::GetLength() -{ - if (m_pArray.IsEmpty()) - return 0; - return JS_GetArrayLength(m_pArray); +int CJS_Array::GetLength() { + if (m_pArray.IsEmpty()) + return 0; + return JS_GetArrayLength(m_pArray); } -CJS_Array:: operator v8::Local() -{ - if (m_pArray.IsEmpty()) - m_pArray = JS_NewArray(m_isolate); +CJS_Array::operator v8::Local() { + if (m_pArray.IsEmpty()) + m_pArray = JS_NewArray(m_isolate); - return m_pArray; + return m_pArray; } -/* ======================================== CJS_Date ========================================= */ +/* ======================================== CJS_Date + * ========================================= */ -CJS_Date::CJS_Date(v8::Isolate* isolate) :m_isolate(isolate) -{ -} +CJS_Date::CJS_Date(v8::Isolate* isolate) : m_isolate(isolate) {} -CJS_Date::CJS_Date(v8::Isolate* isolate,double dMsec_time) -{ - m_isolate = isolate; - m_pDate = JS_NewDate(isolate,dMsec_time); +CJS_Date::CJS_Date(v8::Isolate* isolate, double dMsec_time) { + m_isolate = isolate; + m_pDate = JS_NewDate(isolate, dMsec_time); } -CJS_Date::CJS_Date(v8::Isolate* isolate,int year, int mon, int day,int hour, int min, int sec) -{ - m_isolate = isolate; - m_pDate = JS_NewDate(isolate,MakeDate(year,mon,day,hour,min,sec,0)); +CJS_Date::CJS_Date(v8::Isolate* isolate, + int year, + int mon, + int day, + int hour, + int min, + int sec) { + m_isolate = isolate; + m_pDate = JS_NewDate(isolate, MakeDate(year, mon, day, hour, min, sec, 0)); } -double CJS_Date::MakeDate(int year, int mon, int day,int hour, int min, int sec,int ms) -{ - return JS_MakeDate(JS_MakeDay(year,mon,day), JS_MakeTime(hour,min,sec,ms)); +double CJS_Date::MakeDate(int year, + int mon, + int day, + int hour, + int min, + int sec, + int ms) { + return JS_MakeDate(JS_MakeDay(year, mon, day), + JS_MakeTime(hour, min, sec, ms)); } -CJS_Date::~CJS_Date() -{ -} +CJS_Date::~CJS_Date() {} -FX_BOOL CJS_Date::IsValidDate() -{ - if(m_pDate.IsEmpty()) return FALSE; - return !JS_PortIsNan(JS_ToNumber(m_isolate, m_pDate)); +FX_BOOL CJS_Date::IsValidDate() { + if (m_pDate.IsEmpty()) + return FALSE; + return !JS_PortIsNan(JS_ToNumber(m_isolate, m_pDate)); } -void CJS_Date::Attach(v8::Local pDate) -{ - m_pDate = pDate; +void CJS_Date::Attach(v8::Local pDate) { + m_pDate = pDate; } -int CJS_Date::GetYear() -{ - if (IsValidDate()) - return JS_GetYearFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); +int CJS_Date::GetYear() { + if (IsValidDate()) + return JS_GetYearFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); - return 0; + return 0; } -void CJS_Date::SetYear(int iYear) -{ - double date = MakeDate(iYear,GetMonth(),GetDay(),GetHours(),GetMinutes(),GetSeconds(),0); - JS_ValueCopy(m_pDate, JS_NewDate(m_isolate,date)); +void CJS_Date::SetYear(int iYear) { + double date = MakeDate(iYear, GetMonth(), GetDay(), GetHours(), GetMinutes(), + GetSeconds(), 0); + JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date)); } -int CJS_Date::GetMonth() -{ - if (IsValidDate()) - return JS_GetMonthFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); +int CJS_Date::GetMonth() { + if (IsValidDate()) + return JS_GetMonthFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); - return 0; + return 0; } -void CJS_Date::SetMonth(int iMonth) -{ - - double date = MakeDate(GetYear(),iMonth,GetDay(),GetHours(),GetMinutes(),GetSeconds(),0); - JS_ValueCopy(m_pDate, JS_NewDate(m_isolate,date)); - +void CJS_Date::SetMonth(int iMonth) { + double date = MakeDate(GetYear(), iMonth, GetDay(), GetHours(), GetMinutes(), + GetSeconds(), 0); + JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date)); } -int CJS_Date::GetDay() -{ - if (IsValidDate()) - return JS_GetDayFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); +int CJS_Date::GetDay() { + if (IsValidDate()) + return JS_GetDayFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); - return 0; + return 0; } -void CJS_Date::SetDay(int iDay) -{ - - double date = MakeDate(GetYear(),GetMonth(),iDay,GetHours(),GetMinutes(),GetSeconds(),0); - JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date)); - +void CJS_Date::SetDay(int iDay) { + double date = MakeDate(GetYear(), GetMonth(), iDay, GetHours(), GetMinutes(), + GetSeconds(), 0); + JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date)); } -int CJS_Date::GetHours() -{ - if (IsValidDate()) - return JS_GetHourFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); +int CJS_Date::GetHours() { + if (IsValidDate()) + return JS_GetHourFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); - return 0; + return 0; } -void CJS_Date::SetHours(int iHours) -{ - double date = MakeDate(GetYear(),GetMonth(),GetDay(),iHours,GetMinutes(),GetSeconds(),0); - JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date)); +void CJS_Date::SetHours(int iHours) { + double date = MakeDate(GetYear(), GetMonth(), GetDay(), iHours, GetMinutes(), + GetSeconds(), 0); + JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date)); } -int CJS_Date::GetMinutes() -{ - if (IsValidDate()) - return JS_GetMinFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); +int CJS_Date::GetMinutes() { + if (IsValidDate()) + return JS_GetMinFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); - return 0; + return 0; } -void CJS_Date::SetMinutes(int minutes) -{ - double date = MakeDate(GetYear(),GetMonth(),GetDay(),GetHours(),minutes,GetSeconds(),0); - JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date)); +void CJS_Date::SetMinutes(int minutes) { + double date = MakeDate(GetYear(), GetMonth(), GetDay(), GetHours(), minutes, + GetSeconds(), 0); + JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date)); } -int CJS_Date::GetSeconds() -{ - if (IsValidDate()) - return JS_GetSecFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); +int CJS_Date::GetSeconds() { + if (IsValidDate()) + return JS_GetSecFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate))); - return 0; + return 0; } -void CJS_Date::SetSeconds(int seconds) -{ - double date = MakeDate(GetYear(),GetMonth(),GetDay(),GetHours(),GetMinutes(),seconds,0); - JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date)); +void CJS_Date::SetSeconds(int seconds) { + double date = MakeDate(GetYear(), GetMonth(), GetDay(), GetHours(), + GetMinutes(), seconds, 0); + JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date)); } -CJS_Date::operator v8::Local() -{ - return m_pDate; +CJS_Date::operator v8::Local() { + return m_pDate; } -CJS_Date::operator double() const -{ - if(m_pDate.IsEmpty()) - return 0.0; - return JS_ToNumber(m_isolate, m_pDate); +CJS_Date::operator double() const { + if (m_pDate.IsEmpty()) + return 0.0; + return JS_ToNumber(m_isolate, m_pDate); } -CFX_WideString CJS_Date::ToString() const -{ - if(m_pDate.IsEmpty()) - return L""; - return JS_ToString(m_isolate, m_pDate); +CFX_WideString CJS_Date::ToString() const { + if (m_pDate.IsEmpty()) + return L""; + return JS_ToString(m_isolate, m_pDate); } diff --git a/fpdfsdk/src/javascript/PublicMethods.cpp b/fpdfsdk/src/javascript/PublicMethods.cpp index abb95f052d..8d7d207c79 100644 --- a/fpdfsdk/src/javascript/PublicMethods.cpp +++ b/fpdfsdk/src/javascript/PublicMethods.cpp @@ -19,2257 +19,2125 @@ #include "../../include/javascript/color.h" #include "../../include/javascript/JS_Runtime.h" -static v8::Isolate* GetIsolate(IFXJS_Context* cc) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); +static v8::Isolate* GetIsolate(IFXJS_Context* cc) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); - return pRuntime->GetIsolate(); + return pRuntime->GetIsolate(); } +/* -------------------------------- CJS_PublicMethods + * -------------------------------- */ -/* -------------------------------- CJS_PublicMethods -------------------------------- */ - -#define DOUBLE_CORRECT 0.000000000000001 +#define DOUBLE_CORRECT 0.000000000000001 BEGIN_JS_STATIC_GLOBAL_FUN(CJS_PublicMethods) - JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Format) - JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Keystroke) - JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Format) - JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Keystroke) - JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_FormatEx) - JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_KeystrokeEx) - JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_Format) - JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_Keystroke) - JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_FormatEx) - JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_KeystrokeEx) - JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_Format) - JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_Keystroke) - JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_Format) - JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_Keystroke) - JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_KeystrokeEx) - JS_STATIC_GLOBAL_FUN_ENTRY(AFSimple) - JS_STATIC_GLOBAL_FUN_ENTRY(AFMakeNumber) - JS_STATIC_GLOBAL_FUN_ENTRY(AFSimple_Calculate) - JS_STATIC_GLOBAL_FUN_ENTRY(AFRange_Validate) - JS_STATIC_GLOBAL_FUN_ENTRY(AFMergeChange) - JS_STATIC_GLOBAL_FUN_ENTRY(AFParseDateEx) - JS_STATIC_GLOBAL_FUN_ENTRY(AFExtractNums) +JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Format) +JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Keystroke) +JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Format) +JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Keystroke) +JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_FormatEx) +JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_KeystrokeEx) +JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_Format) +JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_Keystroke) +JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_FormatEx) +JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_KeystrokeEx) +JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_Format) +JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_Keystroke) +JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_Format) +JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_Keystroke) +JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_KeystrokeEx) +JS_STATIC_GLOBAL_FUN_ENTRY(AFSimple) +JS_STATIC_GLOBAL_FUN_ENTRY(AFMakeNumber) +JS_STATIC_GLOBAL_FUN_ENTRY(AFSimple_Calculate) +JS_STATIC_GLOBAL_FUN_ENTRY(AFRange_Validate) +JS_STATIC_GLOBAL_FUN_ENTRY(AFMergeChange) +JS_STATIC_GLOBAL_FUN_ENTRY(AFParseDateEx) +JS_STATIC_GLOBAL_FUN_ENTRY(AFExtractNums) END_JS_STATIC_GLOBAL_FUN() IMPLEMENT_JS_STATIC_GLOBAL_FUN(CJS_PublicMethods) -static const FX_WCHAR* months[] = -{ - L"Jan", L"Feb", L"Mar", L"Apr", L"May", L"Jun", L"Jul", L"Aug", L"Sep", L"Oct", L"Nov", L"Dec" -}; - -static const FX_WCHAR* const fullmonths[] = -{ - L"January", L"February", L"March", L"April", L"May", L"June", L"July", L"August", L"September", L"October", L"November", L"December" -}; +static const FX_WCHAR* months[] = {L"Jan", L"Feb", L"Mar", L"Apr", + L"May", L"Jun", L"Jul", L"Aug", + L"Sep", L"Oct", L"Nov", L"Dec"}; -FX_BOOL CJS_PublicMethods::IsNumber(const FX_WCHAR* string) -{ - CFX_WideString sTrim = StrTrim(string); - const FX_WCHAR* pTrim = sTrim.c_str(); - const FX_WCHAR* p = pTrim; +static const FX_WCHAR* const fullmonths[] = { + L"January", L"February", L"March", L"April", + L"May", L"June", L"July", L"August", + L"September", L"October", L"November", L"December"}; +FX_BOOL CJS_PublicMethods::IsNumber(const FX_WCHAR* string) { + CFX_WideString sTrim = StrTrim(string); + const FX_WCHAR* pTrim = sTrim.c_str(); + const FX_WCHAR* p = pTrim; - FX_BOOL bDot = FALSE; - FX_BOOL bKXJS = FALSE; + FX_BOOL bDot = FALSE; + FX_BOOL bKXJS = FALSE; - wchar_t c; - while ((c = *p)) - { - if (c == '.' || c == ',') - { - if (bDot) return FALSE; - bDot = TRUE; - } - else if (c == '-' || c == '+') - { - if (p != pTrim) - return FALSE; - } - else if (c == 'e' || c == 'E') - { - if (bKXJS) - return FALSE; + wchar_t c; + while ((c = *p)) { + if (c == '.' || c == ',') { + if (bDot) + return FALSE; + bDot = TRUE; + } else if (c == '-' || c == '+') { + if (p != pTrim) + return FALSE; + } else if (c == 'e' || c == 'E') { + if (bKXJS) + return FALSE; - p++; - c = *p; - if (c == '+' || c == '-') - { - bKXJS = TRUE; - } - else - { - return FALSE; - } - } - else if (!IsDigit(c)) - { - return FALSE; - } - p++; + p++; + c = *p; + if (c == '+' || c == '-') { + bKXJS = TRUE; + } else { + return FALSE; + } + } else if (!IsDigit(c)) { + return FALSE; } + p++; + } - return TRUE; + return TRUE; } -FX_BOOL CJS_PublicMethods::IsDigit(wchar_t ch) -{ - return (ch >= L'0' && ch <= L'9'); +FX_BOOL CJS_PublicMethods::IsDigit(wchar_t ch) { + return (ch >= L'0' && ch <= L'9'); } -FX_BOOL CJS_PublicMethods::IsDigit(char ch) -{ - return (ch >= '0' && ch <= '9'); +FX_BOOL CJS_PublicMethods::IsDigit(char ch) { + return (ch >= '0' && ch <= '9'); } -FX_BOOL CJS_PublicMethods::IsAlphabetic(wchar_t ch) -{ - return ((ch >= L'a' && ch <= L'z') || (ch >= L'A' && ch <= L'Z')); +FX_BOOL CJS_PublicMethods::IsAlphabetic(wchar_t ch) { + return ((ch >= L'a' && ch <= L'z') || (ch >= L'A' && ch <= L'Z')); } -FX_BOOL CJS_PublicMethods::IsAlphaNumeric(wchar_t ch) -{ - return (IsDigit(ch) || IsAlphabetic(ch)); +FX_BOOL CJS_PublicMethods::IsAlphaNumeric(wchar_t ch) { + return (IsDigit(ch) || IsAlphabetic(ch)); } -FX_BOOL CJS_PublicMethods::maskSatisfied(wchar_t c_Change,wchar_t c_Mask) -{ - switch (c_Mask) - { +FX_BOOL CJS_PublicMethods::maskSatisfied(wchar_t c_Change, wchar_t c_Mask) { + switch (c_Mask) { case L'9': - return IsDigit(c_Change); + return IsDigit(c_Change); case L'A': - return IsAlphabetic(c_Change); + return IsAlphabetic(c_Change); case L'O': - return IsAlphaNumeric(c_Change); + return IsAlphaNumeric(c_Change); case L'X': - return TRUE; + return TRUE; default: - return (c_Change == c_Mask); - } + return (c_Change == c_Mask); + } } -FX_BOOL CJS_PublicMethods::isReservedMaskChar(wchar_t ch) -{ - return ch == L'9' || ch == L'A' || ch == L'O' || ch == L'X'; +FX_BOOL CJS_PublicMethods::isReservedMaskChar(wchar_t ch) { + return ch == L'9' || ch == L'A' || ch == L'O' || ch == L'X'; } -double CJS_PublicMethods::AF_Simple(const FX_WCHAR* sFuction, double dValue1, double dValue2) -{ - if (FXSYS_wcsicmp(sFuction,L"AVG") == 0 || FXSYS_wcsicmp(sFuction,L"SUM") == 0) - { - return dValue1 + dValue2; - } - if (FXSYS_wcsicmp(sFuction, L"PRD") == 0) - { - return dValue1 * dValue2; - } - if (FXSYS_wcsicmp(sFuction,L"MIN") == 0) - { - return FX_MIN(dValue1, dValue2); - } - if (FXSYS_wcsicmp(sFuction,L"MAX") == 0) - { - return FX_MAX(dValue1, dValue2); - } - return dValue1; +double CJS_PublicMethods::AF_Simple(const FX_WCHAR* sFuction, + double dValue1, + double dValue2) { + if (FXSYS_wcsicmp(sFuction, L"AVG") == 0 || + FXSYS_wcsicmp(sFuction, L"SUM") == 0) { + return dValue1 + dValue2; + } + if (FXSYS_wcsicmp(sFuction, L"PRD") == 0) { + return dValue1 * dValue2; + } + if (FXSYS_wcsicmp(sFuction, L"MIN") == 0) { + return FX_MIN(dValue1, dValue2); + } + if (FXSYS_wcsicmp(sFuction, L"MAX") == 0) { + return FX_MAX(dValue1, dValue2); + } + return dValue1; } -CFX_WideString CJS_PublicMethods::StrLTrim(const FX_WCHAR* pStr) -{ - while (*pStr && *pStr == L' ') pStr++; +CFX_WideString CJS_PublicMethods::StrLTrim(const FX_WCHAR* pStr) { + while (*pStr && *pStr == L' ') + pStr++; - return pStr; + return pStr; } -CFX_WideString CJS_PublicMethods::StrRTrim(const FX_WCHAR* pStr) -{ - const FX_WCHAR* p = pStr; - while (*p) p++; - while (p > pStr && *(p - 1) == L' ') p--; +CFX_WideString CJS_PublicMethods::StrRTrim(const FX_WCHAR* pStr) { + const FX_WCHAR* p = pStr; + while (*p) + p++; + while (p > pStr && *(p - 1) == L' ') + p--; - return CFX_WideString(pStr, p - pStr); + return CFX_WideString(pStr, p - pStr); } -CFX_WideString CJS_PublicMethods::StrTrim(const FX_WCHAR* pStr) -{ - return StrRTrim(StrLTrim(pStr).c_str()); +CFX_WideString CJS_PublicMethods::StrTrim(const FX_WCHAR* pStr) { + return StrRTrim(StrLTrim(pStr).c_str()); } -CFX_ByteString CJS_PublicMethods::StrLTrim(const FX_CHAR* pStr) -{ - while (*pStr && *pStr == ' ') pStr++; +CFX_ByteString CJS_PublicMethods::StrLTrim(const FX_CHAR* pStr) { + while (*pStr && *pStr == ' ') + pStr++; - return pStr; + return pStr; } -CFX_ByteString CJS_PublicMethods::StrRTrim(const FX_CHAR* pStr) -{ - const FX_CHAR* p = pStr; - while (*p) p++; - while (p > pStr && *(p - 1) == L' ') p--; +CFX_ByteString CJS_PublicMethods::StrRTrim(const FX_CHAR* pStr) { + const FX_CHAR* p = pStr; + while (*p) + p++; + while (p > pStr && *(p - 1) == L' ') + p--; - return CFX_ByteString(pStr,p-pStr); + return CFX_ByteString(pStr, p - pStr); } -CFX_ByteString CJS_PublicMethods::StrTrim(const FX_CHAR* pStr) -{ - return StrRTrim(StrLTrim(pStr)); +CFX_ByteString CJS_PublicMethods::StrTrim(const FX_CHAR* pStr) { + return StrRTrim(StrLTrim(pStr)); } -double CJS_PublicMethods::ParseNumber(const FX_WCHAR* swSource, FX_BOOL& bAllDigits, FX_BOOL& bDot, FX_BOOL& bSign, FX_BOOL& bKXJS) -{ - bDot = FALSE; - bSign = FALSE; - bKXJS = FALSE; +double CJS_PublicMethods::ParseNumber(const FX_WCHAR* swSource, + FX_BOOL& bAllDigits, + FX_BOOL& bDot, + FX_BOOL& bSign, + FX_BOOL& bKXJS) { + bDot = FALSE; + bSign = FALSE; + bKXJS = FALSE; - FX_BOOL bDigitExist = FALSE; + FX_BOOL bDigitExist = FALSE; - const FX_WCHAR* p = swSource; - wchar_t c; + const FX_WCHAR* p = swSource; + wchar_t c; - const FX_WCHAR* pStart = NULL; - const FX_WCHAR* pEnd = NULL; + const FX_WCHAR* pStart = NULL; + const FX_WCHAR* pEnd = NULL; - while ((c = *p)) - { - if (!pStart && c != L' ') - { - pStart = p; - } - - pEnd = p; - p++; - } - - if (!pStart) - { - bAllDigits = FALSE; - return 0; - } - - while (pEnd != pStart) - { - if (*pEnd == L' ') - pEnd --; - else - break; + while ((c = *p)) { + if (!pStart && c != L' ') { + pStart = p; } - double dRet = 0; - p = pStart; - bAllDigits = TRUE; - CFX_WideString swDigits; + pEnd = p; + p++; + } - while (p <= pEnd) - { - c = *p; + if (!pStart) { + bAllDigits = FALSE; + return 0; + } - if (IsDigit(c)) - { - swDigits += c; - bDigitExist = TRUE; - } - else - { - switch (c) - { - case L' ': - bAllDigits = FALSE; - break; - case L'.': - case L',': - if (!bDot) - { - if (bDigitExist) - { - swDigits += L'.'; - } - else - { - swDigits += L'0'; - swDigits += L'.'; - bDigitExist = TRUE; - } - - bDot = TRUE; - break; - } - case 'e': - case 'E': - if (!bKXJS) - { - p++; - c = *p; - if (c == '+' || c == '-') - { - bKXJS = TRUE; - swDigits += 'e'; - swDigits += c; - } - break; - } - case L'-': - if (!bDigitExist && !bSign) - { - swDigits += c; - bSign = TRUE; - break; - } - default: - bAllDigits = FALSE; - - if (p != pStart && !bDot && bDigitExist) - { - swDigits += L'.'; - bDot = TRUE; - } - else - { - bDot = FALSE; - bDigitExist = FALSE; - swDigits = L""; - } - break; + while (pEnd != pStart) { + if (*pEnd == L' ') + pEnd--; + else + break; + } + + double dRet = 0; + p = pStart; + bAllDigits = TRUE; + CFX_WideString swDigits; + + while (p <= pEnd) { + c = *p; + + if (IsDigit(c)) { + swDigits += c; + bDigitExist = TRUE; + } else { + switch (c) { + case L' ': + bAllDigits = FALSE; + break; + case L'.': + case L',': + if (!bDot) { + if (bDigitExist) { + swDigits += L'.'; + } else { + swDigits += L'0'; + swDigits += L'.'; + bDigitExist = TRUE; } - } - p++; - } - - if (swDigits.GetLength() > 0 && swDigits.GetLength() < 17) - { - CFX_ByteString sDigits = swDigits.UTF8Encode(); - - if (bKXJS) - { - dRet = atof(sDigits); - } - else - { - if (bDot) - { - char* pStopString; - dRet = ::strtod(sDigits, &pStopString); - } - else - { - dRet = atol(sDigits); + bDot = TRUE; + break; + } + case 'e': + case 'E': + if (!bKXJS) { + p++; + c = *p; + if (c == '+' || c == '-') { + bKXJS = TRUE; + swDigits += 'e'; + swDigits += c; } - } - - } + break; + } + case L'-': + if (!bDigitExist && !bSign) { + swDigits += c; + bSign = TRUE; + break; + } + default: + bAllDigits = FALSE; - return dRet; + if (p != pStart && !bDot && bDigitExist) { + swDigits += L'.'; + bDot = TRUE; + } else { + bDot = FALSE; + bDigitExist = FALSE; + swDigits = L""; + } + break; + } + } + + p++; + } + + if (swDigits.GetLength() > 0 && swDigits.GetLength() < 17) { + CFX_ByteString sDigits = swDigits.UTF8Encode(); + + if (bKXJS) { + dRet = atof(sDigits); + } else { + if (bDot) { + char* pStopString; + dRet = ::strtod(sDigits, &pStopString); + } else { + dRet = atol(sDigits); + } + } + } + + return dRet; } -double CJS_PublicMethods::ParseStringToNumber(const FX_WCHAR* swSource) -{ - FX_BOOL bAllDigits = FALSE; - FX_BOOL bDot = FALSE; - FX_BOOL bSign = FALSE; - FX_BOOL bKXJS = FALSE; +double CJS_PublicMethods::ParseStringToNumber(const FX_WCHAR* swSource) { + FX_BOOL bAllDigits = FALSE; + FX_BOOL bDot = FALSE; + FX_BOOL bSign = FALSE; + FX_BOOL bKXJS = FALSE; - return ParseNumber(swSource, bAllDigits, bDot, bSign, bKXJS); + return ParseNumber(swSource, bAllDigits, bDot, bSign, bKXJS); } -FX_BOOL CJS_PublicMethods::ConvertStringToNumber(const FX_WCHAR* swSource, double & dRet, FX_BOOL & bDot) -{ - FX_BOOL bAllDigits = FALSE; - FX_BOOL bSign = FALSE; - FX_BOOL bKXJS = FALSE; +FX_BOOL CJS_PublicMethods::ConvertStringToNumber(const FX_WCHAR* swSource, + double& dRet, + FX_BOOL& bDot) { + FX_BOOL bAllDigits = FALSE; + FX_BOOL bSign = FALSE; + FX_BOOL bKXJS = FALSE; - dRet = ParseNumber(swSource, bAllDigits, bDot, bSign, bKXJS); + dRet = ParseNumber(swSource, bAllDigits, bDot, bSign, bKXJS); - return bAllDigits; + return bAllDigits; } -CJS_Array CJS_PublicMethods::AF_MakeArrayFromList(v8::Isolate* isolate, CJS_Value val) -{ - CJS_Array StrArray(isolate); - if(val.IsArrayObject()) - { - val.ConvertToArray(StrArray); - return StrArray; - } - CFX_WideString wsStr = val.ToCFXWideString(); - CFX_ByteString t = CFX_ByteString::FromUnicode(wsStr); - const char * p = (const char *)t; - - - int ch = ',' ; - int nIndex = 0; - - while (*p) - { - const char * pTemp = strchr(p, ch); - if (pTemp == NULL) - { - StrArray.SetElement(nIndex, CJS_Value(isolate, StrTrim(p).c_str())); - break; - } - else - { - char * pSub = new char[pTemp - p + 1]; - strncpy(pSub, p, pTemp - p); - *(pSub + (pTemp - p)) = '\0'; - - StrArray.SetElement(nIndex, CJS_Value(isolate, StrTrim(pSub).c_str())); - delete []pSub; - - nIndex ++; - p = ++pTemp; - } - - } +CJS_Array CJS_PublicMethods::AF_MakeArrayFromList(v8::Isolate* isolate, + CJS_Value val) { + CJS_Array StrArray(isolate); + if (val.IsArrayObject()) { + val.ConvertToArray(StrArray); return StrArray; + } + CFX_WideString wsStr = val.ToCFXWideString(); + CFX_ByteString t = CFX_ByteString::FromUnicode(wsStr); + const char* p = (const char*)t; + + int ch = ','; + int nIndex = 0; + + while (*p) { + const char* pTemp = strchr(p, ch); + if (pTemp == NULL) { + StrArray.SetElement(nIndex, CJS_Value(isolate, StrTrim(p).c_str())); + break; + } else { + char* pSub = new char[pTemp - p + 1]; + strncpy(pSub, p, pTemp - p); + *(pSub + (pTemp - p)) = '\0'; + + StrArray.SetElement(nIndex, CJS_Value(isolate, StrTrim(pSub).c_str())); + delete[] pSub; + + nIndex++; + p = ++pTemp; + } + } + return StrArray; } -int CJS_PublicMethods::ParseStringInteger(const CFX_WideString& string,int nStart,int& nSkip, int nMaxStep) -{ - int nRet = 0; - nSkip = 0; - for (int i=nStart, sz=string.GetLength(); i < sz; i++) - { - if (i-nStart > 10) - break; - - FX_WCHAR c = string.GetAt(i); - if (IsDigit((wchar_t)c)) - { - nRet = nRet * 10 + (c - '0'); - nSkip = i - nStart + 1; - if (nSkip >= nMaxStep) - break; - } - else - break; - } +int CJS_PublicMethods::ParseStringInteger(const CFX_WideString& string, + int nStart, + int& nSkip, + int nMaxStep) { + int nRet = 0; + nSkip = 0; + for (int i = nStart, sz = string.GetLength(); i < sz; i++) { + if (i - nStart > 10) + break; + + FX_WCHAR c = string.GetAt(i); + if (IsDigit((wchar_t)c)) { + nRet = nRet * 10 + (c - '0'); + nSkip = i - nStart + 1; + if (nSkip >= nMaxStep) + break; + } else + break; + } - return nRet; + return nRet; } -CFX_WideString CJS_PublicMethods::ParseStringString(const CFX_WideString& string, int nStart, int& nSkip) -{ - CFX_WideString swRet; - nSkip = 0; - for (int i=nStart, sz=string.GetLength(); i < sz; i++) - { - FX_WCHAR c = string.GetAt(i); - if ((c >= L'a' && c <= L'z') || (c >= L'A' && c <= L'Z')) - { - swRet += c; - nSkip = i - nStart + 1; - } - else - break; - } - - return swRet; +CFX_WideString CJS_PublicMethods::ParseStringString( + const CFX_WideString& string, + int nStart, + int& nSkip) { + CFX_WideString swRet; + nSkip = 0; + for (int i = nStart, sz = string.GetLength(); i < sz; i++) { + FX_WCHAR c = string.GetAt(i); + if ((c >= L'a' && c <= L'z') || (c >= L'A' && c <= L'Z')) { + swRet += c; + nSkip = i - nStart + 1; + } else + break; + } + + return swRet; } -double CJS_PublicMethods::ParseNormalDate(const CFX_WideString & value, FX_BOOL& bWrongFormat) -{ - double dt = JS_GetDateTime(); - - int nYear = JS_GetYearFromTime(dt); - int nMonth = JS_GetMonthFromTime(dt) + 1; - int nDay = JS_GetDayFromTime(dt); - int nHour = JS_GetHourFromTime(dt); - int nMin = JS_GetMinFromTime(dt); - int nSec = JS_GetSecFromTime(dt); - - int number[3]; - - int nSkip = 0; - int nLen = value.GetLength(); - int nIndex = 0; - int i = 0; - while (i < nLen) - { - if (nIndex > 2) break; - - FX_WCHAR c = value.GetAt(i); - if (IsDigit((wchar_t)c)) - { - number[nIndex++] = ParseStringInteger(value, i, nSkip, 4); - i += nSkip; - } - else - { - i ++; - } +double CJS_PublicMethods::ParseNormalDate(const CFX_WideString& value, + FX_BOOL& bWrongFormat) { + double dt = JS_GetDateTime(); + + int nYear = JS_GetYearFromTime(dt); + int nMonth = JS_GetMonthFromTime(dt) + 1; + int nDay = JS_GetDayFromTime(dt); + int nHour = JS_GetHourFromTime(dt); + int nMin = JS_GetMinFromTime(dt); + int nSec = JS_GetSecFromTime(dt); + + int number[3]; + + int nSkip = 0; + int nLen = value.GetLength(); + int nIndex = 0; + int i = 0; + while (i < nLen) { + if (nIndex > 2) + break; + + FX_WCHAR c = value.GetAt(i); + if (IsDigit((wchar_t)c)) { + number[nIndex++] = ParseStringInteger(value, i, nSkip, 4); + i += nSkip; + } else { + i++; + } + } + + if (nIndex == 2) { + // case2: month/day + // case3: day/month + if ((number[0] >= 1 && number[0] <= 12) && + (number[1] >= 1 && number[1] <= 31)) { + nMonth = number[0]; + nDay = number[1]; + } else if ((number[0] >= 1 && number[0] <= 31) && + (number[1] >= 1 && number[1] <= 12)) { + nDay = number[0]; + nMonth = number[1]; } - if (nIndex == 2) - { - // case2: month/day - // case3: day/month - if ((number[0] >= 1 && number[0] <= 12) && (number[1] >= 1 && number[1] <= 31)) - { - nMonth = number[0]; - nDay = number[1]; - } - else if ((number[0] >= 1 && number[0] <= 31) && (number[1] >= 1 && number[1] <= 12)) - { - nDay = number[0]; - nMonth = number[1]; - } - - bWrongFormat = FALSE; - } - else if (nIndex == 3) - { - // case1: year/month/day - // case2: month/day/year - // case3: day/month/year - - if (number[0] > 12 && (number[1] >= 1 && number[1] <= 12) && (number[2] >= 1 && number[2] <= 31)) - { - nYear = number[0]; - nMonth = number[1]; - nDay = number[2]; - } - else if ((number[0] >= 1 && number[0] <= 12) && (number[1] >= 1 && number[1] <= 31) && number[2] > 31) - { - nMonth = number[0]; - nDay = number[1]; - nYear = number[2]; - } - else if ((number[0] >= 1 && number[0] <= 31) && (number[1] >= 1 && number[1] <= 12) && number[2] > 31) - { - nDay = number[0]; - nMonth = number[1]; - nYear = number[2]; - } - - bWrongFormat = FALSE; - } - else - { - bWrongFormat = TRUE; - return dt; + bWrongFormat = FALSE; + } else if (nIndex == 3) { + // case1: year/month/day + // case2: month/day/year + // case3: day/month/year + + if (number[0] > 12 && (number[1] >= 1 && number[1] <= 12) && + (number[2] >= 1 && number[2] <= 31)) { + nYear = number[0]; + nMonth = number[1]; + nDay = number[2]; + } else if ((number[0] >= 1 && number[0] <= 12) && + (number[1] >= 1 && number[1] <= 31) && number[2] > 31) { + nMonth = number[0]; + nDay = number[1]; + nYear = number[2]; + } else if ((number[0] >= 1 && number[0] <= 31) && + (number[1] >= 1 && number[1] <= 12) && number[2] > 31) { + nDay = number[0]; + nMonth = number[1]; + nYear = number[2]; } - CFX_WideString swTemp; - swTemp.Format(L"%d/%d/%d %d:%d:%d",nMonth,nDay,nYear,nHour,nMin,nSec); - return JS_DateParse(swTemp.c_str()); -} - -double CJS_PublicMethods::MakeRegularDate(const CFX_WideString & value, const CFX_WideString & format, FX_BOOL& bWrongFormat) -{ - double dt = JS_GetDateTime(); - - if (format.IsEmpty() || value.IsEmpty()) - return dt; - - int nYear = JS_GetYearFromTime(dt); - int nMonth = JS_GetMonthFromTime(dt) + 1; - int nDay = JS_GetDayFromTime(dt); - int nHour = JS_GetHourFromTime(dt); - int nMin = JS_GetMinFromTime(dt); - int nSec = JS_GetSecFromTime(dt); - - int nYearSub = 99; //nYear - 2000; - - FX_BOOL bPm = FALSE; - FX_BOOL bExit = FALSE; bWrongFormat = FALSE; + } else { + bWrongFormat = TRUE; + return dt; + } + + CFX_WideString swTemp; + swTemp.Format(L"%d/%d/%d %d:%d:%d", nMonth, nDay, nYear, nHour, nMin, nSec); + return JS_DateParse(swTemp.c_str()); +} - int i=0; - int j=0; - - while (i < format.GetLength()) - { - if (bExit) break; - - FX_WCHAR c = format.GetAt(i); - switch (c) - { - case ':': - case '.': - case '-': - case '\\': - case '/': - i++; - j++; - break; +double CJS_PublicMethods::MakeRegularDate(const CFX_WideString& value, + const CFX_WideString& format, + FX_BOOL& bWrongFormat) { + double dt = JS_GetDateTime(); + + if (format.IsEmpty() || value.IsEmpty()) + return dt; + + int nYear = JS_GetYearFromTime(dt); + int nMonth = JS_GetMonthFromTime(dt) + 1; + int nDay = JS_GetDayFromTime(dt); + int nHour = JS_GetHourFromTime(dt); + int nMin = JS_GetMinFromTime(dt); + int nSec = JS_GetSecFromTime(dt); + + int nYearSub = 99; // nYear - 2000; + + FX_BOOL bPm = FALSE; + FX_BOOL bExit = FALSE; + bWrongFormat = FALSE; + + int i = 0; + int j = 0; + + while (i < format.GetLength()) { + if (bExit) + break; + + FX_WCHAR c = format.GetAt(i); + switch (c) { + case ':': + case '.': + case '-': + case '\\': + case '/': + i++; + j++; + break; + case 'y': + case 'm': + case 'd': + case 'H': + case 'h': + case 'M': + case 's': + case 't': { + int oldj = j; + int nSkip = 0; + int remaining = format.GetLength() - i - 1; + + if (remaining == 0 || format.GetAt(i + 1) != c) { + switch (c) { + case 'y': + i++; + j++; + break; + case 'm': + nMonth = ParseStringInteger(value, j, nSkip, 2); + i++; + j += nSkip; + break; + case 'd': + nDay = ParseStringInteger(value, j, nSkip, 2); + i++; + j += nSkip; + break; + case 'H': + nHour = ParseStringInteger(value, j, nSkip, 2); + i++; + j += nSkip; + break; + case 'h': + nHour = ParseStringInteger(value, j, nSkip, 2); + i++; + j += nSkip; + break; + case 'M': + nMin = ParseStringInteger(value, j, nSkip, 2); + i++; + j += nSkip; + break; + case 's': + nSec = ParseStringInteger(value, j, nSkip, 2); + i++; + j += nSkip; + break; + case 't': + bPm = (j < value.GetLength() && value.GetAt(j) == 'p'); + i++; + j++; + break; + } + } else if (remaining == 1 || format.GetAt(i + 2) != c) { + switch (c) { case 'y': + nYear = ParseStringInteger(value, j, nSkip, 4); + i += 2; + j += nSkip; + break; case 'm': + nMonth = ParseStringInteger(value, j, nSkip, 2); + i += 2; + j += nSkip; + break; case 'd': + nDay = ParseStringInteger(value, j, nSkip, 2); + i += 2; + j += nSkip; + break; case 'H': + nHour = ParseStringInteger(value, j, nSkip, 2); + i += 2; + j += nSkip; + break; case 'h': + nHour = ParseStringInteger(value, j, nSkip, 2); + i += 2; + j += nSkip; + break; case 'M': + nMin = ParseStringInteger(value, j, nSkip, 2); + i += 2; + j += nSkip; + break; case 's': + nSec = ParseStringInteger(value, j, nSkip, 2); + i += 2; + j += nSkip; + break; case 't': - { - int oldj = j; - int nSkip = 0; - int remaining = format.GetLength() - i - 1; - - if (remaining == 0 || format.GetAt(i+1) != c) - { - switch (c) - { - case 'y': - i++; - j++; - break; - case 'm': - nMonth = ParseStringInteger(value, j, nSkip, 2); - i++; - j += nSkip; - break; - case 'd': - nDay = ParseStringInteger(value, j, nSkip, 2); - i++; - j += nSkip; - break; - case 'H': - nHour = ParseStringInteger(value, j, nSkip, 2); - i++; - j += nSkip; - break; - case 'h': - nHour = ParseStringInteger(value, j, nSkip, 2); - i++; - j += nSkip; - break; - case 'M': - nMin = ParseStringInteger(value, j, nSkip, 2); - i++; - j += nSkip; - break; - case 's': - nSec = ParseStringInteger(value, j, nSkip, 2); - i++; - j += nSkip; - break; - case 't': - bPm = (j < value.GetLength() && value.GetAt(j) == 'p'); - i++; - j++; - break; - } - } - else if (remaining == 1 || format.GetAt(i+2) != c) - { - switch (c) - { - case 'y': - nYear = ParseStringInteger(value, j, nSkip, 4); - i += 2; - j += nSkip; - break; - case 'm': - nMonth = ParseStringInteger(value, j, nSkip, 2); - i += 2; - j += nSkip; - break; - case 'd': - nDay = ParseStringInteger(value, j, nSkip, 2); - i += 2; - j += nSkip; - break; - case 'H': - nHour = ParseStringInteger(value, j, nSkip, 2); - i += 2; - j += nSkip; - break; - case 'h': - nHour = ParseStringInteger(value, j, nSkip, 2); - i += 2; - j += nSkip; - break; - case 'M': - nMin = ParseStringInteger(value, j, nSkip, 2); - i += 2; - j += nSkip; - break; - case 's': - nSec = ParseStringInteger(value, j, nSkip, 2); - i += 2; - j += nSkip; - break; - case 't': - bPm = (j + 1 < value.GetLength() && value.GetAt(j) == 'p' && value.GetAt(j+1) == 'm'); - i += 2; - j += 2; - break; - } - } - else if (remaining == 2 || format.GetAt(i+3) != c) - { - switch (c) - { - case 'm': - { - CFX_WideString sMonth = ParseStringString(value, j, nSkip); - FX_BOOL bFind = FALSE; - for (int m = 0; m < 12; m++) - { - if (sMonth.CompareNoCase(months[m]) == 0) - { - nMonth = m + 1; - i+=3; - j+=nSkip; - bFind = TRUE; - break; - } - } - - if (!bFind) - { - nMonth = ParseStringInteger(value, j, nSkip, 3); - i+=3; - j += nSkip; - } - } - break; - case 'y': - break; - default: - i+=3; - j+=3; - break; - } - } - else if (remaining == 3 || format.GetAt(i+4) != c) - { - switch (c) - { - - - case 'y': - nYear = ParseStringInteger(value, j, nSkip, 4); - j += nSkip; - i += 4; - break; - case 'm': - { - FX_BOOL bFind = FALSE; - - CFX_WideString sMonth = ParseStringString(value, j, nSkip); - sMonth.MakeLower(); - - for (int m = 0; m < 12; m++) - { - CFX_WideString sFullMonths = fullmonths[m]; - sFullMonths.MakeLower(); - - if (sFullMonths.Find(sMonth.c_str(), 0) != -1) - { - nMonth = m + 1; - i += 4; - j += nSkip; - bFind = TRUE; - break; - } - } - - if (!bFind) - { - nMonth = ParseStringInteger(value, j, nSkip, 4); - i+=4; - j += nSkip; - } - } - break; - default: - i += 4; - j += 4; - break; - } - } - else - { - if (j >= value.GetLength() || format.GetAt(i) != value.GetAt(j)) - { - bWrongFormat = TRUE; - bExit = TRUE; - } - i++; - j++; - } - - if (oldj == j) - { - bWrongFormat = TRUE; - bExit = TRUE; - } + bPm = (j + 1 < value.GetLength() && value.GetAt(j) == 'p' && + value.GetAt(j + 1) == 'm'); + i += 2; + j += 2; + break; + } + } else if (remaining == 2 || format.GetAt(i + 3) != c) { + switch (c) { + case 'm': { + CFX_WideString sMonth = ParseStringString(value, j, nSkip); + FX_BOOL bFind = FALSE; + for (int m = 0; m < 12; m++) { + if (sMonth.CompareNoCase(months[m]) == 0) { + nMonth = m + 1; + i += 3; + j += nSkip; + bFind = TRUE; + break; } - - break; + } + + if (!bFind) { + nMonth = ParseStringInteger(value, j, nSkip, 3); + i += 3; + j += nSkip; + } + } break; + case 'y': + break; default: - if (value.GetLength() <= j) - { - bExit = TRUE; - } - else if (format.GetAt(i) != value.GetAt(j)) - { - bWrongFormat = TRUE; - bExit = TRUE; + i += 3; + j += 3; + break; + } + } else if (remaining == 3 || format.GetAt(i + 4) != c) { + switch (c) { + case 'y': + nYear = ParseStringInteger(value, j, nSkip, 4); + j += nSkip; + i += 4; + break; + case 'm': { + FX_BOOL bFind = FALSE; + + CFX_WideString sMonth = ParseStringString(value, j, nSkip); + sMonth.MakeLower(); + + for (int m = 0; m < 12; m++) { + CFX_WideString sFullMonths = fullmonths[m]; + sFullMonths.MakeLower(); + + if (sFullMonths.Find(sMonth.c_str(), 0) != -1) { + nMonth = m + 1; + i += 4; + j += nSkip; + bFind = TRUE; + break; } + } + + if (!bFind) { + nMonth = ParseStringInteger(value, j, nSkip, 4); + i += 4; + j += nSkip; + } + } break; + default: + i += 4; + j += 4; + break; + } + } else { + if (j >= value.GetLength() || format.GetAt(i) != value.GetAt(j)) { + bWrongFormat = TRUE; + bExit = TRUE; + } + i++; + j++; + } - i++; - j++; - break; + if (oldj == j) { + bWrongFormat = TRUE; + bExit = TRUE; + } + } + + break; + default: + if (value.GetLength() <= j) { + bExit = TRUE; + } else if (format.GetAt(i) != value.GetAt(j)) { + bWrongFormat = TRUE; + bExit = TRUE; } + + i++; + j++; + break; } + } - if (bPm) nHour += 12; + if (bPm) + nHour += 12; - if (nYear >= 0 && nYear <= nYearSub) - nYear += 2000; + if (nYear >= 0 && nYear <= nYearSub) + nYear += 2000; - if (nMonth < 1 || nMonth > 12) - bWrongFormat = TRUE; + if (nMonth < 1 || nMonth > 12) + bWrongFormat = TRUE; - if (nDay < 1 || nDay > 31) - bWrongFormat = TRUE; + if (nDay < 1 || nDay > 31) + bWrongFormat = TRUE; - if (nHour < 0 || nHour > 24) - bWrongFormat = TRUE; + if (nHour < 0 || nHour > 24) + bWrongFormat = TRUE; - if (nMin < 0 || nMin > 60) - bWrongFormat = TRUE; + if (nMin < 0 || nMin > 60) + bWrongFormat = TRUE; - if (nSec < 0 || nSec > 60) - bWrongFormat = TRUE; + if (nSec < 0 || nSec > 60) + bWrongFormat = TRUE; - double dRet = 0; + double dRet = 0; - if (bWrongFormat) - { - dRet = ParseNormalDate(value, bWrongFormat); - } - else - { - dRet = JS_MakeDate(JS_MakeDay(nYear,nMonth - 1,nDay),JS_MakeTime(nHour, nMin, nSec, 0)); + if (bWrongFormat) { + dRet = ParseNormalDate(value, bWrongFormat); + } else { + dRet = JS_MakeDate(JS_MakeDay(nYear, nMonth - 1, nDay), + JS_MakeTime(nHour, nMin, nSec, 0)); - if (JS_PortIsNan(dRet)) - { - dRet = JS_DateParse(value.c_str()); - } - } - - if (JS_PortIsNan(dRet)) - { - dRet = ParseNormalDate(value, bWrongFormat); + if (JS_PortIsNan(dRet)) { + dRet = JS_DateParse(value.c_str()); } + } - return dRet; + if (JS_PortIsNan(dRet)) { + dRet = ParseNormalDate(value, bWrongFormat); + } + return dRet; } -CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate, const CFX_WideString & format) -{ - CFX_WideString sRet = L"",sPart = L""; - - int nYear = JS_GetYearFromTime(dDate); - int nMonth = JS_GetMonthFromTime(dDate) + 1; - int nDay = JS_GetDayFromTime(dDate); - int nHour = JS_GetHourFromTime(dDate); - int nMin = JS_GetMinFromTime(dDate); - int nSec = JS_GetSecFromTime(dDate); - - int i = 0; - while (i < format.GetLength()) - { - FX_WCHAR c = format.GetAt(i); - int remaining = format.GetLength() - i - 1; - sPart = L""; - switch (c) - { +CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate, + const CFX_WideString& format) { + CFX_WideString sRet = L"", sPart = L""; + + int nYear = JS_GetYearFromTime(dDate); + int nMonth = JS_GetMonthFromTime(dDate) + 1; + int nDay = JS_GetDayFromTime(dDate); + int nHour = JS_GetHourFromTime(dDate); + int nMin = JS_GetMinFromTime(dDate); + int nSec = JS_GetSecFromTime(dDate); + + int i = 0; + while (i < format.GetLength()) { + FX_WCHAR c = format.GetAt(i); + int remaining = format.GetLength() - i - 1; + sPart = L""; + switch (c) { + case 'y': + case 'm': + case 'd': + case 'H': + case 'h': + case 'M': + case 's': + case 't': + if (remaining == 0 || format.GetAt(i + 1) != c) { + switch (c) { case 'y': + sPart += c; + break; case 'm': + sPart.Format(L"%d", nMonth); + break; case 'd': + sPart.Format(L"%d", nDay); + break; case 'H': + sPart.Format(L"%d", nHour); + break; case 'h': + sPart.Format(L"%d", nHour > 12 ? nHour - 12 : nHour); + break; case 'M': + sPart.Format(L"%d", nMin); + break; case 's': + sPart.Format(L"%d", nSec); + break; case 't': - if (remaining == 0 || format.GetAt(i+1) != c) - { - switch (c) - { - case 'y': - sPart += c; - break; - case 'm': - sPart.Format(L"%d",nMonth); - break; - case 'd': - sPart.Format(L"%d",nDay); - break; - case 'H': - sPart.Format(L"%d",nHour); - break; - case 'h': - sPart.Format(L"%d",nHour>12?nHour - 12:nHour); - break; - case 'M': - sPart.Format(L"%d",nMin); - break; - case 's': - sPart.Format(L"%d",nSec); - break; - case 't': - sPart += nHour>12?'p':'a'; - break; - } - i++; - } - else if (remaining == 1 || format.GetAt(i+2) != c) - { - switch (c) - { - case 'y': - sPart.Format(L"%02d",nYear - (nYear / 100) * 100); - break; - case 'm': - sPart.Format(L"%02d",nMonth); - break; - case 'd': - sPart.Format(L"%02d",nDay); - break; - case 'H': - sPart.Format(L"%02d",nHour); - break; - case 'h': - sPart.Format(L"%02d",nHour>12?nHour - 12:nHour); - break; - case 'M': - sPart.Format(L"%02d",nMin); - break; - case 's': - sPart.Format(L"%02d",nSec); - break; - case 't': - sPart = nHour>12? L"pm": L"am"; - break; - } - i+=2; - } - else if (remaining == 2 || format.GetAt(i+3) != c) - { - switch (c) - { - case 'm': - i+=3; - if (nMonth > 0&&nMonth <= 12) - sPart += months[nMonth - 1]; - break; - default: - i+=3; - sPart += c; - sPart += c; - sPart += c; - break; - } - } - else if (remaining == 3 || format.GetAt(i+4) != c) - { - switch (c) - { - case 'y': - sPart.Format(L"%04d",nYear); - i += 4; - break; - case 'm': - i+=4; - if (nMonth > 0&&nMonth <= 12) - sPart += fullmonths[nMonth - 1]; - break; - default: - i += 4; - sPart += c; - sPart += c; - sPart += c; - sPart += c; - break; - } - } - else - { - i++; - sPart += c; - } - break; + sPart += nHour > 12 ? 'p' : 'a'; + break; + } + i++; + } else if (remaining == 1 || format.GetAt(i + 2) != c) { + switch (c) { + case 'y': + sPart.Format(L"%02d", nYear - (nYear / 100) * 100); + break; + case 'm': + sPart.Format(L"%02d", nMonth); + break; + case 'd': + sPart.Format(L"%02d", nDay); + break; + case 'H': + sPart.Format(L"%02d", nHour); + break; + case 'h': + sPart.Format(L"%02d", nHour > 12 ? nHour - 12 : nHour); + break; + case 'M': + sPart.Format(L"%02d", nMin); + break; + case 's': + sPart.Format(L"%02d", nSec); + break; + case 't': + sPart = nHour > 12 ? L"pm" : L"am"; + break; + } + i += 2; + } else if (remaining == 2 || format.GetAt(i + 3) != c) { + switch (c) { + case 'm': + i += 3; + if (nMonth > 0 && nMonth <= 12) + sPart += months[nMonth - 1]; + break; default: - i++; - sPart += c; - break; + i += 3; + sPart += c; + sPart += c; + sPart += c; + break; + } + } else if (remaining == 3 || format.GetAt(i + 4) != c) { + switch (c) { + case 'y': + sPart.Format(L"%04d", nYear); + i += 4; + break; + case 'm': + i += 4; + if (nMonth > 0 && nMonth <= 12) + sPart += fullmonths[nMonth - 1]; + break; + default: + i += 4; + sPart += c; + sPart += c; + sPart += c; + sPart += c; + break; + } + } else { + i++; + sPart += c; } - - sRet += sPart; + break; + default: + i++; + sPart += c; + break; } - return sRet; + sRet += sPart; + } + + return sRet; } /* -------------------------------------------------------------------------- */ -//function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend) -FX_BOOL CJS_PublicMethods::AFNumber_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +// function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, +// bCurrencyPrepend) +FX_BOOL CJS_PublicMethods::AFNumber_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { #if _FX_OS_ != _FX_ANDROID_ - v8::Isolate* isolate = ::GetIsolate(cc); - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (params.size() != 6) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - if(!pEvent->m_pValue) - return FALSE; - CFX_WideString& Value = pEvent->Value(); - CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value)); - - if (strValue.IsEmpty()) return TRUE; - - int iDec = params[0].ToInt(); - int iSepStyle = params[1].ToInt(); - int iNegStyle = params[2].ToInt(); - // params[3] is iCurrStyle, it's not used. - std::wstring wstrCurrency(params[4].ToCFXWideString().c_str()); - FX_BOOL bCurrencyPrepend = params[5].ToBool(); - - if (iDec < 0) iDec = -iDec; - - if (iSepStyle < 0 || iSepStyle > 3) - iSepStyle = 0; - - if (iNegStyle < 0 || iNegStyle > 3) - iNegStyle = 0; - - - ////////////////////////////////////////////////////// - //for processing decimal places - strValue.Replace(",", "."); - double dValue = atof(strValue); - if (iDec > 0) - dValue += DOUBLE_CORRECT;// - - int iDec2; - int iNegative = 0; - - strValue = fcvt(dValue, iDec, &iDec2, &iNegative); - if (strValue.IsEmpty()) - { - dValue = 0; - strValue = fcvt(dValue, iDec, &iDec2, &iNegative); - if (strValue.IsEmpty()) - { - strValue = "0"; - iDec2 = 1; - } - - } - - if (iDec2 < 0) - { - for (int iNum = 0;iNum < abs(iDec2);iNum++) - { - strValue = "0" + strValue; - } - iDec2 = 0; - - } - int iMax = strValue.GetLength(); - if (iDec2 > iMax) - { - for (int iNum = 0;iNum <= iDec2 - iMax ;iNum++) - { - strValue += "0"; - } - iMax = iDec2+1; - } - /////////////////////////////////////////////////////// - //for processing seperator style - if (iDec2 < iMax) - { - if (iSepStyle == 0 || iSepStyle == 1) - { - strValue.Insert(iDec2, '.'); - iMax++; - } - else if (iSepStyle == 2 || iSepStyle == 3) - { - strValue.Insert(iDec2, ','); - iMax++; - } - - if (iDec2 == 0) - strValue.Insert(iDec2, '0'); - } - if (iSepStyle == 0 || iSepStyle == 2) - { - char cSeperator; - if (iSepStyle == 0) - cSeperator = ','; - else - cSeperator = '.'; - - int iDecPositive,iDecNegative; - iDecPositive = iDec2; - iDecNegative = iDec2; - - for (iDecPositive = iDec2 -3; iDecPositive > 0;iDecPositive -= 3) - { - strValue.Insert(iDecPositive, cSeperator); - iMax++; - } - } - - ////////////////////////////////////////////////////////////////////// - //for processing currency string - - Value = CFX_WideString::FromLocal(strValue); - std::wstring strValue2 = Value.c_str(); - - if (bCurrencyPrepend) - strValue2 = wstrCurrency + strValue2; - else - strValue2 = strValue2 + wstrCurrency; - - - - ///////////////////////////////////////////////////////////////////////// - //for processing negative style - if (iNegative) - { - if (iNegStyle == 0) - { - strValue2.insert(0,L"-"); - } - if (iNegStyle == 2 || iNegStyle == 3) - { - strValue2.insert(0,L"("); - strValue2.insert(strValue2.length(),L")"); - } - if (iNegStyle == 1 || iNegStyle == 3) - { - if (Field * fTarget = pEvent->Target_Field()) - { - CJS_Array arColor(isolate); - CJS_Value vColElm(isolate); - vColElm = L"RGB"; - arColor.SetElement(0,vColElm); - vColElm = 1; - arColor.SetElement(1,vColElm); - vColElm = 0; - arColor.SetElement(2,vColElm); - - arColor.SetElement(3,vColElm); - - CJS_PropValue vProp(isolate); - vProp.StartGetting(); - vProp<textColor(cc,vProp,sError);// red - } - } - } - else - { - if (iNegStyle == 1 || iNegStyle == 3) - { - if (Field *fTarget = pEvent->Target_Field()) - { - CJS_Array arColor(isolate); - CJS_Value vColElm(isolate); - vColElm = L"RGB"; - arColor.SetElement(0,vColElm); - vColElm = 0; - arColor.SetElement(1,vColElm); - arColor.SetElement(2,vColElm); - arColor.SetElement(3,vColElm); - - CJS_PropValue vProp(isolate); - vProp.StartGetting(); - fTarget->textColor(cc,vProp,sError); - - CJS_Array aProp(isolate); - vProp.ConvertToArray(aProp); - - CPWL_Color crProp; - CPWL_Color crColor; - color::ConvertArrayToPWLColor(aProp, crProp); - color::ConvertArrayToPWLColor(arColor, crColor); - - if (crColor != crProp) - { - CJS_PropValue vProp2(isolate); - vProp2.StartGetting(); - vProp2<textColor(cc,vProp2,sError); - } - } - } - } - Value = strValue2.c_str(); -#endif + v8::Isolate* isolate = ::GetIsolate(cc); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (params.size() != 6) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + if (!pEvent->m_pValue) + return FALSE; + CFX_WideString& Value = pEvent->Value(); + CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value)); + + if (strValue.IsEmpty()) return TRUE; -} - -//function AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend) -FX_BOOL CJS_PublicMethods::AFNumber_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if(params.size() < 2) - return FALSE; - int iSepStyle = params[1].ToInt(); - - if (iSepStyle < 0 || iSepStyle > 3) - iSepStyle = 0; - if(!pEvent->m_pValue) - return FALSE; - CFX_WideString & val = pEvent->Value(); - CFX_WideString & w_strChange = pEvent->Change(); - CFX_WideString w_strValue = val; - - if (pEvent->WillCommit()) - { - CFX_WideString wstrChange = w_strChange; - CFX_WideString wstrValue = StrLTrim(w_strValue.c_str()); - if (wstrValue.IsEmpty()) - return TRUE; - - CFX_WideString swTemp = wstrValue; - swTemp.Replace(L",", L"."); - if (!IsNumber(swTemp.c_str())) - { - pEvent->Rc() = FALSE; - sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE); - Alert(pContext, sError.c_str()); - return TRUE; - } - return TRUE; // it happens after the last keystroke and before validating, - } - std::wstring w_strValue2 = w_strValue.c_str(); - std::wstring w_strChange2 = w_strChange.c_str(); - std::wstring w_strSelected; - if(-1 != pEvent->SelStart()) - w_strSelected = w_strValue2.substr(pEvent->SelStart(),(pEvent->SelEnd() - pEvent->SelStart())); - FX_BOOL bHasSign = (w_strValue2.find('-') != -1) && (w_strSelected.find('-') == -1); - if (bHasSign) - { - //can't insert "change" in front to sign postion. - if (pEvent->SelStart() == 0) - { - FX_BOOL &bRc = pEvent->Rc(); - bRc = FALSE; - return TRUE; + int iDec = params[0].ToInt(); + int iSepStyle = params[1].ToInt(); + int iNegStyle = params[2].ToInt(); + // params[3] is iCurrStyle, it's not used. + std::wstring wstrCurrency(params[4].ToCFXWideString().c_str()); + FX_BOOL bCurrencyPrepend = params[5].ToBool(); + + if (iDec < 0) + iDec = -iDec; + + if (iSepStyle < 0 || iSepStyle > 3) + iSepStyle = 0; + + if (iNegStyle < 0 || iNegStyle > 3) + iNegStyle = 0; + + ////////////////////////////////////////////////////// + // for processing decimal places + strValue.Replace(",", "."); + double dValue = atof(strValue); + if (iDec > 0) + dValue += DOUBLE_CORRECT; // + + int iDec2; + int iNegative = 0; + + strValue = fcvt(dValue, iDec, &iDec2, &iNegative); + if (strValue.IsEmpty()) { + dValue = 0; + strValue = fcvt(dValue, iDec, &iDec2, &iNegative); + if (strValue.IsEmpty()) { + strValue = "0"; + iDec2 = 1; + } + } + + if (iDec2 < 0) { + for (int iNum = 0; iNum < abs(iDec2); iNum++) { + strValue = "0" + strValue; + } + iDec2 = 0; + } + int iMax = strValue.GetLength(); + if (iDec2 > iMax) { + for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) { + strValue += "0"; + } + iMax = iDec2 + 1; + } + /////////////////////////////////////////////////////// + // for processing seperator style + if (iDec2 < iMax) { + if (iSepStyle == 0 || iSepStyle == 1) { + strValue.Insert(iDec2, '.'); + iMax++; + } else if (iSepStyle == 2 || iSepStyle == 3) { + strValue.Insert(iDec2, ','); + iMax++; + } + + if (iDec2 == 0) + strValue.Insert(iDec2, '0'); + } + if (iSepStyle == 0 || iSepStyle == 2) { + char cSeperator; + if (iSepStyle == 0) + cSeperator = ','; + else + cSeperator = '.'; + + int iDecPositive, iDecNegative; + iDecPositive = iDec2; + iDecNegative = iDec2; + + for (iDecPositive = iDec2 - 3; iDecPositive > 0; iDecPositive -= 3) { + strValue.Insert(iDecPositive, cSeperator); + iMax++; + } + } + + ////////////////////////////////////////////////////////////////////// + // for processing currency string + + Value = CFX_WideString::FromLocal(strValue); + std::wstring strValue2 = Value.c_str(); + + if (bCurrencyPrepend) + strValue2 = wstrCurrency + strValue2; + else + strValue2 = strValue2 + wstrCurrency; + + ///////////////////////////////////////////////////////////////////////// + // for processing negative style + if (iNegative) { + if (iNegStyle == 0) { + strValue2.insert(0, L"-"); + } + if (iNegStyle == 2 || iNegStyle == 3) { + strValue2.insert(0, L"("); + strValue2.insert(strValue2.length(), L")"); + } + if (iNegStyle == 1 || iNegStyle == 3) { + if (Field* fTarget = pEvent->Target_Field()) { + CJS_Array arColor(isolate); + CJS_Value vColElm(isolate); + vColElm = L"RGB"; + arColor.SetElement(0, vColElm); + vColElm = 1; + arColor.SetElement(1, vColElm); + vColElm = 0; + arColor.SetElement(2, vColElm); + + arColor.SetElement(3, vColElm); + + CJS_PropValue vProp(isolate); + vProp.StartGetting(); + vProp << arColor; + vProp.StartSetting(); + fTarget->textColor(cc, vProp, sError); // red + } + } + } else { + if (iNegStyle == 1 || iNegStyle == 3) { + if (Field* fTarget = pEvent->Target_Field()) { + CJS_Array arColor(isolate); + CJS_Value vColElm(isolate); + vColElm = L"RGB"; + arColor.SetElement(0, vColElm); + vColElm = 0; + arColor.SetElement(1, vColElm); + arColor.SetElement(2, vColElm); + arColor.SetElement(3, vColElm); + + CJS_PropValue vProp(isolate); + vProp.StartGetting(); + fTarget->textColor(cc, vProp, sError); + + CJS_Array aProp(isolate); + vProp.ConvertToArray(aProp); + + CPWL_Color crProp; + CPWL_Color crColor; + color::ConvertArrayToPWLColor(aProp, crProp); + color::ConvertArrayToPWLColor(arColor, crColor); + + if (crColor != crProp) { + CJS_PropValue vProp2(isolate); + vProp2.StartGetting(); + vProp2 << arColor; + vProp2.StartSetting(); + fTarget->textColor(cc, vProp2, sError); } + } } + } + Value = strValue2.c_str(); +#endif + return TRUE; +} - char cSep = L'.'; - - switch (iSepStyle) - { +// function AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency, +// bCurrencyPrepend) +FX_BOOL CJS_PublicMethods::AFNumber_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (params.size() < 2) + return FALSE; + int iSepStyle = params[1].ToInt(); + + if (iSepStyle < 0 || iSepStyle > 3) + iSepStyle = 0; + if (!pEvent->m_pValue) + return FALSE; + CFX_WideString& val = pEvent->Value(); + CFX_WideString& w_strChange = pEvent->Change(); + CFX_WideString w_strValue = val; + + if (pEvent->WillCommit()) { + CFX_WideString wstrChange = w_strChange; + CFX_WideString wstrValue = StrLTrim(w_strValue.c_str()); + if (wstrValue.IsEmpty()) + return TRUE; + + CFX_WideString swTemp = wstrValue; + swTemp.Replace(L",", L"."); + if (!IsNumber(swTemp.c_str())) { + pEvent->Rc() = FALSE; + sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE); + Alert(pContext, sError.c_str()); + return TRUE; + } + return TRUE; // it happens after the last keystroke and before validating, + } + + std::wstring w_strValue2 = w_strValue.c_str(); + std::wstring w_strChange2 = w_strChange.c_str(); + std::wstring w_strSelected; + if (-1 != pEvent->SelStart()) + w_strSelected = w_strValue2.substr(pEvent->SelStart(), + (pEvent->SelEnd() - pEvent->SelStart())); + FX_BOOL bHasSign = + (w_strValue2.find('-') != -1) && (w_strSelected.find('-') == -1); + if (bHasSign) { + // can't insert "change" in front to sign postion. + if (pEvent->SelStart() == 0) { + FX_BOOL& bRc = pEvent->Rc(); + bRc = FALSE; + return TRUE; + } + } + + char cSep = L'.'; + + switch (iSepStyle) { case 0: case 1: - cSep = L'.'; - break; + cSep = L'.'; + break; case 2: case 3: - cSep = L','; - break; - } - - FX_BOOL bHasSep = (w_strValue2.find(cSep) != -1); - for (std::wstring::iterator it = w_strChange2.begin(); it != w_strChange2.end(); it++) - { - if (*it == cSep) - { - if (bHasSep) - { - FX_BOOL &bRc = pEvent->Rc(); - bRc = FALSE; - return TRUE; - } - bHasSep = TRUE; - continue; - } - if (*it == L'-') - { - if (bHasSign) - { - FX_BOOL &bRc = pEvent->Rc(); - bRc = FALSE; - return TRUE; - } - if (it != w_strChange2.begin()) //sign's position is not correct - { - FX_BOOL &bRc = pEvent->Rc(); - bRc = FALSE; - return TRUE; - } - if (pEvent->SelStart() != 0) - { - FX_BOOL &bRc = pEvent->Rc(); - bRc = FALSE; - return TRUE; - } - bHasSign = TRUE; - continue; - } - - if (!IsDigit(*it)) - { - FX_BOOL &bRc = pEvent->Rc(); - bRc = FALSE; - return TRUE; - } - } - - - std::wstring w_prefix = w_strValue2.substr(0,pEvent->SelStart()); - std::wstring w_postfix; - if (pEvent->SelEnd()<(int)w_strValue2.length()) - w_postfix = w_strValue2.substr(pEvent->SelEnd()); - w_strValue2 = w_prefix + w_strChange2 + w_postfix; - w_strValue = w_strValue2.c_str(); - val = w_strValue; - return TRUE; - + cSep = L','; + break; + } + + FX_BOOL bHasSep = (w_strValue2.find(cSep) != -1); + for (std::wstring::iterator it = w_strChange2.begin(); + it != w_strChange2.end(); it++) { + if (*it == cSep) { + if (bHasSep) { + FX_BOOL& bRc = pEvent->Rc(); + bRc = FALSE; + return TRUE; + } + bHasSep = TRUE; + continue; + } + if (*it == L'-') { + if (bHasSign) { + FX_BOOL& bRc = pEvent->Rc(); + bRc = FALSE; + return TRUE; + } + if (it != w_strChange2.begin()) // sign's position is not correct + { + FX_BOOL& bRc = pEvent->Rc(); + bRc = FALSE; + return TRUE; + } + if (pEvent->SelStart() != 0) { + FX_BOOL& bRc = pEvent->Rc(); + bRc = FALSE; + return TRUE; + } + bHasSign = TRUE; + continue; + } + + if (!IsDigit(*it)) { + FX_BOOL& bRc = pEvent->Rc(); + bRc = FALSE; + return TRUE; + } + } + + std::wstring w_prefix = w_strValue2.substr(0, pEvent->SelStart()); + std::wstring w_postfix; + if (pEvent->SelEnd() < (int)w_strValue2.length()) + w_postfix = w_strValue2.substr(pEvent->SelEnd()); + w_strValue2 = w_prefix + w_strChange2 + w_postfix; + w_strValue = w_strValue2.c_str(); + val = w_strValue; + return TRUE; } -//function AFPercent_Format(nDec, sepStyle) -FX_BOOL CJS_PublicMethods::AFPercent_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +// function AFPercent_Format(nDec, sepStyle) +FX_BOOL CJS_PublicMethods::AFPercent_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { #if _FX_OS_ != _FX_ANDROID_ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (params.size() != 2) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - if(!pEvent->m_pValue) - return FALSE; - - CFX_WideString& Value = pEvent->Value(); - CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value)); - if (strValue.IsEmpty()) - return TRUE; - - int iDec = params[0].ToInt(); - if (iDec < 0) - iDec = -iDec; - - int iSepStyle = params[1].ToInt(); - if (iSepStyle < 0 || iSepStyle > 3) - iSepStyle = 0; - - ////////////////////////////////////////////////////// - //for processing decimal places - double dValue = atof(strValue); - dValue *= 100; - if (iDec > 0) - dValue += DOUBLE_CORRECT;//УÕý - - int iDec2; - int iNegative = 0; - strValue = fcvt(dValue, iDec, &iDec2, &iNegative); - if (strValue.IsEmpty()) - { - dValue = 0; - strValue = fcvt(dValue, iDec, &iDec2, &iNegative); - } - - if (iDec2 < 0) - { - for (int iNum = 0; iNum < abs(iDec2); iNum++) - { - strValue = "0" + strValue; - } - iDec2 = 0; - - } - int iMax = strValue.GetLength(); - if (iDec2 > iMax) - { - for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) - { - strValue += "0"; - } - iMax = iDec2+1; - } - /////////////////////////////////////////////////////// - //for processing seperator style - if (iDec2 < iMax) - { - if (iSepStyle == 0 || iSepStyle == 1) - { - strValue.Insert(iDec2, '.'); - iMax++; - } - else if (iSepStyle == 2 || iSepStyle == 3) - { - strValue.Insert(iDec2, ','); - iMax++; - } - - if (iDec2 == 0) - strValue.Insert(iDec2, '0'); - } - if (iSepStyle == 0 || iSepStyle == 2) - { - char cSeperator; - if (iSepStyle == 0) - cSeperator = ','; - else - cSeperator = '.'; - - int iDecPositive,iDecNegative; - iDecPositive = iDec2; - iDecNegative = iDec2; - - for (iDecPositive = iDec2 -3; iDecPositive > 0; iDecPositive -= 3) - { - strValue.Insert(iDecPositive,cSeperator); - iMax++; - } - } - //////////////////////////////////////////////////////////////////// - //negative mark - if (iNegative) - strValue = "-" + strValue; - strValue += "%"; - Value = CFX_WideString::FromLocal(strValue); -#endif + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (params.size() != 2) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + if (!pEvent->m_pValue) + return FALSE; + + CFX_WideString& Value = pEvent->Value(); + CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value)); + if (strValue.IsEmpty()) return TRUE; -} -//AFPercent_Keystroke(nDec, sepStyle) -FX_BOOL CJS_PublicMethods::AFPercent_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return AFNumber_Keystroke(cc,params,vRet,sError); -} - -//function AFDate_FormatEx(cFormat) -FX_BOOL CJS_PublicMethods::AFDate_FormatEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (params.size() != 1) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - if(!pEvent->m_pValue) - return FALSE; - - CFX_WideString& val = pEvent->Value(); - CFX_WideString strValue = val; - if (strValue.IsEmpty()) - return TRUE; - - CFX_WideString sFormat = params[0].ToCFXWideString(); - FX_BOOL bWrongFormat = FALSE; - double dDate = 0.0f; - if(strValue.Find(L"GMT") != -1) - { - //for GMT format time - //such as "Tue Aug 11 14:24:16 GMT+08002009" - dDate = MakeInterDate(strValue); - } + int iDec = params[0].ToInt(); + if (iDec < 0) + iDec = -iDec; + + int iSepStyle = params[1].ToInt(); + if (iSepStyle < 0 || iSepStyle > 3) + iSepStyle = 0; + + ////////////////////////////////////////////////////// + // for processing decimal places + double dValue = atof(strValue); + dValue *= 100; + if (iDec > 0) + dValue += DOUBLE_CORRECT; //УÕý + + int iDec2; + int iNegative = 0; + strValue = fcvt(dValue, iDec, &iDec2, &iNegative); + if (strValue.IsEmpty()) { + dValue = 0; + strValue = fcvt(dValue, iDec, &iDec2, &iNegative); + } + + if (iDec2 < 0) { + for (int iNum = 0; iNum < abs(iDec2); iNum++) { + strValue = "0" + strValue; + } + iDec2 = 0; + } + int iMax = strValue.GetLength(); + if (iDec2 > iMax) { + for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) { + strValue += "0"; + } + iMax = iDec2 + 1; + } + /////////////////////////////////////////////////////// + // for processing seperator style + if (iDec2 < iMax) { + if (iSepStyle == 0 || iSepStyle == 1) { + strValue.Insert(iDec2, '.'); + iMax++; + } else if (iSepStyle == 2 || iSepStyle == 3) { + strValue.Insert(iDec2, ','); + iMax++; + } + + if (iDec2 == 0) + strValue.Insert(iDec2, '0'); + } + if (iSepStyle == 0 || iSepStyle == 2) { + char cSeperator; + if (iSepStyle == 0) + cSeperator = ','; else - { - dDate = MakeRegularDate(strValue,sFormat,bWrongFormat); - } - - if (JS_PortIsNan(dDate)) - { - CFX_WideString swMsg; - swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(), sFormat.c_str()); - Alert(pContext, swMsg.c_str()); - return FALSE; - } - - val = MakeFormatDate(dDate,sFormat); - return TRUE; + cSeperator = '.'; + + int iDecPositive, iDecNegative; + iDecPositive = iDec2; + iDecNegative = iDec2; + + for (iDecPositive = iDec2 - 3; iDecPositive > 0; iDecPositive -= 3) { + strValue.Insert(iDecPositive, cSeperator); + iMax++; + } + } + //////////////////////////////////////////////////////////////////// + // negative mark + if (iNegative) + strValue = "-" + strValue; + strValue += "%"; + Value = CFX_WideString::FromLocal(strValue); +#endif + return TRUE; +} +// AFPercent_Keystroke(nDec, sepStyle) +FX_BOOL CJS_PublicMethods::AFPercent_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return AFNumber_Keystroke(cc, params, vRet, sError); } -double CJS_PublicMethods::MakeInterDate(CFX_WideString strValue) -{ - int nHour; - int nMin; - int nSec; - int nYear; - int nMonth; - int nDay; - - CFX_WideStringArray wsArray; - CFX_WideString sMonth = L""; - CFX_WideString sTemp = L""; - int nSize = strValue.GetLength(); - - for(int i = 0; i < nSize; i++) - { - FX_WCHAR c = strValue.GetAt(i); - if(c == L' ' || c == L':') - { - wsArray.Add(sTemp); - sTemp = L""; - continue; - } +// function AFDate_FormatEx(cFormat) +FX_BOOL CJS_PublicMethods::AFDate_FormatEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (params.size() != 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + if (!pEvent->m_pValue) + return FALSE; + + CFX_WideString& val = pEvent->Value(); + CFX_WideString strValue = val; + if (strValue.IsEmpty()) + return TRUE; - sTemp += c; - } + CFX_WideString sFormat = params[0].ToCFXWideString(); + FX_BOOL bWrongFormat = FALSE; + double dDate = 0.0f; - wsArray.Add(sTemp); - if(wsArray.GetSize() != 8)return 0; - - sTemp = wsArray[1]; - if(sTemp.Compare(L"Jan") == 0) nMonth = 1; - if(sTemp.Compare(L"Feb") == 0) nMonth = 2; - if(sTemp.Compare(L"Mar") == 0) nMonth = 3; - if(sTemp.Compare(L"Apr") == 0) nMonth = 4; - if(sTemp.Compare(L"May") == 0) nMonth = 5; - if(sTemp.Compare(L"Jun") == 0) nMonth = 6; - if(sTemp.Compare(L"Jul") == 0) nMonth = 7; - if(sTemp.Compare(L"Aug") == 0) nMonth = 8; - if(sTemp.Compare(L"Sep") == 0) nMonth = 9; - if(sTemp.Compare(L"Oct") == 0) nMonth = 10; - if(sTemp.Compare(L"Nov") == 0) nMonth = 11; - if(sTemp.Compare(L"Dec") == 0) nMonth = 12; - - nDay = (int)ParseStringToNumber(wsArray[2].c_str()); - nHour = (int)ParseStringToNumber(wsArray[3].c_str()); - nMin = (int)ParseStringToNumber(wsArray[4].c_str()); - nSec = (int)ParseStringToNumber(wsArray[5].c_str()); - nYear = (int)ParseStringToNumber(wsArray[7].c_str()); - - double dRet = JS_MakeDate(JS_MakeDay(nYear,nMonth - 1,nDay),JS_MakeTime(nHour, nMin, nSec, 0)); - - if (JS_PortIsNan(dRet)) - { - dRet = JS_DateParse(strValue.c_str()); - } + if (strValue.Find(L"GMT") != -1) { + // for GMT format time + // such as "Tue Aug 11 14:24:16 GMT+08002009" + dDate = MakeInterDate(strValue); + } else { + dDate = MakeRegularDate(strValue, sFormat, bWrongFormat); + } - return dRet; + if (JS_PortIsNan(dDate)) { + CFX_WideString swMsg; + swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(), + sFormat.c_str()); + Alert(pContext, swMsg.c_str()); + return FALSE; + } + + val = MakeFormatDate(dDate, sFormat); + return TRUE; } -//AFDate_KeystrokeEx(cFormat) -FX_BOOL CJS_PublicMethods::AFDate_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (params.size() != 1) - { - sError = L"AFDate_KeystrokeEx's parameters' size r not correct"; - return FALSE; - } - - if (pEvent->WillCommit()) - { - if(!pEvent->m_pValue) - return FALSE; - CFX_WideString strValue = pEvent->Value(); - if (strValue.IsEmpty()) - return TRUE; - - CFX_WideString sFormat = params[0].ToCFXWideString(); - FX_BOOL bWrongFormat = FALSE; - double dRet = MakeRegularDate(strValue,sFormat,bWrongFormat); - if (bWrongFormat || JS_PortIsNan(dRet)) - { - CFX_WideString swMsg; - swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(), sFormat.c_str()); - Alert(pContext, swMsg.c_str()); - pEvent->Rc() = FALSE; - return TRUE; - } - } - return TRUE; +double CJS_PublicMethods::MakeInterDate(CFX_WideString strValue) { + int nHour; + int nMin; + int nSec; + int nYear; + int nMonth; + int nDay; + + CFX_WideStringArray wsArray; + CFX_WideString sMonth = L""; + CFX_WideString sTemp = L""; + int nSize = strValue.GetLength(); + + for (int i = 0; i < nSize; i++) { + FX_WCHAR c = strValue.GetAt(i); + if (c == L' ' || c == L':') { + wsArray.Add(sTemp); + sTemp = L""; + continue; + } + + sTemp += c; + } + + wsArray.Add(sTemp); + if (wsArray.GetSize() != 8) + return 0; + + sTemp = wsArray[1]; + if (sTemp.Compare(L"Jan") == 0) + nMonth = 1; + if (sTemp.Compare(L"Feb") == 0) + nMonth = 2; + if (sTemp.Compare(L"Mar") == 0) + nMonth = 3; + if (sTemp.Compare(L"Apr") == 0) + nMonth = 4; + if (sTemp.Compare(L"May") == 0) + nMonth = 5; + if (sTemp.Compare(L"Jun") == 0) + nMonth = 6; + if (sTemp.Compare(L"Jul") == 0) + nMonth = 7; + if (sTemp.Compare(L"Aug") == 0) + nMonth = 8; + if (sTemp.Compare(L"Sep") == 0) + nMonth = 9; + if (sTemp.Compare(L"Oct") == 0) + nMonth = 10; + if (sTemp.Compare(L"Nov") == 0) + nMonth = 11; + if (sTemp.Compare(L"Dec") == 0) + nMonth = 12; + + nDay = (int)ParseStringToNumber(wsArray[2].c_str()); + nHour = (int)ParseStringToNumber(wsArray[3].c_str()); + nMin = (int)ParseStringToNumber(wsArray[4].c_str()); + nSec = (int)ParseStringToNumber(wsArray[5].c_str()); + nYear = (int)ParseStringToNumber(wsArray[7].c_str()); + + double dRet = JS_MakeDate(JS_MakeDay(nYear, nMonth - 1, nDay), + JS_MakeTime(nHour, nMin, nSec, 0)); + + if (JS_PortIsNan(dRet)) { + dRet = JS_DateParse(strValue.c_str()); + } + + return dRet; } -FX_BOOL CJS_PublicMethods::AFDate_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = ::GetIsolate(cc); - - if (params.size() != 1) - { - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } +// AFDate_KeystrokeEx(cFormat) +FX_BOOL CJS_PublicMethods::AFDate_KeystrokeEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (params.size() != 1) { + sError = L"AFDate_KeystrokeEx's parameters' size r not correct"; + return FALSE; + } + + if (pEvent->WillCommit()) { + if (!pEvent->m_pValue) + return FALSE; + CFX_WideString strValue = pEvent->Value(); + if (strValue.IsEmpty()) + return TRUE; - int iIndex = params[0].ToInt(); - const FX_WCHAR* cFormats[] = {L"m/d", L"m/d/yy", L"mm/dd/yy", L"mm/yy", L"d-mmm", L"d-mmm-yy", L"dd-mmm-yy", - L"yy-mm-dd", L"mmm-yy", L"mmmm-yy", L"mmm d, yyyy", L"mmmm d, yyyy", - L"m/d/yy h:MM tt", L"m/d/yy HH:MM" }; - - ASSERT(iIndex < FX_ArraySize(cFormats)); - - if (iIndex < 0) - iIndex = 0; - if (iIndex >= FX_ArraySize(cFormats)) - iIndex = 0; - CJS_Parameters newParams; - CJS_Value val(isolate,cFormats[iIndex]); - newParams.push_back(val); - return AFDate_FormatEx(cc,newParams,vRet,sError); + CFX_WideString sFormat = params[0].ToCFXWideString(); + FX_BOOL bWrongFormat = FALSE; + double dRet = MakeRegularDate(strValue, sFormat, bWrongFormat); + if (bWrongFormat || JS_PortIsNan(dRet)) { + CFX_WideString swMsg; + swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(), + sFormat.c_str()); + Alert(pContext, swMsg.c_str()); + pEvent->Rc() = FALSE; + return TRUE; + } + } + return TRUE; } -//AFDate_KeystrokeEx(cFormat) -FX_BOOL CJS_PublicMethods::AFDate_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = ::GetIsolate(cc); +FX_BOOL CJS_PublicMethods::AFDate_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = ::GetIsolate(cc); - if (params.size() != 1) - { - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } + if (params.size() != 1) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - int iIndex = params[0].ToInt(); - const FX_WCHAR* cFormats[] = {L"m/d", L"m/d/yy", L"mm/dd/yy", L"mm/yy", L"d-mmm", L"d-mmm-yy", L"dd-mmm-yy", - L"yy-mm-dd", L"mmm-yy", L"mmmm-yy", L"mmm d, yyyy", L"mmmm d, yyyy", - L"m/d/yy h:MM tt", L"m/d/yy HH:MM" }; - - ASSERT(iIndex= FX_ArraySize(cFormats)) - iIndex = 0; - CJS_Parameters newParams; - CJS_Value val(isolate,cFormats[iIndex]); - newParams.push_back(val); - return AFDate_KeystrokeEx(cc,newParams,vRet,sError); + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + int iIndex = params[0].ToInt(); + const FX_WCHAR* cFormats[] = {L"m/d", + L"m/d/yy", + L"mm/dd/yy", + L"mm/yy", + L"d-mmm", + L"d-mmm-yy", + L"dd-mmm-yy", + L"yy-mm-dd", + L"mmm-yy", + L"mmmm-yy", + L"mmm d, yyyy", + L"mmmm d, yyyy", + L"m/d/yy h:MM tt", + L"m/d/yy HH:MM"}; + + ASSERT(iIndex < FX_ArraySize(cFormats)); + + if (iIndex < 0) + iIndex = 0; + if (iIndex >= FX_ArraySize(cFormats)) + iIndex = 0; + CJS_Parameters newParams; + CJS_Value val(isolate, cFormats[iIndex]); + newParams.push_back(val); + return AFDate_FormatEx(cc, newParams, vRet, sError); } -//function AFTime_Format(ptf) -FX_BOOL CJS_PublicMethods::AFTime_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = ::GetIsolate(cc); +// AFDate_KeystrokeEx(cFormat) +FX_BOOL CJS_PublicMethods::AFDate_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = ::GetIsolate(cc); - if (params.size() != 1) - { - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - - int iIndex = params[0].ToInt(); - const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss", L"h:MM:ss tt"}; - - ASSERT(iIndex= FX_ArraySize(cFormats)) - iIndex = 0; - CJS_Parameters newParams; - CJS_Value val(isolate,cFormats[iIndex]); - newParams.push_back(val); - return AFDate_FormatEx(cc,newParams,vRet,sError); + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + int iIndex = params[0].ToInt(); + const FX_WCHAR* cFormats[] = {L"m/d", + L"m/d/yy", + L"mm/dd/yy", + L"mm/yy", + L"d-mmm", + L"d-mmm-yy", + L"dd-mmm-yy", + L"yy-mm-dd", + L"mmm-yy", + L"mmmm-yy", + L"mmm d, yyyy", + L"mmmm d, yyyy", + L"m/d/yy h:MM tt", + L"m/d/yy HH:MM"}; + + ASSERT(iIndex < FX_ArraySize(cFormats)); + + if (iIndex < 0) + iIndex = 0; + if (iIndex >= FX_ArraySize(cFormats)) + iIndex = 0; + CJS_Parameters newParams; + CJS_Value val(isolate, cFormats[iIndex]); + newParams.push_back(val); + return AFDate_KeystrokeEx(cc, newParams, vRet, sError); } -FX_BOOL CJS_PublicMethods::AFTime_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = ::GetIsolate(cc); - if (params.size() != 1) - { - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - - int iIndex = params[0].ToInt(); - const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss", L"h:MM:ss tt"}; +// function AFTime_Format(ptf) +FX_BOOL CJS_PublicMethods::AFTime_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = ::GetIsolate(cc); - ASSERT(iIndex= FX_ArraySize(cFormats)) + iIndex = 0; + CJS_Parameters newParams; + CJS_Value val(isolate, cFormats[iIndex]); + newParams.push_back(val); + return AFDate_FormatEx(cc, newParams, vRet, sError); +} - if (iIndex < 0) - iIndex = 0; - if (iIndex >= FX_ArraySize(cFormats)) - iIndex = 0; - CJS_Parameters newParams; - CJS_Value val(isolate,cFormats[iIndex]); - newParams.push_back(val); - return AFDate_KeystrokeEx(cc,newParams,vRet,sError); +FX_BOOL CJS_PublicMethods::AFTime_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = ::GetIsolate(cc); + if (params.size() != 1) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + int iIndex = params[0].ToInt(); + const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss", + L"h:MM:ss tt"}; + + ASSERT(iIndex < FX_ArraySize(cFormats)); + + if (iIndex < 0) + iIndex = 0; + if (iIndex >= FX_ArraySize(cFormats)) + iIndex = 0; + CJS_Parameters newParams; + CJS_Value val(isolate, cFormats[iIndex]); + newParams.push_back(val); + return AFDate_KeystrokeEx(cc, newParams, vRet, sError); } -FX_BOOL CJS_PublicMethods::AFTime_FormatEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return AFDate_FormatEx(cc,params,vRet,sError); +FX_BOOL CJS_PublicMethods::AFTime_FormatEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return AFDate_FormatEx(cc, params, vRet, sError); } -FX_BOOL CJS_PublicMethods::AFTime_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return AFDate_KeystrokeEx(cc,params,vRet,sError); +FX_BOOL CJS_PublicMethods::AFTime_KeystrokeEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return AFDate_KeystrokeEx(cc, params, vRet, sError); } -//function AFSpecial_Format(psf) -FX_BOOL CJS_PublicMethods::AFSpecial_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); +// function AFSpecial_Format(psf) +FX_BOOL CJS_PublicMethods::AFSpecial_Format(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - if (params.size() != 1) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } + if (params.size() != 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - std::string cFormat; - int iIndex = params[0].ToInt(); + std::string cFormat; + int iIndex = params[0].ToInt(); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); - if(!pEvent->m_pValue) - return FALSE; - CFX_WideString& Value = pEvent->Value(); - std::string strSrc = CFX_ByteString::FromUnicode(Value).c_str(); + if (!pEvent->m_pValue) + return FALSE; + CFX_WideString& Value = pEvent->Value(); + std::string strSrc = CFX_ByteString::FromUnicode(Value).c_str(); - switch (iIndex) - { + switch (iIndex) { case 0: - cFormat = "99999"; - break; + cFormat = "99999"; + break; case 1: - cFormat = "99999-9999"; - break; - case 2: - { - std::string NumberStr; - util::printx("9999999999", strSrc,NumberStr); - if (NumberStr.length() >= 10 ) - cFormat = "(999) 999-9999"; - else - cFormat = "999-9999"; - break; - } - case 3: - cFormat = "999-99-9999"; - break; + cFormat = "99999-9999"; + break; + case 2: { + std::string NumberStr; + util::printx("9999999999", strSrc, NumberStr); + if (NumberStr.length() >= 10) + cFormat = "(999) 999-9999"; + else + cFormat = "999-9999"; + break; } - - std::string strDes; - util::printx(cFormat,strSrc,strDes); - Value = CFX_WideString::FromLocal(strDes.c_str()); - return TRUE; + case 3: + cFormat = "999-99-9999"; + break; + } + + std::string strDes; + util::printx(cFormat, strSrc, strDes); + Value = CFX_WideString::FromLocal(strDes.c_str()); + return TRUE; } +// function AFSpecial_KeystrokeEx(mask) +FX_BOOL CJS_PublicMethods::AFSpecial_KeystrokeEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); -//function AFSpecial_KeystrokeEx(mask) -FX_BOOL CJS_PublicMethods::AFSpecial_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); - ASSERT(pEvent != NULL); + if (params.size() < 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - if (params.size() < 1) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - - if(!pEvent->m_pValue) - return FALSE; - CFX_WideString& valEvent = pEvent->Value(); - - CFX_WideString wstrMask = params[0].ToCFXWideString(); - if (wstrMask.IsEmpty()) - return TRUE; - - std::wstring wstrValue = valEvent.c_str(); - - if (pEvent->WillCommit()) - { - if (wstrValue.empty()) - return TRUE; - int iIndexMask = 0; - for (std::wstring::iterator it = wstrValue.begin(); it != wstrValue.end(); it++) - { - wchar_t w_Value = *it; - if (!maskSatisfied(w_Value,wstrMask[iIndexMask])) - break; - iIndexMask++; - } - - if (iIndexMask != wstrMask.GetLength() || (iIndexMask != wstrValue.size() && wstrMask.GetLength() != 0)) - { - Alert(pContext, JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE).c_str()); - pEvent->Rc() = FALSE; - } - return TRUE; - } + if (!pEvent->m_pValue) + return FALSE; + CFX_WideString& valEvent = pEvent->Value(); - CFX_WideString &wideChange = pEvent->Change(); - std::wstring wChange = wideChange.c_str(); - if (wChange.empty()) - return TRUE; + CFX_WideString wstrMask = params[0].ToCFXWideString(); + if (wstrMask.IsEmpty()) + return TRUE; - int iIndexMask = pEvent->SelStart(); + std::wstring wstrValue = valEvent.c_str(); - if (wstrValue.length() - (pEvent->SelEnd()-pEvent->SelStart()) + wChange.length() > (FX_DWORD)wstrMask.GetLength()) - { - Alert(pContext, JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str()); - pEvent->Rc() = FALSE; - return TRUE; + if (pEvent->WillCommit()) { + if (wstrValue.empty()) + return TRUE; + int iIndexMask = 0; + for (std::wstring::iterator it = wstrValue.begin(); it != wstrValue.end(); + it++) { + wchar_t w_Value = *it; + if (!maskSatisfied(w_Value, wstrMask[iIndexMask])) + break; + iIndexMask++; } - if (iIndexMask >= wstrMask.GetLength() && (!wChange.empty())) - { - Alert(pContext, JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str()); - pEvent->Rc() = FALSE; - return TRUE; - } - - for (std::wstring::iterator it = wChange.begin(); it != wChange.end(); it++) - { - if (iIndexMask >= wstrMask.GetLength()) - { - Alert(pContext, JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str()); - pEvent->Rc() = FALSE; - return TRUE; - } - wchar_t w_Mask = wstrMask[iIndexMask]; - if (!isReservedMaskChar(w_Mask)) - { - *it = w_Mask; - } - wchar_t w_Change = *it; - if (!maskSatisfied(w_Change,w_Mask)) - { - pEvent->Rc() = FALSE; - return TRUE; - } - iIndexMask++; + if (iIndexMask != wstrMask.GetLength() || + (iIndexMask != wstrValue.size() && wstrMask.GetLength() != 0)) { + Alert( + pContext, + JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE).c_str()); + pEvent->Rc() = FALSE; } + return TRUE; + } - wideChange = wChange.c_str(); + CFX_WideString& wideChange = pEvent->Change(); + std::wstring wChange = wideChange.c_str(); + if (wChange.empty()) return TRUE; -} + int iIndexMask = pEvent->SelStart(); -//function AFSpecial_Keystroke(psf) -FX_BOOL CJS_PublicMethods::AFSpecial_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = ::GetIsolate(cc); + if (wstrValue.length() - (pEvent->SelEnd() - pEvent->SelStart()) + + wChange.length() > + (FX_DWORD)wstrMask.GetLength()) { + Alert(pContext, + JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str()); + pEvent->Rc() = FALSE; + return TRUE; + } - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); + if (iIndexMask >= wstrMask.GetLength() && (!wChange.empty())) { + Alert(pContext, + JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str()); + pEvent->Rc() = FALSE; + return TRUE; + } - if (params.size() != 1) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; + for (std::wstring::iterator it = wChange.begin(); it != wChange.end(); it++) { + if (iIndexMask >= wstrMask.GetLength()) { + Alert(pContext, + JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str()); + pEvent->Rc() = FALSE; + return TRUE; } + wchar_t w_Mask = wstrMask[iIndexMask]; + if (!isReservedMaskChar(w_Mask)) { + *it = w_Mask; + } + wchar_t w_Change = *it; + if (!maskSatisfied(w_Change, w_Mask)) { + pEvent->Rc() = FALSE; + return TRUE; + } + iIndexMask++; + } - std::string cFormat; - int iIndex = params[0].ToInt(); - - if(!pEvent->m_pValue) - return FALSE; - //CJS_Value val = pEvent->Value(); - CFX_WideString& val = pEvent->Value(); - std::string strSrc = CFX_ByteString::FromUnicode(val).c_str(); - std::wstring wstrChange = pEvent->Change().c_str(); + wideChange = wChange.c_str(); + return TRUE; +} - switch (iIndex) - { +// function AFSpecial_Keystroke(psf) +FX_BOOL CJS_PublicMethods::AFSpecial_Keystroke(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = ::GetIsolate(cc); + + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (params.size() != 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + std::string cFormat; + int iIndex = params[0].ToInt(); + + if (!pEvent->m_pValue) + return FALSE; + // CJS_Value val = pEvent->Value(); + CFX_WideString& val = pEvent->Value(); + std::string strSrc = CFX_ByteString::FromUnicode(val).c_str(); + std::wstring wstrChange = pEvent->Change().c_str(); + + switch (iIndex) { case 0: - cFormat = "99999"; - break; + cFormat = "99999"; + break; case 1: - //cFormat = "99999-9999"; - cFormat = "999999999"; - break; - case 2: - { - std::string NumberStr; - util::printx("9999999999", strSrc,NumberStr); - if (strSrc.length() + wstrChange.length() > 7 ) - //cFormat = "(999) 999-9999"; - cFormat = "9999999999"; - else - //cFormat = "999-9999"; - cFormat = "9999999"; - break; - } - case 3: - //cFormat = "999-99-9999"; - cFormat = "999999999"; - break; + // cFormat = "99999-9999"; + cFormat = "999999999"; + break; + case 2: { + std::string NumberStr; + util::printx("9999999999", strSrc, NumberStr); + if (strSrc.length() + wstrChange.length() > 7) + // cFormat = "(999) 999-9999"; + cFormat = "9999999999"; + else + // cFormat = "999-9999"; + cFormat = "9999999"; + break; } + case 3: + // cFormat = "999-99-9999"; + cFormat = "999999999"; + break; + } - CJS_Parameters params2; - CJS_Value vMask(isolate, cFormat.c_str()); - params2.push_back(vMask); + CJS_Parameters params2; + CJS_Value vMask(isolate, cFormat.c_str()); + params2.push_back(vMask); - return AFSpecial_KeystrokeEx(cc,params2,vRet,sError); + return AFSpecial_KeystrokeEx(cc, params2, vRet, sError); } -FX_BOOL CJS_PublicMethods::AFMergeChange(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEventHandler = pContext->GetEventHandler(); - ASSERT(pEventHandler != NULL); +FX_BOOL CJS_PublicMethods::AFMergeChange(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEventHandler = pContext->GetEventHandler(); + ASSERT(pEventHandler != NULL); + + if (params.size() != 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + CFX_WideString swValue; + if (pEventHandler->m_pValue != NULL) + swValue = pEventHandler->Value(); + + if (pEventHandler->WillCommit()) { + vRet = swValue.c_str(); + return TRUE; + } - if (params.size() != 1) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } + CFX_WideString prefix, postfix; - CFX_WideString swValue; - if (pEventHandler->m_pValue != NULL) - swValue = pEventHandler->Value(); + if (pEventHandler->SelStart() >= 0) + prefix = swValue.Mid(0, pEventHandler->SelStart()); + else + prefix = L""; - if (pEventHandler->WillCommit()) - { - vRet = swValue.c_str(); - return TRUE; - } + if (pEventHandler->SelEnd() >= 0 && + pEventHandler->SelEnd() <= swValue.GetLength()) + postfix = swValue.Mid(pEventHandler->SelEnd(), + swValue.GetLength() - pEventHandler->SelEnd()); + else + postfix = L""; - CFX_WideString prefix,postfix; + vRet = (prefix + pEventHandler->Change() + postfix).c_str(); - if (pEventHandler->SelStart() >= 0) - prefix = swValue.Mid(0,pEventHandler->SelStart()); - else - prefix = L""; + return TRUE; +} +FX_BOOL CJS_PublicMethods::AFParseDateEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - if (pEventHandler->SelEnd() >= 0 && pEventHandler->SelEnd() <= swValue.GetLength()) - postfix = swValue.Mid(pEventHandler->SelEnd(), swValue.GetLength() - pEventHandler->SelEnd()); - else postfix = L""; + if (params.size() != 2) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - vRet = (prefix + pEventHandler->Change() + postfix).c_str(); + CFX_WideString sValue = params[0].ToCFXWideString(); + CFX_WideString sFormat = params[1].ToCFXWideString(); - return TRUE; + FX_BOOL bWrongFormat = FALSE; + double dDate = MakeRegularDate(sValue, sFormat, bWrongFormat); + + if (JS_PortIsNan(dDate)) { + CFX_WideString swMsg; + swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(), + sFormat.c_str()); + Alert((CJS_Context*)cc, swMsg.c_str()); + return FALSE; + } + + vRet = dDate; + return TRUE; } -FX_BOOL CJS_PublicMethods::AFParseDateEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context *)cc; +FX_BOOL CJS_PublicMethods::AFSimple(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + if (params.size() != 3) { + CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); - if (params.size() != 2) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - - CFX_WideString sValue = params[0].ToCFXWideString(); - CFX_WideString sFormat = params[1].ToCFXWideString(); - - FX_BOOL bWrongFormat = FALSE; - double dDate = MakeRegularDate(sValue,sFormat,bWrongFormat); + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - if (JS_PortIsNan(dDate)) - { - CFX_WideString swMsg; - swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(), sFormat.c_str()); - Alert((CJS_Context *)cc, swMsg.c_str()); - return FALSE; - } - - vRet = dDate; - return TRUE; + vRet = (double)AF_Simple(params[0].ToCFXWideString().c_str(), + params[1].ToDouble(), params[2].ToDouble()); + return TRUE; } -FX_BOOL CJS_PublicMethods::AFSimple(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - if (params.size() != 3) - { - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } +FX_BOOL CJS_PublicMethods::AFMakeNumber(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + if (params.size() != 1) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - vRet = (double)AF_Simple(params[0].ToCFXWideString().c_str(), params[1].ToDouble(), params[2].ToDouble()); - return TRUE; + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + vRet = ParseStringToNumber(params[0].ToCFXWideString().c_str()); + return TRUE; } -FX_BOOL CJS_PublicMethods::AFMakeNumber(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - if (params.size() != 1) - { - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); +FX_BOOL CJS_PublicMethods::AFSimple_Calculate(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = ::GetIsolate(cc); - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - vRet = ParseStringToNumber(params[0].ToCFXWideString().c_str()); - return TRUE; -} + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); -FX_BOOL CJS_PublicMethods::AFSimple_Calculate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = ::GetIsolate(cc); + if (params.size() != 2) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); + CJS_Value params1 = params[1]; - if (params.size() != 2) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } + if (!params1.IsArrayObject() && params1.GetType() != VT_string) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - CJS_Value params1 = params[1]; + CPDFSDK_Document* pReaderDoc = pContext->GetReaderDocument(); + ASSERT(pReaderDoc != NULL); - if (!params1.IsArrayObject() && params1.GetType() != VT_string) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } + CPDFSDK_InterForm* pReaderInterForm = pReaderDoc->GetInterForm(); + ASSERT(pReaderInterForm != NULL); - CPDFSDK_Document* pReaderDoc = pContext->GetReaderDocument(); - ASSERT(pReaderDoc != NULL); + CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm(); + ASSERT(pInterForm != NULL); - CPDFSDK_InterForm* pReaderInterForm = pReaderDoc->GetInterForm(); - ASSERT(pReaderInterForm != NULL); + double dValue; + CFX_WideString sFunction = params[0].ToCFXWideString(); + if (wcscmp(sFunction.c_str(), L"PRD") == 0) + dValue = 1.0; + else + dValue = 0.0; - CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm(); - ASSERT(pInterForm != NULL); + CJS_Array FieldNameArray = AF_MakeArrayFromList(isolate, params1); - double dValue; - CFX_WideString sFunction = params[0].ToCFXWideString(); - if (wcscmp(sFunction.c_str(), L"PRD") == 0) - dValue = 1.0; - else - dValue = 0.0; - - CJS_Array FieldNameArray = AF_MakeArrayFromList(isolate,params1); - - int nFieldsCount = 0; - - for (int i=0,isz=FieldNameArray.GetLength(); iCountFields(wsFieldName); jGetField(j, wsFieldName)) - { - double dTemp = 0.0; - - switch (pFormField->GetFieldType()) - { - case FIELDTYPE_TEXTFIELD: - case FIELDTYPE_COMBOBOX: - { - dTemp = ParseStringToNumber(pFormField->GetValue().c_str()); - break; - } - case FIELDTYPE_PUSHBUTTON: - { - dTemp = 0.0; - break; - } - case FIELDTYPE_CHECKBOX: - case FIELDTYPE_RADIOBUTTON: - { - dTemp = 0.0; - for (int c=0,csz=pFormField->CountControls(); cGetControl(c)) - { - if (pFormCtrl->IsChecked()) - { - dTemp += ParseStringToNumber(pFormCtrl->GetExportValue().c_str()); - break; - } - else - continue; - } - } - break; - } - case FIELDTYPE_LISTBOX: - { - dTemp = 0.0; - if (pFormField->CountSelectedItems() > 1) - break; - else - { - dTemp = ParseStringToNumber(pFormField->GetValue().c_str()); - break; - } - } - default: - break; - } + int nFieldsCount = 0; - if (i == 0 && j == 0 && (wcscmp(sFunction.c_str(), L"MIN") == 0 || wcscmp(sFunction.c_str(), L"MAX") == 0)) - dValue = dTemp; + for (int i = 0, isz = FieldNameArray.GetLength(); i < isz; i++) { + CJS_Value jsValue(isolate); + FieldNameArray.GetElement(i, jsValue); + CFX_WideString wsFieldName = jsValue.ToCFXWideString(); - dValue = AF_Simple(sFunction.c_str(), dValue, dTemp); + for (int j = 0, jsz = pInterForm->CountFields(wsFieldName); j < jsz; j++) { + if (CPDF_FormField* pFormField = pInterForm->GetField(j, wsFieldName)) { + double dTemp = 0.0; - nFieldsCount++; + switch (pFormField->GetFieldType()) { + case FIELDTYPE_TEXTFIELD: + case FIELDTYPE_COMBOBOX: { + dTemp = ParseStringToNumber(pFormField->GetValue().c_str()); + break; + } + case FIELDTYPE_PUSHBUTTON: { + dTemp = 0.0; + break; + } + case FIELDTYPE_CHECKBOX: + case FIELDTYPE_RADIOBUTTON: { + dTemp = 0.0; + for (int c = 0, csz = pFormField->CountControls(); c < csz; c++) { + if (CPDF_FormControl* pFormCtrl = pFormField->GetControl(c)) { + if (pFormCtrl->IsChecked()) { + dTemp += + ParseStringToNumber(pFormCtrl->GetExportValue().c_str()); + break; + } else + continue; + } + } + break; + } + case FIELDTYPE_LISTBOX: { + dTemp = 0.0; + if (pFormField->CountSelectedItems() > 1) + break; + else { + dTemp = ParseStringToNumber(pFormField->GetValue().c_str()); + break; } + } + default: + break; } + + if (i == 0 && j == 0 && (wcscmp(sFunction.c_str(), L"MIN") == 0 || + wcscmp(sFunction.c_str(), L"MAX") == 0)) + dValue = dTemp; + + dValue = AF_Simple(sFunction.c_str(), dValue, dTemp); + + nFieldsCount++; + } } + } - if (wcscmp(sFunction.c_str(), L"AVG") == 0 && nFieldsCount > 0) - dValue /= nFieldsCount; + if (wcscmp(sFunction.c_str(), L"AVG") == 0 && nFieldsCount > 0) + dValue /= nFieldsCount; - dValue = (double)floor(dValue * FXSYS_pow((double)10,(double)6) + 0.49) / FXSYS_pow((double)10,(double)6); - CJS_Value jsValue(isolate,dValue); - if((CJS_EventHandler*)pContext->GetEventHandler()->m_pValue) - ((CJS_EventHandler*)pContext->GetEventHandler())->Value() = jsValue.ToCFXWideString(); + dValue = (double)floor(dValue * FXSYS_pow((double)10, (double)6) + 0.49) / + FXSYS_pow((double)10, (double)6); + CJS_Value jsValue(isolate, dValue); + if ((CJS_EventHandler*)pContext->GetEventHandler()->m_pValue) + ((CJS_EventHandler*)pContext->GetEventHandler())->Value() = + jsValue.ToCFXWideString(); - return TRUE; + return TRUE; } /* This function validates the current event to ensure that its value is ** within the specified range. */ -FX_BOOL CJS_PublicMethods::AFRange_Validate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (params.size() != 4) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - - if(!pEvent->m_pValue) - return FALSE; - if (pEvent->Value().IsEmpty() ) - return TRUE; - double dEentValue = atof(CFX_ByteString::FromUnicode(pEvent->Value())); - FX_BOOL bGreaterThan = params[0].ToBool(); - double dGreaterThan = params[1].ToDouble(); - FX_BOOL bLessThan = params[2].ToBool(); - double dLessThan = params[3].ToDouble(); - CFX_WideString swMsg; - - if (bGreaterThan && bLessThan) - { - if (dEentValue < dGreaterThan || dEentValue > dLessThan) - swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE1).c_str(), - params[1].ToCFXWideString().c_str(), - params[3].ToCFXWideString().c_str()); - } - else if (bGreaterThan) - { - if (dEentValue < dGreaterThan) - swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE2).c_str(), - params[1].ToCFXWideString().c_str()); - } - else if (bLessThan) - { - if (dEentValue > dLessThan) - swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE3).c_str(), - params[3].ToCFXWideString().c_str()); - } - - if (!swMsg.IsEmpty()) - { - Alert(pContext, swMsg.c_str()); - pEvent->Rc() = FALSE; - } +FX_BOOL CJS_PublicMethods::AFRange_Validate(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (params.size() != 4) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + if (!pEvent->m_pValue) + return FALSE; + if (pEvent->Value().IsEmpty()) return TRUE; + double dEentValue = atof(CFX_ByteString::FromUnicode(pEvent->Value())); + FX_BOOL bGreaterThan = params[0].ToBool(); + double dGreaterThan = params[1].ToDouble(); + FX_BOOL bLessThan = params[2].ToBool(); + double dLessThan = params[3].ToDouble(); + CFX_WideString swMsg; + + if (bGreaterThan && bLessThan) { + if (dEentValue < dGreaterThan || dEentValue > dLessThan) + swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE1).c_str(), + params[1].ToCFXWideString().c_str(), + params[3].ToCFXWideString().c_str()); + } else if (bGreaterThan) { + if (dEentValue < dGreaterThan) + swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE2).c_str(), + params[1].ToCFXWideString().c_str()); + } else if (bLessThan) { + if (dEentValue > dLessThan) + swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE3).c_str(), + params[3].ToCFXWideString().c_str()); + } + + if (!swMsg.IsEmpty()) { + Alert(pContext, swMsg.c_str()); + pEvent->Rc() = FALSE; + } + return TRUE; } -FX_BOOL CJS_PublicMethods::AFExtractNums(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = ::GetIsolate(cc); - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - - if (params.size() != 1) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - - CJS_Array nums(isolate); - - CFX_WideString str = params[0].ToCFXWideString(); - CFX_WideString sPart; - - if (str.GetAt(0) == L'.' || str.GetAt(0) == L',') - str = L"0" + str; - - int nIndex = 0; - for (int i=0, sz=str.GetLength(); i 0) - { - nums.SetElement(nIndex,CJS_Value(isolate,sPart.c_str())); - sPart = L""; - nIndex ++; - } - } +FX_BOOL CJS_PublicMethods::AFExtractNums(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = ::GetIsolate(cc); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + + if (params.size() != 1) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + CJS_Array nums(isolate); + + CFX_WideString str = params[0].ToCFXWideString(); + CFX_WideString sPart; + + if (str.GetAt(0) == L'.' || str.GetAt(0) == L',') + str = L"0" + str; + + int nIndex = 0; + for (int i = 0, sz = str.GetLength(); i < sz; i++) { + FX_WCHAR wc = str.GetAt(i); + if (IsDigit((wchar_t)wc)) { + sPart += wc; + } else { + if (sPart.GetLength() > 0) { + nums.SetElement(nIndex, CJS_Value(isolate, sPart.c_str())); + sPart = L""; + nIndex++; + } } + } - if (sPart.GetLength() > 0) - { - nums.SetElement(nIndex,CJS_Value(isolate,sPart.c_str())); - } + if (sPart.GetLength() > 0) { + nums.SetElement(nIndex, CJS_Value(isolate, sPart.c_str())); + } - if (nums.GetLength() > 0) - vRet = nums; - else - vRet.SetNull(); + if (nums.GetLength() > 0) + vRet = nums; + else + vRet.SetNull(); - return TRUE; + return TRUE; } diff --git a/fpdfsdk/src/javascript/app.cpp b/fpdfsdk/src/javascript/app.cpp index c5139696c1..ed1a7ca481 100644 --- a/fpdfsdk/src/javascript/app.cpp +++ b/fpdfsdk/src/javascript/app.cpp @@ -16,16 +16,14 @@ #include "../../include/javascript/JS_Runtime.h" #include "../../include/javascript/Document.h" +static v8::Isolate* GetIsolate(IFXJS_Context* cc) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); -static v8::Isolate* GetIsolate(IFXJS_Context* cc) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); - - return pRuntime->GetIsolate(); + return pRuntime->GetIsolate(); } /* ---------------------------- TimerObj ---------------------------- */ @@ -42,36 +40,28 @@ END_JS_STATIC_METHOD() IMPLEMENT_JS_CLASS(CJS_TimerObj, TimerObj) TimerObj::TimerObj(CJS_Object* pJSObject) -: CJS_EmbedObj(pJSObject), -m_pTimer(NULL) -{ - -} + : CJS_EmbedObj(pJSObject), m_pTimer(NULL) {} -TimerObj::~TimerObj() -{ -} +TimerObj::~TimerObj() {} -void TimerObj::SetTimer(CJS_Timer* pTimer) -{ - m_pTimer = pTimer; +void TimerObj::SetTimer(CJS_Timer* pTimer) { + m_pTimer = pTimer; } -CJS_Timer* TimerObj::GetTimer() const -{ - return m_pTimer; +CJS_Timer* TimerObj::GetTimer() const { + return m_pTimer; } -#define JS_STR_VIEWERTYPE_READER L"Reader" -#define JS_STR_VIEWERTYPE_STANDARD L"Exchange" -#define JS_STR_VIEWERVARIATION L"Full" -#define JS_STR_PLATFORM L"WIN" -#define JS_STR_LANGUANGE L"ENU" -#define JS_STR_VIEWERVERSION 8 -#define JS_STR_VIEWERVERSION_XFA 11 -#define JS_NUM_FORMSVERSION 7 +#define JS_STR_VIEWERTYPE_READER L"Reader" +#define JS_STR_VIEWERTYPE_STANDARD L"Exchange" +#define JS_STR_VIEWERVARIATION L"Full" +#define JS_STR_PLATFORM L"WIN" +#define JS_STR_LANGUANGE L"ENU" +#define JS_STR_VIEWERVERSION 8 +#define JS_STR_VIEWERVERSION_XFA 11 +#define JS_NUM_FORMSVERSION 7 -#define JS_FILEPATH_MAXLEN 2000 +#define JS_FILEPATH_MAXLEN 2000 /* ---------------------------- app ---------------------------- */ @@ -79,821 +69,816 @@ BEGIN_JS_STATIC_CONST(CJS_App) END_JS_STATIC_CONST() BEGIN_JS_STATIC_PROP(CJS_App) - JS_STATIC_PROP_ENTRY(activeDocs) - JS_STATIC_PROP_ENTRY(calculate) - JS_STATIC_PROP_ENTRY(formsVersion) - JS_STATIC_PROP_ENTRY(fs) - JS_STATIC_PROP_ENTRY(fullscreen) - JS_STATIC_PROP_ENTRY(language) - JS_STATIC_PROP_ENTRY(media) - JS_STATIC_PROP_ENTRY(platform) - JS_STATIC_PROP_ENTRY(runtimeHighlight) - JS_STATIC_PROP_ENTRY(viewerType) - JS_STATIC_PROP_ENTRY(viewerVariation) - JS_STATIC_PROP_ENTRY(viewerVersion) +JS_STATIC_PROP_ENTRY(activeDocs) +JS_STATIC_PROP_ENTRY(calculate) +JS_STATIC_PROP_ENTRY(formsVersion) +JS_STATIC_PROP_ENTRY(fs) +JS_STATIC_PROP_ENTRY(fullscreen) +JS_STATIC_PROP_ENTRY(language) +JS_STATIC_PROP_ENTRY(media) +JS_STATIC_PROP_ENTRY(platform) +JS_STATIC_PROP_ENTRY(runtimeHighlight) +JS_STATIC_PROP_ENTRY(viewerType) +JS_STATIC_PROP_ENTRY(viewerVariation) +JS_STATIC_PROP_ENTRY(viewerVersion) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_App) - JS_STATIC_METHOD_ENTRY(alert) - JS_STATIC_METHOD_ENTRY(beep) - JS_STATIC_METHOD_ENTRY(browseForDoc) - JS_STATIC_METHOD_ENTRY(clearInterval) - JS_STATIC_METHOD_ENTRY(clearTimeOut) - JS_STATIC_METHOD_ENTRY(execDialog) - JS_STATIC_METHOD_ENTRY(execMenuItem) - JS_STATIC_METHOD_ENTRY(findComponent) - JS_STATIC_METHOD_ENTRY(goBack) - JS_STATIC_METHOD_ENTRY(goForward) - JS_STATIC_METHOD_ENTRY(launchURL) - JS_STATIC_METHOD_ENTRY(mailMsg) - JS_STATIC_METHOD_ENTRY(newFDF) - JS_STATIC_METHOD_ENTRY(newDoc) - JS_STATIC_METHOD_ENTRY(openDoc) - JS_STATIC_METHOD_ENTRY(openFDF) - JS_STATIC_METHOD_ENTRY(popUpMenuEx) - JS_STATIC_METHOD_ENTRY(popUpMenu) - JS_STATIC_METHOD_ENTRY(response) - JS_STATIC_METHOD_ENTRY(setInterval) - JS_STATIC_METHOD_ENTRY(setTimeOut) +JS_STATIC_METHOD_ENTRY(alert) +JS_STATIC_METHOD_ENTRY(beep) +JS_STATIC_METHOD_ENTRY(browseForDoc) +JS_STATIC_METHOD_ENTRY(clearInterval) +JS_STATIC_METHOD_ENTRY(clearTimeOut) +JS_STATIC_METHOD_ENTRY(execDialog) +JS_STATIC_METHOD_ENTRY(execMenuItem) +JS_STATIC_METHOD_ENTRY(findComponent) +JS_STATIC_METHOD_ENTRY(goBack) +JS_STATIC_METHOD_ENTRY(goForward) +JS_STATIC_METHOD_ENTRY(launchURL) +JS_STATIC_METHOD_ENTRY(mailMsg) +JS_STATIC_METHOD_ENTRY(newFDF) +JS_STATIC_METHOD_ENTRY(newDoc) +JS_STATIC_METHOD_ENTRY(openDoc) +JS_STATIC_METHOD_ENTRY(openFDF) +JS_STATIC_METHOD_ENTRY(popUpMenuEx) +JS_STATIC_METHOD_ENTRY(popUpMenu) +JS_STATIC_METHOD_ENTRY(response) +JS_STATIC_METHOD_ENTRY(setInterval) +JS_STATIC_METHOD_ENTRY(setTimeOut) END_JS_STATIC_METHOD() -IMPLEMENT_JS_CLASS(CJS_App,app) - -app::app(CJS_Object * pJSObject) - : CJS_EmbedObj(pJSObject), - m_bCalculate(true), - m_bRuntimeHighLight(false) -{ -} - -app::~app(void) -{ - for (int i=0,sz=m_aTimer.GetSize(); iGetReaderApp(); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument(); + CJS_Array aDocs(pRuntime->GetIsolate()); + if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument()) { + CJS_Document* pJSDocument = NULL; + if (pDoc == pCurDoc) { + JSFXObject pObj = JS_GetThisObj(*pRuntime); + if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"Document")) + pJSDocument = + (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(), pObj); + } else { + JSFXObject pObj = JS_NewFxDynamicObj( + *pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Document")); + pJSDocument = (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(), pObj); + ASSERT(pJSDocument != NULL); + } + aDocs.SetElement(0, CJS_Value(pRuntime->GetIsolate(), pJSDocument)); + } + if (aDocs.GetLength() > 0) + vp << aDocs; + else + vp.SetNull(); - m_aTimer.RemoveAll(); + return TRUE; } -FX_BOOL app::activeDocs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting()) - return FALSE; +FX_BOOL app::calculate(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsSetting()) { + bool bVP; + vp >> bVP; + m_bCalculate = (FX_BOOL)bVP; - CJS_Context* pContext = (CJS_Context *)cc; + CJS_Context* pContext = (CJS_Context*)cc; CPDFDoc_Environment* pApp = pContext->GetReaderApp(); CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument(); CJS_Array aDocs(pRuntime->GetIsolate()); if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument()) - { - CJS_Document* pJSDocument = NULL; - if (pDoc == pCurDoc) - { - JSFXObject pObj = JS_GetThisObj(*pRuntime); - if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"Document")) - pJSDocument = (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(),pObj); - } - else - { - JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime,L"Document")); - pJSDocument = (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(),pObj); - ASSERT(pJSDocument != NULL); + pDoc->GetInterForm()->EnableCalculate((FX_BOOL)m_bCalculate); + } else { + vp << (bool)m_bCalculate; + } + return TRUE; +} + +FX_BOOL app::formsVersion(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsGetting()) { + vp << JS_NUM_FORMSVERSION; + return TRUE; + } + + return FALSE; +} + +FX_BOOL app::viewerType(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsGetting()) { + vp << L"unknown"; + return TRUE; + } + + return FALSE; +} + +FX_BOOL app::viewerVariation(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsGetting()) { + vp << JS_STR_VIEWERVARIATION; + return TRUE; + } + + return FALSE; +} + +FX_BOOL app::viewerVersion(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; + + CJS_Context* pContext = (CJS_Context*)cc; + CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument(); + CPDFXFA_Document* pDoc = pCurDoc->GetDocument(); + if (pDoc->GetDocType() == 1 || pDoc->GetDocType() == 2) + vp << JS_STR_VIEWERVERSION_XFA; + else + vp << JS_STR_VIEWERVERSION; + + return TRUE; +} + +FX_BOOL app::platform(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsGetting()) { + vp << JS_STR_PLATFORM; + return TRUE; + } + + return FALSE; +} + +FX_BOOL app::language(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsGetting()) { + vp << JS_STR_LANGUANGE; + return TRUE; + } + + return FALSE; +} + +// creates a new fdf object that contains no data +// comment: need reader support +// note: +// CFDF_Document * CPDFDoc_Environment::NewFDF(); +FX_BOOL app::newFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; +} +// opens a specified pdf document and returns its document object +// comment:need reader support +// note: as defined in js reference, the proto of this function's fourth +// parmeters, how old an fdf document while do not show it. +// CFDF_Document * CPDFDoc_Environment::OpenFDF(string strPath,bool bUserConv); + +FX_BOOL app::openFDF(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; +} + +FX_BOOL app::alert(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + int iSize = params.size(); + if (iSize < 1) + return FALSE; + + CFX_WideString swMsg = L""; + CFX_WideString swTitle = L""; + int iIcon = 0; + int iType = 0; + + v8::Isolate* isolate = GetIsolate(cc); + + if (iSize == 1) { + if (params[0].GetType() == VT_object) { + JSObject pObj = params[0].ToV8Object(); + { + v8::Local pValue = + JS_GetObjectElement(isolate, pObj, L"cMsg"); + swMsg = CJS_Value(isolate, pValue, VT_unknown).ToCFXWideString(); + + pValue = JS_GetObjectElement(isolate, pObj, L"cTitle"); + swTitle = CJS_Value(isolate, pValue, VT_unknown).ToCFXWideString(); + + pValue = JS_GetObjectElement(isolate, pObj, L"nIcon"); + iIcon = CJS_Value(isolate, pValue, VT_unknown).ToInt(); + + pValue = JS_GetObjectElement(isolate, pObj, L"nType"); + iType = CJS_Value(isolate, pValue, VT_unknown).ToInt(); + } + + if (swMsg == L"") { + CJS_Array carray(isolate); + if (params[0].ConvertToArray(carray)) { + int iLenth = carray.GetLength(); + CJS_Value* pValue = new CJS_Value(isolate); + // if (iLenth == 1) + // pValue = new + //CJS_Value(isolate); + // else if (iLenth > 1) + // pValue = new + //CJS_Value[iLenth]; + + for (int i = 0; i < iLenth; i++) { + carray.GetElement(i, *pValue); + swMsg += (*pValue).ToCFXWideString(); + if (i < iLenth - 1) + swMsg += L", "; + } + + delete pValue; } - aDocs.SetElement(0,CJS_Value(pRuntime->GetIsolate(),pJSDocument)); + } + + if (swTitle == L"") + swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT); + } else if (params[0].GetType() == VT_boolean) { + FX_BOOL bGet = params[0].ToBool(); + if (bGet) + swMsg = L"true"; + else + swMsg = L"false"; + + swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT); + } else { + swMsg = params[0].ToCFXWideString(); + swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT); + } + } else { + if (params[0].GetType() == VT_boolean) { + FX_BOOL bGet = params[0].ToBool(); + if (bGet) + swMsg = L"true"; + else + swMsg = L"false"; + } else { + swMsg = params[0].ToCFXWideString(); } - if (aDocs.GetLength() > 0) - vp << aDocs; - else - vp.SetNull(); + swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT); + + for (int i = 1; i < iSize; i++) { + if (i == 1) + iIcon = params[i].ToInt(); + if (i == 2) + iType = params[i].ToInt(); + if (i == 3) + swTitle = params[i].ToCFXWideString(); + } + } + + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); + pRuntime->BeginBlock(); + vRet = MsgBox(pRuntime->GetReaderApp(), JSGetPageView(cc), swMsg.c_str(), + swTitle.c_str(), iType, iIcon); + pRuntime->EndBlock(); + + return TRUE; +} +FX_BOOL app::beep(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + if (params.size() == 1) { + CJS_Context* pContext = (CJS_Context*)cc; + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + CPDFDoc_Environment* pEnv = pRuntime->GetReaderApp(); + pEnv->JS_appBeep(params[0].ToInt()); return TRUE; + } + + sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); + return FALSE; } -FX_BOOL app::calculate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsSetting()) - { - bool bVP; - vp >> bVP; - m_bCalculate = (FX_BOOL)bVP; - - CJS_Context* pContext = (CJS_Context*)cc; - CPDFDoc_Environment* pApp = pContext->GetReaderApp(); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - CJS_Array aDocs(pRuntime->GetIsolate()); - if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument()) - pDoc->GetInterForm()->EnableCalculate((FX_BOOL)m_bCalculate); - } - else - { - vp << (bool)m_bCalculate; - } - return TRUE; -} - -FX_BOOL app::formsVersion(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsGetting()) - { - vp << JS_NUM_FORMSVERSION; - return TRUE; - } - - return FALSE; -} - -FX_BOOL app::viewerType(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsGetting()) - { - vp << L"unknown"; - return TRUE; - } - - return FALSE; -} - -FX_BOOL app::viewerVariation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsGetting()) - { - vp << JS_STR_VIEWERVARIATION; - return TRUE; - } - - return FALSE; -} - -FX_BOOL app::viewerVersion(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting()) - return FALSE; - - CJS_Context* pContext = (CJS_Context *)cc; - CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument(); - CPDFXFA_Document* pDoc = pCurDoc->GetDocument(); - if (pDoc->GetDocType() == 1 || pDoc->GetDocType() == 2) - vp << JS_STR_VIEWERVERSION_XFA; - else - vp << JS_STR_VIEWERVERSION; +FX_BOOL app::findComponent(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; +} + +FX_BOOL app::popUpMenuEx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; +} +FX_BOOL app::fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { + return FALSE; +} + +FX_BOOL app::setInterval(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + if (params.size() > 2 || params.size() == 0) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L""; + if (script.IsEmpty()) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE); return TRUE; + } + + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + FX_DWORD dwInterval = params.size() > 1 ? params[1].ToInt() : 1000; + + CPDFDoc_Environment* pApp = pRuntime->GetReaderApp(); + ASSERT(pApp); + CJS_Timer* pTimer = new CJS_Timer(this, pApp); + m_aTimer.Add(pTimer); + + pTimer->SetType(0); + pTimer->SetRuntime(pRuntime); + pTimer->SetJScript(script); + pTimer->SetTimeOut(0); + // pTimer->SetStartTime(GetTickCount()); + pTimer->SetJSTimer(dwInterval); + + JSFXObject pRetObj = JS_NewFxDynamicObj( + *pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj")); + + CJS_TimerObj* pJS_TimerObj = + (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(), pRetObj); + ASSERT(pJS_TimerObj != NULL); + + TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject(); + ASSERT(pTimerObj != NULL); + + pTimerObj->SetTimer(pTimer); + + vRet = pRetObj; + + return TRUE; +} + +FX_BOOL app::setTimeOut(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + if (params.size() > 2 || params.size() == 0) { + sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); + + CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L""; + if (script.IsEmpty()) { + sError = + JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE); + return TRUE; + } + + FX_DWORD dwTimeOut = params.size() > 1 ? params[1].ToInt() : 1000; + + CPDFDoc_Environment* pApp = pRuntime->GetReaderApp(); + ASSERT(pApp); + + CJS_Timer* pTimer = new CJS_Timer(this, pApp); + m_aTimer.Add(pTimer); + + pTimer->SetType(1); + pTimer->SetRuntime(pRuntime); + pTimer->SetJScript(script); + pTimer->SetTimeOut(dwTimeOut); + pTimer->SetJSTimer(dwTimeOut); + + JSFXObject pRetObj = JS_NewFxDynamicObj( + *pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj")); + + CJS_TimerObj* pJS_TimerObj = + (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(), pRetObj); + ASSERT(pJS_TimerObj != NULL); + + TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject(); + ASSERT(pTimerObj != NULL); + + pTimerObj->SetTimer(pTimer); + + vRet = pRetObj; + + return TRUE; +} + +FX_BOOL app::clearTimeOut(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); + + if (params.size() != 1) { + sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + if (params[0].GetType() == VT_fxobject) { + JSFXObject pObj = params[0].ToV8Object(); + { + if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj")) { + if (CJS_Object* pJSObj = params[0].ToCJSObject()) { + if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject()) { + if (CJS_Timer* pTimer = pTimerObj->GetTimer()) { + pTimer->KillJSTimer(); + + for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++) { + if (m_aTimer[i] == pTimer) { + m_aTimer.RemoveAt(i); + break; + } + } + + delete pTimer; + pTimerObj->SetTimer(NULL); + } + } + } + } + } + } + + return TRUE; +} + +FX_BOOL app::clearInterval(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); + + if (params.size() != 1) { + sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); + return FALSE; + } + + if (params[0].GetType() == VT_fxobject) { + JSFXObject pObj = params[0].ToV8Object(); + { + if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj")) { + if (CJS_Object* pJSObj = params[0].ToCJSObject()) { + if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject()) { + if (CJS_Timer* pTimer = pTimerObj->GetTimer()) { + pTimer->KillJSTimer(); + + for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++) { + if (m_aTimer[i] == pTimer) { + m_aTimer.RemoveAt(i); + break; + } + } + + delete pTimer; + pTimerObj->SetTimer(NULL); + } + } + } + } + } + } + + return TRUE; +} + +FX_BOOL app::execMenuItem(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; +} + +void app::TimerProc(CJS_Timer* pTimer) { + ASSERT(pTimer != NULL); + + switch (pTimer->GetType()) { + case 0: // interval + RunJsScript(pTimer->GetRuntime(), pTimer->GetJScript()); + break; + case 1: + if (pTimer->GetTimeOut() > 0) { + RunJsScript(pTimer->GetRuntime(), pTimer->GetJScript()); + pTimer->KillJSTimer(); + } + break; + } +} + +void app::RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript) { + ASSERT(pRuntime != NULL); + + if (!pRuntime->IsBlocking()) { + IFXJS_Context* pContext = pRuntime->NewContext(); + ASSERT(pContext != NULL); + pContext->OnExternal_Exec(); + CFX_WideString wtInfo; + pContext->RunScript(wsScript, wtInfo); + pRuntime->ReleaseContext(pContext); + } } -FX_BOOL app::platform(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsGetting()) - { - vp << JS_STR_PLATFORM; - return TRUE; - } - - return FALSE; -} - -FX_BOOL app::language(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsGetting()) - { - vp << JS_STR_LANGUANGE; - return TRUE; - } - - return FALSE; -} - -//creates a new fdf object that contains no data -//comment: need reader support -//note: -//CFDF_Document * CPDFDoc_Environment::NewFDF(); -FX_BOOL app::newFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; -} -//opens a specified pdf document and returns its document object -//comment:need reader support -//note: as defined in js reference, the proto of this function's fourth parmeters, how old an fdf document while do not show it. -//CFDF_Document * CPDFDoc_Environment::OpenFDF(string strPath,bool bUserConv); - -FX_BOOL app::openFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; -} - -FX_BOOL app::alert(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - int iSize = params.size(); - if (iSize < 1) - return FALSE; - - CFX_WideString swMsg = L""; - CFX_WideString swTitle = L""; - int iIcon = 0; - int iType = 0; - - v8::Isolate* isolate = GetIsolate(cc); - - if (iSize == 1) - { - if (params[0].GetType() == VT_object) - { - JSObject pObj = params[0].ToV8Object(); - { - v8::Local pValue = JS_GetObjectElement(isolate, pObj, L"cMsg"); - swMsg = CJS_Value(isolate, pValue, VT_unknown).ToCFXWideString(); - - pValue = JS_GetObjectElement(isolate, pObj, L"cTitle"); - swTitle = CJS_Value(isolate, pValue, VT_unknown).ToCFXWideString(); - - pValue = JS_GetObjectElement(isolate, pObj, L"nIcon"); - iIcon = CJS_Value(isolate, pValue, VT_unknown).ToInt(); - - pValue = JS_GetObjectElement(isolate, pObj, L"nType"); - iType = CJS_Value(isolate, pValue, VT_unknown).ToInt(); - } - - if (swMsg == L"") - { - CJS_Array carray(isolate); - if (params[0].ConvertToArray(carray)) - { - int iLenth = carray.GetLength(); - CJS_Value* pValue = new CJS_Value(isolate); -// if (iLenth == 1) -// pValue = new CJS_Value(isolate); -// else if (iLenth > 1) -// pValue = new CJS_Value[iLenth]; - - for(int i = 0; i < iLenth; i++) - { - carray.GetElement(i, *pValue); - swMsg += (*pValue).ToCFXWideString(); - if (i < iLenth - 1) - swMsg += L", "; - } - - delete pValue; - } - } - - if (swTitle == L"") - swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT); - } - else if (params[0].GetType() == VT_boolean) - { - FX_BOOL bGet = params[0].ToBool(); - if (bGet) - swMsg = L"true"; - else - swMsg = L"false"; - - swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT); - } - else - { - swMsg = params[0].ToCFXWideString(); - swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT); - } - } - else - { - if (params[0].GetType() == VT_boolean) - { - FX_BOOL bGet = params[0].ToBool(); - if (bGet) - swMsg = L"true"; - else - swMsg = L"false"; - } - else - { - swMsg = params[0].ToCFXWideString(); - } - swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT); - - for(int i = 1;iGetJSRuntime(); - ASSERT(pRuntime != NULL); - pRuntime->BeginBlock(); - vRet = MsgBox(pRuntime->GetReaderApp(), JSGetPageView(cc), swMsg.c_str(), swTitle.c_str(), iType, iIcon); - pRuntime->EndBlock(); - - return TRUE; -} - - -FX_BOOL app::beep(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - if (params.size() == 1) - { - CJS_Context* pContext = (CJS_Context*)cc; - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - CPDFDoc_Environment * pEnv = pRuntime->GetReaderApp(); - pEnv->JS_appBeep(params[0].ToInt()); - return TRUE; - } - - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); - return FALSE; -} - -FX_BOOL app::findComponent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; -} - -FX_BOOL app::popUpMenuEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; -} - -FX_BOOL app::fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return FALSE; -} - -FX_BOOL app::setInterval(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - if (params.size() > 2 || params.size() == 0) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; - } - - CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L""; - if (script.IsEmpty()) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE); - return TRUE; - } - - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - FX_DWORD dwInterval = params.size() > 1 ? params[1].ToInt() : 1000; - - CPDFDoc_Environment* pApp = pRuntime->GetReaderApp(); - ASSERT(pApp); - CJS_Timer* pTimer = new CJS_Timer(this, pApp); - m_aTimer.Add(pTimer); - - pTimer->SetType(0); - pTimer->SetRuntime(pRuntime); - pTimer->SetJScript(script); - pTimer->SetTimeOut(0); -// pTimer->SetStartTime(GetTickCount()); - pTimer->SetJSTimer(dwInterval); - - JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj")); - - CJS_TimerObj* pJS_TimerObj = (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(),pRetObj); - ASSERT(pJS_TimerObj != NULL); - - TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject(); - ASSERT(pTimerObj != NULL); - - pTimerObj->SetTimer(pTimer); - - vRet = pRetObj; - - return TRUE; -} - -FX_BOOL app::setTimeOut(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - if (params.size() > 2 || params.size() == 0) - { - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); - return FALSE; - } - - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); - - CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L""; - if (script.IsEmpty()) - { - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE); - return TRUE; - } - - FX_DWORD dwTimeOut = params.size() > 1 ? params[1].ToInt() : 1000; - - CPDFDoc_Environment* pApp = pRuntime->GetReaderApp(); - ASSERT(pApp); - - CJS_Timer* pTimer = new CJS_Timer(this, pApp); - m_aTimer.Add(pTimer); - - pTimer->SetType(1); - pTimer->SetRuntime(pRuntime); - pTimer->SetJScript(script); - pTimer->SetTimeOut(dwTimeOut); - pTimer->SetJSTimer(dwTimeOut); - - JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj")); - - CJS_TimerObj* pJS_TimerObj = (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(),pRetObj); - ASSERT(pJS_TimerObj != NULL); - - TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject(); - ASSERT(pTimerObj != NULL); - - pTimerObj->SetTimer(pTimer); - - vRet = pRetObj; - - return TRUE; -} - -FX_BOOL app::clearTimeOut(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); - - if (params.size() != 1) - { - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); - return FALSE; - } - - if (params[0].GetType() == VT_fxobject) - { - JSFXObject pObj = params[0].ToV8Object(); - { - if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj")) - { - if (CJS_Object* pJSObj = params[0].ToCJSObject()) - { - if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject()) - { - if (CJS_Timer* pTimer = pTimerObj->GetTimer()) - { - pTimer->KillJSTimer(); - - for (int i=0,sz=m_aTimer.GetSize(); iSetTimer(NULL); - } - } - } - } - } - } - - return TRUE; -} - -FX_BOOL app::clearInterval(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); - - if (params.size() != 1) - { - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); - return FALSE; - } - - if (params[0].GetType() == VT_fxobject) - { - JSFXObject pObj = params[0].ToV8Object(); - { - if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj")) - { - if (CJS_Object* pJSObj = params[0].ToCJSObject()) - { - if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject()) - { - if (CJS_Timer* pTimer = pTimerObj->GetTimer()) - { - pTimer->KillJSTimer(); - - for (int i=0,sz=m_aTimer.GetSize(); iSetTimer(NULL); - } - } - } - } - } - } - - return TRUE; -} - -FX_BOOL app::execMenuItem(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; -} - -void app::TimerProc(CJS_Timer* pTimer) -{ - ASSERT(pTimer != NULL); - - switch (pTimer->GetType()) - { - case 0: //interval - RunJsScript(pTimer->GetRuntime(), pTimer->GetJScript()); - break; - case 1: - if (pTimer->GetTimeOut() > 0) - { - RunJsScript(pTimer->GetRuntime(), pTimer->GetJScript()); - pTimer->KillJSTimer(); - } - break; - } - -} - -void app::RunJsScript(CJS_Runtime* pRuntime,const CFX_WideString& wsScript) -{ - ASSERT(pRuntime != NULL); - - if (!pRuntime->IsBlocking()) - { - IFXJS_Context* pContext = pRuntime->NewContext(); - ASSERT(pContext != NULL); - pContext->OnExternal_Exec(); - CFX_WideString wtInfo; - pContext->RunScript(wsScript,wtInfo); - pRuntime->ReleaseContext(pContext); - } -} - -FX_BOOL app::goBack(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL app::goBack(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Not supported. return TRUE; } -FX_BOOL app::goForward(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL app::goForward(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Not supported. return TRUE; } -FX_BOOL app::mailMsg(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - v8::Isolate* isolate = GetIsolate(cc); +FX_BOOL app::mailMsg(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + v8::Isolate* isolate = GetIsolate(cc); - FX_BOOL bUI = TRUE; - CFX_WideString cTo = L""; - CFX_WideString cCc = L""; - CFX_WideString cBcc = L""; - CFX_WideString cSubject = L""; - CFX_WideString cMsg = L""; + FX_BOOL bUI = TRUE; + CFX_WideString cTo = L""; + CFX_WideString cCc = L""; + CFX_WideString cBcc = L""; + CFX_WideString cSubject = L""; + CFX_WideString cMsg = L""; - if (params.size() < 1) - return FALSE; + if (params.size() < 1) + return FALSE; - if (params[0].GetType() == VT_object) - { - JSObject pObj = params[0].ToV8Object(); + if (params[0].GetType() == VT_object) { + JSObject pObj = params[0].ToV8Object(); - v8::Local pValue = JS_GetObjectElement(isolate, pObj, L"bUI"); - bUI = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool(); + v8::Local pValue = JS_GetObjectElement(isolate, pObj, L"bUI"); + bUI = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool(); - pValue = JS_GetObjectElement(isolate, pObj, L"cTo"); - cTo = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + pValue = JS_GetObjectElement(isolate, pObj, L"cTo"); + cTo = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); - pValue = JS_GetObjectElement(isolate, pObj, L"cCc"); - cCc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + pValue = JS_GetObjectElement(isolate, pObj, L"cCc"); + cCc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); - pValue = JS_GetObjectElement(isolate, pObj, L"cBcc"); - cBcc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + pValue = JS_GetObjectElement(isolate, pObj, L"cBcc"); + cBcc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); - pValue = JS_GetObjectElement(isolate, pObj, L"cSubject"); - cSubject = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + pValue = JS_GetObjectElement(isolate, pObj, L"cSubject"); + cSubject = + CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); - pValue = JS_GetObjectElement(isolate, pObj, L"cMsg"); - cMsg = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); - } else { - if (params.size() < 2) - return FALSE; + pValue = JS_GetObjectElement(isolate, pObj, L"cMsg"); + cMsg = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + } else { + if (params.size() < 2) + return FALSE; - bUI = params[0].ToBool(); - cTo = params[1].ToCFXWideString(); + bUI = params[0].ToBool(); + cTo = params[1].ToCFXWideString(); - if (params.size() >= 3) - cCc = params[2].ToCFXWideString(); - if (params.size() >= 4) - cBcc = params[3].ToCFXWideString(); - if (params.size() >= 5) - cSubject = params[4].ToCFXWideString(); - if (params.size() >= 6) - cMsg = params[5].ToCFXWideString(); - } + if (params.size() >= 3) + cCc = params[2].ToCFXWideString(); + if (params.size() >= 4) + cBcc = params[3].ToCFXWideString(); + if (params.size() >= 5) + cSubject = params[4].ToCFXWideString(); + if (params.size() >= 6) + cMsg = params[5].ToCFXWideString(); + } - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); - CPDFDoc_Environment* pApp = pContext->GetReaderApp(); - ASSERT(pApp != NULL); + CPDFDoc_Environment* pApp = pContext->GetReaderApp(); + ASSERT(pApp != NULL); - pRuntime->BeginBlock(); - pApp->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str()); - pRuntime->EndBlock(); + pRuntime->BeginBlock(); + pApp->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), + cBcc.c_str(), cMsg.c_str()); + pRuntime->EndBlock(); - return FALSE; + return FALSE; } -FX_BOOL app::launchURL(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL app::launchURL(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Unsafe, not supported. return TRUE; } -FX_BOOL app::runtimeHighlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsSetting()) - { - vp>>m_bRuntimeHighLight; - } - else - { - vp<> m_bRuntimeHighLight; + } else { + vp << m_bRuntimeHighLight; + } - return TRUE; + return TRUE; } -FX_BOOL app::fullscreen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return FALSE; +FX_BOOL app::fullscreen(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return FALSE; } -FX_BOOL app::popUpMenu(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return FALSE; +FX_BOOL app::popUpMenu(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; } - -FX_BOOL app::browseForDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL app::browseForDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Unsafe, not supported. return TRUE; } -CFX_WideString app::SysPathToPDFPath(const CFX_WideString& sOldPath) -{ - CFX_WideString sRet = L"/"; - - for (int i=0,sz=sOldPath.GetLength(); i 0 && params[0].GetType() == VT_object) - { - JSObject pObj = params[0].ToV8Object(); - v8::Local pValue = JS_GetObjectElement(isolate,pObj,L"cQuestion"); - swQuestion = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString(); - - pValue = JS_GetObjectElement(isolate,pObj,L"cTitle"); - swTitle = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString(); - - pValue = JS_GetObjectElement(isolate,pObj,L"cDefault"); - swDefault = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString(); - - pValue = JS_GetObjectElement(isolate,pObj,L"cLabel"); - swLabel = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString(); - - pValue = JS_GetObjectElement(isolate,pObj,L"bPassword"); - bPassWord = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToBool(); - } - else - { - switch(iLength) - { - case 5: - swLabel = params[4].ToCFXWideString(); - // FALLTHROUGH - case 4: - bPassWord = params[3].ToBool(); - // FALLTHROUGH - case 3: - swDefault = params[2].ToCFXWideString(); - // FALLTHROUGH - case 2: - swTitle = params[1].ToCFXWideString(); - // FALLTHROUGH - case 1: - swQuestion = params[0].ToCFXWideString(); - // FALLTHROUGH - default: - break; - } - } - - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - - CPDFDoc_Environment* pApp = pContext->GetReaderApp(); - ASSERT(pApp != NULL); - - const int MAX_INPUT_BYTES = 2048; - char* pBuff = new char[MAX_INPUT_BYTES + 2]; - if (!pBuff) - return FALSE; - - memset(pBuff, 0, MAX_INPUT_BYTES + 2); - int nLengthBytes = pApp->JS_appResponse(swQuestion.c_str(), swTitle.c_str(), swDefault.c_str(), - swLabel.c_str(), bPassWord, pBuff, MAX_INPUT_BYTES); - if (nLengthBytes <= 0) - { - vRet.SetNull(); - delete[] pBuff; - return FALSE; - } - if (nLengthBytes > MAX_INPUT_BYTES) - nLengthBytes = MAX_INPUT_BYTES; - - vRet = CFX_WideString::FromUTF16LE((unsigned short*)pBuff, nLengthBytes / sizeof(unsigned short)).c_str(); - delete[] pBuff; - return TRUE; -} - -FX_BOOL app::media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return FALSE; -} - -FX_BOOL app::execDialog(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +CFX_WideString app::SysPathToPDFPath(const CFX_WideString& sOldPath) { + CFX_WideString sRet = L"/"; + + for (int i = 0, sz = sOldPath.GetLength(); i < sz; i++) { + wchar_t c = sOldPath.GetAt(i); + if (c == L':') { + } else { + if (c == L'\\') { + sRet += L"/"; + } else { + sRet += c; + } + } + } + + return sRet; +} + +FX_BOOL app::newDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; +} + +FX_BOOL app::openDoc(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return FALSE; +} + +FX_BOOL app::response(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CFX_WideString swQuestion = L""; + CFX_WideString swLabel = L""; + CFX_WideString swTitle = L"PDF"; + CFX_WideString swDefault = L""; + bool bPassWord = false; + + v8::Isolate* isolate = GetIsolate(cc); + + int iLength = params.size(); + if (iLength > 0 && params[0].GetType() == VT_object) { + JSObject pObj = params[0].ToV8Object(); + v8::Local pValue = + JS_GetObjectElement(isolate, pObj, L"cQuestion"); + swQuestion = + CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + + pValue = JS_GetObjectElement(isolate, pObj, L"cTitle"); + swTitle = + CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + + pValue = JS_GetObjectElement(isolate, pObj, L"cDefault"); + swDefault = + CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + + pValue = JS_GetObjectElement(isolate, pObj, L"cLabel"); + swLabel = + CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + + pValue = JS_GetObjectElement(isolate, pObj, L"bPassword"); + bPassWord = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool(); + } else { + switch (iLength) { + case 5: + swLabel = params[4].ToCFXWideString(); + // FALLTHROUGH + case 4: + bPassWord = params[3].ToBool(); + // FALLTHROUGH + case 3: + swDefault = params[2].ToCFXWideString(); + // FALLTHROUGH + case 2: + swTitle = params[1].ToCFXWideString(); + // FALLTHROUGH + case 1: + swQuestion = params[0].ToCFXWideString(); + // FALLTHROUGH + default: + break; + } + } + + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + + CPDFDoc_Environment* pApp = pContext->GetReaderApp(); + ASSERT(pApp != NULL); + + const int MAX_INPUT_BYTES = 2048; + char* pBuff = new char[MAX_INPUT_BYTES + 2]; + if (!pBuff) + return FALSE; + + memset(pBuff, 0, MAX_INPUT_BYTES + 2); + int nLengthBytes = pApp->JS_appResponse(swQuestion.c_str(), swTitle.c_str(), + swDefault.c_str(), swLabel.c_str(), + bPassWord, pBuff, MAX_INPUT_BYTES); + if (nLengthBytes <= 0) { + vRet.SetNull(); + delete[] pBuff; + return FALSE; + } + if (nLengthBytes > MAX_INPUT_BYTES) + nLengthBytes = MAX_INPUT_BYTES; + + vRet = CFX_WideString::FromUTF16LE((unsigned short*)pBuff, + nLengthBytes / sizeof(unsigned short)) + .c_str(); + delete[] pBuff; + return TRUE; +} + +FX_BOOL app::media(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return FALSE; +} + +FX_BOOL app::execDialog(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } diff --git a/fpdfsdk/src/javascript/color.cpp b/fpdfsdk/src/javascript/color.cpp index a2bbadcd51..0659ab94a4 100644 --- a/fpdfsdk/src/javascript/color.cpp +++ b/fpdfsdk/src/javascript/color.cpp @@ -14,15 +14,14 @@ #include "../../include/javascript/JS_Context.h" #include "../../include/javascript/JS_Runtime.h" -static v8::Isolate* GetIsolate(IFXJS_Context* cc) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); +static v8::Isolate* GetIsolate(IFXJS_Context* cc) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); - return pRuntime->GetIsolate(); + return pRuntime->GetIsolate(); } /* -------------------------- color -------------------------- */ @@ -30,149 +29,132 @@ BEGIN_JS_STATIC_CONST(CJS_Color) END_JS_STATIC_CONST() BEGIN_JS_STATIC_PROP(CJS_Color) - JS_STATIC_PROP_ENTRY(black) - JS_STATIC_PROP_ENTRY(blue) - JS_STATIC_PROP_ENTRY(cyan) - JS_STATIC_PROP_ENTRY(dkGray) - JS_STATIC_PROP_ENTRY(gray) - JS_STATIC_PROP_ENTRY(green) - JS_STATIC_PROP_ENTRY(ltGray) - JS_STATIC_PROP_ENTRY(magenta) - JS_STATIC_PROP_ENTRY(red) - JS_STATIC_PROP_ENTRY(transparent) - JS_STATIC_PROP_ENTRY(white) - JS_STATIC_PROP_ENTRY(yellow) +JS_STATIC_PROP_ENTRY(black) +JS_STATIC_PROP_ENTRY(blue) +JS_STATIC_PROP_ENTRY(cyan) +JS_STATIC_PROP_ENTRY(dkGray) +JS_STATIC_PROP_ENTRY(gray) +JS_STATIC_PROP_ENTRY(green) +JS_STATIC_PROP_ENTRY(ltGray) +JS_STATIC_PROP_ENTRY(magenta) +JS_STATIC_PROP_ENTRY(red) +JS_STATIC_PROP_ENTRY(transparent) +JS_STATIC_PROP_ENTRY(white) +JS_STATIC_PROP_ENTRY(yellow) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_Color) - JS_STATIC_METHOD_ENTRY(convert) - JS_STATIC_METHOD_ENTRY(equal) +JS_STATIC_METHOD_ENTRY(convert) +JS_STATIC_METHOD_ENTRY(equal) END_JS_STATIC_METHOD() -IMPLEMENT_JS_CLASS(CJS_Color,color) - -color::color(CJS_Object* pJSObject): CJS_EmbedObj(pJSObject) -{ - m_crTransparent = CPWL_Color(COLORTYPE_TRANSPARENT); - m_crBlack = CPWL_Color(COLORTYPE_GRAY, 0); - m_crWhite = CPWL_Color(COLORTYPE_GRAY, 1); - m_crRed = CPWL_Color(COLORTYPE_RGB, 1, 0 ,0); - m_crGreen = CPWL_Color(COLORTYPE_RGB, 0, 1 ,0); - m_crBlue = CPWL_Color(COLORTYPE_RGB, 0, 0 ,1); - m_crCyan = CPWL_Color(COLORTYPE_CMYK, 1, 0 ,0, 0); - m_crMagenta = CPWL_Color(COLORTYPE_CMYK, 0, 1 ,0, 0); - m_crYellow = CPWL_Color(COLORTYPE_CMYK, 0, 0 ,1, 0); - m_crDKGray = CPWL_Color(COLORTYPE_GRAY, 0.25); - m_crGray = CPWL_Color(COLORTYPE_GRAY, 0.5); - m_crLTGray = CPWL_Color(COLORTYPE_GRAY, 0.75); +IMPLEMENT_JS_CLASS(CJS_Color, color) + +color::color(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) { + m_crTransparent = CPWL_Color(COLORTYPE_TRANSPARENT); + m_crBlack = CPWL_Color(COLORTYPE_GRAY, 0); + m_crWhite = CPWL_Color(COLORTYPE_GRAY, 1); + m_crRed = CPWL_Color(COLORTYPE_RGB, 1, 0, 0); + m_crGreen = CPWL_Color(COLORTYPE_RGB, 0, 1, 0); + m_crBlue = CPWL_Color(COLORTYPE_RGB, 0, 0, 1); + m_crCyan = CPWL_Color(COLORTYPE_CMYK, 1, 0, 0, 0); + m_crMagenta = CPWL_Color(COLORTYPE_CMYK, 0, 1, 0, 0); + m_crYellow = CPWL_Color(COLORTYPE_CMYK, 0, 0, 1, 0); + m_crDKGray = CPWL_Color(COLORTYPE_GRAY, 0.25); + m_crGray = CPWL_Color(COLORTYPE_GRAY, 0.5); + m_crLTGray = CPWL_Color(COLORTYPE_GRAY, 0.75); } -color::~color(void) -{ +color::~color(void) {} + +void color::ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array) { + switch (color.nColorType) { + case COLORTYPE_TRANSPARENT: + array.SetElement(0, CJS_Value(array.GetIsolate(), "T")); + break; + case COLORTYPE_GRAY: + array.SetElement(0, CJS_Value(array.GetIsolate(), "G")); + array.SetElement(1, CJS_Value(array.GetIsolate(), color.fColor1)); + break; + case COLORTYPE_RGB: + array.SetElement(0, CJS_Value(array.GetIsolate(), "RGB")); + array.SetElement(1, CJS_Value(array.GetIsolate(), color.fColor1)); + array.SetElement(2, CJS_Value(array.GetIsolate(), color.fColor2)); + array.SetElement(3, CJS_Value(array.GetIsolate(), color.fColor3)); + break; + case COLORTYPE_CMYK: + array.SetElement(0, CJS_Value(array.GetIsolate(), "CMYK")); + array.SetElement(1, CJS_Value(array.GetIsolate(), color.fColor1)); + array.SetElement(2, CJS_Value(array.GetIsolate(), color.fColor2)); + array.SetElement(3, CJS_Value(array.GetIsolate(), color.fColor3)); + array.SetElement(4, CJS_Value(array.GetIsolate(), color.fColor4)); + break; + } } -void color::ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array) -{ - switch (color.nColorType) - { - case COLORTYPE_TRANSPARENT: - array.SetElement(0, CJS_Value(array.GetIsolate(), "T")); - break; - case COLORTYPE_GRAY: - array.SetElement(0, CJS_Value(array.GetIsolate(),"G")); - array.SetElement(1, CJS_Value(array.GetIsolate(),color.fColor1)); - break; - case COLORTYPE_RGB: - array.SetElement(0, CJS_Value(array.GetIsolate(),"RGB")); - array.SetElement(1, CJS_Value(array.GetIsolate(),color.fColor1)); - array.SetElement(2, CJS_Value(array.GetIsolate(),color.fColor2)); - array.SetElement(3, CJS_Value(array.GetIsolate(),color.fColor3)); - break; - case COLORTYPE_CMYK: - array.SetElement(0, CJS_Value(array.GetIsolate(),"CMYK")); - array.SetElement(1, CJS_Value(array.GetIsolate(),color.fColor1)); - array.SetElement(2, CJS_Value(array.GetIsolate(),color.fColor2)); - array.SetElement(3, CJS_Value(array.GetIsolate(),color.fColor3)); - array.SetElement(4, CJS_Value(array.GetIsolate(),color.fColor4)); - break; - } +void color::ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color) { + int nArrayLen = array.GetLength(); + if (nArrayLen < 1) + return; + + CJS_Value value(array.GetIsolate()); + array.GetElement(0, value); + CFX_ByteString sSpace = value.ToCFXByteString(); + + double d1 = 0; + double d2 = 0; + double d3 = 0; + double d4 = 0; + + if (nArrayLen > 1) { + array.GetElement(1, value); + d1 = value.ToDouble(); + } + + if (nArrayLen > 2) { + array.GetElement(2, value); + d2 = value.ToDouble(); + } + + if (nArrayLen > 3) { + array.GetElement(3, value); + d3 = value.ToDouble(); + } + + if (nArrayLen > 4) { + array.GetElement(4, value); + d4 = value.ToDouble(); + } + + if (sSpace == "T") { + color = CPWL_Color(COLORTYPE_TRANSPARENT); + } else if (sSpace == "G") { + color = CPWL_Color(COLORTYPE_GRAY, (FX_FLOAT)d1); + } else if (sSpace == "RGB") { + color = CPWL_Color(COLORTYPE_RGB, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3); + } else if (sSpace == "CMYK") { + color = CPWL_Color(COLORTYPE_CMYK, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3, + (FX_FLOAT)d4); + } } -void color::ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color) -{ - int nArrayLen = array.GetLength(); - if (nArrayLen < 1) return; - - CJS_Value value(array.GetIsolate()); - array.GetElement(0, value); - CFX_ByteString sSpace = value.ToCFXByteString(); - - double d1 = 0; - double d2 = 0; - double d3 = 0; - double d4 = 0; - - if (nArrayLen > 1) - { - array.GetElement(1, value); - d1 = value.ToDouble(); - } - - if (nArrayLen > 2) - { - array.GetElement(2, value); - d2 = value.ToDouble(); - } - - if (nArrayLen > 3) - { - array.GetElement(3, value); - d3 = value.ToDouble(); - } - - if (nArrayLen > 4) - { - array.GetElement(4, value); - d4 = value.ToDouble(); - } - - if (sSpace == "T") - { - color = CPWL_Color(COLORTYPE_TRANSPARENT); - } - else if (sSpace == "G") - { - color = CPWL_Color(COLORTYPE_GRAY, (FX_FLOAT)d1); - } - else if (sSpace == "RGB") - { - color = CPWL_Color(COLORTYPE_RGB, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3); - } - else if (sSpace == "CMYK") - { - color = CPWL_Color(COLORTYPE_CMYK, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3, (FX_FLOAT)d4); - } -} - -#define JS_IMPLEMENT_COLORPROP(prop, var)\ -FX_BOOL color::prop(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)\ -{\ - CJS_Context* pContext = (CJS_Context*)cc;\ - v8::Isolate* isolate = pContext->GetJSRuntime()->GetIsolate();\ - if (vp.IsGetting())\ - {\ - CJS_Array array(isolate);\ - ConvertPWLColorToArray(var, array);\ - vp << array;\ - }\ - else\ - {\ - CJS_Array array(isolate);\ - if (!vp.ConvertToArray(array)) return FALSE;\ - ConvertArrayToPWLColor(array, var);\ - }\ - return TRUE;\ -} +#define JS_IMPLEMENT_COLORPROP(prop, var) \ + FX_BOOL color::prop(IFXJS_Context* cc, CJS_PropValue& vp, \ + CFX_WideString& sError) { \ + CJS_Context* pContext = (CJS_Context*)cc; \ + v8::Isolate* isolate = pContext->GetJSRuntime()->GetIsolate(); \ + if (vp.IsGetting()) { \ + CJS_Array array(isolate); \ + ConvertPWLColorToArray(var, array); \ + vp << array; \ + } else { \ + CJS_Array array(isolate); \ + if (!vp.ConvertToArray(array)) \ + return FALSE; \ + ConvertArrayToPWLColor(array, var); \ + } \ + return TRUE; \ + } JS_IMPLEMENT_COLORPROP(transparent, m_crTransparent) JS_IMPLEMENT_COLORPROP(black, m_crBlack) @@ -187,65 +169,66 @@ JS_IMPLEMENT_COLORPROP(dkGray, m_crDKGray) JS_IMPLEMENT_COLORPROP(gray, m_crGray) JS_IMPLEMENT_COLORPROP(ltGray, m_crLTGray) -FX_BOOL color::convert(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = GetIsolate(cc); - int iSize = params.size(); - if (iSize < 2) return FALSE; - CJS_Array aSource(isolate); - if (!params[0].ConvertToArray(aSource)) return FALSE; - - CPWL_Color crSource; - ConvertArrayToPWLColor(aSource, crSource); - - CFX_ByteString sDestSpace = params[1].ToCFXByteString(); - int nColorType = COLORTYPE_TRANSPARENT; - - if (sDestSpace == "T") - { - nColorType = COLORTYPE_TRANSPARENT; - } - else if (sDestSpace == "G") - { - nColorType = COLORTYPE_GRAY; - } - else if (sDestSpace == "RGB") - { - nColorType = COLORTYPE_RGB; - } - else if (sDestSpace == "CMYK") - { - nColorType = COLORTYPE_CMYK; - } - - CJS_Array aDest(isolate); - CPWL_Color crDest = crSource; - crDest.ConvertColorType(nColorType); - ConvertPWLColorToArray(crDest, aDest); - vRet = aDest; - - return TRUE; +FX_BOOL color::convert(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = GetIsolate(cc); + int iSize = params.size(); + if (iSize < 2) + return FALSE; + CJS_Array aSource(isolate); + if (!params[0].ConvertToArray(aSource)) + return FALSE; + + CPWL_Color crSource; + ConvertArrayToPWLColor(aSource, crSource); + + CFX_ByteString sDestSpace = params[1].ToCFXByteString(); + int nColorType = COLORTYPE_TRANSPARENT; + + if (sDestSpace == "T") { + nColorType = COLORTYPE_TRANSPARENT; + } else if (sDestSpace == "G") { + nColorType = COLORTYPE_GRAY; + } else if (sDestSpace == "RGB") { + nColorType = COLORTYPE_RGB; + } else if (sDestSpace == "CMYK") { + nColorType = COLORTYPE_CMYK; + } + + CJS_Array aDest(isolate); + CPWL_Color crDest = crSource; + crDest.ConvertColorType(nColorType); + ConvertPWLColorToArray(crDest, aDest); + vRet = aDest; + + return TRUE; } -FX_BOOL color::equal(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = GetIsolate(cc); - if (params.size() < 2) return FALSE; +FX_BOOL color::equal(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = GetIsolate(cc); + if (params.size() < 2) + return FALSE; - CJS_Array array1(isolate), array2(isolate); + CJS_Array array1(isolate), array2(isolate); - if (!params[0].ConvertToArray(array1)) return FALSE; - if (!params[1].ConvertToArray(array2)) return FALSE; + if (!params[0].ConvertToArray(array1)) + return FALSE; + if (!params[1].ConvertToArray(array2)) + return FALSE; - CPWL_Color color1; - CPWL_Color color2; + CPWL_Color color1; + CPWL_Color color2; - ConvertArrayToPWLColor(array1, color1); - ConvertArrayToPWLColor(array2, color2); + ConvertArrayToPWLColor(array1, color1); + ConvertArrayToPWLColor(array2, color2); - color1.ConvertColorType(color2.nColorType); + color1.ConvertColorType(color2.nColorType); - vRet = color1 == color2; - return TRUE; + vRet = color1 == color2; + return TRUE; } - diff --git a/fpdfsdk/src/javascript/console.cpp b/fpdfsdk/src/javascript/console.cpp index ed9b1fbc56..cc64e1091b 100644 --- a/fpdfsdk/src/javascript/console.cpp +++ b/fpdfsdk/src/javascript/console.cpp @@ -22,45 +22,45 @@ BEGIN_JS_STATIC_PROP(CJS_Console) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_Console) - JS_STATIC_METHOD_ENTRY(clear) - JS_STATIC_METHOD_ENTRY(hide) - JS_STATIC_METHOD_ENTRY(println) - JS_STATIC_METHOD_ENTRY(show) +JS_STATIC_METHOD_ENTRY(clear) +JS_STATIC_METHOD_ENTRY(hide) +JS_STATIC_METHOD_ENTRY(println) +JS_STATIC_METHOD_ENTRY(show) END_JS_STATIC_METHOD() -IMPLEMENT_JS_CLASS(CJS_Console,console) +IMPLEMENT_JS_CLASS(CJS_Console, console) -console::console(CJS_Object* pJSObject): CJS_EmbedObj(pJSObject) -{ -} +console::console(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {} -console::~console() -{ -} +console::~console() {} -FX_BOOL console::clear(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL console::clear(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL console::hide(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL console::hide(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } -FX_BOOL console::println(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - if (params.size() < 1) - { - return FALSE; - } - return TRUE; +FX_BOOL console::println(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + if (params.size() < 1) { + return FALSE; + } + return TRUE; } -FX_BOOL console::show(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - return TRUE; +FX_BOOL console::show(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + return TRUE; } - - - diff --git a/fpdfsdk/src/javascript/event.cpp b/fpdfsdk/src/javascript/event.cpp index f57b1fb607..4bcdcce3a0 100644 --- a/fpdfsdk/src/javascript/event.cpp +++ b/fpdfsdk/src/javascript/event.cpp @@ -21,359 +21,359 @@ BEGIN_JS_STATIC_CONST(CJS_Event) END_JS_STATIC_CONST() BEGIN_JS_STATIC_PROP(CJS_Event) - JS_STATIC_PROP_ENTRY(change) - JS_STATIC_PROP_ENTRY(changeEx) - JS_STATIC_PROP_ENTRY(commitKey) - JS_STATIC_PROP_ENTRY(fieldFull) - JS_STATIC_PROP_ENTRY(keyDown) - JS_STATIC_PROP_ENTRY(modifier) - JS_STATIC_PROP_ENTRY(name) - JS_STATIC_PROP_ENTRY(rc) - JS_STATIC_PROP_ENTRY(richChange) - JS_STATIC_PROP_ENTRY(richChangeEx) - JS_STATIC_PROP_ENTRY(richValue) - JS_STATIC_PROP_ENTRY(selEnd) - JS_STATIC_PROP_ENTRY(selStart) - JS_STATIC_PROP_ENTRY(shift) - JS_STATIC_PROP_ENTRY(source) - JS_STATIC_PROP_ENTRY(target) - JS_STATIC_PROP_ENTRY(targetName) - JS_STATIC_PROP_ENTRY(type) - JS_STATIC_PROP_ENTRY(value) - JS_STATIC_PROP_ENTRY(willCommit) +JS_STATIC_PROP_ENTRY(change) +JS_STATIC_PROP_ENTRY(changeEx) +JS_STATIC_PROP_ENTRY(commitKey) +JS_STATIC_PROP_ENTRY(fieldFull) +JS_STATIC_PROP_ENTRY(keyDown) +JS_STATIC_PROP_ENTRY(modifier) +JS_STATIC_PROP_ENTRY(name) +JS_STATIC_PROP_ENTRY(rc) +JS_STATIC_PROP_ENTRY(richChange) +JS_STATIC_PROP_ENTRY(richChangeEx) +JS_STATIC_PROP_ENTRY(richValue) +JS_STATIC_PROP_ENTRY(selEnd) +JS_STATIC_PROP_ENTRY(selStart) +JS_STATIC_PROP_ENTRY(shift) +JS_STATIC_PROP_ENTRY(source) +JS_STATIC_PROP_ENTRY(target) +JS_STATIC_PROP_ENTRY(targetName) +JS_STATIC_PROP_ENTRY(type) +JS_STATIC_PROP_ENTRY(value) +JS_STATIC_PROP_ENTRY(willCommit) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_Event) END_JS_STATIC_METHOD() -IMPLEMENT_JS_CLASS(CJS_Event,event) +IMPLEMENT_JS_CLASS(CJS_Event, event) -event::event(CJS_Object * pJsObject) : CJS_EmbedObj(pJsObject) -{ -} +event::event(CJS_Object* pJsObject) : CJS_EmbedObj(pJsObject) {} -event::~event(void) -{ -} +event::~event(void) {} -FX_BOOL event::change(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - CFX_WideString &wChange = pEvent->Change(); - if (vp.IsSetting()) - { - if (vp.GetType() == VT_string) - vp >> wChange; - } - else - { - vp << wChange; - } - return TRUE; +FX_BOOL event::change(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + CFX_WideString& wChange = pEvent->Change(); + if (vp.IsSetting()) { + if (vp.GetType() == VT_string) + vp >> wChange; + } else { + vp << wChange; + } + return TRUE; } -FX_BOOL event::changeEx(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; +FX_BOOL event::changeEx(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); - vp << pEvent->ChangeEx(); - return TRUE; + vp << pEvent->ChangeEx(); + return TRUE; } -FX_BOOL event::commitKey(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; +FX_BOOL event::commitKey(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); - vp << pEvent->CommitKey(); - return TRUE; + vp << pEvent->CommitKey(); + return TRUE; } -FX_BOOL event::fieldFull(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (!vp.IsGetting() && wcscmp((const wchar_t*)pEvent->Name(),L"Keystroke") != 0) - return FALSE; - - if (pEvent->FieldFull()) - vp << TRUE; - else - vp << FALSE; - return TRUE; +FX_BOOL event::fieldFull(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (!vp.IsGetting() && + wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) + return FALSE; + + if (pEvent->FieldFull()) + vp << TRUE; + else + vp << FALSE; + return TRUE; } -FX_BOOL event::keyDown(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; - - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (pEvent->KeyDown()) - vp << TRUE; - else - vp << FALSE; - return TRUE; +FX_BOOL event::keyDown(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; + + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (pEvent->KeyDown()) + vp << TRUE; + else + vp << FALSE; + return TRUE; } -FX_BOOL event::modifier(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; - - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (pEvent->Modifier()) - vp << TRUE; - else - vp << FALSE; - return TRUE; +FX_BOOL event::modifier(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; + + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (pEvent->Modifier()) + vp << TRUE; + else + vp << FALSE; + return TRUE; } -FX_BOOL event::name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; +FX_BOOL event::name(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); - vp << pEvent->Name(); - return TRUE; + vp << pEvent->Name(); + return TRUE; } -FX_BOOL event::rc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - FX_BOOL &bRc = pEvent->Rc(); - if (vp.IsSetting()) - { - vp>>bRc; - } - else - { - vp<GetEventHandler(); + ASSERT(pEvent != NULL); + + FX_BOOL& bRc = pEvent->Rc(); + if (vp.IsSetting()) { + vp >> bRc; + } else { + vp << bRc; + } + return TRUE; } -FX_BOOL event::richChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; - if (vp.IsSetting()) - { - } - else - { - ; - } - return TRUE; +FX_BOOL event::richChange(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; + if (vp.IsSetting()) { + } else { + ; + } + return TRUE; } -FX_BOOL event::richChangeEx(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; - if (vp.IsSetting()) - { - } - else - { - ; - } - return TRUE; +FX_BOOL event::richChangeEx(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; + if (vp.IsSetting()) { + } else { + ; + } + return TRUE; } - -FX_BOOL event::richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - return TRUE; - if (vp.IsSetting()) - { - } - else - { - ; - } - return TRUE; +FX_BOOL event::richValue(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + return TRUE; + if (vp.IsSetting()) { + } else { + ; + } + return TRUE; } -FX_BOOL event::selEnd(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (wcscmp((const wchar_t*)pEvent->Name(),L"Keystroke") != 0) - { - return TRUE; - } - - int &iSelEnd = pEvent->SelEnd(); - if (vp.IsSetting()) - { - vp >> iSelEnd; - } - else - { - vp << iSelEnd; - } - return TRUE; +FX_BOOL event::selEnd(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) { + return TRUE; + } + + int& iSelEnd = pEvent->SelEnd(); + if (vp.IsSetting()) { + vp >> iSelEnd; + } else { + vp << iSelEnd; + } + return TRUE; } -FX_BOOL event::selStart(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (wcscmp((const wchar_t*)pEvent->Name(),L"Keystroke") != 0) - { - return TRUE; - } - int &iSelStart = pEvent->SelStart(); - if (vp.IsSetting()) - { - vp >> iSelStart; - } - else - { - vp << iSelStart; - } - return TRUE; +FX_BOOL event::selStart(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) { + return TRUE; + } + int& iSelStart = pEvent->SelStart(); + if (vp.IsSetting()) { + vp >> iSelStart; + } else { + vp << iSelStart; + } + return TRUE; } -FX_BOOL event::shift(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; - - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (pEvent->Shift()) - vp << TRUE; - else - vp << FALSE; - return TRUE; +FX_BOOL event::shift(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; + + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (pEvent->Shift()) + vp << TRUE; + else + vp << FALSE; + return TRUE; } -FX_BOOL event::source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; +FX_BOOL event::source(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); - vp << pEvent->Source()->GetJSObject(); - return TRUE; + vp << pEvent->Source()->GetJSObject(); + return TRUE; } -FX_BOOL event::target(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; +FX_BOOL event::target(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); - vp<Target_Field()->GetJSObject(); - return TRUE; + vp << pEvent->Target_Field()->GetJSObject(); + return TRUE; } -FX_BOOL event::targetName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; +FX_BOOL event::targetName(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); - vp << pEvent->TargetName(); - return TRUE; + vp << pEvent->TargetName(); + return TRUE; } -FX_BOOL event::type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; +FX_BOOL event::type(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); - vp << pEvent->Type(); - return TRUE; + vp << pEvent->Type(); + return TRUE; } -FX_BOOL event::value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (wcscmp((const wchar_t*)pEvent->Type(),L"Field") != 0) - return FALSE; - if(!pEvent->m_pValue) - return FALSE; - CFX_WideString & val = pEvent->Value(); - if (vp.IsSetting()) - { - vp >> val; - } - else - { - vp << val; - } - return TRUE; +FX_BOOL event::value(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (wcscmp((const wchar_t*)pEvent->Type(), L"Field") != 0) + return FALSE; + if (!pEvent->m_pValue) + return FALSE; + CFX_WideString& val = pEvent->Value(); + if (vp.IsSetting()) { + vp >> val; + } else { + vp << val; + } + return TRUE; } -FX_BOOL event::willCommit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (!vp.IsGetting())return FALSE; - - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - CJS_EventHandler* pEvent = pContext->GetEventHandler(); - ASSERT(pEvent != NULL); - - if (pEvent->WillCommit()) - vp << TRUE; - else - vp << FALSE; - return TRUE; +FX_BOOL event::willCommit(IFXJS_Context* cc, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (!vp.IsGetting()) + return FALSE; + + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); + CJS_EventHandler* pEvent = pContext->GetEventHandler(); + ASSERT(pEvent != NULL); + + if (pEvent->WillCommit()) + vp << TRUE; + else + vp << FALSE; + return TRUE; } - diff --git a/fpdfsdk/src/javascript/global.cpp b/fpdfsdk/src/javascript/global.cpp index 9733d811fa..c3bf837727 100644 --- a/fpdfsdk/src/javascript/global.cpp +++ b/fpdfsdk/src/javascript/global.cpp @@ -40,51 +40,46 @@ struct CHash { }; extern const unsigned int JSCONST_nStringHash = - CHash<'s','t','r','i','n','g'>::value; + CHash<'s', 't', 'r', 'i', 'n', 'g'>::value; extern const unsigned int JSCONST_nNumberHash = - CHash<'n','u','m','b','e','r'>::value; + CHash<'n', 'u', 'm', 'b', 'e', 'r'>::value; extern const unsigned int JSCONST_nBoolHash = - CHash<'b','o','o','l','e','a','n'>::value; -extern const unsigned int JSCONST_nDateHash = - CHash<'d','a','t','e'>::value; + CHash<'b', 'o', 'o', 'l', 'e', 'a', 'n'>::value; +extern const unsigned int JSCONST_nDateHash = CHash<'d', 'a', 't', 'e'>::value; extern const unsigned int JSCONST_nObjectHash = - CHash<'o','b','j','e','c','t'>::value; + CHash<'o', 'b', 'j', 'e', 'c', 't'>::value; extern const unsigned int JSCONST_nFXobjHash = - CHash<'f','x','o','b','j'>::value; -extern const unsigned int JSCONST_nNullHash = - CHash<'n','u','l','l'>::value; + CHash<'f', 'x', 'o', 'b', 'j'>::value; +extern const unsigned int JSCONST_nNullHash = CHash<'n', 'u', 'l', 'l'>::value; extern const unsigned int JSCONST_nUndefHash = - CHash<'u','n','d','e','f','i','n','e','d'>::value; + CHash<'u', 'n', 'd', 'e', 'f', 'i', 'n', 'e', 'd'>::value; #ifdef _DEBUG -class HashVerify -{ -public: +class HashVerify { + public: HashVerify(); } g_hashVerify; -HashVerify::HashVerify() -{ +HashVerify::HashVerify() { ASSERT(JSCONST_nStringHash == - JS_CalcHash(VALUE_NAME_STRING,wcslen(VALUE_NAME_STRING))); + JS_CalcHash(VALUE_NAME_STRING, wcslen(VALUE_NAME_STRING))); ASSERT(JSCONST_nNumberHash == - JS_CalcHash(VALUE_NAME_NUMBER,wcslen(VALUE_NAME_NUMBER))); + JS_CalcHash(VALUE_NAME_NUMBER, wcslen(VALUE_NAME_NUMBER))); ASSERT(JSCONST_nBoolHash == - JS_CalcHash(VALUE_NAME_BOOLEAN,wcslen(VALUE_NAME_BOOLEAN))); + JS_CalcHash(VALUE_NAME_BOOLEAN, wcslen(VALUE_NAME_BOOLEAN))); ASSERT(JSCONST_nDateHash == - JS_CalcHash(VALUE_NAME_DATE,wcslen(VALUE_NAME_DATE))); + JS_CalcHash(VALUE_NAME_DATE, wcslen(VALUE_NAME_DATE))); ASSERT(JSCONST_nObjectHash == - JS_CalcHash(VALUE_NAME_OBJECT,wcslen(VALUE_NAME_OBJECT))); + JS_CalcHash(VALUE_NAME_OBJECT, wcslen(VALUE_NAME_OBJECT))); ASSERT(JSCONST_nFXobjHash == - JS_CalcHash(VALUE_NAME_FXOBJ,wcslen(VALUE_NAME_FXOBJ))); + JS_CalcHash(VALUE_NAME_FXOBJ, wcslen(VALUE_NAME_FXOBJ))); ASSERT(JSCONST_nNullHash == - JS_CalcHash(VALUE_NAME_NULL,wcslen(VALUE_NAME_NULL))); + JS_CalcHash(VALUE_NAME_NULL, wcslen(VALUE_NAME_NULL))); ASSERT(JSCONST_nUndefHash == - JS_CalcHash(VALUE_NAME_UNDEFINED,wcslen(VALUE_NAME_UNDEFINED))); + JS_CalcHash(VALUE_NAME_UNDEFINED, wcslen(VALUE_NAME_UNDEFINED))); } #endif - BEGIN_JS_STATIC_CONST(CJS_Global) END_JS_STATIC_CONST() @@ -92,500 +87,465 @@ BEGIN_JS_STATIC_PROP(CJS_Global) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_Global) - JS_STATIC_METHOD_ENTRY(setPersistent) +JS_STATIC_METHOD_ENTRY(setPersistent) END_JS_STATIC_METHOD() IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, global_alternate, global); -FX_BOOL CJS_Global::InitInstance(IFXJS_Context* cc) -{ - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); +FX_BOOL CJS_Global::InitInstance(IFXJS_Context* cc) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - global_alternate* pGlobal = (global_alternate*)GetEmbedObject(); - ASSERT(pGlobal != NULL); + global_alternate* pGlobal = (global_alternate*)GetEmbedObject(); + ASSERT(pGlobal != NULL); - pGlobal->Initial(pContext->GetReaderApp()); + pGlobal->Initial(pContext->GetReaderApp()); - return TRUE; + return TRUE; }; global_alternate::global_alternate(CJS_Object* pJSObject) - : CJS_EmbedObj(pJSObject), - m_pApp(NULL) -{ -} + : CJS_EmbedObj(pJSObject), m_pApp(NULL) {} -global_alternate::~global_alternate(void) -{ - DestroyGlobalPersisitentVariables(); - CPDFXFA_App::GetInstance()->GetRuntimeFactory()->ReleaseGlobalData(); +global_alternate::~global_alternate(void) { + DestroyGlobalPersisitentVariables(); + CPDFXFA_App::GetInstance()->GetRuntimeFactory()->ReleaseGlobalData(); } -void global_alternate::Initial(CPDFDoc_Environment* pApp) -{ - m_pApp = pApp; - m_pGlobalData = CPDFXFA_App::GetInstance()->GetRuntimeFactory()->NewGlobalData(pApp); - UpdateGlobalPersistentVariables(); +void global_alternate::Initial(CPDFDoc_Environment* pApp) { + m_pApp = pApp; + m_pGlobalData = + CPDFXFA_App::GetInstance()->GetRuntimeFactory()->NewGlobalData(pApp); + UpdateGlobalPersistentVariables(); } -FX_BOOL global_alternate::QueryProperty(const FX_WCHAR* propname) -{ - return CFX_WideString(propname) != L"setPersistent"; +FX_BOOL global_alternate::QueryProperty(const FX_WCHAR* propname) { + return CFX_WideString(propname) != L"setPersistent"; } -FX_BOOL global_alternate::DelProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CFX_WideString& sError) -{ - js_global_data* pData = NULL; - CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); +FX_BOOL global_alternate::DelProperty(IFXJS_Context* cc, + const FX_WCHAR* propname, + CFX_WideString& sError) { + js_global_data* pData = NULL; + CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); - if (m_mapGlobal.Lookup(sPropName, (void*&)pData)) - { - pData->bDeleted = TRUE; - return TRUE; - } + if (m_mapGlobal.Lookup(sPropName, (void*&)pData)) { + pData->bDeleted = TRUE; + return TRUE; + } - return FALSE; + return FALSE; } -FX_BOOL global_alternate::DoProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CJS_PropValue& vp, CFX_WideString& sError) -{ - if (vp.IsSetting()) - { - CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); - switch (vp.GetType()) - { - case VT_number: - { - double dData; - vp >> dData; - return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NUMBER, dData, false, "", v8::Local(), FALSE); - } - case VT_boolean: - { - bool bData; - vp >> bData; - return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, bData, "", v8::Local(), FALSE); - } - case VT_string: - { - CFX_ByteString sData; - vp >> sData; - return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0, false, sData, v8::Local(), FALSE); - } - case VT_object: - { - JSObject pData; - vp >> pData; - return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, false, "", pData, FALSE); - } - case VT_null: - { - return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false, "", v8::Local(), FALSE); - } - case VT_undefined: - { - DelProperty(cc, propname, sError); - return TRUE; - } - default: - break; - } +FX_BOOL global_alternate::DoProperty(IFXJS_Context* cc, + const FX_WCHAR* propname, + CJS_PropValue& vp, + CFX_WideString& sError) { + if (vp.IsSetting()) { + CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); + switch (vp.GetType()) { + case VT_number: { + double dData; + vp >> dData; + return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NUMBER, dData, + false, "", v8::Local(), FALSE); + } + case VT_boolean: { + bool bData; + vp >> bData; + return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, + bData, "", v8::Local(), FALSE); + } + case VT_string: { + CFX_ByteString sData; + vp >> sData; + return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0, + false, sData, v8::Local(), FALSE); + } + case VT_object: { + JSObject pData; + vp >> pData; + return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, + false, "", pData, FALSE); + } + case VT_null: { + return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false, + "", v8::Local(), FALSE); + } + case VT_undefined: { + DelProperty(cc, propname, sError); + return TRUE; + } + default: + break; } - else - { - void* pVoid = nullptr; - if (!m_mapGlobal.Lookup(CFX_ByteString::FromUnicode(propname), pVoid)) - { - vp.SetNull(); - return TRUE; - } - if (!pVoid) - { - vp.SetNull(); - return TRUE; - } - js_global_data* pData = (js_global_data*)pVoid; - if (pData->bDeleted) - return TRUE; - - switch (pData->nType) - { - case JS_GLOBALDATA_TYPE_NUMBER: - vp << pData->dData; - return TRUE; - case JS_GLOBALDATA_TYPE_BOOLEAN: - vp << pData->bData; - return TRUE; - case JS_GLOBALDATA_TYPE_STRING: - vp << pData->sData; - return TRUE; - case JS_GLOBALDATA_TYPE_OBJECT: - { - v8::Local obj = v8::Local::New(vp.GetIsolate(),pData->pData); - vp << obj; - return TRUE; - } - case JS_GLOBALDATA_TYPE_NULL: - vp.SetNull(); - return TRUE; - default: - break; - } + } else { + void* pVoid = nullptr; + if (!m_mapGlobal.Lookup(CFX_ByteString::FromUnicode(propname), pVoid)) { + vp.SetNull(); + return TRUE; } - return FALSE; -} - -FX_BOOL global_alternate::setPersistent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - CJS_Context* pContext = static_cast(cc); - if (params.size() != 2) - { - sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); - return FALSE; + if (!pVoid) { + vp.SetNull(); + return TRUE; } + js_global_data* pData = (js_global_data*)pVoid; + if (pData->bDeleted) + return TRUE; - CFX_ByteString sName = params[0].ToCFXByteString(); - - js_global_data* pData = NULL; - if (m_mapGlobal.Lookup(sName, (void*&)pData)) - { - if (pData && !pData->bDeleted) - { - pData->bPersistent = params[1].ToBool(); - return TRUE; - } + switch (pData->nType) { + case JS_GLOBALDATA_TYPE_NUMBER: + vp << pData->dData; + return TRUE; + case JS_GLOBALDATA_TYPE_BOOLEAN: + vp << pData->bData; + return TRUE; + case JS_GLOBALDATA_TYPE_STRING: + vp << pData->sData; + return TRUE; + case JS_GLOBALDATA_TYPE_OBJECT: { + v8::Local obj = + v8::Local::New(vp.GetIsolate(), pData->pData); + vp << obj; + return TRUE; + } + case JS_GLOBALDATA_TYPE_NULL: + vp.SetNull(); + return TRUE; + default: + break; } - - sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL); - return FALSE; + } + return FALSE; } -void global_alternate::UpdateGlobalPersistentVariables() -{ - ASSERT(m_pGlobalData != NULL); - - for (int i=0,sz=m_pGlobalData->GetSize(); iGetAt(i); - ASSERT(pData != NULL); - - switch (pData->data.nType) - { - case JS_GLOBALDATA_TYPE_NUMBER: - SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, pData->data.dData, false, "", v8::Local(), pData->bPersistent == 1); - JS_PutObjectNumber(NULL,(JSFXObject)(*m_pJSObject), - pData->data.sKey.UTF8Decode().c_str(), pData->data.dData); - break; - case JS_GLOBALDATA_TYPE_BOOLEAN: - SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, (bool)(pData->data.bData == 1), "", v8::Local(), pData->bPersistent == 1); - JS_PutObjectBoolean(NULL,(JSFXObject)(*m_pJSObject), - pData->data.sKey.UTF8Decode().c_str(), (bool)(pData->data.bData == 1)); - break; - case JS_GLOBALDATA_TYPE_STRING: - SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, false, pData->data.sData, v8::Local(), pData->bPersistent == 1); - JS_PutObjectString(NULL, (JSFXObject)(*m_pJSObject), - pData->data.sKey.UTF8Decode().c_str(), - pData->data.sData.UTF8Decode().c_str()); - break; - case JS_GLOBALDATA_TYPE_OBJECT: - { - IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject)); - v8::Local pObj = JS_NewFxDynamicObj(pRuntime, NULL, -1); +FX_BOOL global_alternate::setPersistent(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + CJS_Context* pContext = static_cast(cc); + if (params.size() != 2) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } - PutObjectProperty(pObj, &pData->data); + CFX_ByteString sName = params[0].ToCFXByteString(); - SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, false, "", - (JSObject)pObj, pData->bPersistent == 1); - JS_PutObjectObject(NULL,(JSFXObject)(*m_pJSObject), - pData->data.sKey.UTF8Decode().c_str(), (JSObject)pObj); - } - break; - case JS_GLOBALDATA_TYPE_NULL: - SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, "", v8::Local(), pData->bPersistent == 1); - JS_PutObjectNull(NULL,(JSFXObject)(*m_pJSObject), - pData->data.sKey.UTF8Decode().c_str()); - break; - } + js_global_data* pData = NULL; + if (m_mapGlobal.Lookup(sName, (void*&)pData)) { + if (pData && !pData->bDeleted) { + pData->bPersistent = params[1].ToBool(); + return TRUE; } -} + } -void global_alternate::CommitGlobalPersisitentVariables() -{ - ASSERT(m_pGlobalData != NULL); - - FX_POSITION pos = m_mapGlobal.GetStartPosition(); - while (pos) - { - CFX_ByteString name; - js_global_data* pData = NULL; - m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData); - - if (pData) - { - if (pData->bDeleted) - { - m_pGlobalData->DeleteGlobalVariable(name); - } - else - { - switch (pData->nType) - { - case JS_GLOBALDATA_TYPE_NUMBER: - m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); - m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); - break; - case JS_GLOBALDATA_TYPE_BOOLEAN: - m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); - m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); - break; - case JS_GLOBALDATA_TYPE_STRING: - m_pGlobalData->SetGlobalVariableString(name, pData->sData); - m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); - break; - case JS_GLOBALDATA_TYPE_OBJECT: - //if (pData->pData) - { - CJS_GlobalVariableArray array; - v8::Local obj = v8::Local::New(GetJSObject()->GetIsolate(),pData->pData); - ObjectToArray(obj, array); - m_pGlobalData->SetGlobalVariableObject(name, array); - m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); - } - break; - case JS_GLOBALDATA_TYPE_NULL: - m_pGlobalData->SetGlobalVariableNull(name); - m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); - break; - } - } - } - } + sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL); + return FALSE; } -void global_alternate::ObjectToArray(v8::Local pObj, CJS_GlobalVariableArray& array) -{ - v8::Local context = pObj->CreationContext(); - v8::Isolate* isolate = context->GetIsolate(); - v8::Local pKeyList = JS_GetObjectElementNames(isolate, pObj); - int nObjElements = pKeyList->Length(); +void global_alternate::UpdateGlobalPersistentVariables() { + ASSERT(m_pGlobalData != NULL); - for (int i=0; iGetSize(); i < sz; i++) { + CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i); + ASSERT(pData != NULL); - v8::Local v = JS_GetObjectElement(isolate, pObj, ws.c_str()); - FXJSVALUETYPE vt = GET_VALUE_TYPE(v); - switch (vt) - { - case VT_number: - { - CJS_KeyValue* pObjElement = new CJS_KeyValue; - pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER; - pObjElement->sKey = sKey; - pObjElement->dData = JS_ToNumber(isolate, v); - array.Add(pObjElement); - } - break; - case VT_boolean: - { - CJS_KeyValue* pObjElement = new CJS_KeyValue; - pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN; - pObjElement->sKey = sKey; - pObjElement->dData = JS_ToBoolean(isolate, v); - array.Add(pObjElement); - } - break; - case VT_string: - { - CFX_ByteString sValue = CJS_Value(isolate, v, VT_string).ToCFXByteString(); - CJS_KeyValue* pObjElement = new CJS_KeyValue; - pObjElement->nType = JS_GLOBALDATA_TYPE_STRING; - pObjElement->sKey = sKey; - pObjElement->sData = sValue; - array.Add(pObjElement); - } - break; - case VT_object: - { - CJS_KeyValue* pObjElement = new CJS_KeyValue; - pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT; - pObjElement->sKey = sKey; - ObjectToArray(JS_ToObject(isolate, v), pObjElement->objData); - array.Add(pObjElement); - } - break; - case VT_null: - { - CJS_KeyValue* pObjElement = new CJS_KeyValue; - pObjElement->nType = JS_GLOBALDATA_TYPE_NULL; - pObjElement->sKey = sKey; - array.Add(pObjElement); - } - break; - default: - break; - } + switch (pData->data.nType) { + case JS_GLOBALDATA_TYPE_NUMBER: + SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, + pData->data.dData, false, "", + v8::Local(), pData->bPersistent == 1); + JS_PutObjectNumber(NULL, (JSFXObject)(*m_pJSObject), + pData->data.sKey.UTF8Decode().c_str(), + pData->data.dData); + break; + case JS_GLOBALDATA_TYPE_BOOLEAN: + SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, + (bool)(pData->data.bData == 1), "", + v8::Local(), pData->bPersistent == 1); + JS_PutObjectBoolean(NULL, (JSFXObject)(*m_pJSObject), + pData->data.sKey.UTF8Decode().c_str(), + (bool)(pData->data.bData == 1)); + break; + case JS_GLOBALDATA_TYPE_STRING: + SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, + false, pData->data.sData, v8::Local(), + pData->bPersistent == 1); + JS_PutObjectString(NULL, (JSFXObject)(*m_pJSObject), + pData->data.sKey.UTF8Decode().c_str(), + pData->data.sData.UTF8Decode().c_str()); + break; + case JS_GLOBALDATA_TYPE_OBJECT: { + IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject)); + v8::Local pObj = JS_NewFxDynamicObj(pRuntime, NULL, -1); + + PutObjectProperty(pObj, &pData->data); + + SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, + false, "", (JSObject)pObj, pData->bPersistent == 1); + JS_PutObjectObject(NULL, (JSFXObject)(*m_pJSObject), + pData->data.sKey.UTF8Decode().c_str(), + (JSObject)pObj); + } break; + case JS_GLOBALDATA_TYPE_NULL: + SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, + "", v8::Local(), + pData->bPersistent == 1); + JS_PutObjectNull(NULL, (JSFXObject)(*m_pJSObject), + pData->data.sKey.UTF8Decode().c_str()); + break; } + } } -void global_alternate::PutObjectProperty(v8::Local pObj, CJS_KeyValue* pData) -{ - ASSERT(pData != NULL); - - for (int i=0,sz=pData->objData.Count(); iobjData.GetAt(i); - ASSERT(pObjData != NULL); +void global_alternate::CommitGlobalPersisitentVariables() { + ASSERT(m_pGlobalData != NULL); - switch (pObjData->nType) - { - case JS_GLOBALDATA_TYPE_NUMBER: - JS_PutObjectNumber(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode().c_str(), pObjData->dData); + FX_POSITION pos = m_mapGlobal.GetStartPosition(); + while (pos) { + CFX_ByteString name; + js_global_data* pData = NULL; + m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData); + + if (pData) { + if (pData->bDeleted) { + m_pGlobalData->DeleteGlobalVariable(name); + } else { + switch (pData->nType) { + case JS_GLOBALDATA_TYPE_NUMBER: + m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); + m_pGlobalData->SetGlobalVariablePersistent(name, + pData->bPersistent); break; - case JS_GLOBALDATA_TYPE_BOOLEAN: - JS_PutObjectBoolean(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode().c_str(), (bool)(pObjData->bData == 1)); + case JS_GLOBALDATA_TYPE_BOOLEAN: + m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); + m_pGlobalData->SetGlobalVariablePersistent(name, + pData->bPersistent); break; - case JS_GLOBALDATA_TYPE_STRING: - JS_PutObjectString(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode().c_str(), pObjData->sData.UTF8Decode().c_str()); + case JS_GLOBALDATA_TYPE_STRING: + m_pGlobalData->SetGlobalVariableString(name, pData->sData); + m_pGlobalData->SetGlobalVariablePersistent(name, + pData->bPersistent); break; - case JS_GLOBALDATA_TYPE_OBJECT: + case JS_GLOBALDATA_TYPE_OBJECT: + // if (pData->pData) { - IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject)); - v8::Local pNewObj = JS_NewFxDynamicObj(pRuntime, NULL, -1); - PutObjectProperty(pNewObj, pObjData); - JS_PutObjectObject(NULL, (JSObject)pObj, pObjData->sKey.UTF8Decode().c_str(), (JSObject)pNewObj); + CJS_GlobalVariableArray array; + v8::Local obj = v8::Local::New( + GetJSObject()->GetIsolate(), pData->pData); + ObjectToArray(obj, array); + m_pGlobalData->SetGlobalVariableObject(name, array); + m_pGlobalData->SetGlobalVariablePersistent(name, + pData->bPersistent); } break; - case JS_GLOBALDATA_TYPE_NULL: - JS_PutObjectNull(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode().c_str()); + case JS_GLOBALDATA_TYPE_NULL: + m_pGlobalData->SetGlobalVariableNull(name); + m_pGlobalData->SetGlobalVariablePersistent(name, + pData->bPersistent); break; } + } } + } } -void global_alternate::DestroyGlobalPersisitentVariables() -{ - FX_POSITION pos = m_mapGlobal.GetStartPosition(); - while (pos) - { - CFX_ByteString name; - js_global_data* pData = NULL; - m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData); - delete pData; +void global_alternate::ObjectToArray(v8::Local pObj, + CJS_GlobalVariableArray& array) { + v8::Local context = pObj->CreationContext(); + v8::Isolate* isolate = context->GetIsolate(); + v8::Local pKeyList = JS_GetObjectElementNames(isolate, pObj); + int nObjElements = pKeyList->Length(); + + for (int i = 0; i < nObjElements; i++) { + CFX_WideString ws = + JS_ToString(isolate, JS_GetArrayElement(isolate, pKeyList, i)); + CFX_ByteString sKey = ws.UTF8Encode(); + + v8::Local v = JS_GetObjectElement(isolate, pObj, ws.c_str()); + FXJSVALUETYPE vt = GET_VALUE_TYPE(v); + switch (vt) { + case VT_number: { + CJS_KeyValue* pObjElement = new CJS_KeyValue; + pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER; + pObjElement->sKey = sKey; + pObjElement->dData = JS_ToNumber(isolate, v); + array.Add(pObjElement); + } break; + case VT_boolean: { + CJS_KeyValue* pObjElement = new CJS_KeyValue; + pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN; + pObjElement->sKey = sKey; + pObjElement->dData = JS_ToBoolean(isolate, v); + array.Add(pObjElement); + } break; + case VT_string: { + CFX_ByteString sValue = + CJS_Value(isolate, v, VT_string).ToCFXByteString(); + CJS_KeyValue* pObjElement = new CJS_KeyValue; + pObjElement->nType = JS_GLOBALDATA_TYPE_STRING; + pObjElement->sKey = sKey; + pObjElement->sData = sValue; + array.Add(pObjElement); + } break; + case VT_object: { + CJS_KeyValue* pObjElement = new CJS_KeyValue; + pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT; + pObjElement->sKey = sKey; + ObjectToArray(JS_ToObject(isolate, v), pObjElement->objData); + array.Add(pObjElement); + } break; + case VT_null: { + CJS_KeyValue* pObjElement = new CJS_KeyValue; + pObjElement->nType = JS_GLOBALDATA_TYPE_NULL; + pObjElement->sKey = sKey; + array.Add(pObjElement); + } break; + default: + break; } - - m_mapGlobal.RemoveAll(); + } } +void global_alternate::PutObjectProperty(v8::Local pObj, + CJS_KeyValue* pData) { + ASSERT(pData != NULL); -FX_BOOL global_alternate::SetGlobalVariables(const FX_CHAR* propname, int nType, - double dData, bool bData, const CFX_ByteString& sData, JSObject pData, bool bDefaultPersistent) -{ - if (propname == NULL) return FALSE; + for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { + CJS_KeyValue* pObjData = pData->objData.GetAt(i); + ASSERT(pObjData != NULL); - js_global_data* pTemp = NULL; - m_mapGlobal.Lookup(propname, (void*&)pTemp); + switch (pObjData->nType) { + case JS_GLOBALDATA_TYPE_NUMBER: + JS_PutObjectNumber(NULL, (JSObject)pObj, + pObjData->sKey.UTF8Decode().c_str(), + pObjData->dData); + break; + case JS_GLOBALDATA_TYPE_BOOLEAN: + JS_PutObjectBoolean(NULL, (JSObject)pObj, + pObjData->sKey.UTF8Decode().c_str(), + (bool)(pObjData->bData == 1)); + break; + case JS_GLOBALDATA_TYPE_STRING: + JS_PutObjectString(NULL, (JSObject)pObj, + pObjData->sKey.UTF8Decode().c_str(), + pObjData->sData.UTF8Decode().c_str()); + break; + case JS_GLOBALDATA_TYPE_OBJECT: { + IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject)); + v8::Local pNewObj = JS_NewFxDynamicObj(pRuntime, NULL, -1); + PutObjectProperty(pNewObj, pObjData); + JS_PutObjectObject(NULL, (JSObject)pObj, + pObjData->sKey.UTF8Decode().c_str(), + (JSObject)pNewObj); + } break; + case JS_GLOBALDATA_TYPE_NULL: + JS_PutObjectNull(NULL, (JSObject)pObj, + pObjData->sKey.UTF8Decode().c_str()); + break; + } + } +} - if (pTemp) - { - if (pTemp->bDeleted || pTemp->nType != nType) - { - pTemp->dData = 0; - pTemp->bData = 0; - pTemp->sData = ""; - pTemp->nType = nType; - } +void global_alternate::DestroyGlobalPersisitentVariables() { + FX_POSITION pos = m_mapGlobal.GetStartPosition(); + while (pos) { + CFX_ByteString name; + js_global_data* pData = NULL; + m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData); + delete pData; + } - pTemp->bDeleted = FALSE; + m_mapGlobal.RemoveAll(); +} - switch (nType) - { - case JS_GLOBALDATA_TYPE_NUMBER: - { - pTemp->dData = dData; - } - break; - case JS_GLOBALDATA_TYPE_BOOLEAN: - { - pTemp->bData = bData; - } - break; - case JS_GLOBALDATA_TYPE_STRING: - { - pTemp->sData = sData; - } - break; - case JS_GLOBALDATA_TYPE_OBJECT: - { - pTemp->pData.Reset(JS_GetRuntime(pData), pData); - } - break; - case JS_GLOBALDATA_TYPE_NULL: - break; - default: - return FALSE; - } +FX_BOOL global_alternate::SetGlobalVariables(const FX_CHAR* propname, + int nType, + double dData, + bool bData, + const CFX_ByteString& sData, + JSObject pData, + bool bDefaultPersistent) { + if (propname == NULL) + return FALSE; - return TRUE; - } + js_global_data* pTemp = NULL; + m_mapGlobal.Lookup(propname, (void*&)pTemp); - js_global_data* pNewData = NULL; + if (pTemp) { + if (pTemp->bDeleted || pTemp->nType != nType) { + pTemp->dData = 0; + pTemp->bData = 0; + pTemp->sData = ""; + pTemp->nType = nType; + } - switch (nType) - { - case JS_GLOBALDATA_TYPE_NUMBER: - { - pNewData = new js_global_data; - pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER; - pNewData->dData = dData; - pNewData->bPersistent = bDefaultPersistent; - } - break; - case JS_GLOBALDATA_TYPE_BOOLEAN: - { - pNewData = new js_global_data; - pNewData->nType = JS_GLOBALDATA_TYPE_BOOLEAN; - pNewData->bData = bData; - pNewData->bPersistent = bDefaultPersistent; - } - break; - case JS_GLOBALDATA_TYPE_STRING: - { - pNewData = new js_global_data; - pNewData->nType = JS_GLOBALDATA_TYPE_STRING; - pNewData->sData = sData; - pNewData->bPersistent = bDefaultPersistent; - } - break; - case JS_GLOBALDATA_TYPE_OBJECT: - { - pNewData = new js_global_data; - pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT; - pNewData->pData.Reset(JS_GetRuntime(pData), pData); - pNewData->bPersistent = bDefaultPersistent; - } - break; - case JS_GLOBALDATA_TYPE_NULL: - { - pNewData = new js_global_data; - pNewData->nType = JS_GLOBALDATA_TYPE_NULL; - pNewData->bPersistent = bDefaultPersistent; - } + pTemp->bDeleted = FALSE; + + switch (nType) { + case JS_GLOBALDATA_TYPE_NUMBER: { + pTemp->dData = dData; + } break; + case JS_GLOBALDATA_TYPE_BOOLEAN: { + pTemp->bData = bData; + } break; + case JS_GLOBALDATA_TYPE_STRING: { + pTemp->sData = sData; + } break; + case JS_GLOBALDATA_TYPE_OBJECT: { + pTemp->pData.Reset(JS_GetRuntime(pData), pData); + } break; + case JS_GLOBALDATA_TYPE_NULL: break; - default: + default: return FALSE; } - m_mapGlobal.SetAt(propname, (void*)pNewData); - return TRUE; + } + + js_global_data* pNewData = NULL; + + switch (nType) { + case JS_GLOBALDATA_TYPE_NUMBER: { + pNewData = new js_global_data; + pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER; + pNewData->dData = dData; + pNewData->bPersistent = bDefaultPersistent; + } break; + case JS_GLOBALDATA_TYPE_BOOLEAN: { + pNewData = new js_global_data; + pNewData->nType = JS_GLOBALDATA_TYPE_BOOLEAN; + pNewData->bData = bData; + pNewData->bPersistent = bDefaultPersistent; + } break; + case JS_GLOBALDATA_TYPE_STRING: { + pNewData = new js_global_data; + pNewData->nType = JS_GLOBALDATA_TYPE_STRING; + pNewData->sData = sData; + pNewData->bPersistent = bDefaultPersistent; + } break; + case JS_GLOBALDATA_TYPE_OBJECT: { + pNewData = new js_global_data; + pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT; + pNewData->pData.Reset(JS_GetRuntime(pData), pData); + pNewData->bPersistent = bDefaultPersistent; + } break; + case JS_GLOBALDATA_TYPE_NULL: { + pNewData = new js_global_data; + pNewData->nType = JS_GLOBALDATA_TYPE_NULL; + pNewData->bPersistent = bDefaultPersistent; + } break; + default: + return FALSE; + } + + m_mapGlobal.SetAt(propname, (void*)pNewData); + + return TRUE; } -FXJSVALUETYPE GET_VALUE_TYPE(v8::Local p) -{ +FXJSVALUETYPE GET_VALUE_TYPE(v8::Local p) { const unsigned int nHash = JS_CalcHash(JS_GetTypeof(p)); if (nHash == JSCONST_nUndefHash) diff --git a/fpdfsdk/src/javascript/report.cpp b/fpdfsdk/src/javascript/report.cpp index 1478feb1fa..732ae6d20e 100644 --- a/fpdfsdk/src/javascript/report.cpp +++ b/fpdfsdk/src/javascript/report.cpp @@ -20,30 +20,28 @@ BEGIN_JS_STATIC_PROP(CJS_Report) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_Report) - JS_STATIC_METHOD_ENTRY(save) - JS_STATIC_METHOD_ENTRY(writeText) +JS_STATIC_METHOD_ENTRY(save) +JS_STATIC_METHOD_ENTRY(writeText) END_JS_STATIC_METHOD() IMPLEMENT_JS_CLASS(CJS_Report, Report) -Report::Report(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) -{ +Report::Report(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {} -} - -Report::~Report() -{ - -} +Report::~Report() {} -FX_BOOL Report::writeText(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL Report::writeText(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Unsafe, not supported. return TRUE; } -FX_BOOL Report::save(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ +FX_BOOL Report::save(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { // Unsafe, not supported. return TRUE; } diff --git a/fpdfsdk/src/javascript/resource.cpp b/fpdfsdk/src/javascript/resource.cpp index 4375da3ff7..5b6bd48703 100644 --- a/fpdfsdk/src/javascript/resource.cpp +++ b/fpdfsdk/src/javascript/resource.cpp @@ -6,61 +6,59 @@ #include "../../include/javascript/resource.h" -CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id) -{ - switch (id) - { +CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id) { + switch (id) { case IDS_STRING_JSALERT: - return L"Alert"; + return L"Alert"; case IDS_STRING_JSPARAMERROR: - return L"Incorrect number of parameters passed to function."; + return L"Incorrect number of parameters passed to function."; case IDS_STRING_JSAFNUMBER_KEYSTROKE: - return L"The input value is invalid."; + return L"The input value is invalid."; case IDS_STRING_JSPARAM_TOOLONG: - return L"The input value is too long."; + return L"The input value is too long."; case IDS_STRING_JSPARSEDATE: - return L"The input value can't be parsed as a valid date/time (%s)."; + return L"The input value can't be parsed as a valid date/time (%s)."; case IDS_STRING_JSRANGE1: - return L"The input value must be greater than or equal to %s" - L" and less than or equal to %s."; + return L"The input value must be greater than or equal to %s" + L" and less than or equal to %s."; case IDS_STRING_JSRANGE2: - return L"The input value must be greater than or equal to %s."; + return L"The input value must be greater than or equal to %s."; case IDS_STRING_JSRANGE3: - return L"The input value must be less than or equal to %s."; + return L"The input value must be less than or equal to %s."; case IDS_STRING_NOTSUPPORT: - return L"Operation not supported."; + return L"Operation not supported."; case IDS_STRING_JSBUSY: - return L"System is busy."; + return L"System is busy."; case IDS_STRING_JSEVENT: - return L"Duplicate formfield event found."; + return L"Duplicate formfield event found."; case IDS_STRING_RUN: - return L"Script ran successfully."; + return L"Script ran successfully."; case IDS_STRING_JSPRINT1: - return L"The second parameter can't be converted to a Date."; + return L"The second parameter can't be converted to a Date."; case IDS_STRING_JSPRINT2: - return L"The second parameter is an invalid Date!"; + return L"The second parameter is an invalid Date!"; case IDS_STRING_JSNOGLOBAL: - return L"Global value not found."; + return L"Global value not found."; case IDS_STRING_JSREADONLY: - return L"Cannot assign to readonly property."; + return L"Cannot assign to readonly property."; case IDS_STRING_JSTYPEERROR: - return L"Incorrect parameter type."; + return L"Incorrect parameter type."; case IDS_STRING_JSVALUEERROR: - return L"Incorrect parameter value."; + return L"Incorrect parameter value."; default: - return L""; - } + return L""; + } } CFX_WideString JSFormatErrorString(const char* class_name, const char* property_name, const CFX_WideString& details) { - CFX_WideString result = CFX_WideString::FromLocal(class_name); - if (property_name) { - result += L"."; - result += CFX_WideString::FromLocal(property_name); - } - result += L": "; - result += details; - return result; + CFX_WideString result = CFX_WideString::FromLocal(class_name); + if (property_name) { + result += L"."; + result += CFX_WideString::FromLocal(property_name); + } + result += L": "; + result += details; + return result; } diff --git a/fpdfsdk/src/javascript/util.cpp b/fpdfsdk/src/javascript/util.cpp index 4083ed58da..858af0079c 100644 --- a/fpdfsdk/src/javascript/util.cpp +++ b/fpdfsdk/src/javascript/util.cpp @@ -16,19 +16,18 @@ #include "../../include/javascript/JS_EventHandler.h" #include "../../include/javascript/JS_Runtime.h" -#if _FX_OS_ == _FX_ANDROID_ +#if _FX_OS_ == _FX_ANDROID_ #include #endif -static v8::Isolate* GetIsolate(IFXJS_Context* cc) -{ - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); +static v8::Isolate* GetIsolate(IFXJS_Context* cc) { + CJS_Context* pContext = (CJS_Context*)cc; + ASSERT(pContext != NULL); - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); + ASSERT(pRuntime != NULL); - return pRuntime->GetIsolate(); + return pRuntime->GetIsolate(); } BEGIN_JS_STATIC_CONST(CJS_Util) @@ -38,350 +37,235 @@ BEGIN_JS_STATIC_PROP(CJS_Util) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_Util) - JS_STATIC_METHOD_ENTRY(printd) - JS_STATIC_METHOD_ENTRY(printf) - JS_STATIC_METHOD_ENTRY(printx) - JS_STATIC_METHOD_ENTRY(scand) - JS_STATIC_METHOD_ENTRY(byteToChar) +JS_STATIC_METHOD_ENTRY(printd) +JS_STATIC_METHOD_ENTRY(printf) +JS_STATIC_METHOD_ENTRY(printx) +JS_STATIC_METHOD_ENTRY(scand) +JS_STATIC_METHOD_ENTRY(byteToChar) END_JS_STATIC_METHOD() -IMPLEMENT_JS_CLASS(CJS_Util,util) +IMPLEMENT_JS_CLASS(CJS_Util, util) -util::util(CJS_Object *pJSObject) : CJS_EmbedObj(pJSObject) -{ -} - -util::~util(void) -{ -} +util::util(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {} +util::~util(void) {} -struct stru_TbConvert -{ - const FX_WCHAR* lpszJSMark; - const FX_WCHAR* lpszCppMark; +struct stru_TbConvert { + const FX_WCHAR* lpszJSMark; + const FX_WCHAR* lpszCppMark; }; const stru_TbConvert fcTable[] = { - { L"mmmm", L"%B" }, - { L"mmm", L"%b" }, - { L"mm", L"%m" }, + {L"mmmm", L"%B"}, + {L"mmm", L"%b"}, + {L"mm", L"%m"}, //"m" - { L"dddd", L"%A" }, - { L"ddd", L"%a" }, - { L"dd", L"%d" }, + {L"dddd", L"%A"}, + {L"ddd", L"%a"}, + {L"dd", L"%d"}, //"d", "%w", - { L"yyyy", L"%Y" }, - { L"yy", L"%y" }, - { L"HH", L"%H" }, + {L"yyyy", L"%Y"}, + {L"yy", L"%y"}, + {L"HH", L"%H"}, //"H" - { L"hh", L"%I" }, + {L"hh", L"%I"}, //"h" - { L"MM", L"%M" }, + {L"MM", L"%M"}, //"M" - { L"ss", L"%S" }, + {L"ss", L"%S"}, //"s - { L"TT", L"%p" }, - //"t" + {L"TT", L"%p"}, +//"t" #if defined(_WIN32) - { L"tt", L"%p" }, - { L"h", L"%#I" }, + {L"tt", L"%p"}, + {L"h", L"%#I"}, #else - { L"tt", L"%P" }, - { L"h", L"%l" }, + {L"tt", L"%P"}, + {L"h", L"%l"}, #endif }; -#define UTIL_INT 0 -#define UTIL_DOUBLE 1 -#define UTIL_STRING 2 - -int util::ParstDataType(std::wstring* sFormat) -{ - bool bPercent = FALSE; - for (size_t i = 0; i < sFormat->length(); ++i) - { - wchar_t c = (*sFormat)[i]; - if (c == L'%') - { - bPercent = true; - continue; - } +#define UTIL_INT 0 +#define UTIL_DOUBLE 1 +#define UTIL_STRING 2 + +int util::ParstDataType(std::wstring* sFormat) { + bool bPercent = FALSE; + for (size_t i = 0; i < sFormat->length(); ++i) { + wchar_t c = (*sFormat)[i]; + if (c == L'%') { + bPercent = true; + continue; + } - if (bPercent) - { - if (c == L'c' || c == L'C' || c == L'd' || c == L'i' || c == L'o' || c == L'u' || c == L'x' || c == L'X') - { - return UTIL_INT; - } - if (c == L'e' || c == L'E' || c == L'f' || c == L'g' || c == L'G') - { - return UTIL_DOUBLE; - } - if (c == L's' || c == L'S') - { - // Map s to S since we always deal internally - // with wchar_t strings. - (*sFormat)[i] = L'S'; - return UTIL_STRING; - } - if (c == L'.' || c == L'+' || c == L'-' || c == L'#' || c == L' ' || CJS_PublicMethods::IsDigit(c)) - { - continue; - } - break; - } + if (bPercent) { + if (c == L'c' || c == L'C' || c == L'd' || c == L'i' || c == L'o' || + c == L'u' || c == L'x' || c == L'X') { + return UTIL_INT; + } + if (c == L'e' || c == L'E' || c == L'f' || c == L'g' || c == L'G') { + return UTIL_DOUBLE; + } + if (c == L's' || c == L'S') { + // Map s to S since we always deal internally + // with wchar_t strings. + (*sFormat)[i] = L'S'; + return UTIL_STRING; + } + if (c == L'.' || c == L'+' || c == L'-' || c == L'#' || c == L' ' || + CJS_PublicMethods::IsDigit(c)) { + continue; + } + break; } + } - return -1; + return -1; } -FX_BOOL util::printf(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - int iSize = params.size(); - if (iSize < 1) - return FALSE; - std::wstring c_ConvChar(params[0].ToCFXWideString().c_str()); - std::vector c_strConvers; - int iOffset = 0; - int iOffend = 0; - c_ConvChar.insert(c_ConvChar.begin(),L'S'); - while(iOffset != -1) - { - iOffend = c_ConvChar.find(L"%",iOffset+1); - std::wstring strSub; - if (iOffend == -1) - strSub = c_ConvChar.substr(iOffset); - else - strSub = c_ConvChar.substr(iOffset ,iOffend - iOffset); - c_strConvers.push_back(strSub); - iOffset = iOffend ; +FX_BOOL util::printf(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + int iSize = params.size(); + if (iSize < 1) + return FALSE; + std::wstring c_ConvChar(params[0].ToCFXWideString().c_str()); + std::vector c_strConvers; + int iOffset = 0; + int iOffend = 0; + c_ConvChar.insert(c_ConvChar.begin(), L'S'); + while (iOffset != -1) { + iOffend = c_ConvChar.find(L"%", iOffset + 1); + std::wstring strSub; + if (iOffend == -1) + strSub = c_ConvChar.substr(iOffset); + else + strSub = c_ConvChar.substr(iOffset, iOffend - iOffset); + c_strConvers.push_back(strSub); + iOffset = iOffend; + } + + std::wstring c_strResult; + + // for(int iIndex = 1;iIndex < params.size();iIndex++) + std::wstring c_strFormat; + for (int iIndex = 0; iIndex < (int)c_strConvers.size(); iIndex++) { + c_strFormat = c_strConvers[iIndex]; + if (iIndex == 0) { + c_strResult = c_strFormat; + continue; } - std::wstring c_strResult; - - //for(int iIndex = 1;iIndex < params.size();iIndex++) - std::wstring c_strFormat; - for(int iIndex = 0;iIndex < (int)c_strConvers.size();iIndex++) - { - c_strFormat = c_strConvers[iIndex]; - if (iIndex == 0) - { - c_strResult = c_strFormat; - continue; - } - - - CFX_WideString strSegment; - if (iIndex >= iSize) { - c_strResult += c_strFormat; - continue; - } + CFX_WideString strSegment; + if (iIndex >= iSize) { + c_strResult += c_strFormat; + continue; + } - switch (ParstDataType(&c_strFormat)) - { - case UTIL_INT: - strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt()); - break; - case UTIL_DOUBLE: - strSegment.Format(c_strFormat.c_str(), params[iIndex].ToDouble()); - break; - case UTIL_STRING: - strSegment.Format(c_strFormat.c_str(), params[iIndex].ToCFXWideString().c_str()); - break; - default: - strSegment.Format(L"%S", c_strFormat.c_str()); - break; - } - c_strResult += strSegment.GetBuffer(strSegment.GetLength()+1); + switch (ParstDataType(&c_strFormat)) { + case UTIL_INT: + strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt()); + break; + case UTIL_DOUBLE: + strSegment.Format(c_strFormat.c_str(), params[iIndex].ToDouble()); + break; + case UTIL_STRING: + strSegment.Format(c_strFormat.c_str(), + params[iIndex].ToCFXWideString().c_str()); + break; + default: + strSegment.Format(L"%S", c_strFormat.c_str()); + break; } + c_strResult += strSegment.GetBuffer(strSegment.GetLength() + 1); + } - c_strResult.erase(c_strResult.begin()); - vRet = c_strResult.c_str(); - return TRUE; + c_strResult.erase(c_strResult.begin()); + vRet = c_strResult.c_str(); + return TRUE; } -FX_BOOL util::printd(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = GetIsolate(cc); +FX_BOOL util::printd(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = GetIsolate(cc); - int iSize = params.size(); - if (iSize < 2) - return FALSE; + int iSize = params.size(); + if (iSize < 2) + return FALSE; - CJS_Value p1(isolate); - p1 = params[0]; + CJS_Value p1(isolate); + p1 = params[0]; - CJS_Value p2 = params[1]; - CJS_Date jsDate(isolate); - if (!p2.ConvertToDate(jsDate)) - { - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT1); - return FALSE; - } + CJS_Value p2 = params[1]; + CJS_Date jsDate(isolate); + if (!p2.ConvertToDate(jsDate)) { + sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT1); + return FALSE; + } - if (!jsDate.IsValidDate()) - { - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT2); + if (!jsDate.IsValidDate()) { + sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT2); + return FALSE; + } + + if (p1.GetType() == VT_number) { + int nFormat = p1.ToInt(); + CFX_WideString swResult; + + switch (nFormat) { + case 0: + swResult.Format(L"D:%04d%02d%02d%02d%02d%02d", jsDate.GetYear(), + jsDate.GetMonth() + 1, jsDate.GetDay(), + jsDate.GetHours(), jsDate.GetMinutes(), + jsDate.GetSeconds()); + break; + case 1: + swResult.Format(L"%04d.%02d.%02d %02d:%02d:%02d", jsDate.GetYear(), + jsDate.GetMonth() + 1, jsDate.GetDay(), + jsDate.GetHours(), jsDate.GetMinutes(), + jsDate.GetSeconds()); + break; + case 2: + swResult.Format(L"%04d/%02d/%02d %02d:%02d:%02d", jsDate.GetYear(), + jsDate.GetMonth() + 1, jsDate.GetDay(), + jsDate.GetHours(), jsDate.GetMinutes(), + jsDate.GetSeconds()); + break; + default: return FALSE; } - if (p1.GetType() == VT_number) - { - int nFormat = p1.ToInt(); - CFX_WideString swResult; - - switch (nFormat) - { - case 0: - swResult.Format(L"D:%04d%02d%02d%02d%02d%02d", - jsDate.GetYear(), - jsDate.GetMonth() + 1, - jsDate.GetDay(), - jsDate.GetHours(), - jsDate.GetMinutes(), - jsDate.GetSeconds()); - break; - case 1: - swResult.Format(L"%04d.%02d.%02d %02d:%02d:%02d", - jsDate.GetYear(), - jsDate.GetMonth() + 1, - jsDate.GetDay(), - jsDate.GetHours(), - jsDate.GetMinutes(), - jsDate.GetSeconds()); - break; - case 2: - swResult.Format(L"%04d/%02d/%02d %02d:%02d:%02d", - jsDate.GetYear(), - jsDate.GetMonth() + 1, - jsDate.GetDay(), - jsDate.GetHours(), - jsDate.GetMinutes(), - jsDate.GetSeconds()); - break; - default: - return FALSE; - } - - vRet = swResult.c_str(); - return TRUE; - } - if (p1.GetType() == VT_string) - { - std::basic_string cFormat = p1.ToCFXWideString().c_str(); - - bool bXFAPicture = false; - if (iSize > 2) - { - bXFAPicture = params[2].ToBool(); - } - - if (bXFAPicture) - { - return FALSE; //currently, it doesn't support XFAPicture. - } - - int iIndex; - for(iIndex = 0;iIndex12?iHour-12:iHour }, - { L"M", iMin }, - { L"s", iSec }, - }; - - for(iIndex = 0;iIndex 0) - { - if (cFormat[iEnd-1] == L'%') - { - iStart = iEnd+1; - continue; - } - } - cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iIndex].lpszJSMark), tszValue); - iStart = iEnd; - } - } + vRet = swResult.c_str(); + return TRUE; + } + if (p1.GetType() == VT_string) { + std::basic_string cFormat = p1.ToCFXWideString().c_str(); - CFX_WideString strFormat; - wchar_t buf[64] = {}; - strFormat = wcsftime(buf, 64, cFormat.c_str(), &time); - cFormat = buf; - vRet = cFormat.c_str(); - return TRUE; + bool bXFAPicture = false; + if (iSize > 2) { + bXFAPicture = params[2].ToBool(); } - return FALSE; -} -void util::printd(const std::wstring &cFormat2, CJS_Date jsDate, bool bXFAPicture, std::wstring &cPurpose) -{ - std::wstring cFormat = cFormat2; - - if (bXFAPicture) - { - return ; //currently, it doesn't support XFAPicture. + if (bXFAPicture) { + return FALSE; // currently, it doesn't support XFAPicture. } int iIndex; - for(iIndex = 0;iIndex12?iHour-12:iHour }, - { L"M", iMin }, - { L"s", iSec }, + stru_TbConvertAd cTableAd[] = { + {L"m", iMonth + 1}, {L"d", iDay}, + {L"H", iHour}, {L"h", iHour > 12 ? iHour - 12 : iHour}, + {L"M", iMin}, {L"s", iSec}, }; - //cFormat = strFormat.GetBuffer(strFormat.GetLength()+1); - for(iIndex = 0;iIndex 0) - { - if (cFormat[iEnd-1] == L'%') - { - iStart = iEnd+1; - continue; - } - } - cFormat.replace(iEnd,FXSYS_wcslen(cTableAd[iIndex].lpszJSMark),tszValue); - iStart = iEnd; + for (iIndex = 0; iIndex < sizeof(cTableAd) / sizeof(stru_TbConvertAd); + iIndex++) { + wchar_t tszValue[10]; + CFX_WideString sValue; + sValue.Format(L"%d", cTableAd[iIndex].iValue); + memcpy(tszValue, (wchar_t*)sValue.GetBuffer(sValue.GetLength() + 1), + (sValue.GetLength() + 1) * sizeof(wchar_t)); + + int iStart = 0; + int iEnd; + while ((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark, iStart)) != -1) { + if (iEnd > 0) { + if (cFormat[iEnd - 1] == L'%') { + iStart = iEnd + 1; + continue; + } } + cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iIndex].lpszJSMark), + tszValue); + iStart = iEnd; + } } CFX_WideString strFormat; wchar_t buf[64] = {}; strFormat = wcsftime(buf, 64, cFormat.c_str(), &time); cFormat = buf; - cPurpose = cFormat; + vRet = cFormat.c_str(); + return TRUE; + } + return FALSE; } -FX_BOOL util::printx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - int iSize = params.size(); - if (iSize<2) - return FALSE; - CFX_WideString sFormat = params[0].ToCFXWideString(); - CFX_WideString sSource = params[1].ToCFXWideString(); - std::string cFormat = CFX_ByteString::FromUnicode(sFormat).c_str(); - std::string cSource = CFX_ByteString::FromUnicode(sSource).c_str(); - std::string cDest; - printx(cFormat,cSource,cDest); - vRet = cDest.c_str(); - return TRUE; +void util::printd(const std::wstring& cFormat2, + CJS_Date jsDate, + bool bXFAPicture, + std::wstring& cPurpose) { + std::wstring cFormat = cFormat2; + + if (bXFAPicture) { + return; // currently, it doesn't support XFAPicture. + } + + int iIndex; + for (iIndex = 0; iIndex < sizeof(fcTable) / sizeof(stru_TbConvert); + iIndex++) { + int iStart = 0; + int iEnd; + while ((iEnd = cFormat.find(fcTable[iIndex].lpszJSMark, iStart)) != -1) { + cFormat.replace(iEnd, FXSYS_wcslen(fcTable[iIndex].lpszJSMark), + fcTable[iIndex].lpszCppMark); + iStart = iEnd; + } + } + + int iYear, iMonth, iDay, iHour, iMin, iSec; + iYear = jsDate.GetYear(); + iMonth = jsDate.GetMonth(); + iDay = jsDate.GetDay(); + iHour = jsDate.GetHours(); + iMin = jsDate.GetMinutes(); + iSec = jsDate.GetSeconds(); + + struct tm time = {}; + time.tm_year = iYear - 1900; + time.tm_mon = iMonth; + time.tm_mday = iDay; + time.tm_hour = iHour; + time.tm_min = iMin; + time.tm_sec = iSec; + // COleDateTime cppTm(iYear,iMonth+1,iDay,iHour,iMin,iSec); + // CString strFormat = cppTm.Format(cFormat.c_str()); + + struct stru_TbConvertAd { + const FX_WCHAR* lpszJSMark; + int iValue; + }; + + stru_TbConvertAd cTableAd[] = { + {L"m", iMonth + 1}, {L"d", iDay}, + {L"H", iHour}, {L"h", iHour > 12 ? iHour - 12 : iHour}, + {L"M", iMin}, {L"s", iSec}, + }; + + // cFormat = strFormat.GetBuffer(strFormat.GetLength()+1); + for (iIndex = 0; iIndex < sizeof(cTableAd) / sizeof(stru_TbConvertAd); + iIndex++) { + wchar_t tszValue[10]; + //_itot(cTableAd[iIndex].iValue,tszValue,10); + CFX_WideString sValue; + sValue.Format(L"%d", cTableAd[iIndex].iValue); + memcpy(tszValue, (wchar_t*)sValue.GetBuffer(sValue.GetLength() + 1), + sValue.GetLength() * sizeof(wchar_t)); + + // strFormat.Replace(cTableAd[iIndex].lpszJSMark,"%d"); + // strFormat.Format(strFormat,cTableAd[iIndex].iValue); + int iStart = 0; + int iEnd; + while ((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark, iStart)) != -1) { + if (iEnd > 0) { + if (cFormat[iEnd - 1] == L'%') { + iStart = iEnd + 1; + continue; + } + } + cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iIndex].lpszJSMark), + tszValue); + iStart = iEnd; + } + } + + CFX_WideString strFormat; + wchar_t buf[64] = {}; + strFormat = wcsftime(buf, 64, cFormat.c_str(), &time); + cFormat = buf; + cPurpose = cFormat; +} + +FX_BOOL util::printx(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + int iSize = params.size(); + if (iSize < 2) + return FALSE; + CFX_WideString sFormat = params[0].ToCFXWideString(); + CFX_WideString sSource = params[1].ToCFXWideString(); + std::string cFormat = CFX_ByteString::FromUnicode(sFormat).c_str(); + std::string cSource = CFX_ByteString::FromUnicode(sSource).c_str(); + std::string cDest; + printx(cFormat, cSource, cDest); + vRet = cDest.c_str(); + return TRUE; } -void util::printx(const std::string &cFormat,const std::string &cSource2,std::string &cPurpose) -{ - std::string cSource(cSource2); - if (!cPurpose.empty()) - //cPurpose.clear(); - cPurpose.erase(); - int itSource = 0; - int iSize = cSource.size(); - for(int iIndex = 0; iIndex < (int)cFormat.size() && itSource= '0' && cSource[itSource] <= '9') || + (cSource[itSource] >= 'a' && cSource[itSource] <= 'z') || + (cSource[itSource] >= 'A' && cSource[itSource] <= 'Z')) { + // cPurpose.push_back(cSource[itSource]); cPurpose += cSource[itSource]; itSource++; break; - case 'X': - { - while(itSource < iSize) - { - if ((cSource[itSource]>='0'&&cSource[itSource]<='9') || (cSource[itSource]>='a' && cSource[itSource]<='z') || (cSource[itSource]>='A' && cSource[itSource]<='Z')) - { - //cPurpose.push_back(cSource[itSource]); - cPurpose += cSource[itSource]; - itSource++; - break; - } - itSource++; - } - break; - } - break; - case 'A': - { - while(itSource < iSize) - { - if ((cSource[itSource]>='a' && cSource[itSource]<='z') || (cSource[itSource]>='A' && cSource[itSource]<='Z')) - { - //cPurpose.push_back(cSource[itSource]); - cPurpose += cSource[itSource]; - itSource++; - break; - } - itSource++; - } - break; - } - break; - case '9': - { - while(itSource < iSize) - { - if (cSource[itSource]>='0'&&cSource[itSource]<='9') - { - //cPurpose.push_back(cSource[itSource]); - cPurpose += cSource[itSource]; - itSource++; - break; - } - itSource++; - } - break; - } - case '*': - { - cPurpose.append(cSource,itSource,iSize-itSource); - itSource = iSize-1; - break; - } - case '\\': - break; - case '>': - { - for(std::string::iterator it = cSource.begin();it != cSource.end(); it++) - { - *it = toupper(*it); - } - break; - } - case '<': - { - for(std::string::iterator it = cSource.begin();it != cSource.end(); it++) - { - *it = tolower(*it); - } - break; - } - case '=': + } + itSource++; + } + break; + } break; + case 'A': { + while (itSource < iSize) { + if ((cSource[itSource] >= 'a' && cSource[itSource] <= 'z') || + (cSource[itSource] >= 'A' && cSource[itSource] <= 'Z')) { + // cPurpose.push_back(cSource[itSource]); + cPurpose += cSource[itSource]; + itSource++; break; - default: - //cPurpose.push_back(letter); - cPurpose += letter; + } + itSource++; + } + break; + } break; + case '9': { + while (itSource < iSize) { + if (cSource[itSource] >= '0' && cSource[itSource] <= '9') { + // cPurpose.push_back(cSource[itSource]); + cPurpose += cSource[itSource]; + itSource++; break; + } + itSource++; } + break; + } + case '*': { + cPurpose.append(cSource, itSource, iSize - itSource); + itSource = iSize - 1; + break; + } + case '\\': + break; + case '>': { + for (std::string::iterator it = cSource.begin(); it != cSource.end(); + it++) { + *it = toupper(*it); + } + break; + } + case '<': { + for (std::string::iterator it = cSource.begin(); it != cSource.end(); + it++) { + *it = tolower(*it); + } + break; + } + case '=': + break; + default: + // cPurpose.push_back(letter); + cPurpose += letter; + break; } + } } -FX_BOOL util::scand(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - v8::Isolate* isolate = GetIsolate(cc); - int iSize = params.size(); - if (iSize < 2) - return FALSE; - - CFX_WideString sFormat = params[0].ToCFXWideString(); - CFX_WideString sDate = params[1].ToCFXWideString(); - double dDate = JS_GetDateTime(); - if (sDate.GetLength() > 0) - { - FX_BOOL bWrongFormat = FALSE; - dDate = CJS_PublicMethods::MakeRegularDate(sDate,sFormat,bWrongFormat); - } - - if (!JS_PortIsNan(dDate)) - { - CJS_Date date(isolate,dDate); - vRet = date; - } - else - { - vRet.SetNull(); - } +FX_BOOL util::scand(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + v8::Isolate* isolate = GetIsolate(cc); + int iSize = params.size(); + if (iSize < 2) + return FALSE; - return TRUE; + CFX_WideString sFormat = params[0].ToCFXWideString(); + CFX_WideString sDate = params[1].ToCFXWideString(); + double dDate = JS_GetDateTime(); + if (sDate.GetLength() > 0) { + FX_BOOL bWrongFormat = FALSE; + dDate = CJS_PublicMethods::MakeRegularDate(sDate, sFormat, bWrongFormat); + } + + if (!JS_PortIsNan(dDate)) { + CJS_Date date(isolate, dDate); + vRet = date; + } else { + vRet.SetNull(); + } + + return TRUE; } -int64_t FX_atoi64(const char *nptr) -{ - int c; /* current char */ - int64_t total; /* current total */ - int sign; /* if '-', then negative, otherwise positive */ +int64_t FX_atoi64(const char* nptr) { + int c; /* current char */ + int64_t total; /* current total */ + int sign; /* if '-', then negative, otherwise positive */ - /* skip whitespace */ - while ( isspace((int)(unsigned char)*nptr) ) - ++nptr; + /* skip whitespace */ + while (isspace((int)(unsigned char)*nptr)) + ++nptr; - c = (int)(unsigned char)*nptr++; - sign = c; /* save sign indication */ - if (c == '-' || c == '+') - c = (int)(unsigned char)*nptr++; /* skip sign */ + c = (int)(unsigned char)*nptr++; + sign = c; /* save sign indication */ + if (c == '-' || c == '+') + c = (int)(unsigned char)*nptr++; /* skip sign */ - total = 0; + total = 0; - while (isdigit(c)) { - total = 10 * total + (c - '0'); /* accumulate digit */ - c = (int)(unsigned char)*nptr++; /* get next char */ - } + while (isdigit(c)) { + total = 10 * total + (c - '0'); /* accumulate digit */ + c = (int)(unsigned char)*nptr++; /* get next char */ + } - return sign == '-' ? -total : total; + return sign == '-' ? -total : total; } -FX_BOOL util::byteToChar(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError) -{ - int iSize = params.size(); - if (iSize == 0) - return FALSE; - int nByte = params[0].ToInt(); - unsigned char cByte = (unsigned char)nByte; - CFX_WideString csValue; - csValue.Format(L"%c", cByte); - vRet = csValue.c_str(); - return TRUE; +FX_BOOL util::byteToChar(IFXJS_Context* cc, + const CJS_Parameters& params, + CJS_Value& vRet, + CFX_WideString& sError) { + int iSize = params.size(); + if (iSize == 0) + return FALSE; + int nByte = params[0].ToInt(); + unsigned char cByte = (unsigned char)nByte; + CFX_WideString csValue; + csValue.Format(L"%c", cByte); + vRet = csValue.c_str(); + return TRUE; } diff --git a/fpdfsdk/src/jsapi/fxjs_v8.cpp b/fpdfsdk/src/jsapi/fxjs_v8.cpp index c3b1b925fa..4c75f1a4ca 100644 --- a/fpdfsdk/src/jsapi/fxjs_v8.cpp +++ b/fpdfsdk/src/jsapi/fxjs_v8.cpp @@ -12,777 +12,902 @@ #include #include -#define VALUE_NAME_STRING L"string" -#define VALUE_NAME_NUMBER L"number" -#define VALUE_NAME_BOOLEAN L"boolean" -#define VALUE_NAME_DATE L"date" -#define VALUE_NAME_OBJECT L"object" -#define VALUE_NAME_FXOBJ L"fxobj" -#define VALUE_NAME_NULL L"null" -#define VALUE_NAME_UNDEFINED L"undefined" - -const static FX_DWORD g_nan[2] = {0,0x7FF80000 }; -static double GetNan() -{ +#define VALUE_NAME_STRING L"string" +#define VALUE_NAME_NUMBER L"number" +#define VALUE_NAME_BOOLEAN L"boolean" +#define VALUE_NAME_DATE L"date" +#define VALUE_NAME_OBJECT L"object" +#define VALUE_NAME_FXOBJ L"fxobj" +#define VALUE_NAME_NULL L"null" +#define VALUE_NAME_UNDEFINED L"undefined" + +const static FX_DWORD g_nan[2] = {0, 0x7FF80000}; +static double GetNan() { return *(double*)g_nan; } static unsigned int g_embedderDataSlot = 0u; - -class CJS_PrivateData -{ -public: - CJS_PrivateData():ObjDefID(-1), pPrivate(NULL) {} - int ObjDefID; - void* pPrivate; +class CJS_PrivateData { + public: + CJS_PrivateData() : ObjDefID(-1), pPrivate(NULL) {} + int ObjDefID; + void* pPrivate; }; - -class CJS_ObjDefintion -{ -public: - CJS_ObjDefintion(v8::Isolate* isolate, const wchar_t* sObjName, FXJSOBJTYPE eObjType, LP_CONSTRUCTOR pConstructor, LP_DESTRUCTOR pDestructor): - objName(sObjName), objType(eObjType), m_pConstructor(pConstructor), m_pDestructor(pDestructor),m_bSetAsGlobalObject(FALSE) - { - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - - v8::Local objTemplate = v8::ObjectTemplate::New(isolate); - objTemplate->SetInternalFieldCount(2); - m_objTemplate.Reset(isolate, objTemplate); - - //Document as the global object. - if(FXSYS_wcscmp(sObjName, L"Document") == 0) - { - m_bSetAsGlobalObject = TRUE; - } - - } - ~CJS_ObjDefintion() - { - m_objTemplate.Reset(); - m_StaticObj.Reset(); - } -public: - const wchar_t* objName; - FXJSOBJTYPE objType; - LP_CONSTRUCTOR m_pConstructor; - LP_DESTRUCTOR m_pDestructor; - FX_BOOL m_bSetAsGlobalObject; - - v8::Global m_objTemplate; - v8::Global m_StaticObj; +class CJS_ObjDefintion { + public: + CJS_ObjDefintion(v8::Isolate* isolate, + const wchar_t* sObjName, + FXJSOBJTYPE eObjType, + LP_CONSTRUCTOR pConstructor, + LP_DESTRUCTOR pDestructor) + : objName(sObjName), + objType(eObjType), + m_pConstructor(pConstructor), + m_pDestructor(pDestructor), + m_bSetAsGlobalObject(FALSE) { + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + + v8::Local objTemplate = + v8::ObjectTemplate::New(isolate); + objTemplate->SetInternalFieldCount(2); + m_objTemplate.Reset(isolate, objTemplate); + + // Document as the global object. + if (FXSYS_wcscmp(sObjName, L"Document") == 0) { + m_bSetAsGlobalObject = TRUE; + } + } + ~CJS_ObjDefintion() { + m_objTemplate.Reset(); + m_StaticObj.Reset(); + } + + public: + const wchar_t* objName; + FXJSOBJTYPE objType; + LP_CONSTRUCTOR m_pConstructor; + LP_DESTRUCTOR m_pDestructor; + FX_BOOL m_bSetAsGlobalObject; + + v8::Global m_objTemplate; + v8::Global m_StaticObj; }; -int JS_DefineObj(IJS_Runtime* pJSRuntime, const wchar_t* sObjName, FXJSOBJTYPE eObjType, LP_CONSTRUCTOR pConstructor, LP_DESTRUCTOR pDestructor) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) - { - pArray = FX_NEW CFX_PtrArray(); - isolate->SetData(g_embedderDataSlot, pArray); - } - CJS_ObjDefintion* pObjDef = FX_NEW CJS_ObjDefintion(isolate, sObjName, eObjType, pConstructor, pDestructor); - pArray->Add(pObjDef); - return pArray->GetSize()-1; -} - -int JS_DefineObjMethod(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sMethodName, v8::FunctionCallback pMethodCall) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - - CFX_WideString ws = CFX_WideString(sMethodName); - CFX_ByteString bsMethodName = ws.UTF8Encode(); +int JS_DefineObj(IJS_Runtime* pJSRuntime, + const wchar_t* sObjName, + FXJSOBJTYPE eObjType, + LP_CONSTRUCTOR pConstructor, + LP_DESTRUCTOR pDestructor) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) { + pArray = FX_NEW CFX_PtrArray(); + isolate->SetData(g_embedderDataSlot, pArray); + } + CJS_ObjDefintion* pObjDef = FX_NEW CJS_ObjDefintion( + isolate, sObjName, eObjType, pConstructor, pDestructor); + pArray->Add(pObjDef); + return pArray->GetSize() - 1; +} + +int JS_DefineObjMethod(IJS_Runtime* pJSRuntime, + int nObjDefnID, + const wchar_t* sMethodName, + v8::FunctionCallback pMethodCall) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + + CFX_WideString ws = CFX_WideString(sMethodName); + CFX_ByteString bsMethodName = ws.UTF8Encode(); + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) + return 0; + + if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) + return 0; + CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); + v8::Local objTemp = + v8::Local::New(isolate, pObjDef->m_objTemplate); + objTemp->Set(v8::String::NewFromUtf8(isolate, bsMethodName.c_str(), + v8::NewStringType::kNormal) + .ToLocalChecked(), + v8::FunctionTemplate::New(isolate, pMethodCall), v8::ReadOnly); + pObjDef->m_objTemplate.Reset(isolate, objTemp); + return 0; +} + +int JS_DefineObjProperty(IJS_Runtime* pJSRuntime, + int nObjDefnID, + const wchar_t* sPropName, + v8::AccessorGetterCallback pPropGet, + v8::AccessorSetterCallback pPropPut) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + + CFX_WideString ws = CFX_WideString(sPropName); + CFX_ByteString bsPropertyName = ws.UTF8Encode(); + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) + return 0; + + if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) + return 0; + CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); + v8::Local objTemp = + v8::Local::New(isolate, pObjDef->m_objTemplate); + objTemp->SetAccessor(v8::String::NewFromUtf8(isolate, bsPropertyName.c_str(), + v8::NewStringType::kNormal) + .ToLocalChecked(), + pPropGet, pPropPut); + pObjDef->m_objTemplate.Reset(isolate, objTemp); + return 0; +} + +int JS_DefineObjAllProperties(IJS_Runtime* pJSRuntime, + int nObjDefnID, + v8::NamedPropertyQueryCallback pPropQurey, + v8::NamedPropertyGetterCallback pPropGet, + v8::NamedPropertySetterCallback pPropPut, + v8::NamedPropertyDeleterCallback pPropDel) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) + return 0; + + if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) + return 0; + CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); + v8::Local objTemp = + v8::Local::New(isolate, pObjDef->m_objTemplate); + objTemp->SetNamedPropertyHandler(pPropGet, pPropPut, pPropQurey, pPropDel); + pObjDef->m_objTemplate.Reset(isolate, objTemp); + return 0; +} + +int JS_DefineObjConst(IJS_Runtime* pJSRuntime, + int nObjDefnID, + const wchar_t* sConstName, + v8::Local pDefault) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) + return 0; + + CFX_WideString ws = CFX_WideString(sConstName); + CFX_ByteString bsConstName = ws.UTF8Encode(); + + if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) + return 0; + CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); + v8::Local objTemp = + v8::Local::New(isolate, pObjDef->m_objTemplate); + objTemp->Set(isolate, bsConstName.c_str(), pDefault); + pObjDef->m_objTemplate.Reset(isolate, objTemp); + return 0; +} + +static v8::Global& _getGlobalObjectTemplate( + IJS_Runtime* pJSRuntime) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + ASSERT(pArray != NULL); + for (int i = 0; i < pArray->GetSize(); i++) { + CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); + if (pObjDef->m_bSetAsGlobalObject) + return pObjDef->m_objTemplate; + } + static v8::Global gloabalObjectTemplate; + return gloabalObjectTemplate; +} + +int JS_DefineGlobalMethod(IJS_Runtime* pJSRuntime, + const wchar_t* sMethodName, + v8::FunctionCallback pMethodCall) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + + CFX_WideString ws = CFX_WideString(sMethodName); + CFX_ByteString bsMethodName = ws.UTF8Encode(); + + v8::Local funTempl = + v8::FunctionTemplate::New(isolate, pMethodCall); + v8::Local objTemp; + + v8::Global& globalObjTemp = + _getGlobalObjectTemplate(pJSRuntime); + if (globalObjTemp.IsEmpty()) + objTemp = v8::ObjectTemplate::New(isolate); + else + objTemp = v8::Local::New(isolate, globalObjTemp); + objTemp->Set(v8::String::NewFromUtf8(isolate, bsMethodName.c_str(), + v8::NewStringType::kNormal) + .ToLocalChecked(), + funTempl, v8::ReadOnly); + + globalObjTemp.Reset(isolate, objTemp); + + return 0; +} + +int JS_DefineGlobalConst(IJS_Runtime* pJSRuntime, + const wchar_t* sConstName, + v8::Local pDefault) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + + CFX_WideString ws = CFX_WideString(sConstName); + CFX_ByteString bsConst = ws.UTF8Encode(); + + v8::Local objTemp; + + v8::Global& globalObjTemp = + _getGlobalObjectTemplate(pJSRuntime); + if (globalObjTemp.IsEmpty()) + objTemp = v8::ObjectTemplate::New(isolate); + else + objTemp = v8::Local::New(isolate, globalObjTemp); + objTemp->Set(v8::String::NewFromUtf8(isolate, bsConst.c_str(), + v8::NewStringType::kNormal) + .ToLocalChecked(), + pDefault, v8::ReadOnly); + + globalObjTemp.Reset(isolate, objTemp); + + return 0; +} + +void JS_InitialRuntime(IJS_Runtime* pJSRuntime, + IFXJS_Runtime* pFXRuntime, + IFXJS_Context* context, + v8::Global& v8PersistentContext) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::Locker locker(isolate); + v8::HandleScope handle_scope(isolate); + + v8::Global& globalObjTemp = + _getGlobalObjectTemplate(pJSRuntime); + v8::Local v8Context = v8::Context::New( + isolate, NULL, + v8::Local::New(isolate, globalObjTemp)); + v8::Context::Scope context_scope(v8Context); + + // v8::Local ptr = External::New(isolate, pFXRuntime); + // v8Context->SetEmbedderData(1, ptr); + // TODO(tsepez): Don't use more than one embedder data slot. + isolate->SetData(2, pFXRuntime); + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) + return; + + for (int i = 0; i < pArray->GetSize(); i++) { + CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); + CFX_WideString ws = CFX_WideString(pObjDef->objName); + CFX_ByteString bs = ws.UTF8Encode(); + v8::Local objName = + v8::String::NewFromUtf8(isolate, bs.c_str(), v8::NewStringType::kNormal, + bs.GetLength()) + .ToLocalChecked(); + + if (pObjDef->objType == JS_DYNAMIC) { + // Document is set as global object, need to construct it first. + CFX_WideString wsString(L"Document"); + if (ws.Equal(wsString)) { + CJS_PrivateData* pPrivateData = FX_NEW CJS_PrivateData; + pPrivateData->ObjDefID = i; + + v8Context->Global() + ->GetPrototype() + ->ToObject(v8Context) + .ToLocalChecked() + ->SetAlignedPointerInInternalField(0, pPrivateData); + + if (pObjDef->m_pConstructor) + pObjDef->m_pConstructor(context, v8Context->Global() + ->GetPrototype() + ->ToObject(v8Context) + .ToLocalChecked(), + v8Context->Global() + ->GetPrototype() + ->ToObject(v8Context) + .ToLocalChecked()); + } + } else { + v8::Local obj = JS_NewFxDynamicObj(pJSRuntime, context, i); + v8Context->Global()->Set(v8Context, objName, obj).FromJust(); + pObjDef->m_StaticObj.Reset(isolate, obj); + } + } + v8PersistentContext.Reset(isolate, v8Context); +} + +void JS_ReleaseRuntime(IJS_Runtime* pJSRuntime, + v8::Global& v8PersistentContext) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::Locker locker(isolate); + v8::HandleScope handle_scope(isolate); + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) + return; + + for (int i = 0; i < pArray->GetSize(); i++) { + CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); + if (!pObjDef->m_StaticObj.IsEmpty()) { + v8::Local pObj = + v8::Local::New(isolate, pObjDef->m_StaticObj); + if (pObjDef->m_pDestructor) + pObjDef->m_pDestructor(pObj); + JS_FreePrivate(pObj); + } + delete pObjDef; + } + delete pArray; + isolate->SetData(1, NULL); + isolate->SetData(g_embedderDataSlot, NULL); + // TODO(tsepez): Don't use more than one embedder data slot. + isolate->SetData(2, NULL); +} + +void JS_Initial(unsigned int embedderDataSlot) { + g_embedderDataSlot = embedderDataSlot; +} +void JS_Release() {} +int JS_Parse(IJS_Runtime* pJSRuntime, + IFXJS_Context* pJSContext, + const wchar_t* script, + long length, + FXJSErr* perror) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::TryCatch try_catch(isolate); + + CFX_WideString wsScript(script); + CFX_ByteString bsScript = wsScript.UTF8Encode(); + + v8::Local context = isolate->GetCurrentContext(); + v8::Local compiled_script; + if (!v8::Script::Compile(context, + v8::String::NewFromUtf8(isolate, bsScript.c_str(), + v8::NewStringType::kNormal, + bsScript.GetLength()) + .ToLocalChecked()) + .ToLocal(&compiled_script)) { + v8::String::Utf8Value error(try_catch.Exception()); + return -1; + } + return 0; +} + +int JS_Execute(IJS_Runtime* pJSRuntime, + IFXJS_Context* pJSContext, + const wchar_t* script, + long length, + FXJSErr* perror) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::TryCatch try_catch(isolate); + + CFX_WideString wsScript(script); + CFX_ByteString bsScript = wsScript.UTF8Encode(); + + v8::Local context = isolate->GetCurrentContext(); + v8::Local compiled_script; + if (!v8::Script::Compile(context, + v8::String::NewFromUtf8(isolate, bsScript.c_str(), + v8::NewStringType::kNormal, + bsScript.GetLength()) + .ToLocalChecked()) + .ToLocal(&compiled_script)) { + v8::String::Utf8Value error(try_catch.Exception()); + return -1; + } + + v8::Local result; + if (!compiled_script->Run(context).ToLocal(&result)) { + v8::String::Utf8Value error(try_catch.Exception()); + return -1; + } + return 0; +} + +v8::Local JS_NewFxDynamicObj(IJS_Runtime* pJSRuntime, + IFXJS_Context* pJSContext, + int nObjDefnID) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + v8::Local context = isolate->GetCurrentContext(); + if (-1 == nObjDefnID) { + v8::Local objTempl = v8::ObjectTemplate::New(isolate); + v8::Local obj; + if (objTempl->NewInstance(context).ToLocal(&obj)) + return obj; + return v8::Local(); + } + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) + return v8::Local(); + + if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) + return v8::Local(); + CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); + + v8::Local objTemp = + v8::Local::New(isolate, pObjDef->m_objTemplate); + v8::Local obj; + if (!objTemp->NewInstance(context).ToLocal(&obj)) + return v8::Local(); + CJS_PrivateData* pPrivateData = FX_NEW CJS_PrivateData; + pPrivateData->ObjDefID = nObjDefnID; + + obj->SetAlignedPointerInInternalField(0, pPrivateData); + if (pObjDef->m_pConstructor) + pObjDef->m_pConstructor( + pJSContext, obj, + context->Global()->GetPrototype()->ToObject(context).ToLocalChecked()); + + return obj; +} + +v8::Local JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) + return v8::Local(); + + if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) + return v8::Local(); + CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); + v8::Local obj = + v8::Local::New(isolate, pObjDef->m_StaticObj); + return obj; +} + +void JS_SetThisObj(IJS_Runtime* pJSRuntime, int nThisObjID) { + // Do nothing. +} +v8::Local JS_GetThisObj(IJS_Runtime* pJSRuntime) { + // Return the global object. + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) + return v8::Local(); + + v8::Local context = isolate->GetCurrentContext(); + return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked(); +} + +int JS_GetObjDefnID(v8::Local pObj) { + if (pObj.IsEmpty() || !pObj->InternalFieldCount()) + return -1; + CJS_PrivateData* pPrivateData = + (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); + if (pPrivateData) + return pPrivateData->ObjDefID; + return -1; +} + +IJS_Runtime* JS_GetRuntime(v8::Local pObj) { + if (pObj.IsEmpty()) + return NULL; + v8::Local context = pObj->CreationContext(); + if (context.IsEmpty()) + return NULL; + return context->GetIsolate(); +} + +int JS_GetObjDefnID(IJS_Runtime* pJSRuntime, const wchar_t* pObjName) { + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Isolate::Scope isolate_scope(isolate); + + CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); + if (!pArray) + return -1; + + for (int i = 0; i < pArray->GetSize(); i++) { + CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); + if (FXSYS_wcscmp(pObjDef->objName, pObjName) == 0) + return i; + } + return -1; +} + +void JS_Error(v8::Isolate* isolate, const CFX_WideString& message) { + // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t + // wide-strings isn't handled by v8, so use UTF8 as a common + // intermediate format. + CFX_ByteString utf8_message = message.UTF8Encode(); + isolate->ThrowException(v8::String::NewFromUtf8(isolate, utf8_message.c_str(), + v8::NewStringType::kNormal) + .ToLocalChecked()); +} + +unsigned JS_CalcHash(const wchar_t* main, unsigned nLen) { + return (unsigned)FX_HashCode_String_GetW((const FX_WCHAR*)main, nLen); +} + +unsigned JS_CalcHash(const wchar_t* main) { + return (unsigned)FX_HashCode_String_GetW((const FX_WCHAR*)main, + FXSYS_wcslen(main)); +} +const wchar_t* JS_GetTypeof(v8::Local pObj) { + if (pObj.IsEmpty()) + return NULL; + if (pObj->IsString()) + return VALUE_NAME_STRING; + if (pObj->IsNumber()) + return VALUE_NAME_NUMBER; + if (pObj->IsBoolean()) + return VALUE_NAME_BOOLEAN; + if (pObj->IsDate()) + return VALUE_NAME_DATE; + if (pObj->IsObject()) + return VALUE_NAME_OBJECT; + if (pObj->IsNull()) + return VALUE_NAME_NULL; + if (pObj->IsUndefined()) + return VALUE_NAME_UNDEFINED; + return NULL; +} +void JS_SetPrivate(v8::Local pObj, void* p) { + JS_SetPrivate(NULL, pObj, p); +} + +void* JS_GetPrivate(v8::Local pObj) { + return JS_GetPrivate(NULL, pObj); +} + +void JS_SetPrivate(IJS_Runtime* pJSRuntime, + v8::Local pObj, + void* p) { + if (pObj.IsEmpty() || !pObj->InternalFieldCount()) + return; + CJS_PrivateData* pPrivateData = + (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); + if (!pPrivateData) + return; + pPrivateData->pPrivate = p; +} + +void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Local pObj) { + if (pObj.IsEmpty()) + return NULL; + CJS_PrivateData* pPrivateData = NULL; + if (pObj->InternalFieldCount()) + pPrivateData = + (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); + else { + // It could be a global proxy object. + v8::Local v = pObj->GetPrototype(); + v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; + v8::Local context = isolate->GetCurrentContext(); + if (v->IsObject()) + pPrivateData = (CJS_PrivateData*)v->ToObject(context) + .ToLocalChecked() + ->GetAlignedPointerFromInternalField(0); + } + if (!pPrivateData) + return NULL; + return pPrivateData->pPrivate; +} + +void JS_FreePrivate(void* pPrivateData) { + delete (CJS_PrivateData*)pPrivateData; +} + +void JS_FreePrivate(v8::Local pObj) { + if (pObj.IsEmpty() || !pObj->InternalFieldCount()) + return; + JS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0)); + pObj->SetAlignedPointerInInternalField(0, NULL); +} + +v8::Local JS_GetObjectValue(v8::Local pObj) { + return pObj; +} + +v8::Local WSToJSString(IJS_Runtime* pJSRuntime, + const wchar_t* PropertyName, + int Len = -1) { + CFX_WideString ws = CFX_WideString(PropertyName, Len); + CFX_ByteString bs = ws.UTF8Encode(); + if (!pJSRuntime) + pJSRuntime = v8::Isolate::GetCurrent(); + return v8::String::NewFromUtf8(pJSRuntime, bs.c_str(), + v8::NewStringType::kNormal) + .ToLocalChecked(); +} + +v8::Local JS_GetObjectElement(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName) { + if (pObj.IsEmpty()) + return v8::Local(); + v8::Local val; + if (!pObj->Get(pJSRuntime->GetCurrentContext(), + WSToJSString(pJSRuntime, PropertyName)) + .ToLocal(&val)) + return v8::Local(); + return val; +} + +v8::Local JS_GetObjectElementNames(IJS_Runtime* pJSRuntime, + v8::Local pObj) { + if (pObj.IsEmpty()) + return v8::Local(); + v8::Local val; + if (!pObj->GetPropertyNames(pJSRuntime->GetCurrentContext()).ToLocal(&val)) + return v8::Local(); + return val; +} + +void JS_PutObjectString(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + const wchar_t* sValue) // VT_string +{ + if (pObj.IsEmpty()) + return; + pObj->Set(pJSRuntime->GetCurrentContext(), + WSToJSString(pJSRuntime, PropertyName), + WSToJSString(pJSRuntime, sValue)) + .FromJust(); +} + +void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + int nValue) { + if (pObj.IsEmpty()) + return; + pObj->Set(pJSRuntime->GetCurrentContext(), + WSToJSString(pJSRuntime, PropertyName), + v8::Int32::New(pJSRuntime, nValue)) + .FromJust(); +} + +void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + float fValue) { + if (pObj.IsEmpty()) + return; + pObj->Set(pJSRuntime->GetCurrentContext(), + WSToJSString(pJSRuntime, PropertyName), + v8::Number::New(pJSRuntime, (double)fValue)) + .FromJust(); +} + +void JS_PutObjectNumber(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + double dValue) { + if (pObj.IsEmpty()) + return; + pObj->Set(pJSRuntime->GetCurrentContext(), + WSToJSString(pJSRuntime, PropertyName), + v8::Number::New(pJSRuntime, (double)dValue)) + .FromJust(); +} - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) return 0; - - if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return 0; - CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); - v8::Local objTemp = v8::Local::New(isolate, pObjDef->m_objTemplate); - objTemp->Set(v8::String::NewFromUtf8(isolate, bsMethodName.c_str(), v8::NewStringType::kNormal).ToLocalChecked(), v8::FunctionTemplate::New(isolate, pMethodCall), v8::ReadOnly); - pObjDef->m_objTemplate.Reset(isolate,objTemp); - return 0; +void JS_PutObjectBoolean(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + bool bValue) { + if (pObj.IsEmpty()) + return; + pObj->Set(pJSRuntime->GetCurrentContext(), + WSToJSString(pJSRuntime, PropertyName), + v8::Boolean::New(pJSRuntime, bValue)) + .FromJust(); } -int JS_DefineObjProperty(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sPropName, v8::AccessorGetterCallback pPropGet, v8::AccessorSetterCallback pPropPut) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - - CFX_WideString ws = CFX_WideString(sPropName); - CFX_ByteString bsPropertyName = ws.UTF8Encode(); - - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) return 0; - - if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return 0; - CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); - v8::Local objTemp = v8::Local::New(isolate, pObjDef->m_objTemplate); - objTemp->SetAccessor(v8::String::NewFromUtf8(isolate, bsPropertyName.c_str(), v8::NewStringType::kNormal).ToLocalChecked(), pPropGet, pPropPut); - pObjDef->m_objTemplate.Reset(isolate,objTemp); - return 0; +void JS_PutObjectObject(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName, + v8::Local pPut) { + if (pObj.IsEmpty()) + return; + pObj->Set(pJSRuntime->GetCurrentContext(), + WSToJSString(pJSRuntime, PropertyName), pPut) + .FromJust(); } -int JS_DefineObjAllProperties(IJS_Runtime* pJSRuntime, int nObjDefnID, v8::NamedPropertyQueryCallback pPropQurey, v8::NamedPropertyGetterCallback pPropGet, v8::NamedPropertySetterCallback pPropPut, v8::NamedPropertyDeleterCallback pPropDel) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) return 0; - - if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return 0; - CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); - v8::Local objTemp = v8::Local::New(isolate, pObjDef->m_objTemplate); - objTemp->SetNamedPropertyHandler(pPropGet, pPropPut, pPropQurey, pPropDel); - pObjDef->m_objTemplate.Reset(isolate,objTemp); - return 0; +void JS_PutObjectNull(IJS_Runtime* pJSRuntime, + v8::Local pObj, + const wchar_t* PropertyName) { + if (pObj.IsEmpty()) + return; + pObj->Set(pJSRuntime->GetCurrentContext(), + WSToJSString(pJSRuntime, PropertyName), v8::Local()) + .FromJust(); } -int JS_DefineObjConst(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sConstName, v8::Local pDefault) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) return 0; - - CFX_WideString ws = CFX_WideString(sConstName); - CFX_ByteString bsConstName = ws.UTF8Encode(); - - if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return 0; - CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); - v8::Local objTemp = v8::Local::New(isolate, pObjDef->m_objTemplate); - objTemp->Set(isolate, bsConstName.c_str(), pDefault); - pObjDef->m_objTemplate.Reset(isolate,objTemp); - return 0; +v8::Local JS_NewArray(IJS_Runtime* pJSRuntime) { + return v8::Array::New(pJSRuntime); } -static v8::Global& _getGlobalObjectTemplate(IJS_Runtime* pJSRuntime) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - ASSERT(pArray != NULL); - for(int i=0; iGetSize(); i++) - { - CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); - if(pObjDef->m_bSetAsGlobalObject) - return pObjDef->m_objTemplate; - } - static v8::Global gloabalObjectTemplate; - return gloabalObjectTemplate; -} - -int JS_DefineGlobalMethod(IJS_Runtime* pJSRuntime, const wchar_t* sMethodName, v8::FunctionCallback pMethodCall) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - - CFX_WideString ws = CFX_WideString(sMethodName); - CFX_ByteString bsMethodName = ws.UTF8Encode(); - - v8::Local funTempl = v8::FunctionTemplate::New(isolate, pMethodCall); - v8::Local objTemp; - - v8::Global& globalObjTemp = _getGlobalObjectTemplate(pJSRuntime); - if(globalObjTemp.IsEmpty()) - objTemp = v8::ObjectTemplate::New(isolate); - else - objTemp = v8::Local::New(isolate, globalObjTemp); - objTemp->Set(v8::String::NewFromUtf8(isolate, bsMethodName.c_str(), v8::NewStringType::kNormal).ToLocalChecked(), funTempl, v8::ReadOnly); - - globalObjTemp.Reset(isolate,objTemp); - - return 0; +unsigned JS_PutArrayElement(IJS_Runtime* pJSRuntime, + v8::Local pArray, + unsigned index, + v8::Local pValue, + FXJSVALUETYPE eType) { + if (pArray.IsEmpty()) + return 0; + if (pArray->Set(pJSRuntime->GetCurrentContext(), index, pValue).IsNothing()) + return 0; + return 1; } -int JS_DefineGlobalConst(IJS_Runtime* pJSRuntime, const wchar_t* sConstName, v8::Local pDefault) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::HandleScope handle_scope(isolate); - - CFX_WideString ws = CFX_WideString(sConstName); - CFX_ByteString bsConst= ws.UTF8Encode(); - - v8::Local objTemp; - - v8::Global& globalObjTemp = _getGlobalObjectTemplate(pJSRuntime); - if(globalObjTemp.IsEmpty()) - objTemp = v8::ObjectTemplate::New(isolate); - else - objTemp = v8::Local::New(isolate, globalObjTemp); - objTemp->Set(v8::String::NewFromUtf8(isolate, bsConst.c_str(), v8::NewStringType::kNormal).ToLocalChecked(), pDefault, v8::ReadOnly); - - globalObjTemp.Reset(isolate,objTemp); - - return 0; +v8::Local JS_GetArrayElement(IJS_Runtime* pJSRuntime, + v8::Local pArray, + unsigned index) { + if (pArray.IsEmpty()) + return v8::Local(); + v8::Local val; + if (pArray->Get(pJSRuntime->GetCurrentContext(), index).ToLocal(&val)) + return v8::Local(); + return val; } - -void JS_InitialRuntime(IJS_Runtime* pJSRuntime,IFXJS_Runtime* pFXRuntime, IFXJS_Context* context, v8::Global& v8PersistentContext) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::Locker locker(isolate); - v8::HandleScope handle_scope(isolate); - - v8::Global& globalObjTemp = _getGlobalObjectTemplate(pJSRuntime); - v8::Local v8Context = v8::Context::New(isolate, NULL, v8::Local::New(isolate, globalObjTemp)); - v8::Context::Scope context_scope(v8Context); - - //v8::Local ptr = External::New(isolate, pFXRuntime); - //v8Context->SetEmbedderData(1, ptr); - // TODO(tsepez): Don't use more than one embedder data slot. - isolate->SetData(2, pFXRuntime); - - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) return; - - for(int i=0; iGetSize(); i++) - { - CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); - CFX_WideString ws = CFX_WideString(pObjDef->objName); - CFX_ByteString bs = ws.UTF8Encode(); - v8::Local objName = v8::String::NewFromUtf8(isolate, bs.c_str(), v8::NewStringType::kNormal, bs.GetLength()).ToLocalChecked(); - - - if(pObjDef->objType == JS_DYNAMIC) - { - //Document is set as global object, need to construct it first. - CFX_WideString wsString(L"Document"); - if(ws.Equal(wsString)) - { - - CJS_PrivateData* pPrivateData = FX_NEW CJS_PrivateData; - pPrivateData->ObjDefID = i; - - v8Context->Global()->GetPrototype()->ToObject(v8Context).ToLocalChecked()->SetAlignedPointerInInternalField(0, pPrivateData); - - if(pObjDef->m_pConstructor) - pObjDef->m_pConstructor(context, v8Context->Global()->GetPrototype()->ToObject(v8Context).ToLocalChecked(), v8Context->Global()->GetPrototype()->ToObject(v8Context).ToLocalChecked()); - } - } - else - { - v8::Local obj = JS_NewFxDynamicObj(pJSRuntime, context, i); - v8Context->Global()->Set(v8Context, objName, obj).FromJust(); - pObjDef->m_StaticObj.Reset(isolate, obj); - } - } - v8PersistentContext.Reset(isolate, v8Context); -} - -void JS_ReleaseRuntime(IJS_Runtime* pJSRuntime, v8::Global& v8PersistentContext) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::Locker locker(isolate); - v8::HandleScope handle_scope(isolate); - - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) return ; - - for(int i=0; iGetSize(); i++) - { - CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); - if(!pObjDef->m_StaticObj.IsEmpty()) - { - v8::Local pObj = v8::Local::New(isolate, pObjDef->m_StaticObj); - if(pObjDef->m_pDestructor) - pObjDef->m_pDestructor(pObj); - JS_FreePrivate(pObj); - } - delete pObjDef; - } - delete pArray; - isolate->SetData(1,NULL); - isolate->SetData(g_embedderDataSlot,NULL); - // TODO(tsepez): Don't use more than one embedder data slot. - isolate->SetData(2,NULL); -} - -void JS_Initial(unsigned int embedderDataSlot) -{ - g_embedderDataSlot = embedderDataSlot; -} -void JS_Release() -{ - -} -int JS_Parse(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, const wchar_t* script, long length, FXJSErr* perror) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::TryCatch try_catch(isolate); - - CFX_WideString wsScript(script); - CFX_ByteString bsScript = wsScript.UTF8Encode(); - - - v8::Local context = isolate->GetCurrentContext(); - v8::Local compiled_script; - if (!v8::Script::Compile(context, v8::String::NewFromUtf8(isolate, bsScript.c_str(), v8::NewStringType::kNormal, bsScript.GetLength()).ToLocalChecked()).ToLocal(&compiled_script)) { - v8::String::Utf8Value error(try_catch.Exception()); - return -1; - } - return 0; +unsigned JS_GetArrayLength(v8::Local pArray) { + if (pArray.IsEmpty()) + return 0; + return pArray->Length(); } -int JS_Execute(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, const wchar_t* script, long length, FXJSErr* perror) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::TryCatch try_catch(isolate); - - CFX_WideString wsScript(script); - CFX_ByteString bsScript = wsScript.UTF8Encode(); - - v8::Local context = isolate->GetCurrentContext(); - v8::Local compiled_script; - if (!v8::Script::Compile(context, v8::String::NewFromUtf8(isolate, bsScript.c_str(), v8::NewStringType::kNormal, bsScript.GetLength()).ToLocalChecked()).ToLocal(&compiled_script)) { - v8::String::Utf8Value error(try_catch.Exception()); - return -1; - } - - v8::Local result; - if (!compiled_script->Run(context).ToLocal(&result)) { - v8::String::Utf8Value error(try_catch.Exception()); - return -1; - } - return 0; -} - -v8::Local JS_NewFxDynamicObj(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, int nObjDefnID) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - v8::Local context = isolate->GetCurrentContext(); - if(-1 == nObjDefnID) - { - v8::Local objTempl = v8::ObjectTemplate::New(isolate); - v8::Local obj; - if (objTempl->NewInstance(context).ToLocal(&obj)) return obj; - return v8::Local(); - } - - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) return v8::Local(); - - - if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return v8::Local(); - CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); - - v8::Local objTemp = v8::Local::New(isolate, pObjDef->m_objTemplate); - v8::Local obj; - if (!objTemp->NewInstance(context).ToLocal(&obj)) return v8::Local(); - CJS_PrivateData* pPrivateData = FX_NEW CJS_PrivateData; - pPrivateData->ObjDefID = nObjDefnID; - - obj->SetAlignedPointerInInternalField(0, pPrivateData); - if(pObjDef->m_pConstructor) - pObjDef->m_pConstructor(pJSContext, obj, context->Global()->GetPrototype()->ToObject(context).ToLocalChecked()); - - return obj; -} - -v8::Local JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) return v8::Local(); - - if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return v8::Local(); - CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); - v8::Local obj = v8::Local::New(isolate,pObjDef->m_StaticObj); - return obj; -} - -void JS_SetThisObj(IJS_Runtime* pJSRuntime, int nThisObjID) -{ - //Do nothing. -} -v8::Local JS_GetThisObj(IJS_Runtime * pJSRuntime) -{ - //Return the global object. - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) return v8::Local(); - - v8::Local context = isolate->GetCurrentContext(); - return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked(); -} - -int JS_GetObjDefnID(v8::Local pObj) -{ - if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return -1; - CJS_PrivateData* pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); - if(pPrivateData) - return pPrivateData->ObjDefID; - return -1; -} - -IJS_Runtime* JS_GetRuntime(v8::Local pObj) -{ - if(pObj.IsEmpty()) return NULL; - v8::Local context = pObj->CreationContext(); - if(context.IsEmpty()) return NULL; - return context->GetIsolate(); -} - -int JS_GetObjDefnID(IJS_Runtime * pJSRuntime, const wchar_t* pObjName) -{ - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Isolate::Scope isolate_scope(isolate); - - CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot); - if(!pArray) return -1; - - for(int i=0; iGetSize(); i++) - { - CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); - if(FXSYS_wcscmp(pObjDef->objName, pObjName) == 0) - return i; - } - return -1; -} - -void JS_Error(v8::Isolate* isolate, const CFX_WideString& message) -{ - // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t - // wide-strings isn't handled by v8, so use UTF8 as a common - // intermediate format. - CFX_ByteString utf8_message = message.UTF8Encode(); - isolate->ThrowException(v8::String::NewFromUtf8(isolate, - utf8_message.c_str(), - v8::NewStringType::kNormal).ToLocalChecked()); -} - -unsigned JS_CalcHash(const wchar_t* main, unsigned nLen) -{ - return (unsigned)FX_HashCode_String_GetW((const FX_WCHAR*)main, nLen); -} - -unsigned JS_CalcHash(const wchar_t* main) -{ - return (unsigned)FX_HashCode_String_GetW((const FX_WCHAR*)main, FXSYS_wcslen(main)); -} -const wchar_t* JS_GetTypeof(v8::Local pObj) -{ - if(pObj.IsEmpty()) return NULL; - if(pObj->IsString()) - return VALUE_NAME_STRING; - if(pObj->IsNumber()) - return VALUE_NAME_NUMBER; - if(pObj->IsBoolean()) - return VALUE_NAME_BOOLEAN; - if(pObj->IsDate()) - return VALUE_NAME_DATE; - if(pObj->IsObject()) - return VALUE_NAME_OBJECT; - if(pObj->IsNull()) - return VALUE_NAME_NULL; - if(pObj->IsUndefined()) - return VALUE_NAME_UNDEFINED; - return NULL; - -} -void JS_SetPrivate(v8::Local pObj, void* p) -{ - JS_SetPrivate(NULL, pObj, p); -} - -void* JS_GetPrivate(v8::Local pObj) -{ - return JS_GetPrivate(NULL,pObj); -} - -void JS_SetPrivate(IJS_Runtime* pJSRuntime, v8::Local pObj, void* p) -{ - if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return; - CJS_PrivateData* pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); - if(!pPrivateData) return; - pPrivateData->pPrivate = p; -} - -void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Local pObj) -{ - if(pObj.IsEmpty()) return NULL; - CJS_PrivateData* pPrivateData = NULL; - if(pObj->InternalFieldCount()) - pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); - else - { - //It could be a global proxy object. - v8::Local v = pObj->GetPrototype(); - v8::Isolate* isolate = (v8::Isolate*)pJSRuntime; - v8::Local context = isolate->GetCurrentContext(); - if(v->IsObject()) - pPrivateData = (CJS_PrivateData*)v->ToObject(context).ToLocalChecked()->GetAlignedPointerFromInternalField(0); - } - if(!pPrivateData) return NULL; - return pPrivateData->pPrivate; -} - -void JS_FreePrivate(void* pPrivateData) -{ - delete (CJS_PrivateData*)pPrivateData; -} - -void JS_FreePrivate(v8::Local pObj) -{ - if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return; - JS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0)); - pObj->SetAlignedPointerInInternalField(0, NULL); -} - - -v8::Local JS_GetObjectValue(v8::Local pObj) -{ - return pObj; -} - -v8::Local WSToJSString(IJS_Runtime* pJSRuntime, const wchar_t* PropertyName, int Len = -1) -{ - CFX_WideString ws = CFX_WideString(PropertyName,Len); - CFX_ByteString bs = ws.UTF8Encode(); - if(!pJSRuntime) pJSRuntime = v8::Isolate::GetCurrent(); - return v8::String::NewFromUtf8(pJSRuntime, bs.c_str(), v8::NewStringType::kNormal).ToLocalChecked(); -} - -v8::Local JS_GetObjectElement(IJS_Runtime* pJSRuntime, v8::Local pObj,const wchar_t* PropertyName) -{ - if(pObj.IsEmpty()) return v8::Local(); - v8::Local val; - if (!pObj->Get(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName)).ToLocal(&val)) return v8::Local(); - return val; +v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime, int number) { + return v8::Int32::New(pJSRuntime, number); } -v8::Local JS_GetObjectElementNames(IJS_Runtime* pJSRuntime, v8::Local pObj) -{ - if(pObj.IsEmpty()) return v8::Local(); - v8::Local val; - if (!pObj->GetPropertyNames(pJSRuntime->GetCurrentContext()).ToLocal(&val)) return v8::Local(); - return val; +v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime, double number) { + return v8::Number::New(pJSRuntime, number); } -void JS_PutObjectString(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, const wchar_t* sValue) //VT_string -{ - if(pObj.IsEmpty()) return; - pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime, PropertyName), WSToJSString(pJSRuntime, sValue)).FromJust(); +v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime, float number) { + return v8::Number::New(pJSRuntime, (float)number); } -void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, int nValue) -{ - if(pObj.IsEmpty()) return; - pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),v8::Int32::New(pJSRuntime, nValue)).FromJust(); +v8::Local JS_NewBoolean(IJS_Runtime* pJSRuntime, bool b) { + return v8::Boolean::New(pJSRuntime, b); } -void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, float fValue) -{ - if(pObj.IsEmpty()) return; - pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),v8::Number::New(pJSRuntime, (double)fValue)).FromJust(); +v8::Local JS_NewObject(IJS_Runtime* pJSRuntime, + v8::Local pObj) { + if (pObj.IsEmpty()) + return v8::Local(); + return pObj->Clone(); } -void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, double dValue) -{ - if(pObj.IsEmpty()) return; - pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),v8::Number::New(pJSRuntime, (double)dValue)).FromJust(); +v8::Local JS_NewObject2(IJS_Runtime* pJSRuntime, + v8::Local pObj) { + if (pObj.IsEmpty()) + return v8::Local(); + return pObj->Clone(); } -void JS_PutObjectBoolean(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, bool bValue) -{ - if(pObj.IsEmpty()) return; - pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),v8::Boolean::New(pJSRuntime, bValue)).FromJust(); +v8::Local JS_NewString(IJS_Runtime* pJSRuntime, + const wchar_t* string) { + return WSToJSString(pJSRuntime, string); } -void JS_PutObjectObject(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName, v8::Local pPut) -{ - if(pObj.IsEmpty()) return; - pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),pPut).FromJust(); +v8::Local JS_NewString(IJS_Runtime* pJSRuntime, + const wchar_t* string, + unsigned nLen) { + return WSToJSString(pJSRuntime, string, nLen); } -void JS_PutObjectNull(IJS_Runtime* pJSRuntime,v8::Local pObj, const wchar_t* PropertyName) -{ - if(pObj.IsEmpty()) return; - pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),v8::Local()).FromJust(); +v8::Local JS_NewNull() { + return v8::Local(); } -v8::Local JS_NewArray(IJS_Runtime* pJSRuntime) -{ - return v8::Array::New(pJSRuntime); +v8::Local JS_NewDate(IJS_Runtime* pJSRuntime, double d) { + return v8::Date::New(pJSRuntime->GetCurrentContext(), d).ToLocalChecked(); } -unsigned JS_PutArrayElement(IJS_Runtime* pJSRuntime, v8::Local pArray,unsigned index,v8::Local pValue,FXJSVALUETYPE eType) -{ - if(pArray.IsEmpty()) return 0; - if (pArray->Set(pJSRuntime->GetCurrentContext(), index, pValue).IsNothing()) return 0; - return 1; +v8::Local JS_NewValue(IJS_Runtime* pJSRuntime) { + return v8::Local(); } -v8::Local JS_GetArrayElement(IJS_Runtime* pJSRuntime, v8::Local pArray,unsigned index) -{ - if(pArray.IsEmpty()) return v8::Local(); - v8::Local val; - if (pArray->Get(pJSRuntime->GetCurrentContext(), index).ToLocal(&val)) return v8::Local(); +v8::Local JS_GetListValue(IJS_Runtime* pJSRuntime, + v8::Local pList, + int index) { + v8::Local context = pJSRuntime->GetCurrentContext(); + if (!pList.IsEmpty() && pList->IsObject()) { + v8::Local obj; + if (pList->ToObject(context).ToLocal(&obj)) { + v8::Local val; + if (obj->Get(context, index).ToLocal(&val)) return val; + } + } + return v8::Local(); } -unsigned JS_GetArrayLength(v8::Local pArray) -{ - if(pArray.IsEmpty()) return 0; - return pArray->Length(); -} - -v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime,int number) -{ - return v8::Int32::New(pJSRuntime, number); +int JS_ToInt32(IJS_Runtime* pJSRuntime, v8::Local pValue) { + if (pValue.IsEmpty()) + return 0; + v8::Local context = pJSRuntime->GetCurrentContext(); + return pValue->ToInt32(context).ToLocalChecked()->Value(); } -v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime,double number) -{ - return v8::Number::New(pJSRuntime, number); +bool JS_ToBoolean(IJS_Runtime* pJSRuntime, v8::Local pValue) { + if (pValue.IsEmpty()) + return false; + v8::Local context = pJSRuntime->GetCurrentContext(); + return pValue->ToBoolean(context).ToLocalChecked()->Value(); } -v8::Local JS_NewNumber(IJS_Runtime* pJSRuntime,float number) -{ - return v8::Number::New(pJSRuntime, (float)number); +double JS_ToNumber(IJS_Runtime* pJSRuntime, v8::Local pValue) { + if (pValue.IsEmpty()) + return 0.0; + v8::Local context = pJSRuntime->GetCurrentContext(); + return pValue->ToNumber(context).ToLocalChecked()->Value(); } -v8::Local JS_NewBoolean(IJS_Runtime* pJSRuntime,bool b) -{ - return v8::Boolean::New(pJSRuntime, b); +v8::Local JS_ToObject(IJS_Runtime* pJSRuntime, + v8::Local pValue) { + if (pValue.IsEmpty()) + return v8::Local(); + v8::Local context = pJSRuntime->GetCurrentContext(); + return pValue->ToObject(context).ToLocalChecked(); } -v8::Local JS_NewObject(IJS_Runtime* pJSRuntime,v8::Local pObj) -{ - if(pObj.IsEmpty()) return v8::Local(); - return pObj->Clone(); +CFX_WideString JS_ToString(IJS_Runtime* pJSRuntime, + v8::Local pValue) { + if (pValue.IsEmpty()) + return L""; + v8::Local context = pJSRuntime->GetCurrentContext(); + v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked()); + return CFX_WideString::FromUTF8(*s, s.length()); } -v8::Local JS_NewObject2(IJS_Runtime* pJSRuntime,v8::Local pObj) -{ - if(pObj.IsEmpty()) return v8::Local(); - return pObj->Clone(); +v8::Local JS_ToArray(IJS_Runtime* pJSRuntime, + v8::Local pValue) { + if (pValue.IsEmpty()) + return v8::Local(); + v8::Local context = pJSRuntime->GetCurrentContext(); + return v8::Local::Cast(pValue->ToObject(context).ToLocalChecked()); } - -v8::Local JS_NewString(IJS_Runtime* pJSRuntime,const wchar_t* string) -{ - return WSToJSString(pJSRuntime, string); +void JS_ValueCopy(v8::Local& pTo, v8::Local pFrom) { + pTo = pFrom; } -v8::Local JS_NewString(IJS_Runtime* pJSRuntime,const wchar_t* string, unsigned nLen) -{ - return WSToJSString(pJSRuntime, string, nLen); -} - -v8::Local JS_NewNull() -{ - return v8::Local(); -} - -v8::Local JS_NewDate(IJS_Runtime* pJSRuntime,double d) -{ - return v8::Date::New(pJSRuntime->GetCurrentContext(), d).ToLocalChecked(); -} - -v8::Local JS_NewValue(IJS_Runtime* pJSRuntime) -{ - return v8::Local(); -} - -v8::Local JS_GetListValue(IJS_Runtime* pJSRuntime, v8::Local pList, int index) -{ - - v8::Local context = pJSRuntime->GetCurrentContext(); - if(!pList.IsEmpty() && pList->IsObject()) - { - v8::Local obj; - if (pList->ToObject(context).ToLocal(&obj)) - { - v8::Local val; - if (obj->Get(context, index).ToLocal(&val)) return val; - } - } - return v8::Local(); -} - -int JS_ToInt32(IJS_Runtime* pJSRuntime, v8::Local pValue) -{ - if(pValue.IsEmpty()) return 0; - v8::Local context = pJSRuntime->GetCurrentContext(); - return pValue->ToInt32(context).ToLocalChecked()->Value(); -} - -bool JS_ToBoolean(IJS_Runtime* pJSRuntime, v8::Local pValue) -{ - if(pValue.IsEmpty()) return false; - v8::Local context = pJSRuntime->GetCurrentContext(); - return pValue->ToBoolean(context).ToLocalChecked()->Value(); -} - -double JS_ToNumber(IJS_Runtime* pJSRuntime, v8::Local pValue) -{ - if(pValue.IsEmpty()) return 0.0; - v8::Local context = pJSRuntime->GetCurrentContext(); - return pValue->ToNumber(context).ToLocalChecked()->Value(); -} - -v8::Local JS_ToObject(IJS_Runtime* pJSRuntime, v8::Local pValue) -{ - if(pValue.IsEmpty()) return v8::Local(); - v8::Local context = pJSRuntime->GetCurrentContext(); - return pValue->ToObject(context).ToLocalChecked(); -} - -CFX_WideString JS_ToString(IJS_Runtime* pJSRuntime, v8::Local pValue) -{ - if(pValue.IsEmpty()) return L""; - v8::Local context = pJSRuntime->GetCurrentContext(); - v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked()); - return CFX_WideString::FromUTF8(*s, s.length()); -} - -v8::Local JS_ToArray(IJS_Runtime* pJSRuntime, v8::Local pValue) -{ - if(pValue.IsEmpty()) return v8::Local(); - v8::Local context = pJSRuntime->GetCurrentContext(); - return v8::Local::Cast(pValue->ToObject(context).ToLocalChecked()); -} - -void JS_ValueCopy(v8::Local& pTo, v8::Local pFrom) -{ - pTo = pFrom; -} +// JavaScript time implement begin. - -//JavaScript time implement begin. - -double _getLocalTZA() -{ - if(!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) - return 0; - time_t t = 0; - time(&t); - localtime(&t); +double _getLocalTZA() { + if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) + return 0; + time_t t = 0; + time(&t); + localtime(&t); #if _MSC_VER >= 1900 // In gcc and in Visual Studio prior to VS 2015 'timezone' is a global // variable declared in time.h. That variable was deprecated and in VS 2015 @@ -790,286 +915,272 @@ double _getLocalTZA() long timezone = 0; _get_timezone(&timezone); #endif - return (double)(-(timezone * 1000)); + return (double)(-(timezone * 1000)); } -int _getDaylightSavingTA(double d) -{ - if(!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) - return 0; - time_t t = (time_t)(d/1000); - struct tm * tmp = localtime(&t); - if (tmp == NULL) - return 0; - if (tmp->tm_isdst > 0) - //One hour. - return (int)60*60*1000; - return 0; -} - -double _Mod(double x, double y) -{ - double r = fmod(x, y); - if (r < 0) r += y; - return r; +int _getDaylightSavingTA(double d) { + if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) + return 0; + time_t t = (time_t)(d / 1000); + struct tm* tmp = localtime(&t); + if (tmp == NULL) + return 0; + if (tmp->tm_isdst > 0) + // One hour. + return (int)60 * 60 * 1000; + return 0; } -int _isfinite(double v) -{ +double _Mod(double x, double y) { + double r = fmod(x, y); + if (r < 0) + r += y; + return r; +} + +int _isfinite(double v) { #if _MSC_VER - return ::_finite(v); + return ::_finite(v); #else - return std::fabs(v) < std::numeric_limits::max(); + return std::fabs(v) < std::numeric_limits::max(); #endif } -double _toInteger(double n) -{ - return (n >= 0)? FXSYS_floor(n): -FXSYS_floor(-n); -} - -bool _isLeapYear(int year) -{ - return (year%4==0)&&((year%100!=0)||(year%400!=0)); -} - -int _DayFromYear(int y) -{ - return (int)(365*(y - 1970.0) + FXSYS_floor((y - 1969.0)/4) - FXSYS_floor((y - 1901.0)/100)+FXSYS_floor((y - 1601.0)/400)); -} - -double _TimeFromYear(int y) -{ - return ((double)86400000) * _DayFromYear(y); -} - -double _TimeFromYearMonth(int y, int m) -{ - static int daysMonth[12] ={ 0,31,59,90,120,151,181,212,243,273,304,334}; - static int leapDaysMonth[12] = { 0,31,60,91,121,152,182,213,244,274,305,335}; - int* pMonth = daysMonth; - if(_isLeapYear(y)) - pMonth = leapDaysMonth; - return _TimeFromYear(y) + ((double)pMonth[m])*86400000; -} - -int _Day(double t) -{ - return (int)FXSYS_floor(t / 86400000); -} - -int _YearFromTime(double t) -{ - //estimate the time. - int y = 1970 +(int)(t/(365.0*86400000)); - if (_TimeFromYear(y) <= t) - { - while(_TimeFromYear(y+1) <= t) y++; - } - else - while(_TimeFromYear(y-1) > t) y--; - return y; -} - -int _DayWithinYear(double t) -{ - int year = _YearFromTime(t); - int day = _Day(t); - return day-_DayFromYear(year); -} - -int _MonthFromTime(double t) -{ - int day = _DayWithinYear(t); - int year = _YearFromTime(t); - if(0<=day && day <31) - return 0; - if(31<=day && day< 59+_isLeapYear(year)) - return 1; - if((59+_isLeapYear(year))<=day && day<(90+_isLeapYear(year))) - return 2; - if((90+_isLeapYear(year))<=day && day<(120+_isLeapYear(year))) - return 3; - if((120+_isLeapYear(year))<=day && day<(151+_isLeapYear(year))) - return 4; - if((151+_isLeapYear(year))<=day && day<(181+_isLeapYear(year))) - return 5; - if((181+_isLeapYear(year))<=day && day<(212+_isLeapYear(year))) - return 6; - if((212+_isLeapYear(year))<=day && day<(243+_isLeapYear(year))) - return 7; - if((243+_isLeapYear(year))<=day && day<(273+_isLeapYear(year))) - return 8; - if((273+_isLeapYear(year))<=day && day<(304+_isLeapYear(year))) - return 9; - if((304+_isLeapYear(year))<=day && day<(334+_isLeapYear(year))) - return 10; - if((334+_isLeapYear(year))<=day && day<(365+_isLeapYear(year))) - return 11; - - return -1; -} - -int _DateFromTime(double t) -{ - int day = _DayWithinYear(t); - int year = _YearFromTime(t); - bool leap = _isLeapYear(year); - int month = _MonthFromTime(t); - switch (month) - { - case 0: - return day+1; - case 1: - return day-30; - case 2: - return day-58-leap; - case 3: - return day-89-leap; - case 4: - return day-119-leap; - case 5: - return day-150-leap; - case 6: - return day-180-leap; - case 7: - return day-211-leap; - case 8: - return day-242-leap; - case 9: - return day-272-leap; - case 10: - return day-303-leap; - case 11: - return day-333-leap; - default: - return 0; - } -} - -double JS_GetDateTime() -{ - if(!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) - return 0; - time_t t = time(NULL); - struct tm* pTm = localtime(&t); - - int year = pTm->tm_year+1900; - double t1 = _TimeFromYear(year); +double _toInteger(double n) { + return (n >= 0) ? FXSYS_floor(n) : -FXSYS_floor(-n); +} + +bool _isLeapYear(int year) { + return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 != 0)); +} + +int _DayFromYear(int y) { + return (int)(365 * (y - 1970.0) + FXSYS_floor((y - 1969.0) / 4) - + FXSYS_floor((y - 1901.0) / 100) + + FXSYS_floor((y - 1601.0) / 400)); +} + +double _TimeFromYear(int y) { + return ((double)86400000) * _DayFromYear(y); +} + +double _TimeFromYearMonth(int y, int m) { + static int daysMonth[12] = {0, 31, 59, 90, 120, 151, + 181, 212, 243, 273, 304, 334}; + static int leapDaysMonth[12] = {0, 31, 60, 91, 121, 152, + 182, 213, 244, 274, 305, 335}; + int* pMonth = daysMonth; + if (_isLeapYear(y)) + pMonth = leapDaysMonth; + return _TimeFromYear(y) + ((double)pMonth[m]) * 86400000; +} + +int _Day(double t) { + return (int)FXSYS_floor(t / 86400000); +} + +int _YearFromTime(double t) { + // estimate the time. + int y = 1970 + (int)(t / (365.0 * 86400000)); + if (_TimeFromYear(y) <= t) { + while (_TimeFromYear(y + 1) <= t) + y++; + } else + while (_TimeFromYear(y - 1) > t) + y--; + return y; +} + +int _DayWithinYear(double t) { + int year = _YearFromTime(t); + int day = _Day(t); + return day - _DayFromYear(year); +} + +int _MonthFromTime(double t) { + int day = _DayWithinYear(t); + int year = _YearFromTime(t); + if (0 <= day && day < 31) + return 0; + if (31 <= day && day < 59 + _isLeapYear(year)) + return 1; + if ((59 + _isLeapYear(year)) <= day && day < (90 + _isLeapYear(year))) + return 2; + if ((90 + _isLeapYear(year)) <= day && day < (120 + _isLeapYear(year))) + return 3; + if ((120 + _isLeapYear(year)) <= day && day < (151 + _isLeapYear(year))) + return 4; + if ((151 + _isLeapYear(year)) <= day && day < (181 + _isLeapYear(year))) + return 5; + if ((181 + _isLeapYear(year)) <= day && day < (212 + _isLeapYear(year))) + return 6; + if ((212 + _isLeapYear(year)) <= day && day < (243 + _isLeapYear(year))) + return 7; + if ((243 + _isLeapYear(year)) <= day && day < (273 + _isLeapYear(year))) + return 8; + if ((273 + _isLeapYear(year)) <= day && day < (304 + _isLeapYear(year))) + return 9; + if ((304 + _isLeapYear(year)) <= day && day < (334 + _isLeapYear(year))) + return 10; + if ((334 + _isLeapYear(year)) <= day && day < (365 + _isLeapYear(year))) + return 11; + + return -1; +} + +int _DateFromTime(double t) { + int day = _DayWithinYear(t); + int year = _YearFromTime(t); + bool leap = _isLeapYear(year); + int month = _MonthFromTime(t); + switch (month) { + case 0: + return day + 1; + case 1: + return day - 30; + case 2: + return day - 58 - leap; + case 3: + return day - 89 - leap; + case 4: + return day - 119 - leap; + case 5: + return day - 150 - leap; + case 6: + return day - 180 - leap; + case 7: + return day - 211 - leap; + case 8: + return day - 242 - leap; + case 9: + return day - 272 - leap; + case 10: + return day - 303 - leap; + case 11: + return day - 333 - leap; + default: + return 0; + } +} + +double JS_GetDateTime() { + if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) + return 0; + time_t t = time(NULL); + struct tm* pTm = localtime(&t); + + int year = pTm->tm_year + 1900; + double t1 = _TimeFromYear(year); + + return t1 + pTm->tm_yday * 86400000.0 + pTm->tm_hour * 3600000.0 + + pTm->tm_min * 60000.0 + pTm->tm_sec * 1000.0; +} + +int JS_GetYearFromTime(double dt) { + return _YearFromTime(dt); +} + +int JS_GetMonthFromTime(double dt) { + return _MonthFromTime(dt); +} + +int JS_GetDayFromTime(double dt) { + return _DateFromTime(dt); +} + +int JS_GetHourFromTime(double dt) { + return (int)_Mod(FXSYS_floor((double)(dt / (60 * 60 * 1000))), 24); +} + +int JS_GetMinFromTime(double dt) { + return (int)_Mod(FXSYS_floor((double)(dt / (60 * 1000))), 60); +} + +int JS_GetSecFromTime(double dt) { + return (int)_Mod(FXSYS_floor((double)(dt / 1000)), 60); +} + +double JS_DateParse(const wchar_t* string) { + v8::Isolate* pIsolate = v8::Isolate::GetCurrent(); + v8::Isolate::Scope isolate_scope(pIsolate); + v8::HandleScope scope(pIsolate); + + v8::Local context = pIsolate->GetCurrentContext(); + + // Use the built-in object method. + v8::Local v = + context->Global() + ->Get(context, v8::String::NewFromUtf8(pIsolate, "Date", + v8::NewStringType::kNormal) + .ToLocalChecked()) + .ToLocalChecked(); + if (v->IsObject()) { + v8::Local o = v->ToObject(context).ToLocalChecked(); + v = o->Get(context, v8::String::NewFromUtf8(pIsolate, "parse", + v8::NewStringType::kNormal) + .ToLocalChecked()) + .ToLocalChecked(); + if (v->IsFunction()) { + v8::Local funC = v8::Local::Cast(v); - return t1 + pTm->tm_yday*86400000.0 + pTm->tm_hour*3600000.0+pTm->tm_min*60000.0+pTm->tm_sec*1000.0; + const int argc = 1; + v8::Local timeStr = WSToJSString(pIsolate, string); + v8::Local argv[argc] = {timeStr}; + v = funC->Call(context, context->Global(), argc, argv).ToLocalChecked(); + if (v->IsNumber()) { + double date = v->ToNumber(context).ToLocalChecked()->Value(); + if (!_isfinite(date)) + return date; + return date + _getLocalTZA() + _getDaylightSavingTA(date); + } + } + } + return 0; } -int JS_GetYearFromTime(double dt) -{ - return _YearFromTime(dt); -} +double JS_MakeDay(int nYear, int nMonth, int nDate) { + if (!_isfinite(nYear) || !_isfinite(nMonth) || !_isfinite(nDate)) + return GetNan(); + double y = _toInteger(nYear); + double m = _toInteger(nMonth); + double dt = _toInteger(nDate); + double ym = y + FXSYS_floor((double)m / 12); + double mn = _Mod(m, 12); -int JS_GetMonthFromTime(double dt) -{ - return _MonthFromTime(dt); -} + double t = _TimeFromYearMonth((int)ym, (int)mn); -int JS_GetDayFromTime(double dt) -{ - return _DateFromTime(dt); + if (_YearFromTime(t) != ym || _MonthFromTime(t) != mn || + _DateFromTime(t) != 1) + return GetNan(); + return _Day(t) + dt - 1; } -int JS_GetHourFromTime(double dt) -{ - return (int)_Mod(FXSYS_floor((double)(dt/(60*60*1000))), 24); -} +double JS_MakeTime(int nHour, int nMin, int nSec, int nMs) { + if (!_isfinite(nHour) || !_isfinite(nMin) || !_isfinite(nSec) || + !_isfinite(nMs)) + return GetNan(); -int JS_GetMinFromTime(double dt) -{ - return (int)_Mod(FXSYS_floor((double)(dt/(60*1000))), 60); -} + double h = _toInteger(nHour); + double m = _toInteger(nMin); + double s = _toInteger(nSec); + double milli = _toInteger(nMs); -int JS_GetSecFromTime(double dt) -{ - return (int)_Mod(FXSYS_floor((double)(dt/1000)), 60); + return h * 3600000 + m * 60000 + s * 1000 + milli; } -double JS_DateParse(const wchar_t* string) -{ - v8::Isolate* pIsolate = v8::Isolate::GetCurrent(); - v8::Isolate::Scope isolate_scope(pIsolate); - v8::HandleScope scope(pIsolate); - - v8::Local context = pIsolate->GetCurrentContext(); - - //Use the built-in object method. - v8::Local v = context->Global()->Get(context, v8::String::NewFromUtf8(pIsolate, "Date", v8::NewStringType::kNormal).ToLocalChecked()).ToLocalChecked(); - if(v->IsObject()) - { - v8::Local o = v->ToObject(context).ToLocalChecked(); - v = o->Get(context,v8::String::NewFromUtf8(pIsolate, "parse", v8::NewStringType::kNormal).ToLocalChecked()).ToLocalChecked(); - if(v->IsFunction()) - { - v8::Local funC = v8::Local::Cast(v); - - const int argc = 1; - v8::Local timeStr = WSToJSString(pIsolate, string); - v8::Local argv[argc] = {timeStr}; - v = funC->Call(context, context->Global(), argc, argv).ToLocalChecked(); - if(v->IsNumber()) - { - double date = v->ToNumber(context).ToLocalChecked()->Value(); - if(!_isfinite(date)) return date; - return date + _getLocalTZA() + _getDaylightSavingTA(date); - } - - } - } - return 0; -} - -double JS_MakeDay(int nYear, int nMonth, int nDate) -{ - if (!_isfinite(nYear) || !_isfinite(nMonth) ||!_isfinite(nDate)) - return GetNan(); - double y = _toInteger(nYear); - double m = _toInteger(nMonth); - double dt = _toInteger(nDate); - double ym = y + FXSYS_floor((double)m/12); - double mn = _Mod(m ,12); - - double t = _TimeFromYearMonth((int)ym,(int)mn); - - if (_YearFromTime(t) != ym || _MonthFromTime(t) != mn ||_DateFromTime(t) != 1) - return GetNan(); - return _Day(t)+dt-1; -} - -double JS_MakeTime(int nHour, int nMin, int nSec, int nMs) -{ - if (!_isfinite(nHour) ||!_isfinite(nMin) ||!_isfinite(nSec) ||!_isfinite(nMs)) - return GetNan(); +double JS_MakeDate(double day, double time) { + if (!_isfinite(day) || !_isfinite(time)) + return GetNan(); - double h = _toInteger(nHour); - double m = _toInteger(nMin); - double s = _toInteger(nSec); - double milli = _toInteger(nMs); - - return h * 3600000 + m * 60000 + s * 1000 + milli; + return day * 86400000 + time; } -double JS_MakeDate(double day, double time) -{ - if (!_isfinite(day) ||!_isfinite(time)) - return GetNan(); - - return day * 86400000 + time; +bool JS_PortIsNan(double d) { + return d != d; } -bool JS_PortIsNan(double d) -{ - return d != d; -} - -double JS_LocalTime(double d) -{ - return JS_GetDateTime() + _getDaylightSavingTA(d); +double JS_LocalTime(double d) { + return JS_GetDateTime() + _getDaylightSavingTA(d); } -//JavaScript time implement End. +// JavaScript time implement End. diff --git a/fpdfsdk/src/pdfwindow/PWL_Button.cpp b/fpdfsdk/src/pdfwindow/PWL_Button.cpp index 84962285c4..9eca10c90d 100644 --- a/fpdfsdk/src/pdfwindow/PWL_Button.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_Button.cpp @@ -9,45 +9,37 @@ #include "../../include/pdfwindow/PWL_Button.h" #include "../../include/pdfwindow/PWL_Utils.h" -/* ------------------------------- CPWL_Button ---------------------------------- */ +/* ------------------------------- CPWL_Button + * ---------------------------------- */ -CPWL_Button::CPWL_Button() : - m_bMouseDown(FALSE) -{ -} +CPWL_Button::CPWL_Button() : m_bMouseDown(FALSE) {} -CPWL_Button::~CPWL_Button() -{ -// PWL_TRACE("~CPWL_Button\n"); +CPWL_Button::~CPWL_Button() { + // PWL_TRACE("~CPWL_Button\n"); } -CFX_ByteString CPWL_Button::GetClassName() const -{ - return "CPWL_Button"; +CFX_ByteString CPWL_Button::GetClassName() const { + return "CPWL_Button"; } -void CPWL_Button::OnCreate(PWL_CREATEPARAM & cp) -{ - cp.eCursorType = FXCT_HAND; +void CPWL_Button::OnCreate(PWL_CREATEPARAM& cp) { + cp.eCursorType = FXCT_HAND; } -FX_BOOL CPWL_Button::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonDown(point, nFlag); +FX_BOOL CPWL_Button::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonDown(point, nFlag); - m_bMouseDown = TRUE; - SetCapture(); + m_bMouseDown = TRUE; + SetCapture(); - return TRUE; + return TRUE; } -FX_BOOL CPWL_Button::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonUp(point, nFlag); +FX_BOOL CPWL_Button::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonUp(point, nFlag); - ReleaseCapture(); - m_bMouseDown = FALSE; + ReleaseCapture(); + m_bMouseDown = FALSE; - return TRUE; + return TRUE; } - diff --git a/fpdfsdk/src/pdfwindow/PWL_Caret.cpp b/fpdfsdk/src/pdfwindow/PWL_Caret.cpp index 84a8b3d186..f35385e7f7 100644 --- a/fpdfsdk/src/pdfwindow/PWL_Caret.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_Caret.cpp @@ -9,189 +9,157 @@ #include "../../include/pdfwindow/PWL_Caret.h" #include "../../include/pdfwindow/PWL_Utils.h" -#define PWL_CARET_FLASHINTERVAL 500 +#define PWL_CARET_FLASHINTERVAL 500 ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// -CPWL_Caret::CPWL_Caret() : - m_bFlash(FALSE), - m_ptHead(0,0), - m_ptFoot(0,0), - m_fWidth(0.4f), - m_nDelay(0) -{ -} +CPWL_Caret::CPWL_Caret() + : m_bFlash(FALSE), + m_ptHead(0, 0), + m_ptFoot(0, 0), + m_fWidth(0.4f), + m_nDelay(0) {} -CPWL_Caret::~CPWL_Caret() -{ -} +CPWL_Caret::~CPWL_Caret() {} -CFX_ByteString CPWL_Caret::GetClassName() const -{ - return "CPWL_Caret"; +CFX_ByteString CPWL_Caret::GetClassName() const { + return "CPWL_Caret"; } -void CPWL_Caret::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - GetCaretApp(sAppStream,CPDF_Point(0.0f,0.0f)); +void CPWL_Caret::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { + GetCaretApp(sAppStream, CPDF_Point(0.0f, 0.0f)); } -void CPWL_Caret::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - if (IsVisible() && m_bFlash) - { - CPDF_Rect rcRect = GetCaretRect(); - CPDF_Rect rcClip = GetClipRect(); - - CFX_PathData path; - - path.SetPointCount(2); - - FX_FLOAT fCaretX = rcRect.left + m_fWidth * 0.5f; - FX_FLOAT fCaretTop = rcRect.top; - FX_FLOAT fCaretBottom = rcRect.bottom; - - if (!rcClip.IsEmpty()) - { - rcRect.Intersect(rcClip); - if (!rcRect.IsEmpty()) - { - fCaretTop = rcRect.top; - fCaretBottom = rcRect.bottom; - path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO); - path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO); - } - else - { - return; - } - } - else - { - path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO); - path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO); - } - - CFX_GraphStateData gsd; - gsd.m_LineWidth = m_fWidth; - - pDevice->DrawPath(&path, pUser2Device, &gsd,0, ArgbEncode(255,0,0,0), FXFILL_ALTERNATE); - } +void CPWL_Caret::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + if (IsVisible() && m_bFlash) { + CPDF_Rect rcRect = GetCaretRect(); + CPDF_Rect rcClip = GetClipRect(); + + CFX_PathData path; + + path.SetPointCount(2); + + FX_FLOAT fCaretX = rcRect.left + m_fWidth * 0.5f; + FX_FLOAT fCaretTop = rcRect.top; + FX_FLOAT fCaretBottom = rcRect.bottom; + + if (!rcClip.IsEmpty()) { + rcRect.Intersect(rcClip); + if (!rcRect.IsEmpty()) { + fCaretTop = rcRect.top; + fCaretBottom = rcRect.bottom; + path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO); + path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO); + } else { + return; + } + } else { + path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO); + path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO); + } + + CFX_GraphStateData gsd; + gsd.m_LineWidth = m_fWidth; + + pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255, 0, 0, 0), + FXFILL_ALTERNATE); + } } -void CPWL_Caret::GetCaretApp(CFX_ByteTextBuf & sAppStream,const CPDF_Point & ptOffset) -{ - if (IsVisible() && m_bFlash) - { - CFX_ByteTextBuf sCaret; - - CPDF_Rect rcRect = GetCaretRect(); - CPDF_Rect rcClip = GetClipRect(); - - rcRect = CPWL_Utils::OffsetRect(rcRect,ptOffset.x,ptOffset.y); - rcClip = CPWL_Utils::OffsetRect(rcClip,ptOffset.x,ptOffset.y); - - sCaret << "q\n"; - if (!rcClip.IsEmpty()) - { - sCaret << rcClip.left << " " << rcClip.bottom + 2.5f << " " - << rcClip.right - rcClip.left << " " << rcClip.top - rcClip.bottom - 4.5f << " re W n\n"; - } - sCaret << m_fWidth << " w\n0 G\n"; - sCaret << rcRect.left + m_fWidth/2 << " " << rcRect.bottom << " m\n"; - sCaret << rcRect.left + m_fWidth/2 << " " << rcRect.top << " l S\nQ\n"; - - sAppStream << sCaret; - } +void CPWL_Caret::GetCaretApp(CFX_ByteTextBuf& sAppStream, + const CPDF_Point& ptOffset) { + if (IsVisible() && m_bFlash) { + CFX_ByteTextBuf sCaret; + + CPDF_Rect rcRect = GetCaretRect(); + CPDF_Rect rcClip = GetClipRect(); + + rcRect = CPWL_Utils::OffsetRect(rcRect, ptOffset.x, ptOffset.y); + rcClip = CPWL_Utils::OffsetRect(rcClip, ptOffset.x, ptOffset.y); + + sCaret << "q\n"; + if (!rcClip.IsEmpty()) { + sCaret << rcClip.left << " " << rcClip.bottom + 2.5f << " " + << rcClip.right - rcClip.left << " " + << rcClip.top - rcClip.bottom - 4.5f << " re W n\n"; + } + sCaret << m_fWidth << " w\n0 G\n"; + sCaret << rcRect.left + m_fWidth / 2 << " " << rcRect.bottom << " m\n"; + sCaret << rcRect.left + m_fWidth / 2 << " " << rcRect.top << " l S\nQ\n"; + + sAppStream << sCaret; + } } -CFX_ByteString CPWL_Caret::GetCaretAppearanceStream(const CPDF_Point & ptOffset) -{ - CFX_ByteTextBuf sCaret; - GetCaretApp(sCaret,ptOffset); - return sCaret.GetByteString(); +CFX_ByteString CPWL_Caret::GetCaretAppearanceStream( + const CPDF_Point& ptOffset) { + CFX_ByteTextBuf sCaret; + GetCaretApp(sCaret, ptOffset); + return sCaret.GetByteString(); } -void CPWL_Caret::TimerProc() -{ - if (m_nDelay > 0) - { - m_nDelay--; - } - else - { - m_bFlash = !m_bFlash; - InvalidateRect(); - } +void CPWL_Caret::TimerProc() { + if (m_nDelay > 0) { + m_nDelay--; + } else { + m_bFlash = !m_bFlash; + InvalidateRect(); + } } -CPDF_Rect CPWL_Caret::GetCaretRect() const -{ - return CPDF_Rect(m_ptFoot.x, - m_ptFoot.y, - m_ptHead.x + m_fWidth, - m_ptHead.y); +CPDF_Rect CPWL_Caret::GetCaretRect() const { + return CPDF_Rect(m_ptFoot.x, m_ptFoot.y, m_ptHead.x + m_fWidth, m_ptHead.y); } -void CPWL_Caret::SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot) -{ - if (bVisible) - { - if (IsVisible()) - { - if (m_ptHead.x != ptHead.x || m_ptHead.y != ptHead.y || - m_ptFoot.x != ptFoot.x || m_ptFoot.y != ptFoot.y) - { - m_ptHead = ptHead; - m_ptFoot = ptFoot; - - m_bFlash = TRUE; - //Move(GetCaretRect(),FALSE,TRUE); - Move(m_rcInvalid, FALSE, TRUE); - } - } - else - { - m_ptHead = ptHead; - m_ptFoot = ptFoot; - - EndTimer(); - BeginTimer(PWL_CARET_FLASHINTERVAL); - - CPWL_Wnd::SetVisible(TRUE); - m_bFlash = TRUE; - - //Move(GetCaretRect(),FALSE,TRUE); - Move(m_rcInvalid, FALSE, TRUE); - } - } - else - { - m_ptHead = CPDF_Point(0, 0); - m_ptFoot = CPDF_Point(0, 0); - - m_bFlash = FALSE; - if (IsVisible()) - { - EndTimer(); - CPWL_Wnd::SetVisible(FALSE); - } - } +void CPWL_Caret::SetCaret(FX_BOOL bVisible, + const CPDF_Point& ptHead, + const CPDF_Point& ptFoot) { + if (bVisible) { + if (IsVisible()) { + if (m_ptHead.x != ptHead.x || m_ptHead.y != ptHead.y || + m_ptFoot.x != ptFoot.x || m_ptFoot.y != ptFoot.y) { + m_ptHead = ptHead; + m_ptFoot = ptFoot; + + m_bFlash = TRUE; + // Move(GetCaretRect(),FALSE,TRUE); + Move(m_rcInvalid, FALSE, TRUE); + } + } else { + m_ptHead = ptHead; + m_ptFoot = ptFoot; + + EndTimer(); + BeginTimer(PWL_CARET_FLASHINTERVAL); + + CPWL_Wnd::SetVisible(TRUE); + m_bFlash = TRUE; + + // Move(GetCaretRect(),FALSE,TRUE); + Move(m_rcInvalid, FALSE, TRUE); + } + } else { + m_ptHead = CPDF_Point(0, 0); + m_ptFoot = CPDF_Point(0, 0); + + m_bFlash = FALSE; + if (IsVisible()) { + EndTimer(); + CPWL_Wnd::SetVisible(FALSE); + } + } } -void CPWL_Caret::InvalidateRect(CPDF_Rect * pRect) -{ - if (pRect) - { - CPDF_Rect rcRefresh = CPWL_Utils::InflateRect(*pRect,0.5f); - rcRefresh.top += 1; - rcRefresh.bottom -= 1; - - CPWL_Wnd::InvalidateRect(&rcRefresh); - } - else - CPWL_Wnd::InvalidateRect(pRect); -} +void CPWL_Caret::InvalidateRect(CPDF_Rect* pRect) { + if (pRect) { + CPDF_Rect rcRefresh = CPWL_Utils::InflateRect(*pRect, 0.5f); + rcRefresh.top += 1; + rcRefresh.bottom -= 1; + CPWL_Wnd::InvalidateRect(&rcRefresh); + } else + CPWL_Wnd::InvalidateRect(pRect); +} diff --git a/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp b/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp index 80115ab7cf..932f8c56d6 100644 --- a/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp @@ -12,682 +12,643 @@ #include "../../include/pdfwindow/PWL_ComboBox.h" #include "../../include/pdfwindow/PWL_Utils.h" -#define PWLCB_DEFAULTFONTSIZE 12.0f - -#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) -#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb)) +#define PWLCB_DEFAULTFONTSIZE 12.0f +#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) +#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb)) /* ---------------------------- CPWL_CBListBox ---------------------------- */ -FX_BOOL CPWL_CBListBox::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonUp(point,nFlag); - - if (m_bMouseDown) - { - ReleaseCapture(); - m_bMouseDown = FALSE; - - if (ClientHitTest(point)) - { - if (CPWL_Wnd * pParent = GetParentWindow()) - { - pParent->OnNotify(this,PNM_LBUTTONUP,0,PWL_MAKEDWORD(point.x,point.y)); - } - - FX_BOOL bExit = FALSE; - OnNotifySelChanged(FALSE,bExit, nFlag); - if (bExit) return FALSE; - } +FX_BOOL CPWL_CBListBox::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonUp(point, nFlag); + + if (m_bMouseDown) { + ReleaseCapture(); + m_bMouseDown = FALSE; + + if (ClientHitTest(point)) { + if (CPWL_Wnd* pParent = GetParentWindow()) { + pParent->OnNotify(this, PNM_LBUTTONUP, 0, + PWL_MAKEDWORD(point.x, point.y)); + } + + FX_BOOL bExit = FALSE; + OnNotifySelChanged(FALSE, bExit, nFlag); + if (bExit) + return FALSE; } + } - return TRUE; + return TRUE; } -FX_BOOL CPWL_CBListBox::OnKeyDownWithExit(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag) -{ - if (!m_pList) return FALSE; +FX_BOOL CPWL_CBListBox::OnKeyDownWithExit(FX_WORD nChar, + FX_BOOL& bExit, + FX_DWORD nFlag) { + if (!m_pList) + return FALSE; - switch (nChar) - { + switch (nChar) { default: - return FALSE; + return FALSE; case FWL_VKEY_Up: case FWL_VKEY_Down: case FWL_VKEY_Home: case FWL_VKEY_Left: case FWL_VKEY_End: case FWL_VKEY_Right: - break; - } + break; + } - switch (nChar) - { + switch (nChar) { case FWL_VKEY_Up: - m_pList->OnVK_UP(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; + m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; case FWL_VKEY_Down: - m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; + m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; case FWL_VKEY_Home: - m_pList->OnVK_HOME(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; + m_pList->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; case FWL_VKEY_Left: - m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; + m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; case FWL_VKEY_End: - m_pList->OnVK_END(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; + m_pList->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; case FWL_VKEY_Right: - m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; + m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; case FWL_VKEY_Delete: - break; - } + break; + } - OnNotifySelChanged(TRUE,bExit, nFlag); + OnNotifySelChanged(TRUE, bExit, nFlag); - return TRUE; + return TRUE; } -FX_BOOL CPWL_CBListBox::OnCharWithExit(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag) -{ - if (!m_pList) return FALSE; +FX_BOOL CPWL_CBListBox::OnCharWithExit(FX_WORD nChar, + FX_BOOL& bExit, + FX_DWORD nFlag) { + if (!m_pList) + return FALSE; - if (!m_pList->OnChar(nChar,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag))) return FALSE; + if (!m_pList->OnChar(nChar, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag))) + return FALSE; - if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetParentWindow()) - { - pComboBox->SetSelectText(); - } + if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetParentWindow()) { + pComboBox->SetSelectText(); + } - OnNotifySelChanged(TRUE,bExit,nFlag); + OnNotifySelChanged(TRUE, bExit, nFlag); - return TRUE; + return TRUE; } /* ---------------------------- CPWL_CBButton ---------------------------- */ -void CPWL_CBButton::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - CPWL_Wnd::GetThisAppearanceStream(sAppStream); +void CPWL_CBButton::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { + CPWL_Wnd::GetThisAppearanceStream(sAppStream); - CPDF_Rect rectWnd = CPWL_Wnd::GetWindowRect(); + CPDF_Rect rectWnd = CPWL_Wnd::GetWindowRect(); - if (IsVisible() && !rectWnd.IsEmpty()) - { - CFX_ByteTextBuf sButton; + if (IsVisible() && !rectWnd.IsEmpty()) { + CFX_ByteTextBuf sButton; - CPDF_Point ptCenter = GetCenterPoint(); + CPDF_Point ptCenter = GetCenterPoint(); - CPDF_Point pt1(ptCenter.x - PWL_CBBUTTON_TRIANGLE_HALFLEN,ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); - CPDF_Point pt2(ptCenter.x + PWL_CBBUTTON_TRIANGLE_HALFLEN,ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); - CPDF_Point pt3(ptCenter.x,ptCenter.y - PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); + CPDF_Point pt1(ptCenter.x - PWL_CBBUTTON_TRIANGLE_HALFLEN, + ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); + CPDF_Point pt2(ptCenter.x + PWL_CBBUTTON_TRIANGLE_HALFLEN, + ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); + CPDF_Point pt3(ptCenter.x, + ptCenter.y - PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); - if (IsFloatBigger(rectWnd.right - rectWnd.left,PWL_CBBUTTON_TRIANGLE_HALFLEN * 2) - && - IsFloatBigger(rectWnd.top - rectWnd.bottom,PWL_CBBUTTON_TRIANGLE_HALFLEN) - ) - { - sButton << "0 g\n"; - sButton << pt1.x << " " << pt1.y << " m\n"; - sButton << pt2.x << " " << pt2.y << " l\n"; - sButton << pt3.x << " " << pt3.y << " l\n"; - sButton << pt1.x << " " << pt1.y << " l f\n"; + if (IsFloatBigger(rectWnd.right - rectWnd.left, + PWL_CBBUTTON_TRIANGLE_HALFLEN * 2) && + IsFloatBigger(rectWnd.top - rectWnd.bottom, + PWL_CBBUTTON_TRIANGLE_HALFLEN)) { + sButton << "0 g\n"; + sButton << pt1.x << " " << pt1.y << " m\n"; + sButton << pt2.x << " " << pt2.y << " l\n"; + sButton << pt3.x << " " << pt3.y << " l\n"; + sButton << pt1.x << " " << pt1.y << " l f\n"; - sAppStream << "q\n" << sButton << "Q\n"; - } + sAppStream << "q\n" << sButton << "Q\n"; } + } } -void CPWL_CBButton::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); +void CPWL_CBButton::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); - CPDF_Rect rectWnd = CPWL_Wnd::GetWindowRect(); + CPDF_Rect rectWnd = CPWL_Wnd::GetWindowRect(); - if (IsVisible() && !rectWnd.IsEmpty()) - { - CPDF_Point ptCenter = GetCenterPoint(); + if (IsVisible() && !rectWnd.IsEmpty()) { + CPDF_Point ptCenter = GetCenterPoint(); - CPDF_Point pt1(ptCenter.x - PWL_CBBUTTON_TRIANGLE_HALFLEN,ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); - CPDF_Point pt2(ptCenter.x + PWL_CBBUTTON_TRIANGLE_HALFLEN,ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); - CPDF_Point pt3(ptCenter.x,ptCenter.y - PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); + CPDF_Point pt1(ptCenter.x - PWL_CBBUTTON_TRIANGLE_HALFLEN, + ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); + CPDF_Point pt2(ptCenter.x + PWL_CBBUTTON_TRIANGLE_HALFLEN, + ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); + CPDF_Point pt3(ptCenter.x, + ptCenter.y - PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f); - if (IsFloatBigger(rectWnd.right - rectWnd.left,PWL_CBBUTTON_TRIANGLE_HALFLEN * 2) - && - IsFloatBigger(rectWnd.top - rectWnd.bottom,PWL_CBBUTTON_TRIANGLE_HALFLEN) - ) - { - CFX_PathData path; + if (IsFloatBigger(rectWnd.right - rectWnd.left, + PWL_CBBUTTON_TRIANGLE_HALFLEN * 2) && + IsFloatBigger(rectWnd.top - rectWnd.bottom, + PWL_CBBUTTON_TRIANGLE_HALFLEN)) { + CFX_PathData path; - path.SetPointCount(4); - path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO); - path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO); - path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO); - path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO); + path.SetPointCount(4); + path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO); + path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO); + path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO); + path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO); - pDevice->DrawPath(&path, pUser2Device, NULL, - CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR,GetTransparency()), - 0, FXFILL_ALTERNATE); - } + pDevice->DrawPath(&path, pUser2Device, NULL, + CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR, + GetTransparency()), + 0, FXFILL_ALTERNATE); } + } } -FX_BOOL CPWL_CBButton::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonDown(point,nFlag); +FX_BOOL CPWL_CBButton::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonDown(point, nFlag); - SetCapture(); + SetCapture(); - if (CPWL_Wnd * pParent = GetParentWindow()) - { - pParent->OnNotify(this,PNM_LBUTTONDOWN,0,PWL_MAKEDWORD(point.x,point.y)); - } + if (CPWL_Wnd* pParent = GetParentWindow()) { + pParent->OnNotify(this, PNM_LBUTTONDOWN, 0, + PWL_MAKEDWORD(point.x, point.y)); + } - return TRUE; + return TRUE; } -FX_BOOL CPWL_CBButton::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonUp(point, nFlag); +FX_BOOL CPWL_CBButton::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonUp(point, nFlag); - ReleaseCapture(); + ReleaseCapture(); - return TRUE; + return TRUE; } /* ---------------------------- CPWL_ComboBox ---------------------------- */ -CPWL_ComboBox::CPWL_ComboBox() : m_pEdit(NULL), - m_pButton(NULL), - m_pList(NULL), - m_bPopup(FALSE), - m_nPopupWhere(0), - m_nSelectItem(-1), - m_pFillerNotify(NULL) -{ -} +CPWL_ComboBox::CPWL_ComboBox() + : m_pEdit(NULL), + m_pButton(NULL), + m_pList(NULL), + m_bPopup(FALSE), + m_nPopupWhere(0), + m_nSelectItem(-1), + m_pFillerNotify(NULL) {} -CFX_ByteString CPWL_ComboBox::GetClassName() const -{ - return "CPWL_ComboBox"; +CFX_ByteString CPWL_ComboBox::GetClassName() const { + return "CPWL_ComboBox"; } -void CPWL_ComboBox::OnCreate(PWL_CREATEPARAM & cp) -{ - cp.dwFlags &= ~PWS_HSCROLL; - cp.dwFlags &= ~PWS_VSCROLL; +void CPWL_ComboBox::OnCreate(PWL_CREATEPARAM& cp) { + cp.dwFlags &= ~PWS_HSCROLL; + cp.dwFlags &= ~PWS_VSCROLL; } -void CPWL_ComboBox::SetFocus() -{ - if (m_pEdit) - m_pEdit->SetFocus(); +void CPWL_ComboBox::SetFocus() { + if (m_pEdit) + m_pEdit->SetFocus(); } -void CPWL_ComboBox::KillFocus() -{ - SetPopup(FALSE); - CPWL_Wnd::KillFocus(); +void CPWL_ComboBox::KillFocus() { + SetPopup(FALSE); + CPWL_Wnd::KillFocus(); } -CFX_WideString CPWL_ComboBox::GetText() const -{ - if (m_pEdit) - { - return m_pEdit->GetText(); - } - return CFX_WideString(); +CFX_WideString CPWL_ComboBox::GetText() const { + if (m_pEdit) { + return m_pEdit->GetText(); + } + return CFX_WideString(); } -void CPWL_ComboBox::SetText(const FX_WCHAR* text) -{ - if (m_pEdit) - m_pEdit->SetText(text); +void CPWL_ComboBox::SetText(const FX_WCHAR* text) { + if (m_pEdit) + m_pEdit->SetText(text); } -void CPWL_ComboBox::AddString(const FX_WCHAR* string) -{ - if (m_pList) - m_pList->AddString(string); +void CPWL_ComboBox::AddString(const FX_WCHAR* string) { + if (m_pList) + m_pList->AddString(string); } -int32_t CPWL_ComboBox::GetSelect() const -{ - return m_nSelectItem; +int32_t CPWL_ComboBox::GetSelect() const { + return m_nSelectItem; } -void CPWL_ComboBox::SetSelect(int32_t nItemIndex) -{ - if (m_pList) - m_pList->Select(nItemIndex); +void CPWL_ComboBox::SetSelect(int32_t nItemIndex) { + if (m_pList) + m_pList->Select(nItemIndex); - m_pEdit->SetText(m_pList->GetText().c_str()); + m_pEdit->SetText(m_pList->GetText().c_str()); - m_nSelectItem = nItemIndex; + m_nSelectItem = nItemIndex; } -void CPWL_ComboBox::SetEditSel(int32_t nStartChar,int32_t nEndChar) -{ - if (m_pEdit) - { - m_pEdit->SetSel(nStartChar,nEndChar); - } +void CPWL_ComboBox::SetEditSel(int32_t nStartChar, int32_t nEndChar) { + if (m_pEdit) { + m_pEdit->SetSel(nStartChar, nEndChar); + } } -void CPWL_ComboBox::GetEditSel(int32_t & nStartChar, int32_t & nEndChar) const -{ - nStartChar = -1; - nEndChar = -1; +void CPWL_ComboBox::GetEditSel(int32_t& nStartChar, int32_t& nEndChar) const { + nStartChar = -1; + nEndChar = -1; - if (m_pEdit) - { - m_pEdit->GetSel(nStartChar,nEndChar); - } + if (m_pEdit) { + m_pEdit->GetSel(nStartChar, nEndChar); + } } -void CPWL_ComboBox::Clear() -{ - if (m_pEdit) - { - m_pEdit->Clear(); - } +void CPWL_ComboBox::Clear() { + if (m_pEdit) { + m_pEdit->Clear(); + } } -void CPWL_ComboBox::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - CreateEdit(cp); - CreateButton(cp); - CreateListBox(cp); +void CPWL_ComboBox::CreateChildWnd(const PWL_CREATEPARAM& cp) { + CreateEdit(cp); + CreateButton(cp); + CreateListBox(cp); } -void CPWL_ComboBox::CreateEdit(const PWL_CREATEPARAM & cp) -{ - if (!m_pEdit) - { - m_pEdit = new CPWL_CBEdit; - m_pEdit->AttachFFLData(m_pFormFiller); +void CPWL_ComboBox::CreateEdit(const PWL_CREATEPARAM& cp) { + if (!m_pEdit) { + m_pEdit = new CPWL_CBEdit; + m_pEdit->AttachFFLData(m_pFormFiller); - PWL_CREATEPARAM ecp = cp; - ecp.pParentWnd = this; - ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PES_CENTER | PES_AUTOSCROLL | PES_UNDO; + PWL_CREATEPARAM ecp = cp; + ecp.pParentWnd = this; + ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PES_CENTER | + PES_AUTOSCROLL | PES_UNDO; - if (HasFlag(PWS_AUTOFONTSIZE)) - ecp.dwFlags |= PWS_AUTOFONTSIZE; + if (HasFlag(PWS_AUTOFONTSIZE)) + ecp.dwFlags |= PWS_AUTOFONTSIZE; - if (!HasFlag(PCBS_ALLOWCUSTOMTEXT)) - ecp.dwFlags |= PWS_READONLY; + if (!HasFlag(PCBS_ALLOWCUSTOMTEXT)) + ecp.dwFlags |= PWS_READONLY; - ecp.rcRectWnd = CPDF_Rect(0,0,0,0); - ecp.dwBorderWidth = 0; - ecp.nBorderStyle = PBS_SOLID; + ecp.rcRectWnd = CPDF_Rect(0, 0, 0, 0); + ecp.dwBorderWidth = 0; + ecp.nBorderStyle = PBS_SOLID; - m_pEdit->Create(ecp); - } + m_pEdit->Create(ecp); + } } -void CPWL_ComboBox::CreateButton(const PWL_CREATEPARAM & cp) -{ - if (!m_pButton) - { - m_pButton = new CPWL_CBButton; +void CPWL_ComboBox::CreateButton(const PWL_CREATEPARAM& cp) { + if (!m_pButton) { + m_pButton = new CPWL_CBButton; - PWL_CREATEPARAM bcp = cp; - bcp.pParentWnd = this; - bcp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND; - bcp.sBackgroundColor = PWL_SCROLLBAR_BKCOLOR; - bcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR; - bcp.dwBorderWidth = 2; - bcp.nBorderStyle = PBS_BEVELED; - bcp.eCursorType = FXCT_ARROW; + PWL_CREATEPARAM bcp = cp; + bcp.pParentWnd = this; + bcp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND; + bcp.sBackgroundColor = PWL_SCROLLBAR_BKCOLOR; + bcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR; + bcp.dwBorderWidth = 2; + bcp.nBorderStyle = PBS_BEVELED; + bcp.eCursorType = FXCT_ARROW; - m_pButton->Create(bcp); - } + m_pButton->Create(bcp); + } } -void CPWL_ComboBox::CreateListBox(const PWL_CREATEPARAM & cp) -{ - if (!m_pList) - { - m_pList = new CPWL_CBListBox; - m_pList->AttachFFLData(m_pFormFiller); - PWL_CREATEPARAM lcp = cp; - lcp.pParentWnd = this; - lcp.dwFlags = PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PLBS_HOVERSEL | PWS_VSCROLL; - lcp.nBorderStyle = PBS_SOLID; - lcp.dwBorderWidth = 1; - lcp.eCursorType = FXCT_ARROW; - lcp.rcRectWnd = CPDF_Rect(0,0,0,0); - - if (cp.dwFlags & PWS_AUTOFONTSIZE) - lcp.fFontSize = PWLCB_DEFAULTFONTSIZE; - else - lcp.fFontSize = cp.fFontSize; - - if (cp.sBorderColor.nColorType == COLORTYPE_TRANSPARENT) - lcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR; - - if (cp.sBackgroundColor.nColorType == COLORTYPE_TRANSPARENT) - lcp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR; - - m_pList->Create(lcp); - } +void CPWL_ComboBox::CreateListBox(const PWL_CREATEPARAM& cp) { + if (!m_pList) { + m_pList = new CPWL_CBListBox; + m_pList->AttachFFLData(m_pFormFiller); + PWL_CREATEPARAM lcp = cp; + lcp.pParentWnd = this; + lcp.dwFlags = + PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PLBS_HOVERSEL | PWS_VSCROLL; + lcp.nBorderStyle = PBS_SOLID; + lcp.dwBorderWidth = 1; + lcp.eCursorType = FXCT_ARROW; + lcp.rcRectWnd = CPDF_Rect(0, 0, 0, 0); + + if (cp.dwFlags & PWS_AUTOFONTSIZE) + lcp.fFontSize = PWLCB_DEFAULTFONTSIZE; + else + lcp.fFontSize = cp.fFontSize; + + if (cp.sBorderColor.nColorType == COLORTYPE_TRANSPARENT) + lcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR; + + if (cp.sBackgroundColor.nColorType == COLORTYPE_TRANSPARENT) + lcp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR; + + m_pList->Create(lcp); + } } -void CPWL_ComboBox::RePosChildWnd() -{ - CPDF_Rect rcClient = GetClientRect(); +void CPWL_ComboBox::RePosChildWnd() { + CPDF_Rect rcClient = GetClientRect(); - if (m_bPopup) - { - CPDF_Rect rclient = GetClientRect(); - CPDF_Rect rcButton = rclient; - CPDF_Rect rcEdit = rcClient; - CPDF_Rect rcList = CPWL_Wnd::GetWindowRect(); + if (m_bPopup) { + CPDF_Rect rclient = GetClientRect(); + CPDF_Rect rcButton = rclient; + CPDF_Rect rcEdit = rcClient; + CPDF_Rect rcList = CPWL_Wnd::GetWindowRect(); - FX_FLOAT fOldWindowHeight = m_rcOldWindow.Height(); - FX_FLOAT fOldClientHeight = fOldWindowHeight - GetBorderWidth() * 2; + FX_FLOAT fOldWindowHeight = m_rcOldWindow.Height(); + FX_FLOAT fOldClientHeight = fOldWindowHeight - GetBorderWidth() * 2; - switch (m_nPopupWhere) - { - case 0: - rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH; + switch (m_nPopupWhere) { + case 0: + rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH; - if (rcButton.left < rclient.left) - rcButton.left = rclient.left; + if (rcButton.left < rclient.left) + rcButton.left = rclient.left; - rcButton.bottom = rcButton.top - fOldClientHeight; + rcButton.bottom = rcButton.top - fOldClientHeight; - rcEdit.right = rcButton.left - 1.0f; + rcEdit.right = rcButton.left - 1.0f; - if (rcEdit.left < rclient.left) - rcEdit.left = rclient.left; + if (rcEdit.left < rclient.left) + rcEdit.left = rclient.left; - if (rcEdit.right < rcEdit.left) - rcEdit.right = rcEdit.left; + if (rcEdit.right < rcEdit.left) + rcEdit.right = rcEdit.left; - rcEdit.bottom = rcEdit.top - fOldClientHeight; + rcEdit.bottom = rcEdit.top - fOldClientHeight; - rcList.top -= fOldWindowHeight; + rcList.top -= fOldWindowHeight; - break; - case 1: - rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH; + break; + case 1: + rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH; - if (rcButton.left < rclient.left) - rcButton.left = rclient.left; + if (rcButton.left < rclient.left) + rcButton.left = rclient.left; - rcButton.top = rcButton.bottom + fOldClientHeight; + rcButton.top = rcButton.bottom + fOldClientHeight; - rcEdit.right = rcButton.left - 1.0f; + rcEdit.right = rcButton.left - 1.0f; - if (rcEdit.left < rclient.left) - rcEdit.left = rclient.left; + if (rcEdit.left < rclient.left) + rcEdit.left = rclient.left; - if (rcEdit.right < rcEdit.left) - rcEdit.right = rcEdit.left; + if (rcEdit.right < rcEdit.left) + rcEdit.right = rcEdit.left; - rcEdit.top = rcEdit.bottom + fOldClientHeight; + rcEdit.top = rcEdit.bottom + fOldClientHeight; - rcList.bottom += fOldWindowHeight; + rcList.bottom += fOldWindowHeight; - break; - } + break; + } - if (m_pButton) - m_pButton->Move(rcButton,TRUE,FALSE); + if (m_pButton) + m_pButton->Move(rcButton, TRUE, FALSE); - if (m_pEdit) - m_pEdit->Move(rcEdit,TRUE,FALSE); + if (m_pEdit) + m_pEdit->Move(rcEdit, TRUE, FALSE); - if (m_pList) - { - m_pList->SetVisible(TRUE); - m_pList->Move(rcList,TRUE,FALSE); - m_pList->ScrollToListItem(m_nSelectItem); - } + if (m_pList) { + m_pList->SetVisible(TRUE); + m_pList->Move(rcList, TRUE, FALSE); + m_pList->ScrollToListItem(m_nSelectItem); } - else - { - CPDF_Rect rcButton = rcClient; + } else { + CPDF_Rect rcButton = rcClient; - rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH; + rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH; - if (rcButton.left < rcClient.left) - rcButton.left = rcClient.left; + if (rcButton.left < rcClient.left) + rcButton.left = rcClient.left; - if (m_pButton) - m_pButton->Move(rcButton,TRUE,FALSE); + if (m_pButton) + m_pButton->Move(rcButton, TRUE, FALSE); - CPDF_Rect rcEdit = rcClient; - rcEdit.right = rcButton.left - 1.0f; + CPDF_Rect rcEdit = rcClient; + rcEdit.right = rcButton.left - 1.0f; - if (rcEdit.left < rcClient.left) - rcEdit.left = rcClient.left; + if (rcEdit.left < rcClient.left) + rcEdit.left = rcClient.left; - if (rcEdit.right < rcEdit.left) - rcEdit.right = rcEdit.left; + if (rcEdit.right < rcEdit.left) + rcEdit.right = rcEdit.left; - if (m_pEdit) - m_pEdit->Move(rcEdit,TRUE,FALSE); + if (m_pEdit) + m_pEdit->Move(rcEdit, TRUE, FALSE); - if (m_pList) - m_pList->SetVisible(FALSE); - } + if (m_pList) + m_pList->SetVisible(FALSE); + } } -void CPWL_ComboBox::SelectAll() -{ - if (m_pEdit && HasFlag(PCBS_ALLOWCUSTOMTEXT)) - m_pEdit->SelectAll(); -} - -CPDF_Rect CPWL_ComboBox::GetFocusRect() const -{ - return CPDF_Rect(); -} - -void CPWL_ComboBox::SetPopup(FX_BOOL bPopup) -{ - if (!m_pList) return; - if (bPopup == m_bPopup) return; - FX_FLOAT fListHeight = m_pList->GetContentRect().Height(); - if (!IsFloatBigger(fListHeight,0.0f)) return; - - if (bPopup) - { - if (m_pFillerNotify) - { - FX_BOOL bExit = FALSE; - m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, 0); - if (bExit) return; - - int32_t nWhere = 0; - FX_FLOAT fPopupRet = 0.0f; - FX_FLOAT fPopupMin = 0.0f; - if (m_pList->GetCount() > 3) - fPopupMin = m_pList->GetFirstHeight() * 3 + m_pList->GetBorderWidth() * 2; - FX_FLOAT fPopupMax = fListHeight + m_pList->GetBorderWidth() * 2; - m_pFillerNotify->QueryWherePopup(GetAttachedData(), fPopupMin,fPopupMax,nWhere,fPopupRet); - - if (IsFloatBigger(fPopupRet,0.0f)) - { - m_bPopup = bPopup; - - CPDF_Rect rcWindow = CPWL_Wnd::GetWindowRect(); - m_rcOldWindow = rcWindow; - switch (nWhere) - { - default: - case 0: - rcWindow.bottom -= fPopupRet; - break; - case 1: - rcWindow.top += fPopupRet; - break; - } - - m_nPopupWhere = nWhere; - Move(rcWindow, TRUE, TRUE); - - bExit = FALSE; - m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, 0); - if (bExit) return; - } - } - } - else - { - m_bPopup = bPopup; - Move(m_rcOldWindow, TRUE, TRUE); - } -} - -FX_BOOL CPWL_ComboBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) -{ - if (!m_pList) return FALSE; - if (!m_pEdit) return FALSE; - - m_nSelectItem = -1; - - switch (nChar) - { - case FWL_VKEY_Up: - if (m_pList->GetCurSel() > 0) - { - FX_BOOL bExit = FALSE; - - if (m_pFillerNotify) - { - m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, nFlag); - if (bExit) return FALSE; - bExit = FALSE; - m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, nFlag); - if (bExit) return FALSE; - } - if (m_pList->OnKeyDownWithExit(nChar,bExit,nFlag)) - { - if (bExit) return FALSE; - SetSelectText(); - } - } - return TRUE; - case FWL_VKEY_Down: - if (m_pList->GetCurSel() < m_pList->GetCount() - 1) - { - FX_BOOL bExit = FALSE; - - if (m_pFillerNotify) - { - m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, nFlag); - if (bExit) return FALSE; - bExit = FALSE; - m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, nFlag); - if (bExit) return FALSE; - } - if (m_pList->OnKeyDownWithExit(nChar,bExit,nFlag)) - { - if (bExit) return FALSE; - SetSelectText(); - } - } - return TRUE; - } - - if (HasFlag(PCBS_ALLOWCUSTOMTEXT)) - return m_pEdit->OnKeyDown(nChar,nFlag); +void CPWL_ComboBox::SelectAll() { + if (m_pEdit && HasFlag(PCBS_ALLOWCUSTOMTEXT)) + m_pEdit->SelectAll(); +} - return FALSE; +CPDF_Rect CPWL_ComboBox::GetFocusRect() const { + return CPDF_Rect(); +} + +void CPWL_ComboBox::SetPopup(FX_BOOL bPopup) { + if (!m_pList) + return; + if (bPopup == m_bPopup) + return; + FX_FLOAT fListHeight = m_pList->GetContentRect().Height(); + if (!IsFloatBigger(fListHeight, 0.0f)) + return; + + if (bPopup) { + if (m_pFillerNotify) { + FX_BOOL bExit = FALSE; + m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, 0); + if (bExit) + return; + + int32_t nWhere = 0; + FX_FLOAT fPopupRet = 0.0f; + FX_FLOAT fPopupMin = 0.0f; + if (m_pList->GetCount() > 3) + fPopupMin = + m_pList->GetFirstHeight() * 3 + m_pList->GetBorderWidth() * 2; + FX_FLOAT fPopupMax = fListHeight + m_pList->GetBorderWidth() * 2; + m_pFillerNotify->QueryWherePopup(GetAttachedData(), fPopupMin, fPopupMax, + nWhere, fPopupRet); + + if (IsFloatBigger(fPopupRet, 0.0f)) { + m_bPopup = bPopup; + + CPDF_Rect rcWindow = CPWL_Wnd::GetWindowRect(); + m_rcOldWindow = rcWindow; + switch (nWhere) { + default: + case 0: + rcWindow.bottom -= fPopupRet; + break; + case 1: + rcWindow.top += fPopupRet; + break; + } + + m_nPopupWhere = nWhere; + Move(rcWindow, TRUE, TRUE); + + bExit = FALSE; + m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, 0); + if (bExit) + return; + } + } + } else { + m_bPopup = bPopup; + Move(m_rcOldWindow, TRUE, TRUE); + } } -FX_BOOL CPWL_ComboBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) -{ - if (!m_pList) - return FALSE; +FX_BOOL CPWL_ComboBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) { + if (!m_pList) + return FALSE; + if (!m_pEdit) + return FALSE; - if (!m_pEdit) - return FALSE; + m_nSelectItem = -1; - m_nSelectItem = -1; - if (HasFlag(PCBS_ALLOWCUSTOMTEXT)) - return m_pEdit->OnChar(nChar,nFlag); + switch (nChar) { + case FWL_VKEY_Up: + if (m_pList->GetCurSel() > 0) { + FX_BOOL bExit = FALSE; - FX_BOOL bExit = FALSE; - if (m_pFillerNotify) - { - m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, nFlag); - if (bExit) + if (m_pFillerNotify) { + m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, nFlag); + if (bExit) return FALSE; + bExit = FALSE; + m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, nFlag); + if (bExit) + return FALSE; + } + if (m_pList->OnKeyDownWithExit(nChar, bExit, nFlag)) { + if (bExit) + return FALSE; + SetSelectText(); + } + } + return TRUE; + case FWL_VKEY_Down: + if (m_pList->GetCurSel() < m_pList->GetCount() - 1) { + FX_BOOL bExit = FALSE; - m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, nFlag); - if (bExit) + if (m_pFillerNotify) { + m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, nFlag); + if (bExit) return FALSE; - } - if (m_pList->OnCharWithExit(nChar,bExit,nFlag)) - return bExit; + bExit = FALSE; + m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, nFlag); + if (bExit) + return FALSE; + } + if (m_pList->OnKeyDownWithExit(nChar, bExit, nFlag)) { + if (bExit) + return FALSE; + SetSelectText(); + } + } + return TRUE; + } + + if (HasFlag(PCBS_ALLOWCUSTOMTEXT)) + return m_pEdit->OnKeyDown(nChar, nFlag); + return FALSE; +} + +FX_BOOL CPWL_ComboBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) { + if (!m_pList) + return FALSE; + + if (!m_pEdit) return FALSE; + + m_nSelectItem = -1; + if (HasFlag(PCBS_ALLOWCUSTOMTEXT)) + return m_pEdit->OnChar(nChar, nFlag); + + FX_BOOL bExit = FALSE; + if (m_pFillerNotify) { + m_pFillerNotify->OnPopupPreOpen(GetAttachedData(), bExit, nFlag); + if (bExit) + return FALSE; + + m_pFillerNotify->OnPopupPostOpen(GetAttachedData(), bExit, nFlag); + if (bExit) + return FALSE; + } + if (m_pList->OnCharWithExit(nChar, bExit, nFlag)) + return bExit; + + return FALSE; } -void CPWL_ComboBox::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) -{ - switch (msg) - { +void CPWL_ComboBox::OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam, + intptr_t lParam) { + switch (msg) { case PNM_LBUTTONDOWN: - if (pWnd == m_pButton) - { - SetPopup(!m_bPopup); - return; - } - break; + if (pWnd == m_pButton) { + SetPopup(!m_bPopup); + return; + } + break; case PNM_LBUTTONUP: - if (m_pEdit && m_pList) - { - if (pWnd == m_pList) - { - SetSelectText(); - SelectAll(); - m_pEdit->SetFocus(); - SetPopup(FALSE); - return; - } + if (m_pEdit && m_pList) { + if (pWnd == m_pList) { + SetSelectText(); + SelectAll(); + m_pEdit->SetFocus(); + SetPopup(FALSE); + return; } - } + } + } - CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam); + CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); } -FX_BOOL CPWL_ComboBox::IsPopup() const -{ - return m_bPopup; +FX_BOOL CPWL_ComboBox::IsPopup() const { + return m_bPopup; } -void CPWL_ComboBox::SetSelectText() -{ - CFX_WideString swText = m_pList->GetText(); - m_pEdit->SelectAll(); - m_pEdit->ReplaceSel(m_pList->GetText().c_str()); - m_pEdit->SelectAll(); +void CPWL_ComboBox::SetSelectText() { + CFX_WideString swText = m_pList->GetText(); + m_pEdit->SelectAll(); + m_pEdit->ReplaceSel(m_pList->GetText().c_str()); + m_pEdit->SelectAll(); - m_nSelectItem = m_pList->GetCurSel(); + m_nSelectItem = m_pList->GetCurSel(); } -FX_BOOL CPWL_ComboBox::IsModified() const -{ - return m_pEdit->IsModified(); +FX_BOOL CPWL_ComboBox::IsModified() const { + return m_pEdit->IsModified(); } -void CPWL_ComboBox::SetFillerNotify(IPWL_Filler_Notify* pNotify) -{ - m_pFillerNotify = pNotify; +void CPWL_ComboBox::SetFillerNotify(IPWL_Filler_Notify* pNotify) { + m_pFillerNotify = pNotify; - if (m_pEdit) - m_pEdit->SetFillerNotify(pNotify); + if (m_pEdit) + m_pEdit->SetFillerNotify(pNotify); - if (m_pList) - m_pList->SetFillerNotify(pNotify); + if (m_pList) + m_pList->SetFillerNotify(pNotify); } diff --git a/fpdfsdk/src/pdfwindow/PWL_Edit.cpp b/fpdfsdk/src/pdfwindow/PWL_Edit.cpp index 58d8a79da1..edefd7ecd2 100644 --- a/fpdfsdk/src/pdfwindow/PWL_Edit.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_Edit.cpp @@ -17,1301 +17,1209 @@ /* ---------------------------- CPWL_Edit ------------------------------ */ -CPWL_Edit::CPWL_Edit() : m_pFillerNotify(NULL), - m_pSpellCheck(NULL), - m_bFocus(FALSE) -{ - m_pFormFiller = NULL; +CPWL_Edit::CPWL_Edit() + : m_pFillerNotify(NULL), m_pSpellCheck(NULL), m_bFocus(FALSE) { + m_pFormFiller = NULL; } -CPWL_Edit::~CPWL_Edit() -{ - ASSERT(m_bFocus == FALSE); +CPWL_Edit::~CPWL_Edit() { + ASSERT(m_bFocus == FALSE); } -CFX_ByteString CPWL_Edit::GetClassName() const -{ - return PWL_CLASSNAME_EDIT; +CFX_ByteString CPWL_Edit::GetClassName() const { + return PWL_CLASSNAME_EDIT; } -void CPWL_Edit::OnDestroy() -{ -} +void CPWL_Edit::OnDestroy() {} + +void CPWL_Edit::SetText(const FX_WCHAR* csText) { + CFX_WideString swText = csText; + + if (HasFlag(PES_RICH)) { + CFX_ByteString sValue = CFX_ByteString::FromUnicode(swText); + + if (CXML_Element* pXML = + CXML_Element::Parse(sValue.c_str(), sValue.GetLength())) { + int32_t nCount = pXML->CountChildren(); + FX_BOOL bFirst = TRUE; + + swText.Empty(); + + for (int32_t i = 0; i < nCount; i++) { + if (CXML_Element* pSubElement = pXML->GetElement(i)) { + CFX_ByteString tag = pSubElement->GetTagName(); + if (tag.EqualNoCase("p")) { + int nChild = pSubElement->CountChildren(); + CFX_WideString swSection; + for (int32_t j = 0; j < nChild; j++) { + swSection += pSubElement->GetContent(j); + } + + if (bFirst) + bFirst = FALSE; + else + swText += FWL_VKEY_Return; + swText += swSection; + } + } + } + + delete pXML; + } + } -void CPWL_Edit::SetText(const FX_WCHAR* csText) -{ - CFX_WideString swText = csText; - - if (HasFlag(PES_RICH)) - { - CFX_ByteString sValue = CFX_ByteString::FromUnicode(swText); - - if (CXML_Element * pXML = CXML_Element::Parse(sValue.c_str(), sValue.GetLength())) - { - int32_t nCount = pXML->CountChildren(); - FX_BOOL bFirst = TRUE; - - swText.Empty(); - - for (int32_t i=0; iGetElement(i)) - { - CFX_ByteString tag=pSubElement->GetTagName(); - if (tag.EqualNoCase("p")) - { - int nChild = pSubElement->CountChildren(); - CFX_WideString swSection; - for(int32_t j=0; jGetContent(j); - } - - if (bFirst)bFirst = FALSE; - else - swText += FWL_VKEY_Return; - swText += swSection; - } - } - } - - delete pXML; - } - } - - m_pEdit->SetText(swText.c_str()); + m_pEdit->SetText(swText.c_str()); } -void CPWL_Edit::RePosChildWnd() -{ - if (CPWL_ScrollBar * pVSB = GetVScrollBar()) { - CPDF_Rect rcWindow = m_rcOldWindow; - CPDF_Rect rcVScroll = CPDF_Rect(rcWindow.right, - rcWindow.bottom, - rcWindow.right + PWL_SCROLLBAR_WIDTH, - rcWindow.top); - pVSB->Move(rcVScroll, TRUE, FALSE); - } +void CPWL_Edit::RePosChildWnd() { + if (CPWL_ScrollBar* pVSB = GetVScrollBar()) { + CPDF_Rect rcWindow = m_rcOldWindow; + CPDF_Rect rcVScroll = + CPDF_Rect(rcWindow.right, rcWindow.bottom, + rcWindow.right + PWL_SCROLLBAR_WIDTH, rcWindow.top); + pVSB->Move(rcVScroll, TRUE, FALSE); + } - if (m_pEditCaret && !HasFlag(PES_TEXTOVERFLOW)) - m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect(GetClientRect(),1.0f)); //+1 for caret beside border + if (m_pEditCaret && !HasFlag(PES_TEXTOVERFLOW)) + m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect( + GetClientRect(), 1.0f)); //+1 for caret beside border - CPWL_EditCtrl::RePosChildWnd(); + CPWL_EditCtrl::RePosChildWnd(); } -CPDF_Rect CPWL_Edit::GetClientRect() const -{ - CPDF_Rect rcClient = CPWL_Utils::DeflateRect(GetWindowRect(),(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth())); +CPDF_Rect CPWL_Edit::GetClientRect() const { + CPDF_Rect rcClient = CPWL_Utils::DeflateRect( + GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); - if (CPWL_ScrollBar * pVSB = GetVScrollBar()) - { - if (pVSB->IsVisible()) - { - rcClient.right -= PWL_SCROLLBAR_WIDTH; - } - } + if (CPWL_ScrollBar* pVSB = GetVScrollBar()) { + if (pVSB->IsVisible()) { + rcClient.right -= PWL_SCROLLBAR_WIDTH; + } + } - return rcClient; + return rcClient; } -void CPWL_Edit::SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat, FX_BOOL bPaint/* = TRUE*/) -{ - m_pEdit->SetAlignmentH((int32_t)nFormat, bPaint); +void CPWL_Edit::SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat, + FX_BOOL bPaint /* = TRUE*/) { + m_pEdit->SetAlignmentH((int32_t)nFormat, bPaint); } -void CPWL_Edit::SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat, FX_BOOL bPaint/* = TRUE*/) -{ - m_pEdit->SetAlignmentV((int32_t)nFormat, bPaint); +void CPWL_Edit::SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat, + FX_BOOL bPaint /* = TRUE*/) { + m_pEdit->SetAlignmentV((int32_t)nFormat, bPaint); } -FX_BOOL CPWL_Edit::CanSelectAll() const -{ - return GetSelectWordRange() != m_pEdit->GetWholeWordRange(); +FX_BOOL CPWL_Edit::CanSelectAll() const { + return GetSelectWordRange() != m_pEdit->GetWholeWordRange(); } -FX_BOOL CPWL_Edit::CanClear() const -{ - return !IsReadOnly() && m_pEdit->IsSelected(); +FX_BOOL CPWL_Edit::CanClear() const { + return !IsReadOnly() && m_pEdit->IsSelected(); } -FX_BOOL CPWL_Edit::CanCopy() const -{ - return !HasFlag(PES_PASSWORD) && !HasFlag(PES_NOREAD) && m_pEdit->IsSelected(); +FX_BOOL CPWL_Edit::CanCopy() const { + return !HasFlag(PES_PASSWORD) && !HasFlag(PES_NOREAD) && + m_pEdit->IsSelected(); } -FX_BOOL CPWL_Edit::CanCut() const -{ - return CanCopy() && !IsReadOnly(); +FX_BOOL CPWL_Edit::CanCut() const { + return CanCopy() && !IsReadOnly(); } -FX_BOOL CPWL_Edit::CanPaste() const -{ - if (IsReadOnly()) return FALSE; +FX_BOOL CPWL_Edit::CanPaste() const { + if (IsReadOnly()) + return FALSE; - CFX_WideString swClipboard; - if (IFX_SystemHandler* pSH = GetSystemHandler()) - swClipboard = pSH->GetClipboardText(GetAttachedHWnd()); + CFX_WideString swClipboard; + if (IFX_SystemHandler* pSH = GetSystemHandler()) + swClipboard = pSH->GetClipboardText(GetAttachedHWnd()); - return !swClipboard.IsEmpty(); + return !swClipboard.IsEmpty(); } -void CPWL_Edit::CopyText() -{ - if (!CanCopy()) return; +void CPWL_Edit::CopyText() { + if (!CanCopy()) + return; - CFX_WideString str = m_pEdit->GetSelText(); + CFX_WideString str = m_pEdit->GetSelText(); - if (IFX_SystemHandler* pSH = GetSystemHandler()) - pSH->SetClipboardText(GetAttachedHWnd(), str); + if (IFX_SystemHandler* pSH = GetSystemHandler()) + pSH->SetClipboardText(GetAttachedHWnd(), str); } -void CPWL_Edit::PasteText() -{ - if (!CanPaste()) return; - - CFX_WideString swClipboard; - if (IFX_SystemHandler* pSH = GetSystemHandler()) - swClipboard = pSH->GetClipboardText(GetAttachedHWnd()); - - if (m_pFillerNotify) - { - FX_BOOL bRC = TRUE; - FX_BOOL bExit = FALSE; - CFX_WideString strChangeEx; - int nSelStart = 0; - int nSelEnd = 0; - GetSel(nSelStart, nSelEnd); - m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), 0 , swClipboard, strChangeEx, nSelStart, nSelEnd, TRUE, bRC, bExit, 0); - if (!bRC) return; - if (bExit) return; - } - - if (swClipboard.GetLength() > 0) - { - Clear(); - InsertText(swClipboard.c_str()); - } - - if (m_pFillerNotify) - { - FX_BOOL bExit = FALSE; - m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit,0); - if (bExit) return; - } +void CPWL_Edit::PasteText() { + if (!CanPaste()) + return; + + CFX_WideString swClipboard; + if (IFX_SystemHandler* pSH = GetSystemHandler()) + swClipboard = pSH->GetClipboardText(GetAttachedHWnd()); + + if (m_pFillerNotify) { + FX_BOOL bRC = TRUE; + FX_BOOL bExit = FALSE; + CFX_WideString strChangeEx; + int nSelStart = 0; + int nSelEnd = 0; + GetSel(nSelStart, nSelEnd); + m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), 0, swClipboard, + strChangeEx, nSelStart, nSelEnd, TRUE, + bRC, bExit, 0); + if (!bRC) + return; + if (bExit) + return; + } + + if (swClipboard.GetLength() > 0) { + Clear(); + InsertText(swClipboard.c_str()); + } + + if (m_pFillerNotify) { + FX_BOOL bExit = FALSE; + m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit, 0); + if (bExit) + return; + } } -void CPWL_Edit::CutText() -{ - if (!CanCut()) return; +void CPWL_Edit::CutText() { + if (!CanCut()) + return; - CFX_WideString str = m_pEdit->GetSelText(); + CFX_WideString str = m_pEdit->GetSelText(); - if (IFX_SystemHandler* pSH = GetSystemHandler()) - pSH->SetClipboardText(GetAttachedHWnd(), str); + if (IFX_SystemHandler* pSH = GetSystemHandler()) + pSH->SetClipboardText(GetAttachedHWnd(), str); - m_pEdit->Clear(); + m_pEdit->Clear(); } -void CPWL_Edit::OnCreated() -{ - CPWL_EditCtrl::OnCreated(); +void CPWL_Edit::OnCreated() { + CPWL_EditCtrl::OnCreated(); - if (CPWL_ScrollBar * pScroll = GetVScrollBar()) - { - pScroll->RemoveFlag(PWS_AUTOTRANSPARENT); - pScroll->SetTransparency(255); - } + if (CPWL_ScrollBar* pScroll = GetVScrollBar()) { + pScroll->RemoveFlag(PWS_AUTOTRANSPARENT); + pScroll->SetTransparency(255); + } - SetParamByFlag(); + SetParamByFlag(); - m_rcOldWindow = GetWindowRect(); + m_rcOldWindow = GetWindowRect(); - m_pEdit->SetOprNotify(this); - m_pEdit->EnableOprNotify(TRUE); + m_pEdit->SetOprNotify(this); + m_pEdit->EnableOprNotify(TRUE); } -void CPWL_Edit::SetParamByFlag() -{ - if (HasFlag(PES_RIGHT)) - { - m_pEdit->SetAlignmentH(2, FALSE); - } - else if (HasFlag(PES_MIDDLE)) - { - m_pEdit->SetAlignmentH(1, FALSE); - } - else - { - m_pEdit->SetAlignmentH(0, FALSE); - } - - if (HasFlag(PES_BOTTOM)) - { - m_pEdit->SetAlignmentV(2, FALSE); - } - else if (HasFlag(PES_CENTER)) - { - m_pEdit->SetAlignmentV(1, FALSE); - } - else - { - m_pEdit->SetAlignmentV(0, FALSE); - } - - if (HasFlag(PES_PASSWORD)) - { - m_pEdit->SetPasswordChar('*', FALSE); - } - - m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE), FALSE); - m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN), FALSE); - m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE), FALSE); - m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL), FALSE); - m_pEdit->EnableUndo(HasFlag(PES_UNDO)); - - if (HasFlag(PES_TEXTOVERFLOW)) - { - SetClipRect(CPDF_Rect(0.0f,0.0f,0.0f,0.0f)); - m_pEdit->SetTextOverflow(TRUE, FALSE); - } - else - { - if (m_pEditCaret) - { - m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect(GetClientRect(),1.0f)); //+1 for caret beside border - } - } - - if (HasFlag(PES_SPELLCHECK)) - { - m_pSpellCheck = GetCreationParam().pSpellCheck; - } +void CPWL_Edit::SetParamByFlag() { + if (HasFlag(PES_RIGHT)) { + m_pEdit->SetAlignmentH(2, FALSE); + } else if (HasFlag(PES_MIDDLE)) { + m_pEdit->SetAlignmentH(1, FALSE); + } else { + m_pEdit->SetAlignmentH(0, FALSE); + } + + if (HasFlag(PES_BOTTOM)) { + m_pEdit->SetAlignmentV(2, FALSE); + } else if (HasFlag(PES_CENTER)) { + m_pEdit->SetAlignmentV(1, FALSE); + } else { + m_pEdit->SetAlignmentV(0, FALSE); + } + + if (HasFlag(PES_PASSWORD)) { + m_pEdit->SetPasswordChar('*', FALSE); + } + + m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE), FALSE); + m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN), FALSE); + m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE), FALSE); + m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL), FALSE); + m_pEdit->EnableUndo(HasFlag(PES_UNDO)); + + if (HasFlag(PES_TEXTOVERFLOW)) { + SetClipRect(CPDF_Rect(0.0f, 0.0f, 0.0f, 0.0f)); + m_pEdit->SetTextOverflow(TRUE, FALSE); + } else { + if (m_pEditCaret) { + m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect( + GetClientRect(), 1.0f)); //+1 for caret beside border + } + } + + if (HasFlag(PES_SPELLCHECK)) { + m_pSpellCheck = GetCreationParam().pSpellCheck; + } } -void CPWL_Edit::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - CPWL_Wnd::GetThisAppearanceStream(sAppStream); - - CPDF_Rect rcClient = GetClientRect(); - CFX_ByteTextBuf sLine; - - int32_t nCharArray = m_pEdit->GetCharArray(); - - if (nCharArray > 0) - { - switch (GetBorderStyle()) - { - case PBS_SOLID: - { - sLine << "q\n" << GetBorderWidth() << " w\n" - << CPWL_Utils::GetColorAppStream(GetBorderColor(),FALSE) << " 2 J 0 j\n"; - - for (int32_t i=1;iGetWholeWordRange(); - CPVT_WordRange wrSelect = GetSelectWordRange(); - CPVT_WordRange wrVisible = (HasFlag(PES_TEXTOVERFLOW) ? wrWhole : m_pEdit->GetVisibleWordRange()); - CPVT_WordRange wrSelBefore(wrWhole.BeginPos,wrSelect.BeginPos); - CPVT_WordRange wrSelAfter(wrSelect.EndPos,wrWhole.EndPos); - - CPVT_WordRange wrTemp = CPWL_Utils::OverlapWordRange(GetSelectWordRange(),wrVisible); - CFX_ByteString sEditSel = CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset, - &wrTemp); - - if (sEditSel.GetLength() > 0) - sText << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELBACKCOLOR) << sEditSel ; - - wrTemp = CPWL_Utils::OverlapWordRange(wrVisible,wrSelBefore); - CFX_ByteString sEditBefore = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset, - &wrTemp, !HasFlag(PES_CHARARRAY), m_pEdit->GetPasswordChar()); - - if (sEditBefore.GetLength() > 0) - sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEditBefore << "ET\n"; - - wrTemp = CPWL_Utils::OverlapWordRange(wrVisible,wrSelect); - CFX_ByteString sEditMid = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset, - &wrTemp, !HasFlag(PES_CHARARRAY), m_pEdit->GetPasswordChar()); - - if (sEditMid.GetLength() > 0) - sText << "BT\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_GRAY,1)) << sEditMid << "ET\n"; - - wrTemp = CPWL_Utils::OverlapWordRange(wrVisible,wrSelAfter); - CFX_ByteString sEditAfter = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset, - &wrTemp, !HasFlag(PES_CHARARRAY), m_pEdit->GetPasswordChar()); - - if (sEditAfter.GetLength() > 0) - sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEditAfter<< "ET\n"; - - if (HasFlag(PES_SPELLCHECK)) - { - CFX_ByteString sSpellCheck = CPWL_Utils::GetSpellCheckAppStream(m_pEdit, m_pSpellCheck, ptOffset, &wrVisible); - if (sSpellCheck.GetLength() > 0) - sText << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB,1,0,0),FALSE) << sSpellCheck; - } - - if (sText.GetLength() > 0) - { - CPDF_Rect rcClient = GetClientRect(); - sAppStream << "q\n/Tx BMC\n"; - - if (!HasFlag(PES_TEXTOVERFLOW)) - sAppStream << rcClient.left << " " << rcClient.bottom << " " - << rcClient.right - rcClient.left << " " << rcClient.top - rcClient.bottom << " re W n\n"; - - sAppStream << sText; - - sAppStream << "EMC\nQ\n"; - } +void CPWL_Edit::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { + CPWL_Wnd::GetThisAppearanceStream(sAppStream); + + CPDF_Rect rcClient = GetClientRect(); + CFX_ByteTextBuf sLine; + + int32_t nCharArray = m_pEdit->GetCharArray(); + + if (nCharArray > 0) { + switch (GetBorderStyle()) { + case PBS_SOLID: { + sLine << "q\n" << GetBorderWidth() << " w\n" + << CPWL_Utils::GetColorAppStream(GetBorderColor(), FALSE) + << " 2 J 0 j\n"; + + for (int32_t i = 1; i < nCharArray; i++) { + sLine << rcClient.left + + ((rcClient.right - rcClient.left) / nCharArray) * i + << " " << rcClient.bottom << " m\n" + << rcClient.left + + ((rcClient.right - rcClient.left) / nCharArray) * i + << " " << rcClient.top << " l S\n"; + } + + sLine << "Q\n"; + } break; + case PBS_DASH: { + sLine << "q\n" << GetBorderWidth() << " w\n" + << CPWL_Utils::GetColorAppStream(GetBorderColor(), FALSE) + << " 2 J 0 j\n" + << "[" << GetBorderDash().nDash << " " << GetBorderDash().nGap + << "] " << GetBorderDash().nPhase << " d\n"; + + for (int32_t i = 1; i < nCharArray; i++) { + sLine << rcClient.left + + ((rcClient.right - rcClient.left) / nCharArray) * i + << " " << rcClient.bottom << " m\n" + << rcClient.left + + ((rcClient.right - rcClient.left) / nCharArray) * i + << " " << rcClient.top << " l S\n"; + } + + sLine << "Q\n"; + } break; + } + } + + sAppStream << sLine; + + CFX_ByteTextBuf sText; + + CPDF_Point ptOffset = CPDF_Point(0.0f, 0.0f); + + CPVT_WordRange wrWhole = m_pEdit->GetWholeWordRange(); + CPVT_WordRange wrSelect = GetSelectWordRange(); + CPVT_WordRange wrVisible = + (HasFlag(PES_TEXTOVERFLOW) ? wrWhole : m_pEdit->GetVisibleWordRange()); + CPVT_WordRange wrSelBefore(wrWhole.BeginPos, wrSelect.BeginPos); + CPVT_WordRange wrSelAfter(wrSelect.EndPos, wrWhole.EndPos); + + CPVT_WordRange wrTemp = + CPWL_Utils::OverlapWordRange(GetSelectWordRange(), wrVisible); + CFX_ByteString sEditSel = + CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset, &wrTemp); + + if (sEditSel.GetLength() > 0) + sText << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELBACKCOLOR) + << sEditSel; + + wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelBefore); + CFX_ByteString sEditBefore = CPWL_Utils::GetEditAppStream( + m_pEdit, ptOffset, &wrTemp, !HasFlag(PES_CHARARRAY), + m_pEdit->GetPasswordChar()); + + if (sEditBefore.GetLength() > 0) + sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) + << sEditBefore << "ET\n"; + + wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelect); + CFX_ByteString sEditMid = CPWL_Utils::GetEditAppStream( + m_pEdit, ptOffset, &wrTemp, !HasFlag(PES_CHARARRAY), + m_pEdit->GetPasswordChar()); + + if (sEditMid.GetLength() > 0) + sText << "BT\n" + << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_GRAY, 1)) + << sEditMid << "ET\n"; + + wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelAfter); + CFX_ByteString sEditAfter = CPWL_Utils::GetEditAppStream( + m_pEdit, ptOffset, &wrTemp, !HasFlag(PES_CHARARRAY), + m_pEdit->GetPasswordChar()); + + if (sEditAfter.GetLength() > 0) + sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) + << sEditAfter << "ET\n"; + + if (HasFlag(PES_SPELLCHECK)) { + CFX_ByteString sSpellCheck = CPWL_Utils::GetSpellCheckAppStream( + m_pEdit, m_pSpellCheck, ptOffset, &wrVisible); + if (sSpellCheck.GetLength() > 0) + sText << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB, 1, 0, 0), + FALSE) + << sSpellCheck; + } + + if (sText.GetLength() > 0) { + CPDF_Rect rcClient = GetClientRect(); + sAppStream << "q\n/Tx BMC\n"; + + if (!HasFlag(PES_TEXTOVERFLOW)) + sAppStream << rcClient.left << " " << rcClient.bottom << " " + << rcClient.right - rcClient.left << " " + << rcClient.top - rcClient.bottom << " re W n\n"; + + sAppStream << sText; + + sAppStream << "EMC\nQ\n"; + } } -void CPWL_Edit::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); - - CPDF_Rect rcClient = GetClientRect(); - CFX_ByteTextBuf sLine; - - int32_t nCharArray = m_pEdit->GetCharArray(); - FX_SAFE_INT32 nCharArraySafe = nCharArray; - nCharArraySafe -= 1; - nCharArraySafe *= 2; - - if (nCharArray > 0 && nCharArraySafe.IsValid()) - { - switch (GetBorderStyle()) - { - case PBS_SOLID: - { - CFX_GraphStateData gsd; - gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth(); - - CFX_PathData path; - path.SetPointCount(nCharArraySafe.ValueOrDie()); - - for (int32_t i=0; i 0) - pDevice->DrawPath(&path, pUser2Device, &gsd,0, - CPWL_Utils::PWLColorToFXColor(GetBorderColor(),255), FXFILL_ALTERNATE); - } - break; - case PBS_DASH: - { - CFX_GraphStateData gsd; - gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth(); - - gsd.SetDashCount(2); - gsd.m_DashArray[0] = (FX_FLOAT)GetBorderDash().nDash; - gsd.m_DashArray[1] = (FX_FLOAT)GetBorderDash().nGap; - gsd.m_DashPhase = (FX_FLOAT)GetBorderDash().nPhase; - - CFX_PathData path; - path.SetPointCount(nCharArraySafe.ValueOrDie()); - - for (int32_t i=0; i 0) - pDevice->DrawPath(&path, pUser2Device, &gsd,0, - CPWL_Utils::PWLColorToFXColor(GetBorderColor(),255), FXFILL_ALTERNATE); - } - break; - } - } - - CPDF_Rect rcClip; - CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); - CPVT_WordRange* pRange = NULL; - - if (!HasFlag(PES_TEXTOVERFLOW)) - { - rcClip = GetClientRect(); - pRange = &wrRange; - } -IFX_SystemHandler* pSysHandler = GetSystemHandler(); - IFX_Edit::DrawEdit(pDevice,pUser2Device,m_pEdit, - CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), - CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()), - rcClip,CPDF_Point(0.0f,0.0f),pRange, pSysHandler, m_pFormFiller); - - if (HasFlag(PES_SPELLCHECK)) - { - CPWL_Utils::DrawEditSpellCheck(pDevice,pUser2Device,m_pEdit,rcClip, - CPDF_Point(0.0f,0.0f),pRange, GetCreationParam().pSpellCheck); - } +void CPWL_Edit::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); + + CPDF_Rect rcClient = GetClientRect(); + CFX_ByteTextBuf sLine; + + int32_t nCharArray = m_pEdit->GetCharArray(); + FX_SAFE_INT32 nCharArraySafe = nCharArray; + nCharArraySafe -= 1; + nCharArraySafe *= 2; + + if (nCharArray > 0 && nCharArraySafe.IsValid()) { + switch (GetBorderStyle()) { + case PBS_SOLID: { + CFX_GraphStateData gsd; + gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth(); + + CFX_PathData path; + path.SetPointCount(nCharArraySafe.ValueOrDie()); + + for (int32_t i = 0; i < nCharArray - 1; i++) { + path.SetPoint( + i * 2, + rcClient.left + + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), + rcClient.bottom, FXPT_MOVETO); + path.SetPoint( + i * 2 + 1, + rcClient.left + + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), + rcClient.top, FXPT_LINETO); + } + if (path.GetPointCount() > 0) + pDevice->DrawPath( + &path, pUser2Device, &gsd, 0, + CPWL_Utils::PWLColorToFXColor(GetBorderColor(), 255), + FXFILL_ALTERNATE); + } break; + case PBS_DASH: { + CFX_GraphStateData gsd; + gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth(); + + gsd.SetDashCount(2); + gsd.m_DashArray[0] = (FX_FLOAT)GetBorderDash().nDash; + gsd.m_DashArray[1] = (FX_FLOAT)GetBorderDash().nGap; + gsd.m_DashPhase = (FX_FLOAT)GetBorderDash().nPhase; + + CFX_PathData path; + path.SetPointCount(nCharArraySafe.ValueOrDie()); + + for (int32_t i = 0; i < nCharArray - 1; i++) { + path.SetPoint( + i * 2, + rcClient.left + + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), + rcClient.bottom, FXPT_MOVETO); + path.SetPoint( + i * 2 + 1, + rcClient.left + + ((rcClient.right - rcClient.left) / nCharArray) * (i + 1), + rcClient.top, FXPT_LINETO); + } + if (path.GetPointCount() > 0) + pDevice->DrawPath( + &path, pUser2Device, &gsd, 0, + CPWL_Utils::PWLColorToFXColor(GetBorderColor(), 255), + FXFILL_ALTERNATE); + } break; + } + } + + CPDF_Rect rcClip; + CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); + CPVT_WordRange* pRange = NULL; + + if (!HasFlag(PES_TEXTOVERFLOW)) { + rcClip = GetClientRect(); + pRange = &wrRange; + } + IFX_SystemHandler* pSysHandler = GetSystemHandler(); + IFX_Edit::DrawEdit( + pDevice, pUser2Device, m_pEdit, + CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), + CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()), + rcClip, CPDF_Point(0.0f, 0.0f), pRange, pSysHandler, m_pFormFiller); + + if (HasFlag(PES_SPELLCHECK)) { + CPWL_Utils::DrawEditSpellCheck(pDevice, pUser2Device, m_pEdit, rcClip, + CPDF_Point(0.0f, 0.0f), pRange, + GetCreationParam().pSpellCheck); + } } -FX_BOOL CPWL_Edit::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonDown(point,nFlag); +FX_BOOL CPWL_Edit::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonDown(point, nFlag); - if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) - { - if (m_bMouseDown) - InvalidateRect(); + if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) { + if (m_bMouseDown) + InvalidateRect(); - m_bMouseDown = TRUE; - SetCapture(); + m_bMouseDown = TRUE; + SetCapture(); - m_pEdit->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - } + m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + } - return TRUE; + return TRUE; } -FX_BOOL CPWL_Edit::OnLButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonDblClk(point, nFlag); +FX_BOOL CPWL_Edit::OnLButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonDblClk(point, nFlag); - if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) - { - m_pEdit->SelectAll(); - } + if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) { + m_pEdit->SelectAll(); + } - return TRUE; + return TRUE; } -#define WM_PWLEDIT_UNDO 0x01 -#define WM_PWLEDIT_REDO 0x02 -#define WM_PWLEDIT_CUT 0x03 -#define WM_PWLEDIT_COPY 0x04 -#define WM_PWLEDIT_PASTE 0x05 -#define WM_PWLEDIT_DELETE 0x06 -#define WM_PWLEDIT_SELECTALL 0x07 -#define WM_PWLEDIT_SUGGEST 0x08 - -FX_BOOL CPWL_Edit::OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - if (m_bMouseDown) return FALSE; - - CPWL_Wnd::OnRButtonUp(point, nFlag); - - if (!HasFlag(PES_TEXTOVERFLOW) && !ClientHitTest(point)) return TRUE; - - IFX_SystemHandler* pSH = GetSystemHandler(); - if (!pSH) return FALSE; - - SetFocus(); - - CPVT_WordRange wrLatin = GetLatinWordsRange(point); - CFX_WideString swLatin = m_pEdit->GetRangeText(wrLatin); - - FX_HMENU hPopup = pSH->CreatePopupMenu(); - if (!hPopup) return FALSE; - - CFX_ByteStringArray sSuggestWords; - CPDF_Point ptPopup = point; - - if (!IsReadOnly()) - { - if (HasFlag(PES_SPELLCHECK) && !swLatin.IsEmpty()) - { - if (m_pSpellCheck) - { - CFX_ByteString sLatin = CFX_ByteString::FromUnicode(swLatin); - - if (!m_pSpellCheck->CheckWord(sLatin)) - { - m_pSpellCheck->SuggestWords(sLatin,sSuggestWords); - - int32_t nSuggest = sSuggestWords.GetSize(); - - for (int32_t nWord=0; nWordAppendMenuItem(hPopup, WM_PWLEDIT_SUGGEST+nWord, sSuggestWords[nWord].UTF8Decode()); - } - - if (nSuggest > 0) - pSH->AppendMenuItem(hPopup, 0, L""); - - ptPopup = GetWordRightBottomPoint(wrLatin.EndPos); - } - } - } - } - - IPWL_Provider* pProvider = GetProvider(); - - if (HasFlag(PES_UNDO)) - { - pSH->AppendMenuItem(hPopup, WM_PWLEDIT_UNDO, - pProvider ? pProvider->LoadPopupMenuString(0) : L"&Undo"); - pSH->AppendMenuItem(hPopup, WM_PWLEDIT_REDO, - pProvider ? pProvider->LoadPopupMenuString(1) : L"&Redo"); - pSH->AppendMenuItem(hPopup, 0, L""); - - if (!m_pEdit->CanUndo()) - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_UNDO, FALSE); - if (!m_pEdit->CanRedo()) - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_REDO, FALSE); - } - - pSH->AppendMenuItem(hPopup, WM_PWLEDIT_CUT, - pProvider ? pProvider->LoadPopupMenuString(2) : L"Cu&t"); - pSH->AppendMenuItem(hPopup, WM_PWLEDIT_COPY, - pProvider ? pProvider->LoadPopupMenuString(3) : L"&Copy"); - pSH->AppendMenuItem(hPopup, WM_PWLEDIT_PASTE, - pProvider ? pProvider->LoadPopupMenuString(4) : L"&Paste"); - pSH->AppendMenuItem(hPopup, WM_PWLEDIT_DELETE, - pProvider ? pProvider->LoadPopupMenuString(5) : L"&Delete"); - - CFX_WideString swText = pSH->GetClipboardText(GetAttachedHWnd()); - if (swText.IsEmpty()) - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE); - - if (!m_pEdit->IsSelected()) - { - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE); - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE); - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE); - } - - if (IsReadOnly()) - { - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE); - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE); - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE); - } - - if (HasFlag(PES_PASSWORD)) - { - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE); - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE); - } - - if (HasFlag(PES_NOREAD)) - { - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE); - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE); - } - - pSH->AppendMenuItem(hPopup, 0, L""); - pSH->AppendMenuItem(hPopup, WM_PWLEDIT_SELECTALL, - pProvider ? pProvider->LoadPopupMenuString(6) : L"&Select All"); - - if (m_pEdit->GetTotalWords() == 0) - { - pSH->EnableMenuItem(hPopup, WM_PWLEDIT_SELECTALL, FALSE); - } - - int32_t x, y; - PWLtoWnd(ptPopup, x, y); - pSH->ClientToScreen(GetAttachedHWnd(), x, y); - pSH->SetCursor(FXCT_ARROW); - int32_t nCmd = pSH->TrackPopupMenu(hPopup, - x, - y, - GetAttachedHWnd()); - - - switch (nCmd) - { - case WM_PWLEDIT_UNDO: - Undo(); - break; - case WM_PWLEDIT_REDO: - Redo(); - break; - case WM_PWLEDIT_CUT: - CutText(); - break; - case WM_PWLEDIT_COPY: - CopyText(); - break; - case WM_PWLEDIT_PASTE: - PasteText(); - break; - case WM_PWLEDIT_DELETE: - Clear(); - break; - case WM_PWLEDIT_SELECTALL: - SelectAll(); - break; - case WM_PWLEDIT_SUGGEST + 0: - SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos)); - ReplaceSel(sSuggestWords[0].UTF8Decode().c_str()); - break; - case WM_PWLEDIT_SUGGEST + 1: - SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos)); - ReplaceSel(sSuggestWords[1].UTF8Decode().c_str()); - break; - case WM_PWLEDIT_SUGGEST + 2: - SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos)); - ReplaceSel(sSuggestWords[2].UTF8Decode().c_str()); - break; - case WM_PWLEDIT_SUGGEST + 3: - SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos)); - ReplaceSel(sSuggestWords[3].UTF8Decode().c_str()); - break; - case WM_PWLEDIT_SUGGEST + 4: - SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos)); - ReplaceSel(sSuggestWords[4].UTF8Decode().c_str()); - break; - default: - break; - } - - pSH->DestroyMenu(hPopup); - - return TRUE; +#define WM_PWLEDIT_UNDO 0x01 +#define WM_PWLEDIT_REDO 0x02 +#define WM_PWLEDIT_CUT 0x03 +#define WM_PWLEDIT_COPY 0x04 +#define WM_PWLEDIT_PASTE 0x05 +#define WM_PWLEDIT_DELETE 0x06 +#define WM_PWLEDIT_SELECTALL 0x07 +#define WM_PWLEDIT_SUGGEST 0x08 + +FX_BOOL CPWL_Edit::OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + if (m_bMouseDown) + return FALSE; + + CPWL_Wnd::OnRButtonUp(point, nFlag); + + if (!HasFlag(PES_TEXTOVERFLOW) && !ClientHitTest(point)) + return TRUE; + + IFX_SystemHandler* pSH = GetSystemHandler(); + if (!pSH) + return FALSE; + + SetFocus(); + + CPVT_WordRange wrLatin = GetLatinWordsRange(point); + CFX_WideString swLatin = m_pEdit->GetRangeText(wrLatin); + + FX_HMENU hPopup = pSH->CreatePopupMenu(); + if (!hPopup) + return FALSE; + + CFX_ByteStringArray sSuggestWords; + CPDF_Point ptPopup = point; + + if (!IsReadOnly()) { + if (HasFlag(PES_SPELLCHECK) && !swLatin.IsEmpty()) { + if (m_pSpellCheck) { + CFX_ByteString sLatin = CFX_ByteString::FromUnicode(swLatin); + + if (!m_pSpellCheck->CheckWord(sLatin)) { + m_pSpellCheck->SuggestWords(sLatin, sSuggestWords); + + int32_t nSuggest = sSuggestWords.GetSize(); + + for (int32_t nWord = 0; nWord < nSuggest; nWord++) { + pSH->AppendMenuItem(hPopup, WM_PWLEDIT_SUGGEST + nWord, + sSuggestWords[nWord].UTF8Decode()); + } + + if (nSuggest > 0) + pSH->AppendMenuItem(hPopup, 0, L""); + + ptPopup = GetWordRightBottomPoint(wrLatin.EndPos); + } + } + } + } + + IPWL_Provider* pProvider = GetProvider(); + + if (HasFlag(PES_UNDO)) { + pSH->AppendMenuItem( + hPopup, WM_PWLEDIT_UNDO, + pProvider ? pProvider->LoadPopupMenuString(0) : L"&Undo"); + pSH->AppendMenuItem( + hPopup, WM_PWLEDIT_REDO, + pProvider ? pProvider->LoadPopupMenuString(1) : L"&Redo"); + pSH->AppendMenuItem(hPopup, 0, L""); + + if (!m_pEdit->CanUndo()) + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_UNDO, FALSE); + if (!m_pEdit->CanRedo()) + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_REDO, FALSE); + } + + pSH->AppendMenuItem(hPopup, WM_PWLEDIT_CUT, + pProvider ? pProvider->LoadPopupMenuString(2) : L"Cu&t"); + pSH->AppendMenuItem(hPopup, WM_PWLEDIT_COPY, + pProvider ? pProvider->LoadPopupMenuString(3) : L"&Copy"); + pSH->AppendMenuItem( + hPopup, WM_PWLEDIT_PASTE, + pProvider ? pProvider->LoadPopupMenuString(4) : L"&Paste"); + pSH->AppendMenuItem( + hPopup, WM_PWLEDIT_DELETE, + pProvider ? pProvider->LoadPopupMenuString(5) : L"&Delete"); + + CFX_WideString swText = pSH->GetClipboardText(GetAttachedHWnd()); + if (swText.IsEmpty()) + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE); + + if (!m_pEdit->IsSelected()) { + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE); + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE); + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE); + } + + if (IsReadOnly()) { + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE); + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE); + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE); + } + + if (HasFlag(PES_PASSWORD)) { + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE); + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE); + } + + if (HasFlag(PES_NOREAD)) { + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE); + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE); + } + + pSH->AppendMenuItem(hPopup, 0, L""); + pSH->AppendMenuItem( + hPopup, WM_PWLEDIT_SELECTALL, + pProvider ? pProvider->LoadPopupMenuString(6) : L"&Select All"); + + if (m_pEdit->GetTotalWords() == 0) { + pSH->EnableMenuItem(hPopup, WM_PWLEDIT_SELECTALL, FALSE); + } + + int32_t x, y; + PWLtoWnd(ptPopup, x, y); + pSH->ClientToScreen(GetAttachedHWnd(), x, y); + pSH->SetCursor(FXCT_ARROW); + int32_t nCmd = pSH->TrackPopupMenu(hPopup, x, y, GetAttachedHWnd()); + + switch (nCmd) { + case WM_PWLEDIT_UNDO: + Undo(); + break; + case WM_PWLEDIT_REDO: + Redo(); + break; + case WM_PWLEDIT_CUT: + CutText(); + break; + case WM_PWLEDIT_COPY: + CopyText(); + break; + case WM_PWLEDIT_PASTE: + PasteText(); + break; + case WM_PWLEDIT_DELETE: + Clear(); + break; + case WM_PWLEDIT_SELECTALL: + SelectAll(); + break; + case WM_PWLEDIT_SUGGEST + 0: + SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos), + m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos)); + ReplaceSel(sSuggestWords[0].UTF8Decode().c_str()); + break; + case WM_PWLEDIT_SUGGEST + 1: + SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos), + m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos)); + ReplaceSel(sSuggestWords[1].UTF8Decode().c_str()); + break; + case WM_PWLEDIT_SUGGEST + 2: + SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos), + m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos)); + ReplaceSel(sSuggestWords[2].UTF8Decode().c_str()); + break; + case WM_PWLEDIT_SUGGEST + 3: + SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos), + m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos)); + ReplaceSel(sSuggestWords[3].UTF8Decode().c_str()); + break; + case WM_PWLEDIT_SUGGEST + 4: + SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos), + m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos)); + ReplaceSel(sSuggestWords[4].UTF8Decode().c_str()); + break; + default: + break; + } + + pSH->DestroyMenu(hPopup); + + return TRUE; } -void CPWL_Edit::OnSetFocus() -{ - SetEditCaret(TRUE); +void CPWL_Edit::OnSetFocus() { + SetEditCaret(TRUE); - if (!IsReadOnly()) - { - if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler()) - pFocusHandler->OnSetFocus(this); - } + if (!IsReadOnly()) { + if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler()) + pFocusHandler->OnSetFocus(this); + } - m_bFocus = TRUE; + m_bFocus = TRUE; } -void CPWL_Edit::OnKillFocus() -{ - ShowVScrollBar(FALSE); +void CPWL_Edit::OnKillFocus() { + ShowVScrollBar(FALSE); - m_pEdit->SelectNone(); - SetCaret(FALSE, CPDF_Point(0.0f,0.0f), CPDF_Point(0.0f,0.0f)); + m_pEdit->SelectNone(); + SetCaret(FALSE, CPDF_Point(0.0f, 0.0f), CPDF_Point(0.0f, 0.0f)); - SetCharSet(0); + SetCharSet(0); - if (!IsReadOnly()) - { - if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler()) - pFocusHandler->OnKillFocus(this); - } + if (!IsReadOnly()) { + if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler()) + pFocusHandler->OnKillFocus(this); + } - m_bFocus = FALSE; + m_bFocus = FALSE; } -void CPWL_Edit::SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint/* = TRUE*/) -{ - m_pEdit->SetHorzScale(nHorzScale, bPaint); +void CPWL_Edit::SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint /* = TRUE*/) { + m_pEdit->SetHorzScale(nHorzScale, bPaint); } -void CPWL_Edit::SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint/* = TRUE*/) -{ - m_pEdit->SetCharSpace(fCharSpace, bPaint); +void CPWL_Edit::SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint /* = TRUE*/) { + m_pEdit->SetCharSpace(fCharSpace, bPaint); } -void CPWL_Edit::SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint/* = TRUE*/) -{ - m_pEdit->SetLineLeading(fLineLeading, bPaint); +void CPWL_Edit::SetLineLeading(FX_FLOAT fLineLeading, + FX_BOOL bPaint /* = TRUE*/) { + m_pEdit->SetLineLeading(fLineLeading, bPaint); } -CFX_ByteString CPWL_Edit::GetSelectAppearanceStream(const CPDF_Point & ptOffset) const -{ - CPVT_WordRange wr = GetSelectWordRange(); - return CPWL_Utils::GetEditSelAppStream(m_pEdit,ptOffset,&wr); +CFX_ByteString CPWL_Edit::GetSelectAppearanceStream( + const CPDF_Point& ptOffset) const { + CPVT_WordRange wr = GetSelectWordRange(); + return CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset, &wr); } -CPVT_WordRange CPWL_Edit::GetSelectWordRange() const -{ - if (m_pEdit->IsSelected()) - { - int32_t nStart = -1; - int32_t nEnd = -1; +CPVT_WordRange CPWL_Edit::GetSelectWordRange() const { + if (m_pEdit->IsSelected()) { + int32_t nStart = -1; + int32_t nEnd = -1; - m_pEdit->GetSel(nStart, nEnd); + m_pEdit->GetSel(nStart, nEnd); - CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStart); - CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEnd); + CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStart); + CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEnd); - return CPVT_WordRange(wpStart,wpEnd); - } + return CPVT_WordRange(wpStart, wpEnd); + } - return CPVT_WordRange(); + return CPVT_WordRange(); } -CFX_ByteString CPWL_Edit::GetTextAppearanceStream(const CPDF_Point & ptOffset) const -{ - CFX_ByteTextBuf sRet; - CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit,ptOffset); +CFX_ByteString CPWL_Edit::GetTextAppearanceStream( + const CPDF_Point& ptOffset) const { + CFX_ByteTextBuf sRet; + CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset); - if (sEdit.GetLength() > 0) - { - sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit << "ET\n"; - } + if (sEdit.GetLength() > 0) { + sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit + << "ET\n"; + } - return sRet.GetByteString(); + return sRet.GetByteString(); } -CFX_ByteString CPWL_Edit::GetCaretAppearanceStream(const CPDF_Point & ptOffset) const -{ - if (m_pEditCaret) - return m_pEditCaret->GetCaretAppearanceStream(ptOffset); +CFX_ByteString CPWL_Edit::GetCaretAppearanceStream( + const CPDF_Point& ptOffset) const { + if (m_pEditCaret) + return m_pEditCaret->GetCaretAppearanceStream(ptOffset); - return CFX_ByteString(); + return CFX_ByteString(); } -CPDF_Point CPWL_Edit::GetWordRightBottomPoint(const CPVT_WordPlace& wpWord) -{ - CPDF_Point pt(0.0f, 0.0f); +CPDF_Point CPWL_Edit::GetWordRightBottomPoint(const CPVT_WordPlace& wpWord) { + CPDF_Point pt(0.0f, 0.0f); - if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator()) - { - CPVT_WordPlace wpOld = pIterator->GetAt(); - pIterator->SetAt(wpWord); - CPVT_Word word; - if (pIterator->GetWord(word)) - { - pt = CPDF_Point(word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent); - } + if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) { + CPVT_WordPlace wpOld = pIterator->GetAt(); + pIterator->SetAt(wpWord); + CPVT_Word word; + if (pIterator->GetWord(word)) { + pt = CPDF_Point(word.ptWord.x + word.fWidth, + word.ptWord.y + word.fDescent); + } - pIterator->SetAt(wpOld); - } + pIterator->SetAt(wpOld); + } - return pt; + return pt; } -FX_BOOL CPWL_Edit::IsTextFull() const -{ - return m_pEdit->IsTextFull(); +FX_BOOL CPWL_Edit::IsTextFull() const { + return m_pEdit->IsTextFull(); } -FX_FLOAT CPWL_Edit::GetCharArrayAutoFontSize(CPDF_Font* pFont, const CPDF_Rect& rcPlate, int32_t nCharArray) -{ - if (pFont && !pFont->IsStandardFont()) - { - FX_RECT rcBBox; - pFont->GetFontBBox(rcBBox); +FX_FLOAT CPWL_Edit::GetCharArrayAutoFontSize(CPDF_Font* pFont, + const CPDF_Rect& rcPlate, + int32_t nCharArray) { + if (pFont && !pFont->IsStandardFont()) { + FX_RECT rcBBox; + pFont->GetFontBBox(rcBBox); - CPDF_Rect rcCell = rcPlate; - FX_FLOAT xdiv = rcCell.Width() / nCharArray * 1000.0f / rcBBox.Width(); - FX_FLOAT ydiv = - rcCell.Height() * 1000.0f / rcBBox.Height(); + CPDF_Rect rcCell = rcPlate; + FX_FLOAT xdiv = rcCell.Width() / nCharArray * 1000.0f / rcBBox.Width(); + FX_FLOAT ydiv = -rcCell.Height() * 1000.0f / rcBBox.Height(); - return xdiv < ydiv ? xdiv : ydiv; - } + return xdiv < ydiv ? xdiv : ydiv; + } - return 0.0f; + return 0.0f; } -void CPWL_Edit::SetCharArray(int32_t nCharArray) -{ - if (HasFlag(PES_CHARARRAY) && nCharArray > 0) - { - m_pEdit->SetCharArray(nCharArray); - m_pEdit->SetTextOverflow(TRUE); - - if (HasFlag(PWS_AUTOFONTSIZE)) - { - if (IFX_Edit_FontMap* pFontMap = GetFontMap()) - { - FX_FLOAT fFontSize = GetCharArrayAutoFontSize(pFontMap->GetPDFFont(0), GetClientRect(), nCharArray); - if (fFontSize > 0.0f) - { - m_pEdit->SetAutoFontSize(FALSE); - m_pEdit->SetFontSize(fFontSize); - } - } - } - } +void CPWL_Edit::SetCharArray(int32_t nCharArray) { + if (HasFlag(PES_CHARARRAY) && nCharArray > 0) { + m_pEdit->SetCharArray(nCharArray); + m_pEdit->SetTextOverflow(TRUE); + + if (HasFlag(PWS_AUTOFONTSIZE)) { + if (IFX_Edit_FontMap* pFontMap = GetFontMap()) { + FX_FLOAT fFontSize = GetCharArrayAutoFontSize( + pFontMap->GetPDFFont(0), GetClientRect(), nCharArray); + if (fFontSize > 0.0f) { + m_pEdit->SetAutoFontSize(FALSE); + m_pEdit->SetFontSize(fFontSize); + } + } + } + } } -void CPWL_Edit::SetLimitChar(int32_t nLimitChar) -{ - m_pEdit->SetLimitChar(nLimitChar); +void CPWL_Edit::SetLimitChar(int32_t nLimitChar) { + m_pEdit->SetLimitChar(nLimitChar); } -void CPWL_Edit::ReplaceSel(const FX_WCHAR* csText) -{ - m_pEdit->Clear(); - m_pEdit->InsertText(csText); +void CPWL_Edit::ReplaceSel(const FX_WCHAR* csText) { + m_pEdit->Clear(); + m_pEdit->InsertText(csText); } -CPDF_Rect CPWL_Edit::GetFocusRect() const -{ - return CPDF_Rect(); +CPDF_Rect CPWL_Edit::GetFocusRect() const { + return CPDF_Rect(); } -void CPWL_Edit::ShowVScrollBar(FX_BOOL bShow) -{ - if (CPWL_ScrollBar * pScroll = GetVScrollBar()) - { - if (bShow) - { - if (!pScroll->IsVisible()) - { - pScroll->SetVisible(TRUE); - CPDF_Rect rcWindow = GetWindowRect(); - m_rcOldWindow = rcWindow; - rcWindow.right += PWL_SCROLLBAR_WIDTH; - Move(rcWindow, TRUE, TRUE); - } - } - else - { - if (pScroll->IsVisible()) - { - pScroll->SetVisible(FALSE); - Move(m_rcOldWindow, TRUE, TRUE); - } - } - } +void CPWL_Edit::ShowVScrollBar(FX_BOOL bShow) { + if (CPWL_ScrollBar* pScroll = GetVScrollBar()) { + if (bShow) { + if (!pScroll->IsVisible()) { + pScroll->SetVisible(TRUE); + CPDF_Rect rcWindow = GetWindowRect(); + m_rcOldWindow = rcWindow; + rcWindow.right += PWL_SCROLLBAR_WIDTH; + Move(rcWindow, TRUE, TRUE); + } + } else { + if (pScroll->IsVisible()) { + pScroll->SetVisible(FALSE); + Move(m_rcOldWindow, TRUE, TRUE); + } + } + } } -FX_BOOL CPWL_Edit::IsVScrollBarVisible() const -{ - if (CPWL_ScrollBar * pScroll = GetVScrollBar()) - { - return pScroll->IsVisible(); - } +FX_BOOL CPWL_Edit::IsVScrollBarVisible() const { + if (CPWL_ScrollBar* pScroll = GetVScrollBar()) { + return pScroll->IsVisible(); + } - return FALSE; + return FALSE; } -void CPWL_Edit::EnableSpellCheck(FX_BOOL bEnabled) -{ - if (bEnabled) - AddFlag(PES_SPELLCHECK); - else - RemoveFlag(PES_SPELLCHECK); +void CPWL_Edit::EnableSpellCheck(FX_BOOL bEnabled) { + if (bEnabled) + AddFlag(PES_SPELLCHECK); + else + RemoveFlag(PES_SPELLCHECK); } -FX_BOOL CPWL_Edit::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) -{ - if (m_bMouseDown) return TRUE; - - if (nChar == FWL_VKEY_Delete) - { - if (m_pFillerNotify) - { - FX_BOOL bRC = TRUE; - FX_BOOL bExit = FALSE; - CFX_WideString strChange; - CFX_WideString strChangeEx; - - int nSelStart = 0; - int nSelEnd = 0; - GetSel(nSelStart, nSelEnd); - - if (nSelStart == nSelEnd) - nSelEnd = nSelStart + 1; - m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), FWL_VKEY_Delete, strChange, strChangeEx, nSelStart, nSelEnd, TRUE, bRC, bExit, nFlag); - if (!bRC) return FALSE; - if (bExit) return FALSE; - } - } - - FX_BOOL bRet = CPWL_EditCtrl::OnKeyDown(nChar, nFlag); - - if (nChar == FWL_VKEY_Delete) - { - if (m_pFillerNotify) - { - FX_BOOL bExit = FALSE; - m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit,nFlag); - if (bExit) return FALSE; - } - } - - //In case of implementation swallow the OnKeyDown event. - if(IsProceedtoOnChar(nChar, nFlag)) - return TRUE; - - return bRet; +FX_BOOL CPWL_Edit::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) { + if (m_bMouseDown) + return TRUE; + + if (nChar == FWL_VKEY_Delete) { + if (m_pFillerNotify) { + FX_BOOL bRC = TRUE; + FX_BOOL bExit = FALSE; + CFX_WideString strChange; + CFX_WideString strChangeEx; + + int nSelStart = 0; + int nSelEnd = 0; + GetSel(nSelStart, nSelEnd); + + if (nSelStart == nSelEnd) + nSelEnd = nSelStart + 1; + m_pFillerNotify->OnBeforeKeyStroke( + TRUE, GetAttachedData(), FWL_VKEY_Delete, strChange, strChangeEx, + nSelStart, nSelEnd, TRUE, bRC, bExit, nFlag); + if (!bRC) + return FALSE; + if (bExit) + return FALSE; + } + } + + FX_BOOL bRet = CPWL_EditCtrl::OnKeyDown(nChar, nFlag); + + if (nChar == FWL_VKEY_Delete) { + if (m_pFillerNotify) { + FX_BOOL bExit = FALSE; + m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit, nFlag); + if (bExit) + return FALSE; + } + } + + // In case of implementation swallow the OnKeyDown event. + if (IsProceedtoOnChar(nChar, nFlag)) + return TRUE; + + return bRet; } /** *In case of implementation swallow the OnKeyDown event. -*If the event is swallowed, implementation may do other unexpected things, which is not the control means to do. +*If the event is swallowed, implementation may do other unexpected things, which +*is not the control means to do. */ -FX_BOOL CPWL_Edit::IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag) -{ - - FX_BOOL bCtrl = IsCTRLpressed(nFlag); - FX_BOOL bAlt = IsALTpressed(nFlag); - if(bCtrl && !bAlt) - { - //hot keys for edit control. - switch(nKeyCode) - { - case 'C': - case 'V': - case 'X': - case 'A': - case 'Z': - return TRUE; - default: - break; - } - } - //control characters. - switch(nKeyCode) - { - case FWL_VKEY_Escape: - case FWL_VKEY_Back: - case FWL_VKEY_Return: - case FWL_VKEY_Space: - return TRUE; - default: - break; - } - return FALSE; - +FX_BOOL CPWL_Edit::IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag) { + FX_BOOL bCtrl = IsCTRLpressed(nFlag); + FX_BOOL bAlt = IsALTpressed(nFlag); + if (bCtrl && !bAlt) { + // hot keys for edit control. + switch (nKeyCode) { + case 'C': + case 'V': + case 'X': + case 'A': + case 'Z': + return TRUE; + default: + break; + } + } + // control characters. + switch (nKeyCode) { + case FWL_VKEY_Escape: + case FWL_VKEY_Back: + case FWL_VKEY_Return: + case FWL_VKEY_Space: + return TRUE; + default: + break; + } + return FALSE; } -FX_BOOL CPWL_Edit::OnChar(FX_WORD nChar, FX_DWORD nFlag) -{ - if (m_bMouseDown) return TRUE; - - FX_BOOL bRC = TRUE; - FX_BOOL bExit = FALSE; - - FX_BOOL bCtrl = IsCTRLpressed(nFlag); - if (!bCtrl) - { - if (m_pFillerNotify) - { - CFX_WideString swChange; - int32_t nKeyCode; - - int nSelStart = 0; - int nSelEnd = 0; - GetSel(nSelStart, nSelEnd); - - switch (nChar) - { - case FWL_VKEY_Back: - nKeyCode = nChar; - if (nSelStart == nSelEnd) - nSelStart = nSelEnd - 1; - break; - case FWL_VKEY_Return: - nKeyCode = nChar; - break; - default: - nKeyCode = 0; - swChange += nChar; - break; - } - - CFX_WideString strChangeEx; - m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), nKeyCode, swChange, strChangeEx, nSelStart, nSelEnd, TRUE, bRC, bExit, nFlag); - } - } - - if (!bRC) return TRUE; - if (bExit) return FALSE; - - if (IFX_Edit_FontMap * pFontMap = GetFontMap()) - { - int32_t nOldCharSet = GetCharSet(); - int32_t nNewCharSet = pFontMap->CharSetFromUnicode(nChar, DEFAULT_CHARSET); - if(nOldCharSet != nNewCharSet) - { - SetCharSet(nNewCharSet); - } - } - FX_BOOL bRet = CPWL_EditCtrl::OnChar(nChar,nFlag); - - if (!bCtrl) - { - if (m_pFillerNotify) - { - m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit,nFlag); - if (bExit) return FALSE; - } - } - - return bRet; -} +FX_BOOL CPWL_Edit::OnChar(FX_WORD nChar, FX_DWORD nFlag) { + if (m_bMouseDown) + return TRUE; + + FX_BOOL bRC = TRUE; + FX_BOOL bExit = FALSE; + + FX_BOOL bCtrl = IsCTRLpressed(nFlag); + if (!bCtrl) { + if (m_pFillerNotify) { + CFX_WideString swChange; + int32_t nKeyCode; + + int nSelStart = 0; + int nSelEnd = 0; + GetSel(nSelStart, nSelEnd); + + switch (nChar) { + case FWL_VKEY_Back: + nKeyCode = nChar; + if (nSelStart == nSelEnd) + nSelStart = nSelEnd - 1; + break; + case FWL_VKEY_Return: + nKeyCode = nChar; + break; + default: + nKeyCode = 0; + swChange += nChar; + break; + } + + CFX_WideString strChangeEx; + m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), nKeyCode, + swChange, strChangeEx, nSelStart, + nSelEnd, TRUE, bRC, bExit, nFlag); + } + } + + if (!bRC) + return TRUE; + if (bExit) + return FALSE; + + if (IFX_Edit_FontMap* pFontMap = GetFontMap()) { + int32_t nOldCharSet = GetCharSet(); + int32_t nNewCharSet = pFontMap->CharSetFromUnicode(nChar, DEFAULT_CHARSET); + if (nOldCharSet != nNewCharSet) { + SetCharSet(nNewCharSet); + } + } + FX_BOOL bRet = CPWL_EditCtrl::OnChar(nChar, nFlag); + + if (!bCtrl) { + if (m_pFillerNotify) { + m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit, nFlag); + if (bExit) + return FALSE; + } + } -FX_BOOL CPWL_Edit::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag) -{ - if (HasFlag(PES_MULTILINE)) - { - CPDF_Point ptScroll = GetScrollPos(); - - if (zDelta > 0) - { - ptScroll.y += GetFontSize(); - } - else - { - ptScroll.y -= GetFontSize(); - } - SetScrollPos(ptScroll); - - return TRUE; - } - - return FALSE; + return bRet; } -void CPWL_Edit::OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) -{ - if (HasFlag(PES_SPELLCHECK)) - { - m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place))); - } - - if (m_pEditNotify) - { - m_pEditNotify->OnInsertReturn(place, oldplace); - } -} +FX_BOOL CPWL_Edit::OnMouseWheel(short zDelta, + const CPDF_Point& point, + FX_DWORD nFlag) { + if (HasFlag(PES_MULTILINE)) { + CPDF_Point ptScroll = GetScrollPos(); + + if (zDelta > 0) { + ptScroll.y += GetFontSize(); + } else { + ptScroll.y -= GetFontSize(); + } + SetScrollPos(ptScroll); + + return TRUE; + } -void CPWL_Edit::OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) -{ - if (HasFlag(PES_SPELLCHECK)) - { - m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place))); - } - - if (m_pEditNotify) - { - m_pEditNotify->OnBackSpace(place, oldplace); - } + return FALSE; } -void CPWL_Edit::OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) -{ - if (HasFlag(PES_SPELLCHECK)) - { - m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place))); - } - - if (m_pEditNotify) - { - m_pEditNotify->OnDelete(place, oldplace); - } +void CPWL_Edit::OnInsertReturn(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) { + if (HasFlag(PES_SPELLCHECK)) { + m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace), + GetLatinWordsRange(place))); + } + + if (m_pEditNotify) { + m_pEditNotify->OnInsertReturn(place, oldplace); + } } -void CPWL_Edit::OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) -{ - if (HasFlag(PES_SPELLCHECK)) - { - m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place))); - } - - if (m_pEditNotify) - { - m_pEditNotify->OnClear(place, oldplace); - } +void CPWL_Edit::OnBackSpace(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) { + if (HasFlag(PES_SPELLCHECK)) { + m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace), + GetLatinWordsRange(place))); + } + + if (m_pEditNotify) { + m_pEditNotify->OnBackSpace(place, oldplace); + } } -void CPWL_Edit::OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) -{ - if (HasFlag(PES_SPELLCHECK)) - { - m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place))); - } - - if (m_pEditNotify) - { - m_pEditNotify->OnInsertWord(place, oldplace); - } +void CPWL_Edit::OnDelete(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) { + if (HasFlag(PES_SPELLCHECK)) { + m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace), + GetLatinWordsRange(place))); + } + + if (m_pEditNotify) { + m_pEditNotify->OnDelete(place, oldplace); + } } -void CPWL_Edit::OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) -{ +void CPWL_Edit::OnClear(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) { + if (HasFlag(PES_SPELLCHECK)) { + m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace), + GetLatinWordsRange(place))); + } + + if (m_pEditNotify) { + m_pEditNotify->OnClear(place, oldplace); + } } -void CPWL_Edit::OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) -{ - if (HasFlag(PES_SPELLCHECK)) - { - m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place))); - } - - if (m_pEditNotify) - { - m_pEditNotify->OnInsertText(place, oldplace); - } +void CPWL_Edit::OnInsertWord(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) { + if (HasFlag(PES_SPELLCHECK)) { + m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace), + GetLatinWordsRange(place))); + } + + if (m_pEditNotify) { + m_pEditNotify->OnInsertWord(place, oldplace); + } } -void CPWL_Edit::OnAddUndo(IFX_Edit_UndoItem* pUndoItem) -{ - if (m_pEditNotify) - { - m_pEditNotify->OnAddUndo(this); - } +void CPWL_Edit::OnSetText(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) {} + +void CPWL_Edit::OnInsertText(const CPVT_WordPlace& place, + const CPVT_WordPlace& oldplace) { + if (HasFlag(PES_SPELLCHECK)) { + m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace), + GetLatinWordsRange(place))); + } + + if (m_pEditNotify) { + m_pEditNotify->OnInsertText(place, oldplace); + } } -CPVT_WordRange CPWL_Edit::CombineWordRange(const CPVT_WordRange& wr1, const CPVT_WordRange& wr2) -{ - CPVT_WordRange wrRet; - - if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) - { - wrRet.BeginPos = wr1.BeginPos; - } - else - { - wrRet.BeginPos = wr2.BeginPos; - } - - if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) - { - wrRet.EndPos = wr2.EndPos; - } - else - { - wrRet.EndPos = wr1.EndPos; - } - - return wrRet; +void CPWL_Edit::OnAddUndo(IFX_Edit_UndoItem* pUndoItem) { + if (m_pEditNotify) { + m_pEditNotify->OnAddUndo(this); + } } -CPVT_WordRange CPWL_Edit::GetLatinWordsRange(const CPDF_Point& point) const -{ - return GetSameWordsRange(m_pEdit->SearchWordPlace(point), TRUE, FALSE); +CPVT_WordRange CPWL_Edit::CombineWordRange(const CPVT_WordRange& wr1, + const CPVT_WordRange& wr2) { + CPVT_WordRange wrRet; + + if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) { + wrRet.BeginPos = wr1.BeginPos; + } else { + wrRet.BeginPos = wr2.BeginPos; + } + + if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) { + wrRet.EndPos = wr2.EndPos; + } else { + wrRet.EndPos = wr1.EndPos; + } + + return wrRet; } -CPVT_WordRange CPWL_Edit::GetLatinWordsRange(const CPVT_WordPlace & place) const -{ - return GetSameWordsRange(place, TRUE, FALSE); +CPVT_WordRange CPWL_Edit::GetLatinWordsRange(const CPDF_Point& point) const { + return GetSameWordsRange(m_pEdit->SearchWordPlace(point), TRUE, FALSE); } -CPVT_WordRange CPWL_Edit::GetArabicWordsRange(const CPVT_WordPlace & place) const -{ - return GetSameWordsRange(place, FALSE, TRUE); +CPVT_WordRange CPWL_Edit::GetLatinWordsRange( + const CPVT_WordPlace& place) const { + return GetSameWordsRange(place, TRUE, FALSE); } -#define PWL_ISARABICWORD(word) ((word >= 0x0600 && word <= 0x06FF) || (word >= 0xFB50 && word <= 0xFEFC)) - -CPVT_WordRange CPWL_Edit::GetSameWordsRange(const CPVT_WordPlace & place, FX_BOOL bLatin, FX_BOOL bArabic) const -{ - CPVT_WordRange range; - - if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) - { - CPVT_Word wordinfo; - CPVT_WordPlace wpStart(place),wpEnd(place); - pIterator->SetAt(place); - - if (bLatin) - { - while (pIterator->NextWord()) - { - if (pIterator->GetWord(wordinfo) && FX_EDIT_ISLATINWORD(wordinfo.Word)) - { - wpEnd = pIterator->GetAt(); - continue; - } - else - break; - }; - } - else if (bArabic) - { - while (pIterator->NextWord()) - { - if (pIterator->GetWord(wordinfo) && PWL_ISARABICWORD(wordinfo.Word)) - { - wpEnd = pIterator->GetAt(); - continue; - } - else - break; - }; - } - - pIterator->SetAt(place); - - if (bLatin) - { - do - { - if (pIterator->GetWord(wordinfo) && FX_EDIT_ISLATINWORD(wordinfo.Word)) - { - continue; - } - else - { - wpStart = pIterator->GetAt(); - break; - } - } - while (pIterator->PrevWord()); - } - else if (bArabic) - { - do - { - if (pIterator->GetWord(wordinfo) && PWL_ISARABICWORD(wordinfo.Word)) - { - continue; - } - else - { - wpStart = pIterator->GetAt(); - break; - } - } - while (pIterator->PrevWord()); - } - - range.Set(wpStart,wpEnd); - } - - return range; +CPVT_WordRange CPWL_Edit::GetArabicWordsRange( + const CPVT_WordPlace& place) const { + return GetSameWordsRange(place, FALSE, TRUE); } -void CPWL_Edit::AjustArabicWords(const CPVT_WordRange& wr) -{ +#define PWL_ISARABICWORD(word) \ + ((word >= 0x0600 && word <= 0x06FF) || (word >= 0xFB50 && word <= 0xFEFC)) + +CPVT_WordRange CPWL_Edit::GetSameWordsRange(const CPVT_WordPlace& place, + FX_BOOL bLatin, + FX_BOOL bArabic) const { + CPVT_WordRange range; + + if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) { + CPVT_Word wordinfo; + CPVT_WordPlace wpStart(place), wpEnd(place); + pIterator->SetAt(place); + + if (bLatin) { + while (pIterator->NextWord()) { + if (pIterator->GetWord(wordinfo) && + FX_EDIT_ISLATINWORD(wordinfo.Word)) { + wpEnd = pIterator->GetAt(); + continue; + } else + break; + }; + } else if (bArabic) { + while (pIterator->NextWord()) { + if (pIterator->GetWord(wordinfo) && PWL_ISARABICWORD(wordinfo.Word)) { + wpEnd = pIterator->GetAt(); + continue; + } else + break; + }; + } + + pIterator->SetAt(place); + + if (bLatin) { + do { + if (pIterator->GetWord(wordinfo) && + FX_EDIT_ISLATINWORD(wordinfo.Word)) { + continue; + } else { + wpStart = pIterator->GetAt(); + break; + } + } while (pIterator->PrevWord()); + } else if (bArabic) { + do { + if (pIterator->GetWord(wordinfo) && PWL_ISARABICWORD(wordinfo.Word)) { + continue; + } else { + wpStart = pIterator->GetAt(); + break; + } + } while (pIterator->PrevWord()); + } + + range.Set(wpStart, wpEnd); + } + + return range; } -void CPWL_Edit::GeneratePageObjects(CPDF_PageObjects* pPageObjects, - const CPDF_Point& ptOffset, CFX_ArrayTemplate& ObjArray) -{ - IFX_Edit::GeneratePageObjects(pPageObjects, m_pEdit, ptOffset, NULL, CPWL_Utils::PWLColorToFXColor(GetTextColor(),GetTransparency()), ObjArray); +void CPWL_Edit::AjustArabicWords(const CPVT_WordRange& wr) {} + +void CPWL_Edit::GeneratePageObjects( + CPDF_PageObjects* pPageObjects, + const CPDF_Point& ptOffset, + CFX_ArrayTemplate& ObjArray) { + IFX_Edit::GeneratePageObjects( + pPageObjects, m_pEdit, ptOffset, NULL, + CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), + ObjArray); } void CPWL_Edit::GeneratePageObjects(CPDF_PageObjects* pPageObjects, - const CPDF_Point& ptOffset) -{ - CFX_ArrayTemplate ObjArray; - IFX_Edit::GeneratePageObjects(pPageObjects, m_pEdit, ptOffset, NULL, CPWL_Utils::PWLColorToFXColor(GetTextColor(),GetTransparency()), ObjArray); + const CPDF_Point& ptOffset) { + CFX_ArrayTemplate ObjArray; + IFX_Edit::GeneratePageObjects( + pPageObjects, m_pEdit, ptOffset, NULL, + CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), + ObjArray); } - diff --git a/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp b/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp index 0d14587f66..eb6324ee7e 100644 --- a/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp @@ -12,172 +12,146 @@ #include "../../include/pdfwindow/PWL_Caret.h" #include "../../include/pdfwindow/PWL_FontMap.h" -#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) -#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb)) +#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) +#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb)) /* ---------------------------- CPWL_EditCtrl ------------------------------ */ -CPWL_EditCtrl::CPWL_EditCtrl() : - m_pEdit(NULL), - m_pEditCaret(NULL), - m_bMouseDown(FALSE), - m_pEditNotify(NULL), - m_nCharSet(DEFAULT_CHARSET), - m_nCodePage(0) -{ - m_pEdit = IFX_Edit::NewEdit(); - ASSERT(m_pEdit != NULL); +CPWL_EditCtrl::CPWL_EditCtrl() + : m_pEdit(NULL), + m_pEditCaret(NULL), + m_bMouseDown(FALSE), + m_pEditNotify(NULL), + m_nCharSet(DEFAULT_CHARSET), + m_nCodePage(0) { + m_pEdit = IFX_Edit::NewEdit(); + ASSERT(m_pEdit != NULL); } -CPWL_EditCtrl::~CPWL_EditCtrl() -{ - IFX_Edit::DelEdit(m_pEdit); +CPWL_EditCtrl::~CPWL_EditCtrl() { + IFX_Edit::DelEdit(m_pEdit); } -void CPWL_EditCtrl::OnCreate(PWL_CREATEPARAM& cp) -{ - cp.eCursorType = FXCT_VBEAM; +void CPWL_EditCtrl::OnCreate(PWL_CREATEPARAM& cp) { + cp.eCursorType = FXCT_VBEAM; } -void CPWL_EditCtrl::OnCreated() -{ - SetFontSize(GetCreationParam().fFontSize); +void CPWL_EditCtrl::OnCreated() { + SetFontSize(GetCreationParam().fFontSize); - m_pEdit->SetFontMap(GetFontMap()); - m_pEdit->SetNotify(this); - m_pEdit->Initialize(); + m_pEdit->SetFontMap(GetFontMap()); + m_pEdit->SetNotify(this); + m_pEdit->Initialize(); } -FX_BOOL CPWL_EditCtrl::IsWndHorV() -{ - CPDF_Matrix mt = GetWindowMatrix(); - CPDF_Point point1(0,1); - CPDF_Point point2(1,1); +FX_BOOL CPWL_EditCtrl::IsWndHorV() { + CPDF_Matrix mt = GetWindowMatrix(); + CPDF_Point point1(0, 1); + CPDF_Point point2(1, 1); - mt.Transform(point1.x, point1.y); - mt.Transform(point2.x, point2.y); + mt.Transform(point1.x, point1.y); + mt.Transform(point2.x, point2.y); - return point2.y == point1.y; + return point2.y == point1.y; } -void CPWL_EditCtrl::SetCursor() -{ - if (IsValid()) - { - if (IFX_SystemHandler* pSH = GetSystemHandler()) - { - if (IsWndHorV()) - pSH->SetCursor(FXCT_VBEAM); - else - pSH->SetCursor(FXCT_HBEAM); - } +void CPWL_EditCtrl::SetCursor() { + if (IsValid()) { + if (IFX_SystemHandler* pSH = GetSystemHandler()) { + if (IsWndHorV()) + pSH->SetCursor(FXCT_VBEAM); + else + pSH->SetCursor(FXCT_HBEAM); } -} - -void CPWL_EditCtrl::RePosChildWnd() -{ - m_pEdit->SetPlateRect(GetClientRect()); -} - -void CPWL_EditCtrl::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) -{ - CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam); - - switch (msg) - { - case PNM_SETSCROLLINFO: - switch (wParam) - { - case SBT_VSCROLL: - if (CPWL_Wnd * pChild = GetVScrollBar()) - { - pChild->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam); - } - break; - } - break; - case PNM_SETSCROLLPOS: - switch (wParam) - { - case SBT_VSCROLL: - if (CPWL_Wnd * pChild = GetVScrollBar()) - { - pChild->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam); - } - break; - } - break; - case PNM_SCROLLWINDOW: - { - FX_FLOAT fPos = *(FX_FLOAT*)lParam; - switch (wParam) - { - case SBT_VSCROLL: - m_pEdit->SetScrollPos(CPDF_Point(m_pEdit->GetScrollPos().x,fPos)); - break; - } - } - break; - case PNM_SETCARETINFO: - { - if (PWL_CARET_INFO * pCaretInfo = (PWL_CARET_INFO *)wParam) - { - SetCaret(pCaretInfo->bVisible, - pCaretInfo->ptHead, - pCaretInfo->ptFoot); - } - } - break; - } -} - -void CPWL_EditCtrl::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - if (!IsReadOnly()) - CreateEditCaret(cp); -} - -void CPWL_EditCtrl::CreateEditCaret(const PWL_CREATEPARAM & cp) -{ - if (!m_pEditCaret) - { - m_pEditCaret = new CPWL_Caret; - m_pEditCaret->SetInvalidRect(GetClientRect()); - - PWL_CREATEPARAM ecp = cp; - ecp.pParentWnd = this; - ecp.dwFlags = PWS_CHILD | PWS_NOREFRESHCLIP; - ecp.dwBorderWidth = 0; - ecp.nBorderStyle = PBS_SOLID; - ecp.rcRectWnd = CPDF_Rect(0,0,0,0); - - m_pEditCaret->Create(ecp); - } -} - -void CPWL_EditCtrl::SetFontSize(FX_FLOAT fFontSize) -{ - m_pEdit->SetFontSize(fFontSize); -} - -FX_FLOAT CPWL_EditCtrl::GetFontSize() const -{ - return m_pEdit->GetFontSize(); -} - -FX_BOOL CPWL_EditCtrl::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) -{ - if (m_bMouseDown) return TRUE; + } +} + +void CPWL_EditCtrl::RePosChildWnd() { + m_pEdit->SetPlateRect(GetClientRect()); +} + +void CPWL_EditCtrl::OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam, + intptr_t lParam) { + CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); + + switch (msg) { + case PNM_SETSCROLLINFO: + switch (wParam) { + case SBT_VSCROLL: + if (CPWL_Wnd* pChild = GetVScrollBar()) { + pChild->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam); + } + break; + } + break; + case PNM_SETSCROLLPOS: + switch (wParam) { + case SBT_VSCROLL: + if (CPWL_Wnd* pChild = GetVScrollBar()) { + pChild->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam); + } + break; + } + break; + case PNM_SCROLLWINDOW: { + FX_FLOAT fPos = *(FX_FLOAT*)lParam; + switch (wParam) { + case SBT_VSCROLL: + m_pEdit->SetScrollPos(CPDF_Point(m_pEdit->GetScrollPos().x, fPos)); + break; + } + } break; + case PNM_SETCARETINFO: { + if (PWL_CARET_INFO* pCaretInfo = (PWL_CARET_INFO*)wParam) { + SetCaret(pCaretInfo->bVisible, pCaretInfo->ptHead, pCaretInfo->ptFoot); + } + } break; + } +} + +void CPWL_EditCtrl::CreateChildWnd(const PWL_CREATEPARAM& cp) { + if (!IsReadOnly()) + CreateEditCaret(cp); +} + +void CPWL_EditCtrl::CreateEditCaret(const PWL_CREATEPARAM& cp) { + if (!m_pEditCaret) { + m_pEditCaret = new CPWL_Caret; + m_pEditCaret->SetInvalidRect(GetClientRect()); + + PWL_CREATEPARAM ecp = cp; + ecp.pParentWnd = this; + ecp.dwFlags = PWS_CHILD | PWS_NOREFRESHCLIP; + ecp.dwBorderWidth = 0; + ecp.nBorderStyle = PBS_SOLID; + ecp.rcRectWnd = CPDF_Rect(0, 0, 0, 0); + + m_pEditCaret->Create(ecp); + } +} + +void CPWL_EditCtrl::SetFontSize(FX_FLOAT fFontSize) { + m_pEdit->SetFontSize(fFontSize); +} + +FX_FLOAT CPWL_EditCtrl::GetFontSize() const { + return m_pEdit->GetFontSize(); +} + +FX_BOOL CPWL_EditCtrl::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) { + if (m_bMouseDown) + return TRUE; - FX_BOOL bRet = CPWL_Wnd::OnKeyDown(nChar,nFlag); + FX_BOOL bRet = CPWL_Wnd::OnKeyDown(nChar, nFlag); - //FILTER - switch (nChar) - { + // FILTER + switch (nChar) { default: - return FALSE; + return FALSE; case FWL_VKEY_Delete: case FWL_VKEY_Up: case FWL_VKEY_Down: @@ -196,527 +170,460 @@ FX_BOOL CPWL_EditCtrl::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) case 'x': case 'a': case 'z': - break; - } + break; + } - if (nChar == FWL_VKEY_Delete) - { - if (m_pEdit->IsSelected()) - nChar = FWL_VKEY_Unknown; - } + if (nChar == FWL_VKEY_Delete) { + if (m_pEdit->IsSelected()) + nChar = FWL_VKEY_Unknown; + } - switch (nChar) - { - case FWL_VKEY_Delete: - Delete(); - return TRUE; - case FWL_VKEY_Insert: - if (IsSHIFTpressed(nFlag)) - PasteText(); - return TRUE; - case FWL_VKEY_Up: - m_pEdit->OnVK_UP(IsSHIFTpressed(nFlag),FALSE); - return TRUE; - case FWL_VKEY_Down: - m_pEdit->OnVK_DOWN(IsSHIFTpressed(nFlag),FALSE); - return TRUE; - case FWL_VKEY_Left: - m_pEdit->OnVK_LEFT(IsSHIFTpressed(nFlag),FALSE); - return TRUE; - case FWL_VKEY_Right: - m_pEdit->OnVK_RIGHT(IsSHIFTpressed(nFlag),FALSE); - return TRUE; - case FWL_VKEY_Home: - m_pEdit->OnVK_HOME(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - return TRUE; - case FWL_VKEY_End: - m_pEdit->OnVK_END(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - return TRUE; - case FWL_VKEY_Unknown: - if (!IsSHIFTpressed(nFlag)) - Clear(); - else - CutText(); - return TRUE; - default: - break; - } + switch (nChar) { + case FWL_VKEY_Delete: + Delete(); + return TRUE; + case FWL_VKEY_Insert: + if (IsSHIFTpressed(nFlag)) + PasteText(); + return TRUE; + case FWL_VKEY_Up: + m_pEdit->OnVK_UP(IsSHIFTpressed(nFlag), FALSE); + return TRUE; + case FWL_VKEY_Down: + m_pEdit->OnVK_DOWN(IsSHIFTpressed(nFlag), FALSE); + return TRUE; + case FWL_VKEY_Left: + m_pEdit->OnVK_LEFT(IsSHIFTpressed(nFlag), FALSE); + return TRUE; + case FWL_VKEY_Right: + m_pEdit->OnVK_RIGHT(IsSHIFTpressed(nFlag), FALSE); + return TRUE; + case FWL_VKEY_Home: + m_pEdit->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + return TRUE; + case FWL_VKEY_End: + m_pEdit->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + return TRUE; + case FWL_VKEY_Unknown: + if (!IsSHIFTpressed(nFlag)) + Clear(); + else + CutText(); + return TRUE; + default: + break; + } - return bRet; + return bRet; } -FX_BOOL CPWL_EditCtrl::OnChar(FX_WORD nChar, FX_DWORD nFlag) -{ - if (m_bMouseDown) return TRUE; - - CPWL_Wnd::OnChar(nChar,nFlag); +FX_BOOL CPWL_EditCtrl::OnChar(FX_WORD nChar, FX_DWORD nFlag) { + if (m_bMouseDown) + return TRUE; - //FILTER - switch (nChar) - { - case 0x0A: - case 0x1B: - return FALSE; - default: - break; - } + CPWL_Wnd::OnChar(nChar, nFlag); - FX_BOOL bCtrl = IsCTRLpressed(nFlag); - FX_BOOL bAlt = IsALTpressed(nFlag); - FX_BOOL bShift = IsSHIFTpressed(nFlag); - - FX_WORD word = nChar; - - if (bCtrl && !bAlt) - { - switch (nChar) - { - case 'C' - 'A' + 1: - CopyText(); - return TRUE; - case 'V' - 'A' + 1: - PasteText(); - return TRUE; - case 'X' - 'A' + 1: - CutText(); - return TRUE; - case 'A' - 'A' + 1: - SelectAll(); - return TRUE; - case 'Z' - 'A' + 1: - if (bShift) - Redo(); - else - Undo(); - return TRUE; - default: - if (nChar < 32) - return FALSE; - } + // FILTER + switch (nChar) { + case 0x0A: + case 0x1B: + return FALSE; + default: + break; + } + + FX_BOOL bCtrl = IsCTRLpressed(nFlag); + FX_BOOL bAlt = IsALTpressed(nFlag); + FX_BOOL bShift = IsSHIFTpressed(nFlag); + + FX_WORD word = nChar; + + if (bCtrl && !bAlt) { + switch (nChar) { + case 'C' - 'A' + 1: + CopyText(); + return TRUE; + case 'V' - 'A' + 1: + PasteText(); + return TRUE; + case 'X' - 'A' + 1: + CutText(); + return TRUE; + case 'A' - 'A' + 1: + SelectAll(); + return TRUE; + case 'Z' - 'A' + 1: + if (bShift) + Redo(); + else + Undo(); + return TRUE; + default: + if (nChar < 32) + return FALSE; } + } - if (IsReadOnly()) return TRUE; + if (IsReadOnly()) + return TRUE; - if (m_pEdit->IsSelected() && word == FWL_VKEY_Back) - word = FWL_VKEY_Unknown; + if (m_pEdit->IsSelected() && word == FWL_VKEY_Back) + word = FWL_VKEY_Unknown; - Clear(); + Clear(); - switch (word) - { + switch (word) { case FWL_VKEY_Back: - Backspace(); - break; + Backspace(); + break; case FWL_VKEY_Return: - InsertReturn(); - break; + InsertReturn(); + break; case FWL_VKEY_Unknown: - break; + break; default: - if (IsINSERTpressed(nFlag)) - Delete(); - InsertWord(word, GetCharSet()); - break; - } + if (IsINSERTpressed(nFlag)) + Delete(); + InsertWord(word, GetCharSet()); + break; + } - return TRUE; + return TRUE; } -FX_BOOL CPWL_EditCtrl::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonDown(point,nFlag); +FX_BOOL CPWL_EditCtrl::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonDown(point, nFlag); - if (ClientHitTest(point)) - { - if (m_bMouseDown) - InvalidateRect(); + if (ClientHitTest(point)) { + if (m_bMouseDown) + InvalidateRect(); - m_bMouseDown = TRUE; - SetCapture(); + m_bMouseDown = TRUE; + SetCapture(); - m_pEdit->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - } + m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + } - return TRUE; + return TRUE; } -FX_BOOL CPWL_EditCtrl::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonUp(point,nFlag); +FX_BOOL CPWL_EditCtrl::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonUp(point, nFlag); - if (m_bMouseDown) - { - //can receive keybord message - if (ClientHitTest(point) && !IsFocused()) - SetFocus(); + if (m_bMouseDown) { + // can receive keybord message + if (ClientHitTest(point) && !IsFocused()) + SetFocus(); - ReleaseCapture(); - m_bMouseDown = FALSE; - } + ReleaseCapture(); + m_bMouseDown = FALSE; + } - return TRUE; + return TRUE; } -FX_BOOL CPWL_EditCtrl::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnMouseMove(point,nFlag); +FX_BOOL CPWL_EditCtrl::OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnMouseMove(point, nFlag); - if (m_bMouseDown) - m_pEdit->OnMouseMove(point,FALSE,FALSE); + if (m_bMouseDown) + m_pEdit->OnMouseMove(point, FALSE, FALSE); - return TRUE; + return TRUE; } -CPDF_Rect CPWL_EditCtrl::GetContentRect() const -{ - return m_pEdit->GetContentRect(); +CPDF_Rect CPWL_EditCtrl::GetContentRect() const { + return m_pEdit->GetContentRect(); } -void CPWL_EditCtrl::SetEditCaret(FX_BOOL bVisible) -{ - CPDF_Point ptHead(0,0),ptFoot(0,0); +void CPWL_EditCtrl::SetEditCaret(FX_BOOL bVisible) { + CPDF_Point ptHead(0, 0), ptFoot(0, 0); - if (bVisible) - { - GetCaretInfo(ptHead,ptFoot); - } + if (bVisible) { + GetCaretInfo(ptHead, ptFoot); + } - CPVT_WordPlace wpTemp = m_pEdit->GetCaretWordPlace(); - IOnSetCaret(bVisible,ptHead,ptFoot,wpTemp); -} - -void CPWL_EditCtrl::GetCaretInfo(CPDF_Point & ptHead, CPDF_Point & ptFoot) const -{ - if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator()) - { - pIterator->SetAt(m_pEdit->GetCaret()); - CPVT_Word word; - CPVT_Line line; - if (pIterator->GetWord(word)) - { - ptHead.x = word.ptWord.x + word.fWidth; - ptHead.y = word.ptWord.y + word.fAscent; - ptFoot.x = word.ptWord.x + word.fWidth; - ptFoot.y = word.ptWord.y + word.fDescent; - } - else if (pIterator->GetLine(line)) - { - ptHead.x = line.ptLine.x; - ptHead.y = line.ptLine.y + line.fLineAscent; - ptFoot.x = line.ptLine.x; - ptFoot.y = line.ptLine.y + line.fLineDescent; - } + CPVT_WordPlace wpTemp = m_pEdit->GetCaretWordPlace(); + IOnSetCaret(bVisible, ptHead, ptFoot, wpTemp); +} + +void CPWL_EditCtrl::GetCaretInfo(CPDF_Point& ptHead, CPDF_Point& ptFoot) const { + if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) { + pIterator->SetAt(m_pEdit->GetCaret()); + CPVT_Word word; + CPVT_Line line; + if (pIterator->GetWord(word)) { + ptHead.x = word.ptWord.x + word.fWidth; + ptHead.y = word.ptWord.y + word.fAscent; + ptFoot.x = word.ptWord.x + word.fWidth; + ptFoot.y = word.ptWord.y + word.fDescent; + } else if (pIterator->GetLine(line)) { + ptHead.x = line.ptLine.x; + ptHead.y = line.ptLine.y + line.fLineAscent; + ptFoot.x = line.ptLine.x; + ptFoot.y = line.ptLine.y + line.fLineDescent; } + } } -void CPWL_EditCtrl::GetCaretPos(int32_t& x, int32_t& y) const -{ - CPDF_Point ptHead(0,0), ptFoot(0,0); +void CPWL_EditCtrl::GetCaretPos(int32_t& x, int32_t& y) const { + CPDF_Point ptHead(0, 0), ptFoot(0, 0); - GetCaretInfo(ptHead,ptFoot); + GetCaretInfo(ptHead, ptFoot); - PWLtoWnd(ptHead, x, y); + PWLtoWnd(ptHead, x, y); } -void CPWL_EditCtrl::SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot) -{ - if (m_pEditCaret) - { - if (!IsFocused() || m_pEdit->IsSelected()) - bVisible = FALSE; +void CPWL_EditCtrl::SetCaret(FX_BOOL bVisible, + const CPDF_Point& ptHead, + const CPDF_Point& ptFoot) { + if (m_pEditCaret) { + if (!IsFocused() || m_pEdit->IsSelected()) + bVisible = FALSE; - m_pEditCaret->SetCaret(bVisible, ptHead, ptFoot); - } + m_pEditCaret->SetCaret(bVisible, ptHead, ptFoot); + } } -FX_BOOL CPWL_EditCtrl::IsModified() const -{ - return m_pEdit->IsModified(); +FX_BOOL CPWL_EditCtrl::IsModified() const { + return m_pEdit->IsModified(); } -CFX_WideString CPWL_EditCtrl::GetText() const -{ - return m_pEdit->GetText(); +CFX_WideString CPWL_EditCtrl::GetText() const { + return m_pEdit->GetText(); } -void CPWL_EditCtrl::SetSel(int32_t nStartChar,int32_t nEndChar) -{ - m_pEdit->SetSel(nStartChar, nEndChar); +void CPWL_EditCtrl::SetSel(int32_t nStartChar, int32_t nEndChar) { + m_pEdit->SetSel(nStartChar, nEndChar); } -void CPWL_EditCtrl::GetSel(int32_t & nStartChar, int32_t & nEndChar ) const -{ - m_pEdit->GetSel(nStartChar, nEndChar); +void CPWL_EditCtrl::GetSel(int32_t& nStartChar, int32_t& nEndChar) const { + m_pEdit->GetSel(nStartChar, nEndChar); } -void CPWL_EditCtrl::Clear() -{ - if (!IsReadOnly()) - m_pEdit->Clear(); +void CPWL_EditCtrl::Clear() { + if (!IsReadOnly()) + m_pEdit->Clear(); } -void CPWL_EditCtrl::SelectAll() -{ - m_pEdit->SelectAll(); +void CPWL_EditCtrl::SelectAll() { + m_pEdit->SelectAll(); } -void CPWL_EditCtrl::Paint() -{ - if (m_pEdit) - m_pEdit->Paint(); +void CPWL_EditCtrl::Paint() { + if (m_pEdit) + m_pEdit->Paint(); } -void CPWL_EditCtrl::EnableRefresh(FX_BOOL bRefresh) -{ - if (m_pEdit) - m_pEdit->EnableRefresh(bRefresh); +void CPWL_EditCtrl::EnableRefresh(FX_BOOL bRefresh) { + if (m_pEdit) + m_pEdit->EnableRefresh(bRefresh); } -int32_t CPWL_EditCtrl::GetCaret() const -{ - if (m_pEdit) - return m_pEdit->GetCaret(); +int32_t CPWL_EditCtrl::GetCaret() const { + if (m_pEdit) + return m_pEdit->GetCaret(); - return -1; + return -1; } -void CPWL_EditCtrl::SetCaret(int32_t nPos) -{ - if (m_pEdit) - m_pEdit->SetCaret(nPos); +void CPWL_EditCtrl::SetCaret(int32_t nPos) { + if (m_pEdit) + m_pEdit->SetCaret(nPos); } -int32_t CPWL_EditCtrl::GetTotalWords() const -{ - if (m_pEdit) - return m_pEdit->GetTotalWords(); +int32_t CPWL_EditCtrl::GetTotalWords() const { + if (m_pEdit) + return m_pEdit->GetTotalWords(); - return 0; + return 0; } -void CPWL_EditCtrl::SetScrollPos(const CPDF_Point& point) -{ - if (m_pEdit) - m_pEdit->SetScrollPos(point); +void CPWL_EditCtrl::SetScrollPos(const CPDF_Point& point) { + if (m_pEdit) + m_pEdit->SetScrollPos(point); } -CPDF_Point CPWL_EditCtrl::GetScrollPos() const -{ - if (m_pEdit) - return m_pEdit->GetScrollPos(); +CPDF_Point CPWL_EditCtrl::GetScrollPos() const { + if (m_pEdit) + return m_pEdit->GetScrollPos(); - return CPDF_Point(0.0f, 0.0f); + return CPDF_Point(0.0f, 0.0f); } -CPDF_Font * CPWL_EditCtrl::GetCaretFont() const -{ - int32_t nFontIndex = 0; +CPDF_Font* CPWL_EditCtrl::GetCaretFont() const { + int32_t nFontIndex = 0; - if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator()) - { - pIterator->SetAt(m_pEdit->GetCaret()); - CPVT_Word word; - CPVT_Section section; - if (pIterator->GetWord(word)) - { - nFontIndex = word.nFontIndex; - } - else if (HasFlag(PES_RICH)) - { - if (pIterator->GetSection(section)) - { - nFontIndex = section.WordProps.nFontIndex; - } - } + if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) { + pIterator->SetAt(m_pEdit->GetCaret()); + CPVT_Word word; + CPVT_Section section; + if (pIterator->GetWord(word)) { + nFontIndex = word.nFontIndex; + } else if (HasFlag(PES_RICH)) { + if (pIterator->GetSection(section)) { + nFontIndex = section.WordProps.nFontIndex; + } } + } - if (IFX_Edit_FontMap* pFontMap = GetFontMap()) - return pFontMap->GetPDFFont(nFontIndex); - - return NULL; -} - -FX_FLOAT CPWL_EditCtrl::GetCaretFontSize() const -{ - FX_FLOAT fFontSize = GetFontSize(); - - if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator()) - { - pIterator->SetAt(m_pEdit->GetCaret()); - CPVT_Word word; - CPVT_Section section; - if (pIterator->GetWord(word)) - { - fFontSize = word.fFontSize; - } - else if (HasFlag(PES_RICH)) - { - if (pIterator->GetSection(section)) - { - fFontSize = section.WordProps.fFontSize; - } - } - } + if (IFX_Edit_FontMap* pFontMap = GetFontMap()) + return pFontMap->GetPDFFont(nFontIndex); - return fFontSize; + return NULL; } -void CPWL_EditCtrl::SetText(const FX_WCHAR* csText) -{ - m_pEdit->SetText(csText); -} +FX_FLOAT CPWL_EditCtrl::GetCaretFontSize() const { + FX_FLOAT fFontSize = GetFontSize(); -void CPWL_EditCtrl::CopyText() -{ -} + if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) { + pIterator->SetAt(m_pEdit->GetCaret()); + CPVT_Word word; + CPVT_Section section; + if (pIterator->GetWord(word)) { + fFontSize = word.fFontSize; + } else if (HasFlag(PES_RICH)) { + if (pIterator->GetSection(section)) { + fFontSize = section.WordProps.fFontSize; + } + } + } -void CPWL_EditCtrl::PasteText() -{ + return fFontSize; } -void CPWL_EditCtrl::CutText() -{ +void CPWL_EditCtrl::SetText(const FX_WCHAR* csText) { + m_pEdit->SetText(csText); } -void CPWL_EditCtrl::ShowVScrollBar(FX_BOOL bShow) -{ -} +void CPWL_EditCtrl::CopyText() {} + +void CPWL_EditCtrl::PasteText() {} -void CPWL_EditCtrl::InsertText(const FX_WCHAR* csText) -{ - if (!IsReadOnly()) - m_pEdit->InsertText(csText); +void CPWL_EditCtrl::CutText() {} + +void CPWL_EditCtrl::ShowVScrollBar(FX_BOOL bShow) {} + +void CPWL_EditCtrl::InsertText(const FX_WCHAR* csText) { + if (!IsReadOnly()) + m_pEdit->InsertText(csText); } -void CPWL_EditCtrl::InsertWord(FX_WORD word, int32_t nCharset) -{ - if (!IsReadOnly()) - m_pEdit->InsertWord(word, nCharset); +void CPWL_EditCtrl::InsertWord(FX_WORD word, int32_t nCharset) { + if (!IsReadOnly()) + m_pEdit->InsertWord(word, nCharset); } -void CPWL_EditCtrl::InsertReturn() -{ - if (!IsReadOnly()) - m_pEdit->InsertReturn(); +void CPWL_EditCtrl::InsertReturn() { + if (!IsReadOnly()) + m_pEdit->InsertReturn(); } -void CPWL_EditCtrl::Delete() -{ - if (!IsReadOnly()) - m_pEdit->Delete(); +void CPWL_EditCtrl::Delete() { + if (!IsReadOnly()) + m_pEdit->Delete(); } -void CPWL_EditCtrl::Backspace() -{ - if (!IsReadOnly()) - m_pEdit->Backspace(); +void CPWL_EditCtrl::Backspace() { + if (!IsReadOnly()) + m_pEdit->Backspace(); } -FX_BOOL CPWL_EditCtrl::CanUndo() const -{ - return !IsReadOnly() && m_pEdit->CanUndo(); +FX_BOOL CPWL_EditCtrl::CanUndo() const { + return !IsReadOnly() && m_pEdit->CanUndo(); } -FX_BOOL CPWL_EditCtrl::CanRedo() const -{ - return !IsReadOnly() && m_pEdit->CanRedo(); +FX_BOOL CPWL_EditCtrl::CanRedo() const { + return !IsReadOnly() && m_pEdit->CanRedo(); } -void CPWL_EditCtrl::Redo() -{ - if (CanRedo()) - m_pEdit->Redo(); +void CPWL_EditCtrl::Redo() { + if (CanRedo()) + m_pEdit->Redo(); } -void CPWL_EditCtrl::Undo() -{ - if (CanUndo()) - m_pEdit->Undo(); +void CPWL_EditCtrl::Undo() { + if (CanUndo()) + m_pEdit->Undo(); } -void CPWL_EditCtrl::IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, - FX_FLOAT fContentMin, FX_FLOAT fContentMax, - FX_FLOAT fSmallStep, FX_FLOAT fBigStep) -{ - PWL_SCROLL_INFO Info; +void CPWL_EditCtrl::IOnSetScrollInfoY(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep) { + PWL_SCROLL_INFO Info; - Info.fPlateWidth = fPlateMax - fPlateMin; - Info.fContentMin = fContentMin; - Info.fContentMax = fContentMax; - Info.fSmallStep = fSmallStep; - Info.fBigStep = fBigStep; + Info.fPlateWidth = fPlateMax - fPlateMin; + Info.fContentMin = fContentMin; + Info.fContentMax = fContentMax; + Info.fSmallStep = fSmallStep; + Info.fBigStep = fBigStep; - OnNotify(this,PNM_SETSCROLLINFO,SBT_VSCROLL,(intptr_t)&Info); + OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&Info); - if (IsFloatBigger(Info.fPlateWidth,Info.fContentMax-Info.fContentMin) - || IsFloatEqual(Info.fPlateWidth,Info.fContentMax-Info.fContentMin)) - { - ShowVScrollBar(FALSE); - } - else - { - ShowVScrollBar(TRUE); - } + if (IsFloatBigger(Info.fPlateWidth, Info.fContentMax - Info.fContentMin) || + IsFloatEqual(Info.fPlateWidth, Info.fContentMax - Info.fContentMin)) { + ShowVScrollBar(FALSE); + } else { + ShowVScrollBar(TRUE); + } } -void CPWL_EditCtrl::IOnSetScrollPosY(FX_FLOAT fy) -{ - OnNotify(this, PNM_SETSCROLLPOS,SBT_VSCROLL, (intptr_t)&fy); +void CPWL_EditCtrl::IOnSetScrollPosY(FX_FLOAT fy) { + OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&fy); } -void CPWL_EditCtrl::IOnSetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot, const CPVT_WordPlace& place) -{ - PWL_CARET_INFO cInfo; - cInfo.bVisible = bVisible; - cInfo.ptHead = ptHead; - cInfo.ptFoot = ptFoot; +void CPWL_EditCtrl::IOnSetCaret(FX_BOOL bVisible, + const CPDF_Point& ptHead, + const CPDF_Point& ptFoot, + const CPVT_WordPlace& place) { + PWL_CARET_INFO cInfo; + cInfo.bVisible = bVisible; + cInfo.ptHead = ptHead; + cInfo.ptFoot = ptFoot; - OnNotify(this, PNM_SETCARETINFO, (intptr_t)&cInfo, (intptr_t)NULL); + OnNotify(this, PNM_SETCARETINFO, (intptr_t)&cInfo, (intptr_t)NULL); } -void CPWL_EditCtrl::IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps) -{ -} +void CPWL_EditCtrl::IOnCaretChange(const CPVT_SecProps& secProps, + const CPVT_WordProps& wordProps) {} -void CPWL_EditCtrl::IOnContentChange(const CPDF_Rect& rcContent) -{ - if (IsValid()) - { - if (m_pEditNotify) - { - m_pEditNotify->OnContentChange(rcContent); - } +void CPWL_EditCtrl::IOnContentChange(const CPDF_Rect& rcContent) { + if (IsValid()) { + if (m_pEditNotify) { + m_pEditNotify->OnContentChange(rcContent); } + } } -void CPWL_EditCtrl::IOnInvalidateRect(CPDF_Rect * pRect) -{ - InvalidateRect(pRect); +void CPWL_EditCtrl::IOnInvalidateRect(CPDF_Rect* pRect) { + InvalidateRect(pRect); } -int32_t CPWL_EditCtrl::GetCharSet() const -{ - return m_nCharSet < 0 ? DEFAULT_CHARSET : m_nCharSet; +int32_t CPWL_EditCtrl::GetCharSet() const { + return m_nCharSet < 0 ? DEFAULT_CHARSET : m_nCharSet; } -void CPWL_EditCtrl::GetTextRange(const CPDF_Rect& rect, int32_t & nStartChar, int32_t & nEndChar) const -{ - nStartChar = m_pEdit->WordPlaceToWordIndex(m_pEdit->SearchWordPlace(CPDF_Point(rect.left, rect.top))); - nEndChar = m_pEdit->WordPlaceToWordIndex(m_pEdit->SearchWordPlace(CPDF_Point(rect.right, rect.bottom))); +void CPWL_EditCtrl::GetTextRange(const CPDF_Rect& rect, + int32_t& nStartChar, + int32_t& nEndChar) const { + nStartChar = m_pEdit->WordPlaceToWordIndex( + m_pEdit->SearchWordPlace(CPDF_Point(rect.left, rect.top))); + nEndChar = m_pEdit->WordPlaceToWordIndex( + m_pEdit->SearchWordPlace(CPDF_Point(rect.right, rect.bottom))); } -CFX_WideString CPWL_EditCtrl::GetText(int32_t & nStartChar, int32_t & nEndChar) const -{ - CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStartChar); - CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEndChar); - return m_pEdit->GetRangeText(CPVT_WordRange(wpStart, wpEnd)); +CFX_WideString CPWL_EditCtrl::GetText(int32_t& nStartChar, + int32_t& nEndChar) const { + CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStartChar); + CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEndChar); + return m_pEdit->GetRangeText(CPVT_WordRange(wpStart, wpEnd)); } -void CPWL_EditCtrl::SetReadyToInput() -{ - if (m_bMouseDown) - { - ReleaseCapture(); - m_bMouseDown = FALSE; - } +void CPWL_EditCtrl::SetReadyToInput() { + if (m_bMouseDown) { + ReleaseCapture(); + m_bMouseDown = FALSE; + } } diff --git a/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp b/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp index 5fb9c99c3a..65fc9a6bd1 100644 --- a/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp @@ -8,191 +8,158 @@ #include "../../include/pdfwindow/PWL_Wnd.h" #include "../../include/pdfwindow/PWL_FontMap.h" -#define DEFAULT_FONT_NAME "Helvetica" +#define DEFAULT_FONT_NAME "Helvetica" /* ------------------------------ CPWL_FontMap ------------------------------ */ -CPWL_FontMap::CPWL_FontMap(IFX_SystemHandler* pSystemHandler) : - m_pPDFDoc(NULL), - m_pSystemHandler(pSystemHandler) -{ - ASSERT(m_pSystemHandler != NULL); +CPWL_FontMap::CPWL_FontMap(IFX_SystemHandler* pSystemHandler) + : m_pPDFDoc(NULL), m_pSystemHandler(pSystemHandler) { + ASSERT(m_pSystemHandler != NULL); } -CPWL_FontMap::~CPWL_FontMap() -{ - delete m_pPDFDoc; - m_pPDFDoc = NULL; +CPWL_FontMap::~CPWL_FontMap() { + delete m_pPDFDoc; + m_pPDFDoc = NULL; - Empty(); + Empty(); } -void CPWL_FontMap::SetSystemHandler(IFX_SystemHandler* pSystemHandler) -{ - m_pSystemHandler = pSystemHandler; +void CPWL_FontMap::SetSystemHandler(IFX_SystemHandler* pSystemHandler) { + m_pSystemHandler = pSystemHandler; } -CPDF_Document* CPWL_FontMap::GetDocument() -{ - if (!m_pPDFDoc) - { - if (CPDF_ModuleMgr::Get()) - { - m_pPDFDoc = FX_NEW CPDF_Document; - m_pPDFDoc->CreateNewDoc(); - } - } - - return m_pPDFDoc; -} - -CPDF_Font* CPWL_FontMap::GetPDFFont(int32_t nFontIndex) -{ - if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) - { - if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) - { - return pData->pFont; - } +CPDF_Document* CPWL_FontMap::GetDocument() { + if (!m_pPDFDoc) { + if (CPDF_ModuleMgr::Get()) { + m_pPDFDoc = FX_NEW CPDF_Document; + m_pPDFDoc->CreateNewDoc(); } + } - return NULL; + return m_pPDFDoc; } -CFX_ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex) -{ - if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) - { - if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) - { - return pData->sFontName; - } +CPDF_Font* CPWL_FontMap::GetPDFFont(int32_t nFontIndex) { + if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { + if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) { + return pData->pFont; } + } - return ""; + return NULL; } -FX_BOOL CPWL_FontMap::KnowWord(int32_t nFontIndex, FX_WORD word) -{ - if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) - { - if (m_aData.GetAt(nFontIndex)) - { - return CharCodeFromUnicode(nFontIndex, word) >= 0; - } +CFX_ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex) { + if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { + if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) { + return pData->sFontName; } + } - return FALSE; + return ""; } -int32_t CPWL_FontMap::GetWordFontIndex(FX_WORD word, int32_t nCharset, int32_t nFontIndex) -{ - if (nFontIndex > 0) - { - if (KnowWord(nFontIndex, word)) - return nFontIndex; +FX_BOOL CPWL_FontMap::KnowWord(int32_t nFontIndex, FX_WORD word) { + if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { + if (m_aData.GetAt(nFontIndex)) { + return CharCodeFromUnicode(nFontIndex, word) >= 0; } - else - { - if (const CPWL_FontMap_Data* pData = GetFontMapData(0)) - { - if (nCharset == DEFAULT_CHARSET || - pData->nCharset == SYMBOL_CHARSET || - nCharset == pData->nCharset) - { - if (KnowWord(0, word)) - return 0; - } - } - } - - int32_t nNewFontIndex = GetFontIndex(GetNativeFontName(nCharset), nCharset, TRUE); - if (nNewFontIndex >= 0) - { - if (KnowWord(nNewFontIndex, word)) - return nNewFontIndex; + } + + return FALSE; +} + +int32_t CPWL_FontMap::GetWordFontIndex(FX_WORD word, + int32_t nCharset, + int32_t nFontIndex) { + if (nFontIndex > 0) { + if (KnowWord(nFontIndex, word)) + return nFontIndex; + } else { + if (const CPWL_FontMap_Data* pData = GetFontMapData(0)) { + if (nCharset == DEFAULT_CHARSET || pData->nCharset == SYMBOL_CHARSET || + nCharset == pData->nCharset) { + if (KnowWord(0, word)) + return 0; + } } - nNewFontIndex = GetFontIndex("Arial Unicode MS", DEFAULT_CHARSET, FALSE); - if (nNewFontIndex >= 0) - { - if (KnowWord(nNewFontIndex, word)) - return nNewFontIndex; - } - return -1; -} - -int32_t CPWL_FontMap::CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) -{ - if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) - { - if (pData->pFont) - { - if (pData->pFont->IsUnicodeCompatible()) - { - int nCharCode = pData->pFont->CharCodeFromUnicode(word); - pData->pFont->GlyphFromCharCode(nCharCode); - return nCharCode; - } - if (word < 0xFF) - return word; - } + } + + int32_t nNewFontIndex = + GetFontIndex(GetNativeFontName(nCharset), nCharset, TRUE); + if (nNewFontIndex >= 0) { + if (KnowWord(nNewFontIndex, word)) + return nNewFontIndex; + } + nNewFontIndex = GetFontIndex("Arial Unicode MS", DEFAULT_CHARSET, FALSE); + if (nNewFontIndex >= 0) { + if (KnowWord(nNewFontIndex, word)) + return nNewFontIndex; + } + return -1; +} + +int32_t CPWL_FontMap::CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) { + if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) { + if (pData->pFont) { + if (pData->pFont->IsUnicodeCompatible()) { + int nCharCode = pData->pFont->CharCodeFromUnicode(word); + pData->pFont->GlyphFromCharCode(nCharCode); + return nCharCode; + } + if (word < 0xFF) + return word; } - return -1; + } + return -1; } -CFX_ByteString CPWL_FontMap::GetNativeFontName(int32_t nCharset) -{ - //searching native font is slow, so we must save time - for (int32_t i=0,sz=m_aNativeFont.GetSize(); inCharset == nCharset) - return pData->sFontName; - } +CFX_ByteString CPWL_FontMap::GetNativeFontName(int32_t nCharset) { + // searching native font is slow, so we must save time + for (int32_t i = 0, sz = m_aNativeFont.GetSize(); i < sz; i++) { + if (CPWL_FontMap_Native* pData = m_aNativeFont.GetAt(i)) { + if (pData->nCharset == nCharset) + return pData->sFontName; } + } - CFX_ByteString sNew = GetNativeFont(nCharset); + CFX_ByteString sNew = GetNativeFont(nCharset); - if (!sNew.IsEmpty()) - { - CPWL_FontMap_Native* pNewData = new CPWL_FontMap_Native; - pNewData->nCharset = nCharset; - pNewData->sFontName = sNew; + if (!sNew.IsEmpty()) { + CPWL_FontMap_Native* pNewData = new CPWL_FontMap_Native; + pNewData->nCharset = nCharset; + pNewData->sFontName = sNew; - m_aNativeFont.Add(pNewData); - } + m_aNativeFont.Add(pNewData); + } - return sNew; + return sNew; } -void CPWL_FontMap::Empty() -{ - { - for (int32_t i=0, sz=m_aData.GetSize(); inCharset) { + if (sFontName.IsEmpty() || pData->sFontName == sFontName) + return i; + } } + } - return FALSE; + return -1; } -int32_t CPWL_FontMap::FindFont(const CFX_ByteString& sFontName, int32_t nCharset) -{ - for (int32_t i=0,sz=m_aData.GetSize(); inCharset) - { - if (sFontName.IsEmpty() || pData->sFontName == sFontName) - return i; - } - } - } +int32_t CPWL_FontMap::GetFontIndex(const CFX_ByteString& sFontName, + int32_t nCharset, + FX_BOOL bFind) { + int32_t nFontIndex = FindFont(EncodeFontAlias(sFontName, nCharset), nCharset); + if (nFontIndex >= 0) + return nFontIndex; - return -1; -} + CFX_ByteString sAlias; + CPDF_Font* pFont = NULL; + if (bFind) + pFont = FindFontSameCharset(sAlias, nCharset); -int32_t CPWL_FontMap::GetFontIndex(const CFX_ByteString& sFontName, int32_t nCharset, FX_BOOL bFind) -{ - int32_t nFontIndex = FindFont(EncodeFontAlias(sFontName, nCharset), nCharset); - if (nFontIndex >= 0) - return nFontIndex; - - CFX_ByteString sAlias; - CPDF_Font* pFont = NULL; - if (bFind) - pFont = FindFontSameCharset(sAlias, nCharset); - - if (!pFont) - { - CFX_ByteString sTemp = sFontName; - pFont = AddFontToDocument(GetDocument(), sTemp, nCharset); - sAlias = EncodeFontAlias(sTemp, nCharset); - } - AddedFont(pFont, sAlias); - return AddFontData(pFont, sAlias, nCharset); + if (!pFont) { + CFX_ByteString sTemp = sFontName; + pFont = AddFontToDocument(GetDocument(), sTemp, nCharset); + sAlias = EncodeFontAlias(sTemp, nCharset); + } + AddedFont(pFont, sAlias); + return AddFontData(pFont, sAlias, nCharset); } -int32_t CPWL_FontMap::GetPWLFontIndex(FX_WORD word, int32_t nCharset) -{ - int32_t nFind = -1; - - for (int32_t i=0,sz=m_aData.GetSize(); inCharset == nCharset) - { - nFind = i; - break; - } - } +int32_t CPWL_FontMap::GetPWLFontIndex(FX_WORD word, int32_t nCharset) { + int32_t nFind = -1; + + for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++) { + if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) { + if (pData->nCharset == nCharset) { + nFind = i; + break; + } } + } - CPDF_Font* pNewFont = GetPDFFont(nFind); + CPDF_Font* pNewFont = GetPDFFont(nFind); - if (!pNewFont) return -1; + if (!pNewFont) + return -1; - /* - if (CPDF_Font* pFont = GetPDFFont(nFind)) - { - PWLFont.AddWordToFontDict(pFontDict, word); - } - */ + /* + if (CPDF_Font* pFont = GetPDFFont(nFind)) + { + PWLFont.AddWordToFontDict(pFontDict, word); + } + */ - CFX_ByteString sAlias = EncodeFontAlias("Arial_Chrome", nCharset); - AddedFont(pNewFont, sAlias); + CFX_ByteString sAlias = EncodeFontAlias("Arial_Chrome", nCharset); + AddedFont(pNewFont, sAlias); - return AddFontData(pNewFont, sAlias, nCharset); + return AddFontData(pNewFont, sAlias, nCharset); } -CPDF_Font* CPWL_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset) -{ - return NULL; +CPDF_Font* CPWL_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, + int32_t nCharset) { + return NULL; } -int32_t CPWL_FontMap::AddFontData(CPDF_Font* pFont, const CFX_ByteString& sFontAlias, int32_t nCharset) -{ - CPWL_FontMap_Data* pNewData = new CPWL_FontMap_Data; - pNewData->pFont = pFont; - pNewData->sFontName = sFontAlias; - pNewData->nCharset = nCharset; +int32_t CPWL_FontMap::AddFontData(CPDF_Font* pFont, + const CFX_ByteString& sFontAlias, + int32_t nCharset) { + CPWL_FontMap_Data* pNewData = new CPWL_FontMap_Data; + pNewData->pFont = pFont; + pNewData->sFontName = sFontAlias; + pNewData->nCharset = nCharset; - m_aData.Add(pNewData); + m_aData.Add(pNewData); - return m_aData.GetSize() -1; + return m_aData.GetSize() - 1; } -void CPWL_FontMap::AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias) -{ -} +void CPWL_FontMap::AddedFont(CPDF_Font* pFont, + const CFX_ByteString& sFontAlias) {} -CFX_ByteString CPWL_FontMap::GetFontName(int32_t nFontIndex) -{ - if (nFontIndex >=0 && nFontIndex < m_aData.GetSize()) - { - if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) - { - return pData->sFontName; - } +CFX_ByteString CPWL_FontMap::GetFontName(int32_t nFontIndex) { + if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { + if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) { + return pData->sFontName; } + } - return ""; + return ""; } -CFX_ByteString CPWL_FontMap::GetNativeFont(int32_t nCharset) -{ - - if (nCharset == DEFAULT_CHARSET) - nCharset = GetNativeCharset(); +CFX_ByteString CPWL_FontMap::GetNativeFont(int32_t nCharset) { + if (nCharset == DEFAULT_CHARSET) + nCharset = GetNativeCharset(); - CFX_ByteString sFontName = GetDefaultFontByCharset(nCharset); - if (m_pSystemHandler) - { - if (m_pSystemHandler->FindNativeTrueTypeFont(nCharset, sFontName)) - return sFontName; + CFX_ByteString sFontName = GetDefaultFontByCharset(nCharset); + if (m_pSystemHandler) { + if (m_pSystemHandler->FindNativeTrueTypeFont(nCharset, sFontName)) + return sFontName; - sFontName = m_pSystemHandler->GetNativeTrueTypeFont(nCharset); - } - return sFontName; -} - -CPDF_Font* CPWL_FontMap::AddFontToDocument(CPDF_Document* pDoc, CFX_ByteString& sFontName, uint8_t nCharset) -{ - if (IsStandardFont(sFontName)) - return AddStandardFont(pDoc, sFontName); - - return AddSystemFont(pDoc, sFontName, nCharset); + sFontName = m_pSystemHandler->GetNativeTrueTypeFont(nCharset); + } + return sFontName; } -CPDF_Font* CPWL_FontMap::AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sFontName) -{ - if (!pDoc) return NULL; +CPDF_Font* CPWL_FontMap::AddFontToDocument(CPDF_Document* pDoc, + CFX_ByteString& sFontName, + uint8_t nCharset) { + if (IsStandardFont(sFontName)) + return AddStandardFont(pDoc, sFontName); - CPDF_Font* pFont = NULL; - - if (sFontName == "ZapfDingbats") - pFont = pDoc->AddStandardFont(sFontName, NULL); - else - { - CPDF_FontEncoding fe(PDFFONT_ENCODING_WINANSI); - pFont = pDoc->AddStandardFont(sFontName, &fe); - } - - return pFont; + return AddSystemFont(pDoc, sFontName, nCharset); } -CPDF_Font* CPWL_FontMap::AddSystemFont(CPDF_Document* pDoc, CFX_ByteString& sFontName, uint8_t nCharset) -{ - if (!pDoc) return NULL; - - if (sFontName.IsEmpty()) sFontName = GetNativeFont(nCharset); - if (nCharset == DEFAULT_CHARSET) nCharset = GetNativeCharset(); - - if (m_pSystemHandler) - return m_pSystemHandler->AddNativeTrueTypeFontToPDF(pDoc, sFontName, nCharset); - +CPDF_Font* CPWL_FontMap::AddStandardFont(CPDF_Document* pDoc, + CFX_ByteString& sFontName) { + if (!pDoc) return NULL; -} -CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName, int32_t nCharset) -{ - CFX_ByteString sPostfix; - sPostfix.Format("_%02X", nCharset); - return EncodeFontAlias(sFontName) + sPostfix; -} + CPDF_Font* pFont = NULL; -CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName) -{ - CFX_ByteString sRet = sFontName; - sRet.Remove(' '); - return sRet; -} + if (sFontName == "ZapfDingbats") + pFont = pDoc->AddStandardFont(sFontName, NULL); + else { + CPDF_FontEncoding fe(PDFFONT_ENCODING_WINANSI); + pFont = pDoc->AddStandardFont(sFontName, &fe); + } -int32_t CPWL_FontMap::GetFontMapCount() const -{ - return m_aData.GetSize(); + return pFont; } -const CPWL_FontMap_Data* CPWL_FontMap::GetFontMapData(int32_t nIndex) const -{ - if (nIndex >=0 && nIndex < m_aData.GetSize()) - { - return m_aData.GetAt(nIndex); - } - +CPDF_Font* CPWL_FontMap::AddSystemFont(CPDF_Document* pDoc, + CFX_ByteString& sFontName, + uint8_t nCharset) { + if (!pDoc) return NULL; -} -int32_t CPWL_FontMap::GetNativeCharset() -{ - uint8_t nCharset = ANSI_CHARSET; - int32_t iCodePage = FXSYS_GetACP(); - switch (iCodePage) - { - case 932://Japan - nCharset = SHIFTJIS_CHARSET; - break; - case 936://Chinese (PRC, Singapore) - nCharset = GB2312_CHARSET; - break; - case 950://Chinese (Taiwan; Hong Kong SAR, PRC) - nCharset = GB2312_CHARSET; - break; - case 1252://Windows 3.1 Latin 1 (US, Western Europe) - nCharset = ANSI_CHARSET; - break; - case 874://Thai - nCharset = THAI_CHARSET; - break; - case 949://Korean - nCharset = HANGUL_CHARSET; - break; - case 1200://Unicode (BMP of ISO 10646) - nCharset = ANSI_CHARSET; - break; - case 1250://Windows 3.1 Eastern European - nCharset = EASTEUROPE_CHARSET; - break; - case 1251://Windows 3.1 Cyrillic - nCharset = RUSSIAN_CHARSET; - break; - case 1253://Windows 3.1 Greek - nCharset = GREEK_CHARSET; - break; - case 1254://Windows 3.1 Turkish - nCharset = TURKISH_CHARSET; - break; - case 1255://Hebrew - nCharset = HEBREW_CHARSET; - break; - case 1256://Arabic - nCharset = ARABIC_CHARSET; - break; - case 1257://Baltic - nCharset = BALTIC_CHARSET; - break; - case 1258://Vietnamese - nCharset = VIETNAMESE_CHARSET; - break; - case 1361://Korean(Johab) - nCharset = JOHAB_CHARSET; - break; - } - return nCharset; + if (sFontName.IsEmpty()) + sFontName = GetNativeFont(nCharset); + if (nCharset == DEFAULT_CHARSET) + nCharset = GetNativeCharset(); + + if (m_pSystemHandler) + return m_pSystemHandler->AddNativeTrueTypeFontToPDF(pDoc, sFontName, + nCharset); + + return NULL; +} + +CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName, + int32_t nCharset) { + CFX_ByteString sPostfix; + sPostfix.Format("_%02X", nCharset); + return EncodeFontAlias(sFontName) + sPostfix; +} + +CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName) { + CFX_ByteString sRet = sFontName; + sRet.Remove(' '); + return sRet; +} + +int32_t CPWL_FontMap::GetFontMapCount() const { + return m_aData.GetSize(); +} + +const CPWL_FontMap_Data* CPWL_FontMap::GetFontMapData(int32_t nIndex) const { + if (nIndex >= 0 && nIndex < m_aData.GetSize()) { + return m_aData.GetAt(nIndex); + } + + return NULL; +} + +int32_t CPWL_FontMap::GetNativeCharset() { + uint8_t nCharset = ANSI_CHARSET; + int32_t iCodePage = FXSYS_GetACP(); + switch (iCodePage) { + case 932: // Japan + nCharset = SHIFTJIS_CHARSET; + break; + case 936: // Chinese (PRC, Singapore) + nCharset = GB2312_CHARSET; + break; + case 950: // Chinese (Taiwan; Hong Kong SAR, PRC) + nCharset = GB2312_CHARSET; + break; + case 1252: // Windows 3.1 Latin 1 (US, Western Europe) + nCharset = ANSI_CHARSET; + break; + case 874: // Thai + nCharset = THAI_CHARSET; + break; + case 949: // Korean + nCharset = HANGUL_CHARSET; + break; + case 1200: // Unicode (BMP of ISO 10646) + nCharset = ANSI_CHARSET; + break; + case 1250: // Windows 3.1 Eastern European + nCharset = EASTEUROPE_CHARSET; + break; + case 1251: // Windows 3.1 Cyrillic + nCharset = RUSSIAN_CHARSET; + break; + case 1253: // Windows 3.1 Greek + nCharset = GREEK_CHARSET; + break; + case 1254: // Windows 3.1 Turkish + nCharset = TURKISH_CHARSET; + break; + case 1255: // Hebrew + nCharset = HEBREW_CHARSET; + break; + case 1256: // Arabic + nCharset = ARABIC_CHARSET; + break; + case 1257: // Baltic + nCharset = BALTIC_CHARSET; + break; + case 1258: // Vietnamese + nCharset = VIETNAMESE_CHARSET; + break; + case 1361: // Korean(Johab) + nCharset = JOHAB_CHARSET; + break; + } + return nCharset; } const CPWL_FontMap::CharsetFontMap CPWL_FontMap::defaultTTFMap[] = { - { ANSI_CHARSET, "Helvetica" }, - { GB2312_CHARSET, "SimSun" }, - { CHINESEBIG5_CHARSET, "MingLiU" }, - { SHIFTJIS_CHARSET, "MS Gothic" }, - { HANGUL_CHARSET, "Batang" }, - { RUSSIAN_CHARSET, "Arial" }, -#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ - { EASTEUROPE_CHARSET, "Arial" }, + {ANSI_CHARSET, "Helvetica"}, {GB2312_CHARSET, "SimSun"}, + {CHINESEBIG5_CHARSET, "MingLiU"}, {SHIFTJIS_CHARSET, "MS Gothic"}, + {HANGUL_CHARSET, "Batang"}, {RUSSIAN_CHARSET, "Arial"}, +#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \ + _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ + {EASTEUROPE_CHARSET, "Arial"}, #else - { EASTEUROPE_CHARSET, "Tahoma" }, + {EASTEUROPE_CHARSET, "Tahoma"}, #endif - { ARABIC_CHARSET, "Arial" }, - { -1, NULL } -}; - -CFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(int32_t nCharset) -{ - int i = 0; - while (defaultTTFMap[i].charset != -1) { - if (nCharset == defaultTTFMap[i].charset) - return defaultTTFMap[i].fontname; - ++i; - } - return ""; -} + {ARABIC_CHARSET, "Arial"}, {-1, NULL}}; + +CFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(int32_t nCharset) { + int i = 0; + while (defaultTTFMap[i].charset != -1) { + if (nCharset == defaultTTFMap[i].charset) + return defaultTTFMap[i].fontname; + ++i; + } + return ""; +} + +int32_t CPWL_FontMap::CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) { + if (m_pSystemHandler && (-1 != m_pSystemHandler->GetCharSet())) + return m_pSystemHandler->GetCharSet(); + // to avoid CJK Font to show ASCII + if (word < 0x7F) + return ANSI_CHARSET; + // follow the old charset + if (nOldCharset != DEFAULT_CHARSET) + return nOldCharset; -int32_t CPWL_FontMap::CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) -{ - if(m_pSystemHandler && (-1 != m_pSystemHandler->GetCharSet())) - return m_pSystemHandler->GetCharSet(); - //to avoid CJK Font to show ASCII - if (word < 0x7F) return ANSI_CHARSET; - //follow the old charset - if (nOldCharset != DEFAULT_CHARSET) return nOldCharset; - - //find new charset - if ((word >= 0x4E00 && word <= 0x9FA5) || - (word >= 0xE7C7 && word <= 0xE7F3) || - (word >= 0x3000 && word <= 0x303F) || - (word >= 0x2000 && word <= 0x206F)) - { - return GB2312_CHARSET; - } + // find new charset + if ((word >= 0x4E00 && word <= 0x9FA5) || + (word >= 0xE7C7 && word <= 0xE7F3) || + (word >= 0x3000 && word <= 0x303F) || + (word >= 0x2000 && word <= 0x206F)) { + return GB2312_CHARSET; + } - if (((word >= 0x3040) && (word <= 0x309F)) || - ((word >= 0x30A0) && (word <= 0x30FF)) || - ((word >= 0x31F0) && (word <= 0x31FF)) || - ((word >= 0xFF00) && (word <= 0xFFEF)) ) - { - return SHIFTJIS_CHARSET; - } + if (((word >= 0x3040) && (word <= 0x309F)) || + ((word >= 0x30A0) && (word <= 0x30FF)) || + ((word >= 0x31F0) && (word <= 0x31FF)) || + ((word >= 0xFF00) && (word <= 0xFFEF))) { + return SHIFTJIS_CHARSET; + } - if (((word >= 0xAC00) && (word <= 0xD7AF)) || - ((word >= 0x1100) && (word <= 0x11FF)) || - ((word >= 0x3130) && (word <= 0x318F))) - { - return HANGUL_CHARSET; - } + if (((word >= 0xAC00) && (word <= 0xD7AF)) || + ((word >= 0x1100) && (word <= 0x11FF)) || + ((word >= 0x3130) && (word <= 0x318F))) { + return HANGUL_CHARSET; + } - if (word >= 0x0E00 && word <= 0x0E7F) - return THAI_CHARSET; + if (word >= 0x0E00 && word <= 0x0E7F) + return THAI_CHARSET; - if ((word >= 0x0370 && word <= 0x03FF) || - (word >= 0x1F00 && word <= 0x1FFF)) - return GREEK_CHARSET; + if ((word >= 0x0370 && word <= 0x03FF) || (word >= 0x1F00 && word <= 0x1FFF)) + return GREEK_CHARSET; - if ((word >= 0x0600 && word <= 0x06FF) || - (word >= 0xFB50 && word <= 0xFEFC)) - return ARABIC_CHARSET; + if ((word >= 0x0600 && word <= 0x06FF) || (word >= 0xFB50 && word <= 0xFEFC)) + return ARABIC_CHARSET; - if (word >= 0x0590 && word <= 0x05FF) - return HEBREW_CHARSET; + if (word >= 0x0590 && word <= 0x05FF) + return HEBREW_CHARSET; - if (word >= 0x0400 && word <= 0x04FF) - return RUSSIAN_CHARSET; + if (word >= 0x0400 && word <= 0x04FF) + return RUSSIAN_CHARSET; - if (word >= 0x0100 && word <= 0x024F) - return EASTEUROPE_CHARSET; + if (word >= 0x0100 && word <= 0x024F) + return EASTEUROPE_CHARSET; - if (word >= 0x1E00 && word <= 0x1EFF) - return VIETNAMESE_CHARSET; + if (word >= 0x1E00 && word <= 0x1EFF) + return VIETNAMESE_CHARSET; - return ANSI_CHARSET; + return ANSI_CHARSET; } /* ------------------------ CPWL_DocFontMap ------------------------ */ -CPWL_DocFontMap::CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, CPDF_Document* pAttachedDoc) - : CPWL_FontMap(pSystemHandler), - m_pAttachedDoc(pAttachedDoc) -{ -} +CPWL_DocFontMap::CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, + CPDF_Document* pAttachedDoc) + : CPWL_FontMap(pSystemHandler), m_pAttachedDoc(pAttachedDoc) {} -CPWL_DocFontMap::~CPWL_DocFontMap() -{ -} +CPWL_DocFontMap::~CPWL_DocFontMap() {} -CPDF_Document* CPWL_DocFontMap::GetDocument() -{ - return m_pAttachedDoc; +CPDF_Document* CPWL_DocFontMap::GetDocument() { + return m_pAttachedDoc; } diff --git a/fpdfsdk/src/pdfwindow/PWL_Icon.cpp b/fpdfsdk/src/pdfwindow/PWL_Icon.cpp index 71174dfb0a..29e0aa86f5 100644 --- a/fpdfsdk/src/pdfwindow/PWL_Icon.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_Icon.cpp @@ -9,254 +9,222 @@ #include "../../include/pdfwindow/PWL_Icon.h" #include "../../include/pdfwindow/PWL_Utils.h" -/* ------------------------------- CPWL_Image ---------------------------------- */ +/* ------------------------------- CPWL_Image ---------------------------------- + */ -CPWL_Image::CPWL_Image() : m_pPDFStream(NULL) -{ -} +CPWL_Image::CPWL_Image() : m_pPDFStream(NULL) {} -CPWL_Image::~CPWL_Image() -{ -} +CPWL_Image::~CPWL_Image() {} -CFX_ByteString CPWL_Image::GetImageAppStream() -{ - CFX_ByteTextBuf sAppStream; +CFX_ByteString CPWL_Image::GetImageAppStream() { + CFX_ByteTextBuf sAppStream; - CFX_ByteString sAlias = GetImageAlias(); - CPDF_Rect rcPlate = GetClientRect(); - CPDF_Matrix mt; - mt.SetReverse(GetImageMatrix()); + CFX_ByteString sAlias = GetImageAlias(); + CPDF_Rect rcPlate = GetClientRect(); + CPDF_Matrix mt; + mt.SetReverse(GetImageMatrix()); - FX_FLOAT fHScale = 1.0f; - FX_FLOAT fVScale = 1.0f; - GetScale(fHScale,fVScale); + FX_FLOAT fHScale = 1.0f; + FX_FLOAT fVScale = 1.0f; + GetScale(fHScale, fVScale); - FX_FLOAT fx = 0.0f; - FX_FLOAT fy = 0.0f; - GetImageOffset(fx,fy); + FX_FLOAT fx = 0.0f; + FX_FLOAT fy = 0.0f; + GetImageOffset(fx, fy); - if (m_pPDFStream && sAlias.GetLength()>0) - { - sAppStream << "q\n"; - sAppStream << rcPlate.left << " " << rcPlate.bottom << " " - << rcPlate.right - rcPlate.left << " " << rcPlate.top - rcPlate.bottom << " re W n\n"; + if (m_pPDFStream && sAlias.GetLength() > 0) { + sAppStream << "q\n"; + sAppStream << rcPlate.left << " " << rcPlate.bottom << " " + << rcPlate.right - rcPlate.left << " " + << rcPlate.top - rcPlate.bottom << " re W n\n"; - sAppStream << fHScale << " 0 0 " << fVScale << " " << rcPlate.left + fx << " " << rcPlate.bottom + fy << " cm\n"; - sAppStream << mt.GetA() << " " << mt.GetB() << " " << mt.GetC() << " " << mt.GetD() << " " << mt.GetE() << " " << mt.GetF() << " cm\n"; + sAppStream << fHScale << " 0 0 " << fVScale << " " << rcPlate.left + fx + << " " << rcPlate.bottom + fy << " cm\n"; + sAppStream << mt.GetA() << " " << mt.GetB() << " " << mt.GetC() << " " + << mt.GetD() << " " << mt.GetE() << " " << mt.GetF() << " cm\n"; - sAppStream << "0 g 0 G 1 w /" << sAlias << " Do\n" << "Q\n"; - } + sAppStream << "0 g 0 G 1 w /" << sAlias << " Do\n" + << "Q\n"; + } - return sAppStream.GetByteString(); + return sAppStream.GetByteString(); } -void CPWL_Image::SetPDFStream(CPDF_Stream * pStream) -{ - m_pPDFStream = pStream; +void CPWL_Image::SetPDFStream(CPDF_Stream* pStream) { + m_pPDFStream = pStream; } -CPDF_Stream * CPWL_Image::GetPDFStream() -{ - return m_pPDFStream; +CPDF_Stream* CPWL_Image::GetPDFStream() { + return m_pPDFStream; } -void CPWL_Image::GetImageSize(FX_FLOAT & fWidth,FX_FLOAT & fHeight) -{ - fWidth = 0.0f; - fHeight = 0.0f; - - if (m_pPDFStream) - { - if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict()) - { - CPDF_Rect rect = pDict->GetRect("BBox"); - - fWidth = rect.right - rect.left; - fHeight = rect.top - rect.bottom; - } - } -} +void CPWL_Image::GetImageSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) { + fWidth = 0.0f; + fHeight = 0.0f; -CPDF_Matrix CPWL_Image::GetImageMatrix() -{ - if (m_pPDFStream) - { - if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict()) - { - return pDict->GetMatrix("Matrix"); - } - } - - return CPDF_Matrix(); -} + if (m_pPDFStream) { + if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) { + CPDF_Rect rect = pDict->GetRect("BBox"); -CFX_ByteString CPWL_Image::GetImageAlias() -{ - if (m_sImageAlias.IsEmpty()) - { - if (m_pPDFStream) - { - if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict()) - { - return pDict->GetString("Name"); - } - } - } - else - return m_sImageAlias; - - return CFX_ByteString(); + fWidth = rect.right - rect.left; + fHeight = rect.top - rect.bottom; + } + } } -void CPWL_Image::SetImageAlias(const FX_CHAR* sImageAlias) -{ - m_sImageAlias = sImageAlias; -} +CPDF_Matrix CPWL_Image::GetImageMatrix() { + if (m_pPDFStream) { + if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) { + return pDict->GetMatrix("Matrix"); + } + } -void CPWL_Image::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale) -{ - fHScale = 1.0f; - fVScale = 1.0f; + return CPDF_Matrix(); } +CFX_ByteString CPWL_Image::GetImageAlias() { + if (m_sImageAlias.IsEmpty()) { + if (m_pPDFStream) { + if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) { + return pDict->GetString("Name"); + } + } + } else + return m_sImageAlias; -void CPWL_Image::GetImageOffset(FX_FLOAT & x,FX_FLOAT & y) -{ - x = 0.0f; - y = 0.0f; + return CFX_ByteString(); } -/* ------------------------------- CPWL_Icon ---------------------------------- */ +void CPWL_Image::SetImageAlias(const FX_CHAR* sImageAlias) { + m_sImageAlias = sImageAlias; +} -CPWL_Icon::CPWL_Icon() : m_pIconFit(NULL) -{ +void CPWL_Image::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) { + fHScale = 1.0f; + fVScale = 1.0f; } -CPWL_Icon::~CPWL_Icon() -{ +void CPWL_Image::GetImageOffset(FX_FLOAT& x, FX_FLOAT& y) { + x = 0.0f; + y = 0.0f; } -int32_t CPWL_Icon::GetScaleMethod() -{ - if (m_pIconFit) - return m_pIconFit->GetScaleMethod(); +/* ------------------------------- CPWL_Icon ---------------------------------- + */ - return 0; -} +CPWL_Icon::CPWL_Icon() : m_pIconFit(NULL) {} -FX_BOOL CPWL_Icon::IsProportionalScale() -{ - if (m_pIconFit) - return m_pIconFit->IsProportionalScale(); +CPWL_Icon::~CPWL_Icon() {} - return FALSE; -} +int32_t CPWL_Icon::GetScaleMethod() { + if (m_pIconFit) + return m_pIconFit->GetScaleMethod(); -void CPWL_Icon::GetIconPosition(FX_FLOAT & fLeft, FX_FLOAT & fBottom) -{ - if (m_pIconFit) - { - //m_pIconFit->GetIconPosition(fLeft,fBottom); - fLeft = 0.0f; - fBottom = 0.0f; - CPDF_Array* pA = m_pIconFit->m_pDict ? m_pIconFit->m_pDict->GetArray("A") : NULL; - if (pA != NULL) - { - FX_DWORD dwCount = pA->GetCount(); - if (dwCount > 0) fLeft = pA->GetNumber(0); - if (dwCount > 1) fBottom = pA->GetNumber(1); - } - } - else - { - fLeft = 0.0f; - fBottom = 0.0f; - } + return 0; } -FX_BOOL CPWL_Icon::GetFittingBounds() -{ - if (m_pIconFit) - return m_pIconFit->GetFittingBounds(); +FX_BOOL CPWL_Icon::IsProportionalScale() { + if (m_pIconFit) + return m_pIconFit->IsProportionalScale(); - return FALSE; + return FALSE; } -void CPWL_Icon::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale) -{ - fHScale = 1.0f; - fVScale = 1.0f; - - if (m_pPDFStream) - { - FX_FLOAT fImageWidth,fImageHeight; - FX_FLOAT fPlateWidth,fPlateHeight; - - CPDF_Rect rcPlate = GetClientRect(); - fPlateWidth = rcPlate.right - rcPlate.left; - fPlateHeight = rcPlate.top - rcPlate.bottom; - - GetImageSize(fImageWidth,fImageHeight); - - int32_t nScaleMethod = GetScaleMethod(); - - switch (nScaleMethod) - { - default: - case 0: - fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f); - fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f); - break; - case 1: - if (fPlateWidth < fImageWidth) - fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f); - if (fPlateHeight < fImageHeight) - fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f); - break; - case 2: - if (fPlateWidth > fImageWidth) - fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f); - if (fPlateHeight > fImageHeight) - fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f); - break; - case 3: - break; - } - - FX_FLOAT fMinScale; - if (IsProportionalScale()) - { - fMinScale = PWL_MIN(fHScale,fVScale); - fHScale = fMinScale; - fVScale = fMinScale; - } - } +void CPWL_Icon::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) { + if (m_pIconFit) { + // m_pIconFit->GetIconPosition(fLeft,fBottom); + fLeft = 0.0f; + fBottom = 0.0f; + CPDF_Array* pA = + m_pIconFit->m_pDict ? m_pIconFit->m_pDict->GetArray("A") : NULL; + if (pA != NULL) { + FX_DWORD dwCount = pA->GetCount(); + if (dwCount > 0) + fLeft = pA->GetNumber(0); + if (dwCount > 1) + fBottom = pA->GetNumber(1); + } + } else { + fLeft = 0.0f; + fBottom = 0.0f; + } } -void CPWL_Icon::GetImageOffset(FX_FLOAT & x,FX_FLOAT & y) -{ - FX_FLOAT fLeft,fBottom; +FX_BOOL CPWL_Icon::GetFittingBounds() { + if (m_pIconFit) + return m_pIconFit->GetFittingBounds(); - GetIconPosition(fLeft, fBottom); - x = 0.0f; - y = 0.0f; + return FALSE; +} + +void CPWL_Icon::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) { + fHScale = 1.0f; + fVScale = 1.0f; - FX_FLOAT fImageWidth,fImageHeight; - GetImageSize(fImageWidth,fImageHeight); + if (m_pPDFStream) { + FX_FLOAT fImageWidth, fImageHeight; + FX_FLOAT fPlateWidth, fPlateHeight; - FX_FLOAT fHScale,fVScale; - GetScale(fHScale,fVScale); + CPDF_Rect rcPlate = GetClientRect(); + fPlateWidth = rcPlate.right - rcPlate.left; + fPlateHeight = rcPlate.top - rcPlate.bottom; - FX_FLOAT fImageFactWidth = fImageWidth * fHScale; - FX_FLOAT fImageFactHeight = fImageHeight * fVScale; + GetImageSize(fImageWidth, fImageHeight); - FX_FLOAT fPlateWidth,fPlateHeight; - CPDF_Rect rcPlate = GetClientRect(); - fPlateWidth = rcPlate.right - rcPlate.left; - fPlateHeight = rcPlate.top - rcPlate.bottom; + int32_t nScaleMethod = GetScaleMethod(); - x = (fPlateWidth - fImageFactWidth) * fLeft; - y = (fPlateHeight - fImageFactHeight) * fBottom; + switch (nScaleMethod) { + default: + case 0: + fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f); + fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f); + break; + case 1: + if (fPlateWidth < fImageWidth) + fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f); + if (fPlateHeight < fImageHeight) + fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f); + break; + case 2: + if (fPlateWidth > fImageWidth) + fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f); + if (fPlateHeight > fImageHeight) + fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f); + break; + case 3: + break; + } + + FX_FLOAT fMinScale; + if (IsProportionalScale()) { + fMinScale = PWL_MIN(fHScale, fVScale); + fHScale = fMinScale; + fVScale = fMinScale; + } + } } +void CPWL_Icon::GetImageOffset(FX_FLOAT& x, FX_FLOAT& y) { + FX_FLOAT fLeft, fBottom; + + GetIconPosition(fLeft, fBottom); + x = 0.0f; + y = 0.0f; + + FX_FLOAT fImageWidth, fImageHeight; + GetImageSize(fImageWidth, fImageHeight); + + FX_FLOAT fHScale, fVScale; + GetScale(fHScale, fVScale); + + FX_FLOAT fImageFactWidth = fImageWidth * fHScale; + FX_FLOAT fImageFactHeight = fImageHeight * fVScale; + + FX_FLOAT fPlateWidth, fPlateHeight; + CPDF_Rect rcPlate = GetClientRect(); + fPlateWidth = rcPlate.right - rcPlate.left; + fPlateHeight = rcPlate.top - rcPlate.bottom; + + x = (fPlateWidth - fImageFactWidth) * fLeft; + y = (fPlateHeight - fImageFactHeight) * fBottom; +} diff --git a/fpdfsdk/src/pdfwindow/PWL_IconList.cpp b/fpdfsdk/src/pdfwindow/PWL_IconList.cpp index 157eba633d..24d2dad5fa 100644 --- a/fpdfsdk/src/pdfwindow/PWL_IconList.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_IconList.cpp @@ -12,581 +12,494 @@ #include "../../include/pdfwindow/PWL_ScrollBar.h" #include "../../include/pdfwindow/PWL_Label.h" -#define PWL_IconList_ITEM_ICON_LEFTMARGIN 10.0f -#define PWL_IconList_ITEM_WIDTH 20.0f -#define PWL_IconList_ITEM_HEIGHT 20.0f -#define PWL_IconList_ITEM_SPACE 4.0f +#define PWL_IconList_ITEM_ICON_LEFTMARGIN 10.0f +#define PWL_IconList_ITEM_WIDTH 20.0f +#define PWL_IconList_ITEM_HEIGHT 20.0f +#define PWL_IconList_ITEM_SPACE 4.0f /* ------------------ CPWL_IconList_Item ------------------- */ -CPWL_IconList_Item::CPWL_IconList_Item() : - m_nIconIndex(-1), - m_pData(NULL), - m_bSelected(FALSE), - m_pText(NULL) -{ -} +CPWL_IconList_Item::CPWL_IconList_Item() + : m_nIconIndex(-1), m_pData(NULL), m_bSelected(FALSE), m_pText(NULL) {} + +CPWL_IconList_Item::~CPWL_IconList_Item() {} -CPWL_IconList_Item::~CPWL_IconList_Item() -{ +CFX_ByteString CPWL_IconList_Item::GetClassName() const { + return "CPWL_IconList_Item"; } -CFX_ByteString CPWL_IconList_Item::GetClassName() const -{ - return "CPWL_IconList_Item"; +FX_FLOAT CPWL_IconList_Item::GetItemHeight(FX_FLOAT fLimitWidth) { + return PWL_IconList_ITEM_HEIGHT; } -FX_FLOAT CPWL_IconList_Item::GetItemHeight(FX_FLOAT fLimitWidth) -{ - return PWL_IconList_ITEM_HEIGHT; +void CPWL_IconList_Item::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPDF_Rect rcClient = GetClientRect(); + + if (m_bSelected) { + if (IsEnabled()) { + CPWL_Utils::DrawFillRect( + pDevice, pUser2Device, rcClient, + CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_SELBACKCOLOR, + GetTransparency())); + } else { + CPWL_Utils::DrawFillRect( + pDevice, pUser2Device, rcClient, + CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_LIGHTGRAYCOLOR, + GetTransparency())); + } + } + + CPDF_Rect rcIcon = rcClient; + rcIcon.left += PWL_IconList_ITEM_ICON_LEFTMARGIN; + rcIcon.right = rcIcon.left + PWL_IconList_ITEM_WIDTH; + + CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nIconIndex, rcIcon, + m_crIcon, m_pText->GetTextColor(), + GetTransparency()); } -void CPWL_IconList_Item::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPDF_Rect rcClient = GetClientRect(); +void CPWL_IconList_Item::SetSelect(FX_BOOL bSelected) { + m_bSelected = bSelected; + + if (bSelected) + m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR); + else + m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR); +} - if (m_bSelected) - { - if (IsEnabled()) - { - CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient, - CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_SELBACKCOLOR, GetTransparency())); - } - else - { - CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient, - CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_LIGHTGRAYCOLOR, GetTransparency())); - } - } +FX_BOOL CPWL_IconList_Item::IsSelected() const { + return m_bSelected; +} - CPDF_Rect rcIcon = rcClient; - rcIcon.left += PWL_IconList_ITEM_ICON_LEFTMARGIN; - rcIcon.right = rcIcon.left + PWL_IconList_ITEM_WIDTH; +void CPWL_IconList_Item::CreateChildWnd(const PWL_CREATEPARAM& cp) { + m_pText = new CPWL_Label; - CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nIconIndex, rcIcon, - m_crIcon, m_pText->GetTextColor(), GetTransparency()); + PWL_CREATEPARAM lcp = cp; + lcp.pParentWnd = this; + lcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PES_LEFT | PES_CENTER; + lcp.sTextColor = PWL_DEFAULT_BLACKCOLOR; + lcp.fFontSize = 12; + m_pText->Create(lcp); } -void CPWL_IconList_Item::SetSelect(FX_BOOL bSelected) -{ - m_bSelected = bSelected; +void CPWL_IconList_Item::SetData(void* pData) { + m_pData = pData; +} - if (bSelected) - m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR); - else - m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR); +void CPWL_IconList_Item::SetIcon(int32_t nIconIndex) { + m_nIconIndex = nIconIndex; +} +void CPWL_IconList_Item::SetText(const CFX_WideString& str) { + m_pText->SetText(str.c_str()); } -FX_BOOL CPWL_IconList_Item::IsSelected() const -{ - return m_bSelected; +CFX_WideString CPWL_IconList_Item::GetText() const { + return m_pText->GetText(); } -void CPWL_IconList_Item::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - m_pText = new CPWL_Label; +void CPWL_IconList_Item::RePosChildWnd() { + CPDF_Rect rcClient = GetClientRect(); - PWL_CREATEPARAM lcp = cp; - lcp.pParentWnd = this; - lcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PES_LEFT | PES_CENTER; - lcp.sTextColor = PWL_DEFAULT_BLACKCOLOR; - lcp.fFontSize = 12; - m_pText->Create(lcp); + rcClient.left += + (PWL_IconList_ITEM_ICON_LEFTMARGIN + PWL_IconList_ITEM_WIDTH + + PWL_IconList_ITEM_ICON_LEFTMARGIN); + + m_pText->Move(rcClient, TRUE, FALSE); } -void CPWL_IconList_Item::SetData(void* pData) -{ - m_pData = pData; +void CPWL_IconList_Item::SetIconFillColor(const CPWL_Color& color) { + m_crIcon = color; } -void CPWL_IconList_Item::SetIcon(int32_t nIconIndex) -{ - m_nIconIndex = nIconIndex; +void CPWL_IconList_Item::OnEnabled() { + if (m_bSelected) + m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR); + else + m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR); + + InvalidateRect(); } -void CPWL_IconList_Item::SetText(const CFX_WideString& str) -{ - m_pText->SetText(str.c_str()); +void CPWL_IconList_Item::OnDisabled() { + m_pText->SetTextColor(PWL_DEFAULT_HEAVYGRAYCOLOR); + + InvalidateRect(); } -CFX_WideString CPWL_IconList_Item::GetText() const -{ - return m_pText->GetText(); +/* ----------------- CPWL_IconList_Content ----------------- */ + +CPWL_IconList_Content::CPWL_IconList_Content(int32_t nListCount) + : m_nSelectIndex(-1), + m_pNotify(NULL), + m_bEnableNotify(TRUE), + m_bMouseDown(FALSE), + m_nListCount(nListCount) {} + +CPWL_IconList_Content::~CPWL_IconList_Content() {} + +void CPWL_IconList_Content::CreateChildWnd(const PWL_CREATEPARAM& cp) { + for (int32_t i = 0; i < m_nListCount; i++) { + CPWL_IconList_Item* pNewItem = new CPWL_IconList_Item(); + + PWL_CREATEPARAM icp = cp; + icp.pParentWnd = this; + icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_NOREFRESHCLIP; + pNewItem->Create(icp); + } + + SetItemSpace(PWL_IconList_ITEM_SPACE); + ResetContent(0); + + if (CPWL_Wnd* pParent = GetParentWindow()) { + CPDF_Rect rcScroll = GetScrollArea(); + GetScrollPos(); + + PWL_SCROLL_INFO sInfo; + sInfo.fContentMin = rcScroll.bottom; + sInfo.fContentMax = rcScroll.top; + sInfo.fPlateWidth = GetClientRect().Height(); + sInfo.fSmallStep = 13.0f; + sInfo.fBigStep = sInfo.fPlateWidth; + + pParent->OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&sInfo); + } } -void CPWL_IconList_Item::RePosChildWnd() -{ - CPDF_Rect rcClient = GetClientRect(); +FX_BOOL CPWL_IconList_Content::OnLButtonDown(const CPDF_Point& point, + FX_DWORD nFlag) { + SetFocus(); + + SetCapture(); + m_bMouseDown = TRUE; + + int32_t nItemIndex = FindItemIndex(point); + SetSelect(nItemIndex); + ScrollToItem(nItemIndex); - rcClient.left += (PWL_IconList_ITEM_ICON_LEFTMARGIN + PWL_IconList_ITEM_WIDTH + PWL_IconList_ITEM_ICON_LEFTMARGIN); + return TRUE; +} + +FX_BOOL CPWL_IconList_Content::OnLButtonUp(const CPDF_Point& point, + FX_DWORD nFlag) { + m_bMouseDown = FALSE; + ReleaseCapture(); - m_pText->Move(rcClient, TRUE, FALSE); + return TRUE; } -void CPWL_IconList_Item::SetIconFillColor(const CPWL_Color& color) -{ - m_crIcon = color; +FX_BOOL CPWL_IconList_Content::OnMouseMove(const CPDF_Point& point, + FX_DWORD nFlag) { + if (m_bMouseDown) { + int32_t nItemIndex = FindItemIndex(point); + SetSelect(nItemIndex); + ScrollToItem(nItemIndex); + } + + return TRUE; } -void CPWL_IconList_Item::OnEnabled() -{ - if (m_bSelected) - m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR); - else - m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR); +FX_BOOL CPWL_IconList_Content::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) { + switch (nChar) { + case FWL_VKEY_Up: + if (m_nSelectIndex > 0) { + int32_t nItemIndex = m_nSelectIndex - 1; + SetSelect(nItemIndex); + ScrollToItem(nItemIndex); + } + return TRUE; + case FWL_VKEY_Down: + if (m_nSelectIndex < m_nListCount - 1) { + int32_t nItemIndex = m_nSelectIndex + 1; + SetSelect(nItemIndex); + ScrollToItem(nItemIndex); + } + return TRUE; + } - InvalidateRect(); + return FALSE; } -void CPWL_IconList_Item::OnDisabled() -{ - m_pText->SetTextColor(PWL_DEFAULT_HEAVYGRAYCOLOR); +int32_t CPWL_IconList_Content::FindItemIndex(const CPDF_Point& point) { + int32_t nIndex = 0; + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + CPDF_Rect rcWnd = pChild->ChildToParent(pChild->GetWindowRect()); + + if (point.y < rcWnd.top) { + nIndex = i; + } + } + } - InvalidateRect(); + return nIndex; } -/* ----------------- CPWL_IconList_Content ----------------- */ +void CPWL_IconList_Content::ScrollToItem(int32_t nItemIndex) { + CPDF_Rect rcClient = GetClientRect(); + + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) { + CPDF_Rect rcOrigin = pItem->GetWindowRect(); + CPDF_Rect rcWnd = pItem->ChildToParent(rcOrigin); + + if (!(rcWnd.bottom > rcClient.bottom && rcWnd.top < rcClient.top)) { + CPDF_Point ptScroll = GetScrollPos(); + + if (rcWnd.top > rcClient.top) { + ptScroll.y = rcOrigin.top; + } else if (rcWnd.bottom < rcClient.bottom) { + ptScroll.y = rcOrigin.bottom + rcClient.Height(); + } -CPWL_IconList_Content::CPWL_IconList_Content(int32_t nListCount) : - m_nSelectIndex(-1), - m_pNotify(NULL), - m_bEnableNotify(TRUE), - m_bMouseDown(FALSE), - m_nListCount(nListCount) -{ -} - -CPWL_IconList_Content::~CPWL_IconList_Content() -{ -} - -void CPWL_IconList_Content::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - for (int32_t i=0; iCreate(icp); - } - - SetItemSpace(PWL_IconList_ITEM_SPACE); - ResetContent(0); - - if (CPWL_Wnd * pParent = GetParentWindow()) - { - CPDF_Rect rcScroll = GetScrollArea(); - GetScrollPos(); - - PWL_SCROLL_INFO sInfo; - sInfo.fContentMin = rcScroll.bottom; - sInfo.fContentMax = rcScroll.top; - sInfo.fPlateWidth = GetClientRect().Height(); - sInfo.fSmallStep = 13.0f; - sInfo.fBigStep = sInfo.fPlateWidth; - - pParent->OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&sInfo); - } -} - -FX_BOOL CPWL_IconList_Content::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) -{ - SetFocus(); - - SetCapture(); - m_bMouseDown = TRUE; - - int32_t nItemIndex = FindItemIndex(point); - SetSelect(nItemIndex); - ScrollToItem(nItemIndex); - - return TRUE; -} - -FX_BOOL CPWL_IconList_Content::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - m_bMouseDown = FALSE; - ReleaseCapture(); - - return TRUE; -} - -FX_BOOL CPWL_IconList_Content::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag) -{ - if (m_bMouseDown) - { - int32_t nItemIndex = FindItemIndex(point); - SetSelect(nItemIndex); - ScrollToItem(nItemIndex); - } - - return TRUE; -} - -FX_BOOL CPWL_IconList_Content::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) -{ - switch (nChar) - { - case FWL_VKEY_Up: - if (m_nSelectIndex > 0) - { - int32_t nItemIndex = m_nSelectIndex - 1; - SetSelect(nItemIndex); - ScrollToItem(nItemIndex); - } - return TRUE; - case FWL_VKEY_Down: - if (m_nSelectIndex < m_nListCount-1) - { - int32_t nItemIndex = m_nSelectIndex + 1; - SetSelect(nItemIndex); - ScrollToItem(nItemIndex); - } - return TRUE; - } - - return FALSE; -} - -int32_t CPWL_IconList_Content::FindItemIndex(const CPDF_Point& point) -{ - int32_t nIndex = 0; - for (int32_t i=0,sz=m_aChildren.GetSize(); iChildToParent(pChild->GetWindowRect()); - - if (point.y < rcWnd.top) - { - nIndex = i; - } - } - } - - return nIndex; -} - -void CPWL_IconList_Content::ScrollToItem(int32_t nItemIndex) -{ - CPDF_Rect rcClient = GetClientRect(); - - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) - { - CPDF_Rect rcOrigin = pItem->GetWindowRect(); - CPDF_Rect rcWnd = pItem->ChildToParent(rcOrigin); - - if (!(rcWnd.bottom > rcClient.bottom && rcWnd.top < rcClient.top)) - { - CPDF_Point ptScroll = GetScrollPos(); - - if (rcWnd.top > rcClient.top) - { - ptScroll.y = rcOrigin.top; - } - else if (rcWnd.bottom < rcClient.bottom) - { - ptScroll.y = rcOrigin.bottom + rcClient.Height(); - } + SetScrollPos(ptScroll); + ResetFace(); + InvalidateRect(); + if (CPWL_Wnd* pParent = GetParentWindow()) { + pParent->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, + (intptr_t)&ptScroll.y); + } + } + } +} + +void CPWL_IconList_Content::SetSelect(int32_t nIndex) { + if (m_nSelectIndex != nIndex) { + SelectItem(m_nSelectIndex, FALSE); + SelectItem(nIndex, TRUE); + m_nSelectIndex = nIndex; - SetScrollPos(ptScroll); - ResetFace(); - InvalidateRect(); - if (CPWL_Wnd* pParent = GetParentWindow()) - { - pParent->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptScroll.y); - } - } - } -} - -void CPWL_IconList_Content::SetSelect(int32_t nIndex) -{ - if (m_nSelectIndex != nIndex) - { - SelectItem(m_nSelectIndex, FALSE); - SelectItem(nIndex, TRUE); - m_nSelectIndex = nIndex; - - if (IPWL_IconList_Notify* pNotify = GetNotify()) - pNotify->OnNoteListSelChanged(nIndex); - } -} - -int32_t CPWL_IconList_Content::GetSelect() const -{ - return m_nSelectIndex; -} - -IPWL_IconList_Notify* CPWL_IconList_Content::GetNotify() const -{ - if (m_bEnableNotify) - return m_pNotify; - return NULL; -} - -void CPWL_IconList_Content::SetNotify(IPWL_IconList_Notify* pNotify) -{ - m_pNotify = pNotify; -} - -void CPWL_IconList_Content::EnableNotify(FX_BOOL bNotify) -{ - m_bEnableNotify = bNotify; -} - -void CPWL_IconList_Content::SelectItem(int32_t nItemIndex, FX_BOOL bSelect) -{ - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) - { - pItem->SetSelect(bSelect); - pItem->InvalidateRect(); - } + if (IPWL_IconList_Notify* pNotify = GetNotify()) + pNotify->OnNoteListSelChanged(nIndex); + } } -CPWL_IconList_Item* CPWL_IconList_Content::GetListItem(int32_t nItemIndex) const -{ - if (nItemIndex >= 0 && nItemIndexGetClassName() == "CPWL_IconList_Item") - { - return (CPWL_IconList_Item*)pChild; - } - } - } +int32_t CPWL_IconList_Content::GetSelect() const { + return m_nSelectIndex; +} - return NULL; +IPWL_IconList_Notify* CPWL_IconList_Content::GetNotify() const { + if (m_bEnableNotify) + return m_pNotify; + return NULL; } -void CPWL_IconList_Content::SetListData(int32_t nItemIndex, void* pData) -{ - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) - pItem->SetData(pData); +void CPWL_IconList_Content::SetNotify(IPWL_IconList_Notify* pNotify) { + m_pNotify = pNotify; } -void CPWL_IconList_Content::SetListIcon(int32_t nItemIndex, int32_t nIconIndex) -{ - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) - pItem->SetIcon(nIconIndex); +void CPWL_IconList_Content::EnableNotify(FX_BOOL bNotify) { + m_bEnableNotify = bNotify; } -void CPWL_IconList_Content::SetListString(int32_t nItemIndex, const CFX_WideString& str) -{ - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) - pItem->SetText(str); +void CPWL_IconList_Content::SelectItem(int32_t nItemIndex, FX_BOOL bSelect) { + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) { + pItem->SetSelect(bSelect); + pItem->InvalidateRect(); + } } -CFX_WideString CPWL_IconList_Content::GetListString(int32_t nItemIndex) const -{ - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) - return pItem->GetText(); +CPWL_IconList_Item* CPWL_IconList_Content::GetListItem( + int32_t nItemIndex) const { + if (nItemIndex >= 0 && nItemIndex < m_aChildren.GetSize()) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(nItemIndex)) { + if (pChild->GetClassName() == "CPWL_IconList_Item") { + return (CPWL_IconList_Item*)pChild; + } + } + } + + return NULL; +} - return L""; +void CPWL_IconList_Content::SetListData(int32_t nItemIndex, void* pData) { + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) + pItem->SetData(pData); } -void CPWL_IconList_Content::SetIconFillColor(const CPWL_Color& color) -{ - for (int32_t i=0,sz=m_aChildren.GetSize(); iGetClassName() == "CPWL_IconList_Item") - { - CPWL_IconList_Item* pItem = (CPWL_IconList_Item*)pChild; - pItem->SetIconFillColor(color); - pItem->InvalidateRect(); - } - } - } +void CPWL_IconList_Content::SetListIcon(int32_t nItemIndex, + int32_t nIconIndex) { + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) + pItem->SetIcon(nIconIndex); +} +void CPWL_IconList_Content::SetListString(int32_t nItemIndex, + const CFX_WideString& str) { + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) + pItem->SetText(str); } -/* -------------------- CPWL_IconList --------------------- */ +CFX_WideString CPWL_IconList_Content::GetListString(int32_t nItemIndex) const { + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) + return pItem->GetText(); + + return L""; +} -CPWL_IconList::CPWL_IconList(int32_t nListCount) : - m_pListContent(NULL), - m_nListCount(nListCount) -{ -} - -CPWL_IconList::~CPWL_IconList() -{ -} - -void CPWL_IconList::RePosChildWnd() -{ - CPWL_Wnd::RePosChildWnd(); - - if (m_pListContent) - m_pListContent->Move(GetClientRect(), TRUE, FALSE); -} - -void CPWL_IconList::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - m_pListContent = new CPWL_IconList_Content(m_nListCount); - - PWL_CREATEPARAM ccp = cp; - ccp.pParentWnd = this; - ccp.dwFlags = PWS_CHILD | PWS_VISIBLE; - m_pListContent->Create(ccp); -} - -void CPWL_IconList::OnCreated() -{ - if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) - { - pScrollBar->RemoveFlag(PWS_AUTOTRANSPARENT); - pScrollBar->SetTransparency(255); - pScrollBar->SetNotifyForever(TRUE); - } +void CPWL_IconList_Content::SetIconFillColor(const CPWL_Color& color) { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + if (pChild->GetClassName() == "CPWL_IconList_Item") { + CPWL_IconList_Item* pItem = (CPWL_IconList_Item*)pChild; + pItem->SetIconFillColor(color); + pItem->InvalidateRect(); + } + } + } } -void CPWL_IconList::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) -{ - CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); +/* -------------------- CPWL_IconList --------------------- */ + +CPWL_IconList::CPWL_IconList(int32_t nListCount) + : m_pListContent(NULL), m_nListCount(nListCount) {} + +CPWL_IconList::~CPWL_IconList() {} - if (wParam == SBT_VSCROLL) - { - switch (msg) - { - case PNM_SETSCROLLINFO: - if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) - { - if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) - { - if (pInfo->fContentMax - pInfo->fContentMin > pInfo->fPlateWidth) - { - if (!pScrollBar->IsVisible()) - { - pScrollBar->SetVisible(TRUE); - RePosChildWnd(); - } - else - { - } - } - else - { - if (pScrollBar->IsVisible()) - { - pScrollBar->SetVisible(FALSE); - RePosChildWnd(); - } +void CPWL_IconList::RePosChildWnd() { + CPWL_Wnd::RePosChildWnd(); - if (m_pListContent) - m_pListContent->SetScrollPos(CPDF_Point(0.0f,0.0f)); - } + if (m_pListContent) + m_pListContent->Move(GetClientRect(), TRUE, FALSE); +} + +void CPWL_IconList::CreateChildWnd(const PWL_CREATEPARAM& cp) { + m_pListContent = new CPWL_IconList_Content(m_nListCount); - pScrollBar->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam); - } - } - return; - case PNM_SCROLLWINDOW: - if (m_pListContent) - { - m_pListContent->SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam)); - m_pListContent->ResetFace(); - m_pListContent->InvalidateRect(NULL); - } - return; - case PNM_SETSCROLLPOS: - if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) - pScrollBar->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam); - return; - } - } + PWL_CREATEPARAM ccp = cp; + ccp.pParentWnd = this; + ccp.dwFlags = PWS_CHILD | PWS_VISIBLE; + m_pListContent->Create(ccp); } -void CPWL_IconList::SetSelect(int32_t nIndex) -{ - m_pListContent->SetSelect(nIndex); +void CPWL_IconList::OnCreated() { + if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) { + pScrollBar->RemoveFlag(PWS_AUTOTRANSPARENT); + pScrollBar->SetTransparency(255); + pScrollBar->SetNotifyForever(TRUE); + } } -void CPWL_IconList::SetTopItem(int32_t nIndex) -{ - m_pListContent->ScrollToItem(nIndex); +void CPWL_IconList::OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam, + intptr_t lParam) { + CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); + + if (wParam == SBT_VSCROLL) { + switch (msg) { + case PNM_SETSCROLLINFO: + if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) { + if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) { + if (pInfo->fContentMax - pInfo->fContentMin > pInfo->fPlateWidth) { + if (!pScrollBar->IsVisible()) { + pScrollBar->SetVisible(TRUE); + RePosChildWnd(); + } else { + } + } else { + if (pScrollBar->IsVisible()) { + pScrollBar->SetVisible(FALSE); + RePosChildWnd(); + } + + if (m_pListContent) + m_pListContent->SetScrollPos(CPDF_Point(0.0f, 0.0f)); + } + + pScrollBar->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam); + } + } + return; + case PNM_SCROLLWINDOW: + if (m_pListContent) { + m_pListContent->SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam)); + m_pListContent->ResetFace(); + m_pListContent->InvalidateRect(NULL); + } + return; + case PNM_SETSCROLLPOS: + if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) + pScrollBar->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam); + return; + } + } } -int32_t CPWL_IconList::GetSelect() const -{ - return m_pListContent->GetSelect(); +void CPWL_IconList::SetSelect(int32_t nIndex) { + m_pListContent->SetSelect(nIndex); } -void CPWL_IconList::SetNotify(IPWL_IconList_Notify* pNotify) -{ - m_pListContent->SetNotify(pNotify); +void CPWL_IconList::SetTopItem(int32_t nIndex) { + m_pListContent->ScrollToItem(nIndex); } -void CPWL_IconList::EnableNotify(FX_BOOL bNotify) -{ - m_pListContent->EnableNotify(bNotify); -} - -void CPWL_IconList::SetListData(int32_t nItemIndex, void* pData) -{ - m_pListContent->SetListData(nItemIndex, pData); -} - -void CPWL_IconList::SetListIcon(int32_t nItemIndex, int32_t nIconIndex) -{ - m_pListContent->SetListIcon(nItemIndex, nIconIndex); -} - -void CPWL_IconList::SetListString(int32_t nItemIndex, const CFX_WideString& str) -{ - m_pListContent->SetListString(nItemIndex, str); -} - -CFX_WideString CPWL_IconList::GetListString(int32_t nItemIndex) const -{ - return m_pListContent->GetListString(nItemIndex); -} - -void CPWL_IconList::SetIconFillColor(const CPWL_Color& color) -{ - m_pListContent->SetIconFillColor(color); -} - -FX_BOOL CPWL_IconList::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag) -{ - CPDF_Point ptScroll = m_pListContent->GetScrollPos(); - CPDF_Rect rcScroll = m_pListContent->GetScrollArea(); - CPDF_Rect rcContents = m_pListContent->GetClientRect(); +int32_t CPWL_IconList::GetSelect() const { + return m_pListContent->GetSelect(); +} - if (rcScroll.top - rcScroll.bottom > rcContents.Height()) - { - CPDF_Point ptNew = ptScroll; +void CPWL_IconList::SetNotify(IPWL_IconList_Notify* pNotify) { + m_pListContent->SetNotify(pNotify); +} - if (zDelta > 0) - ptNew.y += 30; - else - ptNew.y -= 30; +void CPWL_IconList::EnableNotify(FX_BOOL bNotify) { + m_pListContent->EnableNotify(bNotify); +} - if (ptNew.y > rcScroll.top) - ptNew.y = rcScroll.top; - if (ptNew.y < rcScroll.bottom + rcContents.Height()) - ptNew.y = rcScroll.bottom + rcContents.Height(); - if (ptNew.y < rcScroll.bottom) - ptNew.y = rcScroll.bottom; +void CPWL_IconList::SetListData(int32_t nItemIndex, void* pData) { + m_pListContent->SetListData(nItemIndex, pData); +} - if (ptNew.y != ptScroll.y) - { - m_pListContent->SetScrollPos(ptNew); - m_pListContent->ResetFace(); - m_pListContent->InvalidateRect(NULL); +void CPWL_IconList::SetListIcon(int32_t nItemIndex, int32_t nIconIndex) { + m_pListContent->SetListIcon(nItemIndex, nIconIndex); +} - if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) - pScrollBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptNew.y); +void CPWL_IconList::SetListString(int32_t nItemIndex, + const CFX_WideString& str) { + m_pListContent->SetListString(nItemIndex, str); +} - return TRUE; - } - } +CFX_WideString CPWL_IconList::GetListString(int32_t nItemIndex) const { + return m_pListContent->GetListString(nItemIndex); +} - return FALSE; +void CPWL_IconList::SetIconFillColor(const CPWL_Color& color) { + m_pListContent->SetIconFillColor(color); } +FX_BOOL CPWL_IconList::OnMouseWheel(short zDelta, + const CPDF_Point& point, + FX_DWORD nFlag) { + CPDF_Point ptScroll = m_pListContent->GetScrollPos(); + CPDF_Rect rcScroll = m_pListContent->GetScrollArea(); + CPDF_Rect rcContents = m_pListContent->GetClientRect(); + + if (rcScroll.top - rcScroll.bottom > rcContents.Height()) { + CPDF_Point ptNew = ptScroll; + + if (zDelta > 0) + ptNew.y += 30; + else + ptNew.y -= 30; + + if (ptNew.y > rcScroll.top) + ptNew.y = rcScroll.top; + if (ptNew.y < rcScroll.bottom + rcContents.Height()) + ptNew.y = rcScroll.bottom + rcContents.Height(); + if (ptNew.y < rcScroll.bottom) + ptNew.y = rcScroll.bottom; + + if (ptNew.y != ptScroll.y) { + m_pListContent->SetScrollPos(ptNew); + m_pListContent->ResetFace(); + m_pListContent->InvalidateRect(NULL); + + if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) + pScrollBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, + (intptr_t)&ptNew.y); + + return TRUE; + } + } + + return FALSE; +} diff --git a/fpdfsdk/src/pdfwindow/PWL_Label.cpp b/fpdfsdk/src/pdfwindow/PWL_Label.cpp index e1780c69a8..797270ebba 100644 --- a/fpdfsdk/src/pdfwindow/PWL_Label.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_Label.cpp @@ -11,177 +11,144 @@ /* ---------------------------- CPWL_Label ------------------------------ */ -CPWL_Label::CPWL_Label() : m_pEdit(NULL) -{ - m_pEdit = IFX_Edit::NewEdit(); - - ASSERT(m_pEdit != NULL); +CPWL_Label::CPWL_Label() : m_pEdit(NULL) { + m_pEdit = IFX_Edit::NewEdit(); + + ASSERT(m_pEdit != NULL); } -CPWL_Label::~CPWL_Label() -{ - IFX_Edit::DelEdit(m_pEdit); +CPWL_Label::~CPWL_Label() { + IFX_Edit::DelEdit(m_pEdit); } - -CFX_ByteString CPWL_Label::GetClassName() const -{ - return "CPWL_Label"; -} - -void CPWL_Label::OnCreated() -{ - SetParamByFlag(); - SetFontSize(GetCreationParam().fFontSize); - - m_pEdit->SetFontMap(GetFontMap()); - m_pEdit->Initialize(); - - if (HasFlag(PES_TEXTOVERFLOW)) - { - SetClipRect(CPDF_Rect(0.0f,0.0f,0.0f,0.0f)); - m_pEdit->SetTextOverflow(TRUE); - } + +CFX_ByteString CPWL_Label::GetClassName() const { + return "CPWL_Label"; } -void CPWL_Label::SetText(const FX_WCHAR* csText) -{ - m_pEdit->SetText(csText); +void CPWL_Label::OnCreated() { + SetParamByFlag(); + SetFontSize(GetCreationParam().fFontSize); + + m_pEdit->SetFontMap(GetFontMap()); + m_pEdit->Initialize(); + + if (HasFlag(PES_TEXTOVERFLOW)) { + SetClipRect(CPDF_Rect(0.0f, 0.0f, 0.0f, 0.0f)); + m_pEdit->SetTextOverflow(TRUE); + } } -void CPWL_Label::RePosChildWnd() -{ - m_pEdit->SetPlateRect(GetClientRect()); +void CPWL_Label::SetText(const FX_WCHAR* csText) { + m_pEdit->SetText(csText); } -void CPWL_Label::SetFontSize(FX_FLOAT fFontSize) -{ - m_pEdit->SetFontSize(fFontSize); +void CPWL_Label::RePosChildWnd() { + m_pEdit->SetPlateRect(GetClientRect()); } -FX_FLOAT CPWL_Label::GetFontSize() const -{ - return m_pEdit->GetFontSize(); +void CPWL_Label::SetFontSize(FX_FLOAT fFontSize) { + m_pEdit->SetFontSize(fFontSize); } -void CPWL_Label::SetParamByFlag() -{ - if (HasFlag(PES_LEFT)) - { - m_pEdit->SetAlignmentH(0); - } - else if (HasFlag(PES_MIDDLE)) - { - m_pEdit->SetAlignmentH(1); - } - else if (HasFlag(PES_RIGHT)) - { - m_pEdit->SetAlignmentH(2); - } - else - { - m_pEdit->SetAlignmentH(0); - } +FX_FLOAT CPWL_Label::GetFontSize() const { + return m_pEdit->GetFontSize(); +} + +void CPWL_Label::SetParamByFlag() { + if (HasFlag(PES_LEFT)) { + m_pEdit->SetAlignmentH(0); + } else if (HasFlag(PES_MIDDLE)) { + m_pEdit->SetAlignmentH(1); + } else if (HasFlag(PES_RIGHT)) { + m_pEdit->SetAlignmentH(2); + } else { + m_pEdit->SetAlignmentH(0); + } - if (HasFlag(PES_TOP)) - { - m_pEdit->SetAlignmentV(0); - } - else if (HasFlag(PES_CENTER)) - { - m_pEdit->SetAlignmentV(1); - } - else if (HasFlag(PES_BOTTOM)) - { - m_pEdit->SetAlignmentV(2); - } - else - { - m_pEdit->SetAlignmentV(0); - } + if (HasFlag(PES_TOP)) { + m_pEdit->SetAlignmentV(0); + } else if (HasFlag(PES_CENTER)) { + m_pEdit->SetAlignmentV(1); + } else if (HasFlag(PES_BOTTOM)) { + m_pEdit->SetAlignmentV(2); + } else { + m_pEdit->SetAlignmentV(0); + } - if (HasFlag(PES_PASSWORD)) - { - m_pEdit->SetPasswordChar('*'); - } + if (HasFlag(PES_PASSWORD)) { + m_pEdit->SetPasswordChar('*'); + } - m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE)); - m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN)); - m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE)); - m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL)); + m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE)); + m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN)); + m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE)); + m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL)); } -void CPWL_Label::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); +void CPWL_Label::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); - GetClientRect(); + GetClientRect(); - CPDF_Rect rcClip; - CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); - CPVT_WordRange* pRange = NULL; + CPDF_Rect rcClip; + CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); + CPVT_WordRange* pRange = NULL; - if (!HasFlag(PES_TEXTOVERFLOW)) - { - rcClip = GetClientRect(); - pRange = &wrRange; - } -IFX_SystemHandler* pSysHandler = GetSystemHandler(); - IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pEdit, - CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), - CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()), - rcClip, CPDF_Point(0.0f,0.0f), pRange,pSysHandler, NULL); + if (!HasFlag(PES_TEXTOVERFLOW)) { + rcClip = GetClientRect(); + pRange = &wrRange; + } + IFX_SystemHandler* pSysHandler = GetSystemHandler(); + IFX_Edit::DrawEdit( + pDevice, pUser2Device, m_pEdit, + CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), + CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()), + rcClip, CPDF_Point(0.0f, 0.0f), pRange, pSysHandler, NULL); } -void CPWL_Label::SetHorzScale(int32_t nHorzScale) -{ - m_pEdit->SetHorzScale(nHorzScale); +void CPWL_Label::SetHorzScale(int32_t nHorzScale) { + m_pEdit->SetHorzScale(nHorzScale); } -void CPWL_Label::SetCharSpace(FX_FLOAT fCharSpace) -{ - m_pEdit->SetCharSpace(fCharSpace); +void CPWL_Label::SetCharSpace(FX_FLOAT fCharSpace) { + m_pEdit->SetCharSpace(fCharSpace); } -CPDF_Rect CPWL_Label::GetContentRect() const -{ - return m_pEdit->GetContentRect(); +CPDF_Rect CPWL_Label::GetContentRect() const { + return m_pEdit->GetContentRect(); } -void CPWL_Label::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - CPWL_Wnd::GetThisAppearanceStream(sAppStream); +void CPWL_Label::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { + CPWL_Wnd::GetThisAppearanceStream(sAppStream); - sAppStream << GetTextAppearanceStream(CPDF_Point(0.0f, 0.0f)); + sAppStream << GetTextAppearanceStream(CPDF_Point(0.0f, 0.0f)); } -CFX_ByteString CPWL_Label::GetTextAppearanceStream(const CPDF_Point & ptOffset) const -{ - CFX_ByteTextBuf sRet; - CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit,ptOffset); +CFX_ByteString CPWL_Label::GetTextAppearanceStream( + const CPDF_Point& ptOffset) const { + CFX_ByteTextBuf sRet; + CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset); - if (sEdit.GetLength() > 0) - { - sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit << "ET\n"; - } + if (sEdit.GetLength() > 0) { + sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit + << "ET\n"; + } - return sRet.GetByteString(); + return sRet.GetByteString(); } -CFX_WideString CPWL_Label::GetText() const -{ - return m_pEdit->GetText(); +CFX_WideString CPWL_Label::GetText() const { + return m_pEdit->GetText(); } -void CPWL_Label::SetLimitChar(int32_t nLimitChar) -{ - m_pEdit->SetLimitChar(nLimitChar); +void CPWL_Label::SetLimitChar(int32_t nLimitChar) { + m_pEdit->SetLimitChar(nLimitChar); } -int32_t CPWL_Label::GetTotalWords() -{ - if (m_pEdit) - return m_pEdit->GetTotalWords(); +int32_t CPWL_Label::GetTotalWords() { + if (m_pEdit) + return m_pEdit->GetTotalWords(); - return 0; + return 0; } - diff --git a/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp b/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp index 48fb409b7b..ba75e55fdf 100644 --- a/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp @@ -12,587 +12,531 @@ #include "../../include/pdfwindow/PWL_EditCtrl.h" #include "../../include/pdfwindow/PWL_Edit.h" -#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) -#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb)) +#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) +#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb)) /* ------------------------ CPWL_List_Notify ----------------------- */ -CPWL_List_Notify::CPWL_List_Notify(CPWL_ListBox* pList) : m_pList(pList) -{ - ASSERT(m_pList != NULL); +CPWL_List_Notify::CPWL_List_Notify(CPWL_ListBox* pList) : m_pList(pList) { + ASSERT(m_pList != NULL); } -CPWL_List_Notify::~CPWL_List_Notify() -{ -} +CPWL_List_Notify::~CPWL_List_Notify() {} -void CPWL_List_Notify::IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, - FX_FLOAT fContentMin, FX_FLOAT fContentMax, - FX_FLOAT fSmallStep, FX_FLOAT fBigStep) -{ - PWL_SCROLL_INFO Info; +void CPWL_List_Notify::IOnSetScrollInfoY(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep) { + PWL_SCROLL_INFO Info; - Info.fPlateWidth = fPlateMax - fPlateMin; - Info.fContentMin = fContentMin; - Info.fContentMax = fContentMax; - Info.fSmallStep = fSmallStep; - Info.fBigStep = fBigStep; + Info.fPlateWidth = fPlateMax - fPlateMin; + Info.fContentMin = fContentMin; + Info.fContentMax = fContentMax; + Info.fSmallStep = fSmallStep; + Info.fBigStep = fBigStep; - m_pList->OnNotify(m_pList,PNM_SETSCROLLINFO,SBT_VSCROLL,(intptr_t)&Info); + m_pList->OnNotify(m_pList, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&Info); - if (CPWL_ScrollBar * pScroll = m_pList->GetVScrollBar()) - { - if (IsFloatBigger(Info.fPlateWidth,Info.fContentMax-Info.fContentMin) - || IsFloatEqual(Info.fPlateWidth,Info.fContentMax-Info.fContentMin)) - { - if (pScroll->IsVisible()) - { - pScroll->SetVisible(FALSE); - m_pList->RePosChildWnd(); - } - } - else - { - if (!pScroll->IsVisible()) - { - pScroll->SetVisible(TRUE); - m_pList->RePosChildWnd(); - } - } - } + if (CPWL_ScrollBar* pScroll = m_pList->GetVScrollBar()) { + if (IsFloatBigger(Info.fPlateWidth, Info.fContentMax - Info.fContentMin) || + IsFloatEqual(Info.fPlateWidth, Info.fContentMax - Info.fContentMin)) { + if (pScroll->IsVisible()) { + pScroll->SetVisible(FALSE); + m_pList->RePosChildWnd(); + } + } else { + if (!pScroll->IsVisible()) { + pScroll->SetVisible(TRUE); + m_pList->RePosChildWnd(); + } + } + } } -void CPWL_List_Notify::IOnSetScrollPosY(FX_FLOAT fy) -{ - m_pList->OnNotify(m_pList,PNM_SETSCROLLPOS,SBT_VSCROLL,(intptr_t)&fy); +void CPWL_List_Notify::IOnSetScrollPosY(FX_FLOAT fy) { + m_pList->OnNotify(m_pList, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&fy); } -void CPWL_List_Notify::IOnInvalidateRect(CPDF_Rect * pRect) -{ - m_pList->InvalidateRect(pRect); +void CPWL_List_Notify::IOnInvalidateRect(CPDF_Rect* pRect) { + m_pList->InvalidateRect(pRect); } /* --------------------------- CPWL_ListBox ---------------------------- */ -CPWL_ListBox::CPWL_ListBox() : - m_pList(NULL), - m_pListNotify(NULL), - m_bMouseDown(FALSE), - m_bHoverSel(FALSE), - m_pFillerNotify(NULL) -{ - m_pList = IFX_List::NewList(); +CPWL_ListBox::CPWL_ListBox() + : m_pList(NULL), + m_pListNotify(NULL), + m_bMouseDown(FALSE), + m_bHoverSel(FALSE), + m_pFillerNotify(NULL) { + m_pList = IFX_List::NewList(); - ASSERT(m_pList != NULL); + ASSERT(m_pList != NULL); } -CPWL_ListBox::~CPWL_ListBox() -{ - IFX_List::DelList(m_pList); - delete m_pListNotify; - m_pListNotify = NULL; +CPWL_ListBox::~CPWL_ListBox() { + IFX_List::DelList(m_pList); + delete m_pListNotify; + m_pListNotify = NULL; } -CFX_ByteString CPWL_ListBox::GetClassName() const -{ - return "CPWL_ListBox"; +CFX_ByteString CPWL_ListBox::GetClassName() const { + return "CPWL_ListBox"; } -void CPWL_ListBox::OnCreated() -{ - if (m_pList) - { - delete m_pListNotify; +void CPWL_ListBox::OnCreated() { + if (m_pList) { + delete m_pListNotify; - m_pList->SetFontMap(GetFontMap()); - m_pList->SetNotify(m_pListNotify = new CPWL_List_Notify(this)); + m_pList->SetFontMap(GetFontMap()); + m_pList->SetNotify(m_pListNotify = new CPWL_List_Notify(this)); + + SetHoverSel(HasFlag(PLBS_HOVERSEL)); + m_pList->SetMultipleSel(HasFlag(PLBS_MULTIPLESEL)); + m_pList->SetFontSize(GetCreationParam().fFontSize); + + m_bHoverSel = HasFlag(PLBS_HOVERSEL); + } +} + +void CPWL_ListBox::OnDestroy() { + delete m_pListNotify; + m_pListNotify = NULL; +} + +void CPWL_ListBox::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { + CPWL_Wnd::GetThisAppearanceStream(sAppStream); + + CFX_ByteTextBuf sListItems; + + if (m_pList) { + CPDF_Rect rcPlate = m_pList->GetPlateRect(); + for (int32_t i = 0, sz = m_pList->GetCount(); i < sz; i++) { + CPDF_Rect rcItem = m_pList->GetItemRect(i); + + if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) + continue; + + CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f); + if (m_pList->IsItemSelected(i)) { + sListItems << CPWL_Utils::GetRectFillAppStream( + rcItem, PWL_DEFAULT_SELBACKCOLOR); + CFX_ByteString sItem = + CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset); + if (sItem.GetLength() > 0) { + sListItems << "BT\n" + << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELTEXTCOLOR) + << sItem << "ET\n"; + } + } else { + CFX_ByteString sItem = + CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset); + if (sItem.GetLength() > 0) { + sListItems << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) + << sItem << "ET\n"; + } + } + } + } + + if (sListItems.GetLength() > 0) { + CFX_ByteTextBuf sClip; + CPDF_Rect rcClient = GetClientRect(); + + sClip << "q\n"; + sClip << rcClient.left << " " << rcClient.bottom << " " + << rcClient.right - rcClient.left << " " + << rcClient.top - rcClient.bottom << " re W n\n"; + + sClip << sListItems << "Q\n"; + + sAppStream << "/Tx BMC\n" << sClip << "EMC\n"; + } +} + +void CPWL_ListBox::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); + + if (m_pList) { + CPDF_Rect rcPlate = m_pList->GetPlateRect(); + CPDF_Rect rcList = GetListRect(); + CPDF_Rect rcClient = GetClientRect(); + + for (int32_t i = 0, sz = m_pList->GetCount(); i < sz; i++) { + CPDF_Rect rcItem = m_pList->GetItemRect(i); + if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) + continue; + + CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f); + if (IFX_Edit* pEdit = m_pList->GetItemEdit(i)) { + CPDF_Rect rcContent = pEdit->GetContentRect(); + if (rcContent.Width() > rcClient.Width()) + rcItem.Intersect(rcList); + else + rcItem.Intersect(rcClient); + } + + if (m_pList->IsItemSelected(i)) { + // CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem, + //ArgbEncode(255,0,51,113)); + IFX_SystemHandler* pSysHandler = GetSystemHandler(); + if (pSysHandler && pSysHandler->IsSelectionImplemented()) { + IFX_Edit::DrawEdit( + pDevice, pUser2Device, m_pList->GetItemEdit(i), + CPWL_Utils::PWLColorToFXColor(GetTextColor()), + CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), rcList, + ptOffset, NULL, pSysHandler, m_pFormFiller); + pSysHandler->OutputSelectedRect(m_pFormFiller, rcItem); + } else { + CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem, + ArgbEncode(255, 0, 51, 113)); + IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), + ArgbEncode(255, 255, 255, 255), 0, rcList, + ptOffset, NULL, pSysHandler, m_pFormFiller); + } + } else { + IFX_SystemHandler* pSysHandler = GetSystemHandler(); + IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), + CPWL_Utils::PWLColorToFXColor(GetTextColor()), + CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), + rcList, ptOffset, NULL, pSysHandler, NULL); + } + } + } +} + +FX_BOOL CPWL_ListBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) { + CPWL_Wnd::OnKeyDown(nChar, nFlag); + + if (!m_pList) + return FALSE; + + switch (nChar) { + default: + return FALSE; + case FWL_VKEY_Up: + case FWL_VKEY_Down: + case FWL_VKEY_Home: + case FWL_VKEY_Left: + case FWL_VKEY_End: + case FWL_VKEY_Right: + break; + } + + switch (nChar) { + case FWL_VKEY_Up: + m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; + case FWL_VKEY_Down: + m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; + case FWL_VKEY_Home: + m_pList->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; + case FWL_VKEY_Left: + m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; + case FWL_VKEY_End: + m_pList->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; + case FWL_VKEY_Right: + m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + break; + case FWL_VKEY_Delete: + break; + } + + FX_BOOL bExit = FALSE; + OnNotifySelChanged(TRUE, bExit, nFlag); + + return TRUE; +} + +FX_BOOL CPWL_ListBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) { + CPWL_Wnd::OnChar(nChar, nFlag); + + if (!m_pList) + return FALSE; + + if (!m_pList->OnChar(nChar, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag))) + return FALSE; + + FX_BOOL bExit = FALSE; + OnNotifySelChanged(TRUE, bExit, nFlag); + + return TRUE; +} + +FX_BOOL CPWL_ListBox::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonDown(point, nFlag); + + if (ClientHitTest(point)) { + m_bMouseDown = TRUE; + SetFocus(); + SetCapture(); + + if (m_pList) + m_pList->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + } + + return TRUE; +} + +FX_BOOL CPWL_ListBox::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonUp(point, nFlag); + + if (m_bMouseDown) { + ReleaseCapture(); + m_bMouseDown = FALSE; + } + + FX_BOOL bExit = FALSE; + OnNotifySelChanged(FALSE, bExit, nFlag); + + return TRUE; +} + +void CPWL_ListBox::SetHoverSel(FX_BOOL bHoverSel) { + m_bHoverSel = bHoverSel; +} + +FX_BOOL CPWL_ListBox::OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnMouseMove(point, nFlag); + + if (m_bHoverSel && !IsCaptureMouse() && ClientHitTest(point)) { + if (m_pList) + m_pList->Select(m_pList->GetItemIndex(point)); + } - SetHoverSel(HasFlag(PLBS_HOVERSEL)); - m_pList->SetMultipleSel(HasFlag(PLBS_MULTIPLESEL)); - m_pList->SetFontSize(GetCreationParam().fFontSize); + if (m_bMouseDown) { + if (m_pList) + m_pList->OnMouseMove(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + } - m_bHoverSel = HasFlag(PLBS_HOVERSEL); - } + return TRUE; } -void CPWL_ListBox::OnDestroy() -{ - delete m_pListNotify; - m_pListNotify = NULL; -} - -void CPWL_ListBox::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - CPWL_Wnd::GetThisAppearanceStream(sAppStream); - - CFX_ByteTextBuf sListItems; - - if (m_pList) - { - CPDF_Rect rcPlate = m_pList->GetPlateRect(); - for (int32_t i=0,sz=m_pList->GetCount(); iGetItemRect(i); - - if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) continue; - - CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f); - if (m_pList->IsItemSelected(i)) - { - sListItems << CPWL_Utils::GetRectFillAppStream(rcItem,PWL_DEFAULT_SELBACKCOLOR); - CFX_ByteString sItem = CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset); - if (sItem.GetLength() > 0) - { - sListItems << "BT\n" << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELTEXTCOLOR) << sItem << "ET\n"; - } - } - else - { - CFX_ByteString sItem = CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset); - if (sItem.GetLength() > 0) - { - sListItems << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sItem << "ET\n"; - } - } - } - } - - if (sListItems.GetLength() > 0) - { - CFX_ByteTextBuf sClip; - CPDF_Rect rcClient = GetClientRect(); - - sClip << "q\n"; - sClip << rcClient.left << " " << rcClient.bottom << " " - << rcClient.right - rcClient.left << " " << rcClient.top - rcClient.bottom << " re W n\n"; - - sClip << sListItems << "Q\n"; - - sAppStream << "/Tx BMC\n" << sClip << "EMC\n"; - } -} - -void CPWL_ListBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); - - if (m_pList) - { - CPDF_Rect rcPlate = m_pList->GetPlateRect(); - CPDF_Rect rcList = GetListRect(); - CPDF_Rect rcClient = GetClientRect(); - - for (int32_t i=0,sz=m_pList->GetCount(); iGetItemRect(i); - if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) continue; - - CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f); - if (IFX_Edit* pEdit = m_pList->GetItemEdit(i)) - { - CPDF_Rect rcContent = pEdit->GetContentRect(); - if (rcContent.Width() > rcClient.Width()) - rcItem.Intersect(rcList); - else - rcItem.Intersect(rcClient); - } - - if (m_pList->IsItemSelected(i)) - { - // CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem, ArgbEncode(255,0,51,113)); - IFX_SystemHandler* pSysHandler = GetSystemHandler(); - if(pSysHandler && pSysHandler->IsSelectionImplemented()) - { - IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), CPWL_Utils::PWLColorToFXColor(GetTextColor()), CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), - rcList, ptOffset, NULL,pSysHandler, m_pFormFiller); - pSysHandler->OutputSelectedRect(m_pFormFiller, rcItem); - } - else - { - CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem, ArgbEncode(255,0,51,113)); - IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), ArgbEncode(255,255,255,255), 0, - rcList, ptOffset, NULL, pSysHandler, m_pFormFiller); - } - } - else - { - IFX_SystemHandler* pSysHandler = GetSystemHandler(); - IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), - CPWL_Utils::PWLColorToFXColor(GetTextColor()), - CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), - rcList, ptOffset, NULL,pSysHandler, NULL); - - } - } - } -} - -FX_BOOL CPWL_ListBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) -{ - CPWL_Wnd::OnKeyDown(nChar, nFlag); - - if (!m_pList) return FALSE; - - switch (nChar) - { - default: - return FALSE; - case FWL_VKEY_Up: - case FWL_VKEY_Down: - case FWL_VKEY_Home: - case FWL_VKEY_Left: - case FWL_VKEY_End: - case FWL_VKEY_Right: - break; - } - - switch (nChar) - { - case FWL_VKEY_Up: - m_pList->OnVK_UP(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; - case FWL_VKEY_Down: - m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; - case FWL_VKEY_Home: - m_pList->OnVK_HOME(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; - case FWL_VKEY_Left: - m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; - case FWL_VKEY_End: - m_pList->OnVK_END(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; - case FWL_VKEY_Right: - m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - break; - case FWL_VKEY_Delete: - break; - } - - FX_BOOL bExit = FALSE; - OnNotifySelChanged(TRUE,bExit,nFlag); - - return TRUE; -} - -FX_BOOL CPWL_ListBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) -{ - CPWL_Wnd::OnChar(nChar,nFlag); - - if (!m_pList) return FALSE; - - if (!m_pList->OnChar(nChar,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag))) return FALSE; - - FX_BOOL bExit = FALSE; - OnNotifySelChanged(TRUE,bExit, nFlag); - - return TRUE; -} - -FX_BOOL CPWL_ListBox::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonDown(point,nFlag); - - if (ClientHitTest(point)) - { - m_bMouseDown = TRUE; - SetFocus(); - SetCapture(); - - if (m_pList) - m_pList->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - } - - return TRUE; -} - -FX_BOOL CPWL_ListBox::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonUp(point,nFlag); - - if (m_bMouseDown) - { - ReleaseCapture(); - m_bMouseDown = FALSE; - } - - FX_BOOL bExit = FALSE; - OnNotifySelChanged(FALSE,bExit,nFlag); - - return TRUE; -} - -void CPWL_ListBox::SetHoverSel(FX_BOOL bHoverSel) -{ - m_bHoverSel = bHoverSel; -} - -FX_BOOL CPWL_ListBox::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnMouseMove(point, nFlag); - - if (m_bHoverSel && !IsCaptureMouse() && ClientHitTest(point)) - { - if (m_pList) - m_pList->Select(m_pList->GetItemIndex(point)); - } - - if (m_bMouseDown) - { - if (m_pList) - m_pList->OnMouseMove(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - } - - return TRUE; -} - -void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) -{ - CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam); - - FX_FLOAT fPos; - - switch (msg) - { - case PNM_SETSCROLLINFO: - switch (wParam) - { - case SBT_VSCROLL: - if (CPWL_Wnd * pChild = GetVScrollBar()) - { - pChild->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam); - } - break; - } - break; - case PNM_SETSCROLLPOS: - switch (wParam) - { - case SBT_VSCROLL: - if (CPWL_Wnd * pChild = GetVScrollBar()) - { - pChild->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam); - } - break; - } - break; - case PNM_SCROLLWINDOW: - fPos = *(FX_FLOAT*)lParam; - switch (wParam) - { - case SBT_VSCROLL: - if (m_pList) - m_pList->SetScrollPos(CPDF_Point(0,fPos)); - break; - } - break; - } +void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam, + intptr_t lParam) { + CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); + + FX_FLOAT fPos; + + switch (msg) { + case PNM_SETSCROLLINFO: + switch (wParam) { + case SBT_VSCROLL: + if (CPWL_Wnd* pChild = GetVScrollBar()) { + pChild->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam); + } + break; + } + break; + case PNM_SETSCROLLPOS: + switch (wParam) { + case SBT_VSCROLL: + if (CPWL_Wnd* pChild = GetVScrollBar()) { + pChild->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam); + } + break; + } + break; + case PNM_SCROLLWINDOW: + fPos = *(FX_FLOAT*)lParam; + switch (wParam) { + case SBT_VSCROLL: + if (m_pList) + m_pList->SetScrollPos(CPDF_Point(0, fPos)); + break; + } + break; + } } -void CPWL_ListBox::KillFocus() -{ - CPWL_Wnd::KillFocus(); +void CPWL_ListBox::KillFocus() { + CPWL_Wnd::KillFocus(); } -void CPWL_ListBox::RePosChildWnd() -{ - CPWL_Wnd::RePosChildWnd(); +void CPWL_ListBox::RePosChildWnd() { + CPWL_Wnd::RePosChildWnd(); - if (m_pList) - m_pList->SetPlateRect(GetListRect()); + if (m_pList) + m_pList->SetPlateRect(GetListRect()); } -void CPWL_ListBox::OnNotifySelChanged(FX_BOOL bKeyDown, FX_BOOL & bExit, FX_DWORD nFlag) -{ - if (m_pFillerNotify) - { - FX_BOOL bRC = TRUE; - CFX_WideString swChange = GetText(); - CFX_WideString strChangeEx; - int nSelStart = 0; - int nSelEnd = swChange.GetLength(); - m_pFillerNotify->OnBeforeKeyStroke(FALSE, GetAttachedData(), 0, swChange, strChangeEx, nSelStart, nSelEnd, bKeyDown, bRC, bExit, nFlag); - if (bExit) return; +void CPWL_ListBox::OnNotifySelChanged(FX_BOOL bKeyDown, + FX_BOOL& bExit, + FX_DWORD nFlag) { + if (m_pFillerNotify) { + FX_BOOL bRC = TRUE; + CFX_WideString swChange = GetText(); + CFX_WideString strChangeEx; + int nSelStart = 0; + int nSelEnd = swChange.GetLength(); + m_pFillerNotify->OnBeforeKeyStroke(FALSE, GetAttachedData(), 0, swChange, + strChangeEx, nSelStart, nSelEnd, + bKeyDown, bRC, bExit, nFlag); + if (bExit) + return; - m_pFillerNotify->OnAfterKeyStroke(FALSE, GetAttachedData(), bExit,nFlag); - } + m_pFillerNotify->OnAfterKeyStroke(FALSE, GetAttachedData(), bExit, nFlag); + } } -CPDF_Rect CPWL_ListBox::GetFocusRect() const -{ - if (m_pList && m_pList->IsMultipleSel()) - { - CPDF_Rect rcCaret = m_pList->GetItemRect(m_pList->GetCaret()); - rcCaret.Intersect(GetClientRect()); - return rcCaret; - } +CPDF_Rect CPWL_ListBox::GetFocusRect() const { + if (m_pList && m_pList->IsMultipleSel()) { + CPDF_Rect rcCaret = m_pList->GetItemRect(m_pList->GetCaret()); + rcCaret.Intersect(GetClientRect()); + return rcCaret; + } - return CPWL_Wnd::GetFocusRect(); + return CPWL_Wnd::GetFocusRect(); } -void CPWL_ListBox::AddString(const FX_WCHAR* string) -{ - if (m_pList) - { - m_pList->AddString(string); - } +void CPWL_ListBox::AddString(const FX_WCHAR* string) { + if (m_pList) { + m_pList->AddString(string); + } } -CFX_WideString CPWL_ListBox::GetText() const -{ - if (m_pList) - return m_pList->GetText(); +CFX_WideString CPWL_ListBox::GetText() const { + if (m_pList) + return m_pList->GetText(); - return L""; + return L""; } -void CPWL_ListBox::SetFontSize(FX_FLOAT fFontSize) -{ - if (m_pList) - m_pList->SetFontSize(fFontSize); +void CPWL_ListBox::SetFontSize(FX_FLOAT fFontSize) { + if (m_pList) + m_pList->SetFontSize(fFontSize); } -FX_FLOAT CPWL_ListBox::GetFontSize() const -{ - if (m_pList) - return m_pList->GetFontSize(); - return 0.0f; +FX_FLOAT CPWL_ListBox::GetFontSize() const { + if (m_pList) + return m_pList->GetFontSize(); + return 0.0f; } -void CPWL_ListBox::Select(int32_t nItemIndex) -{ - if (m_pList) - m_pList->Select(nItemIndex); +void CPWL_ListBox::Select(int32_t nItemIndex) { + if (m_pList) + m_pList->Select(nItemIndex); } -void CPWL_ListBox::SetCaret(int32_t nItemIndex) -{ - if (m_pList) - m_pList->SetCaret(nItemIndex); +void CPWL_ListBox::SetCaret(int32_t nItemIndex) { + if (m_pList) + m_pList->SetCaret(nItemIndex); } -void CPWL_ListBox::SetTopVisibleIndex(int32_t nItemIndex) -{ - if (m_pList) - m_pList->SetTopItem(nItemIndex); +void CPWL_ListBox::SetTopVisibleIndex(int32_t nItemIndex) { + if (m_pList) + m_pList->SetTopItem(nItemIndex); } -void CPWL_ListBox::ScrollToListItem(int32_t nItemIndex) -{ - if (m_pList) - m_pList->ScrollToListItem(nItemIndex); +void CPWL_ListBox::ScrollToListItem(int32_t nItemIndex) { + if (m_pList) + m_pList->ScrollToListItem(nItemIndex); } -void CPWL_ListBox::ResetContent() -{ - if (m_pList) - m_pList->Empty(); +void CPWL_ListBox::ResetContent() { + if (m_pList) + m_pList->Empty(); } -void CPWL_ListBox::Reset() -{ - if (m_pList) - m_pList->Cancel(); +void CPWL_ListBox::Reset() { + if (m_pList) + m_pList->Cancel(); } -FX_BOOL CPWL_ListBox::IsMultipleSel() const -{ - if (m_pList) - return m_pList->IsMultipleSel(); +FX_BOOL CPWL_ListBox::IsMultipleSel() const { + if (m_pList) + return m_pList->IsMultipleSel(); - return FALSE; + return FALSE; } -int32_t CPWL_ListBox::GetCaretIndex() const -{ - if (m_pList) - return m_pList->GetCaret(); +int32_t CPWL_ListBox::GetCaretIndex() const { + if (m_pList) + return m_pList->GetCaret(); - return -1; + return -1; } -int32_t CPWL_ListBox::GetCurSel() const -{ - if (m_pList) - return m_pList->GetSelect(); +int32_t CPWL_ListBox::GetCurSel() const { + if (m_pList) + return m_pList->GetSelect(); - return -1; + return -1; } -FX_BOOL CPWL_ListBox::IsItemSelected(int32_t nItemIndex) const -{ - if (m_pList) - return m_pList->IsItemSelected(nItemIndex); +FX_BOOL CPWL_ListBox::IsItemSelected(int32_t nItemIndex) const { + if (m_pList) + return m_pList->IsItemSelected(nItemIndex); - return FALSE; + return FALSE; } -int32_t CPWL_ListBox::GetTopVisibleIndex() const -{ - if (m_pList) - { - m_pList->ScrollToListItem(m_pList->GetFirstSelected()); - return m_pList->GetTopItem(); - } +int32_t CPWL_ListBox::GetTopVisibleIndex() const { + if (m_pList) { + m_pList->ScrollToListItem(m_pList->GetFirstSelected()); + return m_pList->GetTopItem(); + } - return -1; + return -1; } -int32_t CPWL_ListBox::GetCount() const -{ - if (m_pList) - return m_pList->GetCount(); +int32_t CPWL_ListBox::GetCount() const { + if (m_pList) + return m_pList->GetCount(); - return 0; + return 0; } -int32_t CPWL_ListBox::FindNext(int32_t nIndex,FX_WCHAR nChar) const -{ - if (m_pList) - return m_pList->FindNext(nIndex,nChar); +int32_t CPWL_ListBox::FindNext(int32_t nIndex, FX_WCHAR nChar) const { + if (m_pList) + return m_pList->FindNext(nIndex, nChar); - return nIndex; + return nIndex; } -CPDF_Rect CPWL_ListBox::GetContentRect() const -{ - if (m_pList) - return m_pList->GetContentRect(); +CPDF_Rect CPWL_ListBox::GetContentRect() const { + if (m_pList) + return m_pList->GetContentRect(); - return CPDF_Rect(); + return CPDF_Rect(); } -FX_FLOAT CPWL_ListBox::GetFirstHeight() const -{ - if (m_pList) - return m_pList->GetFirstHeight(); +FX_FLOAT CPWL_ListBox::GetFirstHeight() const { + if (m_pList) + return m_pList->GetFirstHeight(); - return 0.0f; + return 0.0f; } -CPDF_Rect CPWL_ListBox::GetListRect() const -{ - return CPWL_Utils::DeflateRect(GetWindowRect(),(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth())); +CPDF_Rect CPWL_ListBox::GetListRect() const { + return CPWL_Utils::DeflateRect( + GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); } -FX_BOOL CPWL_ListBox::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag) -{ - if (!m_pList) return FALSE; +FX_BOOL CPWL_ListBox::OnMouseWheel(short zDelta, + const CPDF_Point& point, + FX_DWORD nFlag) { + if (!m_pList) + return FALSE; - if (zDelta < 0) - { - m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - } - else - { - m_pList->OnVK_UP(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); - } + if (zDelta < 0) { + m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + } else { + m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); + } - FX_BOOL bExit = FALSE; - OnNotifySelChanged(FALSE,bExit, nFlag); - return TRUE; + FX_BOOL bExit = FALSE; + OnNotifySelChanged(FALSE, bExit, nFlag); + return TRUE; } - diff --git a/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp b/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp index 3077e6293f..e01ce5c203 100644 --- a/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp @@ -10,236 +10,199 @@ /* ---------------------------- CPWL_ListCtrl ---------------------------- */ -CPWL_ListCtrl::CPWL_ListCtrl() : - m_rcContent(0,0,0,0), - m_ptScroll(0,0), - m_fItemSpace(0.0f), - m_fTopSpace(0.0f), - m_fBottomSpace(0.0f) -{ -} +CPWL_ListCtrl::CPWL_ListCtrl() + : m_rcContent(0, 0, 0, 0), + m_ptScroll(0, 0), + m_fItemSpace(0.0f), + m_fTopSpace(0.0f), + m_fBottomSpace(0.0f) {} -CPWL_ListCtrl::~CPWL_ListCtrl() -{ -} +CPWL_ListCtrl::~CPWL_ListCtrl() {} -void CPWL_ListCtrl::SetScrollPos(const CPDF_Point& point) -{ - m_ptScroll = point; +void CPWL_ListCtrl::SetScrollPos(const CPDF_Point& point) { + m_ptScroll = point; - if (m_ptScroll.x < m_rcContent.left) - m_ptScroll.x = m_rcContent.left; + if (m_ptScroll.x < m_rcContent.left) + m_ptScroll.x = m_rcContent.left; - if (m_ptScroll.x > m_rcContent.right) - m_ptScroll.x = m_rcContent.right; + if (m_ptScroll.x > m_rcContent.right) + m_ptScroll.x = m_rcContent.right; - if (m_ptScroll.y > m_rcContent.top) - m_ptScroll.y = m_rcContent.top; + if (m_ptScroll.y > m_rcContent.top) + m_ptScroll.y = m_rcContent.top; - if (m_ptScroll.y < m_rcContent.bottom) - m_ptScroll.y = m_rcContent.bottom; + if (m_ptScroll.y < m_rcContent.bottom) + m_ptScroll.y = m_rcContent.bottom; } -CPDF_Point CPWL_ListCtrl::GetScrollPos() const -{ - return m_ptScroll; +CPDF_Point CPWL_ListCtrl::GetScrollPos() const { + return m_ptScroll; } -CPDF_Rect CPWL_ListCtrl::GetScrollArea() const -{ - return m_rcContent; +CPDF_Rect CPWL_ListCtrl::GetScrollArea() const { + return m_rcContent; } -void CPWL_ListCtrl::ResetFace() -{ - ResetAll(FALSE, 0); +void CPWL_ListCtrl::ResetFace() { + ResetAll(FALSE, 0); } -void CPWL_ListCtrl::ResetContent(int32_t nStart) -{ - if (nStart < 0) - nStart = 0; - if (nStart >= 0 && nStart < m_aChildren.GetSize()) - ResetAll(TRUE, nStart); +void CPWL_ListCtrl::ResetContent(int32_t nStart) { + if (nStart < 0) + nStart = 0; + if (nStart >= 0 && nStart < m_aChildren.GetSize()) + ResetAll(TRUE, nStart); } -FX_FLOAT CPWL_ListCtrl::GetContentsHeight(FX_FLOAT fLimitWidth) -{ - FX_FLOAT fRet = m_fTopSpace; +FX_FLOAT CPWL_ListCtrl::GetContentsHeight(FX_FLOAT fLimitWidth) { + FX_FLOAT fRet = m_fTopSpace; - FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); + FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); - if (fLimitWidth > fBorderWidth* 2) - { - for (int32_t i=0,sz=m_aChildren.GetSize(); iGetItemLeftMargin(); - FX_FLOAT fRight = pChild->GetItemRightMargin(); + if (fLimitWidth > fBorderWidth * 2) { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + FX_FLOAT fLeft = pChild->GetItemLeftMargin(); + FX_FLOAT fRight = pChild->GetItemRightMargin(); - fRet += pChild->GetItemHeight(fLimitWidth - fBorderWidth* 2 - fLeft - fRight); - fRet += m_fItemSpace; - } - } + fRet += pChild->GetItemHeight(fLimitWidth - fBorderWidth * 2 - fLeft - + fRight); + fRet += m_fItemSpace; + } + } - fRet -= m_fItemSpace; - } + fRet -= m_fItemSpace; + } - fRet += m_fBottomSpace; + fRet += m_fBottomSpace; - return fRet; + return fRet; } -void CPWL_ListCtrl::ResetAll(FX_BOOL bMove, int32_t nStart) -{ - CPDF_Rect rcClient = GetClientRect(); +void CPWL_ListCtrl::ResetAll(FX_BOOL bMove, int32_t nStart) { + CPDF_Rect rcClient = GetClientRect(); - FX_FLOAT fWidth = rcClient.Width(); + FX_FLOAT fWidth = rcClient.Width(); - FX_FLOAT fy = 0.0f - m_fTopSpace; + FX_FLOAT fy = 0.0f - m_fTopSpace; - if (nStart-1 >= 0 && nStart-1 < m_aChildren.GetSize()) - if (CPWL_Wnd* pChild = m_aChildren.GetAt(nStart-1)) - fy = pChild->GetWindowRect().bottom - m_fItemSpace; + if (nStart - 1 >= 0 && nStart - 1 < m_aChildren.GetSize()) + if (CPWL_Wnd* pChild = m_aChildren.GetAt(nStart - 1)) + fy = pChild->GetWindowRect().bottom - m_fItemSpace; - for (int32_t i=nStart,sz=m_aChildren.GetSize(); iGetItemLeftMargin(); - FX_FLOAT fRight = pChild->GetItemRightMargin(); + for (int32_t i = nStart, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + FX_FLOAT fLeft = pChild->GetItemLeftMargin(); + FX_FLOAT fRight = pChild->GetItemRightMargin(); - pChild->SetChildMatrix( - CPDF_Matrix(1,0,0,1, - rcClient.left - m_ptScroll.x, - rcClient.top - m_ptScroll.y) - ); + pChild->SetChildMatrix(CPDF_Matrix(1, 0, 0, 1, + rcClient.left - m_ptScroll.x, + rcClient.top - m_ptScroll.y)); - if (bMove) - { - FX_FLOAT fItemHeight = pChild->GetItemHeight(fWidth - fLeft - fRight); - pChild->Move(CPDF_Rect(fLeft, fy-fItemHeight, fWidth - fRight, fy), TRUE, FALSE); - fy -= fItemHeight; - fy -= m_fItemSpace; - } - } - } + if (bMove) { + FX_FLOAT fItemHeight = pChild->GetItemHeight(fWidth - fLeft - fRight); + pChild->Move(CPDF_Rect(fLeft, fy - fItemHeight, fWidth - fRight, fy), + TRUE, FALSE); + fy -= fItemHeight; + fy -= m_fItemSpace; + } + } + } - fy += m_fItemSpace; + fy += m_fItemSpace; - fy -= m_fBottomSpace; + fy -= m_fBottomSpace; - if (bMove) - { - m_rcContent.left = 0; - m_rcContent.top = 0; - m_rcContent.right = fWidth; - m_rcContent.bottom = fy; - } + if (bMove) { + m_rcContent.left = 0; + m_rcContent.top = 0; + m_rcContent.right = fWidth; + m_rcContent.bottom = fy; + } } -void CPWL_ListCtrl::SetItemSpace(FX_FLOAT fSpace) -{ - m_fItemSpace = fSpace; +void CPWL_ListCtrl::SetItemSpace(FX_FLOAT fSpace) { + m_fItemSpace = fSpace; } -void CPWL_ListCtrl::SetTopSpace(FX_FLOAT fSpace) -{ - m_fTopSpace = fSpace; +void CPWL_ListCtrl::SetTopSpace(FX_FLOAT fSpace) { + m_fTopSpace = fSpace; } -void CPWL_ListCtrl::SetBottomSpace(FX_FLOAT fSpace) -{ - m_fBottomSpace = fSpace; +void CPWL_ListCtrl::SetBottomSpace(FX_FLOAT fSpace) { + m_fBottomSpace = fSpace; } -void CPWL_ListCtrl::RePosChildWnd() -{ - ResetFace(); +void CPWL_ListCtrl::RePosChildWnd() { + ResetFace(); } -void CPWL_ListCtrl::DrawChildAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - pDevice->SaveState(); - CPDF_Rect rcClient = GetClientRect(); - CPDF_Rect rcTemp = rcClient; - pUser2Device->TransformRect(rcTemp); - FX_RECT rcClip((int32_t)rcTemp.left, - (int32_t)rcTemp.bottom, - (int32_t)rcTemp.right, - (int32_t)rcTemp.top); +void CPWL_ListCtrl::DrawChildAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + pDevice->SaveState(); + CPDF_Rect rcClient = GetClientRect(); + CPDF_Rect rcTemp = rcClient; + pUser2Device->TransformRect(rcTemp); + FX_RECT rcClip((int32_t)rcTemp.left, (int32_t)rcTemp.bottom, + (int32_t)rcTemp.right, (int32_t)rcTemp.top); - pDevice->SetClip_Rect(&rcClip); + pDevice->SetClip_Rect(&rcClip); - for (int32_t i=0,sz=m_aChildren.GetSize(); iChildToParent(pChild->GetWindowRect()); - if (!(rcChild.top < rcClient.bottom || rcChild.bottom > rcClient.top)) - { - CPDF_Matrix mt = pChild->GetChildMatrix(); - if (mt.IsIdentity()) - { - pChild->DrawAppearance(pDevice,pUser2Device); - } - else - { - mt.Concat(*pUser2Device); - pChild->DrawAppearance(pDevice,&mt); - } - } - } - } + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + CPDF_Rect rcChild = pChild->ChildToParent(pChild->GetWindowRect()); + if (!(rcChild.top < rcClient.bottom || rcChild.bottom > rcClient.top)) { + CPDF_Matrix mt = pChild->GetChildMatrix(); + if (mt.IsIdentity()) { + pChild->DrawAppearance(pDevice, pUser2Device); + } else { + mt.Concat(*pUser2Device); + pChild->DrawAppearance(pDevice, &mt); + } + } + } + } - pDevice->RestoreState(); + pDevice->RestoreState(); } -int32_t CPWL_ListCtrl::GetItemIndex(CPWL_Wnd* pItem) -{ - for (int32_t i=0, sz=m_aChildren.GetSize(); i -0.0001) -#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb)) +#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) +#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb)) +/* ------------------------------- CPWL_Note_Options + * ------------------------------- */ -/* ------------------------------- CPWL_Note_Options ------------------------------- */ +CPWL_Note_Options::CPWL_Note_Options() : m_pText(NULL) {} -CPWL_Note_Options::CPWL_Note_Options() : m_pText(NULL) -{ -} - -CPWL_Note_Options::~CPWL_Note_Options() -{ -} +CPWL_Note_Options::~CPWL_Note_Options() {} -void CPWL_Note_Options::SetTextColor(const CPWL_Color & color) -{ - CPWL_Wnd::SetTextColor(color); +void CPWL_Note_Options::SetTextColor(const CPWL_Color& color) { + CPWL_Wnd::SetTextColor(color); - if (m_pText) - m_pText->SetTextColor(color); + if (m_pText) + m_pText->SetTextColor(color); } -void CPWL_Note_Options::RePosChildWnd() -{ - if (IsValid()) - { - ASSERT(m_pText != NULL); +void CPWL_Note_Options::RePosChildWnd() { + if (IsValid()) { + ASSERT(m_pText != NULL); - CPDF_Rect rcClient = GetClientRect(); + CPDF_Rect rcClient = GetClientRect(); - if (rcClient.Width() > 15.0f) - { - rcClient.right -= 15.0f; - m_pText->Move(rcClient, TRUE, FALSE); - m_pText->SetVisible(TRUE); - } - else - { - m_pText->Move(CPDF_Rect(0,0,0,0), TRUE, FALSE); - m_pText->SetVisible(FALSE); - } - } + if (rcClient.Width() > 15.0f) { + rcClient.right -= 15.0f; + m_pText->Move(rcClient, TRUE, FALSE); + m_pText->SetVisible(TRUE); + } else { + m_pText->Move(CPDF_Rect(0, 0, 0, 0), TRUE, FALSE); + m_pText->SetVisible(FALSE); + } + } } -void CPWL_Note_Options::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - m_pText = new CPWL_Label; - PWL_CREATEPARAM tcp = cp; - tcp.pParentWnd = this; - tcp.dwFlags = PWS_CHILD | PWS_VISIBLE; - m_pText->Create(tcp); +void CPWL_Note_Options::CreateChildWnd(const PWL_CREATEPARAM& cp) { + m_pText = new CPWL_Label; + PWL_CREATEPARAM tcp = cp; + tcp.pParentWnd = this; + tcp.dwFlags = PWS_CHILD | PWS_VISIBLE; + m_pText->Create(tcp); } -void CPWL_Note_Options::SetText(const CFX_WideString& sText) -{ - m_pText->SetText(sText.c_str()); +void CPWL_Note_Options::SetText(const CFX_WideString& sText) { + m_pText->SetText(sText.c_str()); } -void CPWL_Note_Options::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); +void CPWL_Note_Options::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); - CPDF_Rect rcClient = GetClientRect(); - rcClient.left = rcClient.right - 15.0f; + CPDF_Rect rcClient = GetClientRect(); + rcClient.left = rcClient.right - 15.0f; - CPDF_Point ptCenter = CPDF_Point((rcClient.left + rcClient.right) * 0.5f, (rcClient.top + rcClient.bottom) * 0.5f); + CPDF_Point ptCenter = CPDF_Point((rcClient.left + rcClient.right) * 0.5f, + (rcClient.top + rcClient.bottom) * 0.5f); - CPDF_Point pt1(ptCenter.x - 2.0f, ptCenter.y + 2.0f * 0.5f); - CPDF_Point pt2(ptCenter.x + 2.0f, ptCenter.y + 2.0f * 0.5f); - CPDF_Point pt3(ptCenter.x, ptCenter.y - 3.0f * 0.5f); + CPDF_Point pt1(ptCenter.x - 2.0f, ptCenter.y + 2.0f * 0.5f); + CPDF_Point pt2(ptCenter.x + 2.0f, ptCenter.y + 2.0f * 0.5f); + CPDF_Point pt3(ptCenter.x, ptCenter.y - 3.0f * 0.5f); - CFX_PathData path; + CFX_PathData path; - path.SetPointCount(4); - path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO); - path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO); - path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO); - path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO); + path.SetPointCount(4); + path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO); + path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO); + path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO); + path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO); - pDevice->DrawPath(&path, pUser2Device, NULL, - CPWL_Utils::PWLColorToFXColor(GetTextColor(),GetTransparency()), - 0, FXFILL_ALTERNATE); + pDevice->DrawPath( + &path, pUser2Device, NULL, + CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), 0, + FXFILL_ALTERNATE); } -CPDF_Rect CPWL_Note_Options::GetContentRect() const -{ - ASSERT(m_pText != NULL); +CPDF_Rect CPWL_Note_Options::GetContentRect() const { + ASSERT(m_pText != NULL); - CPDF_Rect rcText = m_pText->GetContentRect(); - rcText.right += 15.0f; - return rcText; + CPDF_Rect rcText = m_pText->GetContentRect(); + rcText.right += 15.0f; + return rcText; } -/* ------------------------------- CPWL_Note_Edit ------------------------------ */ +/* ------------------------------- CPWL_Note_Edit ------------------------------ + */ -CPWL_Note_Edit::CPWL_Note_Edit() : m_bEnableNotify(TRUE), - m_fOldItemHeight(0.0f), - m_bSizeChanged(FALSE), - m_fOldMin(0.0f), - m_fOldMax(0.0f) -{ -} +CPWL_Note_Edit::CPWL_Note_Edit() + : m_bEnableNotify(TRUE), + m_fOldItemHeight(0.0f), + m_bSizeChanged(FALSE), + m_fOldMin(0.0f), + m_fOldMax(0.0f) {} -CPWL_Note_Edit::~CPWL_Note_Edit() -{ +CPWL_Note_Edit::~CPWL_Note_Edit() {} + +void CPWL_Note_Edit::RePosChildWnd() { + m_bEnableNotify = FALSE; + CPWL_Edit::RePosChildWnd(); + m_bEnableNotify = TRUE; + + m_fOldItemHeight = GetContentRect().Height(); } -void CPWL_Note_Edit::RePosChildWnd() -{ - m_bEnableNotify = FALSE; - CPWL_Edit::RePosChildWnd(); - m_bEnableNotify = TRUE; +void CPWL_Note_Edit::SetText(const FX_WCHAR* csText) { + m_bEnableNotify = FALSE; + CPWL_Edit::SetText(csText); + m_bEnableNotify = TRUE; + m_fOldItemHeight = GetContentRect().Height(); +} - m_fOldItemHeight = GetContentRect().Height(); -} - -void CPWL_Note_Edit::SetText(const FX_WCHAR* csText) -{ - m_bEnableNotify = FALSE; - CPWL_Edit::SetText(csText); - m_bEnableNotify = TRUE; - m_fOldItemHeight = GetContentRect().Height(); -} - -void CPWL_Note_Edit::OnSetFocus() -{ - m_bEnableNotify = FALSE; - CPWL_Edit::OnSetFocus(); - m_bEnableNotify = TRUE; +void CPWL_Note_Edit::OnSetFocus() { + m_bEnableNotify = FALSE; + CPWL_Edit::OnSetFocus(); + m_bEnableNotify = TRUE; - EnableSpellCheck(TRUE); + EnableSpellCheck(TRUE); } -void CPWL_Note_Edit::OnKillFocus() -{ - EnableSpellCheck(FALSE); +void CPWL_Note_Edit::OnKillFocus() { + EnableSpellCheck(FALSE); - if (CPWL_Wnd* pParent = GetParentWindow()) - { - if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) - { - ASSERT(pGrand->GetClassName() == "CPWL_NoteItem"); + if (CPWL_Wnd* pParent = GetParentWindow()) { + if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) { + ASSERT(pGrand->GetClassName() == "CPWL_NoteItem"); - CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pGrand; + CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pGrand; - pNoteItem->OnContentsValidate(); - } - } + pNoteItem->OnContentsValidate(); + } + } - CPWL_Edit::OnKillFocus(); + CPWL_Edit::OnKillFocus(); } -void CPWL_Note_Edit::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) -{ - if (m_bEnableNotify) - { - if (wParam == SBT_VSCROLL) - { - switch (msg) - { - case PNM_SETSCROLLINFO: - if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) - { - if (!IsFloatEqual(pInfo->fContentMax, m_fOldMax) || - !IsFloatEqual(pInfo->fContentMin, m_fOldMin)) - { - m_bSizeChanged = TRUE; - if (CPWL_Wnd * pParent = GetParentWindow()) - { - pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0); - } +void CPWL_Note_Edit::OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam, + intptr_t lParam) { + if (m_bEnableNotify) { + if (wParam == SBT_VSCROLL) { + switch (msg) { + case PNM_SETSCROLLINFO: + if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) { + if (!IsFloatEqual(pInfo->fContentMax, m_fOldMax) || + !IsFloatEqual(pInfo->fContentMin, m_fOldMin)) { + m_bSizeChanged = TRUE; + if (CPWL_Wnd* pParent = GetParentWindow()) { + pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0); + } - m_fOldMax = pInfo->fContentMax; - m_fOldMin = pInfo->fContentMin; - return; - } - } - } - } - } + m_fOldMax = pInfo->fContentMax; + m_fOldMin = pInfo->fContentMin; + return; + } + } + } + } + } - CPWL_Edit::OnNotify(pWnd, msg, wParam, lParam); + CPWL_Edit::OnNotify(pWnd, msg, wParam, lParam); - if (m_bEnableNotify) - { - switch (msg) - { - case PNM_SETCARETINFO: - if (PWL_CARET_INFO * pInfo = (PWL_CARET_INFO*)wParam) - { - PWL_CARET_INFO newInfo = *pInfo; - newInfo.bVisible = TRUE; - newInfo.ptHead = ChildToParent(pInfo->ptHead); - newInfo.ptFoot = ChildToParent(pInfo->ptFoot); + if (m_bEnableNotify) { + switch (msg) { + case PNM_SETCARETINFO: + if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) { + PWL_CARET_INFO newInfo = *pInfo; + newInfo.bVisible = TRUE; + newInfo.ptHead = ChildToParent(pInfo->ptHead); + newInfo.ptFoot = ChildToParent(pInfo->ptFoot); - if (CPWL_Wnd * pParent = GetParentWindow()) - { - pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0); - } - } - break; - } - } + if (CPWL_Wnd* pParent = GetParentWindow()) { + pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0); + } + } + break; + } + } } -FX_FLOAT CPWL_Note_Edit::GetItemHeight(FX_FLOAT fLimitWidth) -{ - if (fLimitWidth > 0) - { - if (!m_bSizeChanged) - return m_fOldItemHeight; +FX_FLOAT CPWL_Note_Edit::GetItemHeight(FX_FLOAT fLimitWidth) { + if (fLimitWidth > 0) { + if (!m_bSizeChanged) + return m_fOldItemHeight; - m_bSizeChanged = FALSE; + m_bSizeChanged = FALSE; - EnableNotify(FALSE); - EnableRefresh(FALSE); - m_pEdit->EnableNotify(FALSE); + EnableNotify(FALSE); + EnableRefresh(FALSE); + m_pEdit->EnableNotify(FALSE); - Move(CPDF_Rect(0,0,fLimitWidth,0), TRUE, FALSE); - FX_FLOAT fRet = GetContentRect().Height(); + Move(CPDF_Rect(0, 0, fLimitWidth, 0), TRUE, FALSE); + FX_FLOAT fRet = GetContentRect().Height(); - m_pEdit->EnableNotify(TRUE); - EnableNotify(TRUE); - EnableRefresh(TRUE); + m_pEdit->EnableNotify(TRUE); + EnableNotify(TRUE); + EnableRefresh(TRUE); - return fRet; - } + return fRet; + } - return 0; + return 0; } -FX_FLOAT CPWL_Note_Edit::GetItemLeftMargin() -{ - return POPUP_ITEM_TEXT_INDENT; +FX_FLOAT CPWL_Note_Edit::GetItemLeftMargin() { + return POPUP_ITEM_TEXT_INDENT; } -FX_FLOAT CPWL_Note_Edit::GetItemRightMargin() -{ - return POPUP_ITEM_TEXT_INDENT; +FX_FLOAT CPWL_Note_Edit::GetItemRightMargin() { + return POPUP_ITEM_TEXT_INDENT; } -/* -------------------------------- CPWL_Note_LBBox --------------------------------*/ +/* -------------------------------- CPWL_Note_LBBox + * --------------------------------*/ -CPWL_Note_LBBox::CPWL_Note_LBBox() -{ -} +CPWL_Note_LBBox::CPWL_Note_LBBox() {} -CPWL_Note_LBBox::~CPWL_Note_LBBox() -{ -} +CPWL_Note_LBBox::~CPWL_Note_LBBox() {} -void CPWL_Note_LBBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPDF_Rect rcClient = GetClientRect(); +void CPWL_Note_LBBox::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPDF_Rect rcClient = GetClientRect(); - CFX_GraphStateData gsd; - gsd.m_LineWidth = 1.0f; + CFX_GraphStateData gsd; + gsd.m_LineWidth = 1.0f; - CFX_PathData pathCross; + CFX_PathData pathCross; - pathCross.SetPointCount(4); - pathCross.SetPoint(0, rcClient.left, rcClient.top, FXPT_MOVETO); - pathCross.SetPoint(1, rcClient.right, rcClient.bottom, FXPT_LINETO); - pathCross.SetPoint(2, rcClient.left, rcClient.bottom + rcClient.Height() * 0.5f, FXPT_MOVETO); - pathCross.SetPoint(3, rcClient.left + rcClient.Width() * 0.5f, rcClient.bottom, FXPT_LINETO); + pathCross.SetPointCount(4); + pathCross.SetPoint(0, rcClient.left, rcClient.top, FXPT_MOVETO); + pathCross.SetPoint(1, rcClient.right, rcClient.bottom, FXPT_LINETO); + pathCross.SetPoint(2, rcClient.left, + rcClient.bottom + rcClient.Height() * 0.5f, FXPT_MOVETO); + pathCross.SetPoint(3, rcClient.left + rcClient.Width() * 0.5f, + rcClient.bottom, FXPT_LINETO); - pDevice->DrawPath(&pathCross, pUser2Device, &gsd, - 0, CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), FXFILL_ALTERNATE); + pDevice->DrawPath( + &pathCross, pUser2Device, &gsd, 0, + CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), + FXFILL_ALTERNATE); } -/* -------------------------------- CPWL_Note_RBBox --------------------------------*/ +/* -------------------------------- CPWL_Note_RBBox + * --------------------------------*/ -CPWL_Note_RBBox::CPWL_Note_RBBox() -{ -} +CPWL_Note_RBBox::CPWL_Note_RBBox() {} -CPWL_Note_RBBox::~CPWL_Note_RBBox() -{ -} +CPWL_Note_RBBox::~CPWL_Note_RBBox() {} -void CPWL_Note_RBBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPDF_Rect rcClient = GetClientRect(); +void CPWL_Note_RBBox::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPDF_Rect rcClient = GetClientRect(); - CFX_GraphStateData gsd; - gsd.m_LineWidth = 1.0f; + CFX_GraphStateData gsd; + gsd.m_LineWidth = 1.0f; - CFX_PathData pathCross; + CFX_PathData pathCross; - pathCross.SetPointCount(4); - pathCross.SetPoint(0, rcClient.right, rcClient.top, FXPT_MOVETO); - pathCross.SetPoint(1, rcClient.left, rcClient.bottom, FXPT_LINETO); - pathCross.SetPoint(2, rcClient.right, rcClient.bottom + rcClient.Height() * 0.5f, FXPT_MOVETO); - pathCross.SetPoint(3, rcClient.left + rcClient.Width() * 0.5f, rcClient.bottom, FXPT_LINETO); + pathCross.SetPointCount(4); + pathCross.SetPoint(0, rcClient.right, rcClient.top, FXPT_MOVETO); + pathCross.SetPoint(1, rcClient.left, rcClient.bottom, FXPT_LINETO); + pathCross.SetPoint(2, rcClient.right, + rcClient.bottom + rcClient.Height() * 0.5f, FXPT_MOVETO); + pathCross.SetPoint(3, rcClient.left + rcClient.Width() * 0.5f, + rcClient.bottom, FXPT_LINETO); - pDevice->DrawPath(&pathCross, pUser2Device, &gsd, - 0, CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), FXFILL_ALTERNATE); + pDevice->DrawPath( + &pathCross, pUser2Device, &gsd, 0, + CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), + FXFILL_ALTERNATE); } -/* --------------------------------- CPWL_Note_Icon ---------------------------------- */ +/* --------------------------------- CPWL_Note_Icon + * ---------------------------------- */ -CPWL_Note_Icon::CPWL_Note_Icon() : m_nType(0) -{ -} +CPWL_Note_Icon::CPWL_Note_Icon() : m_nType(0) {} -CPWL_Note_Icon::~CPWL_Note_Icon() -{ -} +CPWL_Note_Icon::~CPWL_Note_Icon() {} -void CPWL_Note_Icon::SetIconType(int32_t nType) -{ - m_nType = nType; +void CPWL_Note_Icon::SetIconType(int32_t nType) { + m_nType = nType; } -void CPWL_Note_Icon::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nType, GetClientRect(), - GetBackgroundColor(), PWL_DEFAULT_BLACKCOLOR, GetTransparency()); +void CPWL_Note_Icon::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nType, GetClientRect(), + GetBackgroundColor(), PWL_DEFAULT_BLACKCOLOR, + GetTransparency()); } -/* --------------------------------- CPWL_Note_CloseBox ---------------------------------- */ +/* --------------------------------- CPWL_Note_CloseBox + * ---------------------------------- */ -CPWL_Note_CloseBox::CPWL_Note_CloseBox() : m_bMouseDown(FALSE) -{ -} +CPWL_Note_CloseBox::CPWL_Note_CloseBox() : m_bMouseDown(FALSE) {} -CPWL_Note_CloseBox::~CPWL_Note_CloseBox() -{ -} +CPWL_Note_CloseBox::~CPWL_Note_CloseBox() {} -void CPWL_Note_CloseBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPWL_Button::DrawThisAppearance(pDevice, pUser2Device); +void CPWL_Note_CloseBox::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPWL_Button::DrawThisAppearance(pDevice, pUser2Device); - CPDF_Rect rcClient = GetClientRect(); - rcClient = CPWL_Utils::DeflateRect(rcClient, 2.0f); + CPDF_Rect rcClient = GetClientRect(); + rcClient = CPWL_Utils::DeflateRect(rcClient, 2.0f); - CFX_GraphStateData gsd; - gsd.m_LineWidth = 1.0f; + CFX_GraphStateData gsd; + gsd.m_LineWidth = 1.0f; - CFX_PathData pathCross; + CFX_PathData pathCross; - if (m_bMouseDown) - { - rcClient.left += 0.5f; - rcClient.right += 0.5f; - rcClient.top -= 0.5f; - rcClient.bottom -= 0.5f; - } + if (m_bMouseDown) { + rcClient.left += 0.5f; + rcClient.right += 0.5f; + rcClient.top -= 0.5f; + rcClient.bottom -= 0.5f; + } - pathCross.SetPointCount(4); - pathCross.SetPoint(0, rcClient.left, rcClient.bottom, FXPT_MOVETO); - pathCross.SetPoint(1, rcClient.right, rcClient.top, FXPT_LINETO); - pathCross.SetPoint(2, rcClient.left, rcClient.top, FXPT_MOVETO); - pathCross.SetPoint(3, rcClient.right, rcClient.bottom, FXPT_LINETO); + pathCross.SetPointCount(4); + pathCross.SetPoint(0, rcClient.left, rcClient.bottom, FXPT_MOVETO); + pathCross.SetPoint(1, rcClient.right, rcClient.top, FXPT_LINETO); + pathCross.SetPoint(2, rcClient.left, rcClient.top, FXPT_MOVETO); + pathCross.SetPoint(3, rcClient.right, rcClient.bottom, FXPT_LINETO); - pDevice->DrawPath(&pathCross, pUser2Device, &gsd, - 0, CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), FXFILL_ALTERNATE); + pDevice->DrawPath( + &pathCross, pUser2Device, &gsd, 0, + CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), + FXFILL_ALTERNATE); } -FX_BOOL CPWL_Note_CloseBox::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) -{ - SetBorderStyle(PBS_INSET); - InvalidateRect(NULL); +FX_BOOL CPWL_Note_CloseBox::OnLButtonDown(const CPDF_Point& point, + FX_DWORD nFlag) { + SetBorderStyle(PBS_INSET); + InvalidateRect(NULL); - m_bMouseDown = TRUE; + m_bMouseDown = TRUE; - return CPWL_Button::OnLButtonDown(point,nFlag); + return CPWL_Button::OnLButtonDown(point, nFlag); } -FX_BOOL CPWL_Note_CloseBox::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - m_bMouseDown = FALSE; +FX_BOOL CPWL_Note_CloseBox::OnLButtonUp(const CPDF_Point& point, + FX_DWORD nFlag) { + m_bMouseDown = FALSE; - SetBorderStyle(PBS_BEVELED); - InvalidateRect(NULL); + SetBorderStyle(PBS_BEVELED); + InvalidateRect(NULL); - return CPWL_Button::OnLButtonUp(point,nFlag); + return CPWL_Button::OnLButtonUp(point, nFlag); } -/* ------------------------------ CPWL_Note_Contents ------------------------------- */ +/* ------------------------------ CPWL_Note_Contents + * ------------------------------- */ + +CPWL_Note_Contents::CPWL_Note_Contents() : m_pEdit(NULL) {} + +CPWL_Note_Contents::~CPWL_Note_Contents() {} -CPWL_Note_Contents::CPWL_Note_Contents() : m_pEdit(NULL) -{ +CFX_ByteString CPWL_Note_Contents::GetClassName() const { + return "CPWL_Note_Contents"; } -CPWL_Note_Contents::~CPWL_Note_Contents() -{ +void CPWL_Note_Contents::CreateChildWnd(const PWL_CREATEPARAM& cp) { + m_pEdit = new CPWL_Note_Edit; + PWL_CREATEPARAM ecp = cp; + ecp.pParentWnd = this; + ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_MULTILINE | PES_AUTORETURN | + PES_TEXTOVERFLOW | PES_UNDO | PES_SPELLCHECK; + + m_pEdit->EnableNotify(FALSE); + m_pEdit->Create(ecp); + m_pEdit->EnableNotify(TRUE); } -CFX_ByteString CPWL_Note_Contents::GetClassName() const -{ - return "CPWL_Note_Contents"; +void CPWL_Note_Contents::SetText(const CFX_WideString& sText) { + if (m_pEdit) { + m_pEdit->EnableNotify(FALSE); + m_pEdit->SetText(sText.c_str()); + m_pEdit->EnableNotify(TRUE); + OnNotify(m_pEdit, PNM_NOTEEDITCHANGED, 0, 0); + } } -void CPWL_Note_Contents::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - m_pEdit = new CPWL_Note_Edit; - PWL_CREATEPARAM ecp = cp; - ecp.pParentWnd = this; - ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_MULTILINE | PES_AUTORETURN | PES_TEXTOVERFLOW | PES_UNDO | PES_SPELLCHECK; +CFX_WideString CPWL_Note_Contents::GetText() const { + if (m_pEdit) + return m_pEdit->GetText(); + + return L""; +} + +CPWL_NoteItem* CPWL_Note_Contents::CreateSubItem() { + CPWL_NoteItem* pNoteItem = new CPWL_NoteItem; + PWL_CREATEPARAM icp = GetCreationParam(); + icp.pParentWnd = this; + icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_BACKGROUND; + pNoteItem->Create(icp); + + pNoteItem->OnCreateNoteItem(); + + pNoteItem->ResetSubjectName(m_aChildren.GetSize() - 1); + + FX_SYSTEMTIME st; + if (IFX_SystemHandler* pSH = GetSystemHandler()) + st = pSH->GetLocalTime(); + pNoteItem->SetDateTime(st); + + pNoteItem->SetContents(L""); + + OnNotify(pNoteItem, PNM_NOTEEDITCHANGED, 0, 0); - m_pEdit->EnableNotify(FALSE); - m_pEdit->Create(ecp); - m_pEdit->EnableNotify(TRUE); + return pNoteItem; } -void CPWL_Note_Contents::SetText(const CFX_WideString& sText) -{ - if (m_pEdit) - { - m_pEdit->EnableNotify(FALSE); - m_pEdit->SetText(sText.c_str()); - m_pEdit->EnableNotify(TRUE); - OnNotify(m_pEdit, PNM_NOTEEDITCHANGED, 0, 0); - } +int32_t CPWL_Note_Contents::CountSubItems() const { + return m_aChildren.GetSize() - 1; } -CFX_WideString CPWL_Note_Contents::GetText() const -{ - if (m_pEdit) - return m_pEdit->GetText(); +IPWL_NoteItem* CPWL_Note_Contents::GetSubItems(int32_t index) const { + int32_t nIndex = index + 1; - return L""; + if (nIndex > 0 && nIndex < m_aChildren.GetSize()) + if (CPWL_Wnd* pChild = m_aChildren.GetAt(nIndex)) { + ASSERT(pChild->GetClassName() == "CPWL_NoteItem"); + CPWL_NoteItem* pItem = (CPWL_NoteItem*)pChild; + return pItem; + } + return NULL; } -CPWL_NoteItem* CPWL_Note_Contents::CreateSubItem() -{ - CPWL_NoteItem* pNoteItem = new CPWL_NoteItem; - PWL_CREATEPARAM icp = GetCreationParam(); - icp.pParentWnd = this; - icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_BACKGROUND; - pNoteItem->Create(icp); +void CPWL_Note_Contents::DeleteSubItem(IPWL_NoteItem* pNoteItem) { + int32_t nIndex = GetItemIndex((CPWL_NoteItem*)pNoteItem); - pNoteItem->OnCreateNoteItem(); + if (nIndex > 0) { + if (CPWL_NoteItem* pPWLNoteItem = (CPWL_NoteItem*)pNoteItem) { + pPWLNoteItem->KillFocus(); + pPWLNoteItem->Destroy(); + delete pPWLNoteItem; + } - pNoteItem->ResetSubjectName(m_aChildren.GetSize() - 1); + for (int32_t i = nIndex, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + ASSERT(pChild->GetClassName() == "CPWL_NoteItem"); + CPWL_NoteItem* pItem = (CPWL_NoteItem*)pChild; + pItem->ResetSubjectName(i); + } + } - FX_SYSTEMTIME st; - if (IFX_SystemHandler* pSH = GetSystemHandler()) - st = pSH->GetLocalTime(); - pNoteItem->SetDateTime(st); + OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0); + } +} + +IPWL_NoteItem* CPWL_Note_Contents::GetHitNoteItem(const CPDF_Point& point) { + CPDF_Point pt = ParentToChild(point); - pNoteItem->SetContents(L""); + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + if (pChild->GetClassName() == "CPWL_NoteItem") { + CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild; + if (IPWL_NoteItem* pRet = pNoteItem->GetHitNoteItem(pt)) + return pRet; + } + } + } + return NULL; +} + +void CPWL_Note_Contents::OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam, + intptr_t lParam) { + switch (msg) { + case PNM_NOTEEDITCHANGED: { + int32_t nIndex = GetItemIndex(pWnd); + if (nIndex < 0) + nIndex = 0; + + m_pEdit->EnableNotify(FALSE); + ResetContent(nIndex); + m_pEdit->EnableNotify(TRUE); + + for (int32_t i = nIndex + 1, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) + pChild->OnNotify(this, PNM_NOTERESET, 0, 0); + } + + if (CPWL_Wnd* pParent = GetParentWindow()) { + pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0); + } + } + return; + case PNM_SCROLLWINDOW: + SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam)); + ResetFace(); + InvalidateRect(NULL); + return; + case PNM_SETCARETINFO: + if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) { + PWL_CARET_INFO newInfo = *pInfo; + newInfo.bVisible = TRUE; + newInfo.ptHead = ChildToParent(pInfo->ptHead); + newInfo.ptFoot = ChildToParent(pInfo->ptFoot); + + if (CPWL_Wnd* pParent = GetParentWindow()) { + pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0); + } + } + return; + case PNM_NOTERESET: { + m_pEdit->EnableNotify(FALSE); + ResetContent(0); + m_pEdit->EnableNotify(TRUE); + + for (int32_t i = 1, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) + pChild->OnNotify(this, PNM_NOTERESET, 0, 0); + } + + m_pEdit->EnableNotify(FALSE); + ResetContent(0); + m_pEdit->EnableNotify(TRUE); + } + return; + } + + CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); +} + +FX_BOOL CPWL_Note_Contents::OnLButtonDown(const CPDF_Point& point, + FX_DWORD nFlag) { + if (CPWL_Wnd::OnLButtonDown(point, nFlag)) + return TRUE; + + if (!m_pEdit->IsFocused()) { + m_pEdit->SetFocus(); + } + + return TRUE; +} + +void CPWL_Note_Contents::SetEditFocus(FX_BOOL bLast) { + if (!m_pEdit->IsFocused()) { + m_pEdit->SetFocus(); + m_pEdit->SetCaret(bLast ? m_pEdit->GetTotalWords() : 0); + } +} + +CPWL_Edit* CPWL_Note_Contents::GetEdit() const { + return m_pEdit; +} + +void CPWL_Note_Contents::EnableModify(FX_BOOL bEnabled) { + if (!bEnabled) + m_pEdit->AddFlag(PWS_READONLY); + else + m_pEdit->RemoveFlag(PWS_READONLY); + + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + if (pChild->GetClassName() == "CPWL_NoteItem") { + CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild; + pNoteItem->EnableModify(bEnabled); + } + } + } +} + +void CPWL_Note_Contents::EnableRead(FX_BOOL bEnabled) { + if (!bEnabled) + m_pEdit->AddFlag(PES_NOREAD); + else + m_pEdit->RemoveFlag(PES_NOREAD); + + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + if (pChild->GetClassName() == "CPWL_NoteItem") { + CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild; + pNoteItem->EnableRead(bEnabled); + } + } + } +} + +/* ---------------------------------- CPWL_NoteItem + * ---------------------------------- */ + +CPWL_NoteItem::CPWL_NoteItem() + : m_pSubject(NULL), + m_pDateTime(NULL), + m_pContents(NULL), + m_pPrivateData(NULL), + m_sAuthor(L""), + m_fOldItemHeight(0.0f), + m_bSizeChanged(FALSE), + m_bAllowModify(TRUE) {} + +CPWL_NoteItem::~CPWL_NoteItem() {} + +CFX_ByteString CPWL_NoteItem::GetClassName() const { + return "CPWL_NoteItem"; +} + +void CPWL_NoteItem::CreateChildWnd(const PWL_CREATEPARAM& cp) { + CPWL_Color sTextColor; + + if (CPWL_Utils::IsBlackOrWhite(GetBackgroundColor())) + sTextColor = PWL_DEFAULT_WHITECOLOR; + else + sTextColor = PWL_DEFAULT_BLACKCOLOR; + + m_pSubject = new CPWL_Label; + PWL_CREATEPARAM scp = cp; + scp.pParentWnd = this; + scp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_LEFT | PES_TOP; + scp.sTextColor = sTextColor; + m_pSubject->Create(scp); + + m_pDateTime = new CPWL_Label; + PWL_CREATEPARAM dcp = cp; + dcp.pParentWnd = this; + dcp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_RIGHT | PES_TOP; + dcp.sTextColor = sTextColor; + m_pDateTime->Create(dcp); + + m_pContents = new CPWL_Note_Contents; + PWL_CREATEPARAM ccp = cp; + ccp.pParentWnd = this; + // ccp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR; + ccp.sBackgroundColor = + CPWL_Color(COLORTYPE_RGB, 240 / 255.0f, 240 / 255.0f, 240 / 255.0f); + ccp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BACKGROUND; + m_pContents->Create(ccp); + m_pContents->SetItemSpace(POPUP_ITEM_SPACE); + m_pContents->SetTopSpace(POPUP_ITEM_SPACE); + m_pContents->SetBottomSpace(POPUP_ITEM_SPACE); +} + +void CPWL_NoteItem::RePosChildWnd() { + if (IsValid()) { + ASSERT(m_pSubject != NULL); + ASSERT(m_pDateTime != NULL); + ASSERT(m_pContents != NULL); + + CPDF_Rect rcClient = GetClientRect(); + + CPDF_Rect rcSubject = rcClient; + rcSubject.left += POPUP_ITEM_TEXT_INDENT; + rcSubject.top = rcClient.top; + rcSubject.right = + PWL_MIN(rcSubject.left + m_pSubject->GetContentRect().Width() + 1.0f, + rcClient.right); + rcSubject.bottom = rcSubject.top - m_pSubject->GetContentRect().Height(); + rcSubject.Normalize(); + m_pSubject->Move(rcSubject, TRUE, FALSE); + m_pSubject->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcSubject)); + + CPDF_Rect rcDate = rcClient; + rcDate.right -= POPUP_ITEM_TEXT_INDENT; + rcDate.left = + PWL_MAX(rcDate.right - m_pDateTime->GetContentRect().Width() - 1.0f, + rcSubject.right); + rcDate.bottom = rcDate.top - m_pDateTime->GetContentRect().Height(); + rcDate.Normalize(); + m_pDateTime->Move(rcDate, TRUE, FALSE); + m_pDateTime->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcDate)); + + CPDF_Rect rcContents = rcClient; + rcContents.left += 1.0f; + rcContents.right -= 1.0f; + rcContents.top = rcDate.bottom - POPUP_ITEM_HEAD_BOTTOM; + rcContents.bottom += POPUP_ITEM_BOTTOMWIDTH; + rcContents.Normalize(); + m_pContents->Move(rcContents, TRUE, FALSE); + m_pContents->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcContents)); + } + + SetClipRect(CPWL_Utils::InflateRect(GetWindowRect(), 1.0f)); +} + +void CPWL_NoteItem::SetPrivateData(void* pData) { + m_pPrivateData = pData; +} + +void CPWL_NoteItem::SetBkColor(const CPWL_Color& color) { + CPWL_Color sBK = color; + SetBackgroundColor(sBK); + + CPWL_Color sTextColor; + + if (CPWL_Utils::IsBlackOrWhite(sBK)) + sTextColor = PWL_DEFAULT_WHITECOLOR; + else + sTextColor = PWL_DEFAULT_BLACKCOLOR; - OnNotify(pNoteItem, PNM_NOTEEDITCHANGED, 0, 0); + SetTextColor(sTextColor); + if (m_pSubject) + m_pSubject->SetTextColor(sTextColor); + if (m_pDateTime) + m_pDateTime->SetTextColor(sTextColor); - return pNoteItem; + InvalidateRect(nullptr); + + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + pNotify->OnSetBkColor(this); + } } -int32_t CPWL_Note_Contents::CountSubItems() const -{ - return m_aChildren.GetSize() - 1; +void CPWL_NoteItem::SetSubjectName(const CFX_WideString& sName) { + if (m_pSubject) { + m_pSubject->SetText(sName.c_str()); + } + + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + pNotify->OnSetSubjectName(this); + } } -IPWL_NoteItem* CPWL_Note_Contents::GetSubItems(int32_t index) const -{ - int32_t nIndex = index + 1; +void CPWL_NoteItem::SetAuthorName(const CFX_WideString& sName) { + m_sAuthor = sName; + ResetSubjectName(-1); - if (nIndex > 0 && nIndex < m_aChildren.GetSize()) - if (CPWL_Wnd* pChild = m_aChildren.GetAt(nIndex)) - { - ASSERT(pChild->GetClassName() == "CPWL_NoteItem"); - CPWL_NoteItem* pItem = (CPWL_NoteItem*)pChild; - return pItem; - } - return NULL; -} - -void CPWL_Note_Contents::DeleteSubItem(IPWL_NoteItem* pNoteItem) -{ - int32_t nIndex = GetItemIndex((CPWL_NoteItem*)pNoteItem); - - if (nIndex > 0) - { - if (CPWL_NoteItem* pPWLNoteItem = (CPWL_NoteItem*)pNoteItem) - { - pPWLNoteItem->KillFocus(); - pPWLNoteItem->Destroy(); - delete pPWLNoteItem; - } - - for (int32_t i=nIndex,sz=m_aChildren.GetSize(); iGetClassName() == "CPWL_NoteItem"); - CPWL_NoteItem* pItem = (CPWL_NoteItem*)pChild; - pItem->ResetSubjectName(i); - } - } - - OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0); - } -} - -IPWL_NoteItem* CPWL_Note_Contents::GetHitNoteItem(const CPDF_Point& point) -{ - CPDF_Point pt = ParentToChild(point); - - for (int32_t i=0,sz=m_aChildren.GetSize(); iGetClassName() == "CPWL_NoteItem") - { - CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild; - if (IPWL_NoteItem* pRet = pNoteItem->GetHitNoteItem(pt)) - return pRet; - } - } - } - return NULL; -} - -void CPWL_Note_Contents::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) -{ - switch (msg) - { - case PNM_NOTEEDITCHANGED: - { - int32_t nIndex = GetItemIndex(pWnd); - if (nIndex < 0) nIndex = 0; - - m_pEdit->EnableNotify(FALSE); - ResetContent(nIndex); - m_pEdit->EnableNotify(TRUE); - - for (int32_t i=nIndex+1, sz=m_aChildren.GetSize(); iOnNotify(this, PNM_NOTERESET, 0, 0); - } - - if (CPWL_Wnd * pParent = GetParentWindow()) - { - pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0); - } - } - return; - case PNM_SCROLLWINDOW: - SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam)); - ResetFace(); - InvalidateRect(NULL); - return; - case PNM_SETCARETINFO: - if (PWL_CARET_INFO * pInfo = (PWL_CARET_INFO*)wParam) - { - PWL_CARET_INFO newInfo = *pInfo; - newInfo.bVisible = TRUE; - newInfo.ptHead = ChildToParent(pInfo->ptHead); - newInfo.ptFoot = ChildToParent(pInfo->ptFoot); - - if (CPWL_Wnd * pParent = GetParentWindow()) - { - pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0); - } - } - return; - case PNM_NOTERESET: - { - m_pEdit->EnableNotify(FALSE); - ResetContent(0); - m_pEdit->EnableNotify(TRUE); - - for (int32_t i=1, sz=m_aChildren.GetSize(); iOnNotify(this, PNM_NOTERESET, 0, 0); - } - - m_pEdit->EnableNotify(FALSE); - ResetContent(0); - m_pEdit->EnableNotify(TRUE); - } - return; - } - - CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); -} - -FX_BOOL CPWL_Note_Contents::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) -{ - if (CPWL_Wnd::OnLButtonDown(point,nFlag)) return TRUE; - - if (!m_pEdit->IsFocused()) - { - m_pEdit->SetFocus(); - } - - return TRUE; -} - -void CPWL_Note_Contents::SetEditFocus(FX_BOOL bLast) -{ - if (!m_pEdit->IsFocused()) - { - m_pEdit->SetFocus(); - m_pEdit->SetCaret(bLast ? m_pEdit->GetTotalWords() : 0); - } -} - -CPWL_Edit* CPWL_Note_Contents::GetEdit() const -{ - return m_pEdit; -} - -void CPWL_Note_Contents::EnableModify(FX_BOOL bEnabled) -{ - if (!bEnabled) - m_pEdit->AddFlag(PWS_READONLY); - else - m_pEdit->RemoveFlag(PWS_READONLY); - - for (int32_t i=0,sz=m_aChildren.GetSize(); iGetClassName() == "CPWL_NoteItem") - { - CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild; - pNoteItem->EnableModify(bEnabled); - } - } - } -} - -void CPWL_Note_Contents::EnableRead(FX_BOOL bEnabled) -{ - if (!bEnabled) - m_pEdit->AddFlag(PES_NOREAD); - else - m_pEdit->RemoveFlag(PES_NOREAD); - - for (int32_t i=0,sz=m_aChildren.GetSize(); iGetClassName() == "CPWL_NoteItem") - { - CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild; - pNoteItem->EnableRead(bEnabled); - } - } - } -} - -/* ---------------------------------- CPWL_NoteItem ---------------------------------- */ - -CPWL_NoteItem::CPWL_NoteItem() : - m_pSubject(NULL), - m_pDateTime(NULL), - m_pContents(NULL), - m_pPrivateData(NULL), - m_sAuthor(L""), - m_fOldItemHeight(0.0f), - m_bSizeChanged(FALSE), - m_bAllowModify(TRUE) -{ -} - -CPWL_NoteItem::~CPWL_NoteItem() -{ -} - -CFX_ByteString CPWL_NoteItem::GetClassName() const -{ - return "CPWL_NoteItem"; -} - -void CPWL_NoteItem::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - CPWL_Color sTextColor; - - if (CPWL_Utils::IsBlackOrWhite(GetBackgroundColor())) - sTextColor = PWL_DEFAULT_WHITECOLOR; - else - sTextColor = PWL_DEFAULT_BLACKCOLOR; - - m_pSubject = new CPWL_Label; - PWL_CREATEPARAM scp = cp; - scp.pParentWnd = this; - scp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_LEFT | PES_TOP; - scp.sTextColor = sTextColor; - m_pSubject->Create(scp); - - m_pDateTime = new CPWL_Label; - PWL_CREATEPARAM dcp = cp; - dcp.pParentWnd = this; - dcp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_RIGHT | PES_TOP; - dcp.sTextColor = sTextColor; - m_pDateTime->Create(dcp); - - m_pContents = new CPWL_Note_Contents; - PWL_CREATEPARAM ccp = cp; - ccp.pParentWnd = this; - //ccp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR; - ccp.sBackgroundColor = CPWL_Color(COLORTYPE_RGB, 240/255.0f, 240/255.0f, 240/255.0f); - ccp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BACKGROUND; - m_pContents->Create(ccp); - m_pContents->SetItemSpace(POPUP_ITEM_SPACE); - m_pContents->SetTopSpace(POPUP_ITEM_SPACE); - m_pContents->SetBottomSpace(POPUP_ITEM_SPACE); -} - -void CPWL_NoteItem::RePosChildWnd() -{ - if (IsValid()) - { - ASSERT(m_pSubject != NULL); - ASSERT(m_pDateTime != NULL); - ASSERT(m_pContents != NULL); - - CPDF_Rect rcClient = GetClientRect(); - - CPDF_Rect rcSubject = rcClient; - rcSubject.left += POPUP_ITEM_TEXT_INDENT; - rcSubject.top = rcClient.top; - rcSubject.right = PWL_MIN(rcSubject.left + m_pSubject->GetContentRect().Width() + 1.0f, rcClient.right); - rcSubject.bottom = rcSubject.top - m_pSubject->GetContentRect().Height(); - rcSubject.Normalize(); - m_pSubject->Move(rcSubject, TRUE, FALSE); - m_pSubject->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcSubject)); - - CPDF_Rect rcDate = rcClient; - rcDate.right -= POPUP_ITEM_TEXT_INDENT; - rcDate.left = PWL_MAX(rcDate.right - m_pDateTime->GetContentRect().Width() - 1.0f, rcSubject.right); - rcDate.bottom = rcDate.top - m_pDateTime->GetContentRect().Height(); - rcDate.Normalize(); - m_pDateTime->Move(rcDate, TRUE, FALSE); - m_pDateTime->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcDate)); - - CPDF_Rect rcContents = rcClient; - rcContents.left += 1.0f; - rcContents.right -= 1.0f; - rcContents.top = rcDate.bottom - POPUP_ITEM_HEAD_BOTTOM; - rcContents.bottom += POPUP_ITEM_BOTTOMWIDTH; - rcContents.Normalize(); - m_pContents->Move(rcContents, TRUE, FALSE); - m_pContents->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcContents)); - } - - SetClipRect(CPWL_Utils::InflateRect(GetWindowRect(),1.0f)); -} - -void CPWL_NoteItem::SetPrivateData(void* pData) -{ - m_pPrivateData = pData; -} - -void CPWL_NoteItem::SetBkColor(const CPWL_Color& color) -{ - CPWL_Color sBK = color; - SetBackgroundColor(sBK); - - CPWL_Color sTextColor; - - if (CPWL_Utils::IsBlackOrWhite(sBK)) - sTextColor = PWL_DEFAULT_WHITECOLOR; - else - sTextColor = PWL_DEFAULT_BLACKCOLOR; - - SetTextColor(sTextColor); - if (m_pSubject) - m_pSubject->SetTextColor(sTextColor); - if (m_pDateTime) - m_pDateTime->SetTextColor(sTextColor); - - InvalidateRect(nullptr); - - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - pNotify->OnSetBkColor(this); - } -} - -void CPWL_NoteItem::SetSubjectName(const CFX_WideString& sName) -{ - if (m_pSubject) - { - m_pSubject->SetText(sName.c_str()); - } - - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - pNotify->OnSetSubjectName(this); - } -} - -void CPWL_NoteItem::SetAuthorName(const CFX_WideString& sName) -{ - m_sAuthor = sName; - ResetSubjectName(-1); - - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - pNotify->OnSetAuthorName(this); - } -} + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + pNotify->OnSetAuthorName(this); + } +} -void CPWL_NoteItem::ResetSubjectName(int32_t nItemIndex) -{ - if (nItemIndex < 0) - { - if (CPWL_Wnd* pParent = GetParentWindow()) - { - ASSERT(pParent->GetClassName() == "CPWL_Note_Contents"); +void CPWL_NoteItem::ResetSubjectName(int32_t nItemIndex) { + if (nItemIndex < 0) { + if (CPWL_Wnd* pParent = GetParentWindow()) { + ASSERT(pParent->GetClassName() == "CPWL_Note_Contents"); - CPWL_Note_Contents* pContents = (CPWL_Note_Contents*)pParent; - nItemIndex = pContents->GetItemIndex(this); - } - } + CPWL_Note_Contents* pContents = (CPWL_Note_Contents*)pParent; + nItemIndex = pContents->GetItemIndex(this); + } + } - const CPWL_Note* pNote = GetNote(); - ASSERT(pNote != NULL); + const CPWL_Note* pNote = GetNote(); + ASSERT(pNote != NULL); - CFX_WideString sSubject; - sSubject.Format(pNote->GetReplyString().c_str(), nItemIndex); + CFX_WideString sSubject; + sSubject.Format(pNote->GetReplyString().c_str(), nItemIndex); - if (!m_sAuthor.IsEmpty()) - { - sSubject += L" - "; - sSubject += m_sAuthor; - } - SetSubjectName(sSubject); - RePosChildWnd(); + if (!m_sAuthor.IsEmpty()) { + sSubject += L" - "; + sSubject += m_sAuthor; + } + SetSubjectName(sSubject); + RePosChildWnd(); } -void CPWL_NoteItem::SetDateTime(FX_SYSTEMTIME time) -{ - m_dtNote = time; +void CPWL_NoteItem::SetDateTime(FX_SYSTEMTIME time) { + m_dtNote = time; - CFX_WideString swTime; - swTime.Format(L"%04d-%02d-%02d %02d:%02d:%02d", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond); - if (m_pDateTime) - { - m_pDateTime->SetText(swTime.c_str()); - } + CFX_WideString swTime; + swTime.Format(L"%04d-%02d-%02d %02d:%02d:%02d", time.wYear, time.wMonth, + time.wDay, time.wHour, time.wMinute, time.wSecond); + if (m_pDateTime) { + m_pDateTime->SetText(swTime.c_str()); + } - RePosChildWnd(); + RePosChildWnd(); - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - pNotify->OnSetDateTime(this); - } + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + pNotify->OnSetDateTime(this); + } } -void CPWL_NoteItem::SetContents(const CFX_WideString& sContents) -{ - if (m_pContents) - { - m_pContents->SetText(sContents); - } +void CPWL_NoteItem::SetContents(const CFX_WideString& sContents) { + if (m_pContents) { + m_pContents->SetText(sContents); + } - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - pNotify->OnSetContents(this); - } + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + pNotify->OnSetContents(this); + } } -CPWL_NoteItem* CPWL_NoteItem::GetParentNoteItem() const -{ - if (CPWL_Wnd* pParent = GetParentWindow()) - { - if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) - { - ASSERT(pGrand->GetClassName() == "CPWL_NoteItem"); - return (CPWL_NoteItem*)pGrand; - } - } +CPWL_NoteItem* CPWL_NoteItem::GetParentNoteItem() const { + if (CPWL_Wnd* pParent = GetParentWindow()) { + if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) { + ASSERT(pGrand->GetClassName() == "CPWL_NoteItem"); + return (CPWL_NoteItem*)pGrand; + } + } - return NULL; + return NULL; } -IPWL_NoteItem* CPWL_NoteItem::GetParentItem() const -{ - return GetParentNoteItem(); +IPWL_NoteItem* CPWL_NoteItem::GetParentItem() const { + return GetParentNoteItem(); } -CPWL_Edit* CPWL_NoteItem::GetEdit() const -{ - if (m_pContents) - return m_pContents->GetEdit(); - return NULL; +CPWL_Edit* CPWL_NoteItem::GetEdit() const { + if (m_pContents) + return m_pContents->GetEdit(); + return NULL; } -void* CPWL_NoteItem::GetPrivateData() const -{ - return m_pPrivateData; +void* CPWL_NoteItem::GetPrivateData() const { + return m_pPrivateData; } -CFX_WideString CPWL_NoteItem::GetAuthorName() const -{ - return m_sAuthor; +CFX_WideString CPWL_NoteItem::GetAuthorName() const { + return m_sAuthor; } -CPWL_Color CPWL_NoteItem::GetBkColor() const -{ - return GetBackgroundColor(); +CPWL_Color CPWL_NoteItem::GetBkColor() const { + return GetBackgroundColor(); } -CFX_WideString CPWL_NoteItem::GetContents() const -{ - if (m_pContents) - return m_pContents->GetText(); +CFX_WideString CPWL_NoteItem::GetContents() const { + if (m_pContents) + return m_pContents->GetText(); - return L""; + return L""; } -FX_SYSTEMTIME CPWL_NoteItem::GetDateTime() const -{ - return m_dtNote; +FX_SYSTEMTIME CPWL_NoteItem::GetDateTime() const { + return m_dtNote; } -CFX_WideString CPWL_NoteItem::GetSubjectName() const -{ - if (m_pSubject) - return m_pSubject->GetText(); +CFX_WideString CPWL_NoteItem::GetSubjectName() const { + if (m_pSubject) + return m_pSubject->GetText(); - return L""; + return L""; } -CPWL_NoteItem* CPWL_NoteItem::CreateNoteItem() -{ - if (m_pContents) - return m_pContents->CreateSubItem(); +CPWL_NoteItem* CPWL_NoteItem::CreateNoteItem() { + if (m_pContents) + return m_pContents->CreateSubItem(); - return NULL; + return NULL; } -IPWL_NoteItem* CPWL_NoteItem::CreateSubItem() -{ - return CreateNoteItem(); +IPWL_NoteItem* CPWL_NoteItem::CreateSubItem() { + return CreateNoteItem(); } -int32_t CPWL_NoteItem::CountSubItems() const -{ - if (m_pContents) - return m_pContents->CountSubItems(); +int32_t CPWL_NoteItem::CountSubItems() const { + if (m_pContents) + return m_pContents->CountSubItems(); - return 0; + return 0; } -IPWL_NoteItem* CPWL_NoteItem::GetSubItems(int32_t index) const -{ - if (m_pContents) - return m_pContents->GetSubItems(index); +IPWL_NoteItem* CPWL_NoteItem::GetSubItems(int32_t index) const { + if (m_pContents) + return m_pContents->GetSubItems(index); - return NULL; + return NULL; } -void CPWL_NoteItem::DeleteSubItem(IPWL_NoteItem* pNoteItem) -{ - KillFocus(); +void CPWL_NoteItem::DeleteSubItem(IPWL_NoteItem* pNoteItem) { + KillFocus(); - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - pNotify->OnItemDelete(pNoteItem); - } + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + pNotify->OnItemDelete(pNoteItem); + } - if (m_pContents) - m_pContents->DeleteSubItem(pNoteItem); + if (m_pContents) + m_pContents->DeleteSubItem(pNoteItem); } -IPWL_NoteItem* CPWL_NoteItem::GetHitNoteItem(const CPDF_Point& point) -{ - CPDF_Point pt = ParentToChild(point); +IPWL_NoteItem* CPWL_NoteItem::GetHitNoteItem(const CPDF_Point& point) { + CPDF_Point pt = ParentToChild(point); - if (WndHitTest(pt)) - { - if (m_pContents) - { - if (IPWL_NoteItem* pNoteItem = m_pContents->GetHitNoteItem(pt)) - return pNoteItem; - } + if (WndHitTest(pt)) { + if (m_pContents) { + if (IPWL_NoteItem* pNoteItem = m_pContents->GetHitNoteItem(pt)) + return pNoteItem; + } - return this; - } + return this; + } - return NULL; + return NULL; } -IPWL_NoteItem* CPWL_NoteItem::GetFocusedNoteItem() const -{ - if (const CPWL_Wnd* pWnd = GetFocused()) - { - if (pWnd->GetClassName() == "CPWL_Edit") - { - if (CPWL_Wnd* pParent = pWnd->GetParentWindow()) - { - ASSERT(pParent->GetClassName() == "CPWL_Note_Contents"); +IPWL_NoteItem* CPWL_NoteItem::GetFocusedNoteItem() const { + if (const CPWL_Wnd* pWnd = GetFocused()) { + if (pWnd->GetClassName() == "CPWL_Edit") { + if (CPWL_Wnd* pParent = pWnd->GetParentWindow()) { + ASSERT(pParent->GetClassName() == "CPWL_Note_Contents"); - if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) - { - ASSERT(pGrand->GetClassName() == "CPWL_NoteItem"); - return (CPWL_NoteItem*)pGrand; - } - } - } - } + if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) { + ASSERT(pGrand->GetClassName() == "CPWL_NoteItem"); + return (CPWL_NoteItem*)pGrand; + } + } + } + } - return NULL; + return NULL; } -FX_FLOAT CPWL_NoteItem::GetItemHeight(FX_FLOAT fLimitWidth) -{ - if (fLimitWidth > 0) - { - if (!m_bSizeChanged) - return m_fOldItemHeight; +FX_FLOAT CPWL_NoteItem::GetItemHeight(FX_FLOAT fLimitWidth) { + if (fLimitWidth > 0) { + if (!m_bSizeChanged) + return m_fOldItemHeight; + + m_bSizeChanged = FALSE; - m_bSizeChanged = FALSE; + ASSERT(m_pSubject != NULL); + ASSERT(m_pDateTime != NULL); + ASSERT(m_pContents != NULL); - ASSERT(m_pSubject != NULL); - ASSERT(m_pDateTime != NULL); - ASSERT(m_pContents != NULL); + FX_FLOAT fRet = m_pDateTime->GetContentRect().Height(); + FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); + if (fLimitWidth > fBorderWidth * 2) + fRet += m_pContents->GetContentsHeight(fLimitWidth - fBorderWidth * 2); + fRet += POPUP_ITEM_HEAD_BOTTOM + POPUP_ITEM_BOTTOMWIDTH + fBorderWidth * 2; - FX_FLOAT fRet = m_pDateTime->GetContentRect().Height(); - FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth(); - if (fLimitWidth > fBorderWidth * 2) - fRet += m_pContents->GetContentsHeight(fLimitWidth - fBorderWidth * 2); - fRet += POPUP_ITEM_HEAD_BOTTOM + POPUP_ITEM_BOTTOMWIDTH + fBorderWidth * 2; + return m_fOldItemHeight = fRet; + } - return m_fOldItemHeight = fRet; - } + return 0; +} - return 0; +FX_FLOAT CPWL_NoteItem::GetItemLeftMargin() { + return POPUP_ITEM_SIDEMARGIN; } -FX_FLOAT CPWL_NoteItem::GetItemLeftMargin() -{ - return POPUP_ITEM_SIDEMARGIN; +FX_FLOAT CPWL_NoteItem::GetItemRightMargin() { + return POPUP_ITEM_SIDEMARGIN; } -FX_FLOAT CPWL_NoteItem::GetItemRightMargin() -{ - return POPUP_ITEM_SIDEMARGIN; +FX_BOOL CPWL_NoteItem::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { + if (!m_pContents->WndHitTest(m_pContents->ParentToChild(point))) { + SetNoteFocus(FALSE); + } + + CPWL_Wnd::OnLButtonDown(point, nFlag); + + return TRUE; +} + +FX_BOOL CPWL_NoteItem::OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + if (!m_pContents->WndHitTest(m_pContents->ParentToChild(point))) { + SetNoteFocus(FALSE); + PopupNoteItemMenu(point); + + return TRUE; + } + + return CPWL_Wnd::OnRButtonUp(point, nFlag); } -FX_BOOL CPWL_NoteItem::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) -{ - if (!m_pContents->WndHitTest(m_pContents->ParentToChild(point))) - { - SetNoteFocus(FALSE); - } +void CPWL_NoteItem::OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam, + intptr_t lParam) { + switch (msg) { + case PNM_NOTEEDITCHANGED: + m_bSizeChanged = TRUE; - CPWL_Wnd::OnLButtonDown(point,nFlag); + if (CPWL_Wnd* pParent = GetParentWindow()) { + pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0); + } + return; + case PNM_SETCARETINFO: + if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) { + PWL_CARET_INFO newInfo = *pInfo; + newInfo.bVisible = TRUE; + newInfo.ptHead = ChildToParent(pInfo->ptHead); + newInfo.ptFoot = ChildToParent(pInfo->ptFoot); - return TRUE; + if (CPWL_Wnd* pParent = GetParentWindow()) { + pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0); + } + } + return; + case PNM_NOTERESET: + m_bSizeChanged = TRUE; + m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0); + + return; + } + + CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); } -FX_BOOL CPWL_NoteItem::OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - if (!m_pContents->WndHitTest(m_pContents->ParentToChild(point))) - { - SetNoteFocus(FALSE); - PopupNoteItemMenu(point); +void CPWL_NoteItem::PopupNoteItemMenu(const CPDF_Point& point) { + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + int32_t x, y; + PWLtoWnd(point, x, y); + if (IFX_SystemHandler* pSH = GetSystemHandler()) + pSH->ClientToScreen(GetAttachedHWnd(), x, y); + pNotify->OnPopupMenu(this, x, y); + } +} - return TRUE; - } +const CPWL_Note* CPWL_NoteItem::GetNote() const { + if (const CPWL_Wnd* pRoot = GetRootWnd()) { + ASSERT(pRoot->GetClassName() == "CPWL_NoteItem"); + CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pRoot; + if (pNoteItem->IsTopItem()) { + return (CPWL_Note*)pNoteItem; + } + } - return CPWL_Wnd::OnRButtonUp(point,nFlag); + return NULL; } -void CPWL_NoteItem::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) -{ - switch (msg) - { - case PNM_NOTEEDITCHANGED: - m_bSizeChanged = TRUE; +IPWL_NoteNotify* CPWL_NoteItem::GetNoteNotify() const { + if (const CPWL_Note* pNote = GetNote()) + return pNote->GetNoteNotify(); - if (CPWL_Wnd* pParent = GetParentWindow()) - { - pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0); - } - return; - case PNM_SETCARETINFO: - if (PWL_CARET_INFO * pInfo = (PWL_CARET_INFO*)wParam) - { - PWL_CARET_INFO newInfo = *pInfo; - newInfo.bVisible = TRUE; - newInfo.ptHead = ChildToParent(pInfo->ptHead); - newInfo.ptFoot = ChildToParent(pInfo->ptFoot); - - if (CPWL_Wnd * pParent = GetParentWindow()) - { - pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0); - } - } - return; - case PNM_NOTERESET: - m_bSizeChanged = TRUE; - m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0); + return NULL; +} - return; - } +void CPWL_NoteItem::OnCreateNoteItem() { + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + pNotify->OnItemCreate(this); + } +} - CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); +void CPWL_NoteItem::OnContentsValidate() { + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + pNotify->OnSetContents(this); + } } -void CPWL_NoteItem::PopupNoteItemMenu(const CPDF_Point& point) -{ - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - int32_t x,y; - PWLtoWnd(point, x, y); - if (IFX_SystemHandler* pSH = GetSystemHandler()) - pSH->ClientToScreen(GetAttachedHWnd(), x, y); - pNotify->OnPopupMenu(this, x, y); - } +void CPWL_NoteItem::SetNoteFocus(FX_BOOL bLast) { + m_pContents->SetEditFocus(bLast); } -const CPWL_Note* CPWL_NoteItem::GetNote() const -{ - if (const CPWL_Wnd* pRoot = GetRootWnd()) - { - ASSERT(pRoot->GetClassName() == "CPWL_NoteItem"); - CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pRoot; - if (pNoteItem->IsTopItem()) - { - return (CPWL_Note*)pNoteItem; - } - } +void CPWL_NoteItem::EnableModify(FX_BOOL bEnabled) { + m_pContents->EnableModify(bEnabled); + m_bAllowModify = bEnabled; +} - return NULL; +void CPWL_NoteItem::EnableRead(FX_BOOL bEnabled) { + m_pContents->EnableRead(bEnabled); } -IPWL_NoteNotify* CPWL_NoteItem::GetNoteNotify() const -{ - if (const CPWL_Note* pNote = GetNote()) - return pNote->GetNoteNotify(); - - return NULL; -} - -void CPWL_NoteItem::OnCreateNoteItem() -{ - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - pNotify->OnItemCreate(this); - } -} - -void CPWL_NoteItem::OnContentsValidate() -{ - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - pNotify->OnSetContents(this); - } -} - -void CPWL_NoteItem::SetNoteFocus(FX_BOOL bLast) -{ - m_pContents->SetEditFocus(bLast); -} - -void CPWL_NoteItem::EnableModify(FX_BOOL bEnabled) -{ - m_pContents->EnableModify(bEnabled); - m_bAllowModify = bEnabled; -} - -void CPWL_NoteItem::EnableRead(FX_BOOL bEnabled) -{ - m_pContents->EnableRead(bEnabled); -} - -/* ---------------------------------- CPWL_Note ---------------------------------- */ - -CPWL_Note::CPWL_Note(IPopup_Note* pPopupNote, IPWL_NoteNotify* pNoteNotify, IPWL_NoteHandler* pNoteHandler) : - m_pAuthor(NULL), - m_pIcon(NULL), - m_pCloseBox(NULL), - m_pLBBox(NULL), - m_pRBBox(NULL), - m_pContentsBar(NULL), - m_pOptions(NULL), - m_pNoteNotify(pNoteNotify), - m_bResizing(FALSE), - m_rcCaption(0,0,0,0), - m_bEnalbleNotify(TRUE), - m_pPopupNote(pPopupNote) -{ -} - -CPWL_Note::~CPWL_Note() -{ -} - -IPWL_NoteItem* CPWL_Note::Reply() -{ - return CreateNoteItem(); -} - -void CPWL_Note::EnableNotify(FX_BOOL bEnabled) -{ - m_bEnalbleNotify = bEnabled; -} - -void CPWL_Note::RePosChildWnd() -{ - RePosNoteChildren(); - m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0); - ResetScrollBar(); - m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0); - OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0); - if (const CPWL_Wnd* pWnd = GetFocused()) - { - if (pWnd->GetClassName() == "CPWL_Edit") - { - CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; - pEdit->SetCaret(pEdit->GetCaret()); - } - } -} - -FX_BOOL CPWL_Note::ResetScrollBar() -{ - FX_BOOL bScrollChanged = FALSE; - - if (ScrollBarShouldVisible()) - { - if (!m_pContentsBar->IsVisible()) - { - m_pContentsBar->SetVisible(TRUE); - if (m_pContentsBar->IsVisible()) - { - m_pContentsBar->InvalidateRect(NULL); - bScrollChanged = TRUE; - } - } - } - else - { - if (m_pContentsBar->IsVisible()) - { - m_pContentsBar->SetVisible(FALSE); - m_pContentsBar->InvalidateRect(NULL); - - bScrollChanged = TRUE; - } - } - - if (bScrollChanged) - { - CPDF_Rect rcNote = GetClientRect(); - CPDF_Rect rcContents = m_pContents->GetWindowRect(); - rcContents.right = rcNote.right - 3.0f; - if (m_pContentsBar->IsVisible()) - rcContents.right -= PWL_SCROLLBAR_WIDTH; - m_pContents->Move(rcContents, TRUE, TRUE); - m_pContents->SetScrollPos(CPDF_Point(0.0f,0.0f)); - m_pContents->InvalidateRect(NULL); - } - - return bScrollChanged; -} - -FX_BOOL CPWL_Note::ScrollBarShouldVisible() -{ - CPDF_Rect rcContentsFact = m_pContents->GetScrollArea(); - CPDF_Rect rcContentsClient = m_pContents->GetClientRect(); - - return rcContentsFact.Height() > rcContentsClient.Height(); -} - -void CPWL_Note::SetOptionsText(const CFX_WideString& sText) -{ - if (m_pOptions) - m_pOptions->SetText(sText); - - RePosNoteChildren(); -} - -void CPWL_Note::RePosNoteChildren() -{ - if (m_bResizing) return; - - m_bResizing = TRUE; - - if (IsValid()) - { - ASSERT(m_pSubject != NULL); - ASSERT(m_pDateTime != NULL); - ASSERT(m_pContents != NULL); - ASSERT(m_pAuthor != NULL); - ASSERT(m_pCloseBox != NULL); - ASSERT(m_pIcon != NULL); - ASSERT(m_pLBBox != NULL); - ASSERT(m_pRBBox != NULL); - ASSERT(m_pContentsBar != NULL); - ASSERT(m_pOptions != NULL); - - CPDF_Rect rcClient = GetClientRect(); - - CPDF_Rect rcIcon = rcClient; - rcIcon.top -= 2.0f; - rcIcon.right = rcIcon.left + 14.0f; - rcIcon.bottom = rcIcon.top - 14.0f; - rcIcon.Normalize(); - m_pIcon->Move(rcIcon, TRUE, FALSE); - m_pIcon->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcIcon)); - - CPDF_Rect rcCloseBox = rcClient; - rcCloseBox.right -= 1.0f; - rcCloseBox.top -= 1.0f; - rcCloseBox.left = rcCloseBox.right - 14.0f; - rcCloseBox.bottom = rcCloseBox.top - 14.0f; - rcCloseBox.Normalize(); - m_pCloseBox->Move(rcCloseBox, TRUE, FALSE); - m_pCloseBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcCloseBox)); - - CPDF_Rect rcDate = rcClient; - rcDate.right = rcCloseBox.left - POPUP_ITEM_TEXT_INDENT; - rcDate.left = PWL_MAX(rcDate.right - m_pDateTime->GetContentRect().Width() - 1.0f, rcIcon.right + 1.0f); - rcDate.top = rcClient.top - 2.0f; - rcDate.bottom = rcDate.top - m_pDateTime->GetContentRect().Height(); - rcDate.Normalize(); - m_pDateTime->Move(rcDate, TRUE, FALSE); - m_pDateTime->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcDate)); - - CPDF_Rect rcSubject = rcClient; - rcSubject.top = rcClient.top - 2.0f; - rcSubject.left = rcIcon.right + POPUP_ITEM_TEXT_INDENT; - rcSubject.right = PWL_MIN(rcSubject.left + m_pSubject->GetContentRect().Width() + 1.0f, rcDate.left - 1.0f); - rcSubject.bottom = rcSubject.top - m_pSubject->GetContentRect().Height(); - rcSubject.Normalize(); - m_pSubject->Move(rcSubject, TRUE, FALSE); - m_pSubject->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcSubject)); - - CPDF_Rect rcOptions = rcClient; - rcOptions.left = PWL_MAX(rcOptions.right - m_pOptions->GetContentRect().Width(), rcIcon.right + 1.0f); - rcOptions.top = rcSubject.bottom - 4.0f; - rcOptions.bottom = rcOptions.top - m_pOptions->GetContentRect().Height(); - rcOptions.Normalize(); - m_pOptions->Move(rcOptions, TRUE, FALSE); - m_pOptions->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcOptions)); - - CPDF_Rect rcAuthor = rcClient; - rcAuthor.top = rcSubject.bottom - 4.0f; - rcAuthor.left = rcSubject.left; - rcAuthor.right = PWL_MIN(rcSubject.left + m_pAuthor->GetContentRect().Width() + 1.0f, rcOptions.left - 1.0f); - rcAuthor.bottom = rcAuthor.top - m_pAuthor->GetContentRect().Height(); - rcAuthor.Normalize(); - m_pAuthor->Move(rcAuthor, TRUE, FALSE); - m_pAuthor->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcAuthor)); - - CPDF_Rect rcLBBox = rcClient; - rcLBBox.top = rcLBBox.bottom + 7.0f; - rcLBBox.right = rcLBBox.left + 7.0f; - rcLBBox.Normalize(); - m_pLBBox->Move(rcLBBox, TRUE, FALSE); - m_pLBBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcLBBox)); - - CPDF_Rect rcRBBox = rcClient; - rcRBBox.top = rcRBBox.bottom + 7.0f; - rcRBBox.left = rcRBBox.right - 7.0f; - rcRBBox.Normalize(); - m_pRBBox->Move(rcRBBox, TRUE, FALSE); - m_pRBBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcRBBox)); - - CPDF_Rect rcContents = rcClient; - rcContents.top = rcAuthor.bottom - POPUP_ITEM_HEAD_BOTTOM; - rcContents.left += 3.0f; - rcContents.right -= 3.0f; - if (m_pContentsBar->IsVisible()) - rcContents.right -= PWL_SCROLLBAR_WIDTH; - rcContents.bottom += 14.0f; - rcContents.Normalize(); - m_pContents->Move(rcContents, FALSE, FALSE); - m_pContents->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcContents)); - - CPDF_Rect rcContentsBar = rcContents; - rcContentsBar.right = rcClient.right - 3.0f; - rcContentsBar.left = rcContentsBar.right - PWL_SCROLLBAR_WIDTH; - rcContentsBar.Normalize(); - m_pContentsBar->Move(rcContentsBar, TRUE, FALSE); - - m_rcCaption = rcClient; - m_rcCaption.bottom = rcContents.top; - } - - m_bResizing = FALSE; -} - -//0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close / 5-options -int32_t CPWL_Note::NoteHitTest(const CPDF_Point& point) const -{ - ASSERT(m_pSubject != NULL); - ASSERT(m_pDateTime != NULL); - ASSERT(m_pContents != NULL); - ASSERT(m_pAuthor != NULL); - ASSERT(m_pIcon != NULL); - ASSERT(m_pContentsBar != NULL); - - ASSERT(m_pCloseBox != NULL); - ASSERT(m_pLBBox != NULL); - ASSERT(m_pRBBox != NULL); - ASSERT(m_pOptions != NULL); - - GetClientRect(); - - if (m_pSubject->WndHitTest(m_pSubject->ParentToChild(point))) return 1; - if (m_pDateTime->WndHitTest(m_pDateTime->ParentToChild(point))) return 1; - if (m_pAuthor->WndHitTest(m_pAuthor->ParentToChild(point))) return 1; - if (m_pIcon->WndHitTest(m_pIcon->ParentToChild(point))) return 1; - - if (m_pContents->WndHitTest(m_pContents->ParentToChild(point))) return 0; - if (m_pContentsBar->WndHitTest(m_pContentsBar->ParentToChild(point))) return 0; - - if (m_pCloseBox->WndHitTest(m_pCloseBox->ParentToChild(point))) return 4; - if (m_pLBBox->WndHitTest(m_pLBBox->ParentToChild(point))) return 2; - if (m_pRBBox->WndHitTest(m_pRBBox->ParentToChild(point))) return 3; - if (m_pOptions->WndHitTest(m_pOptions->ParentToChild(point))) return 5; - - return 1; -} - -void CPWL_Note::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - CPWL_NoteItem::CreateChildWnd(cp); - - CPWL_Color sTextColor; - - if (CPWL_Utils::IsBlackOrWhite(GetBackgroundColor())) - sTextColor = PWL_DEFAULT_WHITECOLOR; - else - sTextColor = PWL_DEFAULT_BLACKCOLOR; - - m_pAuthor = new CPWL_Label; - PWL_CREATEPARAM acp = cp; - acp.pParentWnd = this; - acp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_LEFT | PES_TOP; - acp.sTextColor = sTextColor; - m_pAuthor->Create(acp); - - m_pCloseBox = new CPWL_Note_CloseBox; - PWL_CREATEPARAM ccp = cp; - ccp.pParentWnd = this; - ccp.dwBorderWidth = 2; - ccp.nBorderStyle = PBS_BEVELED; - ccp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER; - ccp.sTextColor = sTextColor; - m_pCloseBox->Create(ccp); - - m_pIcon = new CPWL_Note_Icon; - PWL_CREATEPARAM icp = cp; - icp.pParentWnd = this; - icp.dwFlags = PWS_VISIBLE | PWS_CHILD; - m_pIcon->Create(icp); - - m_pOptions = new CPWL_Note_Options; - PWL_CREATEPARAM ocp = cp; - ocp.pParentWnd = this; - ocp.dwFlags = PWS_CHILD | PWS_VISIBLE; - ocp.sTextColor = sTextColor; - m_pOptions->Create(ocp); - - m_pLBBox = new CPWL_Note_LBBox; - PWL_CREATEPARAM lcp = cp; - lcp.pParentWnd = this; - lcp.dwFlags = PWS_VISIBLE | PWS_CHILD; - lcp.eCursorType = FXCT_NESW; - lcp.sTextColor = sTextColor; - m_pLBBox->Create(lcp); - - m_pRBBox = new CPWL_Note_RBBox; - PWL_CREATEPARAM rcp = cp; - rcp.pParentWnd = this; - rcp.dwFlags = PWS_VISIBLE | PWS_CHILD; - rcp.eCursorType = FXCT_NWSE; - rcp.sTextColor = sTextColor; - m_pRBBox->Create(rcp); - - m_pContentsBar = new CPWL_ScrollBar(SBT_VSCROLL); - PWL_CREATEPARAM scp = cp; - scp.pParentWnd = this; - scp.sBackgroundColor = CPWL_Color(COLORTYPE_RGB, 240/255.0f, 240/255.0f, 240/255.0f); - scp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_BACKGROUND; - m_pContentsBar->Create(scp); - m_pContentsBar->SetNotifyForever(TRUE); -} - -void CPWL_Note::SetSubjectName(const CFX_WideString& sName) -{ - CPWL_NoteItem::SetSubjectName(sName); - RePosChildWnd(); -} - -void CPWL_Note::SetAuthorName(const CFX_WideString& sName) -{ - if (m_pAuthor) - { - m_pAuthor->SetText(sName.c_str()); - RePosChildWnd(); - } - - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - pNotify->OnSetAuthorName(this); - } -} - -CFX_WideString CPWL_Note::GetAuthorName() const -{ - if (m_pAuthor) - return m_pAuthor->GetText(); - - return L""; -} - -FX_BOOL CPWL_Note::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag) -{ - CPDF_Point ptScroll = m_pContents->GetScrollPos(); - CPDF_Rect rcScroll = m_pContents->GetScrollArea(); - CPDF_Rect rcContents = m_pContents->GetClientRect(); - - if (rcScroll.top - rcScroll.bottom > rcContents.Height()) - { - CPDF_Point ptNew = ptScroll; - - if (zDelta > 0) - ptNew.y += 30; - else - ptNew.y -= 30; - - if (ptNew.y > rcScroll.top) - ptNew.y = rcScroll.top; - if (ptNew.y < rcScroll.bottom + rcContents.Height()) - ptNew.y = rcScroll.bottom + rcContents.Height(); - if (ptNew.y < rcScroll.bottom) - ptNew.y = rcScroll.bottom; - - if (ptNew.y != ptScroll.y) - { - m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0); - m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, (intptr_t)&ptNew.y); - m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptNew.y); - - return TRUE; - } - } - - return FALSE; -} - -void CPWL_Note::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) -{ - switch (msg) - { - case PNM_NOTEEDITCHANGED: - { - CPDF_Rect rcScroll = m_pContents->GetScrollArea(); - - - PWL_SCROLL_INFO sInfo; - sInfo.fContentMin = rcScroll.bottom; - sInfo.fContentMax = rcScroll.top; - sInfo.fPlateWidth = m_pContents->GetClientRect().Height(); - sInfo.fSmallStep = 13.0f; - sInfo.fBigStep = sInfo.fPlateWidth; - - if (FXSYS_memcmp(&m_OldScrollInfo, &sInfo, sizeof(PWL_SCROLL_INFO)) != 0) - { - FX_BOOL bScrollChanged = FALSE; - - if (lParam < 3) //·ÀÖ¹ËÀÑ­»· mantis:15759 - { - bScrollChanged = ResetScrollBar(); - if (bScrollChanged) - { - lParam++; - m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0); - OnNotify(this, PNM_NOTEEDITCHANGED, 0, lParam); - } - } - - if (!bScrollChanged) - { - if (m_pContentsBar->IsVisible()) - { - m_pContentsBar->OnNotify(pWnd, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&sInfo); - m_OldScrollInfo = sInfo; - - CPDF_Point ptScroll = m_pContents->GetScrollPos(); - CPDF_Point ptOld = ptScroll; - - if (ptScroll.y > sInfo.fContentMax) - ptScroll.y = sInfo.fContentMax; - if (ptScroll.y < sInfo.fContentMin + sInfo.fPlateWidth) - ptScroll.y = sInfo.fContentMin + sInfo.fPlateWidth; - if (ptScroll.y < sInfo.fContentMin) - ptScroll.y = sInfo.fContentMin; - - if (ptOld.y != ptScroll.y) - { - m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptScroll.y); - m_pContentsBar->InvalidateRect(NULL); - m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, (intptr_t)&ptScroll.y); - } - } - } - } - } - - m_pContents->InvalidateRect(NULL); - - return; - case PNM_SCROLLWINDOW: - if (m_pContents) - m_pContents->OnNotify(pWnd, msg, wParam, lParam); - return; - case PNM_SETSCROLLPOS: - if (m_pContentsBar) - m_pContentsBar->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam); - return; - } - - if (msg == PNM_SETCARETINFO && IsValid()) - { - if (PWL_CARET_INFO * pInfo = (PWL_CARET_INFO*)wParam) - { - if (m_pContents) - { - CPDF_Rect rcClient = m_pContents->GetClientRect(); - if (pInfo->ptHead.y > rcClient.top) - { - CPDF_Point pt = m_pContents->OutToIn(pInfo->ptHead); - m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, (intptr_t)&pt.y); - - CPDF_Point ptScroll = m_pContents->GetScrollPos(); - m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptScroll.y); - - return; - } - - if (pInfo->ptFoot.y < rcClient.bottom) - { - CPDF_Point pt = m_pContents->OutToIn(pInfo->ptFoot); - pt.y += rcClient.Height(); - m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, (intptr_t)&pt.y); - - CPDF_Point ptScroll = m_pContents->GetScrollPos(); - m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptScroll.y); - - return; - } - } - } - } - - CPWL_NoteItem::OnNotify(pWnd, msg, wParam, lParam); -} - -void CPWL_Note::SetBkColor(const CPWL_Color& color) -{ - CPWL_NoteItem::SetBkColor(color); - - CPWL_Color sBK = color; - CPWL_Color sTextColor; - if (CPWL_Utils::IsBlackOrWhite(sBK)) - sTextColor = PWL_DEFAULT_WHITECOLOR; - else - sTextColor = PWL_DEFAULT_BLACKCOLOR; - - if (m_pCloseBox) - m_pCloseBox->SetTextColor(sTextColor); - if (m_pAuthor) - m_pAuthor->SetTextColor(sTextColor); - if (m_pOptions) - m_pOptions->SetTextColor(sTextColor); - if (m_pLBBox) - m_pLBBox->SetTextColor(sTextColor); - if (m_pRBBox) - m_pRBBox->SetTextColor(sTextColor); -} - -FX_BOOL CPWL_Note::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) -{ - if (m_pOptions->WndHitTest(m_pOptions->ParentToChild(point))) - { - if (IPWL_NoteNotify* pNotify = GetNoteNotify()) - { - int32_t x, y; - PWLtoWnd(point, x, y); - if (IFX_SystemHandler* pSH = GetSystemHandler()) - pSH->ClientToScreen(GetAttachedHWnd(), x, y); - KillFocus(); - pNotify->OnPopupMenu(x, y); - - return TRUE; - } - } +/* ---------------------------------- CPWL_Note + * ---------------------------------- */ + +CPWL_Note::CPWL_Note(IPopup_Note* pPopupNote, + IPWL_NoteNotify* pNoteNotify, + IPWL_NoteHandler* pNoteHandler) + : m_pAuthor(NULL), + m_pIcon(NULL), + m_pCloseBox(NULL), + m_pLBBox(NULL), + m_pRBBox(NULL), + m_pContentsBar(NULL), + m_pOptions(NULL), + m_pNoteNotify(pNoteNotify), + m_bResizing(FALSE), + m_rcCaption(0, 0, 0, 0), + m_bEnalbleNotify(TRUE), + m_pPopupNote(pPopupNote) {} - return CPWL_Wnd::OnLButtonDown(point,nFlag); +CPWL_Note::~CPWL_Note() {} + +IPWL_NoteItem* CPWL_Note::Reply() { + return CreateNoteItem(); +} + +void CPWL_Note::EnableNotify(FX_BOOL bEnabled) { + m_bEnalbleNotify = bEnabled; } -FX_BOOL CPWL_Note::OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - return CPWL_Wnd::OnRButtonUp(point,nFlag); +void CPWL_Note::RePosChildWnd() { + RePosNoteChildren(); + m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0); + ResetScrollBar(); + m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0); + OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0); + if (const CPWL_Wnd* pWnd = GetFocused()) { + if (pWnd->GetClassName() == "CPWL_Edit") { + CPWL_Edit* pEdit = (CPWL_Edit*)pWnd; + pEdit->SetCaret(pEdit->GetCaret()); + } + } +} + +FX_BOOL CPWL_Note::ResetScrollBar() { + FX_BOOL bScrollChanged = FALSE; + + if (ScrollBarShouldVisible()) { + if (!m_pContentsBar->IsVisible()) { + m_pContentsBar->SetVisible(TRUE); + if (m_pContentsBar->IsVisible()) { + m_pContentsBar->InvalidateRect(NULL); + bScrollChanged = TRUE; + } + } + } else { + if (m_pContentsBar->IsVisible()) { + m_pContentsBar->SetVisible(FALSE); + m_pContentsBar->InvalidateRect(NULL); + + bScrollChanged = TRUE; + } + } + + if (bScrollChanged) { + CPDF_Rect rcNote = GetClientRect(); + CPDF_Rect rcContents = m_pContents->GetWindowRect(); + rcContents.right = rcNote.right - 3.0f; + if (m_pContentsBar->IsVisible()) + rcContents.right -= PWL_SCROLLBAR_WIDTH; + m_pContents->Move(rcContents, TRUE, TRUE); + m_pContents->SetScrollPos(CPDF_Point(0.0f, 0.0f)); + m_pContents->InvalidateRect(NULL); + } + + return bScrollChanged; +} + +FX_BOOL CPWL_Note::ScrollBarShouldVisible() { + CPDF_Rect rcContentsFact = m_pContents->GetScrollArea(); + CPDF_Rect rcContentsClient = m_pContents->GetClientRect(); + + return rcContentsFact.Height() > rcContentsClient.Height(); +} + +void CPWL_Note::SetOptionsText(const CFX_WideString& sText) { + if (m_pOptions) + m_pOptions->SetText(sText); + + RePosNoteChildren(); +} + +void CPWL_Note::RePosNoteChildren() { + if (m_bResizing) + return; + + m_bResizing = TRUE; + + if (IsValid()) { + ASSERT(m_pSubject != NULL); + ASSERT(m_pDateTime != NULL); + ASSERT(m_pContents != NULL); + ASSERT(m_pAuthor != NULL); + ASSERT(m_pCloseBox != NULL); + ASSERT(m_pIcon != NULL); + ASSERT(m_pLBBox != NULL); + ASSERT(m_pRBBox != NULL); + ASSERT(m_pContentsBar != NULL); + ASSERT(m_pOptions != NULL); + + CPDF_Rect rcClient = GetClientRect(); + + CPDF_Rect rcIcon = rcClient; + rcIcon.top -= 2.0f; + rcIcon.right = rcIcon.left + 14.0f; + rcIcon.bottom = rcIcon.top - 14.0f; + rcIcon.Normalize(); + m_pIcon->Move(rcIcon, TRUE, FALSE); + m_pIcon->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcIcon)); + + CPDF_Rect rcCloseBox = rcClient; + rcCloseBox.right -= 1.0f; + rcCloseBox.top -= 1.0f; + rcCloseBox.left = rcCloseBox.right - 14.0f; + rcCloseBox.bottom = rcCloseBox.top - 14.0f; + rcCloseBox.Normalize(); + m_pCloseBox->Move(rcCloseBox, TRUE, FALSE); + m_pCloseBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcCloseBox)); + + CPDF_Rect rcDate = rcClient; + rcDate.right = rcCloseBox.left - POPUP_ITEM_TEXT_INDENT; + rcDate.left = + PWL_MAX(rcDate.right - m_pDateTime->GetContentRect().Width() - 1.0f, + rcIcon.right + 1.0f); + rcDate.top = rcClient.top - 2.0f; + rcDate.bottom = rcDate.top - m_pDateTime->GetContentRect().Height(); + rcDate.Normalize(); + m_pDateTime->Move(rcDate, TRUE, FALSE); + m_pDateTime->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcDate)); + + CPDF_Rect rcSubject = rcClient; + rcSubject.top = rcClient.top - 2.0f; + rcSubject.left = rcIcon.right + POPUP_ITEM_TEXT_INDENT; + rcSubject.right = + PWL_MIN(rcSubject.left + m_pSubject->GetContentRect().Width() + 1.0f, + rcDate.left - 1.0f); + rcSubject.bottom = rcSubject.top - m_pSubject->GetContentRect().Height(); + rcSubject.Normalize(); + m_pSubject->Move(rcSubject, TRUE, FALSE); + m_pSubject->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcSubject)); + + CPDF_Rect rcOptions = rcClient; + rcOptions.left = + PWL_MAX(rcOptions.right - m_pOptions->GetContentRect().Width(), + rcIcon.right + 1.0f); + rcOptions.top = rcSubject.bottom - 4.0f; + rcOptions.bottom = rcOptions.top - m_pOptions->GetContentRect().Height(); + rcOptions.Normalize(); + m_pOptions->Move(rcOptions, TRUE, FALSE); + m_pOptions->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcOptions)); + + CPDF_Rect rcAuthor = rcClient; + rcAuthor.top = rcSubject.bottom - 4.0f; + rcAuthor.left = rcSubject.left; + rcAuthor.right = + PWL_MIN(rcSubject.left + m_pAuthor->GetContentRect().Width() + 1.0f, + rcOptions.left - 1.0f); + rcAuthor.bottom = rcAuthor.top - m_pAuthor->GetContentRect().Height(); + rcAuthor.Normalize(); + m_pAuthor->Move(rcAuthor, TRUE, FALSE); + m_pAuthor->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcAuthor)); + + CPDF_Rect rcLBBox = rcClient; + rcLBBox.top = rcLBBox.bottom + 7.0f; + rcLBBox.right = rcLBBox.left + 7.0f; + rcLBBox.Normalize(); + m_pLBBox->Move(rcLBBox, TRUE, FALSE); + m_pLBBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcLBBox)); + + CPDF_Rect rcRBBox = rcClient; + rcRBBox.top = rcRBBox.bottom + 7.0f; + rcRBBox.left = rcRBBox.right - 7.0f; + rcRBBox.Normalize(); + m_pRBBox->Move(rcRBBox, TRUE, FALSE); + m_pRBBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcRBBox)); + + CPDF_Rect rcContents = rcClient; + rcContents.top = rcAuthor.bottom - POPUP_ITEM_HEAD_BOTTOM; + rcContents.left += 3.0f; + rcContents.right -= 3.0f; + if (m_pContentsBar->IsVisible()) + rcContents.right -= PWL_SCROLLBAR_WIDTH; + rcContents.bottom += 14.0f; + rcContents.Normalize(); + m_pContents->Move(rcContents, FALSE, FALSE); + m_pContents->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcContents)); + + CPDF_Rect rcContentsBar = rcContents; + rcContentsBar.right = rcClient.right - 3.0f; + rcContentsBar.left = rcContentsBar.right - PWL_SCROLLBAR_WIDTH; + rcContentsBar.Normalize(); + m_pContentsBar->Move(rcContentsBar, TRUE, FALSE); + + m_rcCaption = rcClient; + m_rcCaption.bottom = rcContents.top; + } + + m_bResizing = FALSE; +} + +// 0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close / +// 5-options +int32_t CPWL_Note::NoteHitTest(const CPDF_Point& point) const { + ASSERT(m_pSubject != NULL); + ASSERT(m_pDateTime != NULL); + ASSERT(m_pContents != NULL); + ASSERT(m_pAuthor != NULL); + ASSERT(m_pIcon != NULL); + ASSERT(m_pContentsBar != NULL); + + ASSERT(m_pCloseBox != NULL); + ASSERT(m_pLBBox != NULL); + ASSERT(m_pRBBox != NULL); + ASSERT(m_pOptions != NULL); + + GetClientRect(); + + if (m_pSubject->WndHitTest(m_pSubject->ParentToChild(point))) + return 1; + if (m_pDateTime->WndHitTest(m_pDateTime->ParentToChild(point))) + return 1; + if (m_pAuthor->WndHitTest(m_pAuthor->ParentToChild(point))) + return 1; + if (m_pIcon->WndHitTest(m_pIcon->ParentToChild(point))) + return 1; + + if (m_pContents->WndHitTest(m_pContents->ParentToChild(point))) + return 0; + if (m_pContentsBar->WndHitTest(m_pContentsBar->ParentToChild(point))) + return 0; + + if (m_pCloseBox->WndHitTest(m_pCloseBox->ParentToChild(point))) + return 4; + if (m_pLBBox->WndHitTest(m_pLBBox->ParentToChild(point))) + return 2; + if (m_pRBBox->WndHitTest(m_pRBBox->ParentToChild(point))) + return 3; + if (m_pOptions->WndHitTest(m_pOptions->ParentToChild(point))) + return 5; + + return 1; +} + +void CPWL_Note::CreateChildWnd(const PWL_CREATEPARAM& cp) { + CPWL_NoteItem::CreateChildWnd(cp); + + CPWL_Color sTextColor; + + if (CPWL_Utils::IsBlackOrWhite(GetBackgroundColor())) + sTextColor = PWL_DEFAULT_WHITECOLOR; + else + sTextColor = PWL_DEFAULT_BLACKCOLOR; + + m_pAuthor = new CPWL_Label; + PWL_CREATEPARAM acp = cp; + acp.pParentWnd = this; + acp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_LEFT | PES_TOP; + acp.sTextColor = sTextColor; + m_pAuthor->Create(acp); + + m_pCloseBox = new CPWL_Note_CloseBox; + PWL_CREATEPARAM ccp = cp; + ccp.pParentWnd = this; + ccp.dwBorderWidth = 2; + ccp.nBorderStyle = PBS_BEVELED; + ccp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER; + ccp.sTextColor = sTextColor; + m_pCloseBox->Create(ccp); + + m_pIcon = new CPWL_Note_Icon; + PWL_CREATEPARAM icp = cp; + icp.pParentWnd = this; + icp.dwFlags = PWS_VISIBLE | PWS_CHILD; + m_pIcon->Create(icp); + + m_pOptions = new CPWL_Note_Options; + PWL_CREATEPARAM ocp = cp; + ocp.pParentWnd = this; + ocp.dwFlags = PWS_CHILD | PWS_VISIBLE; + ocp.sTextColor = sTextColor; + m_pOptions->Create(ocp); + + m_pLBBox = new CPWL_Note_LBBox; + PWL_CREATEPARAM lcp = cp; + lcp.pParentWnd = this; + lcp.dwFlags = PWS_VISIBLE | PWS_CHILD; + lcp.eCursorType = FXCT_NESW; + lcp.sTextColor = sTextColor; + m_pLBBox->Create(lcp); + + m_pRBBox = new CPWL_Note_RBBox; + PWL_CREATEPARAM rcp = cp; + rcp.pParentWnd = this; + rcp.dwFlags = PWS_VISIBLE | PWS_CHILD; + rcp.eCursorType = FXCT_NWSE; + rcp.sTextColor = sTextColor; + m_pRBBox->Create(rcp); + + m_pContentsBar = new CPWL_ScrollBar(SBT_VSCROLL); + PWL_CREATEPARAM scp = cp; + scp.pParentWnd = this; + scp.sBackgroundColor = + CPWL_Color(COLORTYPE_RGB, 240 / 255.0f, 240 / 255.0f, 240 / 255.0f); + scp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_BACKGROUND; + m_pContentsBar->Create(scp); + m_pContentsBar->SetNotifyForever(TRUE); +} + +void CPWL_Note::SetSubjectName(const CFX_WideString& sName) { + CPWL_NoteItem::SetSubjectName(sName); + RePosChildWnd(); +} + +void CPWL_Note::SetAuthorName(const CFX_WideString& sName) { + if (m_pAuthor) { + m_pAuthor->SetText(sName.c_str()); + RePosChildWnd(); + } + + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + pNotify->OnSetAuthorName(this); + } +} + +CFX_WideString CPWL_Note::GetAuthorName() const { + if (m_pAuthor) + return m_pAuthor->GetText(); + + return L""; +} + +FX_BOOL CPWL_Note::OnMouseWheel(short zDelta, + const CPDF_Point& point, + FX_DWORD nFlag) { + CPDF_Point ptScroll = m_pContents->GetScrollPos(); + CPDF_Rect rcScroll = m_pContents->GetScrollArea(); + CPDF_Rect rcContents = m_pContents->GetClientRect(); + + if (rcScroll.top - rcScroll.bottom > rcContents.Height()) { + CPDF_Point ptNew = ptScroll; + + if (zDelta > 0) + ptNew.y += 30; + else + ptNew.y -= 30; + + if (ptNew.y > rcScroll.top) + ptNew.y = rcScroll.top; + if (ptNew.y < rcScroll.bottom + rcContents.Height()) + ptNew.y = rcScroll.bottom + rcContents.Height(); + if (ptNew.y < rcScroll.bottom) + ptNew.y = rcScroll.bottom; + + if (ptNew.y != ptScroll.y) { + m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0); + m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, + (intptr_t)&ptNew.y); + m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, + (intptr_t)&ptNew.y); + + return TRUE; + } + } + + return FALSE; +} + +void CPWL_Note::OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam, + intptr_t lParam) { + switch (msg) { + case PNM_NOTEEDITCHANGED: { + CPDF_Rect rcScroll = m_pContents->GetScrollArea(); + + PWL_SCROLL_INFO sInfo; + sInfo.fContentMin = rcScroll.bottom; + sInfo.fContentMax = rcScroll.top; + sInfo.fPlateWidth = m_pContents->GetClientRect().Height(); + sInfo.fSmallStep = 13.0f; + sInfo.fBigStep = sInfo.fPlateWidth; + + if (FXSYS_memcmp(&m_OldScrollInfo, &sInfo, sizeof(PWL_SCROLL_INFO)) != + 0) { + FX_BOOL bScrollChanged = FALSE; + + if (lParam < 3) //·ÀÖ¹ËÀÑ­»· mantis:15759 + { + bScrollChanged = ResetScrollBar(); + if (bScrollChanged) { + lParam++; + m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0); + OnNotify(this, PNM_NOTEEDITCHANGED, 0, lParam); + } + } + + if (!bScrollChanged) { + if (m_pContentsBar->IsVisible()) { + m_pContentsBar->OnNotify(pWnd, PNM_SETSCROLLINFO, SBT_VSCROLL, + (intptr_t)&sInfo); + m_OldScrollInfo = sInfo; + + CPDF_Point ptScroll = m_pContents->GetScrollPos(); + CPDF_Point ptOld = ptScroll; + + if (ptScroll.y > sInfo.fContentMax) + ptScroll.y = sInfo.fContentMax; + if (ptScroll.y < sInfo.fContentMin + sInfo.fPlateWidth) + ptScroll.y = sInfo.fContentMin + sInfo.fPlateWidth; + if (ptScroll.y < sInfo.fContentMin) + ptScroll.y = sInfo.fContentMin; + + if (ptOld.y != ptScroll.y) { + m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, + (intptr_t)&ptScroll.y); + m_pContentsBar->InvalidateRect(NULL); + m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, + (intptr_t)&ptScroll.y); + } + } + } + } + } + + m_pContents->InvalidateRect(NULL); + + return; + case PNM_SCROLLWINDOW: + if (m_pContents) + m_pContents->OnNotify(pWnd, msg, wParam, lParam); + return; + case PNM_SETSCROLLPOS: + if (m_pContentsBar) + m_pContentsBar->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam); + return; + } + + if (msg == PNM_SETCARETINFO && IsValid()) { + if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) { + if (m_pContents) { + CPDF_Rect rcClient = m_pContents->GetClientRect(); + if (pInfo->ptHead.y > rcClient.top) { + CPDF_Point pt = m_pContents->OutToIn(pInfo->ptHead); + m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, + (intptr_t)&pt.y); + + CPDF_Point ptScroll = m_pContents->GetScrollPos(); + m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, + (intptr_t)&ptScroll.y); + + return; + } + + if (pInfo->ptFoot.y < rcClient.bottom) { + CPDF_Point pt = m_pContents->OutToIn(pInfo->ptFoot); + pt.y += rcClient.Height(); + m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, + (intptr_t)&pt.y); + + CPDF_Point ptScroll = m_pContents->GetScrollPos(); + m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, + (intptr_t)&ptScroll.y); + + return; + } + } + } + } + + CPWL_NoteItem::OnNotify(pWnd, msg, wParam, lParam); +} + +void CPWL_Note::SetBkColor(const CPWL_Color& color) { + CPWL_NoteItem::SetBkColor(color); + + CPWL_Color sBK = color; + CPWL_Color sTextColor; + if (CPWL_Utils::IsBlackOrWhite(sBK)) + sTextColor = PWL_DEFAULT_WHITECOLOR; + else + sTextColor = PWL_DEFAULT_BLACKCOLOR; + + if (m_pCloseBox) + m_pCloseBox->SetTextColor(sTextColor); + if (m_pAuthor) + m_pAuthor->SetTextColor(sTextColor); + if (m_pOptions) + m_pOptions->SetTextColor(sTextColor); + if (m_pLBBox) + m_pLBBox->SetTextColor(sTextColor); + if (m_pRBBox) + m_pRBBox->SetTextColor(sTextColor); } -const CPWL_Note* CPWL_Note::GetNote() const -{ - return this; +FX_BOOL CPWL_Note::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { + if (m_pOptions->WndHitTest(m_pOptions->ParentToChild(point))) { + if (IPWL_NoteNotify* pNotify = GetNoteNotify()) { + int32_t x, y; + PWLtoWnd(point, x, y); + if (IFX_SystemHandler* pSH = GetSystemHandler()) + pSH->ClientToScreen(GetAttachedHWnd(), x, y); + KillFocus(); + pNotify->OnPopupMenu(x, y); + + return TRUE; + } + } + + return CPWL_Wnd::OnLButtonDown(point, nFlag); } -IPWL_NoteNotify* CPWL_Note::GetNoteNotify() const -{ - if (m_bEnalbleNotify) - return m_pNoteNotify; +FX_BOOL CPWL_Note::OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + return CPWL_Wnd::OnRButtonUp(point, nFlag); +} - return NULL; +const CPWL_Note* CPWL_Note::GetNote() const { + return this; } -void CPWL_Note::SetIconType(int32_t nType) -{ - if (m_pIcon) - m_pIcon->SetIconType(nType); +IPWL_NoteNotify* CPWL_Note::GetNoteNotify() const { + if (m_bEnalbleNotify) + return m_pNoteNotify; + + return NULL; } -void CPWL_Note::EnableModify(FX_BOOL bEnabled) -{ - m_pContents->EnableModify(bEnabled); +void CPWL_Note::SetIconType(int32_t nType) { + if (m_pIcon) + m_pIcon->SetIconType(nType); } -void CPWL_Note::EnableRead(FX_BOOL bEnabled) -{ - m_pContents->EnableRead(bEnabled); +void CPWL_Note::EnableModify(FX_BOOL bEnabled) { + m_pContents->EnableModify(bEnabled); } -CFX_WideString CPWL_Note::GetReplyString() const -{ - return m_sReplyString; +void CPWL_Note::EnableRead(FX_BOOL bEnabled) { + m_pContents->EnableRead(bEnabled); } -void CPWL_Note::SetReplyString(const CFX_WideString& string) -{ - m_sReplyString = string; +CFX_WideString CPWL_Note::GetReplyString() const { + return m_sReplyString; } +void CPWL_Note::SetReplyString(const CFX_WideString& string) { + m_sReplyString = string; +} diff --git a/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp b/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp index 6d61705222..c762b4cd92 100644 --- a/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp @@ -9,1295 +9,1201 @@ #include "../../include/pdfwindow/PWL_ScrollBar.h" #include "../../include/pdfwindow/PWL_Utils.h" -#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) -#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb)) +#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) +#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb)) +/* ------------------------------- PWL_FLOATRANGE + * ------------------------------- */ -/* ------------------------------- PWL_FLOATRANGE ------------------------------- */ - -PWL_FLOATRANGE::PWL_FLOATRANGE() -{ - Default(); +PWL_FLOATRANGE::PWL_FLOATRANGE() { + Default(); } -PWL_FLOATRANGE::PWL_FLOATRANGE(FX_FLOAT min,FX_FLOAT max) -{ - Set(min,max); +PWL_FLOATRANGE::PWL_FLOATRANGE(FX_FLOAT min, FX_FLOAT max) { + Set(min, max); } -void PWL_FLOATRANGE::Default() -{ - fMin = 0; - fMax = 0; +void PWL_FLOATRANGE::Default() { + fMin = 0; + fMax = 0; } -void PWL_FLOATRANGE::Set(FX_FLOAT min,FX_FLOAT max) -{ - if (min > max) - { - fMin = max; - fMax = min; - } - else - { - fMin = min; - fMax = max; - } +void PWL_FLOATRANGE::Set(FX_FLOAT min, FX_FLOAT max) { + if (min > max) { + fMin = max; + fMax = min; + } else { + fMin = min; + fMax = max; + } } -FX_BOOL PWL_FLOATRANGE::In(FX_FLOAT x) const -{ - return (IsFloatBigger(x,fMin) || IsFloatEqual(x, fMin)) && - (IsFloatSmaller(x, fMax) || IsFloatEqual(x, fMax)); +FX_BOOL PWL_FLOATRANGE::In(FX_FLOAT x) const { + return (IsFloatBigger(x, fMin) || IsFloatEqual(x, fMin)) && + (IsFloatSmaller(x, fMax) || IsFloatEqual(x, fMax)); } -FX_FLOAT PWL_FLOATRANGE::GetWidth() const -{ - return fMax - fMin; +FX_FLOAT PWL_FLOATRANGE::GetWidth() const { + return fMax - fMin; } -/* ------------------------------- PWL_SCROLL_PRIVATEDATA ------------------------------- */ +/* ------------------------------- PWL_SCROLL_PRIVATEDATA + * ------------------------------- */ -PWL_SCROLL_PRIVATEDATA::PWL_SCROLL_PRIVATEDATA() -{ - Default(); +PWL_SCROLL_PRIVATEDATA::PWL_SCROLL_PRIVATEDATA() { + Default(); } -void PWL_SCROLL_PRIVATEDATA::Default() -{ - ScrollRange.Default(); - fScrollPos = ScrollRange.fMin; - fClientWidth = 0; - fBigStep = 10; - fSmallStep = 1; +void PWL_SCROLL_PRIVATEDATA::Default() { + ScrollRange.Default(); + fScrollPos = ScrollRange.fMin; + fClientWidth = 0; + fBigStep = 10; + fSmallStep = 1; } -void PWL_SCROLL_PRIVATEDATA::SetScrollRange(FX_FLOAT min,FX_FLOAT max) -{ - ScrollRange.Set(min,max); +void PWL_SCROLL_PRIVATEDATA::SetScrollRange(FX_FLOAT min, FX_FLOAT max) { + ScrollRange.Set(min, max); - if (IsFloatSmaller(fScrollPos, ScrollRange.fMin)) - fScrollPos = ScrollRange.fMin; - if (IsFloatBigger(fScrollPos, ScrollRange.fMax)) - fScrollPos = ScrollRange.fMax; + if (IsFloatSmaller(fScrollPos, ScrollRange.fMin)) + fScrollPos = ScrollRange.fMin; + if (IsFloatBigger(fScrollPos, ScrollRange.fMax)) + fScrollPos = ScrollRange.fMax; } -void PWL_SCROLL_PRIVATEDATA::SetClientWidth(FX_FLOAT width) -{ - fClientWidth = width; +void PWL_SCROLL_PRIVATEDATA::SetClientWidth(FX_FLOAT width) { + fClientWidth = width; } -void PWL_SCROLL_PRIVATEDATA::SetSmallStep(FX_FLOAT step) -{ - fSmallStep = step; +void PWL_SCROLL_PRIVATEDATA::SetSmallStep(FX_FLOAT step) { + fSmallStep = step; } -void PWL_SCROLL_PRIVATEDATA::SetBigStep(FX_FLOAT step) -{ - fBigStep = step; +void PWL_SCROLL_PRIVATEDATA::SetBigStep(FX_FLOAT step) { + fBigStep = step; } -FX_BOOL PWL_SCROLL_PRIVATEDATA::SetPos(FX_FLOAT pos) -{ - if (ScrollRange.In(pos)) - { - fScrollPos = pos; - return TRUE; - } - return FALSE; +FX_BOOL PWL_SCROLL_PRIVATEDATA::SetPos(FX_FLOAT pos) { + if (ScrollRange.In(pos)) { + fScrollPos = pos; + return TRUE; + } + return FALSE; } -void PWL_SCROLL_PRIVATEDATA::AddSmall() -{ - if (!SetPos(fScrollPos + fSmallStep)) - SetPos(ScrollRange.fMax); +void PWL_SCROLL_PRIVATEDATA::AddSmall() { + if (!SetPos(fScrollPos + fSmallStep)) + SetPos(ScrollRange.fMax); } -void PWL_SCROLL_PRIVATEDATA::SubSmall() -{ - if (!SetPos(fScrollPos - fSmallStep)) - SetPos(ScrollRange.fMin); +void PWL_SCROLL_PRIVATEDATA::SubSmall() { + if (!SetPos(fScrollPos - fSmallStep)) + SetPos(ScrollRange.fMin); } -void PWL_SCROLL_PRIVATEDATA::AddBig() -{ - if (!SetPos(fScrollPos + fBigStep)) - SetPos(ScrollRange.fMax); +void PWL_SCROLL_PRIVATEDATA::AddBig() { + if (!SetPos(fScrollPos + fBigStep)) + SetPos(ScrollRange.fMax); } -void PWL_SCROLL_PRIVATEDATA::SubBig() -{ - if (!SetPos(fScrollPos - fBigStep)) - SetPos(ScrollRange.fMin); +void PWL_SCROLL_PRIVATEDATA::SubBig() { + if (!SetPos(fScrollPos - fBigStep)) + SetPos(ScrollRange.fMin); } -/* ------------------------------- CPWL_SBButton ------------------------------- */ +/* ------------------------------- CPWL_SBButton ------------------------------- + */ -CPWL_SBButton::CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,PWL_SBBUTTON_TYPE eButtonType) -{ - m_eScrollBarType = eScrollBarType; - m_eSBButtonType = eButtonType; +CPWL_SBButton::CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType, + PWL_SBBUTTON_TYPE eButtonType) { + m_eScrollBarType = eScrollBarType; + m_eSBButtonType = eButtonType; - m_bMouseDown = FALSE; + m_bMouseDown = FALSE; } -CPWL_SBButton::~CPWL_SBButton() -{ - -} +CPWL_SBButton::~CPWL_SBButton() {} -CFX_ByteString CPWL_SBButton::GetClassName() const -{ - return "CPWL_SBButton"; +CFX_ByteString CPWL_SBButton::GetClassName() const { + return "CPWL_SBButton"; } -void CPWL_SBButton::OnCreate(PWL_CREATEPARAM & cp) -{ - cp.eCursorType = FXCT_ARROW; +void CPWL_SBButton::OnCreate(PWL_CREATEPARAM& cp) { + cp.eCursorType = FXCT_ARROW; } -void CPWL_SBButton::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - CPWL_Wnd::GetThisAppearanceStream(sAppStream); - - if (!IsVisible()) return; - - CFX_ByteTextBuf sButton; - - CPDF_Rect rectWnd = GetWindowRect(); - - if (rectWnd.IsEmpty()) return; - - sAppStream << "q\n"; - - CPDF_Point ptCenter = GetCenterPoint(); - - switch (m_eScrollBarType) - { - case SBT_HSCROLL: - switch (m_eSBButtonType) - { - case PSBT_MIN: - { - CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y); - CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN); - CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN); - - if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && - rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN ) - { - sButton << "0 g\n"; - sButton << pt1.x << " " << pt1.y << " m\n"; - sButton << pt2.x << " " << pt2.y << " l\n"; - sButton << pt3.x << " " << pt3.y << " l\n"; - sButton << pt1.x << " " << pt1.y << " l f\n"; - - sAppStream << sButton; - } - } - break; - case PSBT_MAX: - { - CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y); - CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN); - CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN); - - if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && - rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN ) - { - sButton << "0 g\n"; - sButton << pt1.x << " " << pt1.y << " m\n"; - sButton << pt2.x << " " << pt2.y << " l\n"; - sButton << pt3.x << " " << pt3.y << " l\n"; - sButton << pt1.x << " " << pt1.y << " l f\n"; - - sAppStream << sButton; - } - } - break; - default: - break; - } - break; - case SBT_VSCROLL: - switch (m_eSBButtonType) - { - case PSBT_MIN: - { - CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); - CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); - CPDF_Point pt3(ptCenter.x,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); - - if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && - rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN ) - { - sButton << "0 g\n"; - sButton << pt1.x << " " << pt1.y << " m\n"; - sButton << pt2.x << " " << pt2.y << " l\n"; - sButton << pt3.x << " " << pt3.y << " l\n"; - sButton << pt1.x << " " << pt1.y << " l f\n"; - - sAppStream << sButton; - } - } - break; - case PSBT_MAX: - { - CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); - CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); - CPDF_Point pt3(ptCenter.x,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); - - if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && - rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN ) - { - sButton << "0 g\n"; - sButton << pt1.x << " " << pt1.y << " m\n"; - sButton << pt2.x << " " << pt2.y << " l\n"; - sButton << pt3.x << " " << pt3.y << " l\n"; - sButton << pt1.x << " " << pt1.y << " l f\n"; - - sAppStream << sButton; - } - } - break; - default: - break; - } - break; - default: - break; - } - - sAppStream << "Q\n"; +void CPWL_SBButton::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { + CPWL_Wnd::GetThisAppearanceStream(sAppStream); + + if (!IsVisible()) + return; + + CFX_ByteTextBuf sButton; + + CPDF_Rect rectWnd = GetWindowRect(); + + if (rectWnd.IsEmpty()) + return; + + sAppStream << "q\n"; + + CPDF_Point ptCenter = GetCenterPoint(); + + switch (m_eScrollBarType) { + case SBT_HSCROLL: + switch (m_eSBButtonType) { + case PSBT_MIN: { + CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); + CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, + ptCenter.y + PWL_TRIANGLE_HALFLEN); + CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, + ptCenter.y - PWL_TRIANGLE_HALFLEN); + + if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && + rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { + sButton << "0 g\n"; + sButton << pt1.x << " " << pt1.y << " m\n"; + sButton << pt2.x << " " << pt2.y << " l\n"; + sButton << pt3.x << " " << pt3.y << " l\n"; + sButton << pt1.x << " " << pt1.y << " l f\n"; + + sAppStream << sButton; + } + } break; + case PSBT_MAX: { + CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); + CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, + ptCenter.y + PWL_TRIANGLE_HALFLEN); + CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, + ptCenter.y - PWL_TRIANGLE_HALFLEN); + + if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && + rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { + sButton << "0 g\n"; + sButton << pt1.x << " " << pt1.y << " m\n"; + sButton << pt2.x << " " << pt2.y << " l\n"; + sButton << pt3.x << " " << pt3.y << " l\n"; + sButton << pt1.x << " " << pt1.y << " l f\n"; + + sAppStream << sButton; + } + } break; + default: + break; + } + break; + case SBT_VSCROLL: + switch (m_eSBButtonType) { + case PSBT_MIN: { + CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN, + ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); + CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN, + ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); + CPDF_Point pt3(ptCenter.x, ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); + + if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && + rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { + sButton << "0 g\n"; + sButton << pt1.x << " " << pt1.y << " m\n"; + sButton << pt2.x << " " << pt2.y << " l\n"; + sButton << pt3.x << " " << pt3.y << " l\n"; + sButton << pt1.x << " " << pt1.y << " l f\n"; + + sAppStream << sButton; + } + } break; + case PSBT_MAX: { + CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN, + ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); + CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN, + ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); + CPDF_Point pt3(ptCenter.x, ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); + + if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && + rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { + sButton << "0 g\n"; + sButton << pt1.x << " " << pt1.y << " m\n"; + sButton << pt2.x << " " << pt2.y << " l\n"; + sButton << pt3.x << " " << pt3.y << " l\n"; + sButton << pt1.x << " " << pt1.y << " l f\n"; + + sAppStream << sButton; + } + } break; + default: + break; + } + break; + default: + break; + } + + sAppStream << "Q\n"; } -void CPWL_SBButton::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - if (!IsVisible()) return; - - CPDF_Rect rectWnd = GetWindowRect(); - if (rectWnd.IsEmpty()) return; - - CPDF_Point ptCenter = GetCenterPoint(); - int32_t nTransparancy = GetTransparency(); - - switch (m_eScrollBarType) - { - case SBT_HSCROLL: - CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); - switch (m_eSBButtonType) - { - case PSBT_MIN: - { - CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y); - CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN); - CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN); - - if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && - rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN ) - { - CFX_PathData path; - - path.SetPointCount(4); - path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO); - path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO); - path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO); - path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO); - - pDevice->DrawPath(&path, pUser2Device, NULL, - CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR,nTransparancy), - 0, FXFILL_ALTERNATE); - } - } - break; - case PSBT_MAX: - { - CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y); - CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN); - CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN); - - if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && - rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN ) - { - CFX_PathData path; - - path.SetPointCount(4); - path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO); - path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO); - path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO); - path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO); - - pDevice->DrawPath(&path, pUser2Device, NULL, - CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR,nTransparancy), - 0, FXFILL_ALTERNATE); - } - } - break; - default: - break; - } - break; - case SBT_VSCROLL: - switch (m_eSBButtonType) - { - case PSBT_MIN: - { - //draw border - CPDF_Rect rcDraw = rectWnd; - CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, - ArgbEncode(nTransparancy,100,100,100),0.0f); - - //draw inner border - rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f); - CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, - ArgbEncode(nTransparancy,255,255,255),1.0f); - - //draw background - - rcDraw = CPWL_Utils::DeflateRect(rectWnd,1.0f); - - if (IsEnabled()) - CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw, nTransparancy, 80, 220); - else - CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, ArgbEncode(255,255,255,255)); - - //draw arrow - - if (rectWnd.top - rectWnd.bottom > 6.0f ) - { - FX_FLOAT fX = rectWnd.left + 1.5f; - FX_FLOAT fY = rectWnd.bottom; - CPDF_Point pts[7] = { - CPDF_Point(fX+2.5f, fY+4.0f), - CPDF_Point(fX+2.5f, fY+3.0f), - CPDF_Point(fX+4.5f, fY+5.0f), - CPDF_Point(fX+6.5f, fY+3.0f), - CPDF_Point(fX+6.5f, fY+4.0f), - CPDF_Point(fX+4.5f, fY+6.0f), - CPDF_Point(fX+2.5f, fY+4.0f)}; - - - if (IsEnabled()) - CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7, ArgbEncode(nTransparancy,255,255,255)); - else - CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7, - CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_HEAVYGRAYCOLOR,255)); - } - } - break; - case PSBT_MAX: - { - //draw border - CPDF_Rect rcDraw = rectWnd; - CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, - ArgbEncode(nTransparancy,100,100,100),0.0f); - - //draw inner border - rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f); - CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, - ArgbEncode(nTransparancy,255,255,255),1.0f); - - //draw background - rcDraw = CPWL_Utils::DeflateRect(rectWnd,1.0f); - if (IsEnabled()) - CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw, nTransparancy, 80, 220); - else - CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, ArgbEncode(255,255,255,255)); - - //draw arrow - - if (rectWnd.top - rectWnd.bottom > 6.0f ) - { - FX_FLOAT fX = rectWnd.left + 1.5f; - FX_FLOAT fY = rectWnd.bottom; - - CPDF_Point pts[7] = { - CPDF_Point(fX+2.5f, fY+5.0f), - CPDF_Point(fX+2.5f, fY+6.0f), - CPDF_Point(fX+4.5f, fY+4.0f), - CPDF_Point(fX+6.5f, fY+6.0f), - CPDF_Point(fX+6.5f, fY+5.0f), - CPDF_Point(fX+4.5f, fY+3.0f), - CPDF_Point(fX+2.5f, fY+5.0f)}; - - - if (IsEnabled()) - CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7, ArgbEncode(nTransparancy,255,255,255)); - else - CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7, - CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_HEAVYGRAYCOLOR,255)); - } - } - break; - case PSBT_POS: - { - //CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); - - //draw border - CPDF_Rect rcDraw = rectWnd; - CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, - ArgbEncode(nTransparancy,100,100,100),0.0f); - - //draw inner border - rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f); - CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, - ArgbEncode(nTransparancy,255,255,255),1.0f); - - if (IsEnabled()) - { - //draw shadow effect - - CPDF_Point ptTop = CPDF_Point(rectWnd.left,rectWnd.top-1.0f); - CPDF_Point ptBottom = CPDF_Point(rectWnd.left,rectWnd.bottom+1.0f); - - ptTop.x += 1.5f; - ptBottom.x += 1.5f; - - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, - ArgbEncode(nTransparancy,210,210,210),1.0f); - - ptTop.x += 1.0f; - ptBottom.x += 1.0f; - - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, - ArgbEncode(nTransparancy,220,220,220),1.0f); - - ptTop.x += 1.0f; - ptBottom.x += 1.0f; - - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, - ArgbEncode(nTransparancy,240,240,240),1.0f); - - ptTop.x += 1.0f; - ptBottom.x += 1.0f; - - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, - ArgbEncode(nTransparancy,240,240,240),1.0f); - - ptTop.x += 1.0f; - ptBottom.x += 1.0f; - - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, - ArgbEncode(nTransparancy,210,210,210),1.0f); - - ptTop.x += 1.0f; - ptBottom.x += 1.0f; - - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, - ArgbEncode(nTransparancy,180,180,180),1.0f); - - ptTop.x += 1.0f; - ptBottom.x += 1.0f; - - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, - ArgbEncode(nTransparancy,150,150,150),1.0f); - - ptTop.x += 1.0f; - ptBottom.x += 1.0f; - - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, - ArgbEncode(nTransparancy,150,150,150),1.0f); - - ptTop.x += 1.0f; - ptBottom.x += 1.0f; - - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, - ArgbEncode(nTransparancy,180,180,180),1.0f); - - ptTop.x += 1.0f; - ptBottom.x += 1.0f; - - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, - ArgbEncode(nTransparancy,210,210,210),1.0f); - } - else - { - CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, ArgbEncode(255,255,255,255)); - } - - //draw friction +void CPWL_SBButton::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + if (!IsVisible()) + return; + + CPDF_Rect rectWnd = GetWindowRect(); + if (rectWnd.IsEmpty()) + return; + + CPDF_Point ptCenter = GetCenterPoint(); + int32_t nTransparancy = GetTransparency(); + + switch (m_eScrollBarType) { + case SBT_HSCROLL: + CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); + switch (m_eSBButtonType) { + case PSBT_MIN: { + CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); + CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, + ptCenter.y + PWL_TRIANGLE_HALFLEN); + CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, + ptCenter.y - PWL_TRIANGLE_HALFLEN); + + if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && + rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { + CFX_PathData path; + + path.SetPointCount(4); + path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO); + path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO); + path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO); + path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO); + + pDevice->DrawPath(&path, pUser2Device, NULL, + CPWL_Utils::PWLColorToFXColor( + PWL_DEFAULT_BLACKCOLOR, nTransparancy), + 0, FXFILL_ALTERNATE); + } + } break; + case PSBT_MAX: { + CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); + CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, + ptCenter.y + PWL_TRIANGLE_HALFLEN); + CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, + ptCenter.y - PWL_TRIANGLE_HALFLEN); + + if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && + rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { + CFX_PathData path; + + path.SetPointCount(4); + path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO); + path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO); + path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO); + path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO); + + pDevice->DrawPath(&path, pUser2Device, NULL, + CPWL_Utils::PWLColorToFXColor( + PWL_DEFAULT_BLACKCOLOR, nTransparancy), + 0, FXFILL_ALTERNATE); + } + } break; + default: + break; + } + break; + case SBT_VSCROLL: + switch (m_eSBButtonType) { + case PSBT_MIN: { + // draw border + CPDF_Rect rcDraw = rectWnd; + CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, + ArgbEncode(nTransparancy, 100, 100, 100), + 0.0f); + + // draw inner border + rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f); + CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, + ArgbEncode(nTransparancy, 255, 255, 255), + 1.0f); + + // draw background + + rcDraw = CPWL_Utils::DeflateRect(rectWnd, 1.0f); + + if (IsEnabled()) + CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw, + nTransparancy, 80, 220); + else + CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, + ArgbEncode(255, 255, 255, 255)); + + // draw arrow + + if (rectWnd.top - rectWnd.bottom > 6.0f) { + FX_FLOAT fX = rectWnd.left + 1.5f; + FX_FLOAT fY = rectWnd.bottom; + CPDF_Point pts[7] = {CPDF_Point(fX + 2.5f, fY + 4.0f), + CPDF_Point(fX + 2.5f, fY + 3.0f), + CPDF_Point(fX + 4.5f, fY + 5.0f), + CPDF_Point(fX + 6.5f, fY + 3.0f), + CPDF_Point(fX + 6.5f, fY + 4.0f), + CPDF_Point(fX + 4.5f, fY + 6.0f), + CPDF_Point(fX + 2.5f, fY + 4.0f)}; + + if (IsEnabled()) + CPWL_Utils::DrawFillArea( + pDevice, pUser2Device, pts, 7, + ArgbEncode(nTransparancy, 255, 255, 255)); + else + CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7, + CPWL_Utils::PWLColorToFXColor( + PWL_DEFAULT_HEAVYGRAYCOLOR, 255)); + } + } break; + case PSBT_MAX: { + // draw border + CPDF_Rect rcDraw = rectWnd; + CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, + ArgbEncode(nTransparancy, 100, 100, 100), + 0.0f); + + // draw inner border + rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f); + CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, + ArgbEncode(nTransparancy, 255, 255, 255), + 1.0f); + + // draw background + rcDraw = CPWL_Utils::DeflateRect(rectWnd, 1.0f); + if (IsEnabled()) + CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw, + nTransparancy, 80, 220); + else + CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, + ArgbEncode(255, 255, 255, 255)); + + // draw arrow + + if (rectWnd.top - rectWnd.bottom > 6.0f) { + FX_FLOAT fX = rectWnd.left + 1.5f; + FX_FLOAT fY = rectWnd.bottom; + + CPDF_Point pts[7] = {CPDF_Point(fX + 2.5f, fY + 5.0f), + CPDF_Point(fX + 2.5f, fY + 6.0f), + CPDF_Point(fX + 4.5f, fY + 4.0f), + CPDF_Point(fX + 6.5f, fY + 6.0f), + CPDF_Point(fX + 6.5f, fY + 5.0f), + CPDF_Point(fX + 4.5f, fY + 3.0f), + CPDF_Point(fX + 2.5f, fY + 5.0f)}; + + if (IsEnabled()) + CPWL_Utils::DrawFillArea( + pDevice, pUser2Device, pts, 7, + ArgbEncode(nTransparancy, 255, 255, 255)); + else + CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7, + CPWL_Utils::PWLColorToFXColor( + PWL_DEFAULT_HEAVYGRAYCOLOR, 255)); + } + } break; + case PSBT_POS: { + // CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); + + // draw border + CPDF_Rect rcDraw = rectWnd; + CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, + ArgbEncode(nTransparancy, 100, 100, 100), + 0.0f); + + // draw inner border + rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f); + CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, + ArgbEncode(nTransparancy, 255, 255, 255), + 1.0f); + + if (IsEnabled()) { + // draw shadow effect + + CPDF_Point ptTop = CPDF_Point(rectWnd.left, rectWnd.top - 1.0f); + CPDF_Point ptBottom = + CPDF_Point(rectWnd.left, rectWnd.bottom + 1.0f); + + ptTop.x += 1.5f; + ptBottom.x += 1.5f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, + ArgbEncode(nTransparancy, 210, 210, 210), + 1.0f); + + ptTop.x += 1.0f; + ptBottom.x += 1.0f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, + ArgbEncode(nTransparancy, 220, 220, 220), + 1.0f); + + ptTop.x += 1.0f; + ptBottom.x += 1.0f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, + ArgbEncode(nTransparancy, 240, 240, 240), + 1.0f); + + ptTop.x += 1.0f; + ptBottom.x += 1.0f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, + ArgbEncode(nTransparancy, 240, 240, 240), + 1.0f); + + ptTop.x += 1.0f; + ptBottom.x += 1.0f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, + ArgbEncode(nTransparancy, 210, 210, 210), + 1.0f); + + ptTop.x += 1.0f; + ptBottom.x += 1.0f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, + ArgbEncode(nTransparancy, 180, 180, 180), + 1.0f); + + ptTop.x += 1.0f; + ptBottom.x += 1.0f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, + ArgbEncode(nTransparancy, 150, 150, 150), + 1.0f); + + ptTop.x += 1.0f; + ptBottom.x += 1.0f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, + ArgbEncode(nTransparancy, 150, 150, 150), + 1.0f); + + ptTop.x += 1.0f; + ptBottom.x += 1.0f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, + ArgbEncode(nTransparancy, 180, 180, 180), + 1.0f); + + ptTop.x += 1.0f; + ptBottom.x += 1.0f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, + ArgbEncode(nTransparancy, 210, 210, 210), + 1.0f); + } else { + CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, + ArgbEncode(255, 255, 255, 255)); + } + + // draw friction + + if (rectWnd.Height() > 8.0f) { + FX_COLORREF crStroke = ArgbEncode(nTransparancy, 120, 120, 120); + if (!IsEnabled()) + crStroke = CPWL_Utils::PWLColorToFXColor( + PWL_DEFAULT_HEAVYGRAYCOLOR, 255); + + FX_FLOAT nFrictionWidth = 5.0f; + FX_FLOAT nFrictionHeight = 5.5f; - if (rectWnd.Height() > 8.0f) - { - FX_COLORREF crStroke = ArgbEncode(nTransparancy,120,120,120); - if (!IsEnabled()) - crStroke = CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_HEAVYGRAYCOLOR,255); + CPDF_Point ptLeft = + CPDF_Point(ptCenter.x - nFrictionWidth / 2.0f, + ptCenter.y - nFrictionHeight / 2.0f + 0.5f); + CPDF_Point ptRight = + CPDF_Point(ptCenter.x + nFrictionWidth / 2.0f, + ptCenter.y - nFrictionHeight / 2.0f + 0.5f); - FX_FLOAT nFrictionWidth = 5.0f; - FX_FLOAT nFrictionHeight = 5.5f; + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, + crStroke, 1.0f); - CPDF_Point ptLeft = CPDF_Point(ptCenter.x - nFrictionWidth / 2.0f, ptCenter.y - nFrictionHeight / 2.0f + 0.5f); - CPDF_Point ptRight = CPDF_Point(ptCenter.x + nFrictionWidth / 2.0f, ptCenter.y - nFrictionHeight / 2.0f + 0.5f); + ptLeft.y += 2.0f; + ptRight.y += 2.0f; - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, - crStroke,1.0f); + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, + crStroke, 1.0f); - ptLeft.y += 2.0f; - ptRight.y += 2.0f; + ptLeft.y += 2.0f; + ptRight.y += 2.0f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, + crStroke, 1.0f); - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, - crStroke,1.0f); + /* + ptLeft.y += 1.5f; + ptRight.y += 1.5f; + + CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, + ArgbEncode(nTransparancy,150,150,150),1.0f); + */ + } + } break; + default: + break; + } + break; + default: + break; + } +} - ptLeft.y += 2.0f; - ptRight.y += 2.0f; +FX_BOOL CPWL_SBButton::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonDown(point, nFlag); - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, - crStroke,1.0f); + if (CPWL_Wnd* pParent = GetParentWindow()) + pParent->OnNotify(this, PNM_LBUTTONDOWN, 0, (intptr_t)&point); - /* - ptLeft.y += 1.5f; - ptRight.y += 1.5f; + m_bMouseDown = TRUE; + SetCapture(); - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, - ArgbEncode(nTransparancy,150,150,150),1.0f); - */ - } - } - break; - default: - break; - } - break; - default: - break; - } + return TRUE; } -FX_BOOL CPWL_SBButton::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonDown(point,nFlag); +FX_BOOL CPWL_SBButton::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonUp(point, nFlag); - if (CPWL_Wnd * pParent = GetParentWindow()) - pParent->OnNotify(this,PNM_LBUTTONDOWN,0,(intptr_t)&point); + if (CPWL_Wnd* pParent = GetParentWindow()) + pParent->OnNotify(this, PNM_LBUTTONUP, 0, (intptr_t)&point); - m_bMouseDown = TRUE; - SetCapture(); + m_bMouseDown = FALSE; + ReleaseCapture(); - return TRUE; + return TRUE; } -FX_BOOL CPWL_SBButton::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonUp(point,nFlag); +FX_BOOL CPWL_SBButton::OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnMouseMove(point, nFlag); - if (CPWL_Wnd * pParent = GetParentWindow()) - pParent->OnNotify(this,PNM_LBUTTONUP,0,(intptr_t)&point); + if (CPWL_Wnd* pParent = GetParentWindow()) { + pParent->OnNotify(this, PNM_MOUSEMOVE, 0, (intptr_t)&point); - m_bMouseDown = FALSE; - ReleaseCapture(); + /* + if (m_bMouseDown && (m_eSBButtonType == PSBT_MIN || m_eSBButtonType == + PSBT_MAX)) + { + if + (!pParent->OnNotify(this,PNM_LBUTTONDOWN,nFlags,(intptr_t)&point)) + return FALSE; + } + */ + } - return TRUE; + return TRUE; } -FX_BOOL CPWL_SBButton::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnMouseMove(point,nFlag); +/* ------------------------------- CPWL_ScrollBar + * ---------------------------------- */ - if (CPWL_Wnd * pParent = GetParentWindow()) - { - pParent->OnNotify(this,PNM_MOUSEMOVE,0,(intptr_t)&point); +CPWL_ScrollBar::CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType) + : m_sbType(sbType), + m_pMinButton(NULL), + m_pMaxButton(NULL), + m_pPosButton(NULL), + m_bMouseDown(FALSE), + m_bMinOrMax(FALSE), + m_bNotifyForever(TRUE) {} - /* - if (m_bMouseDown && (m_eSBButtonType == PSBT_MIN || m_eSBButtonType == PSBT_MAX)) - { - if (!pParent->OnNotify(this,PNM_LBUTTONDOWN,nFlags,(intptr_t)&point)) - return FALSE; - } - */ - } +CPWL_ScrollBar::~CPWL_ScrollBar() {} - return TRUE; +CFX_ByteString CPWL_ScrollBar::GetClassName() const { + return "CPWL_ScrollBar"; } -/* ------------------------------- CPWL_ScrollBar ---------------------------------- */ - -CPWL_ScrollBar::CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType): - m_sbType(sbType), - m_pMinButton(NULL), - m_pMaxButton(NULL), - m_pPosButton(NULL), - m_bMouseDown(FALSE), - m_bMinOrMax(FALSE), - m_bNotifyForever(TRUE) -{ +void CPWL_ScrollBar::OnCreate(PWL_CREATEPARAM& cp) { + cp.eCursorType = FXCT_ARROW; } -CPWL_ScrollBar::~CPWL_ScrollBar() -{ +void CPWL_ScrollBar::RePosChildWnd() { + CPDF_Rect rcClient = GetClientRect(); + CPDF_Rect rcMinButton, rcMaxButton; + FX_FLOAT fBWidth = 0; + + switch (m_sbType) { + case SBT_HSCROLL: + if (rcClient.right - rcClient.left > + PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + + 2) { + rcMinButton = + CPDF_Rect(rcClient.left, rcClient.bottom, + rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH, rcClient.top); + rcMaxButton = CPDF_Rect(rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH, + rcClient.bottom, rcClient.right, rcClient.top); + } else { + fBWidth = (rcClient.right - rcClient.left - + PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / + 2; + + if (fBWidth > 0) { + rcMinButton = CPDF_Rect(rcClient.left, rcClient.bottom, + rcClient.left + fBWidth, rcClient.top); + rcMaxButton = CPDF_Rect(rcClient.right - fBWidth, rcClient.bottom, + rcClient.right, rcClient.top); + } else + SetVisible(FALSE); + } + break; + case SBT_VSCROLL: + if (IsFloatBigger(rcClient.top - rcClient.bottom, + PWL_SCROLLBAR_BUTTON_WIDTH * 2 + + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2)) { + rcMinButton = + CPDF_Rect(rcClient.left, rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH, + rcClient.right, rcClient.top); + rcMaxButton = CPDF_Rect(rcClient.left, rcClient.bottom, rcClient.right, + rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH); + } else { + fBWidth = (rcClient.top - rcClient.bottom - + PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / + 2; + + if (IsFloatBigger(fBWidth, 0)) { + rcMinButton = CPDF_Rect(rcClient.left, rcClient.top - fBWidth, + rcClient.right, rcClient.top); + rcMaxButton = CPDF_Rect(rcClient.left, rcClient.bottom, + rcClient.right, rcClient.bottom + fBWidth); + } else + SetVisible(FALSE); + } + break; + } + + if (m_pMinButton) + m_pMinButton->Move(rcMinButton, TRUE, FALSE); + if (m_pMaxButton) + m_pMaxButton->Move(rcMaxButton, TRUE, FALSE); + MovePosButton(FALSE); } -CFX_ByteString CPWL_ScrollBar::GetClassName() const -{ - return "CPWL_ScrollBar"; -} +void CPWL_ScrollBar::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { + CPDF_Rect rectWnd = GetWindowRect(); -void CPWL_ScrollBar::OnCreate(PWL_CREATEPARAM & cp) -{ - cp.eCursorType = FXCT_ARROW; -} - -void CPWL_ScrollBar::RePosChildWnd() -{ - CPDF_Rect rcClient = GetClientRect(); - CPDF_Rect rcMinButton,rcMaxButton; - FX_FLOAT fBWidth = 0; - - switch (m_sbType) - { - case SBT_HSCROLL: - if (rcClient.right - rcClient.left > PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2) - { - rcMinButton = CPDF_Rect(rcClient.left,rcClient.bottom, - rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.top); - rcMaxButton = CPDF_Rect(rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.bottom, - rcClient.right,rcClient.top); - } - else - { - fBWidth = (rcClient.right - rcClient.left - PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / 2; - - if (fBWidth > 0) - { - rcMinButton = CPDF_Rect(rcClient.left,rcClient.bottom, - rcClient.left + fBWidth,rcClient.top); - rcMaxButton = CPDF_Rect(rcClient.right - fBWidth,rcClient.bottom, - rcClient.right,rcClient.top); - } - else SetVisible(FALSE); - } - break; - case SBT_VSCROLL: - if (IsFloatBigger(rcClient.top - rcClient.bottom, PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2)) - { - rcMinButton = CPDF_Rect(rcClient.left,rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH, - rcClient.right,rcClient.top); - rcMaxButton = CPDF_Rect(rcClient.left,rcClient.bottom, - rcClient.right,rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH); - } - else - { - fBWidth = (rcClient.top - rcClient.bottom - PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / 2; - - if (IsFloatBigger(fBWidth, 0)) - { - rcMinButton = CPDF_Rect(rcClient.left,rcClient.top - fBWidth, - rcClient.right,rcClient.top); - rcMaxButton = CPDF_Rect(rcClient.left,rcClient.bottom, - rcClient.right,rcClient.bottom + fBWidth); - } - else SetVisible(FALSE); - } - break; - } - - if (m_pMinButton) - m_pMinButton->Move(rcMinButton, TRUE, FALSE); - if (m_pMaxButton) - m_pMaxButton->Move(rcMaxButton, TRUE, FALSE); - MovePosButton(FALSE); -} + if (IsVisible() && !rectWnd.IsEmpty()) { + CFX_ByteTextBuf sButton; -void CPWL_ScrollBar::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - CPDF_Rect rectWnd = GetWindowRect(); + sButton << "q\n"; + sButton << "0 w\n" + << CPWL_Utils::GetColorAppStream(GetBackgroundColor(), TRUE); + sButton << rectWnd.left << " " << rectWnd.bottom << " " + << rectWnd.right - rectWnd.left << " " + << rectWnd.top - rectWnd.bottom << " re b Q\n"; - if (IsVisible() && !rectWnd.IsEmpty()) - { - CFX_ByteTextBuf sButton; + sAppStream << sButton; + } +} - sButton << "q\n"; - sButton << "0 w\n" << CPWL_Utils::GetColorAppStream(GetBackgroundColor(),TRUE); - sButton << rectWnd.left << " " << rectWnd.bottom << " " - << rectWnd.right - rectWnd.left << " " << rectWnd.top - rectWnd.bottom << " re b Q\n"; +void CPWL_ScrollBar::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPDF_Rect rectWnd = GetWindowRect(); + + if (IsVisible() && !rectWnd.IsEmpty()) { + CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rectWnd, + GetBackgroundColor(), GetTransparency()); + + CPWL_Utils::DrawStrokeLine( + pDevice, pUser2Device, + CPDF_Point(rectWnd.left + 2.0f, rectWnd.top - 2.0f), + CPDF_Point(rectWnd.left + 2.0f, rectWnd.bottom + 2.0f), + ArgbEncode(GetTransparency(), 100, 100, 100), 1.0f); + + CPWL_Utils::DrawStrokeLine( + pDevice, pUser2Device, + CPDF_Point(rectWnd.right - 2.0f, rectWnd.top - 2.0f), + CPDF_Point(rectWnd.right - 2.0f, rectWnd.bottom + 2.0f), + ArgbEncode(GetTransparency(), 100, 100, 100), 1.0f); + } +} - sAppStream << sButton; - } +FX_BOOL CPWL_ScrollBar::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonDown(point, nFlag); + + if (HasFlag(PWS_AUTOTRANSPARENT)) { + if (GetTransparency() != 255) { + SetTransparency(255); + InvalidateRect(); + } + } + + CPDF_Rect rcMinArea, rcMaxArea; + + if (m_pPosButton && m_pPosButton->IsVisible()) { + CPDF_Rect rcClient = GetClientRect(); + CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect(); + + switch (m_sbType) { + case SBT_HSCROLL: + rcMinArea = CPDF_Rect(rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH, + rcClient.bottom, rcPosButton.left, rcClient.top); + rcMaxArea = CPDF_Rect(rcPosButton.right, rcClient.bottom, + rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH, + rcClient.top); + + break; + case SBT_VSCROLL: + rcMinArea = CPDF_Rect(rcClient.left, rcPosButton.top, rcClient.right, + rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH); + rcMaxArea = CPDF_Rect(rcClient.left, + rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH, + rcClient.right, rcPosButton.bottom); + break; + } + + rcMinArea.Normalize(); + rcMaxArea.Normalize(); + + if (rcMinArea.Contains(point.x, point.y)) { + m_sData.SubBig(); + MovePosButton(TRUE); + NotifyScrollWindow(); + } + + if (rcMaxArea.Contains(point.x, point.y)) { + m_sData.AddBig(); + MovePosButton(TRUE); + NotifyScrollWindow(); + } + } + + return TRUE; } -void CPWL_ScrollBar::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPDF_Rect rectWnd = GetWindowRect(); +FX_BOOL CPWL_ScrollBar::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + CPWL_Wnd::OnLButtonUp(point, nFlag); - if (IsVisible() && !rectWnd.IsEmpty()) - { - CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rectWnd, GetBackgroundColor(), GetTransparency()); + if (HasFlag(PWS_AUTOTRANSPARENT)) { + if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY) { + SetTransparency(PWL_SCROLLBAR_TRANSPARANCY); + InvalidateRect(); + } + } - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, - CPDF_Point(rectWnd.left+2.0f,rectWnd.top-2.0f), CPDF_Point(rectWnd.left+2.0f,rectWnd.bottom+2.0f), - ArgbEncode(GetTransparency(), 100, 100, 100), 1.0f); + EndTimer(); + m_bMouseDown = FALSE; - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, - CPDF_Point(rectWnd.right-2.0f,rectWnd.top-2.0f), CPDF_Point(rectWnd.right-2.0f,rectWnd.bottom+2.0f), - ArgbEncode(GetTransparency(), 100, 100, 100),1.0f); - } + return TRUE; } -FX_BOOL CPWL_ScrollBar::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonDown(point,nFlag); - - if (HasFlag(PWS_AUTOTRANSPARENT)) - { - if (GetTransparency() != 255) - { - SetTransparency(255); - InvalidateRect(); - } - } - - CPDF_Rect rcMinArea,rcMaxArea; - - if (m_pPosButton && m_pPosButton->IsVisible()) - { - CPDF_Rect rcClient = GetClientRect(); - CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect(); - - switch (m_sbType) - { - case SBT_HSCROLL: - rcMinArea = CPDF_Rect(rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.bottom, - rcPosButton.left,rcClient.top); - rcMaxArea = CPDF_Rect(rcPosButton.right,rcClient.bottom, - rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.top); - - break; - case SBT_VSCROLL: - rcMinArea = CPDF_Rect(rcClient.left,rcPosButton.top, - rcClient.right,rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH); - rcMaxArea = CPDF_Rect(rcClient.left,rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH, - rcClient.right,rcPosButton.bottom); - break; - } - - rcMinArea.Normalize(); - rcMaxArea.Normalize(); - - if (rcMinArea.Contains(point.x,point.y)) - { - m_sData.SubBig(); - MovePosButton(TRUE); - NotifyScrollWindow(); - } - - if (rcMaxArea.Contains(point.x,point.y)) - { - m_sData.AddBig(); - MovePosButton(TRUE); - NotifyScrollWindow(); - } - } - - return TRUE; +void CPWL_ScrollBar::OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam, + intptr_t lParam) { + CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); + + switch (msg) { + case PNM_LBUTTONDOWN: + if (pWnd == m_pMinButton) { + OnMinButtonLBDown(*(CPDF_Point*)lParam); + } + + if (pWnd == m_pMaxButton) { + OnMaxButtonLBDown(*(CPDF_Point*)lParam); + } + + if (pWnd == m_pPosButton) { + OnPosButtonLBDown(*(CPDF_Point*)lParam); + } + break; + case PNM_LBUTTONUP: + if (pWnd == m_pMinButton) { + OnMinButtonLBUp(*(CPDF_Point*)lParam); + } + + if (pWnd == m_pMaxButton) { + OnMaxButtonLBUp(*(CPDF_Point*)lParam); + } + + if (pWnd == m_pPosButton) { + OnPosButtonLBUp(*(CPDF_Point*)lParam); + } + break; + case PNM_MOUSEMOVE: + if (pWnd == m_pMinButton) { + OnMinButtonMouseMove(*(CPDF_Point*)lParam); + } + + if (pWnd == m_pMaxButton) { + OnMaxButtonMouseMove(*(CPDF_Point*)lParam); + } + + if (pWnd == m_pPosButton) { + OnPosButtonMouseMove(*(CPDF_Point*)lParam); + } + break; + case PNM_SETSCROLLINFO: { + if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) { + if (FXSYS_memcmp(&m_OriginInfo, pInfo, sizeof(PWL_SCROLL_INFO)) != 0) { + m_OriginInfo = *pInfo; + FX_FLOAT fMax = + pInfo->fContentMax - pInfo->fContentMin - pInfo->fPlateWidth; + fMax = fMax > 0.0f ? fMax : 0.0f; + SetScrollRange(0, fMax, pInfo->fPlateWidth); + SetScrollStep(pInfo->fBigStep, pInfo->fSmallStep); + } + } + } break; + case PNM_SETSCROLLPOS: { + FX_FLOAT fPos = *(FX_FLOAT*)lParam; + switch (m_sbType) { + case SBT_HSCROLL: + fPos = fPos - m_OriginInfo.fContentMin; + break; + case SBT_VSCROLL: + fPos = m_OriginInfo.fContentMax - fPos; + break; + } + SetScrollPos(fPos); + } break; + } } -FX_BOOL CPWL_ScrollBar::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - CPWL_Wnd::OnLButtonUp(point,nFlag); - - if (HasFlag(PWS_AUTOTRANSPARENT)) - { - if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY) - { - SetTransparency(PWL_SCROLLBAR_TRANSPARANCY); - InvalidateRect(); - } - } +void CPWL_ScrollBar::CreateButtons(const PWL_CREATEPARAM& cp) { + PWL_CREATEPARAM scp = cp; + scp.pParentWnd = this; + scp.dwBorderWidth = 2; + scp.nBorderStyle = PBS_BEVELED; + + scp.dwFlags = + PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PWS_NOREFRESHCLIP; + + if (!m_pMinButton) { + m_pMinButton = new CPWL_SBButton(m_sbType, PSBT_MIN); + m_pMinButton->Create(scp); + } + + if (!m_pMaxButton) { + m_pMaxButton = new CPWL_SBButton(m_sbType, PSBT_MAX); + m_pMaxButton->Create(scp); + } + + if (!m_pPosButton) { + m_pPosButton = new CPWL_SBButton(m_sbType, PSBT_POS); + m_pPosButton->SetVisible(FALSE); + m_pPosButton->Create(scp); + } +} - EndTimer(); - m_bMouseDown = FALSE; +FX_FLOAT CPWL_ScrollBar::GetScrollBarWidth() const { + if (!IsVisible()) + return 0; - return TRUE; + return PWL_SCROLLBAR_WIDTH; } -void CPWL_ScrollBar::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) -{ - CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam); - - switch (msg) - { - case PNM_LBUTTONDOWN: - if (pWnd == m_pMinButton) - { - OnMinButtonLBDown(*(CPDF_Point*)lParam); - } - - if (pWnd == m_pMaxButton) - { - OnMaxButtonLBDown(*(CPDF_Point*)lParam); - } - - if (pWnd == m_pPosButton) - { - OnPosButtonLBDown(*(CPDF_Point*)lParam); - } - break; - case PNM_LBUTTONUP: - if (pWnd == m_pMinButton) - { - OnMinButtonLBUp(*(CPDF_Point*)lParam); - } - - if (pWnd == m_pMaxButton) - { - OnMaxButtonLBUp(*(CPDF_Point*)lParam); - } - - if (pWnd == m_pPosButton) - { - OnPosButtonLBUp(*(CPDF_Point*)lParam); - } - break; - case PNM_MOUSEMOVE: - if (pWnd == m_pMinButton) - { - OnMinButtonMouseMove(*(CPDF_Point*)lParam); - } - - if (pWnd == m_pMaxButton) - { - OnMaxButtonMouseMove(*(CPDF_Point*)lParam); - } - - if (pWnd == m_pPosButton) - { - OnPosButtonMouseMove(*(CPDF_Point*)lParam); - } - break; - case PNM_SETSCROLLINFO: - { - if (PWL_SCROLL_INFO * pInfo = (PWL_SCROLL_INFO*)lParam) - { - if (FXSYS_memcmp(&m_OriginInfo, pInfo, sizeof(PWL_SCROLL_INFO)) != 0) - { - m_OriginInfo = *pInfo; - FX_FLOAT fMax = pInfo->fContentMax - pInfo->fContentMin - pInfo->fPlateWidth; - fMax = fMax > 0.0f ? fMax : 0.0f; - SetScrollRange(0, fMax, pInfo->fPlateWidth); - SetScrollStep(pInfo->fBigStep, pInfo->fSmallStep); - } - } - } - break; - case PNM_SETSCROLLPOS: - { - FX_FLOAT fPos = *(FX_FLOAT*)lParam; - switch (m_sbType) - { - case SBT_HSCROLL: - fPos = fPos - m_OriginInfo.fContentMin; - break; - case SBT_VSCROLL: - fPos = m_OriginInfo.fContentMax - fPos; - break; - } - SetScrollPos(fPos); - } - break; - } +void CPWL_ScrollBar::SetScrollRange(FX_FLOAT fMin, + FX_FLOAT fMax, + FX_FLOAT fClientWidth) { + if (m_pPosButton) { + m_sData.SetScrollRange(fMin, fMax); + m_sData.SetClientWidth(fClientWidth); + + if (IsFloatSmaller(m_sData.ScrollRange.GetWidth(), 0.0f)) { + m_pPosButton->SetVisible(FALSE); + } else { + m_pPosButton->SetVisible(TRUE); + MovePosButton(TRUE); + } + } } -void CPWL_ScrollBar::CreateButtons(const PWL_CREATEPARAM & cp) -{ - PWL_CREATEPARAM scp = cp; - scp.pParentWnd = this; - scp.dwBorderWidth = 2; - scp.nBorderStyle = PBS_BEVELED; - - scp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PWS_NOREFRESHCLIP; - - if (!m_pMinButton) - { - m_pMinButton = new CPWL_SBButton(m_sbType,PSBT_MIN); - m_pMinButton->Create(scp); - } - - if (!m_pMaxButton) - { - m_pMaxButton = new CPWL_SBButton(m_sbType,PSBT_MAX); - m_pMaxButton->Create(scp); - } - - if (!m_pPosButton) - { - m_pPosButton = new CPWL_SBButton(m_sbType,PSBT_POS); - m_pPosButton->SetVisible(FALSE); - m_pPosButton->Create(scp); - } -} +void CPWL_ScrollBar::SetScrollPos(FX_FLOAT fPos) { + FX_FLOAT fOldPos = m_sData.fScrollPos; -FX_FLOAT CPWL_ScrollBar::GetScrollBarWidth() const -{ - if (!IsVisible()) return 0; + m_sData.SetPos(fPos); - return PWL_SCROLLBAR_WIDTH; + if (!IsFloatEqual(m_sData.fScrollPos, fOldPos)) + MovePosButton(TRUE); } -void CPWL_ScrollBar::SetScrollRange(FX_FLOAT fMin,FX_FLOAT fMax,FX_FLOAT fClientWidth) -{ - if (m_pPosButton) - { - m_sData.SetScrollRange(fMin,fMax); - m_sData.SetClientWidth(fClientWidth); - - if (IsFloatSmaller(m_sData.ScrollRange.GetWidth(), 0.0f)) - { - m_pPosButton->SetVisible(FALSE); - } - else - { - m_pPosButton->SetVisible(TRUE); - MovePosButton(TRUE); - } - } +void CPWL_ScrollBar::SetScrollStep(FX_FLOAT fBigStep, FX_FLOAT fSmallStep) { + m_sData.SetBigStep(fBigStep); + m_sData.SetSmallStep(fSmallStep); } -void CPWL_ScrollBar::SetScrollPos(FX_FLOAT fPos) -{ - FX_FLOAT fOldPos = m_sData.fScrollPos; +void CPWL_ScrollBar::MovePosButton(FX_BOOL bRefresh) { + ASSERT(m_pPosButton != NULL); + ASSERT(m_pMinButton != NULL); + ASSERT(m_pMaxButton != NULL); - m_sData.SetPos(fPos); + if (m_pPosButton->IsVisible()) { + CPDF_Rect rcClient; + CPDF_Rect rcPosArea, rcPosButton; - if (!IsFloatEqual(m_sData.fScrollPos, fOldPos)) - MovePosButton(TRUE); -} + rcClient = GetClientRect(); + rcPosArea = GetScrollArea(); -void CPWL_ScrollBar::SetScrollStep(FX_FLOAT fBigStep,FX_FLOAT fSmallStep) -{ - m_sData.SetBigStep(fBigStep); - m_sData.SetSmallStep(fSmallStep); -} + FX_FLOAT fLeft, fRight, fTop, fBottom; -void CPWL_ScrollBar::MovePosButton(FX_BOOL bRefresh) -{ - ASSERT (m_pPosButton != NULL); - ASSERT (m_pMinButton != NULL); - ASSERT (m_pMaxButton != NULL); + switch (m_sbType) { + case SBT_HSCROLL: + fLeft = TrueToFace(m_sData.fScrollPos); + fRight = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth); - if (m_pPosButton->IsVisible()) - { + if (fRight - fLeft < PWL_SCROLLBAR_POSBUTTON_MINWIDTH) + fRight = fLeft + PWL_SCROLLBAR_POSBUTTON_MINWIDTH; + if (fRight > rcPosArea.right) { + fRight = rcPosArea.right; + fLeft = fRight - PWL_SCROLLBAR_POSBUTTON_MINWIDTH; + } + rcPosButton = CPDF_Rect(fLeft, rcPosArea.bottom, fRight, rcPosArea.top); + break; + case SBT_VSCROLL: + fBottom = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth); + fTop = TrueToFace(m_sData.fScrollPos); - CPDF_Rect rcClient; - CPDF_Rect rcPosArea,rcPosButton; + if (IsFloatSmaller(fTop - fBottom, PWL_SCROLLBAR_POSBUTTON_MINWIDTH)) + fBottom = fTop - PWL_SCROLLBAR_POSBUTTON_MINWIDTH; - rcClient = GetClientRect(); - rcPosArea = GetScrollArea(); + if (IsFloatSmaller(fBottom, rcPosArea.bottom)) { + fBottom = rcPosArea.bottom; + fTop = fBottom + PWL_SCROLLBAR_POSBUTTON_MINWIDTH; + } - FX_FLOAT fLeft,fRight,fTop,fBottom; + rcPosButton = CPDF_Rect(rcPosArea.left, fBottom, rcPosArea.right, fTop); - switch (m_sbType) - { - case SBT_HSCROLL: - fLeft = TrueToFace(m_sData.fScrollPos); - fRight = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth); + break; + } - if (fRight - fLeft < PWL_SCROLLBAR_POSBUTTON_MINWIDTH) - fRight = fLeft + PWL_SCROLLBAR_POSBUTTON_MINWIDTH; + m_pPosButton->Move(rcPosButton, TRUE, bRefresh); + } +} - if (fRight > rcPosArea.right) - { - fRight = rcPosArea.right; - fLeft = fRight - PWL_SCROLLBAR_POSBUTTON_MINWIDTH; - } +void CPWL_ScrollBar::OnMinButtonLBDown(const CPDF_Point& point) { + m_sData.SubSmall(); + MovePosButton(TRUE); + NotifyScrollWindow(); - rcPosButton = CPDF_Rect(fLeft , - rcPosArea.bottom, - fRight , - rcPosArea.top); + m_bMinOrMax = TRUE; - break; - case SBT_VSCROLL: - fBottom = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth); - fTop = TrueToFace(m_sData.fScrollPos); + EndTimer(); + BeginTimer(100); +} - if (IsFloatSmaller(fTop - fBottom, PWL_SCROLLBAR_POSBUTTON_MINWIDTH)) - fBottom = fTop - PWL_SCROLLBAR_POSBUTTON_MINWIDTH; +void CPWL_ScrollBar::OnMinButtonLBUp(const CPDF_Point& point) {} - if (IsFloatSmaller(fBottom, rcPosArea.bottom)) - { - fBottom = rcPosArea.bottom; - fTop = fBottom + PWL_SCROLLBAR_POSBUTTON_MINWIDTH; - } +void CPWL_ScrollBar::OnMinButtonMouseMove(const CPDF_Point& point) {} - rcPosButton = CPDF_Rect(rcPosArea.left, - fBottom, - rcPosArea.right, - fTop); +void CPWL_ScrollBar::OnMaxButtonLBDown(const CPDF_Point& point) { + m_sData.AddSmall(); + MovePosButton(TRUE); + NotifyScrollWindow(); - break; - } + m_bMinOrMax = FALSE; - m_pPosButton->Move(rcPosButton,TRUE,bRefresh); - } + EndTimer(); + BeginTimer(100); } -void CPWL_ScrollBar::OnMinButtonLBDown(const CPDF_Point & point) -{ - m_sData.SubSmall(); - MovePosButton(TRUE); - NotifyScrollWindow(); +void CPWL_ScrollBar::OnMaxButtonLBUp(const CPDF_Point& point) {} - m_bMinOrMax = TRUE; +void CPWL_ScrollBar::OnMaxButtonMouseMove(const CPDF_Point& point) {} - EndTimer(); - BeginTimer(100); -} +void CPWL_ScrollBar::OnPosButtonLBDown(const CPDF_Point& point) { + m_bMouseDown = TRUE; + + if (m_pPosButton) { + CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect(); -void CPWL_ScrollBar::OnMinButtonLBUp(const CPDF_Point & point) -{ + switch (m_sbType) { + case SBT_HSCROLL: + m_nOldPos = point.x; + m_fOldPosButton = rcPosButton.left; + break; + case SBT_VSCROLL: + m_nOldPos = point.y; + m_fOldPosButton = rcPosButton.top; + break; + } + } } -void CPWL_ScrollBar::OnMinButtonMouseMove(const CPDF_Point & point) -{ +void CPWL_ScrollBar::OnPosButtonLBUp(const CPDF_Point& point) { + if (m_bMouseDown) { + if (!m_bNotifyForever) + NotifyScrollWindow(); + } + m_bMouseDown = FALSE; } -void CPWL_ScrollBar::OnMaxButtonLBDown(const CPDF_Point & point) -{ - m_sData.AddSmall(); - MovePosButton(TRUE); - NotifyScrollWindow(); +void CPWL_ScrollBar::OnPosButtonMouseMove(const CPDF_Point& point) { + FX_FLOAT fOldScrollPos = m_sData.fScrollPos; - m_bMinOrMax = FALSE; + FX_FLOAT fNewPos = 0; - EndTimer(); - BeginTimer(100); -} + switch (m_sbType) { + case SBT_HSCROLL: + if (FXSYS_fabs(point.x - m_nOldPos) < 1) + return; + fNewPos = FaceToTrue(m_fOldPosButton + point.x - m_nOldPos); + break; + case SBT_VSCROLL: + if (FXSYS_fabs(point.y - m_nOldPos) < 1) + return; + fNewPos = FaceToTrue(m_fOldPosButton + point.y - m_nOldPos); + break; + } -void CPWL_ScrollBar::OnMaxButtonLBUp(const CPDF_Point & point) -{ -} + if (m_bMouseDown) { + switch (m_sbType) { + case SBT_HSCROLL: -void CPWL_ScrollBar::OnMaxButtonMouseMove(const CPDF_Point & point) -{ -} + if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) { + fNewPos = m_sData.ScrollRange.fMin; + } -void CPWL_ScrollBar::OnPosButtonLBDown(const CPDF_Point & point) -{ - m_bMouseDown = TRUE; - - if (m_pPosButton) - { - CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect(); - - switch(m_sbType) - { - case SBT_HSCROLL: - m_nOldPos = point.x; - m_fOldPosButton = rcPosButton.left; - break; - case SBT_VSCROLL: - m_nOldPos = point.y; - m_fOldPosButton = rcPosButton.top; - break; - } - } -} + if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) { + fNewPos = m_sData.ScrollRange.fMax; + } -void CPWL_ScrollBar::OnPosButtonLBUp(const CPDF_Point & point) -{ - if (m_bMouseDown) - { - if (!m_bNotifyForever) - NotifyScrollWindow(); - } - m_bMouseDown = FALSE; -} + m_sData.SetPos(fNewPos); + + break; + case SBT_VSCROLL: + + if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) { + fNewPos = m_sData.ScrollRange.fMin; + } + + if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) { + fNewPos = m_sData.ScrollRange.fMax; + } + + m_sData.SetPos(fNewPos); + + break; + } + + if (!IsFloatEqual(fOldScrollPos, m_sData.fScrollPos)) { + MovePosButton(TRUE); -void CPWL_ScrollBar::OnPosButtonMouseMove(const CPDF_Point & point) -{ - FX_FLOAT fOldScrollPos = m_sData.fScrollPos; - - FX_FLOAT fNewPos = 0; - - switch (m_sbType) - { - case SBT_HSCROLL: - if (FXSYS_fabs(point.x - m_nOldPos) < 1) return; - fNewPos = FaceToTrue(m_fOldPosButton + point.x - m_nOldPos); - break; - case SBT_VSCROLL: - if (FXSYS_fabs(point.y - m_nOldPos) < 1) return; - fNewPos = FaceToTrue(m_fOldPosButton + point.y - m_nOldPos); - break; - } - - if (m_bMouseDown) - { - switch (m_sbType) - { - case SBT_HSCROLL: - - if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) - { - fNewPos = m_sData.ScrollRange.fMin; - } - - if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) - { - fNewPos = m_sData.ScrollRange.fMax; - } - - m_sData.SetPos(fNewPos); - - break; - case SBT_VSCROLL: - - if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) - { - fNewPos = m_sData.ScrollRange.fMin; - } - - if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) - { - fNewPos = m_sData.ScrollRange.fMax; - } - - m_sData.SetPos(fNewPos); - - break; - } - - if (!IsFloatEqual(fOldScrollPos, m_sData.fScrollPos)) - { - MovePosButton(TRUE); - - if (m_bNotifyForever) - NotifyScrollWindow(); - } - } + if (m_bNotifyForever) + NotifyScrollWindow(); + } + } } -void CPWL_ScrollBar::NotifyScrollWindow() -{ - if (CPWL_Wnd * pParent = GetParentWindow()) - { - FX_FLOAT fPos; - switch (m_sbType) - { - case SBT_HSCROLL: - fPos = m_OriginInfo.fContentMin + m_sData.fScrollPos; - break; - case SBT_VSCROLL: - fPos = m_OriginInfo.fContentMax - m_sData.fScrollPos; - break; - } - pParent->OnNotify(this,PNM_SCROLLWINDOW,(intptr_t)m_sbType,(intptr_t)&fPos); - } +void CPWL_ScrollBar::NotifyScrollWindow() { + if (CPWL_Wnd* pParent = GetParentWindow()) { + FX_FLOAT fPos; + switch (m_sbType) { + case SBT_HSCROLL: + fPos = m_OriginInfo.fContentMin + m_sData.fScrollPos; + break; + case SBT_VSCROLL: + fPos = m_OriginInfo.fContentMax - m_sData.fScrollPos; + break; + } + pParent->OnNotify(this, PNM_SCROLLWINDOW, (intptr_t)m_sbType, + (intptr_t)&fPos); + } } -CPDF_Rect CPWL_ScrollBar::GetScrollArea() const -{ - CPDF_Rect rcClient = GetClientRect(); - CPDF_Rect rcArea; - - if (!m_pMinButton || !m_pMaxButton)return rcClient; - - CPDF_Rect rcMin = m_pMinButton->GetWindowRect(); - CPDF_Rect rcMax = m_pMaxButton->GetWindowRect(); - - FX_FLOAT fMinWidth = rcMin.right - rcMin.left; - FX_FLOAT fMinHeight = rcMin.top - rcMin.bottom; - FX_FLOAT fMaxWidth = rcMax.right - rcMax.left; - FX_FLOAT fMaxHeight = rcMax.top - rcMax.bottom; - - switch(m_sbType) - { - case SBT_HSCROLL: - if (rcClient.right - rcClient.left > fMinWidth + fMaxWidth + 2) - { - rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1,rcClient.bottom, - rcClient.right - fMaxWidth - 1,rcClient.top); - } - else - { - rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1,rcClient.bottom, - rcClient.left + fMinWidth + 1,rcClient.top); - } - break; - case SBT_VSCROLL: - if (rcClient.top - rcClient.bottom > fMinHeight + fMaxHeight + 2) - { - rcArea = CPDF_Rect(rcClient.left,rcClient.bottom + fMinHeight + 1, - rcClient.right,rcClient.top - fMaxHeight - 1); - } - else - { - rcArea = CPDF_Rect(rcClient.left,rcClient.bottom + fMinHeight + 1, - rcClient.right,rcClient.bottom + fMinHeight + 1); - } - break; - } - - rcArea.Normalize(); - - return rcArea; +CPDF_Rect CPWL_ScrollBar::GetScrollArea() const { + CPDF_Rect rcClient = GetClientRect(); + CPDF_Rect rcArea; + + if (!m_pMinButton || !m_pMaxButton) + return rcClient; + + CPDF_Rect rcMin = m_pMinButton->GetWindowRect(); + CPDF_Rect rcMax = m_pMaxButton->GetWindowRect(); + + FX_FLOAT fMinWidth = rcMin.right - rcMin.left; + FX_FLOAT fMinHeight = rcMin.top - rcMin.bottom; + FX_FLOAT fMaxWidth = rcMax.right - rcMax.left; + FX_FLOAT fMaxHeight = rcMax.top - rcMax.bottom; + + switch (m_sbType) { + case SBT_HSCROLL: + if (rcClient.right - rcClient.left > fMinWidth + fMaxWidth + 2) { + rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1, rcClient.bottom, + rcClient.right - fMaxWidth - 1, rcClient.top); + } else { + rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1, rcClient.bottom, + rcClient.left + fMinWidth + 1, rcClient.top); + } + break; + case SBT_VSCROLL: + if (rcClient.top - rcClient.bottom > fMinHeight + fMaxHeight + 2) { + rcArea = CPDF_Rect(rcClient.left, rcClient.bottom + fMinHeight + 1, + rcClient.right, rcClient.top - fMaxHeight - 1); + } else { + rcArea = CPDF_Rect(rcClient.left, rcClient.bottom + fMinHeight + 1, + rcClient.right, rcClient.bottom + fMinHeight + 1); + } + break; + } + + rcArea.Normalize(); + + return rcArea; } -FX_FLOAT CPWL_ScrollBar::TrueToFace(FX_FLOAT fTrue) -{ - CPDF_Rect rcPosArea; - rcPosArea = GetScrollArea(); +FX_FLOAT CPWL_ScrollBar::TrueToFace(FX_FLOAT fTrue) { + CPDF_Rect rcPosArea; + rcPosArea = GetScrollArea(); - FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth; - fFactWidth = fFactWidth == 0 ? 1 : fFactWidth; + FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth; + fFactWidth = fFactWidth == 0 ? 1 : fFactWidth; - FX_FLOAT fFace = 0; + FX_FLOAT fFace = 0; - switch(m_sbType) - { - case SBT_HSCROLL: - fFace = rcPosArea.left + fTrue * (rcPosArea.right - rcPosArea.left) / fFactWidth; - break; - case SBT_VSCROLL: - fFace = rcPosArea.top - fTrue * (rcPosArea.top - rcPosArea.bottom) / fFactWidth; - break; - } + switch (m_sbType) { + case SBT_HSCROLL: + fFace = rcPosArea.left + + fTrue * (rcPosArea.right - rcPosArea.left) / fFactWidth; + break; + case SBT_VSCROLL: + fFace = rcPosArea.top - + fTrue * (rcPosArea.top - rcPosArea.bottom) / fFactWidth; + break; + } - return fFace; + return fFace; } -FX_FLOAT CPWL_ScrollBar::FaceToTrue(FX_FLOAT fFace) -{ - CPDF_Rect rcPosArea; - rcPosArea = GetScrollArea(); +FX_FLOAT CPWL_ScrollBar::FaceToTrue(FX_FLOAT fFace) { + CPDF_Rect rcPosArea; + rcPosArea = GetScrollArea(); - FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth; - fFactWidth = fFactWidth == 0 ? 1 : fFactWidth; + FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth; + fFactWidth = fFactWidth == 0 ? 1 : fFactWidth; - FX_FLOAT fTrue = 0; + FX_FLOAT fTrue = 0; - switch(m_sbType) - { - case SBT_HSCROLL: - fTrue = (fFace - rcPosArea.left) * fFactWidth / (rcPosArea.right - rcPosArea.left); - break; - case SBT_VSCROLL: - fTrue = (rcPosArea.top - fFace) * fFactWidth / (rcPosArea.top - rcPosArea.bottom); - break; - } + switch (m_sbType) { + case SBT_HSCROLL: + fTrue = (fFace - rcPosArea.left) * fFactWidth / + (rcPosArea.right - rcPosArea.left); + break; + case SBT_VSCROLL: + fTrue = (rcPosArea.top - fFace) * fFactWidth / + (rcPosArea.top - rcPosArea.bottom); + break; + } - return fTrue; + return fTrue; } -void CPWL_ScrollBar::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - CreateButtons(cp); +void CPWL_ScrollBar::CreateChildWnd(const PWL_CREATEPARAM& cp) { + CreateButtons(cp); } -void CPWL_ScrollBar::TimerProc() -{ - PWL_SCROLL_PRIVATEDATA sTemp = m_sData; +void CPWL_ScrollBar::TimerProc() { + PWL_SCROLL_PRIVATEDATA sTemp = m_sData; - if (m_bMinOrMax)m_sData.SubSmall(); - else m_sData.AddSmall(); + if (m_bMinOrMax) + m_sData.SubSmall(); + else + m_sData.AddSmall(); - if (FXSYS_memcmp(&m_sData, &sTemp, sizeof(PWL_SCROLL_PRIVATEDATA)) != 0) - { - MovePosButton(TRUE); - NotifyScrollWindow(); - } + if (FXSYS_memcmp(&m_sData, &sTemp, sizeof(PWL_SCROLL_PRIVATEDATA)) != 0) { + MovePosButton(TRUE); + NotifyScrollWindow(); + } } diff --git a/fpdfsdk/src/pdfwindow/PWL_Signature.cpp b/fpdfsdk/src/pdfwindow/PWL_Signature.cpp index 76b2bd333a..bfe32ae8ad 100644 --- a/fpdfsdk/src/pdfwindow/PWL_Signature.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_Signature.cpp @@ -11,210 +11,194 @@ #include "../../include/pdfwindow/PWL_Label.h" #include "../../include/pdfwindow/PWL_Utils.h" -/* --------------------------------- CPWL_Signature_Image --------------------------------- */ +/* --------------------------------- CPWL_Signature_Image + * --------------------------------- */ -CPWL_Signature_Image::CPWL_Signature_Image() : m_pImage(NULL) -{ -} +CPWL_Signature_Image::CPWL_Signature_Image() : m_pImage(NULL) {} -CPWL_Signature_Image::~CPWL_Signature_Image() -{ -} +CPWL_Signature_Image::~CPWL_Signature_Image() {} -void CPWL_Signature_Image::SetImage(CFX_DIBSource* pImage) -{ - m_pImage = pImage; +void CPWL_Signature_Image::SetImage(CFX_DIBSource* pImage) { + m_pImage = pImage; } -CFX_DIBSource* CPWL_Signature_Image::GetImage() -{ - return m_pImage; +CFX_DIBSource* CPWL_Signature_Image::GetImage() { + return m_pImage; } -void CPWL_Signature_Image::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); +void CPWL_Signature_Image::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); - if (m_pImage) - { - CPDF_Rect rcClient = GetClientRect(); + if (m_pImage) { + CPDF_Rect rcClient = GetClientRect(); - FX_FLOAT x, y; - pUser2Device->Transform(rcClient.left, rcClient.top, x, y); + FX_FLOAT x, y; + pUser2Device->Transform(rcClient.left, rcClient.top, x, y); - pDevice->StretchDIBits(m_pImage, (int32_t)x, (int32_t)y, - (int32_t)rcClient.Width(), (int32_t)rcClient.Height()); - } + pDevice->StretchDIBits(m_pImage, (int32_t)x, (int32_t)y, + (int32_t)rcClient.Width(), + (int32_t)rcClient.Height()); + } } -void CPWL_Signature_Image::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - sAppStream << CPWL_Image::GetImageAppStream(); +void CPWL_Signature_Image::GetThisAppearanceStream( + CFX_ByteTextBuf& sAppStream) { + sAppStream << CPWL_Image::GetImageAppStream(); } -void CPWL_Signature_Image::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale) -{ - FX_FLOAT fImageW, fImageH; +void CPWL_Signature_Image::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) { + FX_FLOAT fImageW, fImageH; - GetImageSize(fImageW, fImageH); + GetImageSize(fImageW, fImageH); - CPDF_Rect rcClient = GetClientRect(); + CPDF_Rect rcClient = GetClientRect(); - fHScale = rcClient.Width() / fImageW; - fVScale = rcClient.Height() / fImageH; + fHScale = rcClient.Width() / fImageW; + fVScale = rcClient.Height() / fImageH; } -/* --------------------------------- CPWL_Signature --------------------------------- */ +/* --------------------------------- CPWL_Signature + * --------------------------------- */ -CPWL_Signature::CPWL_Signature() : - m_pText(NULL), - m_pDescription(NULL), - m_pImage(NULL), - m_bTextExist(TRUE), - m_bImageExist(FALSE), - m_bFlagExist(TRUE) -{ -} +CPWL_Signature::CPWL_Signature() + : m_pText(NULL), + m_pDescription(NULL), + m_pImage(NULL), + m_bTextExist(TRUE), + m_bImageExist(FALSE), + m_bFlagExist(TRUE) {} -CPWL_Signature::~CPWL_Signature() -{ -} +CPWL_Signature::~CPWL_Signature() {} -void CPWL_Signature::SetTextFlag(FX_BOOL bTextExist) -{ - m_bTextExist = bTextExist; +void CPWL_Signature::SetTextFlag(FX_BOOL bTextExist) { + m_bTextExist = bTextExist; - RePosChildWnd(); + RePosChildWnd(); } -void CPWL_Signature::SetImageFlag(FX_BOOL bImageExist) -{ - m_bImageExist = bImageExist; +void CPWL_Signature::SetImageFlag(FX_BOOL bImageExist) { + m_bImageExist = bImageExist; - RePosChildWnd(); + RePosChildWnd(); } -void CPWL_Signature::SetFoxitFlag(FX_BOOL bFlagExist) -{ - m_bFlagExist = bFlagExist; +void CPWL_Signature::SetFoxitFlag(FX_BOOL bFlagExist) { + m_bFlagExist = bFlagExist; } -void CPWL_Signature::SetText(const FX_WCHAR* sText) -{ - m_pText->SetText(sText); +void CPWL_Signature::SetText(const FX_WCHAR* sText) { + m_pText->SetText(sText); - RePosChildWnd(); + RePosChildWnd(); } -void CPWL_Signature::SetDescription(const FX_WCHAR* string) -{ - m_pDescription->SetText(string); +void CPWL_Signature::SetDescription(const FX_WCHAR* string) { + m_pDescription->SetText(string); - RePosChildWnd(); + RePosChildWnd(); } -void CPWL_Signature::SetImage(CFX_DIBSource* pImage) -{ - m_pImage->SetImage(pImage); +void CPWL_Signature::SetImage(CFX_DIBSource* pImage) { + m_pImage->SetImage(pImage); - RePosChildWnd(); + RePosChildWnd(); } -void CPWL_Signature::SetImageStream(CPDF_Stream * pStream, const FX_CHAR* sImageAlias) -{ - m_pImage->SetPDFStream(pStream); - m_pImage->SetImageAlias(sImageAlias); +void CPWL_Signature::SetImageStream(CPDF_Stream* pStream, + const FX_CHAR* sImageAlias) { + m_pImage->SetPDFStream(pStream); + m_pImage->SetImageAlias(sImageAlias); - RePosChildWnd(); + RePosChildWnd(); } -void CPWL_Signature::RePosChildWnd() -{ - CPDF_Rect rcClient = GetClientRect(); +void CPWL_Signature::RePosChildWnd() { + CPDF_Rect rcClient = GetClientRect(); - CPDF_Rect rcText = rcClient; - CPDF_Rect rcDescription = rcClient; + CPDF_Rect rcText = rcClient; + CPDF_Rect rcDescription = rcClient; - FX_BOOL bTextVisible = m_bTextExist && m_pText->GetText().GetLength() > 0; + FX_BOOL bTextVisible = m_bTextExist && m_pText->GetText().GetLength() > 0; - if ((bTextVisible || m_bImageExist) && - m_pDescription->GetText().GetLength() > 0) - { - if (rcClient.Width() >= rcClient.Height()) - { - rcText.right = rcText.left + rcClient.Width() / 2.0f; - rcDescription.left = rcDescription.right - rcClient.Width() / 2.0f; - } - else - { - rcText.bottom = rcText.top - rcClient.Height() / 2.0f; - rcDescription.top = rcDescription.bottom + rcClient.Height() / 2.0f; - } - } + if ((bTextVisible || m_bImageExist) && + m_pDescription->GetText().GetLength() > 0) { + if (rcClient.Width() >= rcClient.Height()) { + rcText.right = rcText.left + rcClient.Width() / 2.0f; + rcDescription.left = rcDescription.right - rcClient.Width() / 2.0f; + } else { + rcText.bottom = rcText.top - rcClient.Height() / 2.0f; + rcDescription.top = rcDescription.bottom + rcClient.Height() / 2.0f; + } + } - m_pText->SetVisible(bTextVisible); - m_pImage->SetVisible(m_bImageExist); + m_pText->SetVisible(bTextVisible); + m_pImage->SetVisible(m_bImageExist); - m_pText->Move(rcText, TRUE, FALSE); - m_pImage->Move(rcText, TRUE, FALSE); - m_pDescription->Move(rcDescription, TRUE, FALSE); + m_pText->Move(rcText, TRUE, FALSE); + m_pImage->Move(rcText, TRUE, FALSE); + m_pDescription->Move(rcDescription, TRUE, FALSE); } -void CPWL_Signature::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ - m_pImage = new CPWL_Signature_Image; - PWL_CREATEPARAM icp = cp; - icp.pParentWnd = this; - icp.dwFlags = PWS_CHILD | PWS_VISIBLE; - icp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0); - m_pImage->Create(icp); +void CPWL_Signature::CreateChildWnd(const PWL_CREATEPARAM& cp) { + m_pImage = new CPWL_Signature_Image; + PWL_CREATEPARAM icp = cp; + icp.pParentWnd = this; + icp.dwFlags = PWS_CHILD | PWS_VISIBLE; + icp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0); + m_pImage->Create(icp); - m_pText = new CPWL_Label; - PWL_CREATEPARAM acp = cp; - acp.pParentWnd = this; - acp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE | PES_AUTORETURN | PES_MIDDLE | PES_CENTER; - acp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0); - m_pText->Create(acp); + m_pText = new CPWL_Label; + PWL_CREATEPARAM acp = cp; + acp.pParentWnd = this; + acp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE | + PES_AUTORETURN | PES_MIDDLE | PES_CENTER; + acp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0); + m_pText->Create(acp); - m_pDescription = new CPWL_Label; - PWL_CREATEPARAM dcp = cp; - dcp.pParentWnd = this; - dcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE | PES_AUTORETURN | PES_LEFT | PES_CENTER; - dcp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0); - m_pDescription->Create(dcp); + m_pDescription = new CPWL_Label; + PWL_CREATEPARAM dcp = cp; + dcp.pParentWnd = this; + dcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE | + PES_AUTORETURN | PES_LEFT | PES_CENTER; + dcp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0); + m_pDescription->Create(dcp); } -void CPWL_Signature::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); +void CPWL_Signature::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); - if (m_bFlagExist) - CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, PWL_ICONTYPE_FOXIT, CPWL_Utils::GetCenterSquare(GetClientRect()), - CPWL_Color(COLORTYPE_RGB,0.91f,0.855f,0.92f), CPWL_Color(COLORTYPE_TRANSPARENT), 255); + if (m_bFlagExist) + CPWL_Utils::DrawIconAppStream( + pDevice, pUser2Device, PWL_ICONTYPE_FOXIT, + CPWL_Utils::GetCenterSquare(GetClientRect()), + CPWL_Color(COLORTYPE_RGB, 0.91f, 0.855f, 0.92f), + CPWL_Color(COLORTYPE_TRANSPARENT), 255); - /* - CPDF_Rect rcClient = GetClientRect(); + /* + CPDF_Rect rcClient = GetClientRect(); - CFX_PathData path; + CFX_PathData path; - path.SetPointCount(2); - path.SetPoint(0, rcClient.left, (rcClient.top + rcClient.bottom) * 0.5f, FXPT_MOVETO); - path.SetPoint(1, rcClient.right, (rcClient.top + rcClient.bottom) * 0.5f, FXPT_LINETO); + path.SetPointCount(2); + path.SetPoint(0, rcClient.left, (rcClient.top + rcClient.bottom) * 0.5f, + FXPT_MOVETO); + path.SetPoint(1, rcClient.right, (rcClient.top + rcClient.bottom) * 0.5f, + FXPT_LINETO); - CFX_GraphStateData gsd; - gsd.SetDashCount(2); - gsd.m_DashArray[0] = 6.0f; - gsd.m_DashArray[1] = 6.0f; - gsd.m_DashPhase = 0; + CFX_GraphStateData gsd; + gsd.SetDashCount(2); + gsd.m_DashArray[0] = 6.0f; + gsd.m_DashArray[1] = 6.0f; + gsd.m_DashPhase = 0; - gsd.m_LineWidth = 10.0f; - pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255,255,0,0), FXFILL_ALTERNATE); - */ + gsd.m_LineWidth = 10.0f; + pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255,255,0,0), + FXFILL_ALTERNATE); + */ } -void CPWL_Signature::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - CPWL_Wnd::GetThisAppearanceStream(sAppStream); +void CPWL_Signature::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { + CPWL_Wnd::GetThisAppearanceStream(sAppStream); } - - diff --git a/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp b/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp index 90fa8f880d..7f125ad1d7 100644 --- a/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp @@ -12,99 +12,76 @@ /* --------------------------- CPWL_PushButton ---------------------------- */ -CPWL_PushButton::CPWL_PushButton() -{ -} +CPWL_PushButton::CPWL_PushButton() {} -CPWL_PushButton::~CPWL_PushButton() -{ -} +CPWL_PushButton::~CPWL_PushButton() {} -CFX_ByteString CPWL_PushButton::GetClassName() const -{ - return "CPWL_PushButton"; +CFX_ByteString CPWL_PushButton::GetClassName() const { + return "CPWL_PushButton"; } -CPDF_Rect CPWL_PushButton::GetFocusRect() const -{ - return CPWL_Utils::DeflateRect(GetWindowRect(), (FX_FLOAT)GetBorderWidth()); +CPDF_Rect CPWL_PushButton::GetFocusRect() const { + return CPWL_Utils::DeflateRect(GetWindowRect(), (FX_FLOAT)GetBorderWidth()); } /* --------------------------- CPWL_CheckBox ---------------------------- */ -CPWL_CheckBox::CPWL_CheckBox() : m_bChecked(FALSE) -{ -} +CPWL_CheckBox::CPWL_CheckBox() : m_bChecked(FALSE) {} -CPWL_CheckBox::~CPWL_CheckBox() -{ -} +CPWL_CheckBox::~CPWL_CheckBox() {} -CFX_ByteString CPWL_CheckBox::GetClassName() const -{ - return "CPWL_CheckBox"; +CFX_ByteString CPWL_CheckBox::GetClassName() const { + return "CPWL_CheckBox"; } -void CPWL_CheckBox::SetCheck(FX_BOOL bCheck) -{ - m_bChecked = bCheck; +void CPWL_CheckBox::SetCheck(FX_BOOL bCheck) { + m_bChecked = bCheck; } -FX_BOOL CPWL_CheckBox::IsChecked() const -{ - return m_bChecked; +FX_BOOL CPWL_CheckBox::IsChecked() const { + return m_bChecked; } -FX_BOOL CPWL_CheckBox::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - if (IsReadOnly()) return FALSE; +FX_BOOL CPWL_CheckBox::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + if (IsReadOnly()) + return FALSE; - SetCheck(!IsChecked()); - return TRUE; + SetCheck(!IsChecked()); + return TRUE; } -FX_BOOL CPWL_CheckBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) -{ - SetCheck(!IsChecked()); - return TRUE; +FX_BOOL CPWL_CheckBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) { + SetCheck(!IsChecked()); + return TRUE; } /* --------------------------- CPWL_RadioButton ---------------------------- */ -CPWL_RadioButton::CPWL_RadioButton() : m_bChecked(FALSE) -{ -} +CPWL_RadioButton::CPWL_RadioButton() : m_bChecked(FALSE) {} -CPWL_RadioButton::~CPWL_RadioButton() -{ -} +CPWL_RadioButton::~CPWL_RadioButton() {} -CFX_ByteString CPWL_RadioButton::GetClassName() const -{ - return "CPWL_RadioButton"; +CFX_ByteString CPWL_RadioButton::GetClassName() const { + return "CPWL_RadioButton"; } -FX_BOOL CPWL_RadioButton::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) -{ - if (IsReadOnly()) return FALSE; +FX_BOOL CPWL_RadioButton::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { + if (IsReadOnly()) + return FALSE; - SetCheck(TRUE); - return TRUE; + SetCheck(TRUE); + return TRUE; } -void CPWL_RadioButton::SetCheck(FX_BOOL bCheck) -{ - m_bChecked = bCheck; +void CPWL_RadioButton::SetCheck(FX_BOOL bCheck) { + m_bChecked = bCheck; } -FX_BOOL CPWL_RadioButton::IsChecked() const -{ - return m_bChecked; +FX_BOOL CPWL_RadioButton::IsChecked() const { + return m_bChecked; } -FX_BOOL CPWL_RadioButton::OnChar(FX_WORD nChar, FX_DWORD nFlag) -{ - SetCheck(TRUE); - return TRUE; +FX_BOOL CPWL_RadioButton::OnChar(FX_WORD nChar, FX_DWORD nFlag) { + SetCheck(TRUE); + return TRUE; } - diff --git a/fpdfsdk/src/pdfwindow/PWL_Utils.cpp b/fpdfsdk/src/pdfwindow/PWL_Utils.cpp index b9ba7661af..52b22b548a 100644 --- a/fpdfsdk/src/pdfwindow/PWL_Utils.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_Utils.cpp @@ -9,2819 +9,3705 @@ #include "../../include/pdfwindow/PWL_Utils.h" #include "../../include/pdfwindow/PWL_Icon.h" -#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) -#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) -#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb)) +#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) +#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) +#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb)) /* ---------------------------- CPWL_Utils ------------------------------ */ -CFX_ByteString CPWL_Utils::GetAppStreamFromArray(const CPWL_PathData* pPathData, int32_t nCount) -{ - CFX_ByteTextBuf csAP; - - for (int32_t i=0; i= rcParent.left && rcChild.bottom >= rcParent.bottom && + rcChild.right <= rcParent.right && rcChild.top <= rcParent.top; +} + +FX_BOOL CPWL_Utils::IntersectRect(const CPDF_Rect& rect1, + const CPDF_Rect& rect2) { + FX_FLOAT left = rect1.left > rect2.left ? rect1.left : rect2.left; + FX_FLOAT right = rect1.right < rect2.right ? rect1.right : rect2.right; + FX_FLOAT bottom = rect1.bottom > rect2.bottom ? rect1.bottom : rect2.bottom; + FX_FLOAT top = rect1.top < rect2.top ? rect1.top : rect2.top; + + return left < right && bottom < top; +} + +CPDF_Point CPWL_Utils::OffsetPoint(const CPDF_Point& point, + FX_FLOAT x, + FX_FLOAT y) { + return CPDF_Point(point.x + x, point.y + y); +} + +CPVT_WordRange CPWL_Utils::OverlapWordRange(const CPVT_WordRange& wr1, + const CPVT_WordRange& wr2) { + CPVT_WordRange wrRet; + + if (wr2.EndPos.WordCmp(wr1.BeginPos) < 0 || + wr2.BeginPos.WordCmp(wr1.EndPos) > 0) + return wrRet; + if (wr1.EndPos.WordCmp(wr2.BeginPos) < 0 || + wr1.BeginPos.WordCmp(wr2.EndPos) > 0) + return wrRet; -void CPWL_Utils::GetPathDataFromArray(CFX_PathData& path, const CPWL_PathData* pPathData, int32_t nCount) -{ - path.SetPointCount(nCount); - - for (int32_t i=0; i= rcParent.left && rcChild.bottom >= rcParent.bottom && - rcChild.right <= rcParent.right && rcChild.top <= rcParent.top; -} - -FX_BOOL CPWL_Utils::IntersectRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2) -{ - FX_FLOAT left = rect1.left > rect2.left ? rect1.left : rect2.left; - FX_FLOAT right = rect1.right < rect2.right ? rect1.right : rect2.right; - FX_FLOAT bottom = rect1.bottom > rect2.bottom ? rect1.bottom : rect2.bottom; - FX_FLOAT top = rect1.top < rect2.top ? rect1.top : rect2.top; - - return left < right && bottom < top; -} - -CPDF_Point CPWL_Utils::OffsetPoint(const CPDF_Point& point,FX_FLOAT x,FX_FLOAT y) -{ - return CPDF_Point(point.x + x,point.y + y); -} - -CPVT_WordRange CPWL_Utils::OverlapWordRange(const CPVT_WordRange & wr1, const CPVT_WordRange & wr2) -{ - CPVT_WordRange wrRet; - - if (wr2.EndPos.WordCmp(wr1.BeginPos) < 0 || wr2.BeginPos.WordCmp(wr1.EndPos) > 0) return wrRet; - if (wr1.EndPos.WordCmp(wr2.BeginPos) < 0 || wr1.BeginPos.WordCmp(wr2.EndPos) > 0) return wrRet; - - if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) - { - wrRet.BeginPos = wr2.BeginPos; - } - else - { - wrRet.BeginPos = wr1.BeginPos; - } - - if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) - { - wrRet.EndPos = wr1.EndPos; - } - else - { - wrRet.EndPos = wr2.EndPos; - } + if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) { + wrRet.BeginPos = wr2.BeginPos; + } else { + wrRet.BeginPos = wr1.BeginPos; + } - return wrRet; + if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) { + wrRet.EndPos = wr1.EndPos; + } else { + wrRet.EndPos = wr2.EndPos; + } + + return wrRet; } -CFX_ByteString CPWL_Utils::GetAP_Check(const CPDF_Rect & crBBox) -{ - CFX_ByteTextBuf csAP; +CFX_ByteString CPWL_Utils::GetAP_Check(const CPDF_Rect& crBBox) { + CFX_ByteTextBuf csAP; - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - const int32_t num = 8; + const int32_t num = 8; - CPWL_Point pts[num*3] = - { - //1 - CPWL_Point(0.28f, 0.52f), - CPWL_Point(0.27f, 0.48f), - CPWL_Point(0.29f, 0.40f), + CPWL_Point pts[num * 3] = {// 1 + CPWL_Point(0.28f, 0.52f), CPWL_Point(0.27f, 0.48f), + CPWL_Point(0.29f, 0.40f), - //2 - CPWL_Point(0.30f, 0.33f), - CPWL_Point(0.31f, 0.29f), - CPWL_Point(0.31f, 0.28f), + // 2 + CPWL_Point(0.30f, 0.33f), CPWL_Point(0.31f, 0.29f), + CPWL_Point(0.31f, 0.28f), - //3 - CPWL_Point(0.39f, 0.28f), - CPWL_Point(0.49f, 0.29f), - CPWL_Point(0.77f, 0.67f), + // 3 + CPWL_Point(0.39f, 0.28f), CPWL_Point(0.49f, 0.29f), + CPWL_Point(0.77f, 0.67f), - //4 - CPWL_Point(0.76f, 0.68f), - CPWL_Point(0.78f, 0.69f), - CPWL_Point(0.76f, 0.75f), + // 4 + CPWL_Point(0.76f, 0.68f), CPWL_Point(0.78f, 0.69f), + CPWL_Point(0.76f, 0.75f), - //5 - CPWL_Point(0.76f, 0.75f), - CPWL_Point(0.73f, 0.80f), - CPWL_Point(0.68f, 0.75f), + // 5 + CPWL_Point(0.76f, 0.75f), CPWL_Point(0.73f, 0.80f), + CPWL_Point(0.68f, 0.75f), - //6 - CPWL_Point(0.68f, 0.74f), - CPWL_Point(0.68f, 0.74f), - CPWL_Point(0.44f, 0.47f), + // 6 + CPWL_Point(0.68f, 0.74f), CPWL_Point(0.68f, 0.74f), + CPWL_Point(0.44f, 0.47f), - //7 - CPWL_Point(0.43f, 0.47f), - CPWL_Point(0.40f, 0.47f), - CPWL_Point(0.41f, 0.58f), + // 7 + CPWL_Point(0.43f, 0.47f), CPWL_Point(0.40f, 0.47f), + CPWL_Point(0.41f, 0.58f), - //8 - CPWL_Point(0.40f, 0.60f), - CPWL_Point(0.28f, 0.66f), - CPWL_Point(0.30f, 0.56f) - }; + // 8 + CPWL_Point(0.40f, 0.60f), CPWL_Point(0.28f, 0.66f), + CPWL_Point(0.30f, 0.56f)}; - for (int32_t j=0; j= 5) nNext -= 5; - csAP << px[nNext] << " " << py[nNext] << " l\n"; - } + int32_t nNext = 0; + for (int32_t j = 0; j < 5; j++) { + nNext += 2; + if (nNext >= 5) + nNext -= 5; + csAP << px[nNext] << " " << py[nNext] << " l\n"; + } - return csAP.GetByteString(); + return csAP.GetByteString(); } -CFX_ByteString CPWL_Utils::GetAP_HalfCircle(const CPDF_Rect & crBBox,FX_FLOAT fRotate) -{ - CFX_ByteTextBuf csAP; - - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; +CFX_ByteString CPWL_Utils::GetAP_HalfCircle(const CPDF_Rect& crBBox, + FX_FLOAT fRotate) { + CFX_ByteTextBuf csAP; - CPDF_Point pt1(-fWidth/2,0); - CPDF_Point pt2(0,fHeight/2); - CPDF_Point pt3(fWidth/2,0); + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - FX_FLOAT px,py; + CPDF_Point pt1(-fWidth / 2, 0); + CPDF_Point pt2(0, fHeight / 2); + CPDF_Point pt3(fWidth / 2, 0); - csAP << cos(fRotate) << " " << sin(fRotate) << " " << -sin(fRotate) << " " << cos(fRotate) << " " - << crBBox.left + fWidth / 2 << " " << crBBox.bottom + fHeight / 2 << " cm\n"; + FX_FLOAT px, py; + csAP << cos(fRotate) << " " << sin(fRotate) << " " << -sin(fRotate) << " " + << cos(fRotate) << " " << crBBox.left + fWidth / 2 << " " + << crBBox.bottom + fHeight / 2 << " cm\n"; - csAP << pt1.x << " " << pt1.y << " m\n"; + csAP << pt1.x << " " << pt1.y << " m\n"; - px = pt2.x - pt1.x; - py = pt2.y - pt1.y; + px = pt2.x - pt1.x; + py = pt2.y - pt1.y; - csAP << pt1.x << " " << pt1.y + py * PWL_BEZIER << " " - << pt2.x - px * PWL_BEZIER << " " << pt2.y << " " - << pt2.x << " " << pt2.y << " c\n"; + csAP << pt1.x << " " << pt1.y + py * PWL_BEZIER << " " + << pt2.x - px * PWL_BEZIER << " " << pt2.y << " " << pt2.x << " " + << pt2.y << " c\n"; - px = pt3.x - pt2.x; - py = pt2.y - pt3.y; + px = pt3.x - pt2.x; + py = pt2.y - pt3.y; - csAP << pt2.x + px * PWL_BEZIER << " " << pt2.y << " " - << pt3.x << " " << pt3.y + py * PWL_BEZIER << " " - << pt3.x << " " << pt3.y << " c\n"; + csAP << pt2.x + px * PWL_BEZIER << " " << pt2.y << " " << pt3.x << " " + << pt3.y + py * PWL_BEZIER << " " << pt3.x << " " << pt3.y << " c\n"; - return csAP.GetByteString(); + return csAP.GetByteString(); } +CPDF_Rect CPWL_Utils::InflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize) { + if (rcRect.IsEmpty()) + return rcRect; -CPDF_Rect CPWL_Utils::InflateRect(const CPDF_Rect & rcRect, FX_FLOAT fSize) -{ - if (rcRect.IsEmpty()) return rcRect; - - CPDF_Rect rcNew(rcRect.left - fSize, - rcRect.bottom - fSize, - rcRect.right + fSize, - rcRect.top + fSize); - rcNew.Normalize(); - return rcNew; + CPDF_Rect rcNew(rcRect.left - fSize, rcRect.bottom - fSize, + rcRect.right + fSize, rcRect.top + fSize); + rcNew.Normalize(); + return rcNew; } -CPDF_Rect CPWL_Utils::DeflateRect(const CPDF_Rect & rcRect, FX_FLOAT fSize) -{ - if (rcRect.IsEmpty()) return rcRect; +CPDF_Rect CPWL_Utils::DeflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize) { + if (rcRect.IsEmpty()) + return rcRect; - CPDF_Rect rcNew(rcRect.left + fSize, - rcRect.bottom + fSize, - rcRect.right - fSize, - rcRect.top - fSize); - rcNew.Normalize(); - return rcNew; + CPDF_Rect rcNew(rcRect.left + fSize, rcRect.bottom + fSize, + rcRect.right - fSize, rcRect.top - fSize); + rcNew.Normalize(); + return rcNew; } -CPDF_Rect CPWL_Utils::ScaleRect(const CPDF_Rect & rcRect,FX_FLOAT fScale) -{ - FX_FLOAT fHalfWidth = (rcRect.right - rcRect.left) / 2.0f; - FX_FLOAT fHalfHeight = (rcRect.top - rcRect.bottom) / 2.0f; +CPDF_Rect CPWL_Utils::ScaleRect(const CPDF_Rect& rcRect, FX_FLOAT fScale) { + FX_FLOAT fHalfWidth = (rcRect.right - rcRect.left) / 2.0f; + FX_FLOAT fHalfHeight = (rcRect.top - rcRect.bottom) / 2.0f; - CPDF_Point ptCenter = CPDF_Point((rcRect.left + rcRect.right) / 2,(rcRect.top + rcRect.bottom) / 2); + CPDF_Point ptCenter = CPDF_Point((rcRect.left + rcRect.right) / 2, + (rcRect.top + rcRect.bottom) / 2); - return CPDF_Rect(ptCenter.x - fHalfWidth * fScale, - ptCenter.y - fHalfHeight * fScale, - ptCenter.x + fHalfWidth * fScale, - ptCenter.y + fHalfHeight * fScale); + return CPDF_Rect( + ptCenter.x - fHalfWidth * fScale, ptCenter.y - fHalfHeight * fScale, + ptCenter.x + fHalfWidth * fScale, ptCenter.y + fHalfHeight * fScale); } -CFX_ByteString CPWL_Utils::GetRectFillAppStream(const CPDF_Rect & rect,const CPWL_Color & color) -{ - CFX_ByteTextBuf sAppStream; +CFX_ByteString CPWL_Utils::GetRectFillAppStream(const CPDF_Rect& rect, + const CPWL_Color& color) { + CFX_ByteTextBuf sAppStream; - CFX_ByteString sColor = GetColorAppStream(color,TRUE); - if (sColor.GetLength() > 0) - { - sAppStream << "q\n" << sColor; - sAppStream << rect.left << " " << rect.bottom << " " - << rect.right - rect.left << " " << rect.top - rect.bottom << " re f\nQ\n"; - } + CFX_ByteString sColor = GetColorAppStream(color, TRUE); + if (sColor.GetLength() > 0) { + sAppStream << "q\n" << sColor; + sAppStream << rect.left << " " << rect.bottom << " " + << rect.right - rect.left << " " << rect.top - rect.bottom + << " re f\nQ\n"; + } - return sAppStream.GetByteString(); + return sAppStream.GetByteString(); } -CFX_ByteString CPWL_Utils::GetCircleFillAppStream(const CPDF_Rect & rect,const CPWL_Color & color) -{ - CFX_ByteTextBuf sAppStream; +CFX_ByteString CPWL_Utils::GetCircleFillAppStream(const CPDF_Rect& rect, + const CPWL_Color& color) { + CFX_ByteTextBuf sAppStream; - CFX_ByteString sColor = GetColorAppStream(color,TRUE); - if (sColor.GetLength() > 0) - { - sAppStream << "q\n" << sColor << CPWL_Utils::GetAP_Circle(rect) << "f\nQ\n"; - } + CFX_ByteString sColor = GetColorAppStream(color, TRUE); + if (sColor.GetLength() > 0) { + sAppStream << "q\n" << sColor << CPWL_Utils::GetAP_Circle(rect) << "f\nQ\n"; + } - return sAppStream.GetByteString(); + return sAppStream.GetByteString(); } -CPDF_Rect CPWL_Utils::GetCenterSquare(const CPDF_Rect & rect) -{ - FX_FLOAT fWidth = rect.right - rect.left; - FX_FLOAT fHeight = rect.top - rect.bottom; +CPDF_Rect CPWL_Utils::GetCenterSquare(const CPDF_Rect& rect) { + FX_FLOAT fWidth = rect.right - rect.left; + FX_FLOAT fHeight = rect.top - rect.bottom; - FX_FLOAT fCenterX = (rect.left + rect.right)/2.0f; - FX_FLOAT fCenterY = (rect.top + rect.bottom)/2.0f; + FX_FLOAT fCenterX = (rect.left + rect.right) / 2.0f; + FX_FLOAT fCenterY = (rect.top + rect.bottom) / 2.0f; - FX_FLOAT fRadius = (fWidth > fHeight) ? fHeight / 2 : fWidth / 2; + FX_FLOAT fRadius = (fWidth > fHeight) ? fHeight / 2 : fWidth / 2; - return CPDF_Rect(fCenterX - fRadius,fCenterY - fRadius,fCenterX + fRadius,fCenterY + fRadius); + return CPDF_Rect(fCenterX - fRadius, fCenterY - fRadius, fCenterX + fRadius, + fCenterY + fRadius); } -CFX_ByteString CPWL_Utils::GetEditAppStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, const CPVT_WordRange * pRange, - FX_BOOL bContinuous, FX_WORD SubWord) -{ - return IFX_Edit::GetEditAppearanceStream(pEdit,ptOffset,pRange,bContinuous,SubWord); +CFX_ByteString CPWL_Utils::GetEditAppStream(IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + FX_BOOL bContinuous, + FX_WORD SubWord) { + return IFX_Edit::GetEditAppearanceStream(pEdit, ptOffset, pRange, bContinuous, + SubWord); } -CFX_ByteString CPWL_Utils::GetEditSelAppStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, - const CPVT_WordRange * pRange) -{ - return IFX_Edit::GetSelectAppearanceStream(pEdit,ptOffset,pRange); +CFX_ByteString CPWL_Utils::GetEditSelAppStream(IFX_Edit* pEdit, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange) { + return IFX_Edit::GetSelectAppearanceStream(pEdit, ptOffset, pRange); } -static CFX_ByteString GetSquigglyAppearanceStream(FX_FLOAT fStartX, FX_FLOAT fEndX, FX_FLOAT fY, FX_FLOAT fStep) -{ - CFX_ByteTextBuf sRet; +static CFX_ByteString GetSquigglyAppearanceStream(FX_FLOAT fStartX, + FX_FLOAT fEndX, + FX_FLOAT fY, + FX_FLOAT fStep) { + CFX_ByteTextBuf sRet; - sRet << "0 w\n" << fStartX << " " << fY << " m\n"; + sRet << "0 w\n" << fStartX << " " << fY << " m\n"; - FX_FLOAT fx; - int32_t i; + FX_FLOAT fx; + int32_t i; - for (i=1,fx=fStartX+fStep; fxSetAt(wrWord.BeginPos); - - do - { - CPVT_WordPlace place = pIterator->GetAt(); - - CPVT_Line line; - if (pIterator->GetLine(line)) - { - fY = line.ptLine.y; - fStep = (line.fLineAscent - line.fLineDescent) / 16.0f; - } - - if (place.LineCmp(wrWord.BeginPos) == 0) - { - pIterator->SetAt(wrWord.BeginPos); - CPVT_Word word; - if (pIterator->GetWord(word)) - { - fStartX = word.ptWord.x; - } - } - else - { - fStartX = line.ptLine.x; - } - - if (place.LineCmp(wrWord.EndPos) == 0) - { - pIterator->SetAt(wrWord.EndPos); - CPVT_Word word; - if (pIterator->GetWord(word)) - { - fEndX = word.ptWord.x + word.fWidth; - } - - bBreak = TRUE; - } - else - { - fEndX = line.ptLine.x + line.fLineWidth; - } - - sRet << GetSquigglyAppearanceStream(fStartX + ptOffset.x, fEndX + ptOffset.x, fY + ptOffset.y,fStep); - - if (bBreak) break; - } - while (pIterator->NextLine()); - } - - return sRet.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetSpellCheckAppStream(IFX_Edit* pEdit, IPWL_SpellCheck* pSpellCheck, const CPDF_Point & ptOffset, - const CPVT_WordRange * pRange) -{ - ASSERT(pEdit != NULL); - ASSERT(pSpellCheck != NULL); - - CFX_ByteTextBuf sRet; - - if (pRange && pRange->IsExist()) - { - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) - { - pIterator->SetAt(pRange->BeginPos); - - FX_BOOL bLatinWord = FALSE; - CPVT_WordPlace wpWordStart; - CFX_ByteString sWord; - - CPVT_WordPlace oldplace; - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - if (pRange && place.WordCmp(pRange->EndPos) > 0) break; - - CPVT_Word word; - if (pIterator->GetWord(word)) - { - if (FX_EDIT_ISLATINWORD(word.Word)) - { - if (!bLatinWord) - { - wpWordStart = place; - bLatinWord = TRUE; - } - - sWord += (char)word.Word; - oldplace = place; - } - else - { - if (bLatinWord) - { - if (!pSpellCheck->CheckWord(sWord)) - { - sRet << GetWordSpellCheckAppearanceStream(pIterator,ptOffset,CPVT_WordRange(wpWordStart,oldplace)); - pIterator->SetAt(place); - } - bLatinWord = FALSE; - } - - sWord.Empty(); - } - } - else - { - if (bLatinWord) - { - if (!pSpellCheck->CheckWord(sWord)) - sRet << GetWordSpellCheckAppearanceStream(pIterator,ptOffset,CPVT_WordRange(wpWordStart,oldplace)); - bLatinWord = FALSE; - sWord.Empty(); - } - } - } - - if (bLatinWord) - { - if (!pSpellCheck->CheckWord(sWord)) - sRet << GetWordSpellCheckAppearanceStream(pIterator,ptOffset,CPVT_WordRange(wpWordStart,oldplace)); - - bLatinWord = FALSE; - sWord.Empty(); - } - } - } - - return sRet.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetTextAppStream(const CPDF_Rect & rcBBox,IFX_Edit_FontMap * pFontMap, - const CFX_WideString & sText, int32_t nAlignmentH, int32_t nAlignmentV, - FX_FLOAT fFontSize, FX_BOOL bMultiLine, FX_BOOL bAutoReturn, const CPWL_Color & crText) -{ - CFX_ByteTextBuf sRet; - - if (IFX_Edit * pEdit = IFX_Edit::NewEdit()) - { - pEdit->SetFontMap(pFontMap); - pEdit->SetPlateRect(rcBBox); - pEdit->SetAlignmentH(nAlignmentH); - pEdit->SetAlignmentV(nAlignmentV); - pEdit->SetMultiLine(bMultiLine); - pEdit->SetAutoReturn(bAutoReturn); - if (IsFloatZero(fFontSize)) - pEdit->SetAutoFontSize(TRUE); - else - pEdit->SetFontSize(fFontSize); - - pEdit->Initialize(); - pEdit->SetText(sText.c_str()); - - CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f,0.0f)); - if (sEdit.GetLength() > 0) - { - sRet << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit << "ET\n"; - } - IFX_Edit::DelEdit(pEdit); - } - - return sRet.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetPushButtonAppStream(const CPDF_Rect & rcBBox, - IFX_Edit_FontMap * pFontMap, - CPDF_Stream * pIconStream, - CPDF_IconFit & IconFit, - const CFX_WideString & sLabel, - const CPWL_Color & crText, - FX_FLOAT fFontSize, - int32_t nLayOut) -{ - const FX_FLOAT fAutoFontScale = 1.0f / 3.0f; - - if (IFX_Edit * pEdit = IFX_Edit::NewEdit()) - { - pEdit->SetFontMap(pFontMap); - pEdit->SetAlignmentH(1); - pEdit->SetAlignmentV(1); - pEdit->SetMultiLine(FALSE); - pEdit->SetAutoReturn(FALSE); - if (IsFloatZero(fFontSize)) - pEdit->SetAutoFontSize(TRUE); - else - pEdit->SetFontSize(fFontSize); - - pEdit->Initialize(); - pEdit->SetText(sLabel.c_str()); - - CPDF_Rect rcLabelContent = pEdit->GetContentRect(); - CPWL_Icon Icon; - PWL_CREATEPARAM cp; - cp.dwFlags = PWS_VISIBLE; - Icon.Create(cp); - Icon.SetIconFit(&IconFit); - Icon.SetPDFStream(pIconStream); - - CPDF_Rect rcLabel = CPDF_Rect(0,0,0,0); - CPDF_Rect rcIcon = CPDF_Rect(0,0,0,0); - FX_FLOAT fWidth = 0.0f; - FX_FLOAT fHeight = 0.0f; - - switch (nLayOut) - { - case PPBL_LABEL: - rcLabel = rcBBox; - rcIcon = CPDF_Rect(0,0,0,0); - break; - case PPBL_ICON: - rcIcon = rcBBox; - rcLabel = CPDF_Rect(0,0,0,0); - break; - case PPBL_ICONTOPLABELBOTTOM: - - if (pIconStream) - { - if (IsFloatZero(fFontSize)) - { - fHeight = rcBBox.top - rcBBox.bottom; - rcLabel = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.right,rcBBox.bottom + fHeight * fAutoFontScale); - rcIcon = CPDF_Rect(rcBBox.left,rcLabel.top,rcBBox.right,rcBBox.top); - } - else - { - fHeight = rcLabelContent.Height(); - - if (rcBBox.bottom + fHeight > rcBBox.top) - { - rcIcon = CPDF_Rect(0,0,0,0); - rcLabel = rcBBox; - } - else - { - rcLabel = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.right,rcBBox.bottom + fHeight); - rcIcon = CPDF_Rect(rcBBox.left,rcLabel.top,rcBBox.right,rcBBox.top); - } - } - } - else - { - rcLabel = rcBBox; - rcIcon = CPDF_Rect(0,0,0,0); - } - - break; - case PPBL_LABELTOPICONBOTTOM: - - if (pIconStream) - { - if (IsFloatZero(fFontSize)) - { - fHeight = rcBBox.top - rcBBox.bottom; - rcLabel = CPDF_Rect(rcBBox.left,rcBBox.top - fHeight * fAutoFontScale ,rcBBox.right,rcBBox.top); - rcIcon = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.right,rcLabel.bottom); - } - else - { - fHeight = rcLabelContent.Height(); - - if (rcBBox.bottom + fHeight > rcBBox.top) - { - rcIcon = CPDF_Rect(0,0,0,0); - rcLabel = rcBBox; - } - else - { - rcLabel = CPDF_Rect(rcBBox.left,rcBBox.top - fHeight,rcBBox.right,rcBBox.top); - rcIcon = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.right,rcLabel.bottom); - } - } - } - else - { - rcLabel = rcBBox; - rcIcon = CPDF_Rect(0,0,0,0); - } - - break; - case PPBL_ICONLEFTLABELRIGHT: - - if (pIconStream) - { - if (IsFloatZero(fFontSize)) - { - fWidth = rcBBox.right - rcBBox.left; - rcLabel = CPDF_Rect(rcBBox.right - fWidth * fAutoFontScale,rcBBox.bottom,rcBBox.right,rcBBox.top); - rcIcon = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcLabel.left,rcBBox.top); - - if (rcLabelContent.Width() < fWidth * fAutoFontScale) - { - } - else - { - if (rcLabelContent.Width() < fWidth) - { - rcLabel = CPDF_Rect(rcBBox.right - rcLabelContent.Width(),rcBBox.bottom,rcBBox.right,rcBBox.top); - rcIcon = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcLabel.left,rcBBox.top); - } - else - { - rcLabel = rcBBox; - rcIcon = CPDF_Rect(0,0,0,0); - } - } - } - else - { - fWidth = rcLabelContent.Width(); - - if (rcBBox.left + fWidth > rcBBox.right) - { - rcLabel = rcBBox; - rcIcon = CPDF_Rect(0,0,0,0); - } - else - { - rcLabel = CPDF_Rect(rcBBox.right - fWidth,rcBBox.bottom,rcBBox.right,rcBBox.top); - rcIcon = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcLabel.left,rcBBox.top); - } - } - } - else - { - rcLabel = rcBBox; - rcIcon = CPDF_Rect(0,0,0,0); - } - - break; - case PPBL_LABELLEFTICONRIGHT: - - if (pIconStream) - { - if (IsFloatZero(fFontSize)) - { - fWidth = rcBBox.right - rcBBox.left; - rcLabel = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.left + fWidth * fAutoFontScale,rcBBox.top); - rcIcon = CPDF_Rect(rcLabel.right,rcBBox.bottom,rcBBox.right,rcBBox.top); - - if (rcLabelContent.Width() < fWidth * fAutoFontScale) - { - } - else - { - if (rcLabelContent.Width() < fWidth) - { - rcLabel = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.left + rcLabelContent.Width(),rcBBox.top); - rcIcon = CPDF_Rect(rcLabel.right,rcBBox.bottom,rcBBox.right,rcBBox.top); - } - else - { - rcLabel = rcBBox; - rcIcon = CPDF_Rect(0,0,0,0); - } - } - } - else - { - fWidth = rcLabelContent.Width(); - - if (rcBBox.left + fWidth > rcBBox.right) - { - rcLabel = rcBBox; - rcIcon = CPDF_Rect(0,0,0,0); - } - else - { - rcLabel = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.left + fWidth,rcBBox.top); - rcIcon = CPDF_Rect(rcLabel.right,rcBBox.bottom,rcBBox.right,rcBBox.top); - } - } - } - else - { - rcLabel = rcBBox; - rcIcon = CPDF_Rect(0,0,0,0); - } - - break; - case PPBL_LABELOVERICON: - rcLabel = rcBBox; - rcIcon = rcBBox; - break; - } - - CFX_ByteTextBuf sAppStream,sTemp; - - if (!rcIcon.IsEmpty()) - { - Icon.Move(rcIcon, FALSE, FALSE); - sTemp << Icon.GetImageAppStream(); - } - - Icon.Destroy(); - - if (!rcLabel.IsEmpty()) - { - pEdit->SetPlateRect(rcLabel); - CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,0.0f)); - if (sEdit.GetLength() > 0) - { - sTemp << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit << "ET\n"; - } - } - - IFX_Edit::DelEdit(pEdit); - - if (sTemp.GetSize() > 0) - { - sAppStream << "q\n" << rcBBox.left << " " << rcBBox.bottom << " " - << rcBBox.right - rcBBox.left << " " << rcBBox.top - rcBBox.bottom << " re W n\n"; - sAppStream << sTemp << "Q\n"; - } - - return sAppStream.GetByteString(); - } - - return ""; -} - -CFX_ByteString CPWL_Utils::GetColorAppStream(const CPWL_Color & color,const FX_BOOL & bFillOrStroke) -{ - CFX_ByteTextBuf sColorStream; - - switch (color.nColorType) - { - case COLORTYPE_RGB: - sColorStream << color.fColor1 << " " << color.fColor2 << " " << color.fColor3 << " " - << (bFillOrStroke ? "rg" : "RG") << "\n"; - break; - case COLORTYPE_GRAY: - sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G") << "\n"; - break; - case COLORTYPE_CMYK: - sColorStream << color.fColor1 << " " << color.fColor2 << " " << color.fColor3 << " " << color.fColor4 << " " - << (bFillOrStroke ? "k" : "K") << "\n"; - break; - } - - return sColorStream.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetBorderAppStream(const CPDF_Rect & rect, FX_FLOAT fWidth, - const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom, - int32_t nStyle, const CPWL_Dash & dash) -{ - CFX_ByteTextBuf sAppStream; - CFX_ByteString sColor; - - FX_FLOAT fLeft = rect.left; - FX_FLOAT fRight = rect.right; - FX_FLOAT fTop = rect.top; - FX_FLOAT fBottom = rect.bottom; - - if (fWidth > 0.0f) - { - FX_FLOAT fHalfWidth = fWidth / 2.0f; - - sAppStream << "q\n"; - - switch (nStyle) - { - default: - case PBS_SOLID: - sColor = CPWL_Utils::GetColorAppStream(color,TRUE); - if (sColor.GetLength() > 0) - { - sAppStream << sColor; - sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " << fTop - fBottom << " re\n"; - sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " " - << fRight - fLeft - fWidth * 2 << " " << fTop - fBottom - fWidth * 2 << " re\n"; - sAppStream << "f*\n"; - } - break; - case PBS_DASH: - sColor = CPWL_Utils::GetColorAppStream(color,FALSE); - if (sColor.GetLength() > 0) - { - sAppStream << sColor; - sAppStream << fWidth << " w" << " [" << dash.nDash << " " << dash.nGap << "] " << dash.nPhase << " d\n"; - sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 << " m\n"; - sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2 << " l\n"; - sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2 << " l\n"; - sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2 << " l\n"; - sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 << " l S\n"; - } - break; - case PBS_BEVELED: - case PBS_INSET: - sColor = CPWL_Utils::GetColorAppStream(crLeftTop,TRUE); - if (sColor.GetLength() > 0) - { - sAppStream << sColor; - sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " m\n"; - sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth << " l\n"; - sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth << " l\n"; - sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 << " l\n"; - sAppStream << fLeft + fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 << " l\n"; - sAppStream << fLeft + fHalfWidth * 2 << " " << fBottom + fHalfWidth * 2 << " l f\n"; - } - - sColor = CPWL_Utils::GetColorAppStream(crRightBottom,TRUE); - if (sColor.GetLength() > 0) - { - sAppStream << sColor; - sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth << " m\n"; - sAppStream << fRight - fHalfWidth << " " << fBottom + fHalfWidth << " l\n"; - sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " l\n"; - sAppStream << fLeft + fHalfWidth * 2 << " " << fBottom + fHalfWidth * 2 << " l\n"; - sAppStream << fRight - fHalfWidth * 2 << " " << fBottom + fHalfWidth * 2 << " l\n"; - sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 << " l f\n"; - } - - sColor = CPWL_Utils::GetColorAppStream(color,TRUE); - if (sColor.GetLength() > 0) - { - sAppStream << sColor; - sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " << fTop - fBottom << " re\n"; - sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " " - << fRight - fLeft - fHalfWidth * 2 << " " << fTop - fBottom - fHalfWidth * 2 << " re f*\n"; - } - break; - case PBS_UNDERLINED: - sColor = CPWL_Utils::GetColorAppStream(color,FALSE); - if (sColor.GetLength() > 0) - { - sAppStream << sColor; - sAppStream << fWidth << " w\n"; - sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n"; - sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n"; - } - break; - } - - sAppStream << "Q\n"; - } - - return sAppStream.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetCircleBorderAppStream(const CPDF_Rect & rect, FX_FLOAT fWidth, - const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom, - int32_t nStyle, const CPWL_Dash & dash) -{ - CFX_ByteTextBuf sAppStream; - CFX_ByteString sColor; - - - - - - - if (fWidth > 0.0f) - { - sAppStream << "q\n"; - - switch (nStyle) - { - default: - case PBS_SOLID: - case PBS_UNDERLINED: - { - sColor = CPWL_Utils::GetColorAppStream(color,FALSE); - if (sColor.GetLength() > 0) - { - sAppStream << "q\n" << fWidth << " w\n" << sColor - << CPWL_Utils::GetAP_Circle(CPWL_Utils::DeflateRect(rect,fWidth / 2.0f)) - << " S\nQ\n"; - } - } - break; - case PBS_DASH: - { - sColor = CPWL_Utils::GetColorAppStream(color,FALSE); - if (sColor.GetLength() > 0) - { - sAppStream << "q\n" << fWidth << " w\n" - << "[" << dash.nDash << " " << dash.nGap << "] " << dash.nPhase << " d\n" - << sColor << CPWL_Utils::GetAP_Circle(CPWL_Utils::DeflateRect(rect,fWidth / 2.0f)) - << " S\nQ\n"; - } - } - break; - case PBS_BEVELED: - { - FX_FLOAT fHalfWidth = fWidth / 2.0f; - - sColor = CPWL_Utils::GetColorAppStream(color,FALSE); - if (sColor.GetLength() > 0) - { - sAppStream << "q\n" << fHalfWidth << " w\n" - << sColor << CPWL_Utils::GetAP_Circle(rect) - << " S\nQ\n"; - } - - sColor = CPWL_Utils::GetColorAppStream(crLeftTop,FALSE); - if (sColor.GetLength() > 0) - { - sAppStream << "q\n" << fHalfWidth << " w\n" - << sColor << CPWL_Utils::GetAP_HalfCircle(CPWL_Utils::DeflateRect(rect,fHalfWidth * 0.75f),PWL_PI/4.0f) - << " S\nQ\n"; - } - - sColor = CPWL_Utils::GetColorAppStream(crRightBottom,FALSE); - if (sColor.GetLength() > 0) - { - sAppStream << "q\n" << fHalfWidth << " w\n" - << sColor << CPWL_Utils::GetAP_HalfCircle(CPWL_Utils::DeflateRect(rect,fHalfWidth * 0.75f),PWL_PI*5/4.0f) - << " S\nQ\n"; - } - } - break; - case PBS_INSET: - { - FX_FLOAT fHalfWidth = fWidth / 2.0f; - - sColor = CPWL_Utils::GetColorAppStream(color,FALSE); - if (sColor.GetLength() > 0) - { - sAppStream << "q\n" << fHalfWidth << " w\n" - << sColor << CPWL_Utils::GetAP_Circle(rect) - << " S\nQ\n"; - } - - sColor = CPWL_Utils::GetColorAppStream(crLeftTop,FALSE); - if (sColor.GetLength() > 0) - { - sAppStream << "q\n" << fHalfWidth << " w\n" - << sColor << CPWL_Utils::GetAP_HalfCircle(CPWL_Utils::DeflateRect(rect,fHalfWidth * 0.75f),PWL_PI/4.0f) - << " S\nQ\n"; - } - - sColor = CPWL_Utils::GetColorAppStream(crRightBottom,FALSE); - if (sColor.GetLength() > 0) - { - sAppStream << "q\n" << fHalfWidth << " w\n" - << sColor << CPWL_Utils::GetAP_HalfCircle(CPWL_Utils::DeflateRect(rect,fHalfWidth * 0.75f),PWL_PI*5/4.0f) - << " S\nQ\n"; - } - } - break; - } - - sAppStream << "Q\n"; - } - - return sAppStream.GetByteString(); -} - -CPWL_Color CPWL_Utils::SubstractColor(const CPWL_Color & sColor,FX_FLOAT fColorSub) -{ - CPWL_Color sRet; - sRet.nColorType = sColor.nColorType; - - switch (sColor.nColorType) - { - case COLORTYPE_TRANSPARENT: - sRet.nColorType = COLORTYPE_RGB; - sRet.fColor1 = PWL_MAX(1 - fColorSub,0.0f); - sRet.fColor2 = PWL_MAX(1 - fColorSub,0.0f); - sRet.fColor3 = PWL_MAX(1 - fColorSub,0.0f); - break; - case COLORTYPE_RGB: - case COLORTYPE_GRAY: - case COLORTYPE_CMYK: - sRet.fColor1 = PWL_MAX(sColor.fColor1 - fColorSub,0.0f); - sRet.fColor2 = PWL_MAX(sColor.fColor2 - fColorSub,0.0f); - sRet.fColor3 = PWL_MAX(sColor.fColor3 - fColorSub,0.0f); - sRet.fColor4 = PWL_MAX(sColor.fColor4 - fColorSub,0.0f); - break; - } - - return sRet; -} - -CPWL_Color CPWL_Utils::DevideColor(const CPWL_Color & sColor,FX_FLOAT fColorDevide) -{ - CPWL_Color sRet; - sRet.nColorType = sColor.nColorType; - - switch (sColor.nColorType) - { - case COLORTYPE_TRANSPARENT: - sRet.nColorType = COLORTYPE_RGB; - sRet.fColor1 = 1 / fColorDevide; - sRet.fColor2 = 1 / fColorDevide; - sRet.fColor3 = 1 / fColorDevide; - break; - case COLORTYPE_RGB: - case COLORTYPE_GRAY: - case COLORTYPE_CMYK: - sRet = sColor; - sRet.fColor1 /= fColorDevide; - sRet.fColor2 /= fColorDevide; - sRet.fColor3 /= fColorDevide; - sRet.fColor4 /= fColorDevide; - break; - } - - return sRet; -} - -CFX_ByteString CPWL_Utils::GetAppStream_Check(const CPDF_Rect & rcBBox, const CPWL_Color & crText) -{ - CFX_ByteTextBuf sAP; - sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << CPWL_Utils::GetAP_Check(rcBBox) << "f\nQ\n"; - return sAP.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetAppStream_Circle(const CPDF_Rect & rcBBox, const CPWL_Color & crText) -{ - CFX_ByteTextBuf sAP; - sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << CPWL_Utils::GetAP_Circle(rcBBox) << "f\nQ\n"; - return sAP.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetAppStream_Cross(const CPDF_Rect & rcBBox, const CPWL_Color & crText) -{ - CFX_ByteTextBuf sAP; - sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText,FALSE) << CPWL_Utils::GetAP_Cross(rcBBox) << "S\nQ\n"; - return sAP.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetAppStream_Diamond(const CPDF_Rect & rcBBox, const CPWL_Color & crText) -{ - CFX_ByteTextBuf sAP; - sAP << "q\n1 w\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << CPWL_Utils::GetAP_Diamond(rcBBox) << "f\nQ\n"; - return sAP.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetAppStream_Square(const CPDF_Rect & rcBBox, const CPWL_Color & crText) -{ - CFX_ByteTextBuf sAP; - sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << CPWL_Utils::GetAP_Square(rcBBox) << "f\nQ\n"; - return sAP.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetAppStream_Star(const CPDF_Rect & rcBBox, const CPWL_Color & crText) -{ - CFX_ByteTextBuf sAP; - sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << CPWL_Utils::GetAP_Star(rcBBox) << "f\nQ\n"; - return sAP.GetByteString(); -} - -CFX_ByteString CPWL_Utils::GetCheckBoxAppStream(const CPDF_Rect & rcBBox, - int32_t nStyle, - const CPWL_Color & crText) -{ - CPDF_Rect rcCenter = GetCenterSquare(rcBBox); - switch (nStyle) - { - default: - case PCS_CHECK: - return GetAppStream_Check(rcCenter,crText); - case PCS_CIRCLE: - return GetAppStream_Circle(ScaleRect(rcCenter,2.0f/3.0f),crText); - case PCS_CROSS: - return GetAppStream_Cross(rcCenter,crText); - case PCS_DIAMOND: - return GetAppStream_Diamond(ScaleRect(rcCenter,2.0f/3.0f),crText); - case PCS_SQUARE: - return GetAppStream_Square(ScaleRect(rcCenter,2.0f/3.0f),crText); - case PCS_STAR: - return GetAppStream_Star(ScaleRect(rcCenter,2.0f/3.0f),crText); - } -} - -CFX_ByteString CPWL_Utils::GetRadioButtonAppStream(const CPDF_Rect & rcBBox, - int32_t nStyle, - const CPWL_Color & crText) -{ - CPDF_Rect rcCenter = GetCenterSquare(rcBBox); - switch (nStyle) - { - default: - case PCS_CHECK: - return GetAppStream_Check(rcCenter,crText); - case PCS_CIRCLE: - return GetAppStream_Circle(ScaleRect(rcCenter,1.0f/2.0f),crText); - case PCS_CROSS: - return GetAppStream_Cross(rcCenter,crText); - case PCS_DIAMOND: - return GetAppStream_Diamond(ScaleRect(rcCenter,2.0f/3.0f),crText); - case PCS_SQUARE: - return GetAppStream_Square(ScaleRect(rcCenter,2.0f/3.0f),crText); - case PCS_STAR: - return GetAppStream_Star(ScaleRect(rcCenter,2.0f/3.0f),crText); - } -} - -CFX_ByteString CPWL_Utils::GetDropButtonAppStream(const CPDF_Rect & rcBBox) -{ - CFX_ByteTextBuf sAppStream; - - if (!rcBBox.IsEmpty()) - { - sAppStream << "q\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB,220.0f/255.0f,220.0f/255.0f,220.0f/255.0f),TRUE); - sAppStream << rcBBox.left << " " << rcBBox.bottom << " " - << rcBBox.right - rcBBox.left << " " << rcBBox.top - rcBBox.bottom << " re f\n"; - sAppStream << "Q\n"; - - sAppStream << "q\n" << - CPWL_Utils::GetBorderAppStream(rcBBox,2,CPWL_Color(COLORTYPE_GRAY,0),CPWL_Color(COLORTYPE_GRAY,1),CPWL_Color(COLORTYPE_GRAY,0.5),PBS_BEVELED,CPWL_Dash(3,0,0)) - << "Q\n"; - - CPDF_Point ptCenter = CPDF_Point((rcBBox.left + rcBBox.right)/2,(rcBBox.top + rcBBox.bottom)/2); - if (IsFloatBigger(rcBBox.right - rcBBox.left,6) && IsFloatBigger(rcBBox.top - rcBBox.bottom,6)) - { - sAppStream << "q\n" << " 0 g\n"; - sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " m\n"; - sAppStream << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " l\n"; - sAppStream << ptCenter.x << " " << ptCenter.y - 1.5f << " l\n"; - sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " l f\n"; - sAppStream << "Q\n"; - } - } - - return sAppStream.GetByteString(); -} - -void CPWL_Utils::ConvertCMYK2GRAY(FX_FLOAT dC,FX_FLOAT dM,FX_FLOAT dY,FX_FLOAT dK,FX_FLOAT &dGray) -{ - if (dC<0 || dC>1 || dM<0 || dM>1 || dY < 0 || dY >1 || dK < 0 || dK >1) - return; - dGray = 1.0f - FX_MIN(1.0f,0.3f*dC+0.59f * dM + 0.11f*dY+dK); -} - -void CPWL_Utils::ConvertGRAY2CMYK(FX_FLOAT dGray,FX_FLOAT &dC,FX_FLOAT &dM,FX_FLOAT &dY,FX_FLOAT &dK) -{ - if (dGray <0 || dGray >1) - return; - dC = 0.0f; - dM = 0.0f; - dY = 0.0f; - dK = 1.0f-dGray; -} - -void CPWL_Utils::ConvertGRAY2RGB(FX_FLOAT dGray,FX_FLOAT &dR,FX_FLOAT &dG,FX_FLOAT &dB) -{ - if (dGray <0 || dGray >1) - return; - dR = dGray; - dG = dGray; - dB = dGray; -} - -void CPWL_Utils::ConvertRGB2GRAY(FX_FLOAT dR,FX_FLOAT dG,FX_FLOAT dB,FX_FLOAT &dGray) -{ - if (dR<0 || dR>1 || dG<0 || dG > 0 || dB < 0 || dB >1) - return; - dGray = 0.3f*dR+0.59f*dG+0.11f*dB; -} - -void CPWL_Utils::ConvertCMYK2RGB(FX_FLOAT dC,FX_FLOAT dM,FX_FLOAT dY,FX_FLOAT dK,FX_FLOAT &dR,FX_FLOAT &dG,FX_FLOAT &dB) -{ - if (dC <0 || dC>1 || dM < 0 || dM > 1 || dY < 0 || dY > 1 || dK < 0 || dK > 1 ) - return; - dR = 1.0f - FX_MIN(1.0f, dC + dK); - dG = 1.0f - FX_MIN(1.0f, dM + dK); - dB = 1.0f - FX_MIN(1.0f, dY + dK); -} - -void CPWL_Utils::ConvertRGB2CMYK(FX_FLOAT dR,FX_FLOAT dG,FX_FLOAT dB,FX_FLOAT &dC,FX_FLOAT &dM,FX_FLOAT &dY,FX_FLOAT &dK) -{ - if (dR<0 || dR>1 || dG<0 || dG>1 || dB<0 || dB>1) - return; - - dC = 1.0f - dR; - dM = 1.0f - dG; - dY = 1.0f - dB; - dK = FX_MIN(dC, FX_MIN(dM, dY)); -} - -void CPWL_Utils::PWLColorToARGB(const CPWL_Color& color, int32_t& alpha, FX_FLOAT& red, FX_FLOAT& green, FX_FLOAT& blue) -{ - switch (color.nColorType) - { - case COLORTYPE_TRANSPARENT: - { - alpha = 0; - } - break; - case COLORTYPE_GRAY: - { - ConvertGRAY2RGB(color.fColor1, red, green, blue); - } - break; - case COLORTYPE_RGB: - { - red = color.fColor1; - green = color.fColor2; - blue = color.fColor3; - } - break; - case COLORTYPE_CMYK: - { - ConvertCMYK2RGB(color.fColor1, color.fColor2, color.fColor3, color.fColor4, - red, green, blue); - } - break; - } -} - -FX_COLORREF CPWL_Utils::PWLColorToFXColor(const CPWL_Color& color, int32_t nTransparancy) -{ - int32_t nAlpha = nTransparancy; - FX_FLOAT dRed = 0; - FX_FLOAT dGreen = 0; - FX_FLOAT dBlue = 0; - - PWLColorToARGB(color, nAlpha, dRed, dGreen, dBlue); - - return ArgbEncode(nAlpha, (int32_t)(dRed*255), (int32_t)(dGreen*255), (int32_t)(dBlue*255)); -} - -void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect, - const FX_COLORREF & color) -{ - CFX_PathData path; - CPDF_Rect rcTemp(rect); - path.AppendRect(rcTemp.left,rcTemp.bottom,rcTemp.right,rcTemp.top); - pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_WINDING); -} - -void CPWL_Utils::DrawFillArea(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - const CPDF_Point* pPts, int32_t nCount, const FX_COLORREF& color) -{ - CFX_PathData path; - path.SetPointCount(nCount); - - path.SetPoint(0, pPts[0].x, pPts[0].y, FXPT_MOVETO); - for (int32_t i=1; iDrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_ALTERNATE); -} - -void CPWL_Utils::DrawStrokeRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect, - const FX_COLORREF & color, FX_FLOAT fWidth) -{ - CFX_PathData path; - CPDF_Rect rcTemp(rect); - path.AppendRect(rcTemp.left,rcTemp.bottom,rcTemp.right,rcTemp.top); - - CFX_GraphStateData gsd; - gsd.m_LineWidth = fWidth; - - pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE); -} - -void CPWL_Utils::DrawStrokeLine(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - const CPDF_Point & ptMoveTo, const CPDF_Point & ptLineTo, const FX_COLORREF & color, FX_FLOAT fWidth) -{ - CFX_PathData path; - path.SetPointCount(2); - path.SetPoint(0, ptMoveTo.x, ptMoveTo.y, FXPT_MOVETO); - path.SetPoint(1, ptLineTo.x, ptLineTo.y, FXPT_LINETO); - - CFX_GraphStateData gsd; - gsd.m_LineWidth = fWidth; - - pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE); -} - -void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect, - const CPWL_Color & color, int32_t nTransparancy) -{ - CPWL_Utils::DrawFillRect(pDevice,pUser2Device,rect,PWLColorToFXColor(color,nTransparancy)); -} - -void CPWL_Utils::DrawShadow(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - FX_BOOL bVertical, FX_BOOL bHorizontal, CPDF_Rect rect, - int32_t nTransparancy, int32_t nStartGray, int32_t nEndGray) -{ - FX_FLOAT fStepGray = 1.0f; - - if (bVertical) - { - fStepGray = (nEndGray - nStartGray) / rect.Height(); - - for (FX_FLOAT fy=rect.bottom+0.5f; fy<=rect.top-0.5f; fy+=1.0f) - { - int32_t nGray = nStartGray + (int32_t)(fStepGray * (fy-rect.bottom)); - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, CPDF_Point(rect.left, fy), - CPDF_Point(rect.right, fy), ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f); - } - } - - if (bHorizontal) - { - fStepGray = (nEndGray - nStartGray) / rect.Width(); - - for (FX_FLOAT fx=rect.left+0.5f; fx<=rect.right-0.5f; fx+=1.0f) - { - int32_t nGray = nStartGray + (int32_t)(fStepGray * (fx-rect.left)); - CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, CPDF_Point(fx, rect.bottom), - CPDF_Point(fx, rect.top), ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f); - } - } -} - -void CPWL_Utils::DrawBorder(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - const CPDF_Rect & rect, FX_FLOAT fWidth, - const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom, - int32_t nStyle, const CPWL_Dash & dash, int32_t nTransparancy) -{ - FX_FLOAT fLeft = rect.left; - FX_FLOAT fRight = rect.right; - FX_FLOAT fTop = rect.top; - FX_FLOAT fBottom = rect.bottom; - - if (fWidth > 0.0f) - { - FX_FLOAT fHalfWidth = fWidth / 2.0f; - - switch (nStyle) - { - default: - case PBS_SOLID: - { - CFX_PathData path; - path.AppendRect(fLeft, fBottom, fRight, fTop); - path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth, fTop - fWidth); - pDevice->DrawPath(&path, pUser2Device, NULL, PWLColorToFXColor(color,nTransparancy), 0, FXFILL_ALTERNATE); - } - break; - case PBS_DASH: - { - CFX_PathData path; - - path.SetPointCount(5); - path.SetPoint(0, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f, FXPT_MOVETO); - path.SetPoint(1, fLeft + fWidth / 2.0f, fTop - fWidth / 2.0f, FXPT_LINETO); - path.SetPoint(2, fRight - fWidth / 2.0f, fTop - fWidth / 2.0f, FXPT_LINETO); - path.SetPoint(3, fRight - fWidth / 2.0f, fBottom + fWidth / 2.0f, FXPT_LINETO); - path.SetPoint(4, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f, FXPT_LINETO); - - CFX_GraphStateData gsd; - gsd.SetDashCount(2); - gsd.m_DashArray[0] = 3.0f; - gsd.m_DashArray[1] = 3.0f; - gsd.m_DashPhase = 0; - - gsd.m_LineWidth = fWidth; - pDevice->DrawPath(&path, pUser2Device, &gsd, 0, PWLColorToFXColor(color,nTransparancy), FXFILL_WINDING); - } - break; - case PBS_BEVELED: - case PBS_INSET: - { - CFX_GraphStateData gsd; - gsd.m_LineWidth = fHalfWidth; - - CFX_PathData pathLT; - - pathLT.SetPointCount(7); - pathLT.SetPoint(0, fLeft + fHalfWidth, fBottom + fHalfWidth, FXPT_MOVETO); - pathLT.SetPoint(1, fLeft + fHalfWidth, fTop - fHalfWidth, FXPT_LINETO); - pathLT.SetPoint(2, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO); - pathLT.SetPoint(3, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2, FXPT_LINETO); - pathLT.SetPoint(4, fLeft + fHalfWidth * 2, fTop - fHalfWidth * 2, FXPT_LINETO); - pathLT.SetPoint(5, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2, FXPT_LINETO); - pathLT.SetPoint(6, fLeft + fHalfWidth, fBottom + fHalfWidth, FXPT_LINETO); - - pDevice->DrawPath(&pathLT, pUser2Device, &gsd, PWLColorToFXColor(crLeftTop,nTransparancy), 0, FXFILL_ALTERNATE); - - CFX_PathData pathRB; - - pathRB.SetPointCount(7); - pathRB.SetPoint(0, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_MOVETO); - pathRB.SetPoint(1, fRight - fHalfWidth, fBottom + fHalfWidth, FXPT_LINETO); - pathRB.SetPoint(2, fLeft + fHalfWidth, fBottom + fHalfWidth, FXPT_LINETO); - pathRB.SetPoint(3, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2, FXPT_LINETO); - pathRB.SetPoint(4, fRight - fHalfWidth * 2, fBottom + fHalfWidth * 2, FXPT_LINETO); - pathRB.SetPoint(5, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2, FXPT_LINETO); - pathRB.SetPoint(6, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO); - - pDevice->DrawPath(&pathRB, pUser2Device, &gsd, PWLColorToFXColor(crRightBottom,nTransparancy), 0, FXFILL_ALTERNATE); - - CFX_PathData path; - - path.AppendRect(fLeft, fBottom, fRight, fTop); - path.AppendRect(fLeft + fHalfWidth, fBottom + fHalfWidth, fRight - fHalfWidth, fTop - fHalfWidth); - - pDevice->DrawPath(&path, pUser2Device, &gsd, PWLColorToFXColor(color,nTransparancy), 0, FXFILL_ALTERNATE); - } - break; - case PBS_UNDERLINED: - { - CFX_PathData path; - - path.SetPointCount(2); - path.SetPoint(0, fLeft, fBottom + fWidth / 2, FXPT_MOVETO); - path.SetPoint(1, fRight, fBottom + fWidth / 2, FXPT_LINETO); - - CFX_GraphStateData gsd; - gsd.m_LineWidth = fWidth; - - pDevice->DrawPath(&path, pUser2Device, &gsd,0, PWLColorToFXColor(color,nTransparancy), FXFILL_ALTERNATE); - } - break; - case PBS_SHADOW: - { - CFX_PathData path; - path.AppendRect(fLeft, fBottom, fRight, fTop); - path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth, fTop - fWidth); - pDevice->DrawPath(&path, pUser2Device, NULL, PWLColorToFXColor(color,nTransparancy/2), 0, FXFILL_ALTERNATE); - } - break; - } - } -} - -static void AddSquigglyPath(CFX_PathData & PathData, FX_FLOAT fStartX, FX_FLOAT fEndX, FX_FLOAT fY, FX_FLOAT fStep) -{ - PathData.AddPointCount(1); - PathData.SetPoint(PathData.GetPointCount() - 1, fStartX, fY, FXPT_MOVETO); - - FX_FLOAT fx; - int32_t i; - - for (i=1,fx=fStartX+fStep; fxGetIterator()) - { - pIterator->SetAt(wrWord.BeginPos); - - do - { - CPVT_WordPlace place = pIterator->GetAt(); - - CPVT_Line line; - if (pIterator->GetLine(line)) - { - fY = line.ptLine.y; - fStep = (line.fLineAscent - line.fLineDescent) / 16.0f; - } - - if (place.LineCmp(wrWord.BeginPos) == 0) - { - pIterator->SetAt(wrWord.BeginPos); - CPVT_Word word; - if (pIterator->GetWord(word)) - { - fStartX = word.ptWord.x; - } - } - else - { - fStartX = line.ptLine.x; - } - - if (place.LineCmp(wrWord.EndPos) == 0) - { - pIterator->SetAt(wrWord.EndPos); - CPVT_Word word; - if (pIterator->GetWord(word)) - { - fEndX = word.ptWord.x + word.fWidth; - } - - bBreak = TRUE; - } - else - { - fEndX = line.ptLine.x + line.fLineWidth; - } - - AddSquigglyPath(PathData, fStartX, fEndX, fY, fStep); - - if (bBreak) break; - } - while (pIterator->NextLine()); - } -} - -void CPWL_Utils::DrawEditSpellCheck(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, - const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, - IPWL_SpellCheck * pSpellCheck) -{ - const FX_COLORREF crSpell = ArgbEncode(255,255,0,0); - - //for spellcheck - FX_BOOL bLatinWord = FALSE; - CPVT_WordPlace wpWordStart; - CFX_ByteString sLatinWord; - - CFX_PathData pathSpell; - - pDevice->SaveState(); - - if (!rcClip.IsEmpty()) - { - CPDF_Rect rcTemp = rcClip; - pUser2Device->TransformRect(rcTemp); - FX_RECT rcDevClip; - rcDevClip.left = (int32_t)rcTemp.left; - rcDevClip.right = (int32_t)rcTemp.right; - rcDevClip.top = (int32_t)rcTemp.top; - rcDevClip.bottom = (int32_t)rcTemp.bottom; - pDevice->SetClip_Rect(&rcDevClip); - } - - if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) - { - if (pEdit->GetFontMap()) - { - if (pRange) - pIterator->SetAt(pRange->BeginPos); - else - pIterator->SetAt(0); - - CPVT_WordPlace oldplace; - - while (pIterator->NextWord()) - { - CPVT_WordPlace place = pIterator->GetAt(); - if (pRange && place.WordCmp(pRange->EndPos) > 0) break; - - CPVT_Word word; - if (pIterator->GetWord(word)) - { - if (FX_EDIT_ISLATINWORD(word.Word)) - { - if (!bLatinWord) - { - wpWordStart = place; - bLatinWord = TRUE; - } - - sLatinWord += (char)word.Word; - } - else - { - if (bLatinWord) - { - if (!sLatinWord.IsEmpty()) - { - if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) - { - AddSpellCheckObj(pathSpell,pEdit,CPVT_WordRange(wpWordStart,oldplace)); - pIterator->SetAt(place); - } - } - bLatinWord = FALSE; - } - - sLatinWord.Empty(); - } - - oldplace = place; - } - else - { - if (bLatinWord) - { - if (!sLatinWord.IsEmpty()) - { - if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) - { - AddSpellCheckObj(pathSpell,pEdit,CPVT_WordRange(wpWordStart,oldplace)); - pIterator->SetAt(place); - } - } - bLatinWord = FALSE; - } - - sLatinWord.Empty(); - } - } - - if (!sLatinWord.IsEmpty()) - { - if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) - { - AddSpellCheckObj(pathSpell,pEdit,CPVT_WordRange(wpWordStart,oldplace)); - } - } - } - } - - CFX_GraphStateData gsd; - gsd.m_LineWidth = 0; - if (pathSpell.GetPointCount() > 0) - pDevice->DrawPath(&pathSpell, pUser2Device, &gsd, 0, crSpell, FXFILL_ALTERNATE); - - pDevice->RestoreState(); -} - -FX_BOOL CPWL_Utils::IsBlackOrWhite(const CPWL_Color& color) -{ - switch (color.nColorType) - { - case COLORTYPE_TRANSPARENT: - return FALSE; - case COLORTYPE_GRAY: - return color.fColor1 < 0.5f; - case COLORTYPE_RGB: - return color.fColor1 + color.fColor2 + color.fColor3 < 1.5f; - case COLORTYPE_CMYK: - return color.fColor1 + color.fColor2 + color.fColor3 + color.fColor4 > 2.0f; - } - - return TRUE; -} - -CPWL_Color CPWL_Utils::GetReverseColor(const CPWL_Color& color) -{ - CPWL_Color crRet = color; - - switch (color.nColorType) - { - case COLORTYPE_GRAY: - crRet.fColor1 = 1.0f - crRet.fColor1; - break; - case COLORTYPE_RGB: - crRet.fColor1 = 1.0f - crRet.fColor1; - crRet.fColor2 = 1.0f - crRet.fColor2; - crRet.fColor3 = 1.0f - crRet.fColor3; - break; - case COLORTYPE_CMYK: - crRet.fColor1 = 1.0f - crRet.fColor1; - crRet.fColor2 = 1.0f - crRet.fColor2; - crRet.fColor3 = 1.0f - crRet.fColor3; - crRet.fColor4 = 1.0f - crRet.fColor4; - break; - } - - return crRet; -} - -CFX_ByteString CPWL_Utils::GetIconAppStream(int32_t nType, const CPDF_Rect& rect, const CPWL_Color& crFill, - const CPWL_Color& crStroke) -{ - CFX_ByteString sAppStream = CPWL_Utils::GetColorAppStream(crStroke, FALSE); - sAppStream += CPWL_Utils::GetColorAppStream(crFill, TRUE); - - CFX_ByteString sPath; - CFX_PathData path; - - switch (nType) - { - case PWL_ICONTYPE_CHECKMARK: - GetGraphics_Checkmark(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_CIRCLE: - GetGraphics_Circle(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_COMMENT: - GetGraphics_Comment(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_CROSS: - GetGraphics_Cross(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_HELP: - GetGraphics_Help(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_INSERTTEXT: - GetGraphics_InsertText(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_KEY: - GetGraphics_Key(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_NEWPARAGRAPH: - GetGraphics_NewParagraph(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_TEXTNOTE: - GetGraphics_TextNote(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_PARAGRAPH: - GetGraphics_Paragraph(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_RIGHTARROW: - GetGraphics_RightArrow(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_RIGHTPOINTER: - GetGraphics_RightPointer(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_STAR: - GetGraphics_Star(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_UPARROW: - GetGraphics_UpArrow(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_UPLEFTARROW: - GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_GRAPH: - GetGraphics_Graph(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_PAPERCLIP: - GetGraphics_Paperclip(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_ATTACHMENT: - GetGraphics_Attachment(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_TAG: - GetGraphics_Tag(sPath, path, rect, PWLPT_STREAM); - break; - case PWL_ICONTYPE_FOXIT: - GetGraphics_Foxit(sPath, path, rect, PWLPT_STREAM); - break; - } - - sAppStream += sPath; - if (crStroke.nColorType != COLORTYPE_TRANSPARENT) - sAppStream += "B*\n"; - else - sAppStream += "f*\n"; - - return sAppStream; -} - -void CPWL_Utils::DrawIconAppStream(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, - int32_t nType, const CPDF_Rect & rect, const CPWL_Color& crFill, const CPWL_Color& crStroke, const int32_t nTransparancy) -{ - CFX_GraphStateData gsd; - gsd.m_LineWidth = 1.0f; - - CFX_ByteString sPath; - CFX_PathData path; - - switch (nType) - { - case PWL_ICONTYPE_CHECKMARK: - GetGraphics_Checkmark(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_CIRCLE: - GetGraphics_Circle(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_COMMENT: - GetGraphics_Comment(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_CROSS: - GetGraphics_Cross(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_HELP: - GetGraphics_Help(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_INSERTTEXT: - GetGraphics_InsertText(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_KEY: - GetGraphics_Key(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_NEWPARAGRAPH: - GetGraphics_NewParagraph(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_TEXTNOTE: - GetGraphics_TextNote(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_PARAGRAPH: - GetGraphics_Paragraph(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_RIGHTARROW: - GetGraphics_RightArrow(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_RIGHTPOINTER: - GetGraphics_RightPointer(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_STAR: - GetGraphics_Star(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_UPARROW: - GetGraphics_UpArrow(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_UPLEFTARROW: - GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_GRAPH: - GetGraphics_Graph(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_PAPERCLIP: - GetGraphics_Paperclip(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_ATTACHMENT: - GetGraphics_Attachment(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_TAG: - GetGraphics_Tag(sPath, path, rect, PWLPT_PATHDATA); - break; - case PWL_ICONTYPE_FOXIT: - GetGraphics_Foxit(sPath, path, rect, PWLPT_PATHDATA); - break; - default: - return; - } - - pDevice->DrawPath(&path, pUser2Device, &gsd, - PWLColorToFXColor(crFill,nTransparancy), PWLColorToFXColor(crStroke,nTransparancy), FXFILL_ALTERNATE); -} - -void CPWL_Utils::GetGraphics_Checkmark(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.bottom + fHeight * 2 / 5.0f),PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f + PWL_BEZIER*(fWidth / 7.0f - fWidth / 15.0f), - crBBox.bottom + fHeight * 2 / 5.0f + PWL_BEZIER*(fHeight * 2 / 7.0f - fHeight * 2 / 5.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f + PWL_BEZIER*(fWidth / 5.0f - fWidth / 4.5f), - crBBox.bottom + fHeight / 16.0f + PWL_BEZIER*(fHeight / 5.0f - fHeight / 16.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f, crBBox.bottom + fHeight / 16.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f + PWL_BEZIER*(fWidth / 4.4f - fWidth / 4.5f), - crBBox.bottom + fHeight / 16.0f - PWL_BEZIER*fHeight / 16.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f + PWL_BEZIER*(fWidth / 4.0f - fWidth / 3.0f), - crBBox.bottom), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f, crBBox.bottom), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f + PWL_BEZIER*fWidth*(1/7.0f + 2/15.0f), - crBBox.bottom + PWL_BEZIER*fHeight * 4 / 5.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f + PWL_BEZIER*fWidth*(1/7.0f - 7/15.0f), - crBBox.bottom + fHeight * 15/16.0f + PWL_BEZIER*(fHeight * 4/5.0f - fHeight * 15/16.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f,crBBox.bottom + fHeight * 15 / 16.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f + PWL_BEZIER*(fWidth * 7 / 15.0f - fWidth * 14 / 15.0f), - crBBox.bottom + fHeight * 15 / 16.0f + PWL_BEZIER*(fHeight * 8 / 7.0f - fHeight * 15 / 16.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f + PWL_BEZIER*(fWidth / 3.4f - fWidth / 3.6f), - crBBox.bottom + fHeight / 3.5f + PWL_BEZIER*(fHeight / 3.5f - fHeight / 3.5f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f,crBBox.bottom + fHeight / 3.5f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f, - crBBox.bottom + fHeight / 3.5f + PWL_BEZIER*(fHeight / 4.0f - fHeight / 3.5f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f + PWL_BEZIER*(fWidth / 3.5f - fWidth / 15.0f), - crBBox.bottom + fHeight * 2 / 5.0f + PWL_BEZIER*(fHeight * 3.5f / 5.0f - fHeight * 2 / 5.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,crBBox.bottom + fHeight * 2 / 5.0f), PWLPT_BEZIERTO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 16); - else - GetPathDataFromArray(path, PathArray, 16); -} - -void CPWL_Utils::GetGraphics_Circle(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f,crBBox.bottom + fHeight/2.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, - crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight*14/15.0f - fHeight/2.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*(fWidth/2.0f - fWidth/15.0f), crBBox.top - fHeight/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f,crBBox.top - fHeight/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*(fWidth*14/15.0f - fWidth/2.0f), crBBox.top - fHeight/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight*14/15.0f - fHeight/2.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.bottom + fHeight/2.0f - PWL_BEZIER*(fHeight/2.0f - fHeight/15.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*(fWidth*14/15.0f - fWidth/2.0f), crBBox.bottom + fHeight/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.bottom + fHeight/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*(fWidth/2.0f - fWidth/15.0f), crBBox.bottom + fHeight/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.bottom + fHeight/2.0f - PWL_BEZIER*(fHeight/2.0f - fHeight/15.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f,crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight*4/5.0f - fHeight/2.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*(fWidth/2.0f - fWidth*3/15.0f), crBBox.top - fHeight*3/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight*3/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*(fWidth*4/5.0f - fWidth/2.0f), crBBox.top - fHeight*3/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight*4/5.0f - fHeight/2.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f - PWL_BEZIER*(fHeight*4/5.0f - fHeight/2.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*(fWidth*4/5.0f - fWidth/2.0f), crBBox.bottom + fHeight*3/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.bottom + fHeight*3/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*(fWidth*4/5.0f - fWidth/2.0f), crBBox.bottom + fHeight*3/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f - PWL_BEZIER*(fHeight*4/5.0f - fHeight/2.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 26); - else - GetPathDataFromArray(path, PathArray, 26); -} - -void CPWL_Utils::GetGraphics_Comment(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.top - fHeight/6.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.top - fHeight/6.0f + PWL_BEZIER*(fHeight/6.0f - fHeight/10.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f - PWL_BEZIER*fWidth/15.0f, crBBox.top - fHeight/10.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f, crBBox.top - fHeight/10.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f, crBBox.top - fHeight/10.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f + PWL_BEZIER*fWidth/15.0f, crBBox.top - fHeight/10.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.top - fHeight/6 + PWL_BEZIER*(fHeight/6.0f - fHeight/10.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.top - fHeight/6.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.bottom + fHeight/3.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.bottom + fHeight*4/15.0f + PWL_BEZIER*fHeight/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f + PWL_BEZIER*fWidth/15.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*5/15.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*5/15.0f, crBBox.bottom + fHeight*2/15 + PWL_BEZIER*fHeight*2/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*5/15.0f - PWL_BEZIER*fWidth*2/15.0f, crBBox.bottom + fHeight*2/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*6/30.0f, crBBox.bottom + fHeight*2/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*7/30.0f + PWL_BEZIER*fWidth/30.0f, crBBox.bottom + fHeight*2/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*7/30.0f, crBBox.bottom + fHeight*2/15.0f + PWL_BEZIER*fHeight*2/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*7/30.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f - PWL_BEZIER*fWidth/15.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.bottom + fHeight/3.0f - PWL_BEZIER*fHeight/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.bottom + fHeight/3.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.top - fHeight/6.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f, crBBox.top - fHeight*8/30.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f, crBBox.top - fHeight*8/30.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15, crBBox.top - fHeight*25/60.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f, crBBox.top - fHeight*25/60.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f, crBBox.top - fHeight*17/30.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*4/15.0f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 30); - else - GetPathDataFromArray(path, PathArray, 30); -} - -void CPWL_Utils::GetGraphics_Cross(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - //FX_FLOAT fcatercorner = (FX_FLOAT)sqrt(fWidth*fWidth + fHeight*fHeight); - CPWL_Point center_point(crBBox.left + fWidth/2, crBBox.bottom + fHeight/2); - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(center_point.x, center_point.y + fHeight/10.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(center_point.x + fWidth*0.3f, center_point.y + fHeight/10.0f + fWidth*0.3f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x + fWidth/10.0f + fWidth*0.3f, center_point.y + fHeight*0.3f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x + fWidth/10.0f, center_point.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x + fWidth/10.0f + fWidth*0.3f, center_point.y - fHeight*0.3f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x + fWidth*0.3f, center_point.y - fHeight/10.0f - fHeight*0.3f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x, center_point.y - fHeight/10.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x - fWidth*0.3f, center_point.y - fHeight/10 - fHeight*0.3f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x - fWidth/10.0f - fWidth*0.3f, center_point.y - fHeight*0.3f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x - fWidth/10, center_point.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x - fWidth/10 - fWidth*0.3f, center_point.y + fHeight*0.3f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x - fWidth*0.3f, center_point.y + fHeight/10.0f + fHeight*0.3f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(center_point.x, center_point.y + fHeight/10.0f), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 13); - else - GetPathDataFromArray(path, PathArray, 13); -} - -void CPWL_Utils::GetGraphics_Help(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60.0f, crBBox.bottom + fHeight/2.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight/60.0f - fHeight/2.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*(fWidth/2.0f - fWidth/60.0f), crBBox.bottom + fHeight/60.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.bottom + fHeight/60.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*fWidth*29/60.0f, crBBox.bottom + fHeight/60.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/60.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight/60.0f - fHeight/2.0f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/60.0f, crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/60.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*fHeight*29/60.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*fWidth*29/60.0f, crBBox.top - fHeight/60.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/60.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*fWidth*29/60.0f, crBBox.top - fHeight/60.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*fHeight*29/60.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60.0f, crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.27f, crBBox.top - fHeight*0.36f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.27f, crBBox.top - fHeight*0.36f + PWL_BEZIER*fHeight*0.23f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f - PWL_BEZIER*fWidth*0.23f, crBBox.bottom + fHeight*0.87f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.bottom + fHeight*0.87f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f + PWL_BEZIER*fWidth*0.23f, crBBox.bottom + fHeight*0.87f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.27f, crBBox.top - fHeight*0.36f + PWL_BEZIER*fHeight*0.23f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.27f, crBBox.top - fHeight*0.36f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.27f - fWidth*0.08f*0.2f, crBBox.top - fHeight*0.36f - fHeight*0.15f*0.7f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.35f + fWidth*0.08f*0.2f, crBBox.top - fHeight*0.51f + fHeight*0.15f*0.2f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.35f, crBBox.top - fHeight*0.51f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.35f - fWidth*0.1f*0.5f, crBBox.top - fHeight*0.51f - fHeight*0.15f*0.3f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f - fWidth*0.1f*0.5f, crBBox.top - fHeight*0.68f + fHeight*0.15f*0.5f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f, crBBox.top - fHeight*0.68f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f, crBBox.bottom + fHeight*0.30f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f, crBBox.bottom + fHeight*0.30f - fWidth*0.1f*0.7f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.55f, crBBox.bottom + fHeight*0.30f - fWidth*0.1f*0.7f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.55f, crBBox.bottom + fHeight*0.30f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.55f, crBBox.top - fHeight*0.66f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.55f - fWidth*0.1f*0.05f, crBBox.top - fHeight*0.66f + fHeight*0.18f*0.5f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f - fWidth*0.1f*0.05f, crBBox.top - fHeight*0.48f - fHeight*0.18f*0.3f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f, crBBox.top - fHeight*0.48f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f + fWidth*0.08f*0.2f, crBBox.top - fHeight*0.48f + fHeight*0.18f*0.2f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.37f - fWidth*0.08f*0.2f, crBBox.top - fHeight*0.36f - fHeight*0.18f*0.7f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.37f, crBBox.top - fHeight*0.36f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.37f, crBBox.top - fHeight*0.36f + PWL_BEZIER*fHeight*0.13f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f + PWL_BEZIER*fWidth*0.13f, crBBox.bottom + fHeight*0.77f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.bottom + fHeight*0.77f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f - PWL_BEZIER*fWidth*0.13f, crBBox.bottom + fHeight*0.77f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.37f, crBBox.top - fHeight*0.36f + PWL_BEZIER*fHeight*0.13f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.37f, crBBox.top - fHeight*0.36f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.37f, crBBox.top - fHeight*0.36f - fWidth*0.1f*0.6f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.27f, crBBox.top - fHeight*0.36f - fWidth*0.1f*0.6f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.27f, crBBox.top - fHeight*0.36f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.56f, crBBox.bottom + fHeight*0.13f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.56f, crBBox.bottom + fHeight*0.13f + PWL_BEZIER*fHeight*0.055f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f - PWL_BEZIER*fWidth*0.095f, crBBox.bottom + fHeight*0.185f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f, crBBox.bottom + fHeight*0.185f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f + PWL_BEZIER*fWidth*0.065f, crBBox.bottom + fHeight*0.185f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.44f, crBBox.bottom + fHeight*0.13f + PWL_BEZIER*fHeight*0.055f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.44f, crBBox.bottom + fHeight*0.13f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.44f, crBBox.bottom + fHeight*0.13f - PWL_BEZIER*fHeight*0.055f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f + PWL_BEZIER*fWidth*0.065f, crBBox.bottom + fHeight*0.075f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f, crBBox.bottom + fHeight*0.075f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f - PWL_BEZIER*fWidth*0.065f, crBBox.bottom + fHeight*0.075f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.56f, crBBox.bottom + fHeight*0.13f - PWL_BEZIER*fHeight*0.055f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.56f, crBBox.bottom + fHeight*0.13f), PWLPT_BEZIERTO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 59); - else - GetPathDataFromArray(path, PathArray, 59); -} - -void CPWL_Utils::GetGraphics_InsertText(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10, crBBox.bottom + fHeight/10), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2, crBBox.top - fHeight*2/15), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10, crBBox.bottom + fHeight/10), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10, crBBox.bottom + fHeight/10), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 4); - else - GetPathDataFromArray(path, PathArray, 4); -} - -void CPWL_Utils::GetGraphics_Key(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - FX_FLOAT k = -fHeight/fWidth; - CPWL_Point tail; - CPWL_Point CicleCenter; - tail.x = crBBox.left + fWidth*0.9f; - tail.y = k*(tail.x - crBBox.right) + crBBox.bottom; - CicleCenter.x = crBBox.left + fWidth*0.15f; - CicleCenter.y = k*(CicleCenter.x - crBBox.right) + crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(tail.x + fWidth/30.0f, -fWidth/30.0f/k + tail.y), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30.0f - fWidth*0.18f, -k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f + fWidth*0.07f, - -fWidth*0.07f/k - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20 + fWidth*0.07f, - -fWidth*0.07f/k - k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20, - -k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20 - fWidth/15, - -k*fWidth/15 - k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20 - fWidth/15 + fWidth*0.07f, - -fWidth*0.07f/k - k*fWidth/15 - k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20 - fWidth/15 - fWidth/20 + fWidth*0.07f, - -fWidth*0.07f/k + -k*fWidth/20 + -k*fWidth/15 - k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20 - fWidth/15 - fWidth/20, - -k*fWidth/20 + -k*fWidth/15 - k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.45f, -k*fWidth*0.45f - fWidth/30/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.45f + fWidth*0.2f, - -fWidth*0.4f/k - k*fWidth*0.45f - fWidth/30/k + tail.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.2f, - fWidth*0.1f/k + CicleCenter.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth/60.0f, -k*fWidth/60 + CicleCenter.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth/60, -k*fWidth/60 + CicleCenter.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth*0.22f, fWidth*0.35f/k + CicleCenter.y - fHeight*0.05f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(tail.x - fWidth/30 - fWidth*0.45f - fWidth*0.18f, fWidth*0.05f/k - k*fWidth*0.45f + fWidth/30/k + tail.y - fHeight*0.05f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(tail.x - fWidth/30.0f - fWidth*0.45f, -k*fWidth*0.45f + fWidth/30.0f/k + tail.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(tail.x - fWidth/30.0f, fWidth/30.0f/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/30, -fWidth/30/k + tail.y), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.08f, k*fWidth*0.08f + CicleCenter.y), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.08f + fWidth*0.1f, -fWidth*0.1f/k + k*fWidth*0.08f + CicleCenter.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.22f + fWidth*0.1f, k*fWidth*0.22f + CicleCenter.y - fWidth*0.1f/k), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.22f, k*fWidth*0.22f + CicleCenter.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.22f - fWidth*0.1f, fWidth*0.1f/k + k*fWidth*0.22f + CicleCenter.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.08f - fWidth*0.1f, fWidth*0.1f/k + k*fWidth*0.08f + CicleCenter.y), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.08f, k*fWidth*0.08f + CicleCenter.y), PWLPT_BEZIERTO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 28); - else - GetPathDataFromArray(path, PathArray, 28); -} - -void CPWL_Utils::GetGraphics_NewParagraph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/20.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10.0f, crBBox.top - fHeight/2.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.top - fHeight/2.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/20.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.12f, crBBox.top - fHeight*17/30.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.12f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.22f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.22f, crBBox.top - fHeight*17/30.0f - fWidth*0.14f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.38f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.48f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.48f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.38f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.38f, crBBox.bottom + fWidth*0.24f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.22f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.12f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.bottom + fHeight/10.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight/10.0f + fHeight/7.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.97f, crBBox.bottom + fHeight/10.0f + fHeight/7.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.97f, crBBox.top - fHeight*17/30.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.top - fHeight*17/30.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight/7 + fHeight*0.18f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.85f, crBBox.bottom + fHeight/7 + fHeight*0.18f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.85f, crBBox.top - fHeight*17/30.0f - fHeight*0.08f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.top - fHeight*17/30.0f - fHeight*0.08f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight/7 + fHeight*0.18f), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 28); - else - GetPathDataFromArray(path, PathArray, 28); -} - -void CPWL_Utils::GetGraphics_TextNote(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/10.0f, crBBox.bottom + fHeight/15.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*7/10.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.top - fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10.0f, crBBox.top - fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10.0f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/10.0f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/10.0f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/10.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/5.0f, crBBox.top - fHeight*4/15.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/5.0f, crBBox.top - fHeight*4/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/5.0f, crBBox.top - fHeight*7/15.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/5.0f, crBBox.top - fHeight*7/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/5.0f, crBBox.top - fHeight*10/15.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/10.0f, crBBox.top - fHeight*10/15.0f), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 17); - else - GetPathDataFromArray(path, PathArray, 17); -} - -void CPWL_Utils::GetGraphics_Paragraph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/15.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.top - fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.634f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.634f, crBBox.top - fHeight*2/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.566f, crBBox.top - fHeight*2/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.566f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/15.0f - fHeight*0.4f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.2f, crBBox.top - fHeight/15.0f - fHeight*0.4f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.2f, crBBox.top - fHeight/15.0f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/15.0f), PWLPT_BEZIERTO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 12); - else - GetPathDataFromArray(path, PathArray, 12); -} - -void CPWL_Utils::GetGraphics_RightArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.top - fHeight/2.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + fWidth/8.0f, crBBox.bottom + fHeight/5.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.bottom + fHeight/5.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f - fWidth*0.15f, crBBox.top - fHeight/2.0f - fWidth/25.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.1f, crBBox.top - fHeight/2.0f - fWidth/25.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.1f, crBBox.top - fHeight/2.0f + fWidth/25.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f - fWidth*0.15f, crBBox.top - fHeight/2.0f + fWidth/25.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/5.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + fWidth/8.0f, crBBox.top - fHeight/5.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.top - fHeight/2.0f), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 10); - else - GetPathDataFromArray(path, PathArray, 10); -} - -void CPWL_Utils::GetGraphics_RightPointer(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30.0f, crBBox.top - fHeight/2.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/30.0f, crBBox.bottom + fHeight/6.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*4/15.0f, crBBox.top - fHeight/2.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/30.0f, crBBox.top - fHeight/6.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30.0f, crBBox.top - fHeight/2.0f), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 5); - else - GetPathDataFromArray(path, PathArray, 5); -} - -void CPWL_Utils::GetGraphics_Star(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fLongRadius = (crBBox.top - crBBox.bottom)/(1+(FX_FLOAT)cos(PWL_PI/5.0f)); - fLongRadius = fLongRadius * 0.7f; - FX_FLOAT fShortRadius = fLongRadius * 0.55f; - CPDF_Point ptCenter = CPDF_Point((crBBox.left + crBBox.right) / 2.0f,(crBBox.top + crBBox.bottom) / 2.0f); - - FX_FLOAT px1[5], py1[5]; - FX_FLOAT px2[5], py2[5]; - - FX_FLOAT fAngel = PWL_PI/10.0f; - - for (int32_t i=0; i<5; i++) - { - px1[i] = ptCenter.x + fLongRadius * (FX_FLOAT)cos(fAngel); - py1[i] = ptCenter.y + fLongRadius * (FX_FLOAT)sin(fAngel); - - fAngel += PWL_PI * 2 / 5.0f; - } - - fAngel = PWL_PI/5.0f + PWL_PI/10.0f; - - for (int32_t j=0; j<5; j++) - { - px2[j] = ptCenter.x + fShortRadius * (FX_FLOAT)cos(fAngel); - py2[j] = ptCenter.y + fShortRadius * (FX_FLOAT)sin(fAngel); - - fAngel += PWL_PI * 2 / 5.0f; - } - - CPWL_PathData PathArray[11]; - PathArray[0] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_MOVETO); - PathArray[1] = CPWL_PathData(CPWL_Point(px2[0], py2[0]), PWLPT_LINETO); - - for(int32_t k = 0; k < 4; k++) - { - PathArray[(k+1)*2] = CPWL_PathData(CPWL_Point(px1[k+1], py1[k+1]), PWLPT_LINETO); - PathArray[(k+1)*2 + 1] = CPWL_PathData(CPWL_Point(px2[k+1], py2[k+1]), PWLPT_LINETO); - } - - PathArray[10] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_LINETO); - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 11); - else - GetPathDataFromArray(path, PathArray, 11); -} - -void CPWL_Utils::GetGraphics_UpArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/15.0f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.top - fWidth*3/5.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fWidth*3/5.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fWidth*3/5.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10, crBBox.top - fWidth*3/5.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/15.0f), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 8); - else - GetPathDataFromArray(path, PathArray, 8); -} - -void CPWL_Utils::GetGraphics_UpLeftArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - CPWL_Point leftup(crBBox.left, crBBox.top); - CPWL_Point rightdown(crBBox.right, crBBox.bottom); - FX_FLOAT k = -fHeight/fWidth; - CPWL_Point tail; - tail.x = crBBox.left + fWidth*4/5.0f; - tail.y = k*(tail.x - crBBox.right) + rightdown.y; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/20.0f, k*(crBBox.left + fWidth/20.0f - rightdown.x) + rightdown.y), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(fHeight*17/60.0f/k + tail.x + fWidth/10.0f + fWidth/5.0f, - -fWidth/5.0f/k + tail.y - fWidth/10.0f/k + fHeight*17/60.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(fHeight*17/60.0f/k + tail.x + fWidth/10.0f, - tail.y - fWidth/10.0f/k + fHeight*17/60.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x + fWidth/10.0f, tail.y - fWidth/10.0f/k), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(tail.x - fWidth/10.0f, tail.y + fWidth/10.0f/k), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(fHeight*17/60.0f/k + tail.x - fWidth/10.0f, tail.y + fWidth/10.0f/k + fHeight*17/60.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(fHeight*17/60.0f/k + tail.x - fWidth/10.0f - fWidth/5.0f, - fWidth/5.0f/k + tail.y + fWidth/10.0f/k + fHeight*17/60.0f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/20.0f, k*(crBBox.left + fWidth/20.0f - rightdown.x) + rightdown.y), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 8); - else - GetPathDataFromArray(path, PathArray, 8); -} - -void CPWL_Utils::GetGraphics_Graph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.05f, crBBox.top - fWidth*0.15f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.25f, crBBox.top - fHeight*0.15f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.275f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.05f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.05f, crBBox.top - fWidth*0.15f), PWLPT_LINETO), - - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.275f, crBBox.top - fWidth*0.45f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.475f, crBBox.top - fWidth*0.45f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.475f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.275f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.275f, crBBox.top - fWidth*0.45f), PWLPT_LINETO), - - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.top - fHeight*0.05f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.top - fHeight*0.05f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.top - fHeight*0.05f), PWLPT_LINETO), - - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.725f, crBBox.top - fWidth*0.35f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.925f, crBBox.top - fWidth*0.35f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.925f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.725f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.725f, crBBox.top - fWidth*0.35f), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 20); - else - GetPathDataFromArray(path, PathArray, 20); -} - -void CPWL_Utils::GetGraphics_Paperclip(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60, crBBox.top - fHeight*0.25f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60, crBBox.bottom + fHeight*0.25f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60, crBBox.bottom + fHeight*0.25f - fWidth*57/60.0f*0.35f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30, crBBox.bottom + fHeight*0.25f - fWidth*57/60.0f*0.35f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30, crBBox.bottom + fHeight*0.25f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30, crBBox.top - fHeight*0.33f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30, crBBox.top - fHeight*0.33f + fHeight/15*0.5f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30 - fWidth*0.12f, crBBox.top - fHeight*0.33f + fHeight/15*0.5f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30 - fWidth*0.12f, crBBox.top - fHeight*0.33f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30 - fWidth*0.12f, crBBox.bottom + fHeight*0.2f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30 - fWidth*0.12f, crBBox.bottom + fHeight*0.2f - (fWidth*57/60.0f - fWidth*0.24f)*0.25f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60 + fWidth*0.12f, crBBox.bottom + fHeight*0.2f - (fWidth*57/60.0f - fWidth*0.24f)*0.25f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60 + fWidth*0.12f, crBBox.bottom + fHeight*0.2f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60 + fWidth*0.12f, crBBox.top - fHeight*0.2f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60 + fWidth*0.12f, crBBox.top - fHeight*0.2f + (fWidth*11/12.0f - fWidth*0.36f)*0.25f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.24f, crBBox.top - fHeight*0.2f + (fWidth*11/12.0f - fWidth*0.36f)*0.25f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.24f, crBBox.top - fHeight*0.2f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.24f, crBBox.bottom + fHeight*0.25f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.24f, crBBox.bottom + fHeight*0.25f - (fWidth*14/15.0f - fWidth*0.53f)*0.25f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.29f, crBBox.bottom + fHeight*0.25f - (fWidth*14/15.0f - fWidth*0.53f)*0.25f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.29f, crBBox.bottom + fHeight*0.25f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.29f, crBBox.top - fHeight*0.33f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.29f, crBBox.top - fHeight*0.33f + fWidth*0.12f*0.35f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.17f, crBBox.top - fHeight*0.33f + fWidth*0.12f*0.35f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.17f, crBBox.top - fHeight*0.33f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.17f, crBBox.bottom + fHeight*0.3f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.17f, crBBox.bottom + fHeight*0.3f - fWidth*(14/15.0f - 0.29f)*0.35f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.12f, crBBox.bottom + fHeight*0.3f - fWidth*(14/15.0f - 0.29f)*0.35f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.12f, crBBox.bottom + fHeight*0.3f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.12f, crBBox.top - fHeight*0.25f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.12f, crBBox.top - fHeight*0.25f + fWidth*0.35f*(11/12.0f - 0.12f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60, crBBox.top - fHeight*0.25f + fWidth*0.35f*(11/12.0f - 0.12f)), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60, crBBox.top - fHeight*0.25f), PWLPT_BEZIERTO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 33); - else - GetPathDataFromArray(path, PathArray, 33); -} - -void CPWL_Utils::GetGraphics_Attachment(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.25f, crBBox.top - fHeight*0.1f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.23f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f + fWidth*0.04f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.5f + fWidth*0.04f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.5f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.23f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.25f, crBBox.top - fHeight*0.1f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.25f, crBBox.top - fHeight*0.1f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.23f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.23f), PWLPT_LINETO), - - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f - fWidth*0.25f*0.4f, crBBox.top - fHeight*0.5f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.15f, crBBox.top - fHeight*0.65f + fHeight*0.15f*0.4f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.15f, crBBox.top - fHeight*0.65f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.15f, crBBox.top - fHeight*0.65f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.15f, crBBox.top - fHeight*0.65f + fHeight*0.15f*0.4f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f + fWidth*0.25f*0.4f, crBBox.top - fHeight*0.5f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.5f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.5f + fWidth*0.04f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f + fWidth*0.04f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.top - fHeight*0.65f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.bottom + fHeight*0.1f), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 24); - else - GetPathDataFromArray(path, PathArray, 24); -} - -void CPWL_Utils::GetGraphics_Tag(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fWidth = crBBox.right - crBBox.left; - FX_FLOAT fHeight = crBBox.top - crBBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.1f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.1f, crBBox.top - fHeight*0.5f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.3f, crBBox.bottom + fHeight*0.1f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.1f, crBBox.bottom + fHeight*0.1f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.1f, crBBox.top - fHeight*0.1f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.1f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.3f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.2f, crBBox.top - fHeight*0.3f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.2f, crBBox.top - fHeight*0.5f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.7f), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.2f, crBBox.top - fHeight*0.7f), PWLPT_LINETO) - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 12); - else - GetPathDataFromArray(path, PathArray, 12); -} - -void CPWL_Utils::GetGraphics_Foxit(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type) -{ - FX_FLOAT fOutWidth = crBBox.right - crBBox.left; - FX_FLOAT fOutHeight = crBBox.top - crBBox.bottom; - - CPDF_Rect crInBox = crBBox; - crInBox.left = crBBox.left + fOutWidth*0.08f; - crInBox.right = crBBox.right - fOutWidth*0.08f; - crInBox.top = crBBox.top - fOutHeight*0.08f; - crInBox.bottom = crBBox.bottom + fOutHeight*0.08f; - - FX_FLOAT fWidth = crInBox.right - crInBox.left; - FX_FLOAT fHeight = crInBox.top - crInBox.bottom; - - CPWL_PathData PathArray[] = - { - CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.45f, crInBox.top), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.45f, crInBox.top - PWL_BEZIER * fHeight * 0.4f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.45f - PWL_BEZIER * fWidth * 0.45f, crInBox.top - fHeight*0.4f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight*0.4f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_LINETO), - - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.60f, crInBox.top), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.75f, crInBox.top), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.75f, crInBox.top - PWL_BEZIER * fHeight * 0.7f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.75f - PWL_BEZIER * fWidth * 0.75f, crInBox.top - fHeight*0.7f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight*0.7f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight*0.55f), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crInBox.left + PWL_BEZIER * fWidth*0.60f, crInBox.top - fHeight*0.55f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top - PWL_BEZIER * fHeight * 0.55f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top), PWLPT_BEZIERTO), - - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.90f, crInBox.top), PWLPT_MOVETO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.90f, crInBox.top - PWL_BEZIER * fHeight * 0.85f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.90f - PWL_BEZIER * fWidth * 0.90f, crInBox.top - fHeight*0.85f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight*0.85f), PWLPT_BEZIERTO), - CPWL_PathData(CPWL_Point(crInBox.left, crInBox.bottom), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crInBox.right, crInBox.bottom), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crInBox.right, crInBox.top), PWLPT_LINETO), - CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.90f, crInBox.top), PWLPT_LINETO), - }; - - if(type == PWLPT_STREAM) - sPathData = GetAppStreamFromArray(PathArray, 23); - else - GetPathDataFromArray(path, PathArray, 23); -} - -void CPWL_Color::ConvertColorType(int32_t other_nColorType) -{ - switch (other_nColorType) - { - case COLORTYPE_TRANSPARENT: - break; - case COLORTYPE_GRAY: - switch (other_nColorType) - { - case COLORTYPE_RGB: - CPWL_Utils::ConvertGRAY2RGB(fColor1, fColor1, fColor2, fColor3); - break; - case COLORTYPE_CMYK: - CPWL_Utils::ConvertGRAY2CMYK(fColor1, fColor1, fColor2, fColor3, fColor4); - break; - } - break; - case COLORTYPE_RGB: - switch (other_nColorType) - { - case COLORTYPE_GRAY: - CPWL_Utils::ConvertRGB2GRAY(fColor1, fColor2, fColor3, fColor1); - break; - case COLORTYPE_CMYK: - CPWL_Utils::ConvertRGB2CMYK(fColor1, fColor2, fColor3, fColor1, fColor2, fColor3, fColor4); - break; - } - break; - case COLORTYPE_CMYK: - switch (other_nColorType) - { - case COLORTYPE_GRAY: - CPWL_Utils::ConvertCMYK2GRAY(fColor1, fColor2, fColor3, fColor4, fColor1); - break; - case COLORTYPE_RGB: - CPWL_Utils::ConvertCMYK2RGB(fColor1, fColor2, fColor3, fColor4, fColor1, fColor2, fColor3); - break; - } - break; - } - nColorType = other_nColorType; -} +static CFX_ByteString GetWordSpellCheckAppearanceStream( + IFX_Edit_Iterator* pIterator, + const CPDF_Point& ptOffset, + const CPVT_WordRange& wrWord) { + CFX_ByteTextBuf sRet; + FX_FLOAT fStartX = 0.0f; + FX_FLOAT fEndX = 0.0f; + FX_FLOAT fY = 0.0f; + FX_FLOAT fStep = 0.0f; + FX_BOOL bBreak = FALSE; + + if (pIterator) { + pIterator->SetAt(wrWord.BeginPos); + + do { + CPVT_WordPlace place = pIterator->GetAt(); + + CPVT_Line line; + if (pIterator->GetLine(line)) { + fY = line.ptLine.y; + fStep = (line.fLineAscent - line.fLineDescent) / 16.0f; + } + + if (place.LineCmp(wrWord.BeginPos) == 0) { + pIterator->SetAt(wrWord.BeginPos); + CPVT_Word word; + if (pIterator->GetWord(word)) { + fStartX = word.ptWord.x; + } + } else { + fStartX = line.ptLine.x; + } + + if (place.LineCmp(wrWord.EndPos) == 0) { + pIterator->SetAt(wrWord.EndPos); + CPVT_Word word; + if (pIterator->GetWord(word)) { + fEndX = word.ptWord.x + word.fWidth; + } + + bBreak = TRUE; + } else { + fEndX = line.ptLine.x + line.fLineWidth; + } + + sRet << GetSquigglyAppearanceStream( + fStartX + ptOffset.x, fEndX + ptOffset.x, fY + ptOffset.y, fStep); + + if (bBreak) + break; + } while (pIterator->NextLine()); + } + + return sRet.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetSpellCheckAppStream( + IFX_Edit* pEdit, + IPWL_SpellCheck* pSpellCheck, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange) { + ASSERT(pEdit != NULL); + ASSERT(pSpellCheck != NULL); + + CFX_ByteTextBuf sRet; + + if (pRange && pRange->IsExist()) { + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + pIterator->SetAt(pRange->BeginPos); + + FX_BOOL bLatinWord = FALSE; + CPVT_WordPlace wpWordStart; + CFX_ByteString sWord; + + CPVT_WordPlace oldplace; + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + if (pRange && place.WordCmp(pRange->EndPos) > 0) + break; + + CPVT_Word word; + if (pIterator->GetWord(word)) { + if (FX_EDIT_ISLATINWORD(word.Word)) { + if (!bLatinWord) { + wpWordStart = place; + bLatinWord = TRUE; + } + + sWord += (char)word.Word; + oldplace = place; + } else { + if (bLatinWord) { + if (!pSpellCheck->CheckWord(sWord)) { + sRet << GetWordSpellCheckAppearanceStream( + pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace)); + pIterator->SetAt(place); + } + bLatinWord = FALSE; + } + + sWord.Empty(); + } + } else { + if (bLatinWord) { + if (!pSpellCheck->CheckWord(sWord)) + sRet << GetWordSpellCheckAppearanceStream( + pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace)); + bLatinWord = FALSE; + sWord.Empty(); + } + } + } + + if (bLatinWord) { + if (!pSpellCheck->CheckWord(sWord)) + sRet << GetWordSpellCheckAppearanceStream( + pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace)); + + bLatinWord = FALSE; + sWord.Empty(); + } + } + } + + return sRet.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetTextAppStream(const CPDF_Rect& rcBBox, + IFX_Edit_FontMap* pFontMap, + const CFX_WideString& sText, + int32_t nAlignmentH, + int32_t nAlignmentV, + FX_FLOAT fFontSize, + FX_BOOL bMultiLine, + FX_BOOL bAutoReturn, + const CPWL_Color& crText) { + CFX_ByteTextBuf sRet; + + if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) { + pEdit->SetFontMap(pFontMap); + pEdit->SetPlateRect(rcBBox); + pEdit->SetAlignmentH(nAlignmentH); + pEdit->SetAlignmentV(nAlignmentV); + pEdit->SetMultiLine(bMultiLine); + pEdit->SetAutoReturn(bAutoReturn); + if (IsFloatZero(fFontSize)) + pEdit->SetAutoFontSize(TRUE); + else + pEdit->SetFontSize(fFontSize); + + pEdit->Initialize(); + pEdit->SetText(sText.c_str()); + + CFX_ByteString sEdit = + CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, 0.0f)); + if (sEdit.GetLength() > 0) { + sRet << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit + << "ET\n"; + } + IFX_Edit::DelEdit(pEdit); + } + + return sRet.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetPushButtonAppStream(const CPDF_Rect& rcBBox, + IFX_Edit_FontMap* pFontMap, + CPDF_Stream* pIconStream, + CPDF_IconFit& IconFit, + const CFX_WideString& sLabel, + const CPWL_Color& crText, + FX_FLOAT fFontSize, + int32_t nLayOut) { + const FX_FLOAT fAutoFontScale = 1.0f / 3.0f; + + if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) { + pEdit->SetFontMap(pFontMap); + pEdit->SetAlignmentH(1); + pEdit->SetAlignmentV(1); + pEdit->SetMultiLine(FALSE); + pEdit->SetAutoReturn(FALSE); + if (IsFloatZero(fFontSize)) + pEdit->SetAutoFontSize(TRUE); + else + pEdit->SetFontSize(fFontSize); + + pEdit->Initialize(); + pEdit->SetText(sLabel.c_str()); + + CPDF_Rect rcLabelContent = pEdit->GetContentRect(); + CPWL_Icon Icon; + PWL_CREATEPARAM cp; + cp.dwFlags = PWS_VISIBLE; + Icon.Create(cp); + Icon.SetIconFit(&IconFit); + Icon.SetPDFStream(pIconStream); + + CPDF_Rect rcLabel = CPDF_Rect(0, 0, 0, 0); + CPDF_Rect rcIcon = CPDF_Rect(0, 0, 0, 0); + FX_FLOAT fWidth = 0.0f; + FX_FLOAT fHeight = 0.0f; + + switch (nLayOut) { + case PPBL_LABEL: + rcLabel = rcBBox; + rcIcon = CPDF_Rect(0, 0, 0, 0); + break; + case PPBL_ICON: + rcIcon = rcBBox; + rcLabel = CPDF_Rect(0, 0, 0, 0); + break; + case PPBL_ICONTOPLABELBOTTOM: + + if (pIconStream) { + if (IsFloatZero(fFontSize)) { + fHeight = rcBBox.top - rcBBox.bottom; + rcLabel = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcBBox.right, + rcBBox.bottom + fHeight * fAutoFontScale); + rcIcon = + CPDF_Rect(rcBBox.left, rcLabel.top, rcBBox.right, rcBBox.top); + } else { + fHeight = rcLabelContent.Height(); + + if (rcBBox.bottom + fHeight > rcBBox.top) { + rcIcon = CPDF_Rect(0, 0, 0, 0); + rcLabel = rcBBox; + } else { + rcLabel = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcBBox.right, + rcBBox.bottom + fHeight); + rcIcon = + CPDF_Rect(rcBBox.left, rcLabel.top, rcBBox.right, rcBBox.top); + } + } + } else { + rcLabel = rcBBox; + rcIcon = CPDF_Rect(0, 0, 0, 0); + } + + break; + case PPBL_LABELTOPICONBOTTOM: + + if (pIconStream) { + if (IsFloatZero(fFontSize)) { + fHeight = rcBBox.top - rcBBox.bottom; + rcLabel = + CPDF_Rect(rcBBox.left, rcBBox.top - fHeight * fAutoFontScale, + rcBBox.right, rcBBox.top); + rcIcon = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcBBox.right, + rcLabel.bottom); + } else { + fHeight = rcLabelContent.Height(); + + if (rcBBox.bottom + fHeight > rcBBox.top) { + rcIcon = CPDF_Rect(0, 0, 0, 0); + rcLabel = rcBBox; + } else { + rcLabel = CPDF_Rect(rcBBox.left, rcBBox.top - fHeight, + rcBBox.right, rcBBox.top); + rcIcon = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcBBox.right, + rcLabel.bottom); + } + } + } else { + rcLabel = rcBBox; + rcIcon = CPDF_Rect(0, 0, 0, 0); + } + + break; + case PPBL_ICONLEFTLABELRIGHT: + + if (pIconStream) { + if (IsFloatZero(fFontSize)) { + fWidth = rcBBox.right - rcBBox.left; + rcLabel = CPDF_Rect(rcBBox.right - fWidth * fAutoFontScale, + rcBBox.bottom, rcBBox.right, rcBBox.top); + rcIcon = + CPDF_Rect(rcBBox.left, rcBBox.bottom, rcLabel.left, rcBBox.top); + + if (rcLabelContent.Width() < fWidth * fAutoFontScale) { + } else { + if (rcLabelContent.Width() < fWidth) { + rcLabel = CPDF_Rect(rcBBox.right - rcLabelContent.Width(), + rcBBox.bottom, rcBBox.right, rcBBox.top); + rcIcon = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcLabel.left, + rcBBox.top); + } else { + rcLabel = rcBBox; + rcIcon = CPDF_Rect(0, 0, 0, 0); + } + } + } else { + fWidth = rcLabelContent.Width(); + + if (rcBBox.left + fWidth > rcBBox.right) { + rcLabel = rcBBox; + rcIcon = CPDF_Rect(0, 0, 0, 0); + } else { + rcLabel = CPDF_Rect(rcBBox.right - fWidth, rcBBox.bottom, + rcBBox.right, rcBBox.top); + rcIcon = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcLabel.left, + rcBBox.top); + } + } + } else { + rcLabel = rcBBox; + rcIcon = CPDF_Rect(0, 0, 0, 0); + } + + break; + case PPBL_LABELLEFTICONRIGHT: + + if (pIconStream) { + if (IsFloatZero(fFontSize)) { + fWidth = rcBBox.right - rcBBox.left; + rcLabel = + CPDF_Rect(rcBBox.left, rcBBox.bottom, + rcBBox.left + fWidth * fAutoFontScale, rcBBox.top); + rcIcon = CPDF_Rect(rcLabel.right, rcBBox.bottom, rcBBox.right, + rcBBox.top); + + if (rcLabelContent.Width() < fWidth * fAutoFontScale) { + } else { + if (rcLabelContent.Width() < fWidth) { + rcLabel = + CPDF_Rect(rcBBox.left, rcBBox.bottom, + rcBBox.left + rcLabelContent.Width(), rcBBox.top); + rcIcon = CPDF_Rect(rcLabel.right, rcBBox.bottom, rcBBox.right, + rcBBox.top); + } else { + rcLabel = rcBBox; + rcIcon = CPDF_Rect(0, 0, 0, 0); + } + } + } else { + fWidth = rcLabelContent.Width(); + + if (rcBBox.left + fWidth > rcBBox.right) { + rcLabel = rcBBox; + rcIcon = CPDF_Rect(0, 0, 0, 0); + } else { + rcLabel = CPDF_Rect(rcBBox.left, rcBBox.bottom, + rcBBox.left + fWidth, rcBBox.top); + rcIcon = CPDF_Rect(rcLabel.right, rcBBox.bottom, rcBBox.right, + rcBBox.top); + } + } + } else { + rcLabel = rcBBox; + rcIcon = CPDF_Rect(0, 0, 0, 0); + } + + break; + case PPBL_LABELOVERICON: + rcLabel = rcBBox; + rcIcon = rcBBox; + break; + } + + CFX_ByteTextBuf sAppStream, sTemp; + + if (!rcIcon.IsEmpty()) { + Icon.Move(rcIcon, FALSE, FALSE); + sTemp << Icon.GetImageAppStream(); + } + + Icon.Destroy(); + + if (!rcLabel.IsEmpty()) { + pEdit->SetPlateRect(rcLabel); + CFX_ByteString sEdit = + CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, 0.0f)); + if (sEdit.GetLength() > 0) { + sTemp << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit + << "ET\n"; + } + } + + IFX_Edit::DelEdit(pEdit); + + if (sTemp.GetSize() > 0) { + sAppStream << "q\n" << rcBBox.left << " " << rcBBox.bottom << " " + << rcBBox.right - rcBBox.left << " " + << rcBBox.top - rcBBox.bottom << " re W n\n"; + sAppStream << sTemp << "Q\n"; + } + + return sAppStream.GetByteString(); + } + + return ""; +} + +CFX_ByteString CPWL_Utils::GetColorAppStream(const CPWL_Color& color, + const FX_BOOL& bFillOrStroke) { + CFX_ByteTextBuf sColorStream; + + switch (color.nColorType) { + case COLORTYPE_RGB: + sColorStream << color.fColor1 << " " << color.fColor2 << " " + << color.fColor3 << " " << (bFillOrStroke ? "rg" : "RG") + << "\n"; + break; + case COLORTYPE_GRAY: + sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G") + << "\n"; + break; + case COLORTYPE_CMYK: + sColorStream << color.fColor1 << " " << color.fColor2 << " " + << color.fColor3 << " " << color.fColor4 << " " + << (bFillOrStroke ? "k" : "K") << "\n"; + break; + } + + return sColorStream.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetBorderAppStream(const CPDF_Rect& rect, + FX_FLOAT fWidth, + const CPWL_Color& color, + const CPWL_Color& crLeftTop, + const CPWL_Color& crRightBottom, + int32_t nStyle, + const CPWL_Dash& dash) { + CFX_ByteTextBuf sAppStream; + CFX_ByteString sColor; + + FX_FLOAT fLeft = rect.left; + FX_FLOAT fRight = rect.right; + FX_FLOAT fTop = rect.top; + FX_FLOAT fBottom = rect.bottom; + + if (fWidth > 0.0f) { + FX_FLOAT fHalfWidth = fWidth / 2.0f; + + sAppStream << "q\n"; + + switch (nStyle) { + default: + case PBS_SOLID: + sColor = CPWL_Utils::GetColorAppStream(color, TRUE); + if (sColor.GetLength() > 0) { + sAppStream << sColor; + sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " + << fTop - fBottom << " re\n"; + sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " " + << fRight - fLeft - fWidth * 2 << " " + << fTop - fBottom - fWidth * 2 << " re\n"; + sAppStream << "f*\n"; + } + break; + case PBS_DASH: + sColor = CPWL_Utils::GetColorAppStream(color, FALSE); + if (sColor.GetLength() > 0) { + sAppStream << sColor; + sAppStream << fWidth << " w" + << " [" << dash.nDash << " " << dash.nGap << "] " + << dash.nPhase << " d\n"; + sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 + << " m\n"; + sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2 + << " l\n"; + sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2 + << " l\n"; + sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2 + << " l\n"; + sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 + << " l S\n"; + } + break; + case PBS_BEVELED: + case PBS_INSET: + sColor = CPWL_Utils::GetColorAppStream(crLeftTop, TRUE); + if (sColor.GetLength() > 0) { + sAppStream << sColor; + sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth + << " m\n"; + sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth + << " l\n"; + sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth + << " l\n"; + sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 + << " l\n"; + sAppStream << fLeft + fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 + << " l\n"; + sAppStream << fLeft + fHalfWidth * 2 << " " + << fBottom + fHalfWidth * 2 << " l f\n"; + } + + sColor = CPWL_Utils::GetColorAppStream(crRightBottom, TRUE); + if (sColor.GetLength() > 0) { + sAppStream << sColor; + sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth + << " m\n"; + sAppStream << fRight - fHalfWidth << " " << fBottom + fHalfWidth + << " l\n"; + sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth + << " l\n"; + sAppStream << fLeft + fHalfWidth * 2 << " " + << fBottom + fHalfWidth * 2 << " l\n"; + sAppStream << fRight - fHalfWidth * 2 << " " + << fBottom + fHalfWidth * 2 << " l\n"; + sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 + << " l f\n"; + } + + sColor = CPWL_Utils::GetColorAppStream(color, TRUE); + if (sColor.GetLength() > 0) { + sAppStream << sColor; + sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " + << fTop - fBottom << " re\n"; + sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " " + << fRight - fLeft - fHalfWidth * 2 << " " + << fTop - fBottom - fHalfWidth * 2 << " re f*\n"; + } + break; + case PBS_UNDERLINED: + sColor = CPWL_Utils::GetColorAppStream(color, FALSE); + if (sColor.GetLength() > 0) { + sAppStream << sColor; + sAppStream << fWidth << " w\n"; + sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n"; + sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n"; + } + break; + } + + sAppStream << "Q\n"; + } + + return sAppStream.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetCircleBorderAppStream( + const CPDF_Rect& rect, + FX_FLOAT fWidth, + const CPWL_Color& color, + const CPWL_Color& crLeftTop, + const CPWL_Color& crRightBottom, + int32_t nStyle, + const CPWL_Dash& dash) { + CFX_ByteTextBuf sAppStream; + CFX_ByteString sColor; + + if (fWidth > 0.0f) { + sAppStream << "q\n"; + + switch (nStyle) { + default: + case PBS_SOLID: + case PBS_UNDERLINED: { + sColor = CPWL_Utils::GetColorAppStream(color, FALSE); + if (sColor.GetLength() > 0) { + sAppStream << "q\n" << fWidth << " w\n" << sColor + << CPWL_Utils::GetAP_Circle( + CPWL_Utils::DeflateRect(rect, fWidth / 2.0f)) + << " S\nQ\n"; + } + } break; + case PBS_DASH: { + sColor = CPWL_Utils::GetColorAppStream(color, FALSE); + if (sColor.GetLength() > 0) { + sAppStream << "q\n" << fWidth << " w\n" + << "[" << dash.nDash << " " << dash.nGap << "] " + << dash.nPhase << " d\n" << sColor + << CPWL_Utils::GetAP_Circle( + CPWL_Utils::DeflateRect(rect, fWidth / 2.0f)) + << " S\nQ\n"; + } + } break; + case PBS_BEVELED: { + FX_FLOAT fHalfWidth = fWidth / 2.0f; + + sColor = CPWL_Utils::GetColorAppStream(color, FALSE); + if (sColor.GetLength() > 0) { + sAppStream << "q\n" << fHalfWidth << " w\n" << sColor + << CPWL_Utils::GetAP_Circle(rect) << " S\nQ\n"; + } + + sColor = CPWL_Utils::GetColorAppStream(crLeftTop, FALSE); + if (sColor.GetLength() > 0) { + sAppStream << "q\n" << fHalfWidth << " w\n" << sColor + << CPWL_Utils::GetAP_HalfCircle( + CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f), + PWL_PI / 4.0f) + << " S\nQ\n"; + } + + sColor = CPWL_Utils::GetColorAppStream(crRightBottom, FALSE); + if (sColor.GetLength() > 0) { + sAppStream << "q\n" << fHalfWidth << " w\n" << sColor + << CPWL_Utils::GetAP_HalfCircle( + CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f), + PWL_PI * 5 / 4.0f) + << " S\nQ\n"; + } + } break; + case PBS_INSET: { + FX_FLOAT fHalfWidth = fWidth / 2.0f; + + sColor = CPWL_Utils::GetColorAppStream(color, FALSE); + if (sColor.GetLength() > 0) { + sAppStream << "q\n" << fHalfWidth << " w\n" << sColor + << CPWL_Utils::GetAP_Circle(rect) << " S\nQ\n"; + } + + sColor = CPWL_Utils::GetColorAppStream(crLeftTop, FALSE); + if (sColor.GetLength() > 0) { + sAppStream << "q\n" << fHalfWidth << " w\n" << sColor + << CPWL_Utils::GetAP_HalfCircle( + CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f), + PWL_PI / 4.0f) + << " S\nQ\n"; + } + + sColor = CPWL_Utils::GetColorAppStream(crRightBottom, FALSE); + if (sColor.GetLength() > 0) { + sAppStream << "q\n" << fHalfWidth << " w\n" << sColor + << CPWL_Utils::GetAP_HalfCircle( + CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f), + PWL_PI * 5 / 4.0f) + << " S\nQ\n"; + } + } break; + } + + sAppStream << "Q\n"; + } + + return sAppStream.GetByteString(); +} + +CPWL_Color CPWL_Utils::SubstractColor(const CPWL_Color& sColor, + FX_FLOAT fColorSub) { + CPWL_Color sRet; + sRet.nColorType = sColor.nColorType; + + switch (sColor.nColorType) { + case COLORTYPE_TRANSPARENT: + sRet.nColorType = COLORTYPE_RGB; + sRet.fColor1 = PWL_MAX(1 - fColorSub, 0.0f); + sRet.fColor2 = PWL_MAX(1 - fColorSub, 0.0f); + sRet.fColor3 = PWL_MAX(1 - fColorSub, 0.0f); + break; + case COLORTYPE_RGB: + case COLORTYPE_GRAY: + case COLORTYPE_CMYK: + sRet.fColor1 = PWL_MAX(sColor.fColor1 - fColorSub, 0.0f); + sRet.fColor2 = PWL_MAX(sColor.fColor2 - fColorSub, 0.0f); + sRet.fColor3 = PWL_MAX(sColor.fColor3 - fColorSub, 0.0f); + sRet.fColor4 = PWL_MAX(sColor.fColor4 - fColorSub, 0.0f); + break; + } + + return sRet; +} + +CPWL_Color CPWL_Utils::DevideColor(const CPWL_Color& sColor, + FX_FLOAT fColorDevide) { + CPWL_Color sRet; + sRet.nColorType = sColor.nColorType; + + switch (sColor.nColorType) { + case COLORTYPE_TRANSPARENT: + sRet.nColorType = COLORTYPE_RGB; + sRet.fColor1 = 1 / fColorDevide; + sRet.fColor2 = 1 / fColorDevide; + sRet.fColor3 = 1 / fColorDevide; + break; + case COLORTYPE_RGB: + case COLORTYPE_GRAY: + case COLORTYPE_CMYK: + sRet = sColor; + sRet.fColor1 /= fColorDevide; + sRet.fColor2 /= fColorDevide; + sRet.fColor3 /= fColorDevide; + sRet.fColor4 /= fColorDevide; + break; + } + + return sRet; +} + +CFX_ByteString CPWL_Utils::GetAppStream_Check(const CPDF_Rect& rcBBox, + const CPWL_Color& crText) { + CFX_ByteTextBuf sAP; + sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) + << CPWL_Utils::GetAP_Check(rcBBox) << "f\nQ\n"; + return sAP.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetAppStream_Circle(const CPDF_Rect& rcBBox, + const CPWL_Color& crText) { + CFX_ByteTextBuf sAP; + sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) + << CPWL_Utils::GetAP_Circle(rcBBox) << "f\nQ\n"; + return sAP.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetAppStream_Cross(const CPDF_Rect& rcBBox, + const CPWL_Color& crText) { + CFX_ByteTextBuf sAP; + sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, FALSE) + << CPWL_Utils::GetAP_Cross(rcBBox) << "S\nQ\n"; + return sAP.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetAppStream_Diamond(const CPDF_Rect& rcBBox, + const CPWL_Color& crText) { + CFX_ByteTextBuf sAP; + sAP << "q\n1 w\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) + << CPWL_Utils::GetAP_Diamond(rcBBox) << "f\nQ\n"; + return sAP.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetAppStream_Square(const CPDF_Rect& rcBBox, + const CPWL_Color& crText) { + CFX_ByteTextBuf sAP; + sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) + << CPWL_Utils::GetAP_Square(rcBBox) << "f\nQ\n"; + return sAP.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetAppStream_Star(const CPDF_Rect& rcBBox, + const CPWL_Color& crText) { + CFX_ByteTextBuf sAP; + sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) + << CPWL_Utils::GetAP_Star(rcBBox) << "f\nQ\n"; + return sAP.GetByteString(); +} + +CFX_ByteString CPWL_Utils::GetCheckBoxAppStream(const CPDF_Rect& rcBBox, + int32_t nStyle, + const CPWL_Color& crText) { + CPDF_Rect rcCenter = GetCenterSquare(rcBBox); + switch (nStyle) { + default: + case PCS_CHECK: + return GetAppStream_Check(rcCenter, crText); + case PCS_CIRCLE: + return GetAppStream_Circle(ScaleRect(rcCenter, 2.0f / 3.0f), crText); + case PCS_CROSS: + return GetAppStream_Cross(rcCenter, crText); + case PCS_DIAMOND: + return GetAppStream_Diamond(ScaleRect(rcCenter, 2.0f / 3.0f), crText); + case PCS_SQUARE: + return GetAppStream_Square(ScaleRect(rcCenter, 2.0f / 3.0f), crText); + case PCS_STAR: + return GetAppStream_Star(ScaleRect(rcCenter, 2.0f / 3.0f), crText); + } +} + +CFX_ByteString CPWL_Utils::GetRadioButtonAppStream(const CPDF_Rect& rcBBox, + int32_t nStyle, + const CPWL_Color& crText) { + CPDF_Rect rcCenter = GetCenterSquare(rcBBox); + switch (nStyle) { + default: + case PCS_CHECK: + return GetAppStream_Check(rcCenter, crText); + case PCS_CIRCLE: + return GetAppStream_Circle(ScaleRect(rcCenter, 1.0f / 2.0f), crText); + case PCS_CROSS: + return GetAppStream_Cross(rcCenter, crText); + case PCS_DIAMOND: + return GetAppStream_Diamond(ScaleRect(rcCenter, 2.0f / 3.0f), crText); + case PCS_SQUARE: + return GetAppStream_Square(ScaleRect(rcCenter, 2.0f / 3.0f), crText); + case PCS_STAR: + return GetAppStream_Star(ScaleRect(rcCenter, 2.0f / 3.0f), crText); + } +} + +CFX_ByteString CPWL_Utils::GetDropButtonAppStream(const CPDF_Rect& rcBBox) { + CFX_ByteTextBuf sAppStream; + + if (!rcBBox.IsEmpty()) { + sAppStream << "q\n" << CPWL_Utils::GetColorAppStream( + CPWL_Color(COLORTYPE_RGB, 220.0f / 255.0f, + 220.0f / 255.0f, 220.0f / 255.0f), + TRUE); + sAppStream << rcBBox.left << " " << rcBBox.bottom << " " + << rcBBox.right - rcBBox.left << " " + << rcBBox.top - rcBBox.bottom << " re f\n"; + sAppStream << "Q\n"; + + sAppStream << "q\n" << CPWL_Utils::GetBorderAppStream( + rcBBox, 2, CPWL_Color(COLORTYPE_GRAY, 0), + CPWL_Color(COLORTYPE_GRAY, 1), + CPWL_Color(COLORTYPE_GRAY, 0.5), PBS_BEVELED, + CPWL_Dash(3, 0, 0)) + << "Q\n"; + + CPDF_Point ptCenter = CPDF_Point((rcBBox.left + rcBBox.right) / 2, + (rcBBox.top + rcBBox.bottom) / 2); + if (IsFloatBigger(rcBBox.right - rcBBox.left, 6) && + IsFloatBigger(rcBBox.top - rcBBox.bottom, 6)) { + sAppStream << "q\n" + << " 0 g\n"; + sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " m\n"; + sAppStream << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " l\n"; + sAppStream << ptCenter.x << " " << ptCenter.y - 1.5f << " l\n"; + sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " l f\n"; + sAppStream << "Q\n"; + } + } + + return sAppStream.GetByteString(); +} + +void CPWL_Utils::ConvertCMYK2GRAY(FX_FLOAT dC, + FX_FLOAT dM, + FX_FLOAT dY, + FX_FLOAT dK, + FX_FLOAT& dGray) { + if (dC < 0 || dC > 1 || dM < 0 || dM > 1 || dY < 0 || dY > 1 || dK < 0 || + dK > 1) + return; + dGray = 1.0f - FX_MIN(1.0f, 0.3f * dC + 0.59f * dM + 0.11f * dY + dK); +} + +void CPWL_Utils::ConvertGRAY2CMYK(FX_FLOAT dGray, + FX_FLOAT& dC, + FX_FLOAT& dM, + FX_FLOAT& dY, + FX_FLOAT& dK) { + if (dGray < 0 || dGray > 1) + return; + dC = 0.0f; + dM = 0.0f; + dY = 0.0f; + dK = 1.0f - dGray; +} + +void CPWL_Utils::ConvertGRAY2RGB(FX_FLOAT dGray, + FX_FLOAT& dR, + FX_FLOAT& dG, + FX_FLOAT& dB) { + if (dGray < 0 || dGray > 1) + return; + dR = dGray; + dG = dGray; + dB = dGray; +} + +void CPWL_Utils::ConvertRGB2GRAY(FX_FLOAT dR, + FX_FLOAT dG, + FX_FLOAT dB, + FX_FLOAT& dGray) { + if (dR < 0 || dR > 1 || dG < 0 || dG > 0 || dB < 0 || dB > 1) + return; + dGray = 0.3f * dR + 0.59f * dG + 0.11f * dB; +} + +void CPWL_Utils::ConvertCMYK2RGB(FX_FLOAT dC, + FX_FLOAT dM, + FX_FLOAT dY, + FX_FLOAT dK, + FX_FLOAT& dR, + FX_FLOAT& dG, + FX_FLOAT& dB) { + if (dC < 0 || dC > 1 || dM < 0 || dM > 1 || dY < 0 || dY > 1 || dK < 0 || + dK > 1) + return; + dR = 1.0f - FX_MIN(1.0f, dC + dK); + dG = 1.0f - FX_MIN(1.0f, dM + dK); + dB = 1.0f - FX_MIN(1.0f, dY + dK); +} + +void CPWL_Utils::ConvertRGB2CMYK(FX_FLOAT dR, + FX_FLOAT dG, + FX_FLOAT dB, + FX_FLOAT& dC, + FX_FLOAT& dM, + FX_FLOAT& dY, + FX_FLOAT& dK) { + if (dR < 0 || dR > 1 || dG < 0 || dG > 1 || dB < 0 || dB > 1) + return; + + dC = 1.0f - dR; + dM = 1.0f - dG; + dY = 1.0f - dB; + dK = FX_MIN(dC, FX_MIN(dM, dY)); +} + +void CPWL_Utils::PWLColorToARGB(const CPWL_Color& color, + int32_t& alpha, + FX_FLOAT& red, + FX_FLOAT& green, + FX_FLOAT& blue) { + switch (color.nColorType) { + case COLORTYPE_TRANSPARENT: { + alpha = 0; + } break; + case COLORTYPE_GRAY: { + ConvertGRAY2RGB(color.fColor1, red, green, blue); + } break; + case COLORTYPE_RGB: { + red = color.fColor1; + green = color.fColor2; + blue = color.fColor3; + } break; + case COLORTYPE_CMYK: { + ConvertCMYK2RGB(color.fColor1, color.fColor2, color.fColor3, + color.fColor4, red, green, blue); + } break; + } +} + +FX_COLORREF CPWL_Utils::PWLColorToFXColor(const CPWL_Color& color, + int32_t nTransparancy) { + int32_t nAlpha = nTransparancy; + FX_FLOAT dRed = 0; + FX_FLOAT dGreen = 0; + FX_FLOAT dBlue = 0; + + PWLColorToARGB(color, nAlpha, dRed, dGreen, dBlue); + + return ArgbEncode(nAlpha, (int32_t)(dRed * 255), (int32_t)(dGreen * 255), + (int32_t)(dBlue * 255)); +} + +void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rect, + const FX_COLORREF& color) { + CFX_PathData path; + CPDF_Rect rcTemp(rect); + path.AppendRect(rcTemp.left, rcTemp.bottom, rcTemp.right, rcTemp.top); + pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_WINDING); +} + +void CPWL_Utils::DrawFillArea(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Point* pPts, + int32_t nCount, + const FX_COLORREF& color) { + CFX_PathData path; + path.SetPointCount(nCount); + + path.SetPoint(0, pPts[0].x, pPts[0].y, FXPT_MOVETO); + for (int32_t i = 1; i < nCount; i++) + path.SetPoint(i, pPts[i].x, pPts[i].y, FXPT_LINETO); + + pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_ALTERNATE); +} + +void CPWL_Utils::DrawStrokeRect(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rect, + const FX_COLORREF& color, + FX_FLOAT fWidth) { + CFX_PathData path; + CPDF_Rect rcTemp(rect); + path.AppendRect(rcTemp.left, rcTemp.bottom, rcTemp.right, rcTemp.top); + + CFX_GraphStateData gsd; + gsd.m_LineWidth = fWidth; + + pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE); +} + +void CPWL_Utils::DrawStrokeLine(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Point& ptMoveTo, + const CPDF_Point& ptLineTo, + const FX_COLORREF& color, + FX_FLOAT fWidth) { + CFX_PathData path; + path.SetPointCount(2); + path.SetPoint(0, ptMoveTo.x, ptMoveTo.y, FXPT_MOVETO); + path.SetPoint(1, ptLineTo.x, ptLineTo.y, FXPT_LINETO); + + CFX_GraphStateData gsd; + gsd.m_LineWidth = fWidth; + + pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE); +} + +void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rect, + const CPWL_Color& color, + int32_t nTransparancy) { + CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rect, + PWLColorToFXColor(color, nTransparancy)); +} + +void CPWL_Utils::DrawShadow(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + FX_BOOL bVertical, + FX_BOOL bHorizontal, + CPDF_Rect rect, + int32_t nTransparancy, + int32_t nStartGray, + int32_t nEndGray) { + FX_FLOAT fStepGray = 1.0f; + + if (bVertical) { + fStepGray = (nEndGray - nStartGray) / rect.Height(); + + for (FX_FLOAT fy = rect.bottom + 0.5f; fy <= rect.top - 0.5f; fy += 1.0f) { + int32_t nGray = nStartGray + (int32_t)(fStepGray * (fy - rect.bottom)); + CPWL_Utils::DrawStrokeLine( + pDevice, pUser2Device, CPDF_Point(rect.left, fy), + CPDF_Point(rect.right, fy), + ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f); + } + } + + if (bHorizontal) { + fStepGray = (nEndGray - nStartGray) / rect.Width(); + + for (FX_FLOAT fx = rect.left + 0.5f; fx <= rect.right - 0.5f; fx += 1.0f) { + int32_t nGray = nStartGray + (int32_t)(fStepGray * (fx - rect.left)); + CPWL_Utils::DrawStrokeLine( + pDevice, pUser2Device, CPDF_Point(fx, rect.bottom), + CPDF_Point(fx, rect.top), + ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f); + } + } +} + +void CPWL_Utils::DrawBorder(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + const CPDF_Rect& rect, + FX_FLOAT fWidth, + const CPWL_Color& color, + const CPWL_Color& crLeftTop, + const CPWL_Color& crRightBottom, + int32_t nStyle, + const CPWL_Dash& dash, + int32_t nTransparancy) { + FX_FLOAT fLeft = rect.left; + FX_FLOAT fRight = rect.right; + FX_FLOAT fTop = rect.top; + FX_FLOAT fBottom = rect.bottom; + + if (fWidth > 0.0f) { + FX_FLOAT fHalfWidth = fWidth / 2.0f; + + switch (nStyle) { + default: + case PBS_SOLID: { + CFX_PathData path; + path.AppendRect(fLeft, fBottom, fRight, fTop); + path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth, + fTop - fWidth); + pDevice->DrawPath(&path, pUser2Device, NULL, + PWLColorToFXColor(color, nTransparancy), 0, + FXFILL_ALTERNATE); + } break; + case PBS_DASH: { + CFX_PathData path; + + path.SetPointCount(5); + path.SetPoint(0, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f, + FXPT_MOVETO); + path.SetPoint(1, fLeft + fWidth / 2.0f, fTop - fWidth / 2.0f, + FXPT_LINETO); + path.SetPoint(2, fRight - fWidth / 2.0f, fTop - fWidth / 2.0f, + FXPT_LINETO); + path.SetPoint(3, fRight - fWidth / 2.0f, fBottom + fWidth / 2.0f, + FXPT_LINETO); + path.SetPoint(4, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f, + FXPT_LINETO); + + CFX_GraphStateData gsd; + gsd.SetDashCount(2); + gsd.m_DashArray[0] = 3.0f; + gsd.m_DashArray[1] = 3.0f; + gsd.m_DashPhase = 0; + + gsd.m_LineWidth = fWidth; + pDevice->DrawPath(&path, pUser2Device, &gsd, 0, + PWLColorToFXColor(color, nTransparancy), + FXFILL_WINDING); + } break; + case PBS_BEVELED: + case PBS_INSET: { + CFX_GraphStateData gsd; + gsd.m_LineWidth = fHalfWidth; + + CFX_PathData pathLT; + + pathLT.SetPointCount(7); + pathLT.SetPoint(0, fLeft + fHalfWidth, fBottom + fHalfWidth, + FXPT_MOVETO); + pathLT.SetPoint(1, fLeft + fHalfWidth, fTop - fHalfWidth, FXPT_LINETO); + pathLT.SetPoint(2, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO); + pathLT.SetPoint(3, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2, + FXPT_LINETO); + pathLT.SetPoint(4, fLeft + fHalfWidth * 2, fTop - fHalfWidth * 2, + FXPT_LINETO); + pathLT.SetPoint(5, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2, + FXPT_LINETO); + pathLT.SetPoint(6, fLeft + fHalfWidth, fBottom + fHalfWidth, + FXPT_LINETO); + + pDevice->DrawPath(&pathLT, pUser2Device, &gsd, + PWLColorToFXColor(crLeftTop, nTransparancy), 0, + FXFILL_ALTERNATE); + + CFX_PathData pathRB; + + pathRB.SetPointCount(7); + pathRB.SetPoint(0, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_MOVETO); + pathRB.SetPoint(1, fRight - fHalfWidth, fBottom + fHalfWidth, + FXPT_LINETO); + pathRB.SetPoint(2, fLeft + fHalfWidth, fBottom + fHalfWidth, + FXPT_LINETO); + pathRB.SetPoint(3, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2, + FXPT_LINETO); + pathRB.SetPoint(4, fRight - fHalfWidth * 2, fBottom + fHalfWidth * 2, + FXPT_LINETO); + pathRB.SetPoint(5, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2, + FXPT_LINETO); + pathRB.SetPoint(6, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO); + + pDevice->DrawPath(&pathRB, pUser2Device, &gsd, + PWLColorToFXColor(crRightBottom, nTransparancy), 0, + FXFILL_ALTERNATE); + + CFX_PathData path; + + path.AppendRect(fLeft, fBottom, fRight, fTop); + path.AppendRect(fLeft + fHalfWidth, fBottom + fHalfWidth, + fRight - fHalfWidth, fTop - fHalfWidth); + + pDevice->DrawPath(&path, pUser2Device, &gsd, + PWLColorToFXColor(color, nTransparancy), 0, + FXFILL_ALTERNATE); + } break; + case PBS_UNDERLINED: { + CFX_PathData path; + + path.SetPointCount(2); + path.SetPoint(0, fLeft, fBottom + fWidth / 2, FXPT_MOVETO); + path.SetPoint(1, fRight, fBottom + fWidth / 2, FXPT_LINETO); + + CFX_GraphStateData gsd; + gsd.m_LineWidth = fWidth; + + pDevice->DrawPath(&path, pUser2Device, &gsd, 0, + PWLColorToFXColor(color, nTransparancy), + FXFILL_ALTERNATE); + } break; + case PBS_SHADOW: { + CFX_PathData path; + path.AppendRect(fLeft, fBottom, fRight, fTop); + path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth, + fTop - fWidth); + pDevice->DrawPath(&path, pUser2Device, NULL, + PWLColorToFXColor(color, nTransparancy / 2), 0, + FXFILL_ALTERNATE); + } break; + } + } +} + +static void AddSquigglyPath(CFX_PathData& PathData, + FX_FLOAT fStartX, + FX_FLOAT fEndX, + FX_FLOAT fY, + FX_FLOAT fStep) { + PathData.AddPointCount(1); + PathData.SetPoint(PathData.GetPointCount() - 1, fStartX, fY, FXPT_MOVETO); + + FX_FLOAT fx; + int32_t i; + + for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) { + PathData.AddPointCount(1); + PathData.SetPoint(PathData.GetPointCount() - 1, fx, fY + (i & 1) * fStep, + FXPT_LINETO); + } +} + +static void AddSpellCheckObj(CFX_PathData& PathData, + IFX_Edit* pEdit, + const CPVT_WordRange& wrWord) { + FX_FLOAT fStartX = 0.0f; + FX_FLOAT fEndX = 0.0f; + FX_FLOAT fY = 0.0f; + FX_FLOAT fStep = 0.0f; + + FX_BOOL bBreak = FALSE; + + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + pIterator->SetAt(wrWord.BeginPos); + + do { + CPVT_WordPlace place = pIterator->GetAt(); + + CPVT_Line line; + if (pIterator->GetLine(line)) { + fY = line.ptLine.y; + fStep = (line.fLineAscent - line.fLineDescent) / 16.0f; + } + + if (place.LineCmp(wrWord.BeginPos) == 0) { + pIterator->SetAt(wrWord.BeginPos); + CPVT_Word word; + if (pIterator->GetWord(word)) { + fStartX = word.ptWord.x; + } + } else { + fStartX = line.ptLine.x; + } + + if (place.LineCmp(wrWord.EndPos) == 0) { + pIterator->SetAt(wrWord.EndPos); + CPVT_Word word; + if (pIterator->GetWord(word)) { + fEndX = word.ptWord.x + word.fWidth; + } + + bBreak = TRUE; + } else { + fEndX = line.ptLine.x + line.fLineWidth; + } + + AddSquigglyPath(PathData, fStartX, fEndX, fY, fStep); + + if (bBreak) + break; + } while (pIterator->NextLine()); + } +} + +void CPWL_Utils::DrawEditSpellCheck(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + IFX_Edit* pEdit, + const CPDF_Rect& rcClip, + const CPDF_Point& ptOffset, + const CPVT_WordRange* pRange, + IPWL_SpellCheck* pSpellCheck) { + const FX_COLORREF crSpell = ArgbEncode(255, 255, 0, 0); + + // for spellcheck + FX_BOOL bLatinWord = FALSE; + CPVT_WordPlace wpWordStart; + CFX_ByteString sLatinWord; + + CFX_PathData pathSpell; + + pDevice->SaveState(); + + if (!rcClip.IsEmpty()) { + CPDF_Rect rcTemp = rcClip; + pUser2Device->TransformRect(rcTemp); + FX_RECT rcDevClip; + rcDevClip.left = (int32_t)rcTemp.left; + rcDevClip.right = (int32_t)rcTemp.right; + rcDevClip.top = (int32_t)rcTemp.top; + rcDevClip.bottom = (int32_t)rcTemp.bottom; + pDevice->SetClip_Rect(&rcDevClip); + } + + if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { + if (pEdit->GetFontMap()) { + if (pRange) + pIterator->SetAt(pRange->BeginPos); + else + pIterator->SetAt(0); + + CPVT_WordPlace oldplace; + + while (pIterator->NextWord()) { + CPVT_WordPlace place = pIterator->GetAt(); + if (pRange && place.WordCmp(pRange->EndPos) > 0) + break; + + CPVT_Word word; + if (pIterator->GetWord(word)) { + if (FX_EDIT_ISLATINWORD(word.Word)) { + if (!bLatinWord) { + wpWordStart = place; + bLatinWord = TRUE; + } + + sLatinWord += (char)word.Word; + } else { + if (bLatinWord) { + if (!sLatinWord.IsEmpty()) { + if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) { + AddSpellCheckObj(pathSpell, pEdit, + CPVT_WordRange(wpWordStart, oldplace)); + pIterator->SetAt(place); + } + } + bLatinWord = FALSE; + } + + sLatinWord.Empty(); + } + + oldplace = place; + } else { + if (bLatinWord) { + if (!sLatinWord.IsEmpty()) { + if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) { + AddSpellCheckObj(pathSpell, pEdit, + CPVT_WordRange(wpWordStart, oldplace)); + pIterator->SetAt(place); + } + } + bLatinWord = FALSE; + } + + sLatinWord.Empty(); + } + } + + if (!sLatinWord.IsEmpty()) { + if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) { + AddSpellCheckObj(pathSpell, pEdit, + CPVT_WordRange(wpWordStart, oldplace)); + } + } + } + } + + CFX_GraphStateData gsd; + gsd.m_LineWidth = 0; + if (pathSpell.GetPointCount() > 0) + pDevice->DrawPath(&pathSpell, pUser2Device, &gsd, 0, crSpell, + FXFILL_ALTERNATE); + + pDevice->RestoreState(); +} + +FX_BOOL CPWL_Utils::IsBlackOrWhite(const CPWL_Color& color) { + switch (color.nColorType) { + case COLORTYPE_TRANSPARENT: + return FALSE; + case COLORTYPE_GRAY: + return color.fColor1 < 0.5f; + case COLORTYPE_RGB: + return color.fColor1 + color.fColor2 + color.fColor3 < 1.5f; + case COLORTYPE_CMYK: + return color.fColor1 + color.fColor2 + color.fColor3 + color.fColor4 > + 2.0f; + } + + return TRUE; +} + +CPWL_Color CPWL_Utils::GetReverseColor(const CPWL_Color& color) { + CPWL_Color crRet = color; + + switch (color.nColorType) { + case COLORTYPE_GRAY: + crRet.fColor1 = 1.0f - crRet.fColor1; + break; + case COLORTYPE_RGB: + crRet.fColor1 = 1.0f - crRet.fColor1; + crRet.fColor2 = 1.0f - crRet.fColor2; + crRet.fColor3 = 1.0f - crRet.fColor3; + break; + case COLORTYPE_CMYK: + crRet.fColor1 = 1.0f - crRet.fColor1; + crRet.fColor2 = 1.0f - crRet.fColor2; + crRet.fColor3 = 1.0f - crRet.fColor3; + crRet.fColor4 = 1.0f - crRet.fColor4; + break; + } + + return crRet; +} + +CFX_ByteString CPWL_Utils::GetIconAppStream(int32_t nType, + const CPDF_Rect& rect, + const CPWL_Color& crFill, + const CPWL_Color& crStroke) { + CFX_ByteString sAppStream = CPWL_Utils::GetColorAppStream(crStroke, FALSE); + sAppStream += CPWL_Utils::GetColorAppStream(crFill, TRUE); + + CFX_ByteString sPath; + CFX_PathData path; + + switch (nType) { + case PWL_ICONTYPE_CHECKMARK: + GetGraphics_Checkmark(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_CIRCLE: + GetGraphics_Circle(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_COMMENT: + GetGraphics_Comment(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_CROSS: + GetGraphics_Cross(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_HELP: + GetGraphics_Help(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_INSERTTEXT: + GetGraphics_InsertText(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_KEY: + GetGraphics_Key(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_NEWPARAGRAPH: + GetGraphics_NewParagraph(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_TEXTNOTE: + GetGraphics_TextNote(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_PARAGRAPH: + GetGraphics_Paragraph(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_RIGHTARROW: + GetGraphics_RightArrow(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_RIGHTPOINTER: + GetGraphics_RightPointer(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_STAR: + GetGraphics_Star(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_UPARROW: + GetGraphics_UpArrow(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_UPLEFTARROW: + GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_GRAPH: + GetGraphics_Graph(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_PAPERCLIP: + GetGraphics_Paperclip(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_ATTACHMENT: + GetGraphics_Attachment(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_TAG: + GetGraphics_Tag(sPath, path, rect, PWLPT_STREAM); + break; + case PWL_ICONTYPE_FOXIT: + GetGraphics_Foxit(sPath, path, rect, PWLPT_STREAM); + break; + } + + sAppStream += sPath; + if (crStroke.nColorType != COLORTYPE_TRANSPARENT) + sAppStream += "B*\n"; + else + sAppStream += "f*\n"; + + return sAppStream; +} + +void CPWL_Utils::DrawIconAppStream(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device, + int32_t nType, + const CPDF_Rect& rect, + const CPWL_Color& crFill, + const CPWL_Color& crStroke, + const int32_t nTransparancy) { + CFX_GraphStateData gsd; + gsd.m_LineWidth = 1.0f; + + CFX_ByteString sPath; + CFX_PathData path; + + switch (nType) { + case PWL_ICONTYPE_CHECKMARK: + GetGraphics_Checkmark(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_CIRCLE: + GetGraphics_Circle(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_COMMENT: + GetGraphics_Comment(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_CROSS: + GetGraphics_Cross(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_HELP: + GetGraphics_Help(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_INSERTTEXT: + GetGraphics_InsertText(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_KEY: + GetGraphics_Key(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_NEWPARAGRAPH: + GetGraphics_NewParagraph(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_TEXTNOTE: + GetGraphics_TextNote(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_PARAGRAPH: + GetGraphics_Paragraph(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_RIGHTARROW: + GetGraphics_RightArrow(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_RIGHTPOINTER: + GetGraphics_RightPointer(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_STAR: + GetGraphics_Star(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_UPARROW: + GetGraphics_UpArrow(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_UPLEFTARROW: + GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_GRAPH: + GetGraphics_Graph(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_PAPERCLIP: + GetGraphics_Paperclip(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_ATTACHMENT: + GetGraphics_Attachment(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_TAG: + GetGraphics_Tag(sPath, path, rect, PWLPT_PATHDATA); + break; + case PWL_ICONTYPE_FOXIT: + GetGraphics_Foxit(sPath, path, rect, PWLPT_PATHDATA); + break; + default: + return; + } + + pDevice->DrawPath( + &path, pUser2Device, &gsd, PWLColorToFXColor(crFill, nTransparancy), + PWLColorToFXColor(crStroke, nTransparancy), FXFILL_ALTERNATE); +} + +void CPWL_Utils::GetGraphics_Checkmark(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, + crBBox.bottom + fHeight * 2 / 5.0f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point( + crBBox.left + fWidth / 15.0f + + PWL_BEZIER * (fWidth / 7.0f - fWidth / 15.0f), + crBBox.bottom + fHeight * 2 / 5.0f + + PWL_BEZIER * (fHeight * 2 / 7.0f - fHeight * 2 / 5.0f)), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 4.5f + + PWL_BEZIER * (fWidth / 5.0f - fWidth / 4.5f), + crBBox.bottom + fHeight / 16.0f + + PWL_BEZIER * (fHeight / 5.0f - fHeight / 16.0f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f, + crBBox.bottom + fHeight / 16.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f + + PWL_BEZIER * (fWidth / 4.4f - fWidth / 4.5f), + crBBox.bottom + fHeight / 16.0f - + PWL_BEZIER * fHeight / 16.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f + + PWL_BEZIER * (fWidth / 4.0f - fWidth / 3.0f), + crBBox.bottom), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f, crBBox.bottom), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f + + PWL_BEZIER * fWidth * (1 / 7.0f + 2 / 15.0f), + crBBox.bottom + PWL_BEZIER * fHeight * 4 / 5.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f + + PWL_BEZIER * fWidth * (1 / 7.0f - 7 / 15.0f), + crBBox.bottom + fHeight * 15 / 16.0f + + PWL_BEZIER * (fHeight * 4 / 5.0f - + fHeight * 15 / 16.0f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f, + crBBox.bottom + fHeight * 15 / 16.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point( + crBBox.left + fWidth * 14 / 15.0f + + PWL_BEZIER * (fWidth * 7 / 15.0f - fWidth * 14 / 15.0f), + crBBox.bottom + fHeight * 15 / 16.0f + + PWL_BEZIER * (fHeight * 8 / 7.0f - fHeight * 15 / 16.0f)), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 3.6f + + PWL_BEZIER * (fWidth / 3.4f - fWidth / 3.6f), + crBBox.bottom + fHeight / 3.5f + + PWL_BEZIER * (fHeight / 3.5f - fHeight / 3.5f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f, + crBBox.bottom + fHeight / 3.5f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 3.6f, + crBBox.bottom + fHeight / 3.5f + + PWL_BEZIER * (fHeight / 4.0f - fHeight / 3.5f)), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point( + crBBox.left + fWidth / 15.0f + + PWL_BEZIER * (fWidth / 3.5f - fWidth / 15.0f), + crBBox.bottom + fHeight * 2 / 5.0f + + PWL_BEZIER * (fHeight * 3.5f / 5.0f - fHeight * 2 / 5.0f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, + crBBox.bottom + fHeight * 2 / 5.0f), + PWLPT_BEZIERTO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 16); + else + GetPathDataFromArray(path, PathArray, 16); +} + +void CPWL_Utils::GetGraphics_Circle(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, + crBBox.bottom + fHeight / 2.0f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 15.0f, + crBBox.bottom + fHeight / 2.0f + + PWL_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f - + PWL_BEZIER * (fWidth / 2.0f - fWidth / 15.0f), + crBBox.top - fHeight / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f + + PWL_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f), + crBBox.top - fHeight / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 15.0f, + crBBox.bottom + fHeight / 2.0f + + PWL_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, + crBBox.bottom + fHeight / 2.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 15.0f, + crBBox.bottom + fHeight / 2.0f - + PWL_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f + + PWL_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f), + crBBox.bottom + fHeight / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f - + PWL_BEZIER * (fWidth / 2.0f - fWidth / 15.0f), + crBBox.bottom + fHeight / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 15.0f, + crBBox.bottom + fHeight / 2.0f - + PWL_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, + crBBox.bottom + fHeight / 2.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 3 / 15.0f, + crBBox.bottom + fHeight / 2.0f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 3 / 15.0f, + crBBox.bottom + fHeight / 2.0f + + PWL_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f - + PWL_BEZIER * (fWidth / 2.0f - fWidth * 3 / 15.0f), + crBBox.top - fHeight * 3 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, + crBBox.top - fHeight * 3 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f + + PWL_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f), + crBBox.top - fHeight * 3 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 3 / 15.0f, + crBBox.bottom + fHeight / 2.0f + + PWL_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 15.0f, + crBBox.bottom + fHeight / 2.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 3 / 15.0f, + crBBox.bottom + fHeight / 2.0f - + PWL_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f + + PWL_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f), + crBBox.bottom + fHeight * 3 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, + crBBox.bottom + fHeight * 3 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f - + PWL_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f), + crBBox.bottom + fHeight * 3 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 3 / 15.0f, + crBBox.bottom + fHeight / 2.0f - + PWL_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 3 / 15.0f, + crBBox.bottom + fHeight / 2.0f), + PWLPT_BEZIERTO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 26); + else + GetPathDataFromArray(path, PathArray, 26); +} + +void CPWL_Utils::GetGraphics_Comment(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 15.0f, + crBBox.top - fHeight / 6.0f + + PWL_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f - + PWL_BEZIER * fWidth / 15.0f, + crBBox.top - fHeight / 10.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f, + crBBox.top - fHeight / 10.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f, + crBBox.top - fHeight / 10.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f + + PWL_BEZIER * fWidth / 15.0f, + crBBox.top - fHeight / 10.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 15.0f, + crBBox.top - fHeight / 6 + + PWL_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, + crBBox.top - fHeight / 6.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, + crBBox.bottom + fHeight / 3.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, + crBBox.bottom + fHeight * 4 / 15.0f + + PWL_BEZIER * fHeight / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f + + PWL_BEZIER * fWidth / 15.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f, + crBBox.bottom + fHeight * 2 / 15 + + PWL_BEZIER * fHeight * 2 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f - + PWL_BEZIER * fWidth * 2 / 15.0f, + crBBox.bottom + fHeight * 2 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 6 / 30.0f, + crBBox.bottom + fHeight * 2 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f + + PWL_BEZIER * fWidth / 30.0f, + crBBox.bottom + fHeight * 2 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f, + crBBox.bottom + fHeight * 2 / 15.0f + + PWL_BEZIER * fHeight * 2 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f - + PWL_BEZIER * fWidth / 15.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, + crBBox.bottom + fHeight / 3.0f - + PWL_BEZIER * fHeight / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, + crBBox.bottom + fHeight / 3.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f, + crBBox.top - fHeight * 8 / 30.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f, + crBBox.top - fHeight * 8 / 30.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15, + crBBox.top - fHeight * 25 / 60.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f, + crBBox.top - fHeight * 25 / 60.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f, + crBBox.top - fHeight * 17 / 30.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 4 / 15.0f, + crBBox.top - fHeight * 17 / 30.0f), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 30); + else + GetPathDataFromArray(path, PathArray, 30); +} + +void CPWL_Utils::GetGraphics_Cross(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + // FX_FLOAT fcatercorner = (FX_FLOAT)sqrt(fWidth*fWidth + fHeight*fHeight); + CPWL_Point center_point(crBBox.left + fWidth / 2, + crBBox.bottom + fHeight / 2); + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(center_point.x, center_point.y + fHeight / 10.0f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(center_point.x + fWidth * 0.3f, + center_point.y + fHeight / 10.0f + fWidth * 0.3f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f + fWidth * 0.3f, + center_point.y + fHeight * 0.3f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f, center_point.y), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f + fWidth * 0.3f, + center_point.y - fHeight * 0.3f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(center_point.x + fWidth * 0.3f, + center_point.y - fHeight / 10.0f - fHeight * 0.3f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(center_point.x, center_point.y - fHeight / 10.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(center_point.x - fWidth * 0.3f, + center_point.y - fHeight / 10 - fHeight * 0.3f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10.0f - fWidth * 0.3f, + center_point.y - fHeight * 0.3f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10, center_point.y), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10 - fWidth * 0.3f, + center_point.y + fHeight * 0.3f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(center_point.x - fWidth * 0.3f, + center_point.y + fHeight / 10.0f + fHeight * 0.3f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(center_point.x, center_point.y + fHeight / 10.0f), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 13); + else + GetPathDataFromArray(path, PathArray, 13); +} + +void CPWL_Utils::GetGraphics_Help(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f, + crBBox.bottom + fHeight / 2.0f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 60.0f, + crBBox.bottom + fHeight / 2.0f + + PWL_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f - + PWL_BEZIER * (fWidth / 2.0f - fWidth / 60.0f), + crBBox.bottom + fHeight / 60.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, + crBBox.bottom + fHeight / 60.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + + PWL_BEZIER * fWidth * 29 / 60.0f, + crBBox.bottom + fHeight / 60.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 60.0f, + crBBox.bottom + fHeight / 2.0f + + PWL_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 60.0f, + crBBox.bottom + fHeight / 2.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 60.0f, + crBBox.bottom + fHeight / 2.0f + + PWL_BEZIER * fHeight * 29 / 60.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + + PWL_BEZIER * fWidth * 29 / 60.0f, + crBBox.top - fHeight / 60.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 60.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f - + PWL_BEZIER * fWidth * 29 / 60.0f, + crBBox.top - fHeight / 60.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f, + crBBox.bottom + fHeight / 2.0f + + PWL_BEZIER * fHeight * 29 / 60.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f, + crBBox.bottom + fHeight / 2.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f, + crBBox.top - fHeight * 0.36f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f, + crBBox.top - fHeight * 0.36f + + PWL_BEZIER * fHeight * 0.23f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.5f - PWL_BEZIER * fWidth * 0.23f, + crBBox.bottom + fHeight * 0.87f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f, + crBBox.bottom + fHeight * 0.87f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.5f + PWL_BEZIER * fWidth * 0.23f, + crBBox.bottom + fHeight * 0.87f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.27f, + crBBox.top - fHeight * 0.36f + + PWL_BEZIER * fHeight * 0.23f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.27f, + crBBox.top - fHeight * 0.36f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.27f - fWidth * 0.08f * 0.2f, + crBBox.top - fHeight * 0.36f - fHeight * 0.15f * 0.7f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.35f + fWidth * 0.08f * 0.2f, + crBBox.top - fHeight * 0.51f + fHeight * 0.15f * 0.2f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.35f, + crBBox.top - fHeight * 0.51f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.35f - fWidth * 0.1f * 0.5f, + crBBox.top - fHeight * 0.51f - fHeight * 0.15f * 0.3f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.5f, + crBBox.top - fHeight * 0.68f + fHeight * 0.15f * 0.5f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f, + crBBox.top - fHeight * 0.68f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f, + crBBox.bottom + fHeight * 0.30f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.45f, + crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.55f, + crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.55f, + crBBox.bottom + fHeight * 0.30f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.55f, + crBBox.top - fHeight * 0.66f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.55f - fWidth * 0.1f * 0.05f, + crBBox.top - fHeight * 0.66f + fHeight * 0.18f * 0.5f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.05f, + crBBox.top - fHeight * 0.48f - fHeight * 0.18f * 0.3f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f, + crBBox.top - fHeight * 0.48f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.45f + fWidth * 0.08f * 0.2f, + crBBox.top - fHeight * 0.48f + fHeight * 0.18f * 0.2f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.37f - fWidth * 0.08f * 0.2f, + crBBox.top - fHeight * 0.36f - fHeight * 0.18f * 0.7f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.37f, + crBBox.top - fHeight * 0.36f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.37f, + crBBox.top - fHeight * 0.36f + + PWL_BEZIER * fHeight * 0.13f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.5f + PWL_BEZIER * fWidth * 0.13f, + crBBox.bottom + fHeight * 0.77f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f, + crBBox.bottom + fHeight * 0.77f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.5f - PWL_BEZIER * fWidth * 0.13f, + crBBox.bottom + fHeight * 0.77f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.37f, + crBBox.top - fHeight * 0.36f + + PWL_BEZIER * fHeight * 0.13f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.37f, + crBBox.top - fHeight * 0.36f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.37f, + crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.27f, + crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f, + crBBox.top - fHeight * 0.36f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f, + crBBox.bottom + fHeight * 0.13f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f, + crBBox.bottom + fHeight * 0.13f + + PWL_BEZIER * fHeight * 0.055f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f - + PWL_BEZIER * fWidth * 0.095f, + crBBox.bottom + fHeight * 0.185f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f, + crBBox.bottom + fHeight * 0.185f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f + + PWL_BEZIER * fWidth * 0.065f, + crBBox.bottom + fHeight * 0.185f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f, + crBBox.bottom + fHeight * 0.13f + + PWL_BEZIER * fHeight * 0.055f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f, + crBBox.bottom + fHeight * 0.13f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f, + crBBox.bottom + fHeight * 0.13f - + PWL_BEZIER * fHeight * 0.055f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f + + PWL_BEZIER * fWidth * 0.065f, + crBBox.bottom + fHeight * 0.075f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f, + crBBox.bottom + fHeight * 0.075f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f - + PWL_BEZIER * fWidth * 0.065f, + crBBox.bottom + fHeight * 0.075f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f, + crBBox.bottom + fHeight * 0.13f - + PWL_BEZIER * fHeight * 0.055f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f, + crBBox.bottom + fHeight * 0.13f), + PWLPT_BEZIERTO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 59); + else + GetPathDataFromArray(path, PathArray, 59); +} + +void CPWL_Utils::GetGraphics_InsertText(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2, crBBox.top - fHeight * 2 / 15), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 10, crBBox.bottom + fHeight / 10), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 4); + else + GetPathDataFromArray(path, PathArray, 4); +} + +void CPWL_Utils::GetGraphics_Key(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + FX_FLOAT k = -fHeight / fWidth; + CPWL_Point tail; + CPWL_Point CicleCenter; + tail.x = crBBox.left + fWidth * 0.9f; + tail.y = k * (tail.x - crBBox.right) + crBBox.bottom; + CicleCenter.x = crBBox.left + fWidth * 0.15f; + CicleCenter.y = k * (CicleCenter.x - crBBox.right) + crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(tail.x + fWidth / 30.0f, -fWidth / 30.0f / k + tail.y), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(tail.x + fWidth / 30.0f - fWidth * 0.18f, + -k * fWidth * 0.18f - fWidth / 30 / k + tail.y), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f + fWidth * 0.07f, + -fWidth * 0.07f / k - k * fWidth * 0.18f - + fWidth / 30 / k + tail.y), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 + + fWidth * 0.07f, + -fWidth * 0.07f / k - k * fWidth / 20 - + k * fWidth * 0.18f - fWidth / 30 / k + tail.y), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point( + tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20, + -k * fWidth / 20 - k * fWidth * 0.18f - fWidth / 30 / k + tail.y), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point( + tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - fWidth / 15, + -k * fWidth / 15 - k * fWidth / 20 - k * fWidth * 0.18f - + fWidth / 30 / k + tail.y), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - + fWidth / 15 + fWidth * 0.07f, + -fWidth * 0.07f / k - k * fWidth / 15 - k * fWidth / 20 - + k * fWidth * 0.18f - fWidth / 30 / k + tail.y), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - + fWidth / 15 - fWidth / 20 + fWidth * 0.07f, + -fWidth * 0.07f / k + -k * fWidth / 20 + -k * fWidth / 15 - + k * fWidth / 20 - k * fWidth * 0.18f - + fWidth / 30 / k + tail.y), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - + fWidth / 15 - fWidth / 20, + -k * fWidth / 20 + -k * fWidth / 15 - k * fWidth / 20 - + k * fWidth * 0.18f - fWidth / 30 / k + tail.y), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.45f, + -k * fWidth * 0.45f - fWidth / 30 / k + tail.y), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.45f + fWidth * 0.2f, + -fWidth * 0.4f / k - k * fWidth * 0.45f - fWidth / 30 / k + + tail.y), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.2f, + -fWidth * 0.1f / k + CicleCenter.y), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth / 60.0f, + -k * fWidth / 60 + CicleCenter.y), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth / 60, + -k * fWidth / 60 + CicleCenter.y), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(CicleCenter.x - fWidth * 0.22f, + fWidth * 0.35f / k + CicleCenter.y - fHeight * 0.05f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(tail.x - fWidth / 30 - fWidth * 0.45f - fWidth * 0.18f, + fWidth * 0.05f / k - k * fWidth * 0.45f + fWidth / 30 / k + + tail.y - fHeight * 0.05f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(tail.x - fWidth / 30.0f - fWidth * 0.45f, + -k * fWidth * 0.45f + fWidth / 30.0f / k + tail.y), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(tail.x - fWidth / 30.0f, fWidth / 30.0f / k + tail.y), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(tail.x + fWidth / 30, -fWidth / 30 / k + tail.y), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.08f, + k * fWidth * 0.08f + CicleCenter.y), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(CicleCenter.x + fWidth * 0.08f + fWidth * 0.1f, + -fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(CicleCenter.x + fWidth * 0.22f + fWidth * 0.1f, + k * fWidth * 0.22f + CicleCenter.y - fWidth * 0.1f / k), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.22f, + k * fWidth * 0.22f + CicleCenter.y), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(CicleCenter.x + fWidth * 0.22f - fWidth * 0.1f, + fWidth * 0.1f / k + k * fWidth * 0.22f + CicleCenter.y), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(CicleCenter.x + fWidth * 0.08f - fWidth * 0.1f, + fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.08f, + k * fWidth * 0.08f + CicleCenter.y), + PWLPT_BEZIERTO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 28); + else + GetPathDataFromArray(path, PathArray, 28); +} + +void CPWL_Utils::GetGraphics_NewParagraph(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 10.0f, crBBox.top - fHeight / 2.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, + crBBox.top - fHeight / 2.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f, + crBBox.top - fHeight * 17 / 30.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f, + crBBox.bottom + fHeight / 10.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.22f, + crBBox.bottom + fHeight / 10.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.22f, + crBBox.top - fHeight * 17 / 30.0f - fWidth * 0.14f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f, + crBBox.bottom + fHeight / 10.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.48f, + crBBox.bottom + fHeight / 10.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.48f, + crBBox.top - fHeight * 17 / 30.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f, + crBBox.top - fHeight * 17 / 30.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f, + crBBox.bottom + fWidth * 0.24f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.22f, + crBBox.top - fHeight * 17 / 30.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f, + crBBox.top - fHeight * 17 / 30.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, + crBBox.bottom + fHeight / 10.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, + crBBox.bottom + fHeight / 10.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.7f, + crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.97f, + crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.97f, + crBBox.top - fHeight * 17 / 30.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, + crBBox.top - fHeight * 17 / 30.0f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, + crBBox.top - fHeight * 17 / 30.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, + crBBox.bottom + fHeight / 10.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, + crBBox.bottom + fHeight / 7 + fHeight * 0.18f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.85f, + crBBox.bottom + fHeight / 7 + fHeight * 0.18f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.85f, + crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.7f, + crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, + crBBox.bottom + fHeight / 7 + fHeight * 0.18f), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 28); + else + GetPathDataFromArray(path, PathArray, 28); +} + +void CPWL_Utils::GetGraphics_TextNote(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 10.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, + crBBox.top - fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 10.0f, + crBBox.top - fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 10.0f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, + crBBox.bottom + fHeight * 4 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f, + crBBox.top - fHeight * 4 / 15.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 5.0f, + crBBox.top - fHeight * 4 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f, + crBBox.top - fHeight * 7 / 15.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 5.0f, + crBBox.top - fHeight * 7 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f, + crBBox.top - fHeight * 10 / 15.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f, + crBBox.top - fHeight * 10 / 15.0f), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 17); + else + GetPathDataFromArray(path, PathArray, 17); +} + +void CPWL_Utils::GetGraphics_Paragraph(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.7f, crBBox.top - fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.634f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.634f, + crBBox.top - fHeight * 2 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.566f, + crBBox.top - fHeight * 2 / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.566f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, + crBBox.top - fHeight / 15.0f - fHeight * 0.4f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.2f, + crBBox.top - fHeight / 15.0f - fHeight * 0.4f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.2f, crBBox.top - fHeight / 15.0f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f), + PWLPT_BEZIERTO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 12); + else + GetPathDataFromArray(path, PathArray, 12); +} + +void CPWL_Utils::GetGraphics_RightArrow(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, + crBBox.top - fHeight / 2.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + fWidth / 8.0f, + crBBox.bottom + fHeight / 5.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, + crBBox.bottom + fHeight / 5.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f - fWidth * 0.15f, + crBBox.top - fHeight / 2.0f - fWidth / 25.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.1f, + crBBox.top - fHeight / 2.0f - fWidth / 25.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.1f, + crBBox.top - fHeight / 2.0f + fWidth / 25.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f - fWidth * 0.15f, + crBBox.top - fHeight / 2.0f + fWidth / 25.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 5.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + fWidth / 8.0f, + crBBox.top - fHeight / 5.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, + crBBox.top - fHeight / 2.0f), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 10); + else + GetPathDataFromArray(path, PathArray, 10); +} + +void CPWL_Utils::GetGraphics_RightPointer(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30.0f, + crBBox.top - fHeight / 2.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 30.0f, + crBBox.bottom + fHeight / 6.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 4 / 15.0f, + crBBox.top - fHeight / 2.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 30.0f, crBBox.top - fHeight / 6.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30.0f, + crBBox.top - fHeight / 2.0f), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 5); + else + GetPathDataFromArray(path, PathArray, 5); +} + +void CPWL_Utils::GetGraphics_Star(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fLongRadius = + (crBBox.top - crBBox.bottom) / (1 + (FX_FLOAT)cos(PWL_PI / 5.0f)); + fLongRadius = fLongRadius * 0.7f; + FX_FLOAT fShortRadius = fLongRadius * 0.55f; + CPDF_Point ptCenter = CPDF_Point((crBBox.left + crBBox.right) / 2.0f, + (crBBox.top + crBBox.bottom) / 2.0f); + + FX_FLOAT px1[5], py1[5]; + FX_FLOAT px2[5], py2[5]; + + FX_FLOAT fAngel = PWL_PI / 10.0f; + + for (int32_t i = 0; i < 5; i++) { + px1[i] = ptCenter.x + fLongRadius * (FX_FLOAT)cos(fAngel); + py1[i] = ptCenter.y + fLongRadius * (FX_FLOAT)sin(fAngel); + + fAngel += PWL_PI * 2 / 5.0f; + } + + fAngel = PWL_PI / 5.0f + PWL_PI / 10.0f; + + for (int32_t j = 0; j < 5; j++) { + px2[j] = ptCenter.x + fShortRadius * (FX_FLOAT)cos(fAngel); + py2[j] = ptCenter.y + fShortRadius * (FX_FLOAT)sin(fAngel); + + fAngel += PWL_PI * 2 / 5.0f; + } + + CPWL_PathData PathArray[11]; + PathArray[0] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_MOVETO); + PathArray[1] = CPWL_PathData(CPWL_Point(px2[0], py2[0]), PWLPT_LINETO); + + for (int32_t k = 0; k < 4; k++) { + PathArray[(k + 1) * 2] = + CPWL_PathData(CPWL_Point(px1[k + 1], py1[k + 1]), PWLPT_LINETO); + PathArray[(k + 1) * 2 + 1] = + CPWL_PathData(CPWL_Point(px2[k + 1], py2[k + 1]), PWLPT_LINETO); + } + + PathArray[10] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_LINETO); + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 11); + else + GetPathDataFromArray(path, PathArray, 11); +} + +void CPWL_Utils::GetGraphics_UpArrow(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, + crBBox.top - fWidth * 3 / 5.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, + crBBox.top - fWidth * 3 / 5.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f, + crBBox.bottom + fHeight / 15.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f, + crBBox.top - fWidth * 3 / 5.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 10, crBBox.top - fWidth * 3 / 5.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 8); + else + GetPathDataFromArray(path, PathArray, 8); +} + +void CPWL_Utils::GetGraphics_UpLeftArrow(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + CPWL_Point leftup(crBBox.left, crBBox.top); + CPWL_Point rightdown(crBBox.right, crBBox.bottom); + FX_FLOAT k = -fHeight / fWidth; + CPWL_Point tail; + tail.x = crBBox.left + fWidth * 4 / 5.0f; + tail.y = k * (tail.x - crBBox.right) + rightdown.y; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point( + crBBox.left + fWidth / 20.0f, + k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(fHeight * 17 / 60.0f / k + tail.x + + fWidth / 10.0f + fWidth / 5.0f, + -fWidth / 5.0f / k + tail.y - + fWidth / 10.0f / k + fHeight * 17 / 60.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(fHeight * 17 / 60.0f / k + tail.x + fWidth / 10.0f, + tail.y - fWidth / 10.0f / k + fHeight * 17 / 60.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(tail.x + fWidth / 10.0f, tail.y - fWidth / 10.0f / k), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(tail.x - fWidth / 10.0f, tail.y + fWidth / 10.0f / k), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(fHeight * 17 / 60.0f / k + tail.x - fWidth / 10.0f, + tail.y + fWidth / 10.0f / k + fHeight * 17 / 60.0f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(fHeight * 17 / 60.0f / k + tail.x - + fWidth / 10.0f - fWidth / 5.0f, + fWidth / 5.0f / k + tail.y + fWidth / 10.0f / k + + fHeight * 17 / 60.0f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point( + crBBox.left + fWidth / 20.0f, + k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 8); + else + GetPathDataFromArray(path, PathArray, 8); +} + +void CPWL_Utils::GetGraphics_Graph(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.25f, + crBBox.top - fHeight * 0.15f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f, + crBBox.bottom + fHeight * 0.08f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.05f, + crBBox.bottom + fHeight * 0.08f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f), + PWLPT_LINETO), + + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f, + crBBox.top - fWidth * 0.45f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.475f, + crBBox.top - fWidth * 0.45f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.475f, + crBBox.bottom + fHeight * 0.08f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f, + crBBox.bottom + fHeight * 0.08f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f, + crBBox.top - fWidth * 0.45f), + PWLPT_LINETO), + + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.7f, crBBox.top - fHeight * 0.05f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, + crBBox.bottom + fHeight * 0.08f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f, + crBBox.bottom + fHeight * 0.08f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f), + PWLPT_LINETO), + + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f, + crBBox.top - fWidth * 0.35f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.925f, + crBBox.top - fWidth * 0.35f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.925f, + crBBox.bottom + fHeight * 0.08f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f, + crBBox.bottom + fHeight * 0.08f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f, + crBBox.top - fWidth * 0.35f), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 20); + else + GetPathDataFromArray(path, PathArray, 20); +} + +void CPWL_Utils::GetGraphics_Paperclip(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60, + crBBox.bottom + fHeight * 0.25f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60, + crBBox.bottom + fHeight * 0.25f - + fWidth * 57 / 60.0f * 0.35f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30, + crBBox.bottom + fHeight * 0.25f - + fWidth * 57 / 60.0f * 0.35f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30, + crBBox.bottom + fHeight * 0.25f), + PWLPT_BEZIERTO), + + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 30, crBBox.top - fHeight * 0.33f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 30, + crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f, + crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f, + crBBox.top - fHeight * 0.33f), + PWLPT_BEZIERTO), + + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f, + crBBox.bottom + fHeight * 0.2f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f, + crBBox.bottom + fHeight * 0.2f - + (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f, + crBBox.bottom + fHeight * 0.2f - + (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f, + crBBox.bottom + fHeight * 0.2f), + PWLPT_BEZIERTO), + + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f, + crBBox.top - fHeight * 0.2f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f, + crBBox.top - fHeight * 0.2f + + (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f, + crBBox.top - fHeight * 0.2f + + (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f, + crBBox.top - fHeight * 0.2f), + PWLPT_BEZIERTO), + + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f, + crBBox.bottom + fHeight * 0.25f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f, + crBBox.bottom + fHeight * 0.25f - + (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.29f, + crBBox.bottom + fHeight * 0.25f - + (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.29f, + crBBox.bottom + fHeight * 0.25f), + PWLPT_BEZIERTO), + + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.29f, + crBBox.top - fHeight * 0.33f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.29f, + crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.17f, + crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f, + crBBox.top - fHeight * 0.33f), + PWLPT_BEZIERTO), + + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f, + crBBox.bottom + fHeight * 0.3f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f, + crBBox.bottom + fHeight * 0.3f - + fWidth * (14 / 15.0f - 0.29f) * 0.35f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f, + crBBox.bottom + fHeight * 0.3f - + fWidth * (14 / 15.0f - 0.29f) * 0.35f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f, + crBBox.bottom + fHeight * 0.3f), + PWLPT_BEZIERTO), + + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f, + crBBox.top - fHeight * 0.25f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f, + crBBox.top - fHeight * 0.25f + + fWidth * 0.35f * (11 / 12.0f - 0.12f)), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60, + crBBox.top - fHeight * 0.25f + + fWidth * 0.35f * (11 / 12.0f - 0.12f)), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f), + PWLPT_BEZIERTO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 33); + else + GetPathDataFromArray(path, PathArray, 33); +} + +void CPWL_Utils::GetGraphics_Attachment(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f, + crBBox.top - fHeight * 0.5f + fWidth * 0.04f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, + crBBox.top - fHeight * 0.5f + fWidth * 0.04f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f), + PWLPT_BEZIERTO), + + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.25f, + crBBox.top - fHeight * 0.1f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f), + PWLPT_LINETO), + + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f - fWidth * 0.25f * 0.4f, + crBBox.top - fHeight * 0.5f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.15f, + crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.15f, + crBBox.top - fHeight * 0.65f), + PWLPT_BEZIERTO), + + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.15f, + crBBox.top - fHeight * 0.65f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.15f, + crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.6f + fWidth * 0.25f * 0.4f, + crBBox.top - fHeight * 0.5f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f), + PWLPT_BEZIERTO), + + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, + crBBox.top - fHeight * 0.5f + fWidth * 0.04f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f, + crBBox.top - fHeight * 0.5f + fWidth * 0.04f), + PWLPT_BEZIERTO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f), + PWLPT_BEZIERTO), + + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.65f), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f, + crBBox.bottom + fHeight * 0.1f), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 24); + else + GetPathDataFromArray(path, PathArray, 24); +} + +void CPWL_Utils::GetGraphics_Tag(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fWidth = crBBox.right - crBBox.left; + FX_FLOAT fHeight = crBBox.top - crBBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.1f, crBBox.top - fHeight * 0.5f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.3f, + crBBox.bottom + fHeight * 0.1f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.1f, + crBBox.bottom + fHeight * 0.1f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.1f, crBBox.top - fHeight * 0.1f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.3f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.3f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.5f), + PWLPT_LINETO), + CPWL_PathData( + CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.7f), + PWLPT_MOVETO), + CPWL_PathData( + CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.7f), + PWLPT_LINETO)}; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 12); + else + GetPathDataFromArray(path, PathArray, 12); +} + +void CPWL_Utils::GetGraphics_Foxit(CFX_ByteString& sPathData, + CFX_PathData& path, + const CPDF_Rect& crBBox, + const PWL_PATH_TYPE type) { + FX_FLOAT fOutWidth = crBBox.right - crBBox.left; + FX_FLOAT fOutHeight = crBBox.top - crBBox.bottom; + + CPDF_Rect crInBox = crBBox; + crInBox.left = crBBox.left + fOutWidth * 0.08f; + crInBox.right = crBBox.right - fOutWidth * 0.08f; + crInBox.top = crBBox.top - fOutHeight * 0.08f; + crInBox.bottom = crBBox.bottom + fOutHeight * 0.08f; + + FX_FLOAT fWidth = crInBox.right - crInBox.left; + FX_FLOAT fHeight = crInBox.top - crInBox.bottom; + + CPWL_PathData PathArray[] = { + CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f, crInBox.top), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f, + crInBox.top - PWL_BEZIER * fHeight * 0.4f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f - + PWL_BEZIER * fWidth * 0.45f, + crInBox.top - fHeight * 0.4f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.4f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_LINETO), + + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f, crInBox.top), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f, + crInBox.top - PWL_BEZIER * fHeight * 0.7f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f - + PWL_BEZIER * fWidth * 0.75f, + crInBox.top - fHeight * 0.7f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.7f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.55f), + PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crInBox.left + PWL_BEZIER * fWidth * 0.60f, + crInBox.top - fHeight * 0.55f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, + crInBox.top - PWL_BEZIER * fHeight * 0.55f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top), + PWLPT_BEZIERTO), + + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, crInBox.top), + PWLPT_MOVETO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, + crInBox.top - PWL_BEZIER * fHeight * 0.85f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f - + PWL_BEZIER * fWidth * 0.90f, + crInBox.top - fHeight * 0.85f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.85f), + PWLPT_BEZIERTO), + CPWL_PathData(CPWL_Point(crInBox.left, crInBox.bottom), PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crInBox.right, crInBox.bottom), PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crInBox.right, crInBox.top), PWLPT_LINETO), + CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, crInBox.top), + PWLPT_LINETO), + }; + + if (type == PWLPT_STREAM) + sPathData = GetAppStreamFromArray(PathArray, 23); + else + GetPathDataFromArray(path, PathArray, 23); +} + +void CPWL_Color::ConvertColorType(int32_t other_nColorType) { + switch (other_nColorType) { + case COLORTYPE_TRANSPARENT: + break; + case COLORTYPE_GRAY: + switch (other_nColorType) { + case COLORTYPE_RGB: + CPWL_Utils::ConvertGRAY2RGB(fColor1, fColor1, fColor2, fColor3); + break; + case COLORTYPE_CMYK: + CPWL_Utils::ConvertGRAY2CMYK(fColor1, fColor1, fColor2, fColor3, + fColor4); + break; + } + break; + case COLORTYPE_RGB: + switch (other_nColorType) { + case COLORTYPE_GRAY: + CPWL_Utils::ConvertRGB2GRAY(fColor1, fColor2, fColor3, fColor1); + break; + case COLORTYPE_CMYK: + CPWL_Utils::ConvertRGB2CMYK(fColor1, fColor2, fColor3, fColor1, + fColor2, fColor3, fColor4); + break; + } + break; + case COLORTYPE_CMYK: + switch (other_nColorType) { + case COLORTYPE_GRAY: + CPWL_Utils::ConvertCMYK2GRAY(fColor1, fColor2, fColor3, fColor4, + fColor1); + break; + case COLORTYPE_RGB: + CPWL_Utils::ConvertCMYK2RGB(fColor1, fColor2, fColor3, fColor4, + fColor1, fColor2, fColor3); + break; + } + break; + } + nColorType = other_nColorType; +} diff --git a/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp b/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp index 1bb2ffd107..ce8bc57ae2 100644 --- a/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp @@ -13,545 +13,449 @@ /* -------------------------- CPWL_Timer -------------------------- */ -static std::map& GetPWLTimeMap() -{ +static std::map& GetPWLTimeMap() { // Leak the object at shutdown. static auto timeMap = new std::map; return *timeMap; } -CPWL_Timer::CPWL_Timer(CPWL_TimerHandler* pAttached, IFX_SystemHandler* pSystemHandler) : - m_nTimerID(0), - m_pAttached(pAttached), - m_pSystemHandler(pSystemHandler) -{ - ASSERT(m_pAttached != NULL); - ASSERT(m_pSystemHandler != NULL); +CPWL_Timer::CPWL_Timer(CPWL_TimerHandler* pAttached, + IFX_SystemHandler* pSystemHandler) + : m_nTimerID(0), m_pAttached(pAttached), m_pSystemHandler(pSystemHandler) { + ASSERT(m_pAttached != NULL); + ASSERT(m_pSystemHandler != NULL); } -CPWL_Timer::~CPWL_Timer() -{ - KillPWLTimer(); +CPWL_Timer::~CPWL_Timer() { + KillPWLTimer(); } -int32_t CPWL_Timer::SetPWLTimer(int32_t nElapse) -{ - if (m_nTimerID != 0) - KillPWLTimer(); - m_nTimerID = m_pSystemHandler->SetTimer(nElapse, TimerProc); +int32_t CPWL_Timer::SetPWLTimer(int32_t nElapse) { + if (m_nTimerID != 0) + KillPWLTimer(); + m_nTimerID = m_pSystemHandler->SetTimer(nElapse, TimerProc); - GetPWLTimeMap()[m_nTimerID] = this; - return m_nTimerID; + GetPWLTimeMap()[m_nTimerID] = this; + return m_nTimerID; } -void CPWL_Timer::KillPWLTimer() -{ - if (m_nTimerID == 0) - return; +void CPWL_Timer::KillPWLTimer() { + if (m_nTimerID == 0) + return; - m_pSystemHandler->KillTimer(m_nTimerID); - GetPWLTimeMap().erase(m_nTimerID); - m_nTimerID = 0; + m_pSystemHandler->KillTimer(m_nTimerID); + GetPWLTimeMap().erase(m_nTimerID); + m_nTimerID = 0; } -void CPWL_Timer::TimerProc(int32_t idEvent) -{ - auto it = GetPWLTimeMap().find(idEvent); - if (it == GetPWLTimeMap().end()) - return; +void CPWL_Timer::TimerProc(int32_t idEvent) { + auto it = GetPWLTimeMap().find(idEvent); + if (it == GetPWLTimeMap().end()) + return; - CPWL_Timer* pTimer = it->second; - if (pTimer->m_pAttached) - pTimer->m_pAttached->TimerProc(); + CPWL_Timer* pTimer = it->second; + if (pTimer->m_pAttached) + pTimer->m_pAttached->TimerProc(); } /* -------------------------- CPWL_TimerHandler -------------------------- */ -CPWL_TimerHandler::CPWL_TimerHandler() : m_pTimer(NULL) -{ -} +CPWL_TimerHandler::CPWL_TimerHandler() : m_pTimer(NULL) {} -CPWL_TimerHandler::~CPWL_TimerHandler() -{ - delete m_pTimer; +CPWL_TimerHandler::~CPWL_TimerHandler() { + delete m_pTimer; } -void CPWL_TimerHandler::BeginTimer(int32_t nElapse) -{ - if (!m_pTimer) - m_pTimer = new CPWL_Timer(this, GetSystemHandler()); +void CPWL_TimerHandler::BeginTimer(int32_t nElapse) { + if (!m_pTimer) + m_pTimer = new CPWL_Timer(this, GetSystemHandler()); - if (m_pTimer) - m_pTimer->SetPWLTimer(nElapse); + if (m_pTimer) + m_pTimer->SetPWLTimer(nElapse); } -void CPWL_TimerHandler::EndTimer() -{ - if (m_pTimer) - m_pTimer->KillPWLTimer(); +void CPWL_TimerHandler::EndTimer() { + if (m_pTimer) + m_pTimer->KillPWLTimer(); } -void CPWL_TimerHandler::TimerProc() -{ -} +void CPWL_TimerHandler::TimerProc() {} /* --------------------------- CPWL_MsgControl ---------------------------- */ -class CPWL_MsgControl -{ - friend class CPWL_Wnd; - -public: - CPWL_MsgControl(CPWL_Wnd * pWnd) - { -// PWL_TRACE("new CPWL_MsgControl\n"); - m_pCreatedWnd = pWnd; - Default(); - } - - ~CPWL_MsgControl() - { -// PWL_TRACE("~CPWL_MsgControl\n"); - Default(); - } - - void Default() - { - m_aMousePath.RemoveAll(); - m_aKeyboardPath.RemoveAll(); - m_pMainMouseWnd = NULL; - m_pMainKeyboardWnd = NULL; - } - - FX_BOOL IsWndCreated(const CPWL_Wnd * pWnd) const - { - return m_pCreatedWnd == pWnd; - } - - FX_BOOL IsMainCaptureMouse(const CPWL_Wnd * pWnd) const - { - return pWnd == m_pMainMouseWnd; - } - - FX_BOOL IsWndCaptureMouse(const CPWL_Wnd * pWnd) const - { - if (pWnd) - for( int32_t i=0,sz=m_aMousePath.GetSize(); iGetParentWindow(); - } + CPWL_Wnd* pParent = pWnd; + while (pParent) { + m_aKeyboardPath.Add(pParent); + pParent = pParent->GetParentWindow(); + } - pWnd->OnSetFocus(); - } + pWnd->OnSetFocus(); } + } - void KillFocus() - { - if (m_aKeyboardPath.GetSize() > 0) - if (CPWL_Wnd* pWnd = m_aKeyboardPath.GetAt(0)) - pWnd->OnKillFocus(); - - m_pMainKeyboardWnd = NULL; - m_aKeyboardPath.RemoveAll(); - } + void KillFocus() { + if (m_aKeyboardPath.GetSize() > 0) + if (CPWL_Wnd* pWnd = m_aKeyboardPath.GetAt(0)) + pWnd->OnKillFocus(); - void SetCapture(CPWL_Wnd * pWnd) - { - m_aMousePath.RemoveAll(); + m_pMainKeyboardWnd = NULL; + m_aKeyboardPath.RemoveAll(); + } - if (pWnd) - { - m_pMainMouseWnd = pWnd; + void SetCapture(CPWL_Wnd* pWnd) { + m_aMousePath.RemoveAll(); - CPWL_Wnd * pParent = pWnd; - while (pParent) - { - m_aMousePath.Add(pParent); - pParent = pParent->GetParentWindow(); - } - } - } + if (pWnd) { + m_pMainMouseWnd = pWnd; - void ReleaseCapture() - { - m_pMainMouseWnd = NULL; - m_aMousePath.RemoveAll(); + CPWL_Wnd* pParent = pWnd; + while (pParent) { + m_aMousePath.Add(pParent); + pParent = pParent->GetParentWindow(); + } } - -private: - CFX_ArrayTemplate m_aMousePath; - CFX_ArrayTemplate m_aKeyboardPath; - CPWL_Wnd* m_pCreatedWnd; - CPWL_Wnd* m_pMainMouseWnd; - CPWL_Wnd* m_pMainKeyboardWnd; + } + + void ReleaseCapture() { + m_pMainMouseWnd = NULL; + m_aMousePath.RemoveAll(); + } + + private: + CFX_ArrayTemplate m_aMousePath; + CFX_ArrayTemplate m_aKeyboardPath; + CPWL_Wnd* m_pCreatedWnd; + CPWL_Wnd* m_pMainMouseWnd; + CPWL_Wnd* m_pMainKeyboardWnd; }; /* --------------------------- CPWL_Wnd ---------------------------- */ -CPWL_Wnd::CPWL_Wnd() : - m_pVScrollBar(NULL), - m_rcWindow(), - m_rcClip(), - m_bCreated(FALSE), - m_bVisible(FALSE), - m_bNotifying(FALSE), - m_bEnabled(TRUE) -{ -} +CPWL_Wnd::CPWL_Wnd() + : m_pVScrollBar(NULL), + m_rcWindow(), + m_rcClip(), + m_bCreated(FALSE), + m_bVisible(FALSE), + m_bNotifying(FALSE), + m_bEnabled(TRUE) {} -CPWL_Wnd::~CPWL_Wnd() -{ - ASSERT(m_bCreated == FALSE); +CPWL_Wnd::~CPWL_Wnd() { + ASSERT(m_bCreated == FALSE); } -CFX_ByteString CPWL_Wnd::GetClassName() const -{ - return "CPWL_Wnd"; +CFX_ByteString CPWL_Wnd::GetClassName() const { + return "CPWL_Wnd"; } -void CPWL_Wnd::Create(const PWL_CREATEPARAM & cp) -{ - if (!IsValid()) - { - m_sPrivateParam = cp; +void CPWL_Wnd::Create(const PWL_CREATEPARAM& cp) { + if (!IsValid()) { + m_sPrivateParam = cp; - OnCreate(m_sPrivateParam); + OnCreate(m_sPrivateParam); - m_sPrivateParam.rcRectWnd.Normalize(); - m_rcWindow = m_sPrivateParam.rcRectWnd; - m_rcClip = CPWL_Utils::InflateRect(m_rcWindow,1.0f); + m_sPrivateParam.rcRectWnd.Normalize(); + m_rcWindow = m_sPrivateParam.rcRectWnd; + m_rcClip = CPWL_Utils::InflateRect(m_rcWindow, 1.0f); - CreateMsgControl(); + CreateMsgControl(); - if (m_sPrivateParam.pParentWnd) - m_sPrivateParam.pParentWnd->OnNotify(this, PNM_ADDCHILD); + if (m_sPrivateParam.pParentWnd) + m_sPrivateParam.pParentWnd->OnNotify(this, PNM_ADDCHILD); - PWL_CREATEPARAM ccp = m_sPrivateParam; + PWL_CREATEPARAM ccp = m_sPrivateParam; - ccp.dwFlags &= 0xFFFF0000L; //remove sub styles - ccp.mtChild = CPDF_Matrix(1,0,0,1,0,0); + ccp.dwFlags &= 0xFFFF0000L; // remove sub styles + ccp.mtChild = CPDF_Matrix(1, 0, 0, 1, 0, 0); - CreateScrollBar(ccp); - CreateChildWnd(ccp); + CreateScrollBar(ccp); + CreateChildWnd(ccp); - m_bVisible = HasFlag(PWS_VISIBLE); + m_bVisible = HasFlag(PWS_VISIBLE); - OnCreated(); + OnCreated(); - RePosChildWnd(); - m_bCreated = TRUE; - } + RePosChildWnd(); + m_bCreated = TRUE; + } } -void CPWL_Wnd::OnCreate(PWL_CREATEPARAM & cp) -{ -} +void CPWL_Wnd::OnCreate(PWL_CREATEPARAM& cp) {} -void CPWL_Wnd::OnCreated() -{ -} - -void CPWL_Wnd::OnDestroy() -{ -} +void CPWL_Wnd::OnCreated() {} -void CPWL_Wnd::Destroy() -{ - KillFocus(); +void CPWL_Wnd::OnDestroy() {} - OnDestroy(); +void CPWL_Wnd::Destroy() { + KillFocus(); - if (m_bCreated) - { - for (int32_t i = m_aChildren.GetSize()-1; i >= 0; i --) - { - if (CPWL_Wnd * pChild = m_aChildren[i]) - { - pChild->Destroy(); - delete pChild; - pChild = NULL; - } - } + OnDestroy(); - if (m_sPrivateParam.pParentWnd) - m_sPrivateParam.pParentWnd->OnNotify(this, PNM_REMOVECHILD); - m_bCreated = FALSE; + if (m_bCreated) { + for (int32_t i = m_aChildren.GetSize() - 1; i >= 0; i--) { + if (CPWL_Wnd* pChild = m_aChildren[i]) { + pChild->Destroy(); + delete pChild; + pChild = NULL; + } } - DestroyMsgControl(); - - FXSYS_memset(&m_sPrivateParam, 0, sizeof(PWL_CREATEPARAM)); - m_aChildren.RemoveAll(); - m_pVScrollBar = NULL; -} + if (m_sPrivateParam.pParentWnd) + m_sPrivateParam.pParentWnd->OnNotify(this, PNM_REMOVECHILD); + m_bCreated = FALSE; + } -void CPWL_Wnd::Move(const CPDF_Rect & rcNew, FX_BOOL bReset,FX_BOOL bRefresh) -{ - if (IsValid()) - { - CPDF_Rect rcOld = GetWindowRect(); + DestroyMsgControl(); - m_rcWindow = rcNew; - m_rcWindow.Normalize(); + FXSYS_memset(&m_sPrivateParam, 0, sizeof(PWL_CREATEPARAM)); + m_aChildren.RemoveAll(); + m_pVScrollBar = NULL; +} - if (rcOld.left != rcNew.left || rcOld.right != rcNew.right || - rcOld.top != rcNew.top || rcOld.bottom != rcNew.bottom) - { - if (bReset) - { - RePosChildWnd(); - } +void CPWL_Wnd::Move(const CPDF_Rect& rcNew, FX_BOOL bReset, FX_BOOL bRefresh) { + if (IsValid()) { + CPDF_Rect rcOld = GetWindowRect(); - } - if (bRefresh) - { - InvalidateRectMove(rcOld,rcNew); - } + m_rcWindow = rcNew; + m_rcWindow.Normalize(); - m_sPrivateParam.rcRectWnd = m_rcWindow; + if (rcOld.left != rcNew.left || rcOld.right != rcNew.right || + rcOld.top != rcNew.top || rcOld.bottom != rcNew.bottom) { + if (bReset) { + RePosChildWnd(); + } + } + if (bRefresh) { + InvalidateRectMove(rcOld, rcNew); } + + m_sPrivateParam.rcRectWnd = m_rcWindow; + } } -void CPWL_Wnd::InvalidateRectMove(const CPDF_Rect & rcOld, const CPDF_Rect & rcNew) -{ - CPDF_Rect rcUnion = rcOld; - rcUnion.Union(rcNew); +void CPWL_Wnd::InvalidateRectMove(const CPDF_Rect& rcOld, + const CPDF_Rect& rcNew) { + CPDF_Rect rcUnion = rcOld; + rcUnion.Union(rcNew); - InvalidateRect(&rcUnion); + InvalidateRect(&rcUnion); } -void CPWL_Wnd::GetAppearanceStream(CFX_ByteString & sAppStream) -{ - if (IsValid()) - { - CFX_ByteTextBuf sTextBuf; - GetAppearanceStream(sTextBuf); - sAppStream += sTextBuf.GetByteString(); - } +void CPWL_Wnd::GetAppearanceStream(CFX_ByteString& sAppStream) { + if (IsValid()) { + CFX_ByteTextBuf sTextBuf; + GetAppearanceStream(sTextBuf); + sAppStream += sTextBuf.GetByteString(); + } } -void CPWL_Wnd::GetAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - if (IsValid() && IsVisible()) - { - GetThisAppearanceStream(sAppStream); - GetChildAppearanceStream(sAppStream); - } +void CPWL_Wnd::GetAppearanceStream(CFX_ByteTextBuf& sAppStream) { + if (IsValid() && IsVisible()) { + GetThisAppearanceStream(sAppStream); + GetChildAppearanceStream(sAppStream); + } } -//if don't set,Get default apperance stream -void CPWL_Wnd::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - CPDF_Rect rectWnd = GetWindowRect(); - if (!rectWnd.IsEmpty()) { - CFX_ByteTextBuf sThis; - - if (HasFlag(PWS_BACKGROUND)) - sThis << CPWL_Utils::GetRectFillAppStream(rectWnd, GetBackgroundColor()); - - if (HasFlag(PWS_BORDER)) { - sThis << CPWL_Utils::GetBorderAppStream( - rectWnd, - (FX_FLOAT)GetBorderWidth(), - GetBorderColor(), - GetBorderLeftTopColor(GetBorderStyle()), - GetBorderRightBottomColor(GetBorderStyle()), - GetBorderStyle(), - GetBorderDash()); - } +// if don't set,Get default apperance stream +void CPWL_Wnd::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { + CPDF_Rect rectWnd = GetWindowRect(); + if (!rectWnd.IsEmpty()) { + CFX_ByteTextBuf sThis; - sAppStream << sThis; - } -} + if (HasFlag(PWS_BACKGROUND)) + sThis << CPWL_Utils::GetRectFillAppStream(rectWnd, GetBackgroundColor()); -void CPWL_Wnd::GetChildAppearanceStream(CFX_ByteTextBuf & sAppStream) -{ - for (int32_t i=0,sz=m_aChildren.GetSize(); iGetAppearanceStream(sAppStream); - } + if (HasFlag(PWS_BORDER)) { + sThis << CPWL_Utils::GetBorderAppStream( + rectWnd, (FX_FLOAT)GetBorderWidth(), GetBorderColor(), + GetBorderLeftTopColor(GetBorderStyle()), + GetBorderRightBottomColor(GetBorderStyle()), GetBorderStyle(), + GetBorderDash()); } -} -void CPWL_Wnd::DrawAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - if (IsValid() && IsVisible()) - { - DrawThisAppearance(pDevice,pUser2Device); - DrawChildAppearance(pDevice,pUser2Device); - } + sAppStream << sThis; + } } -void CPWL_Wnd::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - CPDF_Rect rectWnd = GetWindowRect(); - if (!rectWnd.IsEmpty()) - { - if (HasFlag(PWS_BACKGROUND)) - { - CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rectWnd,(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth())); - CPWL_Utils::DrawFillRect(pDevice,pUser2Device,rcClient, GetBackgroundColor(), GetTransparency()); - } - - if (HasFlag(PWS_BORDER)) - CPWL_Utils::DrawBorder(pDevice, - pUser2Device, - rectWnd, - (FX_FLOAT)GetBorderWidth(), - GetBorderColor(), - GetBorderLeftTopColor(GetBorderStyle()), - GetBorderRightBottomColor(GetBorderStyle()), - GetBorderStyle(), - GetBorderDash(), - GetTransparency()); +void CPWL_Wnd::GetChildAppearanceStream(CFX_ByteTextBuf& sAppStream) { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + pChild->GetAppearanceStream(sAppStream); + } + } +} + +void CPWL_Wnd::DrawAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + if (IsValid() && IsVisible()) { + DrawThisAppearance(pDevice, pUser2Device); + DrawChildAppearance(pDevice, pUser2Device); + } +} + +void CPWL_Wnd::DrawThisAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + CPDF_Rect rectWnd = GetWindowRect(); + if (!rectWnd.IsEmpty()) { + if (HasFlag(PWS_BACKGROUND)) { + CPDF_Rect rcClient = CPWL_Utils::DeflateRect( + rectWnd, (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); + CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient, + GetBackgroundColor(), GetTransparency()); } -} -void CPWL_Wnd::DrawChildAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) -{ - for (int32_t i=0,sz=m_aChildren.GetSize(); iGetChildMatrix(); - if (mt.IsIdentity()) - { - pChild->DrawAppearance(pDevice,pUser2Device); - } - else - { - mt.Concat(*pUser2Device); - pChild->DrawAppearance(pDevice,&mt); - } - } + if (HasFlag(PWS_BORDER)) + CPWL_Utils::DrawBorder( + pDevice, pUser2Device, rectWnd, (FX_FLOAT)GetBorderWidth(), + GetBorderColor(), GetBorderLeftTopColor(GetBorderStyle()), + GetBorderRightBottomColor(GetBorderStyle()), GetBorderStyle(), + GetBorderDash(), GetTransparency()); + } +} + +void CPWL_Wnd::DrawChildAppearance(CFX_RenderDevice* pDevice, + CPDF_Matrix* pUser2Device) { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + CPDF_Matrix mt = pChild->GetChildMatrix(); + if (mt.IsIdentity()) { + pChild->DrawAppearance(pDevice, pUser2Device); + } else { + mt.Concat(*pUser2Device); + pChild->DrawAppearance(pDevice, &mt); + } } + } } -void CPWL_Wnd::InvalidateRect(CPDF_Rect* pRect) -{ - if (IsValid()) - { - CPDF_Rect rcRefresh = pRect ? *pRect : GetWindowRect(); +void CPWL_Wnd::InvalidateRect(CPDF_Rect* pRect) { + if (IsValid()) { + CPDF_Rect rcRefresh = pRect ? *pRect : GetWindowRect(); - if (!HasFlag(PWS_NOREFRESHCLIP)) - { - CPDF_Rect rcClip = GetClipRect(); - if (!rcClip.IsEmpty()) - { - rcRefresh.Intersect(rcClip); - } - } - - FX_RECT rcWin = PWLtoWnd(rcRefresh); - rcWin.left -= PWL_INVALIDATE_INFLATE; - rcWin.top -= PWL_INVALIDATE_INFLATE; - rcWin.right += PWL_INVALIDATE_INFLATE; - rcWin.bottom += PWL_INVALIDATE_INFLATE; - - if (IFX_SystemHandler* pSH = GetSystemHandler()) - { - if (FX_HWND hWnd = GetAttachedHWnd()) - { - pSH->InvalidateRect(hWnd, rcWin); - } - } + if (!HasFlag(PWS_NOREFRESHCLIP)) { + CPDF_Rect rcClip = GetClipRect(); + if (!rcClip.IsEmpty()) { + rcRefresh.Intersect(rcClip); + } } -} -#define PWL_IMPLEMENT_KEY_METHOD(key_method_name)\ -FX_BOOL CPWL_Wnd::key_method_name(FX_WORD nChar, FX_DWORD nFlag)\ -{\ - if (IsValid() && IsVisible() && IsEnabled())\ - {\ - if (IsWndCaptureKeyboard(this))\ - {\ - for (int32_t i=0,sz=m_aChildren.GetSize(); ikey_method_name(nChar,nFlag);\ - }\ - }\ - }\ - }\ - }\ - return FALSE;\ -} - -#define PWL_IMPLEMENT_MOUSE_METHOD(mouse_method_name)\ -FX_BOOL CPWL_Wnd::mouse_method_name(const CPDF_Point & point, FX_DWORD nFlag)\ -{\ - if (IsValid() && IsVisible() && IsEnabled())\ - {\ - if (IsWndCaptureMouse(this))\ - {\ - for (int32_t i=0,sz=m_aChildren.GetSize(); imouse_method_name(pChild->ParentToChild(point),nFlag);\ - }\ - }\ - }\ - SetCursor();\ - }\ - else\ - {\ - for (int32_t i=0,sz=m_aChildren.GetSize(); iWndHitTest(pChild->ParentToChild(point)))\ - {\ - return pChild->mouse_method_name(pChild->ParentToChild(point),nFlag);\ - }\ - }\ - }\ - if (WndHitTest(point))\ - SetCursor();\ - }\ - }\ - return FALSE;\ -} + FX_RECT rcWin = PWLtoWnd(rcRefresh); + rcWin.left -= PWL_INVALIDATE_INFLATE; + rcWin.top -= PWL_INVALIDATE_INFLATE; + rcWin.right += PWL_INVALIDATE_INFLATE; + rcWin.bottom += PWL_INVALIDATE_INFLATE; + + if (IFX_SystemHandler* pSH = GetSystemHandler()) { + if (FX_HWND hWnd = GetAttachedHWnd()) { + pSH->InvalidateRect(hWnd, rcWin); + } + } + } +} + +#define PWL_IMPLEMENT_KEY_METHOD(key_method_name) \ + FX_BOOL CPWL_Wnd::key_method_name(FX_WORD nChar, FX_DWORD nFlag) { \ + if (IsValid() && IsVisible() && IsEnabled()) { \ + if (IsWndCaptureKeyboard(this)) { \ + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { \ + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { \ + if (IsWndCaptureKeyboard(pChild)) { \ + return pChild->key_method_name(nChar, nFlag); \ + } \ + } \ + } \ + } \ + } \ + return FALSE; \ + } + +#define PWL_IMPLEMENT_MOUSE_METHOD(mouse_method_name) \ + FX_BOOL CPWL_Wnd::mouse_method_name(const CPDF_Point& point, \ + FX_DWORD nFlag) { \ + if (IsValid() && IsVisible() && IsEnabled()) { \ + if (IsWndCaptureMouse(this)) { \ + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { \ + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { \ + if (IsWndCaptureMouse(pChild)) { \ + return pChild->mouse_method_name(pChild->ParentToChild(point), \ + nFlag); \ + } \ + } \ + } \ + SetCursor(); \ + } else { \ + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { \ + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { \ + if (pChild->WndHitTest(pChild->ParentToChild(point))) { \ + return pChild->mouse_method_name(pChild->ParentToChild(point), \ + nFlag); \ + } \ + } \ + } \ + if (WndHitTest(point)) \ + SetCursor(); \ + } \ + } \ + return FALSE; \ + } PWL_IMPLEMENT_KEY_METHOD(OnKeyDown) PWL_IMPLEMENT_KEY_METHOD(OnKeyUp) @@ -568,726 +472,610 @@ PWL_IMPLEMENT_MOUSE_METHOD(OnRButtonDown) PWL_IMPLEMENT_MOUSE_METHOD(OnRButtonUp) PWL_IMPLEMENT_MOUSE_METHOD(OnMouseMove) -FX_BOOL CPWL_Wnd::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag) -{ - if (IsValid() && IsVisible() && IsEnabled()) - { - SetCursor(); - if (IsWndCaptureKeyboard(this)) - { - for (int32_t i=0,sz=m_aChildren.GetSize(); iOnMouseWheel(zDelta,pChild->ParentToChild(point), nFlag); - } - } - } +FX_BOOL CPWL_Wnd::OnMouseWheel(short zDelta, + const CPDF_Point& point, + FX_DWORD nFlag) { + if (IsValid() && IsVisible() && IsEnabled()) { + SetCursor(); + if (IsWndCaptureKeyboard(this)) { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + if (IsWndCaptureKeyboard(pChild)) { + return pChild->OnMouseWheel(zDelta, pChild->ParentToChild(point), + nFlag); + } } + } } - return FALSE; + } + return FALSE; } -void CPWL_Wnd::AddChild(CPWL_Wnd * pWnd) -{ - m_aChildren.Add(pWnd); +void CPWL_Wnd::AddChild(CPWL_Wnd* pWnd) { + m_aChildren.Add(pWnd); } -void CPWL_Wnd::RemoveChild(CPWL_Wnd * pWnd) -{ - for (int32_t i = m_aChildren.GetSize()-1; i >= 0; i --) - { - if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) - { - if (pChild == pWnd) - { - m_aChildren.RemoveAt(i); - break; - } - } +void CPWL_Wnd::RemoveChild(CPWL_Wnd* pWnd) { + for (int32_t i = m_aChildren.GetSize() - 1; i >= 0; i--) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + if (pChild == pWnd) { + m_aChildren.RemoveAt(i); + break; + } } + } } -void CPWL_Wnd::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) -{ - switch (msg) - { +void CPWL_Wnd::OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam, + intptr_t lParam) { + switch (msg) { case PNM_ADDCHILD: - AddChild(pWnd); - break; + AddChild(pWnd); + break; case PNM_REMOVECHILD: - RemoveChild(pWnd); - break; + RemoveChild(pWnd); + break; default: - break; - } + break; + } } -FX_BOOL CPWL_Wnd::IsValid() const -{ - return m_bCreated; +FX_BOOL CPWL_Wnd::IsValid() const { + return m_bCreated; } -PWL_CREATEPARAM CPWL_Wnd::GetCreationParam() const -{ - return m_sPrivateParam; +PWL_CREATEPARAM CPWL_Wnd::GetCreationParam() const { + return m_sPrivateParam; } -CPWL_Wnd* CPWL_Wnd::GetParentWindow() const -{ - return m_sPrivateParam.pParentWnd; +CPWL_Wnd* CPWL_Wnd::GetParentWindow() const { + return m_sPrivateParam.pParentWnd; } -CPDF_Rect CPWL_Wnd::GetOriginWindowRect() const -{ - return m_sPrivateParam.rcRectWnd; +CPDF_Rect CPWL_Wnd::GetOriginWindowRect() const { + return m_sPrivateParam.rcRectWnd; } -CPDF_Rect CPWL_Wnd::GetWindowRect() const -{ - return m_rcWindow; +CPDF_Rect CPWL_Wnd::GetWindowRect() const { + return m_rcWindow; } -CPDF_Rect CPWL_Wnd::GetClientRect() const -{ - CPDF_Rect rcWindow = GetWindowRect(); - CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow,(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth())); - if (CPWL_ScrollBar* pVSB = GetVScrollBar()) - rcClient.right -= pVSB->GetScrollBarWidth(); +CPDF_Rect CPWL_Wnd::GetClientRect() const { + CPDF_Rect rcWindow = GetWindowRect(); + CPDF_Rect rcClient = CPWL_Utils::DeflateRect( + rcWindow, (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); + if (CPWL_ScrollBar* pVSB = GetVScrollBar()) + rcClient.right -= pVSB->GetScrollBarWidth(); - rcClient.Normalize(); - return rcWindow.Contains(rcClient) ? rcClient : CPDF_Rect(); + rcClient.Normalize(); + return rcWindow.Contains(rcClient) ? rcClient : CPDF_Rect(); } -CPDF_Point CPWL_Wnd::GetCenterPoint() const -{ - CPDF_Rect rcClient = GetClientRect(); - return CPDF_Point((rcClient.left + rcClient.right) * 0.5f, - (rcClient.top + rcClient.bottom) * 0.5f); +CPDF_Point CPWL_Wnd::GetCenterPoint() const { + CPDF_Rect rcClient = GetClientRect(); + return CPDF_Point((rcClient.left + rcClient.right) * 0.5f, + (rcClient.top + rcClient.bottom) * 0.5f); } -CPDF_Rect CPWL_Wnd::GetClientCenterSquare() const -{ - return CPWL_Utils::GetCenterSquare(GetClientRect()); +CPDF_Rect CPWL_Wnd::GetClientCenterSquare() const { + return CPWL_Utils::GetCenterSquare(GetClientRect()); } -CPDF_Rect CPWL_Wnd::GetWindowCenterSquare() const -{ - return CPWL_Utils::GetCenterSquare(CPWL_Utils::DeflateRect(GetWindowRect(),0.1f)); +CPDF_Rect CPWL_Wnd::GetWindowCenterSquare() const { + return CPWL_Utils::GetCenterSquare( + CPWL_Utils::DeflateRect(GetWindowRect(), 0.1f)); } -FX_BOOL CPWL_Wnd::HasFlag(FX_DWORD dwFlags) const -{ - return (m_sPrivateParam.dwFlags & dwFlags) != 0; +FX_BOOL CPWL_Wnd::HasFlag(FX_DWORD dwFlags) const { + return (m_sPrivateParam.dwFlags & dwFlags) != 0; } -void CPWL_Wnd::RemoveFlag(FX_DWORD dwFlags) -{ - m_sPrivateParam.dwFlags &= ~dwFlags; +void CPWL_Wnd::RemoveFlag(FX_DWORD dwFlags) { + m_sPrivateParam.dwFlags &= ~dwFlags; } -void CPWL_Wnd::AddFlag(FX_DWORD dwFlags) -{ - m_sPrivateParam.dwFlags |= dwFlags; +void CPWL_Wnd::AddFlag(FX_DWORD dwFlags) { + m_sPrivateParam.dwFlags |= dwFlags; } -CPWL_Color CPWL_Wnd::GetBackgroundColor() const -{ - return m_sPrivateParam.sBackgroundColor; +CPWL_Color CPWL_Wnd::GetBackgroundColor() const { + return m_sPrivateParam.sBackgroundColor; } -void CPWL_Wnd::SetBackgroundColor(const CPWL_Color & color) -{ - m_sPrivateParam.sBackgroundColor = color; +void CPWL_Wnd::SetBackgroundColor(const CPWL_Color& color) { + m_sPrivateParam.sBackgroundColor = color; } -void CPWL_Wnd::SetTextColor(const CPWL_Color & color) -{ - m_sPrivateParam.sTextColor = color; +void CPWL_Wnd::SetTextColor(const CPWL_Color& color) { + m_sPrivateParam.sTextColor = color; } -void CPWL_Wnd::SetTextStrokeColor(const CPWL_Color & color) -{ - m_sPrivateParam.sTextStrokeColor = color; +void CPWL_Wnd::SetTextStrokeColor(const CPWL_Color& color) { + m_sPrivateParam.sTextStrokeColor = color; } -CPWL_Color CPWL_Wnd::GetTextColor() const -{ - return m_sPrivateParam.sTextColor; +CPWL_Color CPWL_Wnd::GetTextColor() const { + return m_sPrivateParam.sTextColor; } -CPWL_Color CPWL_Wnd::GetTextStrokeColor() const -{ - return m_sPrivateParam.sTextStrokeColor; +CPWL_Color CPWL_Wnd::GetTextStrokeColor() const { + return m_sPrivateParam.sTextStrokeColor; } -int32_t CPWL_Wnd::GetBorderStyle() const -{ - return m_sPrivateParam.nBorderStyle; +int32_t CPWL_Wnd::GetBorderStyle() const { + return m_sPrivateParam.nBorderStyle; } -void CPWL_Wnd::SetBorderStyle(int32_t nBorderStyle) -{ - if (HasFlag(PWS_BORDER)) - m_sPrivateParam.nBorderStyle = nBorderStyle; +void CPWL_Wnd::SetBorderStyle(int32_t nBorderStyle) { + if (HasFlag(PWS_BORDER)) + m_sPrivateParam.nBorderStyle = nBorderStyle; } -int32_t CPWL_Wnd::GetBorderWidth() const -{ - if (HasFlag(PWS_BORDER)) - return m_sPrivateParam.dwBorderWidth; +int32_t CPWL_Wnd::GetBorderWidth() const { + if (HasFlag(PWS_BORDER)) + return m_sPrivateParam.dwBorderWidth; - return 0; + return 0; } -int32_t CPWL_Wnd::GetInnerBorderWidth() const -{ - /* - switch (GetBorderStyle()) - { - case PBS_BEVELED: - case PBS_INSET: - return GetBorderWidth() / 2; - } - */ - return 0; +int32_t CPWL_Wnd::GetInnerBorderWidth() const { + /* + switch (GetBorderStyle()) + { + case PBS_BEVELED: + case PBS_INSET: + return GetBorderWidth() / 2; + } + */ + return 0; } -void CPWL_Wnd::SetBorderWidth(int32_t nBorderWidth) -{ - if (HasFlag(PWS_BORDER)) - m_sPrivateParam.dwBorderWidth = nBorderWidth; +void CPWL_Wnd::SetBorderWidth(int32_t nBorderWidth) { + if (HasFlag(PWS_BORDER)) + m_sPrivateParam.dwBorderWidth = nBorderWidth; } -CPWL_Color CPWL_Wnd::GetBorderColor() const -{ - if (HasFlag(PWS_BORDER)) - return m_sPrivateParam.sBorderColor; +CPWL_Color CPWL_Wnd::GetBorderColor() const { + if (HasFlag(PWS_BORDER)) + return m_sPrivateParam.sBorderColor; - return CPWL_Color(); + return CPWL_Color(); } -void CPWL_Wnd::SetBorderColor(const CPWL_Color & color) -{ - if (HasFlag(PWS_BORDER)) - m_sPrivateParam.sBorderColor = color; +void CPWL_Wnd::SetBorderColor(const CPWL_Color& color) { + if (HasFlag(PWS_BORDER)) + m_sPrivateParam.sBorderColor = color; } -CPWL_Dash CPWL_Wnd::GetBorderDash() const -{ - return m_sPrivateParam.sDash; +CPWL_Dash CPWL_Wnd::GetBorderDash() const { + return m_sPrivateParam.sDash; } -void* CPWL_Wnd::GetAttachedData() const -{ - return m_sPrivateParam.pAttachedData; +void* CPWL_Wnd::GetAttachedData() const { + return m_sPrivateParam.pAttachedData; } -void CPWL_Wnd::SetBorderDash(const CPWL_Dash & sDash) -{ - if (HasFlag(PWS_BORDER)) - m_sPrivateParam.sDash = sDash; +void CPWL_Wnd::SetBorderDash(const CPWL_Dash& sDash) { + if (HasFlag(PWS_BORDER)) + m_sPrivateParam.sDash = sDash; } -CPWL_ScrollBar* CPWL_Wnd::GetVScrollBar() const -{ - if (HasFlag(PWS_VSCROLL)) - return m_pVScrollBar; +CPWL_ScrollBar* CPWL_Wnd::GetVScrollBar() const { + if (HasFlag(PWS_VSCROLL)) + return m_pVScrollBar; - return NULL; + return NULL; } -void CPWL_Wnd::CreateScrollBar(const PWL_CREATEPARAM & cp) -{ - CreateVScrollBar(cp); +void CPWL_Wnd::CreateScrollBar(const PWL_CREATEPARAM& cp) { + CreateVScrollBar(cp); } -void CPWL_Wnd::CreateVScrollBar(const PWL_CREATEPARAM & cp) -{ - if (!m_pVScrollBar && HasFlag(PWS_VSCROLL)) - { - PWL_CREATEPARAM scp = cp; +void CPWL_Wnd::CreateVScrollBar(const PWL_CREATEPARAM& cp) { + if (!m_pVScrollBar && HasFlag(PWS_VSCROLL)) { + PWL_CREATEPARAM scp = cp; - //flags - scp.dwFlags = PWS_CHILD| PWS_BACKGROUND | PWS_AUTOTRANSPARENT | PWS_NOREFRESHCLIP; + // flags + scp.dwFlags = + PWS_CHILD | PWS_BACKGROUND | PWS_AUTOTRANSPARENT | PWS_NOREFRESHCLIP; - scp.pParentWnd = this; - scp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR; - scp.eCursorType = FXCT_ARROW; - scp.nTransparency = PWL_SCROLLBAR_TRANSPARANCY; + scp.pParentWnd = this; + scp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR; + scp.eCursorType = FXCT_ARROW; + scp.nTransparency = PWL_SCROLLBAR_TRANSPARANCY; - if ((m_pVScrollBar = new CPWL_ScrollBar(SBT_VSCROLL))) - m_pVScrollBar->Create(scp); - } + if ((m_pVScrollBar = new CPWL_ScrollBar(SBT_VSCROLL))) + m_pVScrollBar->Create(scp); + } } -void CPWL_Wnd::SetCapture() -{ - if (CPWL_MsgControl * pMsgCtrl = GetMsgControl()) - pMsgCtrl->SetCapture(this); +void CPWL_Wnd::SetCapture() { + if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) + pMsgCtrl->SetCapture(this); } -void CPWL_Wnd::ReleaseCapture() -{ - for (int32_t i=0,sz=m_aChildren.GetSize(); iReleaseCapture(); +void CPWL_Wnd::ReleaseCapture() { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) + pChild->ReleaseCapture(); - if (CPWL_MsgControl * pMsgCtrl = GetMsgControl()) - pMsgCtrl->ReleaseCapture(); + if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) + pMsgCtrl->ReleaseCapture(); } -void CPWL_Wnd::SetFocus() -{ - if (CPWL_MsgControl * pMsgCtrl = GetMsgControl()) - { - if (!pMsgCtrl->IsMainCaptureKeyboard(this)) - pMsgCtrl->KillFocus(); - pMsgCtrl->SetFocus(this); - } +void CPWL_Wnd::SetFocus() { + if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) { + if (!pMsgCtrl->IsMainCaptureKeyboard(this)) + pMsgCtrl->KillFocus(); + pMsgCtrl->SetFocus(this); + } } -void CPWL_Wnd::KillFocus() -{ - if (CPWL_MsgControl * pMsgCtrl = GetMsgControl()) - { - if (pMsgCtrl->IsWndCaptureKeyboard(this)) - pMsgCtrl->KillFocus(); - } +void CPWL_Wnd::KillFocus() { + if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) { + if (pMsgCtrl->IsWndCaptureKeyboard(this)) + pMsgCtrl->KillFocus(); + } } -void CPWL_Wnd::OnSetFocus() -{ -} +void CPWL_Wnd::OnSetFocus() {} -void CPWL_Wnd::OnKillFocus() -{ -} +void CPWL_Wnd::OnKillFocus() {} -FX_BOOL CPWL_Wnd::WndHitTest(const CPDF_Point & point) const -{ - return IsValid() && IsVisible() && GetWindowRect().Contains(point.x,point.y); +FX_BOOL CPWL_Wnd::WndHitTest(const CPDF_Point& point) const { + return IsValid() && IsVisible() && GetWindowRect().Contains(point.x, point.y); } -FX_BOOL CPWL_Wnd::ClientHitTest(const CPDF_Point & point) const -{ - return IsValid() && IsVisible() && GetClientRect().Contains(point.x,point.y); +FX_BOOL CPWL_Wnd::ClientHitTest(const CPDF_Point& point) const { + return IsValid() && IsVisible() && GetClientRect().Contains(point.x, point.y); } -const CPWL_Wnd* CPWL_Wnd::GetRootWnd() const -{ - if (m_sPrivateParam.pParentWnd) - return m_sPrivateParam.pParentWnd->GetRootWnd(); +const CPWL_Wnd* CPWL_Wnd::GetRootWnd() const { + if (m_sPrivateParam.pParentWnd) + return m_sPrivateParam.pParentWnd->GetRootWnd(); - return this; + return this; } -void CPWL_Wnd::SetVisible(FX_BOOL bVisible) -{ - if (IsValid()) - { - for (int32_t i=0,sz=m_aChildren.GetSize(); iSetVisible(bVisible); - } - } +void CPWL_Wnd::SetVisible(FX_BOOL bVisible) { + if (IsValid()) { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + pChild->SetVisible(bVisible); + } + } - if (bVisible != m_bVisible) - { - m_bVisible = bVisible; - RePosChildWnd(); - InvalidateRect(); - } + if (bVisible != m_bVisible) { + m_bVisible = bVisible; + RePosChildWnd(); + InvalidateRect(); } + } } -void CPWL_Wnd::SetClipRect(const CPDF_Rect & rect) -{ - m_rcClip = rect; - m_rcClip.Normalize(); +void CPWL_Wnd::SetClipRect(const CPDF_Rect& rect) { + m_rcClip = rect; + m_rcClip.Normalize(); } -CPDF_Rect CPWL_Wnd::GetClipRect() const -{ - return m_rcClip; +CPDF_Rect CPWL_Wnd::GetClipRect() const { + return m_rcClip; } -FX_BOOL CPWL_Wnd::IsReadOnly() const -{ - return HasFlag(PWS_READONLY); +FX_BOOL CPWL_Wnd::IsReadOnly() const { + return HasFlag(PWS_READONLY); } -void CPWL_Wnd::RePosChildWnd() -{ - CPDF_Rect rcContent = CPWL_Utils::DeflateRect(GetWindowRect(),(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth())); +void CPWL_Wnd::RePosChildWnd() { + CPDF_Rect rcContent = CPWL_Utils::DeflateRect( + GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); - CPWL_ScrollBar * pVSB = GetVScrollBar(); + CPWL_ScrollBar* pVSB = GetVScrollBar(); - CPDF_Rect rcVScroll = CPDF_Rect(rcContent.right - PWL_SCROLLBAR_WIDTH, - rcContent.bottom, - rcContent.right-1.0f, - rcContent.top); + CPDF_Rect rcVScroll = + CPDF_Rect(rcContent.right - PWL_SCROLLBAR_WIDTH, rcContent.bottom, + rcContent.right - 1.0f, rcContent.top); - if (pVSB) pVSB->Move(rcVScroll,TRUE,FALSE); + if (pVSB) + pVSB->Move(rcVScroll, TRUE, FALSE); } -void CPWL_Wnd::CreateChildWnd(const PWL_CREATEPARAM & cp) -{ -} +void CPWL_Wnd::CreateChildWnd(const PWL_CREATEPARAM& cp) {} -void CPWL_Wnd::SetCursor() -{ - if (IsValid()) - { - if (IFX_SystemHandler* pSH = GetSystemHandler()) - { - int32_t nCursorType = GetCreationParam().eCursorType; - pSH->SetCursor(nCursorType); - } +void CPWL_Wnd::SetCursor() { + if (IsValid()) { + if (IFX_SystemHandler* pSH = GetSystemHandler()) { + int32_t nCursorType = GetCreationParam().eCursorType; + pSH->SetCursor(nCursorType); } + } } -void CPWL_Wnd::CreateMsgControl() -{ - if (!m_sPrivateParam.pMsgControl) - m_sPrivateParam.pMsgControl = new CPWL_MsgControl(this); +void CPWL_Wnd::CreateMsgControl() { + if (!m_sPrivateParam.pMsgControl) + m_sPrivateParam.pMsgControl = new CPWL_MsgControl(this); } -void CPWL_Wnd::DestroyMsgControl() -{ - if (CPWL_MsgControl* pMsgControl = GetMsgControl()) - if (pMsgControl->IsWndCreated(this)) - delete pMsgControl; +void CPWL_Wnd::DestroyMsgControl() { + if (CPWL_MsgControl* pMsgControl = GetMsgControl()) + if (pMsgControl->IsWndCreated(this)) + delete pMsgControl; } -CPWL_MsgControl* CPWL_Wnd::GetMsgControl() const -{ - return m_sPrivateParam.pMsgControl; +CPWL_MsgControl* CPWL_Wnd::GetMsgControl() const { + return m_sPrivateParam.pMsgControl; } -FX_BOOL CPWL_Wnd::IsCaptureMouse() const -{ - return IsWndCaptureMouse(this); +FX_BOOL CPWL_Wnd::IsCaptureMouse() const { + return IsWndCaptureMouse(this); } -FX_BOOL CPWL_Wnd::IsWndCaptureMouse(const CPWL_Wnd * pWnd) const -{ - if (CPWL_MsgControl * pCtrl = GetMsgControl()) - return pCtrl->IsWndCaptureMouse(pWnd); +FX_BOOL CPWL_Wnd::IsWndCaptureMouse(const CPWL_Wnd* pWnd) const { + if (CPWL_MsgControl* pCtrl = GetMsgControl()) + return pCtrl->IsWndCaptureMouse(pWnd); - return FALSE; + return FALSE; } -FX_BOOL CPWL_Wnd::IsWndCaptureKeyboard(const CPWL_Wnd * pWnd) const -{ - if (CPWL_MsgControl * pCtrl = GetMsgControl()) - return pCtrl->IsWndCaptureKeyboard(pWnd); +FX_BOOL CPWL_Wnd::IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const { + if (CPWL_MsgControl* pCtrl = GetMsgControl()) + return pCtrl->IsWndCaptureKeyboard(pWnd); - return FALSE; + return FALSE; } -FX_BOOL CPWL_Wnd::IsFocused() const -{ - if (CPWL_MsgControl * pCtrl = GetMsgControl()) - return pCtrl->IsMainCaptureKeyboard(this); +FX_BOOL CPWL_Wnd::IsFocused() const { + if (CPWL_MsgControl* pCtrl = GetMsgControl()) + return pCtrl->IsMainCaptureKeyboard(this); - return FALSE; + return FALSE; } -CPDF_Rect CPWL_Wnd::GetFocusRect() const -{ - return CPWL_Utils::InflateRect(GetWindowRect(),1); +CPDF_Rect CPWL_Wnd::GetFocusRect() const { + return CPWL_Utils::InflateRect(GetWindowRect(), 1); } -FX_FLOAT CPWL_Wnd::GetFontSize() const -{ - return m_sPrivateParam.fFontSize; +FX_FLOAT CPWL_Wnd::GetFontSize() const { + return m_sPrivateParam.fFontSize; } -void CPWL_Wnd::SetFontSize(FX_FLOAT fFontSize) -{ - m_sPrivateParam.fFontSize = fFontSize; +void CPWL_Wnd::SetFontSize(FX_FLOAT fFontSize) { + m_sPrivateParam.fFontSize = fFontSize; } -IFX_SystemHandler* CPWL_Wnd::GetSystemHandler() const -{ - return m_sPrivateParam.pSystemHandler; +IFX_SystemHandler* CPWL_Wnd::GetSystemHandler() const { + return m_sPrivateParam.pSystemHandler; } -IPWL_FocusHandler* CPWL_Wnd::GetFocusHandler() const -{ - return m_sPrivateParam.pFocusHandler; +IPWL_FocusHandler* CPWL_Wnd::GetFocusHandler() const { + return m_sPrivateParam.pFocusHandler; } -IPWL_Provider* CPWL_Wnd::GetProvider() const -{ - return m_sPrivateParam.pProvider; +IPWL_Provider* CPWL_Wnd::GetProvider() const { + return m_sPrivateParam.pProvider; } -IFX_Edit_FontMap* CPWL_Wnd::GetFontMap() const -{ - return m_sPrivateParam.pFontMap; +IFX_Edit_FontMap* CPWL_Wnd::GetFontMap() const { + return m_sPrivateParam.pFontMap; } -CPWL_Color CPWL_Wnd::GetBorderLeftTopColor(int32_t nBorderStyle) const -{ - CPWL_Color color; +CPWL_Color CPWL_Wnd::GetBorderLeftTopColor(int32_t nBorderStyle) const { + CPWL_Color color; - switch (nBorderStyle) - { - case PBS_SOLID: - break; - case PBS_DASH: - break; - case PBS_BEVELED: - color = CPWL_Color(COLORTYPE_GRAY,1); - break; - case PBS_INSET: - color = CPWL_Color(COLORTYPE_GRAY,0.5f); - break; - case PBS_UNDERLINED: - break; - } + switch (nBorderStyle) { + case PBS_SOLID: + break; + case PBS_DASH: + break; + case PBS_BEVELED: + color = CPWL_Color(COLORTYPE_GRAY, 1); + break; + case PBS_INSET: + color = CPWL_Color(COLORTYPE_GRAY, 0.5f); + break; + case PBS_UNDERLINED: + break; + } - return color; -} - -CPWL_Color CPWL_Wnd::GetBorderRightBottomColor(int32_t nBorderStyle) const -{ - CPWL_Color color; - - switch (nBorderStyle) - { - case PBS_SOLID: - break; - case PBS_DASH: - break; - case PBS_BEVELED: - color = CPWL_Utils::DevideColor(GetBackgroundColor(),2); - break; - case PBS_INSET: - color = CPWL_Color(COLORTYPE_GRAY,0.75f); - break; - case PBS_UNDERLINED: - break; - } + return color; +} + +CPWL_Color CPWL_Wnd::GetBorderRightBottomColor(int32_t nBorderStyle) const { + CPWL_Color color; - return color; + switch (nBorderStyle) { + case PBS_SOLID: + break; + case PBS_DASH: + break; + case PBS_BEVELED: + color = CPWL_Utils::DevideColor(GetBackgroundColor(), 2); + break; + case PBS_INSET: + color = CPWL_Color(COLORTYPE_GRAY, 0.75f); + break; + case PBS_UNDERLINED: + break; + } + + return color; } /* ----------------------------------------------------------------- */ -int32_t CPWL_Wnd::GetTransparency() -{ - return m_sPrivateParam.nTransparency; +int32_t CPWL_Wnd::GetTransparency() { + return m_sPrivateParam.nTransparency; } -void CPWL_Wnd::SetTransparency(int32_t nTransparency) -{ - for (int32_t i=0,sz=m_aChildren.GetSize(); iSetTransparency(nTransparency); - } +void CPWL_Wnd::SetTransparency(int32_t nTransparency) { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + pChild->SetTransparency(nTransparency); } + } - m_sPrivateParam.nTransparency = nTransparency; + m_sPrivateParam.nTransparency = nTransparency; } -CPDF_Matrix CPWL_Wnd::GetWindowMatrix() const -{ - CPDF_Matrix mt = GetChildToRoot(); - - if (IPWL_Provider* pProvider = GetProvider()) - { - mt.Concat(pProvider->GetWindowMatrix(GetAttachedData())); - return mt; - } +CPDF_Matrix CPWL_Wnd::GetWindowMatrix() const { + CPDF_Matrix mt = GetChildToRoot(); + if (IPWL_Provider* pProvider = GetProvider()) { + mt.Concat(pProvider->GetWindowMatrix(GetAttachedData())); return mt; + } + + return mt; } -void CPWL_Wnd::PWLtoWnd(const CPDF_Point& point, int32_t& x, int32_t& y) const -{ - CPDF_Matrix mt = GetWindowMatrix(); - CPDF_Point pt = point; - mt.Transform(pt.x,pt.y); - x = (int32_t)(pt.x+0.5); - y = (int32_t)(pt.y+0.5); +void CPWL_Wnd::PWLtoWnd(const CPDF_Point& point, int32_t& x, int32_t& y) const { + CPDF_Matrix mt = GetWindowMatrix(); + CPDF_Point pt = point; + mt.Transform(pt.x, pt.y); + x = (int32_t)(pt.x + 0.5); + y = (int32_t)(pt.y + 0.5); } -FX_RECT CPWL_Wnd::PWLtoWnd(const CPDF_Rect & rect) const -{ - CPDF_Rect rcTemp = rect; - CPDF_Matrix mt = GetWindowMatrix(); - mt.TransformRect(rcTemp); - return FX_RECT((int32_t)(rcTemp.left+0.5), (int32_t)(rcTemp.bottom+0.5), (int32_t)(rcTemp.right+0.5), (int32_t)(rcTemp.top+0.5)); +FX_RECT CPWL_Wnd::PWLtoWnd(const CPDF_Rect& rect) const { + CPDF_Rect rcTemp = rect; + CPDF_Matrix mt = GetWindowMatrix(); + mt.TransformRect(rcTemp); + return FX_RECT((int32_t)(rcTemp.left + 0.5), (int32_t)(rcTemp.bottom + 0.5), + (int32_t)(rcTemp.right + 0.5), (int32_t)(rcTemp.top + 0.5)); } -FX_HWND CPWL_Wnd::GetAttachedHWnd() const -{ - return m_sPrivateParam.hAttachedWnd; +FX_HWND CPWL_Wnd::GetAttachedHWnd() const { + return m_sPrivateParam.hAttachedWnd; } -CPDF_Point CPWL_Wnd::ChildToParent(const CPDF_Point& point) const -{ - CPDF_Matrix mt = GetChildMatrix(); - if (mt.IsIdentity()) - return point; +CPDF_Point CPWL_Wnd::ChildToParent(const CPDF_Point& point) const { + CPDF_Matrix mt = GetChildMatrix(); + if (mt.IsIdentity()) + return point; - CPDF_Point pt = point; - mt.Transform(pt.x,pt.y); - return pt; + CPDF_Point pt = point; + mt.Transform(pt.x, pt.y); + return pt; } -CPDF_Rect CPWL_Wnd::ChildToParent(const CPDF_Rect& rect) const -{ - CPDF_Matrix mt = GetChildMatrix(); - if (mt.IsIdentity()) - return rect; +CPDF_Rect CPWL_Wnd::ChildToParent(const CPDF_Rect& rect) const { + CPDF_Matrix mt = GetChildMatrix(); + if (mt.IsIdentity()) + return rect; - CPDF_Rect rc = rect; - mt.TransformRect(rc); - return rc; + CPDF_Rect rc = rect; + mt.TransformRect(rc); + return rc; } -CPDF_Point CPWL_Wnd::ParentToChild(const CPDF_Point& point) const -{ - CPDF_Matrix mt = GetChildMatrix(); - if (mt.IsIdentity()) - return point; +CPDF_Point CPWL_Wnd::ParentToChild(const CPDF_Point& point) const { + CPDF_Matrix mt = GetChildMatrix(); + if (mt.IsIdentity()) + return point; - mt.SetReverse(mt); - CPDF_Point pt = point; - mt.Transform(pt.x,pt.y); - return pt; + mt.SetReverse(mt); + CPDF_Point pt = point; + mt.Transform(pt.x, pt.y); + return pt; } -CPDF_Rect CPWL_Wnd::ParentToChild(const CPDF_Rect& rect) const -{ - CPDF_Matrix mt = GetChildMatrix(); - if (mt.IsIdentity()) - return rect; +CPDF_Rect CPWL_Wnd::ParentToChild(const CPDF_Rect& rect) const { + CPDF_Matrix mt = GetChildMatrix(); + if (mt.IsIdentity()) + return rect; - mt.SetReverse(mt); - CPDF_Rect rc = rect; - mt.TransformRect(rc); - return rc; + mt.SetReverse(mt); + CPDF_Rect rc = rect; + mt.TransformRect(rc); + return rc; } -CPDF_Matrix CPWL_Wnd::GetChildToRoot() const -{ - CPDF_Matrix mt(1, 0, 0, 1, 0, 0); - if (HasFlag(PWS_CHILD)) - { - const CPWL_Wnd* pParent = this; - while (pParent) - { - mt.Concat(pParent->GetChildMatrix()); - pParent = pParent->GetParentWindow(); - } +CPDF_Matrix CPWL_Wnd::GetChildToRoot() const { + CPDF_Matrix mt(1, 0, 0, 1, 0, 0); + if (HasFlag(PWS_CHILD)) { + const CPWL_Wnd* pParent = this; + while (pParent) { + mt.Concat(pParent->GetChildMatrix()); + pParent = pParent->GetParentWindow(); } - return mt; + } + return mt; } -CPDF_Matrix CPWL_Wnd::GetChildMatrix() const -{ - if (HasFlag(PWS_CHILD)) - return m_sPrivateParam.mtChild; +CPDF_Matrix CPWL_Wnd::GetChildMatrix() const { + if (HasFlag(PWS_CHILD)) + return m_sPrivateParam.mtChild; - return CPDF_Matrix(1,0,0,1,0,0); + return CPDF_Matrix(1, 0, 0, 1, 0, 0); } -void CPWL_Wnd::SetChildMatrix(const CPDF_Matrix& mt) -{ - m_sPrivateParam.mtChild = mt; +void CPWL_Wnd::SetChildMatrix(const CPDF_Matrix& mt) { + m_sPrivateParam.mtChild = mt; } -const CPWL_Wnd* CPWL_Wnd::GetFocused() const -{ - if (CPWL_MsgControl * pMsgCtrl = GetMsgControl()) - { - return pMsgCtrl->m_pMainKeyboardWnd; - } +const CPWL_Wnd* CPWL_Wnd::GetFocused() const { + if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) { + return pMsgCtrl->m_pMainKeyboardWnd; + } - return NULL; + return NULL; } -void CPWL_Wnd::EnableWindow(FX_BOOL bEnable) -{ - if (m_bEnabled != bEnable) - { - for (int32_t i=0,sz=m_aChildren.GetSize(); iEnableWindow(bEnable); - } - } +void CPWL_Wnd::EnableWindow(FX_BOOL bEnable) { + if (m_bEnabled != bEnable) { + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { + pChild->EnableWindow(bEnable); + } + } - m_bEnabled = bEnable; + m_bEnabled = bEnable; - if (bEnable) - OnEnabled(); - else - OnDisabled(); - } + if (bEnable) + OnEnabled(); + else + OnDisabled(); + } } -FX_BOOL CPWL_Wnd::IsEnabled() -{ - return m_bEnabled; +FX_BOOL CPWL_Wnd::IsEnabled() { + return m_bEnabled; } -void CPWL_Wnd::OnEnabled() -{ -} +void CPWL_Wnd::OnEnabled() {} -void CPWL_Wnd::OnDisabled() -{ -} +void CPWL_Wnd::OnDisabled() {} -FX_BOOL CPWL_Wnd::IsCTRLpressed(FX_DWORD nFlag) const -{ - if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) - { - return pSystemHandler->IsCTRLKeyDown(nFlag); - } +FX_BOOL CPWL_Wnd::IsCTRLpressed(FX_DWORD nFlag) const { + if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) { + return pSystemHandler->IsCTRLKeyDown(nFlag); + } - return FALSE; + return FALSE; } -FX_BOOL CPWL_Wnd::IsSHIFTpressed(FX_DWORD nFlag) const -{ - if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) - { - return pSystemHandler->IsSHIFTKeyDown(nFlag); - } +FX_BOOL CPWL_Wnd::IsSHIFTpressed(FX_DWORD nFlag) const { + if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) { + return pSystemHandler->IsSHIFTKeyDown(nFlag); + } - return FALSE; + return FALSE; } -FX_BOOL CPWL_Wnd::IsALTpressed(FX_DWORD nFlag) const -{ - if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) - { - return pSystemHandler->IsALTKeyDown(nFlag); - } +FX_BOOL CPWL_Wnd::IsALTpressed(FX_DWORD nFlag) const { + if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) { + return pSystemHandler->IsALTKeyDown(nFlag); + } - return FALSE; + return FALSE; } -FX_BOOL CPWL_Wnd::IsINSERTpressed(FX_DWORD nFlag) const -{ - if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) - { - return pSystemHandler->IsINSERTKeyDown(nFlag); - } +FX_BOOL CPWL_Wnd::IsINSERTpressed(FX_DWORD nFlag) const { + if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) { + return pSystemHandler->IsINSERTKeyDown(nFlag); + } - return FALSE; + return FALSE; } diff --git a/fpdfsdk/src/resource.h b/fpdfsdk/src/resource.h index 1729807951..a30a4ef45f 100644 --- a/fpdfsdk/src/resource.h +++ b/fpdfsdk/src/resource.h @@ -15,10 +15,10 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 104 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 +#define _APS_NEXT_RESOURCE_VALUE 104 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 #endif #endif -- cgit v1.2.3