2e757238e6951118ca075a183ad4c50e140c29f9
[pdfium.git] / xfa / src / fxfa / src / app / xfa_ffwidget.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FXFA_FORMFILLER_WIDGET_IMP_H\r
8 #define _FXFA_FORMFILLER_WIDGET_IMP_H\r
9 class CXFA_FFPageView;\r
10 class CXFA_FFDocView;\r
11 class CXFA_FFDoc;\r
12 class CXFA_FFApp;\r
13 class CXFA_LayoutItem;\r
14 #define XFA_GOTO_POSITION_IF_FAIL(arg, pos) { if (!(arg)) goto pos; }\r
15 inline FX_FLOAT XFA_UnitPx2Pt(FX_FLOAT fPx, FX_FLOAT fDpi)\r
16 {\r
17     return fPx * 72.0f / fDpi;\r
18 }\r
19 #define XFA_FLOAT_PERCISION 0.001f\r
20 enum XFA_WIDGETITEM {\r
21     XFA_WIDGETITEM_Parent,\r
22     XFA_WIDGETITEM_FirstChild,\r
23     XFA_WIDGETITEM_NextSibling,\r
24     XFA_WIDGETITEM_PrevSibling,\r
25 };\r
26 class CXFA_CalcData\r
27 {\r
28 public:\r
29     CXFA_CalcData() : m_iRefCount(0) {}\r
30     ~CXFA_CalcData()\r
31     {\r
32         m_Globals.RemoveAll();\r
33     }\r
34     CFX_PtrArray                                m_Globals;\r
35     FX_INT32                                    m_iRefCount;\r
36 };\r
37 class CXFA_FFWidget : public CFX_PrivateData, public CXFA_ContentLayoutItemImpl\r
38 {\r
39 public:\r
40     CXFA_FFWidget(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);\r
41     virtual ~CXFA_FFWidget();\r
42     IXFA_PageView*      GetPageView();\r
43     void                        SetPageView(IXFA_PageView* pPageView);\r
44     void                        GetWidgetRect(CFX_RectF &rtWidget);\r
45     CFX_RectF           ReCacheWidgetRect();\r
46     FX_DWORD            GetStatus();\r
47     void                        ModifyStatus(FX_DWORD dwAdded, FX_DWORD dwRemoved);\r
48     virtual FX_BOOL                     GetBBox(CFX_RectF &rtBox, FX_DWORD dwStatus, FX_BOOL bDrawFocus = FALSE);\r
49     CXFA_WidgetAcc*     GetDataAcc();\r
50     FX_BOOL                     GetToolTip(CFX_WideString &wsToolTip);\r
51     virtual void                        RenderWidget(CFX_Graphics* pGS, CFX_Matrix* pMatrix = NULL, FX_DWORD dwStatus = 0, FX_INT32 iRotate = 0);\r
52 \r
53     virtual     FX_BOOL                 IsLoaded();\r
54     virtual FX_BOOL                     LoadWidget();\r
55     virtual void                        UnloadWidget();\r
56     virtual FX_BOOL                     LayoutWidget();\r
57     virtual FX_BOOL                     UpdateFWLData();\r
58     virtual void                        UpdateWidgetProperty();\r
59     virtual FX_BOOL             OnMouseEnter();\r
60     virtual FX_BOOL             OnMouseExit();\r
61     virtual FX_BOOL             OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
62     virtual FX_BOOL             OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
63     virtual FX_BOOL             OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
64     virtual FX_BOOL             OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
65     virtual FX_BOOL             OnMouseWheel(FX_DWORD dwFlags, FX_SHORT zDelta, FX_FLOAT fx, FX_FLOAT fy);\r
66     virtual FX_BOOL             OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
67     virtual FX_BOOL             OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
68     virtual FX_BOOL             OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
69 \r
70     virtual FX_BOOL             OnSetFocus(CXFA_FFWidget* pOldWidget);\r
71     virtual FX_BOOL             OnKillFocus(CXFA_FFWidget* pNewWidget);\r
72     virtual FX_BOOL             OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags);\r
73     virtual FX_BOOL             OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags);\r
74     virtual FX_BOOL             OnChar(FX_DWORD dwChar, FX_DWORD dwFlags);\r
75     virtual     FX_DWORD        OnHitTest(FX_FLOAT fx, FX_FLOAT fy);\r
76     virtual FX_BOOL             OnSetCursor(FX_FLOAT fx, FX_FLOAT fy);\r
77     virtual FX_BOOL             CanUndo()\r
78     {\r
79         return FALSE;\r
80     }\r
81     virtual FX_BOOL             CanRedo()\r
82     {\r
83         return FALSE;\r
84     }\r
85     virtual FX_BOOL             Undo()\r
86     {\r
87         return FALSE;\r
88     }\r
89     virtual FX_BOOL             Redo()\r
90     {\r
91         return FALSE;\r
92     }\r
93     virtual FX_BOOL             CanCopy()\r
94     {\r
95         return FALSE;\r
96     }\r
97     virtual FX_BOOL             CanCut()\r
98     {\r
99         return FALSE;\r
100     }\r
101     virtual FX_BOOL             CanPaste()\r
102     {\r
103         return FALSE;\r
104     }\r
105     virtual FX_BOOL             CanSelectAll()\r
106     {\r
107         return FALSE;\r
108     }\r
109     virtual FX_BOOL             CanDelete()\r
110     {\r
111         return CanCut();\r
112     }\r
113     virtual FX_BOOL             CanDeSelect()\r
114     {\r
115         return CanCopy();\r
116     }\r
117     virtual FX_BOOL             Copy(CFX_WideString &wsCopy)\r
118     {\r
119         return FALSE;\r
120     }\r
121     virtual FX_BOOL             Cut(CFX_WideString &wsCut)\r
122     {\r
123         return FALSE;\r
124     }\r
125     virtual FX_BOOL             Paste(const CFX_WideString &wsPaste)\r
126     {\r
127         return FALSE;\r
128     }\r
129     virtual FX_BOOL             SelectAll()\r
130     {\r
131         return FALSE;\r
132     }\r
133     virtual FX_BOOL             Delete()\r
134     {\r
135         return FALSE;\r
136     }\r
137     virtual FX_BOOL             DeSelect()\r
138     {\r
139         return FALSE;\r
140     }\r
141     virtual FX_BOOL             GetSuggestWords(CFX_PointF pointf, CFX_ByteStringArray &sSuggest)\r
142     {\r
143         return FALSE;\r
144     }\r
145     virtual FX_BOOL             ReplaceSpellCheckWord(CFX_PointF pointf, FX_BSTR bsReplace)\r
146     {\r
147         return FALSE;\r
148     }\r
149     CXFA_FFDocView*             GetDocView();\r
150     void                                SetDocView(CXFA_FFDocView* pDocView)\r
151     {\r
152         m_pDocView = pDocView;\r
153     }\r
154     CXFA_FFDoc*                 GetDoc();\r
155     CXFA_FFApp*                 GetApp();\r
156     IXFA_AppProvider*   GetAppProvider();\r
157     void                                InvalidateWidget(const CFX_RectF* pRect = NULL);\r
158     void                                AddInvalidateRect(const CFX_RectF* pRect = NULL);\r
159     FX_BOOL                             GetCaptionText(CFX_WideString &wsCap);\r
160     FX_BOOL                             IsFocused();\r
161     CXFA_LayoutItem*    GetLayoutItem()\r
162     {\r
163         return (CXFA_LayoutItem*)(CXFA_ContentLayoutItemImpl*)this;\r
164     }\r
165     void                                Rotate2Normal(FX_FLOAT &fx, FX_FLOAT &fy);\r
166     void                                GetRotateMatrix(CFX_Matrix &mt);\r
167     FX_BOOL                             IsLayoutRectEmpty();\r
168     CXFA_FFWidget*              GetParent();\r
169     FX_BOOL                             IsAncestorOf(CXFA_FFWidget* pWidget);\r
170 \r
171 protected:\r
172     virtual     FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy);\r
173     void        DrawBorder(CFX_Graphics* pGS, CXFA_Box box, const CFX_RectF& rtBorder, CFX_Matrix* pMatrix, FX_DWORD dwFlags = 0);\r
174     void        GetMinMaxWidth(FX_FLOAT fMinWidth, FX_FLOAT fMaxWidth);\r
175     void        GetMinMaxHeight(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight);\r
176     void        GetRectWithoutRotate(CFX_RectF &rtWidget);\r
177     FX_BOOL IsMatchVisibleStatus(FX_DWORD dwStatus);\r
178 \r
179     void                EventKillFocus();\r
180     FX_BOOL             IsButtonDown();\r
181     void                SetButtonDown(FX_BOOL bSet);\r
182     CXFA_FFDocView*             m_pDocView;\r
183     CXFA_FFPageView*    m_pPageView;\r
184     CXFA_WidgetAcc*             m_pDataAcc;\r
185     CFX_RectF                   m_rtWidget;\r
186 };\r
187 FX_INT32                XFA_StrokeTypeSetLineDash(CFX_Graphics* pGraphics, FX_INT32 iStrokeType, FX_INT32 iCapType);\r
188 CFX_GraphStateData::LineCap XFA_LineCapToFXGE(FX_INT32 iLineCap);\r
189 void                    XFA_DrawImage(CFX_Graphics* pGS, const CFX_RectF &rtImage, CFX_Matrix* pMatrix, CFX_DIBitmap* pDIBitmap, FX_INT32 iAspect, FX_INT32 iImageXDpi, FX_INT32 iImageYDpi, FX_INT32 iHorzAlign = XFA_ATTRIBUTEENUM_Left, FX_INT32 iVertAlign = XFA_ATTRIBUTEENUM_Top);\r
190 CFX_DIBitmap*   XFA_LoadImageData(CXFA_FFDoc *pDoc, CXFA_Image *pImage, FX_BOOL &bNameImage, FX_INT32 &iImageXDpi, FX_INT32 &iImageYDpi);\r
191 CFX_DIBitmap*   XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead, FXCODEC_IMAGE_TYPE type, FX_INT32 &iImageXDpi, FX_INT32 &iImageYDpi);\r
192 FXCODEC_IMAGE_TYPE XFA_GetImageType(FX_WSTR wsType);\r
193 FX_LPSTR                XFA_Base64Encode(FX_LPCBYTE buf, FX_INT32 buf_len);\r
194 void                    XFA_RectWidthoutMargin(CFX_RectF &rt, const CXFA_Margin &mg, FX_BOOL bUI = FALSE);\r
195 FX_FLOAT                XFA_GetEdgeThickness(const CXFA_StrokeArray &strokes, FX_BOOL b3DStyle, FX_INT32 nIndex);\r
196 CXFA_FFWidget*  XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem);\r
197 FX_BOOL                 XFA_IsCreateWidget(XFA_ELEMENT iType);\r
198 #define XFA_DRAWBOX_ForceRound  1\r
199 #define XFA_DRAWBOX_Lowered3D   2\r
200 void XFA_DrawBox(CXFA_Box box, CFX_Graphics* pGS, const CFX_RectF &rtWidget, CFX_Matrix* pMatrix, FX_DWORD dwFlags = 0);\r
201 #endif\r