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 FPDFSDK_INCLUDE_FORMFILLER_FFL_IFORMFILLER_H_
8#define FPDFSDK_INCLUDE_FORMFILLER_FFL_IFORMFILLER_H_
9
10#include "FormFiller.h"
11
12class CFFL_FormFiller;
13class CFFL_PrivateData;
14
15#define CFFL_Widget2Filler		CFX_MapPtrTemplate<CPDFSDK_Annot*, CFFL_FormFiller*>
16
17// #define IsALTpressed()			(GetKeyState(VK_MENU) < 0)
18// #define IsCTRLpressed()			(GetKeyState(VK_CONTROL) < 0)
19// #define IsSHIFTpressed()		(GetKeyState(VK_SHIFT)&0x8000)
20// #define IsINSERTpressed()		(GetKeyState(VK_INSERT) & 0x01)
21// #define VK_SHIFT          0x10
22// #define VK_CONTROL        0x11
23// #define VK_MENU           0x12
24// #define VK_RETURN         0x0D
25// #define VK_SPACE          0x20
26// #define VK_ESCAPE         0x1B
27
28
29
30class CFFL_IFormFiller :/* public IBA_AnnotFiller, */public IPWL_Filler_Notify//,
31//	public IUndo_EventHandler, public IClipboard_Handler
32{
33public:
34	CFFL_IFormFiller(CPDFDoc_Environment* pApp);
35	virtual ~CFFL_IFormFiller();
36
37	virtual FX_BOOL				Annot_HitTest(CPDFSDK_PageView* pPageView,CPDFSDK_Annot* pAnnot, CPDF_Point point);
38	virtual FX_RECT				GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot);
39	virtual void				OnDraw(CPDFSDK_PageView *pPageView, /*HDC hDC,*/ CPDFSDK_Annot* pAnnot,
40									CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
41									/*const CRect& rcWindow,*/ FX_DWORD dwFlags);
42
43
44	virtual void				OnCreate(CPDFSDK_Annot* pAnnot);
45	virtual void				OnLoad(CPDFSDK_Annot* pAnnot);
46	virtual void				OnDelete(CPDFSDK_Annot* pAnnot);
47
48	virtual void				OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
49	virtual void				OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
50
51	virtual FX_BOOL				OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
52	virtual FX_BOOL				OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
53	virtual FX_BOOL				OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
54	virtual FX_BOOL				OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
55	virtual FX_BOOL				OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point);
56	virtual FX_BOOL				OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
57	virtual FX_BOOL				OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
58	virtual FX_BOOL				OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
59
60	virtual FX_BOOL				OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags);
61	virtual FX_BOOL				OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
62
63	virtual	void				OnDeSelected(CPDFSDK_Annot* pAnnot);
64	virtual	void				OnSelected(CPDFSDK_Annot* pAnnot);
65
66	virtual FX_BOOL				OnSetFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag);
67	virtual FX_BOOL				OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
68
69public:
70	virtual void				QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax, FX_INT32 & nRet, FX_FLOAT & fPopupRet);
71	virtual void				OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_INT32 nKeyCode,
72										CFX_WideString & strChange, const CFX_WideString& strChangeEx,
73										int nSelStart, int nSelEnd,
74										FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag);
75	virtual void				OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_BOOL & bExit, FX_DWORD nFlag) ;
76
77	virtual void				OnSetWindowRect(void* pPrivateData, const CPDF_Rect & rcWindow);
78	virtual void				OnKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_INT32 nKeyCode, CFX_WideString & strChange,
79									const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit);
80
81public:
82	virtual void				BeforeUndo(CPDFSDK_Document* pDocument);
83	virtual void				BeforeRedo(CPDFSDK_Document* pDocument);
84	virtual void				AfterUndo(CPDFSDK_Document* pDocument);
85	virtual void				AfterRedo(CPDFSDK_Document* pDocument);
86
87public:
88	virtual FX_BOOL				CanCopy(CPDFSDK_Document* pDocument);
89	virtual FX_BOOL				CanCut(CPDFSDK_Document* pDocument);
90	virtual FX_BOOL				CanPaste(CPDFSDK_Document* pDocument);
91
92	virtual void				DoCopy(CPDFSDK_Document* pDocument);
93	virtual void				DoCut(CPDFSDK_Document* pDocument);
94	virtual void				DoPaste(CPDFSDK_Document* pDocument);
95
96public:
97	CFFL_FormFiller*			GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister);
98	void						RemoveFormFiller(CPDFSDK_Annot* pAnnot);
99
100	static FX_BOOL				IsVisible(CPDFSDK_Widget* pWidget);
101	static FX_BOOL				IsReadOnly(CPDFSDK_Widget* pWidget);
102	static FX_BOOL				IsFillingAllowed(CPDFSDK_Widget* pWidget);
103 	static FX_BOOL				IsValidAnnot(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot);
104
105	void						OnKeyStrokeCommit(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag);
106	void						OnValidate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag);
107
108	void						OnCalculate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag);
109	void						OnFormat(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag);
110	void						OnButtonUp(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit,FX_UINT nFlag);
111// 	static LRESULT CALLBACK		FFL_WndProc(
112// 									  int code,       // hook code
113// 									  WPARAM wParam,  // virtual-key code
114// 									  LPARAM lParam   // keystroke-message information
115// 										);
116// 	static MSG					GetLastMessage();
117	static int					GetCommitKey();
118	static FX_BOOL				GetKeyDown();
119
120
121public:
122// 	static MSG					g_Msg;
123// 	static HHOOK				m_hookSheet;
124
125private:
126	void						UnRegisterFormFiller(CPDFSDK_Annot* pAnnot);
127	void						SetFocusAnnotTab(CPDFSDK_Annot* pWidget, FX_BOOL bSameField, FX_BOOL bNext);
128
129private:
130	CPDFDoc_Environment*				m_pApp;
131	CFFL_Widget2Filler			m_Maps;
132	FX_BOOL						m_bNotifying;
133};
134
135class CFFL_PrivateData
136{
137public:
138	CPDFSDK_Widget*			pWidget;
139	CPDFSDK_PageView*	pPageView;
140	int					nWidgetAge;
141	int					nValueAge;
142};
143
144#endif  // FPDFSDK_INCLUDE_FORMFILLER_FFL_IFORMFILLER_H_
145
146