Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa_test / FormFiller_Test / ReaderVCView.h
1 // ReaderVCView.h : interface of the CReaderVCView class\r
2 //\r
3 /////////////////////////////////////////////////////////////////////////////\r
4 \r
5 #if !defined(AFX_READERVCVIEW_H__9AFC449C_26D0_4906_ABAE_1298871862E2__INCLUDED_)\r
6 #define AFX_READERVCVIEW_H__9AFC449C_26D0_4906_ABAE_1298871862E2__INCLUDED_\r
7 \r
8 #if _MSC_VER > 1000\r
9 #pragma once\r
10 #endif // _MSC_VER > 1000\r
11 \r
12 #include "ExportPage.h"\r
13 #include "afxtempl.h"\r
14 #include <wininet.h>\r
15 #include <afxinet.h>\r
16 #include <afxctl.h>\r
17 \r
18 typedef struct  \r
19 {\r
20         CString m_strFind;\r
21         int m_nFlag;\r
22         int m_nDirection;\r
23         BOOL m_bFirst;\r
24         wchar_t *m_pCurFindBuf; //unicode code\r
25         int m_nStartPageIndex; // the page index for starting find\r
26         int m_nStartCharIndex; //start index\r
27 }FindInfo;\r
28 \r
29 typedef struct  \r
30 {\r
31         double m_dbLeft;\r
32         double m_dbTop;\r
33         double m_dbRight;\r
34         double m_dbBottom;\r
35 }PDFRect;\r
36 \r
37 #define IsALTpressed()                  (GetKeyState(VK_MENU) < 0)\r
38 #define IsCTRLpressed()                 (GetKeyState(VK_CONTROL) < 0)\r
39 #define IsSHIFTpressed()                (GetKeyState(VK_SHIFT)&0x8000)\r
40 #define IsINSERTpressed()               (GetKeyState(VK_INSERT) & 0x01) \r
41 // void Sample_PageToDevice(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page,double page_x,double page_y, int* device_x, int* device_y);\r
42 // \r
43 // void Sample_Invalidate(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page, double left, double top, double right, double bottom);\r
44 // \r
45 // void Sample_DeviceToPage(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page,int device_x, int device_y, double* page_x, double* page_y);\r
46 // \r
47 // void Sample_SetCaret(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page,double page_x, double page_y, int nWidth, int nHeight);\r
48 // \r
49 // void Sample_Release(struct _FPDF_FORMFILLINFO* pThis);\r
50 // \r
51 // \r
52 // int Sample_SetTimer(struct _FPDF_FORMFILLINFO* pThis, int uElapse, TimerCallback lpTimerFunc);\r
53 // \r
54 // void Sample_KillTimer(struct _FPDF_FORMFILLINFO* pThis,int nID);\r
55 // \r
56 // void Sample_SetCursor(struct _FPDF_FORMFILLINFO* pThis,int nCursorType);\r
57 // \r
58 // void Sample_OnChange(struct _FPDF_FORMFILLINFO* pThis);\r
59 // \r
60 // FPDF_BOOL    Sample_IsSHIFTKeyDown(struct _FPDF_FORMFILLINFO* pThis);\r
61 // \r
62 // FPDF_BOOL    Sample_IsCTRLKeyDown(struct _FPDF_FORMFILLINFO* pThis);\r
63 // \r
64 // FPDF_BOOL    Sample_IsALTKeyDown(struct _FPDF_FORMFILLINFO* pThis) ;\r
65 // \r
66 // FPDF_BOOL    Sample_IsINSERTKeyDown(struct _FPDF_FORMFILLINFO* pThis) ;\r
67 class CReaderVCDoc;\r
68 \r
69 typedef unsigned long                   FX_DWORD;\r
70 static int CALLBACK FontEnumProc(const LOGFONTA *plf, const TEXTMETRICA *lpntme, FX_DWORD FontType, LPARAM lParam) \r
71 {\r
72         FPDF_AddInstalledFont((void*)lParam, plf->lfFaceName, plf->lfCharSet);\r
73         return 1;\r
74 }\r
75 #define FXDWORD_FROM_MSBFIRST2(i) (((unsigned char)(i) << 24) | ((unsigned char)((i) >> 8) << 16) | ((unsigned char)((i) >> 16) << 8) | (unsigned char)((i) >> 24))\r
76 class CSampleFontInfo : public FPDF_SYSFONTINFO\r
77 {\r
78 public:\r
79         CSampleFontInfo()\r
80         {\r
81                 m_hDC = CreateDCA("DISPLAY", NULL, NULL, NULL);\r
82         }\r
83         \r
84         HDC             m_hDC;\r
85         \r
86         void ReleaseImpl()\r
87         {\r
88                 DeleteDC(m_hDC);\r
89                 delete this;\r
90         }\r
91         \r
92         void EnumFontsImpl(void* pMapper) \r
93         {\r
94                 LOGFONTA lf;\r
95                 lf.lfCharSet = DEFAULT_CHARSET;\r
96                 lf.lfFaceName[0] = 0;\r
97                 lf.lfPitchAndFamily = 0;\r
98                 ::EnumFontFamiliesExA(m_hDC, &lf, FontEnumProc, (LPARAM)pMapper, 0);\r
99         }\r
100         \r
101         void* MapFontImpl(int weight, int bItalic, int charset, int pitch_family, const char* face, int* bExact)\r
102         {\r
103                 return ::CreateFontA(-10, 0, 0, 0, weight, bItalic, 0, 0, \r
104                         charset, OUT_TT_ONLY_PRECIS, 0, 0, pitch_family, face);\r
105         }\r
106         \r
107         unsigned long GetFontDataImpl(void* hFont, unsigned int table, unsigned char* buffer, unsigned long buf_size)\r
108         {\r
109                 HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);\r
110                 buf_size = ::GetFontData(m_hDC, FXDWORD_FROM_MSBFIRST2(table), 0, buffer, buf_size);\r
111                 ::SelectObject(m_hDC, hOldFont);\r
112                 if (buf_size == GDI_ERROR) return 0;\r
113                 return buf_size;\r
114         }\r
115         \r
116         unsigned long GetFaceNameImpl(void* hFont, char* buffer, unsigned long buf_size)\r
117         {\r
118                 HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);\r
119                 unsigned long ret = ::GetTextFaceA(m_hDC, buf_size, buffer);\r
120                 ::SelectObject(m_hDC, hOldFont);\r
121                 if (buf_size == GDI_ERROR) return 0;\r
122                 return ret;\r
123         }\r
124         \r
125         int GetFontCharsetImpl(void* hFont)\r
126         {\r
127                 TEXTMETRIC tm;\r
128                 HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);\r
129                 ::GetTextMetrics(m_hDC, &tm);\r
130                 ::SelectObject(m_hDC, hOldFont);\r
131                 return tm.tmCharSet;\r
132         }\r
133         \r
134         void DeleteFontImpl(void* hFont)\r
135         {\r
136                 ::DeleteObject(hFont);\r
137         }\r
138 };\r
139 \r
140 typedef struct _FPDF_FILE\r
141 {\r
142         FPDF_FILEHANDLER fileHandler;\r
143         FILE* file;\r
144 }FPDF_FILE;\r
145 \r
146 class CReaderVCView : public CView, public FPDF_FORMFILLINFO\r
147 {\r
148 protected: // create from serialization only\r
149         CReaderVCView();\r
150         DECLARE_DYNCREATE(CReaderVCView)\r
151 \r
152 // Attributes\r
153 public:\r
154         CReaderVCDoc* GetDocument();\r
155         CChildFrame *m_pFram;\r
156 // Operations\r
157 public:\r
158 \r
159 // Overrides\r
160         // ClassWizard generated virtual function overrides\r
161         //{{AFX_VIRTUAL(CReaderVCView)\r
162         public:\r
163         virtual void OnDraw(CDC* pDC);  // overridden to draw this view\r
164         virtual BOOL PreCreateWindow(CREATESTRUCT& cs);\r
165         virtual void OnInitialUpdate();\r
166         virtual BOOL PreTranslateMessage(MSG* pMsg);\r
167         protected:\r
168         virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);\r
169         virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);\r
170         virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);\r
171         virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);\r
172         //}}AFX_VIRTUAL\r
173 \r
174 // Implementation\r
175 public:\r
176         CExportPage* m_pExportPageDlg; \r
177         FPDF_PAGE GetPage(){ return m_pPage;}\r
178         void SyncScroll();\r
179         CRect SelectSegment(CPoint pt_lt, CPoint pt_rb);\r
180         void GetRects(int nStart, int nEnd);\r
181         void CreateCaret(CPoint pt);\r
182         BOOL GetCharIndexByPoint(CPoint pt, int &nIndex);\r
183         void LoadMyCursor(int nflag = 0);\r
184         void DeleteAllRect();\r
185         void DrawAllRect(CDC *pDC);\r
186         void DrawReverse(CDC *pDC, CRect rect);\r
187         void FindNext(int nDirection);\r
188         void FindText(CString strFind, BOOL bCase, BOOL bWholeword,  int  Direction);\r
189         void ScalPage(double dbScal);\r
190         void GotoPage(int index);\r
191         BOOL SetPDFDocument(FPDF_DOCUMENT pDoc, int nPageNum);\r
192         void DrawPage(int nRotate, CDC *pDC);\r
193         void SetPageMetrics(FPDF_PAGE pPage);\r
194 \r
195         void SetScalFactor(double dbScal);\r
196         void GetNewPageSize(int &nsizeX, int &nsizeY);\r
197         BOOL LoadPDFPage(FPDF_DOCUMENT doc, int nIndex, CPoint pos = CPoint(0,0));\r
198 \r
199         FPDF_DOCUMENT GetPDFDoc(){ return m_pDoc;}\r
200         int GetTotalPages(){ return m_nTotalPage;}\r
201         BOOL  DeviceToPage(CPoint pt, double& page_x, double& page_y);\r
202         BOOL  PageToDevice(double page_x, double page_y, CPoint& pt);\r
203         int  GetCurrentPageIndex() { return m_nPageIndex; }\r
204         static BOOL HttpDataPut(CString csData, CString csAppName, CString csObject, CString csServer, \r
205                 CString csUserName, CString csPassword, INTERNET_PORT nPort, BOOL IsHTTPS);\r
206         static BOOL NeedAuth(CHttpFile *pHttpFile);\r
207         static BOOL HttpDataPost(CString csData, CString csAppName, CString csObject, CString csServer, CString csUserName, \r
208                 CString csPassword, INTERNET_PORT nPort , BOOL IsHTTPS, CString csContentType, CString csAddHeader, CString &csResponse);\r
209         static void     CreateLocalPath(CString &csPath);\r
210 \r
211         virtual ~CReaderVCView();\r
212 #ifdef _DEBUG\r
213         virtual void AssertValid() const;\r
214         virtual void Dump(CDumpContext& dc) const;\r
215 #endif\r
216 \r
217 protected:\r
218 public:\r
219         void    PageToDeviceImpl(FPDF_PAGE page,double page_x,double page_y, int* device_x, int* device_y);\r
220         void    DeviceToPageImpl(FPDF_PAGE page,int device_x, int device_y, double* page_x, double* page_y);\r
221         void    InvalidateImpl(FPDF_PAGE page, double left, double top, double right, double bottom);\r
222         void    OutputSelectedRectImpl(FPDF_PAGE page, double left, double top, double right, double bottom);\r
223         void    SetCaretImpl(FPDF_PAGE page,double page_x, double page_y, int nWidth, int nHeight);\r
224         void    ReleaseImpl();\r
225         int     SetTimerImpl(int uElapse, TimerCallback lpTimerFunc);\r
226         void    KillTimerImpl(int nID);\r
227         FPDF_SYSTEMTIME GetLocalTimeImpl();\r
228         void    SetCurorImpl(int nCursorType);  \r
229         void    ExecuteNamedActionImpl(FPDF_BYTESTRING namedaction);\r
230         void    OnChangeImpl();\r
231         bool    IsSHIFTKeyDownImpl();\r
232         bool    IsCTRLKeyDownImpl();\r
233         bool    IsALTKeyDownImpl();\r
234         bool    IsINSERTKeyDownImpl();\r
235         BOOL    SubmitFormImpl(void* pBuffer, int nLength, CString strURL);\r
236         FPDF_PAGE GetPageImpl(FPDF_DOCUMENT document,int nPageIndex);\r
237         int             GetRotationImpl(FPDF_PAGE page);\r
238         CString GetFilePath();\r
239         FPDF_PAGE       GetCurrentPageImpl(FPDF_DOCUMENT document);\r
240 //      friend FPDF_DOCUMENT _FPDF_GetCurDocument(struct _FPDF_FORMFILLINFO* pThis);\r
241 //      friend FPDF_PAGE _FPDF_GetCurPage(struct _FPDF_FORMFILLINFO* pThis);\r
242 private:\r
243 //      FPDF_APP        m_App;\r
244 //      FPDF_FORMFILLINFO m_formFiledInfo;\r
245 private:\r
246 //      FPDF_APP GetFPDFApp() {return m_App;}\r
247         unsigned int ComposeFlag();\r
248 private:\r
249         CMap<int, int, FPDF_PAGE, FPDF_PAGE> m_pageMap;\r
250         FPDF_FORMHANDLE m_pApp;\r
251         FPDF_BITMAP                     m_bmp;\r
252         //for render pdf\r
253         FPDF_DOCUMENT           m_pDoc;\r
254         FPDF_PAGE                       m_pPage;\r
255         int                                     m_nTotalPage;\r
256         int                                     m_nRotateFlag;\r
257         double                          m_dbScaleFactor;\r
258         int                                     m_nPageIndex;\r
259         double                          m_dbPageWidth;\r
260         double                          m_dbPageHeight;\r
261         int                                     m_nStartX;\r
262         int                                     m_nStartY;\r
263         int                                     m_nActualSizeX;\r
264         int                                     m_nActualSizeY;\r
265 \r
266         //for search text\r
267         FPDF_TEXTPAGE           m_pTextPage;\r
268         FindInfo                        m_FindInfo;\r
269         FPDF_SCHHANDLE          m_pSCHHandle;\r
270         PDFRect *                       m_rtFind;\r
271         int                                     m_nRectNum;\r
272         \r
273         //for select text\r
274         BOOL m_bSelect;\r
275         BOOL m_bHand;\r
276         BOOL m_bSnap;\r
277         BOOL m_bHasChar; //whether can get a char when left button be clicked\r
278         CPoint m_ptLBDown;\r
279         CPoint m_ptLBUp;\r
280         CPoint m_ptOld;\r
281 \r
282         int m_nStartIndex; //char index\r
283         int m_nOldIndex;\r
284         int m_nEndIndex;\r
285         CArray <PDFRect, PDFRect> m_rtArray;\r
286         CRect m_rtOld;\r
287         \r
288         //\r
289         int m_nPosH;\r
290         int m_nPosV;\r
291 \r
292         // for links\r
293         FPDF_PAGELINK m_pLink;\r
294 \r
295         BOOL m_bBookmark;\r
296 \r
297 public:\r
298         wchar_t* m_pwsResponse;\r
299 \r
300 private:\r
301 \r
302         CArray<CRect, CRect&> m_SelectArray;\r
303         static CMap<int, int,TimerCallback, TimerCallback> m_mapTimerFuns;\r
304 public:\r
305         static void CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime )\r
306         {\r
307                 TimerCallback callback =  NULL;\r
308                 m_mapTimerFuns.Lookup(idEvent, callback);\r
309                 if(callback)\r
310                         (*callback)(idEvent);\r
311         }\r
312 // Generated message map functions\r
313 protected:\r
314         //{{AFX_MSG(CReaderVCView)\r
315         afx_msg void OnDocFirstpage();\r
316         afx_msg void OnDocGotopage();\r
317         afx_msg void OnDocLastpage();\r
318         afx_msg void OnDocNextpage();\r
319         afx_msg void OnDocPrepage();\r
320         afx_msg void OnClockwise();\r
321         afx_msg void OnCounterclockwise();\r
322         afx_msg void OnViewActualSize();\r
323         afx_msg void OnViewFitPage();\r
324         afx_msg void OnViewFitWidth();\r
325         afx_msg void OnViewZoomIn();\r
326         afx_msg void OnViewZoomOut();\r
327         afx_msg void OnViewZoomTo();\r
328         afx_msg void OnEditFind();\r
329         afx_msg void OnFilePrint();\r
330         afx_msg void OnLButtonDown(UINT nFlags, CPoint point);\r
331         afx_msg void OnLButtonUp(UINT nFlags, CPoint point);\r
332         afx_msg void OnMouseMove(UINT nFlags, CPoint point);\r
333         afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);\r
334         afx_msg void OnToolSnapshot();\r
335         afx_msg void OnToolSelect();\r
336         afx_msg void OnToolHand();\r
337         afx_msg void OnToolPdf2txt();\r
338         afx_msg void OnSize(UINT nType, int cx, int cy);\r
339         afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);\r
340         afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);\r
341         afx_msg void OnToolExtractlinks();\r
342         afx_msg void OnDestroy();\r
343         afx_msg void OnUpdateDocFirstpage(CCmdUI* pCmdUI);\r
344         afx_msg void OnUpdateDocLastpage(CCmdUI* pCmdUI);\r
345         afx_msg void OnUpdateDocNextpage(CCmdUI* pCmdUI);\r
346         afx_msg void OnUpdateDocPrepage(CCmdUI* pCmdUI);\r
347         afx_msg void OnUpdateToolHand(CCmdUI* pCmdUI);\r
348         afx_msg void OnUpdateToolSnapshot(CCmdUI* pCmdUI);\r
349         afx_msg void OnUpdateToolSelect(CCmdUI* pCmdUI);\r
350         afx_msg void OnViewBookmark();\r
351         afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);\r
352         afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);\r
353         afx_msg void OnEditCopy();\r
354         afx_msg void OnRenderbitmap();\r
355         afx_msg void OnExportPdfToBitmap();\r
356         afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);\r
357         afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);\r
358         afx_msg void OnFileSave();\r
359         afx_msg void OnTestJS();\r
360         afx_msg void OnPrintMetalfile();\r
361         //}}AFX_MSG\r
362         DECLARE_MESSAGE_MAP()\r
363 };\r
364 \r
365 #ifndef _DEBUG  // debug version in ReaderVCView.cpp\r
366 inline CReaderVCDoc* CReaderVCView::GetDocument()\r
367    { return (CReaderVCDoc*)m_pDocument; }\r
368 #endif\r
369 \r
370 /////////////////////////////////////////////////////////////////////////////\r
371 \r
372 //{{AFX_INSERT_LOCATION}}\r
373 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.\r
374 \r
375 #endif // !defined(AFX_READERVCVIEW_H__9AFC449C_26D0_4906_ABAE_1298871862E2__INCLUDED_)\r