1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FFL_FORMFILLER_H_ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FFL_FORMFILLER_H_ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "FFL_IFormFiller.h" 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "FFL_CBA_Fontmap.h" 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDFSDK_Annot; 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFFL_FormFiller; 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFFL_Notify; 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDFDoc_Environment; 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDFSDK_PageView; 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDFSDK_Document; 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDFSDK_Widget; 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CFFL_PageView2PDFWindow CFX_MapPtrTemplate<CPDFSDK_PageView*, CPWL_Wnd*> 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct FFL_KeyStrokeData 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString swValue; 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bFull; 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nSelStart; 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nSelEnd; 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFFL_FormFiller : /*public IBA_AnnotFiller,*/ public IPWL_Provider, public CPWL_TimerHandler 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_FormFiller(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot); 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~CFFL_FormFiller(); 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_RECT GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnDraw(CPDFSDK_PageView *pPageView, /*HDC hDC,*/ CPDFSDK_Annot* pAnnot, 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*const CRect& rcWindow, */FX_DWORD dwFlags); 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnDrawDeactive(CPDFSDK_PageView *pPageView, /*HDC hDC,*/ CPDFSDK_Annot* pAnnot, 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*const CRect& rcWindow, */FX_DWORD dwFlags); 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnCreate(CPDFSDK_Annot* pAnnot); 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnLoad(CPDFSDK_Annot* pAnnot); 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnDelete(CPDFSDK_Annot* pAnnot); 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point); 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags); 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags); 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnDeSelected(CPDFSDK_Annot* pAnnot); 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnSelected(CPDFSDK_Annot* pAnnot); 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag); 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag); 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument); 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument); 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument); 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DoCopy(CPDFSDK_Document* pDocument); 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DoCut(CPDFSDK_Document* pDocument); 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DoPaste(CPDFSDK_Document* pDocument); 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: //CPWL_TimerHandler 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void TimerProc(); 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual IFX_SystemHandler* GetSystemHandler() const; 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData); 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CFX_WideString LoadPopupMenuString(int nIndex); 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDFSDK_FieldAction& fa); 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const PDFSDK_FieldAction& fa); 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld, 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const PDFSDK_FieldAction& faNew); 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void SaveState(CPDFSDK_PageView* pPageView); 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void RestoreState(CPDFSDK_PageView* pPageView); 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue); 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnKeyStroke(FX_BOOL bKeyDown); 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Matrix GetCurMatrix(); 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect FFLtoPWL(const CPDF_Rect& rect); 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect PWLtoFFL(const CPDF_Rect& rect); 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Point FFLtoPWL(const CPDF_Point& point); 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Point PWLtoFFL(const CPDF_Point& point); 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Point WndtoPWL(CPDFSDK_PageView* pPageView, const CPDF_Point& pt); 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect FFLtoWnd(CPDFSDK_PageView* pPageView, const CPDF_Rect& rect); 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetWindowRect(CPDFSDK_PageView* pPageView, const CPDF_Rect& rcWindow); 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect GetWindowRect(CPDFSDK_PageView* pPageView); 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static void FFL_FreeData(void* pData); 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CommitData(CPDFSDK_PageView* pPageView, FX_UINT nFlag); 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView); 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void SaveData(CPDFSDK_PageView* pPageView); 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void GetKeyStrokeData(CPDFSDK_PageView* pPageView, FFL_KeyStrokeData& data); 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd* GetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bNew); 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void DestroyPDFWindow(CPDFSDK_PageView* pPageView); 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void EscapeFiller(CPDFSDK_PageView* pPageView, FX_BOOL bDestroyPDFWindow); 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual PWL_CREATEPARAM GetCreateParam(); 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) = 0; 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_Rect GetFocusBox(CPDFSDK_PageView* pPageView); 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsValid() const; 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect GetPDFWindowRect() const; 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFSDK_PageView* GetCurPageView(); 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetChangeMark(); 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void InvalidateRect(double left, double top, double right, double bottom); 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFDoc_Environment* GetApp(){return m_pApp;} 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFSDK_Annot* GetSDKAnnot() {return m_pAnnot;} 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFDoc_Environment* m_pApp; 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFSDK_Widget* m_pWidget; 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFSDK_Annot* m_pAnnot; 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bValid; 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_PageView2PDFWindow m_Maps; 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Point m_ptOldPos; 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFFL_Button : public CFFL_FormFiller 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_Button(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget); 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~CFFL_Button(); 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot); 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point); 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnDraw(CPDFSDK_PageView *pPageView/*, HDC hDC*/, CPDFSDK_Annot* pAnnot, 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*const CRect& rcWindow,*/ FX_DWORD dwFlags); 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OnDrawDeactive(CPDFSDK_PageView *pPageView, /*HDC hDC,*/ CPDFSDK_Annot* pAnnot, 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*const CRect& rcWindow, */FX_DWORD dwFlags); 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bMouseIn; 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bMouseDown; 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//#define CFFL_IM_BOX CFX_ArrayTemplate<CBA_EditInput*> 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 179