Home | History | Annotate | Download | only in include
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef _FSDK_ANNOTHANDLER_H_
      8 #define _FSDK_ANNOTHANDLER_H_
      9 
     10 
     11 class CPDFDoc_Environment;
     12 class CFFL_IFormFiller;
     13 class CPDFSDK_PageView;
     14 class IPDFSDK_AnnotHandler
     15 {
     16 
     17 public:
     18 	virtual ~IPDFSDK_AnnotHandler() {};
     19 
     20 	virtual CFX_ByteString		GetType() = 0;
     21 
     22 	virtual CFX_ByteString		GetName() = 0;
     23 
     24 	virtual FX_BOOL				CanAnswer(CPDFSDK_Annot* pAnnot) = 0;
     25 
     26 
     27 	virtual CPDFSDK_Annot*		NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) = 0;
     28 
     29 	virtual void				ReleaseAnnot(CPDFSDK_Annot* pAnnot) = 0;
     30 
     31 	virtual void				DeleteAnnot(CPDFSDK_Annot* pAnnot) = 0;
     32 
     33 
     34 	virtual CPDF_Rect				GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) = 0;
     35 
     36 	virtual FX_BOOL				HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point) = 0;
     37 
     38 
     39 	virtual void				OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
     40 		CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
     41 		FX_DWORD dwFlags) = 0;
     42 
     43 	virtual void				OnDrawSleep(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
     44 		CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
     45 		const CPDF_Rect& rcWindow, FX_DWORD dwFlags) = 0;
     46 
     47 
     48 
     49 
     50 	virtual void				OnCreate(CPDFSDK_Annot* pAnnot) = 0;
     51 
     52 	virtual void				OnLoad(CPDFSDK_Annot* pAnnot) = 0;
     53 
     54 	virtual void				OnDelete(CPDFSDK_Annot* pAnnot) = 0;
     55 
     56 	virtual void				OnRelease(CPDFSDK_Annot* pAnnot) = 0;
     57 
     58 
     59 	virtual void				OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
     60 	virtual void				OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
     61 
     62 
     63 	virtual FX_BOOL				OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
     64 	virtual FX_BOOL				OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
     65 	virtual FX_BOOL				OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
     66 	virtual FX_BOOL				OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
     67 	virtual FX_BOOL				OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) = 0;
     68 	virtual FX_BOOL				OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
     69 	virtual FX_BOOL				OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
     70 	virtual FX_BOOL				OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
     71 //by wjm.
     72 	virtual FX_BOOL				OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags) = 0;
     73 	virtual FX_BOOL				OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) = 0;
     74 	virtual FX_BOOL				OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) =0 ;
     75 
     76 	virtual	void				OnDeSelected(CPDFSDK_Annot* pAnnot) = 0;
     77 	virtual	void				OnSelected(CPDFSDK_Annot* pAnnot) = 0;
     78 
     79 	virtual FX_BOOL				OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
     80 	virtual FX_BOOL				OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
     81 
     82 };
     83 
     84 
     85 class CPDFSDK_BFAnnotHandler:public IPDFSDK_AnnotHandler
     86 {
     87 public:
     88 	CPDFSDK_BFAnnotHandler(CPDFDoc_Environment*	pApp):m_pFormFiller(NULL),m_pApp(pApp) {}
     89 	virtual	~CPDFSDK_BFAnnotHandler() {}
     90 public:
     91 
     92 	virtual CFX_ByteString		GetType()  {return CFX_ByteString("Widget");}
     93 
     94 	virtual CFX_ByteString		GetName()  {return CFX_ByteString("WidgetHandler");}
     95 
     96 	virtual FX_BOOL				CanAnswer(CPDFSDK_Annot* pAnnot);
     97 
     98 	virtual CPDFSDK_Annot*		NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage);
     99 
    100 	virtual void				ReleaseAnnot(CPDFSDK_Annot* pAnnot)  ;
    101 
    102 	virtual void				DeleteAnnot(CPDFSDK_Annot* pAnnot) {}
    103 
    104 
    105 	virtual CPDF_Rect				GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) ;
    106 
    107 	virtual FX_BOOL				HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point);
    108 
    109 
    110 	virtual void				OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
    111 		CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
    112 		 FX_DWORD dwFlags) ;
    113 
    114 	virtual void				OnDrawSleep(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
    115 		CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
    116 		const CPDF_Rect& rcWindow, FX_DWORD dwFlags) {}
    117 
    118 
    119 	virtual void				OnCreate(CPDFSDK_Annot* pAnnot) ;
    120 
    121 	virtual void				OnLoad(CPDFSDK_Annot* pAnnot) ;
    122 
    123 	virtual void				OnDelete(CPDFSDK_Annot* pAnnot) {}
    124 
    125 	virtual void				OnRelease(CPDFSDK_Annot* pAnnot) {}
    126 
    127 
    128 	virtual void				OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) ;
    129 	virtual void				OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) ;
    130 
    131 
    132 	virtual FX_BOOL				OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
    133 	virtual FX_BOOL				OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
    134 	virtual FX_BOOL				OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
    135 	virtual FX_BOOL				OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
    136 	virtual FX_BOOL				OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) ;
    137 	virtual FX_BOOL				OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
    138 	virtual FX_BOOL				OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
    139 	virtual FX_BOOL				OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) {return FALSE;}
    140 
    141 //by wjm.
    142 	virtual FX_BOOL				OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags);
    143 	virtual FX_BOOL				OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
    144 	virtual FX_BOOL				OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
    145 
    146 	virtual	void				OnDeSelected(CPDFSDK_Annot* pAnnot) {}
    147 	virtual	void				OnSelected(CPDFSDK_Annot* pAnnot) {}
    148 
    149 	virtual FX_BOOL				OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
    150 	virtual FX_BOOL				OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
    151 
    152 	void						SetFormFiller(CFFL_IFormFiller* pFiller){m_pFormFiller = pFiller;}
    153 	CFFL_IFormFiller*			GetFormFiller() {return m_pFormFiller;}
    154 private:
    155 
    156 	CPDFDoc_Environment*		m_pApp;
    157 	CFFL_IFormFiller*			m_pFormFiller;
    158 };
    159 
    160 #define CBA_AnnotHandlerArray CFX_ArrayTemplate<IPDFSDK_AnnotHandler*>
    161 class CPDFSDK_AnnotHandlerMgr
    162 {
    163 public:
    164 	// Destroy the handler
    165 	CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp);
    166 	virtual ~CPDFSDK_AnnotHandlerMgr() ;
    167 
    168 public:
    169 	void						RegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler);
    170 	void						UnRegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler);
    171 
    172 	virtual CPDFSDK_Annot*		NewAnnot(CPDF_Annot * pAnnot, CPDFSDK_PageView *pPageView);
    173 	virtual void				ReleaseAnnot(CPDFSDK_Annot * pAnnot);
    174 
    175 	virtual void				Annot_OnCreate(CPDFSDK_Annot* pAnnot);
    176 	virtual void				Annot_OnLoad(CPDFSDK_Annot* pAnnot);
    177 public:
    178 	IPDFSDK_AnnotHandler*		GetAnnotHandler(CPDFSDK_Annot* pAnnot) const;
    179 	virtual void				Annot_OnDraw(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot,
    180 		CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,FX_DWORD dwFlags);
    181 
    182 	virtual void				Annot_OnMouseEnter(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags);
    183 	virtual void				Annot_OnMouseExit(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags);
    184 
    185 	virtual FX_BOOL				Annot_OnLButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
    186 	virtual FX_BOOL				Annot_OnLButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
    187 	virtual FX_BOOL				Annot_OnLButtonDblClk(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
    188 
    189 	virtual FX_BOOL				Annot_OnMouseMove(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
    190 	virtual FX_BOOL				Annot_OnMouseWheel(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point);
    191 	virtual FX_BOOL				Annot_OnRButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
    192 	virtual FX_BOOL				Annot_OnRButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
    193 
    194 
    195 	virtual FX_BOOL				Annot_OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags);
    196 	virtual FX_BOOL				Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
    197 	virtual FX_BOOL				Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
    198 
    199 	virtual FX_BOOL				Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
    200 	virtual FX_BOOL				Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
    201 
    202 	virtual CPDF_Rect			Annot_OnGetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot);
    203 	virtual FX_BOOL				Annot_OnHitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point);
    204 
    205 private:
    206 	IPDFSDK_AnnotHandler*			GetAnnotHandler(const CFX_ByteString& sType) const;
    207 	CPDFSDK_Annot*				GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,FX_BOOL bNext);
    208 private:
    209 	CBA_AnnotHandlerArray		m_Handlers;
    210 	CFX_MapByteStringToPtr		m_mapType2Handler;
    211 	CPDFDoc_Environment*		m_pApp;
    212 };
    213 
    214 //#define CBF_Page2Accessible	 CFX_MapPtrTemplate<CPDFSDK_PageView*, IAccessible*>
    215 
    216 typedef int (*AI_COMPARE) (CPDFSDK_Annot* p1, CPDFSDK_Annot* p2);
    217 
    218 class CPDFSDK_AnnotIterator
    219 {
    220 protected:
    221 	CPDFSDK_Annot*	NextAnnot (const CPDFSDK_Annot* pCurrent) ;
    222 	CPDFSDK_Annot*	PrevAnnot (const CPDFSDK_Annot* pCurrent) ;
    223 	CPDFSDK_Annot*	NextAnnot(int& index ) ;
    224 	CPDFSDK_Annot*	PrevAnnot(int& index ) ;
    225 public:
    226     CPDFSDK_AnnotIterator(CPDFSDK_PageView * pPageView, FX_BOOL bReverse,
    227 		FX_BOOL bIgnoreTopmost=FALSE,FX_BOOL bCircle=FALSE,CFX_PtrArray* pList=NULL);
    228 	virtual CPDFSDK_Annot*	Next (const CPDFSDK_Annot* pCurrent) ;
    229 	virtual CPDFSDK_Annot*	Prev (const CPDFSDK_Annot* pCurrent) ;
    230 	virtual CPDFSDK_Annot*	Next(int& index ) ;
    231 	virtual CPDFSDK_Annot*	Prev(int& index ) ;
    232 	virtual int             Count(){return m_pIteratorAnnotList.GetSize();}
    233 
    234 	virtual FX_BOOL         InitIteratorAnnotList(CPDFSDK_PageView * pPageView,CFX_PtrArray* pList=NULL);
    235 
    236 	void					InsertSort(CFX_PtrArray &arrayList, AI_COMPARE pCompare);
    237 protected:
    238 	//	CFX_PtrList			 m_pIteratorAnnotList;
    239 	CFX_PtrArray	     m_pIteratorAnnotList;
    240 	FX_BOOL			     m_bReverse;
    241 	FX_BOOL              m_bIgnoreTopmost;
    242 	FX_BOOL              m_bCircle;
    243 };
    244 
    245 
    246 
    247 #endif
    248 
    249