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
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
\r
7 #include "../../../foxitlib.h"
\r
8 #include "../common/xfa_common.h"
\r
9 #include "xfa_fwladapter.h"
\r
10 #include "xfa_ffwidgethandler.h"
\r
11 #include "xfa_ffwidget.h"
\r
12 #include "xfa_fffield.h"
\r
13 #include "xfa_ffchoicelist.h"
\r
14 #include "xfa_ffdoc.h"
\r
15 #include "xfa_ffdocview.h"
\r
16 CXFA_FFWidgetHandler::CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView)
\r
17 : m_pDocView(pDocView)
\r
20 CXFA_FFWidgetHandler::~CXFA_FFWidgetHandler()
\r
23 IXFA_PageView* CXFA_FFWidgetHandler::GetPageView(XFA_HWIDGET hWidget)
\r
25 return ((CXFA_FFWidget*)hWidget)->GetPageView();
\r
27 void CXFA_FFWidgetHandler::GetRect(XFA_HWIDGET hWidget, CFX_RectF &rt)
\r
29 ((CXFA_FFWidget*)hWidget)->GetWidgetRect(rt);
\r
31 FX_DWORD CXFA_FFWidgetHandler::GetStatus(XFA_HWIDGET hWidget)
\r
33 return ((CXFA_FFWidget*)hWidget)->GetStatus();
\r
35 FX_BOOL CXFA_FFWidgetHandler::GetBBox(XFA_HWIDGET hWidget, CFX_RectF &rtBox, FX_DWORD dwStatus, FX_BOOL bDrawFocus)
\r
37 return ((CXFA_FFWidget*)hWidget)->GetBBox(rtBox, dwStatus, bDrawFocus);
\r
39 CXFA_WidgetAcc* CXFA_FFWidgetHandler::GetDataAcc(XFA_HWIDGET hWidget)
\r
41 return ((CXFA_FFWidget*)hWidget)->GetDataAcc();
\r
43 void CXFA_FFWidgetHandler::GetName(XFA_HWIDGET hWidget, CFX_WideString &wsName, FX_INT32 iNameType )
\r
45 ((CXFA_FFWidget*)hWidget)->GetDataAcc()->GetName(wsName, iNameType);
\r
47 FX_BOOL CXFA_FFWidgetHandler::GetToolTip(XFA_HWIDGET hWidget, CFX_WideString &wsToolTip)
\r
49 return ((CXFA_FFWidget*)hWidget)->GetToolTip(wsToolTip);
\r
51 void CXFA_FFWidgetHandler::SetPrivateData(XFA_HWIDGET hWidget, FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback)
\r
53 ((CXFA_FFWidget*)hWidget)->SetPrivateData(module_id, pData, callback);
\r
55 FX_LPVOID CXFA_FFWidgetHandler::GetPrivateData(XFA_HWIDGET hWidget, FX_LPVOID module_id)
\r
57 return ((CXFA_FFWidget*)hWidget)->GetPrivateData(module_id);
\r
59 FX_BOOL CXFA_FFWidgetHandler::OnMouseEnter(XFA_HWIDGET hWidget)
\r
61 m_pDocView->LockUpdate();
\r
62 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnMouseEnter();
\r
63 m_pDocView->UnlockUpdate();
\r
64 m_pDocView->UpdateDocView();
\r
67 FX_BOOL CXFA_FFWidgetHandler::OnMouseExit(XFA_HWIDGET hWidget)
\r
69 m_pDocView->LockUpdate();
\r
70 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnMouseExit();
\r
71 m_pDocView->UnlockUpdate();
\r
72 m_pDocView->UpdateDocView();
\r
75 FX_BOOL CXFA_FFWidgetHandler::OnLButtonDown(XFA_HWIDGET hWidget, FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy)
\r
77 m_pDocView->LockUpdate();
\r
78 ((CXFA_FFWidget*)hWidget)->Rotate2Normal(fx, fy);
\r
79 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnLButtonDown(dwFlags, fx, fy);
\r
80 if (bRet && m_pDocView->SetFocus(hWidget)) {
\r
81 ((CXFA_FFDoc*)m_pDocView->GetDoc())->GetDocProvider()->SetFocusWidget((XFA_HDOC)m_pDocView->GetDoc(), (XFA_HWIDGET)hWidget);
\r
83 m_pDocView->UnlockUpdate();
\r
84 m_pDocView->UpdateDocView();
\r
87 FX_BOOL CXFA_FFWidgetHandler::OnLButtonUp(XFA_HWIDGET hWidget, FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy)
\r
89 m_pDocView->LockUpdate();
\r
90 ((CXFA_FFWidget*)hWidget)->Rotate2Normal(fx, fy);
\r
91 m_pDocView->m_bLayoutEvent = TRUE;
\r
92 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnLButtonUp(dwFlags, fx, fy);
\r
93 m_pDocView->UnlockUpdate();
\r
94 m_pDocView->UpdateDocView();
\r
97 FX_BOOL CXFA_FFWidgetHandler::OnLButtonDblClk(XFA_HWIDGET hWidget, FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy)
\r
99 ((CXFA_FFWidget*)hWidget)->Rotate2Normal(fx, fy);
\r
100 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnLButtonDblClk(dwFlags, fx, fy);
\r
101 m_pDocView->RunInvalidate();
\r
104 FX_BOOL CXFA_FFWidgetHandler::OnMouseMove(XFA_HWIDGET hWidget, FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy)
\r
106 ((CXFA_FFWidget*)hWidget)->Rotate2Normal(fx, fy);
\r
107 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnMouseMove(dwFlags, fx, fy);
\r
108 m_pDocView->RunInvalidate();
\r
111 FX_BOOL CXFA_FFWidgetHandler::OnMouseWheel(XFA_HWIDGET hWidget, FX_DWORD dwFlags, FX_SHORT zDelta, FX_FLOAT fx, FX_FLOAT fy)
\r
113 ((CXFA_FFWidget*)hWidget)->Rotate2Normal(fx, fy);
\r
114 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnMouseWheel(dwFlags, zDelta, fx, fy);
\r
115 m_pDocView->RunInvalidate();
\r
118 FX_BOOL CXFA_FFWidgetHandler::OnRButtonDown(XFA_HWIDGET hWidget, FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy)
\r
120 ((CXFA_FFWidget*)hWidget)->Rotate2Normal(fx, fy);
\r
121 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnRButtonDown(dwFlags, fx, fy);
\r
122 if (bRet && m_pDocView->SetFocus(hWidget)) {
\r
123 ((CXFA_FFDoc*)m_pDocView->GetDoc())->GetDocProvider()->SetFocusWidget((XFA_HDOC)m_pDocView->GetDoc(), (XFA_HWIDGET)hWidget);
\r
125 m_pDocView->RunInvalidate();
\r
128 FX_BOOL CXFA_FFWidgetHandler::OnRButtonUp(XFA_HWIDGET hWidget, FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy)
\r
130 ((CXFA_FFWidget*)hWidget)->Rotate2Normal(fx, fy);
\r
131 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnRButtonUp(dwFlags, fx, fy);
\r
132 m_pDocView->RunInvalidate();
\r
135 FX_BOOL CXFA_FFWidgetHandler::OnRButtonDblClk(XFA_HWIDGET hWidget, FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy)
\r
137 ((CXFA_FFWidget*)hWidget)->Rotate2Normal(fx, fy);
\r
138 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnRButtonDblClk(dwFlags, fx, fy);
\r
139 m_pDocView->RunInvalidate();
\r
142 FX_BOOL CXFA_FFWidgetHandler::OnKeyDown(XFA_HWIDGET hWidget, FX_DWORD dwKeyCode, FX_DWORD dwFlags)
\r
144 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnKeyDown(dwKeyCode, dwFlags);
\r
145 m_pDocView->RunInvalidate();
\r
146 m_pDocView->UpdateDocView();
\r
149 FX_BOOL CXFA_FFWidgetHandler::OnKeyUp(XFA_HWIDGET hWidget, FX_DWORD dwKeyCode, FX_DWORD dwFlags)
\r
151 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnKeyUp(dwKeyCode, dwFlags);
\r
152 m_pDocView->RunInvalidate();
\r
155 FX_BOOL CXFA_FFWidgetHandler::OnChar(XFA_HWIDGET hWidget, FX_DWORD dwChar, FX_DWORD dwFlags)
\r
157 FX_BOOL bRet = ((CXFA_FFWidget*)hWidget)->OnChar(dwChar, dwFlags);
\r
158 m_pDocView->RunInvalidate();
\r
161 FX_DWORD CXFA_FFWidgetHandler::OnHitTest(XFA_HWIDGET hWidget, FX_FLOAT fx, FX_FLOAT fy)
\r
163 if (!(((CXFA_FFWidget*)hWidget)->GetStatus() & XFA_WIDGETSTATUS_Visible)) {
\r
164 return FWL_WGTHITTEST_Unknown;
\r
166 ((CXFA_FFWidget*)hWidget)->Rotate2Normal(fx, fy);
\r
167 return ((CXFA_FFWidget*)hWidget)->OnHitTest(fx, fy);
\r
169 FX_BOOL CXFA_FFWidgetHandler::OnSetCursor(XFA_HWIDGET hWidget, FX_FLOAT fx, FX_FLOAT fy)
\r
171 ((CXFA_FFWidget*)hWidget)->Rotate2Normal(fx, fy);
\r
172 return ((CXFA_FFWidget*)hWidget)->OnSetCursor(fx, fy);
\r
174 void CXFA_FFWidgetHandler::RenderWidget(XFA_HWIDGET hWidget, CFX_Graphics* pGS, CFX_Matrix* pMatrix , FX_BOOL bHighlight)
\r
176 ((CXFA_FFWidget*)hWidget)->RenderWidget(pGS, pMatrix, bHighlight ? XFA_WIDGETSTATUS_Highlight : 0, 0);
\r
178 FX_BOOL CXFA_FFWidgetHandler::HasEvent(CXFA_WidgetAcc* pWidgetAcc, XFA_EVENTTYPE eEventType)
\r
180 if (!pWidgetAcc || eEventType == XFA_EVENT_Unknown) {
\r
183 if (pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) {
\r
186 switch (eEventType) {
\r
187 case XFA_EVENT_Calculate: {
\r
188 CXFA_Calculate calc = pWidgetAcc->GetCalculate();
\r
192 if (CXFA_Script script = calc.GetScript()) {
\r
197 case XFA_EVENT_Validate: {
\r
198 CXFA_Validate val = pWidgetAcc->GetValidate();
\r
202 if (val.GetScript()) {
\r
210 CXFA_NodeArray eventArray;
\r
211 return pWidgetAcc->GetEventByActivity(gs_EventActivity[eEventType], eventArray);
\r
213 FX_INT32 CXFA_FFWidgetHandler::ProcessEvent(CXFA_WidgetAcc* pWidgetAcc, CXFA_EventParam* pParam)
\r
215 if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) {
\r
216 return XFA_EVENTERROR_NotExist;
\r
218 if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) {
\r
219 return XFA_EVENTERROR_NotExist;
\r
221 switch (pParam->m_eType) {
\r
222 case XFA_EVENT_Calculate:
\r
223 return pWidgetAcc->ProcessCalculate();
\r
224 case XFA_EVENT_Validate:
\r
225 if (((CXFA_FFDoc*)m_pDocView->GetDoc())->GetDocProvider()->IsValidationsEnabled(m_pDocView->GetDoc())) {
\r
226 return pWidgetAcc->ProcessValidate();
\r
228 return XFA_EVENTERROR_Disabled;
\r
229 case XFA_EVENT_InitCalculate: {
\r
230 CXFA_Calculate calc = pWidgetAcc->GetCalculate();
\r
232 return XFA_EVENTERROR_NotExist;
\r
234 if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
\r
235 return XFA_EVENTERROR_Disabled;
\r
237 CXFA_Script script = calc.GetScript();
\r
238 return pWidgetAcc->ExecuteScript(script, pParam);
\r
243 FX_INT32 iRet = pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam);
\r
246 XFA_HWIDGET CXFA_FFWidgetHandler::CreateWidget(XFA_HWIDGET hParent, XFA_WIDGETTYPE eType, XFA_HWIDGET hBefore )
\r
248 CXFA_Node* pParentFormItem = hParent ? ((CXFA_FFWidget*)hParent)->GetDataAcc()->GetNode() : NULL;
\r
249 CXFA_Node* pBeforeFormItem = hBefore ? ((CXFA_FFWidget*)hBefore)->GetDataAcc()->GetNode() : NULL;
\r
250 CXFA_Node* pNewFormItem = CreateWidgetFormItem(eType, pParentFormItem, pBeforeFormItem);
\r
251 if (pNewFormItem == NULL) {
\r
254 pNewFormItem->GetTemplateNode()->SetFlag(XFA_NODEFLAG_Initialized);
\r
255 pNewFormItem->SetFlag(XFA_NODEFLAG_Initialized);
\r
256 m_pDocView->RunLayout();
\r
257 CXFA_LayoutItem* pLayout = m_pDocView->GetXFALayout()->GetLayoutItem(pNewFormItem);
\r
258 return (XFA_HWIDGET)pLayout;
\r
260 CXFA_Node* CXFA_FFWidgetHandler::CreateWidgetFormItem(XFA_WIDGETTYPE eType, CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
263 case XFA_WIDGETTYPE_Barcode:
\r
265 case XFA_WIDGETTYPE_PushButton:
\r
266 return CreatePushButton(pParent, pBefore);
\r
267 case XFA_WIDGETTYPE_CheckButton:
\r
268 return CreateCheckButton(pParent, pBefore);
\r
269 case XFA_WIDGETTYPE_ExcludeGroup:
\r
270 return CreateExclGroup(pParent, pBefore);
\r
271 case XFA_WIDGETTYPE_RadioButton:
\r
272 return CreateRadioButton(pParent, pBefore);
\r
273 case XFA_WIDGETTYPE_Arc:
\r
274 return CreateArc(pParent, pBefore);
\r
275 case XFA_WIDGETTYPE_Rectangle:
\r
276 return CreateRectangle(pParent, pBefore);
\r
277 case XFA_WIDGETTYPE_Image:
\r
278 return CreateImage(pParent, pBefore);
\r
279 case XFA_WIDGETTYPE_Line:
\r
280 return CreateLine(pParent, pBefore);
\r
281 case XFA_WIDGETTYPE_Text:
\r
282 return CreateText(pParent, pBefore);
\r
283 case XFA_WIDGETTYPE_DatetimeEdit:
\r
284 return CreateDatetimeEdit(pParent, pBefore);
\r
285 case XFA_WIDGETTYPE_DecimalField:
\r
286 return CreateDecimalField(pParent, pBefore);
\r
287 case XFA_WIDGETTYPE_NumericField:
\r
288 return CreateNumericField(pParent, pBefore);
\r
289 case XFA_WIDGETTYPE_Signature:
\r
290 return CreateSignature(pParent, pBefore);
\r
291 case XFA_WIDGETTYPE_TextEdit:
\r
292 return CreateTextEdit(pParent, pBefore);
\r
293 case XFA_WIDGETTYPE_DropdownList:
\r
294 return CreateDropdownList(pParent, pBefore);
\r
295 case XFA_WIDGETTYPE_ListBox:
\r
296 return CreateListBox(pParent, pBefore);
\r
297 case XFA_WIDGETTYPE_ImageField:
\r
298 return CreateImageField(pParent, pBefore);
\r
299 case XFA_WIDGETTYPE_PasswordEdit:
\r
300 return CreatePasswordEdit(pParent, pBefore);
\r
301 case XFA_WIDGETTYPE_Subform:
\r
302 return CreateSubform(pParent, pBefore);
\r
308 CXFA_Node* CXFA_FFWidgetHandler::CreatePushButton(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
310 CXFA_Node* pField = CreateField(XFA_ELEMENT_Button, pParent, pBefore);
\r
311 CXFA_Node* pCaption = CreateCopyNode(XFA_ELEMENT_Caption, pField);
\r
312 CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pCaption);
\r
313 CXFA_Node* pText = CreateCopyNode(XFA_ELEMENT_Text, pValue);
\r
314 pText->SetContent(FX_WSTRC(L"Button"), FX_WSTRC(L"Button"), FALSE);
\r
315 CXFA_Node* pPara = CreateCopyNode(XFA_ELEMENT_Para, pCaption);
\r
316 pPara->SetEnum(XFA_ATTRIBUTE_VAlign, XFA_ATTRIBUTEENUM_Middle, FALSE);
\r
317 pPara->SetEnum(XFA_ATTRIBUTE_HAlign, XFA_ATTRIBUTEENUM_Center, FALSE);
\r
318 CreateFontNode(pCaption);
\r
319 CXFA_Node* pBorder = CreateCopyNode(XFA_ELEMENT_Border, pField);
\r
320 pBorder->SetEnum(XFA_ATTRIBUTE_Hand, XFA_ATTRIBUTEENUM_Right, FALSE);
\r
321 CXFA_Node* pEdge = CreateCopyNode(XFA_ELEMENT_Edge, pBorder);
\r
322 pEdge->SetEnum(XFA_ATTRIBUTE_Stroke, XFA_ATTRIBUTEENUM_Raised, FALSE);
\r
323 CXFA_Node* pFill = CreateCopyNode(XFA_ELEMENT_Fill, pBorder);
\r
324 CXFA_Node* pColor = CreateCopyNode(XFA_ELEMENT_Color, pFill);
\r
325 pColor->SetCData(XFA_ATTRIBUTE_Value, FX_WSTRC(L"212, 208, 200"), FALSE);
\r
326 CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField);
\r
327 pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None);
\r
330 CXFA_Node* CXFA_FFWidgetHandler::CreateCheckButton(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
332 CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore);
\r
335 CXFA_Node* CXFA_FFWidgetHandler::CreateExclGroup(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
337 return CreateFormItem(XFA_ELEMENT_ExclGroup, pParent, pBefore);
\r
339 CXFA_Node* CXFA_FFWidgetHandler::CreateRadioButton(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
341 CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore);
\r
342 CXFA_Node* pUi = pField->GetFirstChildByClass(XFA_ELEMENT_Ui);
\r
343 CXFA_Node* pWidget = pUi->GetFirstChildByClass(XFA_ELEMENT_CheckButton);
\r
344 pWidget->SetEnum(XFA_ATTRIBUTE_Shape, XFA_ATTRIBUTEENUM_Round);
\r
347 CXFA_Node* CXFA_FFWidgetHandler::CreateDatetimeEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
349 CXFA_Node* pField = CreateField(XFA_ELEMENT_DateTimeEdit, pParent, pBefore);
\r
350 CreateValueNode(XFA_ELEMENT_Date, pField);
\r
353 CXFA_Node* CXFA_FFWidgetHandler::CreateDecimalField(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
355 CXFA_Node* pField = CreateNumericField(pParent, pBefore);
\r
356 CreateValueNode(XFA_ELEMENT_Decimal, pField);
\r
359 CXFA_Node* CXFA_FFWidgetHandler::CreateNumericField(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
361 CXFA_Node* pField = CreateField(XFA_ELEMENT_NumericEdit, pParent, pBefore);
\r
364 CXFA_Node* CXFA_FFWidgetHandler::CreateSignature(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
366 CXFA_Node* pField = CreateField(XFA_ELEMENT_Signature, pParent, pBefore);
\r
369 CXFA_Node* CXFA_FFWidgetHandler::CreateTextEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
371 CXFA_Node* pField = CreateField(XFA_ELEMENT_TextEdit, pParent, pBefore);
\r
374 CXFA_Node* CXFA_FFWidgetHandler::CreateDropdownList(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
376 CXFA_Node* pField = CreateField(XFA_ELEMENT_ChoiceList, pParent, pBefore);
\r
379 CXFA_Node* CXFA_FFWidgetHandler::CreateListBox(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
381 CXFA_Node* pField = CreateDropdownList(pParent, pBefore);
\r
382 CXFA_Node* pUi = pField->GetNodeItem(XFA_NODEITEM_FirstChild);
\r
383 CXFA_Node* pListBox = pUi->GetNodeItem(XFA_NODEITEM_FirstChild);
\r
384 pListBox->SetEnum(XFA_ATTRIBUTE_Open, XFA_ATTRIBUTEENUM_Always);
\r
385 pListBox->SetEnum(XFA_ATTRIBUTE_CommitOn, XFA_ATTRIBUTEENUM_Exit);
\r
388 CXFA_Node* CXFA_FFWidgetHandler::CreateImageField(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
390 CXFA_Node* pField = CreateField(XFA_ELEMENT_ImageEdit, pParent, pBefore);
\r
393 CXFA_Node* CXFA_FFWidgetHandler::CreatePasswordEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
395 CXFA_Node* pField = CreateField(XFA_ELEMENT_PasswordEdit, pParent, pBefore);
\r
396 CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField);
\r
397 pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None, FALSE);
\r
400 CXFA_Node* CXFA_FFWidgetHandler::CreateField(XFA_ELEMENT eElement, CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
402 CXFA_Node* pField = CreateFormItem(XFA_ELEMENT_Field, pParent, pBefore);
\r
403 CXFA_Node* pUi = CreateCopyNode(XFA_ELEMENT_Ui, pField);
\r
404 CXFA_Node* pCheckButton = CreateCopyNode(eElement, pUi);
\r
405 CreateFontNode(pField);
\r
408 CXFA_Node* CXFA_FFWidgetHandler::CreateArc(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
410 CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Arc, pParent, pBefore);
\r
413 CXFA_Node* CXFA_FFWidgetHandler::CreateRectangle(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
415 CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Rectangle, pParent, pBefore);
\r
418 CXFA_Node* CXFA_FFWidgetHandler::CreateImage(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
420 CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Image, pParent, pBefore);
\r
421 CXFA_Node* pUi = CreateCopyNode(XFA_ELEMENT_Ui, pField);
\r
422 CXFA_Node* pImage = CreateCopyNode(XFA_ELEMENT_ImageEdit, pUi);
\r
425 CXFA_Node* CXFA_FFWidgetHandler::CreateLine(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
427 CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Line, pParent, pBefore);
\r
430 CXFA_Node* CXFA_FFWidgetHandler::CreateText(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
432 CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Text, pParent, pBefore);
\r
433 CXFA_Node* pUi = CreateCopyNode(XFA_ELEMENT_Ui, pField);
\r
434 CXFA_Node* pTextEdit = CreateCopyNode(XFA_ELEMENT_TextEdit, pUi);
\r
435 CreateFontNode(pField);
\r
438 CXFA_Node* CXFA_FFWidgetHandler::CreateDraw(XFA_ELEMENT eElement, CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
440 CXFA_Node* pDraw = CreateFormItem(XFA_ELEMENT_Draw, pParent, pBefore);
\r
441 CreateValueNode(eElement, pDraw);
\r
444 CXFA_Node* CXFA_FFWidgetHandler::CreateSubform(CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
446 CXFA_Node* pSubform = CreateFormItem(XFA_ELEMENT_Subform, pParent, pBefore);
\r
449 CXFA_Node* CXFA_FFWidgetHandler::CreateFormItem(XFA_ELEMENT eElement, CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
451 CXFA_Node* pTemplateParent = pParent != NULL ? pParent->GetTemplateNode() : NULL;
\r
452 CXFA_Node* pNewFormItem = pTemplateParent->CloneTemplateToForm(FALSE);
\r
453 if (pParent != NULL) {
\r
454 pParent->InsertChild(pNewFormItem, pBefore);
\r
456 return pNewFormItem;
\r
458 CXFA_Node* CXFA_FFWidgetHandler::CreateCopyNode(XFA_ELEMENT eElement, CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
460 CXFA_Node* pTemplateParent = pParent != NULL ? pParent->GetTemplateNode() : NULL;
\r
461 CXFA_Node* pNewNode = CreateTemplateNode(eElement, pTemplateParent, pBefore ? pBefore->GetTemplateNode() : NULL)->Clone(FALSE);
\r
462 if (pParent != NULL) {
\r
463 pParent->InsertChild(pNewNode, pBefore);
\r
467 CXFA_Node* CXFA_FFWidgetHandler::CreateTemplateNode(XFA_ELEMENT eElement, CXFA_Node* pParent, CXFA_Node* pBefore) const
\r
469 CXFA_Document* pXFADoc = GetXFADoc();
\r
470 CXFA_Node* pNewTemplateNode = pXFADoc->GetParser()->GetFactory()->CreateNode(XFA_XDPPACKET_Template, eElement);
\r
471 if (pParent != NULL) {
\r
472 pParent->InsertChild(pNewTemplateNode, pBefore);
\r
474 return pNewTemplateNode;
\r
476 CXFA_Node* CXFA_FFWidgetHandler::CreateFontNode(CXFA_Node* pParent) const
\r
478 CXFA_Node* pFont = CreateCopyNode(XFA_ELEMENT_Font, pParent);
\r
479 pFont->SetCData(XFA_ATTRIBUTE_Typeface, FX_WSTRC(L"Myriad Pro"), FALSE);
\r
482 CXFA_Node* CXFA_FFWidgetHandler::CreateMarginNode(CXFA_Node* pParent, FX_DWORD dwFlags, FX_FLOAT fInsets[4]) const
\r
484 CXFA_Node* pMargin = CreateCopyNode(XFA_ELEMENT_Margin, pParent);
\r
485 if (dwFlags & 0x01) {
\r
486 pMargin->SetMeasure(XFA_ATTRIBUTE_LeftInset, CXFA_Measurement(fInsets[0], XFA_UNIT_Pt), FALSE);
\r
488 if (dwFlags & 0x02) {
\r
489 pMargin->SetMeasure(XFA_ATTRIBUTE_TopInset, CXFA_Measurement(fInsets[1], XFA_UNIT_Pt), FALSE);
\r
491 if (dwFlags & 0x04) {
\r
492 pMargin->SetMeasure(XFA_ATTRIBUTE_RightInset, CXFA_Measurement(fInsets[2], XFA_UNIT_Pt), FALSE);
\r
494 if (dwFlags & 0x08) {
\r
495 pMargin->SetMeasure(XFA_ATTRIBUTE_BottomInset, CXFA_Measurement(fInsets[3], XFA_UNIT_Pt), FALSE);
\r
499 CXFA_Node* CXFA_FFWidgetHandler::CreateValueNode(XFA_ELEMENT eValue, CXFA_Node* pParent) const
\r
501 CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pParent);
\r
502 CXFA_Node* pDate = CreateCopyNode(eValue, pValue);
\r
505 IXFA_ObjFactory* CXFA_FFWidgetHandler::GetObjFactory() const
\r
507 return GetXFADoc()->GetParser()->GetFactory();
\r
509 CXFA_Document* CXFA_FFWidgetHandler::GetXFADoc() const
\r
511 return ((CXFA_FFDoc*)(m_pDocView->GetDoc()))->GetXFADoc();
\r
513 CXFA_FFMenuHandler::CXFA_FFMenuHandler()
\r
516 CXFA_FFMenuHandler::~CXFA_FFMenuHandler()
\r
519 FX_BOOL CXFA_FFMenuHandler::CanCopy(XFA_HWIDGET hWidget)
\r
521 return ((CXFA_FFWidget*)hWidget)->CanCopy();
\r
523 FX_BOOL CXFA_FFMenuHandler::CanCut(XFA_HWIDGET hWidget)
\r
525 return ((CXFA_FFWidget*)hWidget)->CanCut();
\r
527 FX_BOOL CXFA_FFMenuHandler::CanPaste(XFA_HWIDGET hWidget)
\r
529 return ((CXFA_FFWidget*)hWidget)->CanPaste();
\r
531 FX_BOOL CXFA_FFMenuHandler::CanSelectAll(XFA_HWIDGET hWidget)
\r
533 return ((CXFA_FFWidget*)hWidget)->CanSelectAll();
\r
535 FX_BOOL CXFA_FFMenuHandler::CanDelete(XFA_HWIDGET hWidget)
\r
537 return ((CXFA_FFWidget*)hWidget)->CanDelete();
\r
539 FX_BOOL CXFA_FFMenuHandler::CanDeSelect(XFA_HWIDGET hWidget)
\r
541 return ((CXFA_FFWidget*)hWidget)->CanDeSelect();
\r
543 FX_BOOL CXFA_FFMenuHandler::Copy(XFA_HWIDGET hWidget, CFX_WideString &wsText)
\r
545 return ((CXFA_FFWidget*)hWidget)->Copy(wsText);
\r
547 FX_BOOL CXFA_FFMenuHandler::Cut(XFA_HWIDGET hWidget, CFX_WideString &wsText)
\r
549 return ((CXFA_FFWidget*)hWidget)->Cut(wsText);
\r
551 FX_BOOL CXFA_FFMenuHandler::Paste(XFA_HWIDGET hWidget, const CFX_WideString &wsText)
\r
553 return ((CXFA_FFWidget*)hWidget)->Paste(wsText);
\r
555 FX_BOOL CXFA_FFMenuHandler::SelectAll(XFA_HWIDGET hWidget)
\r
557 return ((CXFA_FFWidget*)hWidget)->SelectAll();
\r
559 FX_BOOL CXFA_FFMenuHandler::Delete(XFA_HWIDGET hWidget)
\r
561 return ((CXFA_FFWidget*)hWidget)->Delete();
\r
563 FX_BOOL CXFA_FFMenuHandler::DeSelect(XFA_HWIDGET hWidget)
\r
565 return ((CXFA_FFWidget*)hWidget)->DeSelect();
\r
567 FX_BOOL CXFA_FFMenuHandler::CanUndo(XFA_HWIDGET hWidget)
\r
569 return ((CXFA_FFWidget*)hWidget)->CanUndo();
\r
571 FX_BOOL CXFA_FFMenuHandler::CanRedo(XFA_HWIDGET hWidget)
\r
573 return ((CXFA_FFWidget*)hWidget)->CanRedo();
\r
575 FX_BOOL CXFA_FFMenuHandler::Undo(XFA_HWIDGET hWidget)
\r
577 return ((CXFA_FFWidget*)hWidget)->Undo();
\r
579 FX_BOOL CXFA_FFMenuHandler::Redo(XFA_HWIDGET hWidget)
\r
581 return ((CXFA_FFWidget*)hWidget)->Redo();
\r
583 #define FX_EDIT_ISLATINWORD(u) (u == 0x2D || (u <= 0x005A && u >= 0x0041) || (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0) || u == 0x0027)
\r
584 FX_BOOL CXFA_FFMenuHandler::GetSuggestWords(XFA_HWIDGET hWidget, CFX_PointF pointf, CFX_ByteStringArray &sSuggest)
\r
586 return ((CXFA_FFWidget*)hWidget)->GetSuggestWords(pointf, sSuggest);
\r
588 FX_BOOL CXFA_FFMenuHandler::ReplaceSpellCheckWord(XFA_HWIDGET hWidget, CFX_PointF pointf, FX_BSTR bsReplace)
\r
590 return ((CXFA_FFWidget*)hWidget)->ReplaceSpellCheckWord(pointf, bsReplace);
\r