Index: xfa/src/fxfa/src/app/xfa_ffwidgethandler.cpp |
diff --git a/xfa/src/fxfa/src/app/xfa_ffwidgethandler.cpp b/xfa/src/fxfa/src/app/xfa_ffwidgethandler.cpp |
index 6af98a6456d9e907bbe183b869f2c63f9c5ceb39..def79b796208a44a941361402d3f525772456db5 100644 |
--- a/xfa/src/fxfa/src/app/xfa_ffwidgethandler.cpp |
+++ b/xfa/src/fxfa/src/app/xfa_ffwidgethandler.cpp |
@@ -1,639 +1,639 @@ |
-// Copyright 2014 PDFium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
- |
-#include "xfa/src/foxitlib.h" |
-#include "xfa/src/fxfa/src/common/xfa_common.h" |
-#include "xfa_fwladapter.h" |
-#include "xfa_ffwidgethandler.h" |
-#include "xfa_ffwidget.h" |
-#include "xfa_fffield.h" |
-#include "xfa_ffchoicelist.h" |
-#include "xfa_ffdoc.h" |
-#include "xfa_ffdocview.h" |
-CXFA_FFWidgetHandler::CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView) |
- : m_pDocView(pDocView) {} |
-CXFA_FFWidgetHandler::~CXFA_FFWidgetHandler() {} |
-IXFA_PageView* CXFA_FFWidgetHandler::GetPageView(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->GetPageView(); |
-} |
-void CXFA_FFWidgetHandler::GetRect(IXFA_Widget* hWidget, CFX_RectF& rt) { |
- static_cast<CXFA_FFWidget*>(hWidget)->GetWidgetRect(rt); |
-} |
-FX_DWORD CXFA_FFWidgetHandler::GetStatus(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->GetStatus(); |
-} |
-FX_BOOL CXFA_FFWidgetHandler::GetBBox(IXFA_Widget* hWidget, |
- CFX_RectF& rtBox, |
- FX_DWORD dwStatus, |
- FX_BOOL bDrawFocus) { |
- return static_cast<CXFA_FFWidget*>(hWidget) |
- ->GetBBox(rtBox, dwStatus, bDrawFocus); |
-} |
-CXFA_WidgetAcc* CXFA_FFWidgetHandler::GetDataAcc(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc(); |
-} |
-void CXFA_FFWidgetHandler::GetName(IXFA_Widget* hWidget, |
- CFX_WideString& wsName, |
- int32_t iNameType) { |
- static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc()->GetName(wsName, |
- iNameType); |
-} |
-FX_BOOL CXFA_FFWidgetHandler::GetToolTip(IXFA_Widget* hWidget, |
- CFX_WideString& wsToolTip) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->GetToolTip(wsToolTip); |
-} |
-void CXFA_FFWidgetHandler::SetPrivateData(IXFA_Widget* hWidget, |
- void* module_id, |
- void* pData, |
- PD_CALLBACK_FREEDATA callback) { |
- static_cast<CXFA_FFWidget*>(hWidget) |
- ->SetPrivateData(module_id, pData, callback); |
-} |
-void* CXFA_FFWidgetHandler::GetPrivateData(IXFA_Widget* hWidget, |
- void* module_id) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->GetPrivateData(module_id); |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnMouseEnter(IXFA_Widget* hWidget) { |
- m_pDocView->LockUpdate(); |
- FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseEnter(); |
- m_pDocView->UnlockUpdate(); |
- m_pDocView->UpdateDocView(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnMouseExit(IXFA_Widget* hWidget) { |
- m_pDocView->LockUpdate(); |
- FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseExit(); |
- m_pDocView->UnlockUpdate(); |
- m_pDocView->UpdateDocView(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnLButtonDown(IXFA_Widget* hWidget, |
- FX_DWORD dwFlags, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- m_pDocView->LockUpdate(); |
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
- FX_BOOL bRet = |
- static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDown(dwFlags, fx, fy); |
- if (bRet && m_pDocView->SetFocus(hWidget)) { |
- ((CXFA_FFDoc*)m_pDocView->GetDoc()) |
- ->GetDocProvider() |
- ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget); |
- } |
- m_pDocView->UnlockUpdate(); |
- m_pDocView->UpdateDocView(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnLButtonUp(IXFA_Widget* hWidget, |
- FX_DWORD dwFlags, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- m_pDocView->LockUpdate(); |
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
- m_pDocView->m_bLayoutEvent = TRUE; |
- FX_BOOL bRet = |
- static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonUp(dwFlags, fx, fy); |
- m_pDocView->UnlockUpdate(); |
- m_pDocView->UpdateDocView(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnLButtonDblClk(IXFA_Widget* hWidget, |
- FX_DWORD dwFlags, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
- FX_BOOL bRet = |
- static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDblClk(dwFlags, fx, fy); |
- m_pDocView->RunInvalidate(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnMouseMove(IXFA_Widget* hWidget, |
- FX_DWORD dwFlags, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
- FX_BOOL bRet = |
- static_cast<CXFA_FFWidget*>(hWidget)->OnMouseMove(dwFlags, fx, fy); |
- m_pDocView->RunInvalidate(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnMouseWheel(IXFA_Widget* hWidget, |
- FX_DWORD dwFlags, |
- int16_t zDelta, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
- FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget) |
- ->OnMouseWheel(dwFlags, zDelta, fx, fy); |
- m_pDocView->RunInvalidate(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnRButtonDown(IXFA_Widget* hWidget, |
- FX_DWORD dwFlags, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
- FX_BOOL bRet = |
- static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDown(dwFlags, fx, fy); |
- if (bRet && m_pDocView->SetFocus(hWidget)) { |
- ((CXFA_FFDoc*)m_pDocView->GetDoc()) |
- ->GetDocProvider() |
- ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget); |
- } |
- m_pDocView->RunInvalidate(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnRButtonUp(IXFA_Widget* hWidget, |
- FX_DWORD dwFlags, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
- FX_BOOL bRet = |
- static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonUp(dwFlags, fx, fy); |
- m_pDocView->RunInvalidate(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnRButtonDblClk(IXFA_Widget* hWidget, |
- FX_DWORD dwFlags, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
- FX_BOOL bRet = |
- static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDblClk(dwFlags, fx, fy); |
- m_pDocView->RunInvalidate(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnKeyDown(IXFA_Widget* hWidget, |
- FX_DWORD dwKeyCode, |
- FX_DWORD dwFlags) { |
- FX_BOOL bRet = |
- static_cast<CXFA_FFWidget*>(hWidget)->OnKeyDown(dwKeyCode, dwFlags); |
- m_pDocView->RunInvalidate(); |
- m_pDocView->UpdateDocView(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnKeyUp(IXFA_Widget* hWidget, |
- FX_DWORD dwKeyCode, |
- FX_DWORD dwFlags) { |
- FX_BOOL bRet = |
- static_cast<CXFA_FFWidget*>(hWidget)->OnKeyUp(dwKeyCode, dwFlags); |
- m_pDocView->RunInvalidate(); |
- return bRet; |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnChar(IXFA_Widget* hWidget, |
- FX_DWORD dwChar, |
- FX_DWORD dwFlags) { |
- FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnChar(dwChar, dwFlags); |
- m_pDocView->RunInvalidate(); |
- return bRet; |
-} |
-FX_DWORD CXFA_FFWidgetHandler::OnHitTest(IXFA_Widget* hWidget, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- if (!(static_cast<CXFA_FFWidget*>(hWidget)->GetStatus() & |
- XFA_WIDGETSTATUS_Visible)) { |
- return FWL_WGTHITTEST_Unknown; |
- } |
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
- return static_cast<CXFA_FFWidget*>(hWidget)->OnHitTest(fx, fy); |
-} |
-FX_BOOL CXFA_FFWidgetHandler::OnSetCursor(IXFA_Widget* hWidget, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
- return static_cast<CXFA_FFWidget*>(hWidget)->OnSetCursor(fx, fy); |
-} |
-void CXFA_FFWidgetHandler::RenderWidget(IXFA_Widget* hWidget, |
- CFX_Graphics* pGS, |
- CFX_Matrix* pMatrix, |
- FX_BOOL bHighlight) { |
- static_cast<CXFA_FFWidget*>(hWidget)->RenderWidget( |
- pGS, pMatrix, bHighlight ? XFA_WIDGETSTATUS_Highlight : 0, 0); |
-} |
-FX_BOOL CXFA_FFWidgetHandler::HasEvent(CXFA_WidgetAcc* pWidgetAcc, |
- XFA_EVENTTYPE eEventType) { |
- if (!pWidgetAcc || eEventType == XFA_EVENT_Unknown) { |
- return FALSE; |
- } |
- if (pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) { |
- return FALSE; |
- } |
- switch (eEventType) { |
- case XFA_EVENT_Calculate: { |
- CXFA_Calculate calc = pWidgetAcc->GetCalculate(); |
- if (!calc) { |
- return FALSE; |
- } |
- if (calc.GetScript()) { |
- return TRUE; |
- } |
- return FALSE; |
- } |
- case XFA_EVENT_Validate: { |
- CXFA_Validate val = pWidgetAcc->GetValidate(); |
- if (!val) { |
- return FALSE; |
- } |
- if (val.GetScript()) { |
- return TRUE; |
- } |
- return FALSE; |
- } |
- default: |
- break; |
- } |
- CXFA_NodeArray eventArray; |
- return pWidgetAcc->GetEventByActivity(gs_EventActivity[eEventType], |
- eventArray); |
-} |
-int32_t CXFA_FFWidgetHandler::ProcessEvent(CXFA_WidgetAcc* pWidgetAcc, |
- CXFA_EventParam* pParam) { |
- if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) { |
- return XFA_EVENTERROR_NotExist; |
- } |
- if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) { |
- return XFA_EVENTERROR_NotExist; |
- } |
- switch (pParam->m_eType) { |
- case XFA_EVENT_Calculate: |
- return pWidgetAcc->ProcessCalculate(); |
- case XFA_EVENT_Validate: |
- if (((CXFA_FFDoc*)m_pDocView->GetDoc()) |
- ->GetDocProvider() |
- ->IsValidationsEnabled(m_pDocView->GetDoc())) { |
- return pWidgetAcc->ProcessValidate(); |
- } |
- return XFA_EVENTERROR_Disabled; |
- case XFA_EVENT_InitCalculate: { |
- CXFA_Calculate calc = pWidgetAcc->GetCalculate(); |
- if (!calc) { |
- return XFA_EVENTERROR_NotExist; |
- } |
- if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) { |
- return XFA_EVENTERROR_Disabled; |
- } |
- CXFA_Script script = calc.GetScript(); |
- return pWidgetAcc->ExecuteScript(script, pParam); |
- } |
- default: |
- break; |
- } |
- int32_t iRet = |
- pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam); |
- return iRet; |
-} |
-IXFA_Widget* CXFA_FFWidgetHandler::CreateWidget(IXFA_Widget* hParent, |
- XFA_WIDGETTYPE eType, |
- IXFA_Widget* hBefore) { |
- CXFA_Node* pParentFormItem = |
- hParent ? static_cast<CXFA_FFWidget*>(hParent)->GetDataAcc()->GetNode() |
- : NULL; |
- CXFA_Node* pBeforeFormItem = |
- hBefore ? static_cast<CXFA_FFWidget*>(hBefore)->GetDataAcc()->GetNode() |
- : NULL; |
- CXFA_Node* pNewFormItem = |
- CreateWidgetFormItem(eType, pParentFormItem, pBeforeFormItem); |
- if (pNewFormItem == NULL) { |
- return NULL; |
- } |
- pNewFormItem->GetTemplateNode()->SetFlag(XFA_NODEFLAG_Initialized); |
- pNewFormItem->SetFlag(XFA_NODEFLAG_Initialized); |
- m_pDocView->RunLayout(); |
- CXFA_LayoutItem* pLayout = |
- m_pDocView->GetXFALayout()->GetLayoutItem(pNewFormItem); |
- return (IXFA_Widget*)pLayout; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateWidgetFormItem( |
- XFA_WIDGETTYPE eType, |
- CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- switch (eType) { |
- case XFA_WIDGETTYPE_Barcode: |
- return NULL; |
- case XFA_WIDGETTYPE_PushButton: |
- return CreatePushButton(pParent, pBefore); |
- case XFA_WIDGETTYPE_CheckButton: |
- return CreateCheckButton(pParent, pBefore); |
- case XFA_WIDGETTYPE_ExcludeGroup: |
- return CreateExclGroup(pParent, pBefore); |
- case XFA_WIDGETTYPE_RadioButton: |
- return CreateRadioButton(pParent, pBefore); |
- case XFA_WIDGETTYPE_Arc: |
- return CreateArc(pParent, pBefore); |
- case XFA_WIDGETTYPE_Rectangle: |
- return CreateRectangle(pParent, pBefore); |
- case XFA_WIDGETTYPE_Image: |
- return CreateImage(pParent, pBefore); |
- case XFA_WIDGETTYPE_Line: |
- return CreateLine(pParent, pBefore); |
- case XFA_WIDGETTYPE_Text: |
- return CreateText(pParent, pBefore); |
- case XFA_WIDGETTYPE_DatetimeEdit: |
- return CreateDatetimeEdit(pParent, pBefore); |
- case XFA_WIDGETTYPE_DecimalField: |
- return CreateDecimalField(pParent, pBefore); |
- case XFA_WIDGETTYPE_NumericField: |
- return CreateNumericField(pParent, pBefore); |
- case XFA_WIDGETTYPE_Signature: |
- return CreateSignature(pParent, pBefore); |
- case XFA_WIDGETTYPE_TextEdit: |
- return CreateTextEdit(pParent, pBefore); |
- case XFA_WIDGETTYPE_DropdownList: |
- return CreateDropdownList(pParent, pBefore); |
- case XFA_WIDGETTYPE_ListBox: |
- return CreateListBox(pParent, pBefore); |
- case XFA_WIDGETTYPE_ImageField: |
- return CreateImageField(pParent, pBefore); |
- case XFA_WIDGETTYPE_PasswordEdit: |
- return CreatePasswordEdit(pParent, pBefore); |
- case XFA_WIDGETTYPE_Subform: |
- return CreateSubform(pParent, pBefore); |
- default: |
- break; |
- } |
- return NULL; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreatePushButton(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateField(XFA_ELEMENT_Button, pParent, pBefore); |
- CXFA_Node* pCaption = CreateCopyNode(XFA_ELEMENT_Caption, pField); |
- CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pCaption); |
- CXFA_Node* pText = CreateCopyNode(XFA_ELEMENT_Text, pValue); |
- pText->SetContent(FX_WSTRC(L"Button"), FX_WSTRC(L"Button"), FALSE); |
- CXFA_Node* pPara = CreateCopyNode(XFA_ELEMENT_Para, pCaption); |
- pPara->SetEnum(XFA_ATTRIBUTE_VAlign, XFA_ATTRIBUTEENUM_Middle, FALSE); |
- pPara->SetEnum(XFA_ATTRIBUTE_HAlign, XFA_ATTRIBUTEENUM_Center, FALSE); |
- CreateFontNode(pCaption); |
- CXFA_Node* pBorder = CreateCopyNode(XFA_ELEMENT_Border, pField); |
- pBorder->SetEnum(XFA_ATTRIBUTE_Hand, XFA_ATTRIBUTEENUM_Right, FALSE); |
- CXFA_Node* pEdge = CreateCopyNode(XFA_ELEMENT_Edge, pBorder); |
- pEdge->SetEnum(XFA_ATTRIBUTE_Stroke, XFA_ATTRIBUTEENUM_Raised, FALSE); |
- CXFA_Node* pFill = CreateCopyNode(XFA_ELEMENT_Fill, pBorder); |
- CXFA_Node* pColor = CreateCopyNode(XFA_ELEMENT_Color, pFill); |
- pColor->SetCData(XFA_ATTRIBUTE_Value, FX_WSTRC(L"212, 208, 200"), FALSE); |
- CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField); |
- pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateCheckButton(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateExclGroup(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- return CreateFormItem(XFA_ELEMENT_ExclGroup, pParent, pBefore); |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateRadioButton(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore); |
- CXFA_Node* pUi = pField->GetFirstChildByClass(XFA_ELEMENT_Ui); |
- CXFA_Node* pWidget = pUi->GetFirstChildByClass(XFA_ELEMENT_CheckButton); |
- pWidget->SetEnum(XFA_ATTRIBUTE_Shape, XFA_ATTRIBUTEENUM_Round); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateDatetimeEdit(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateField(XFA_ELEMENT_DateTimeEdit, pParent, pBefore); |
- CreateValueNode(XFA_ELEMENT_Date, pField); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateDecimalField(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateNumericField(pParent, pBefore); |
- CreateValueNode(XFA_ELEMENT_Decimal, pField); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateNumericField(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateField(XFA_ELEMENT_NumericEdit, pParent, pBefore); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateSignature(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateField(XFA_ELEMENT_Signature, pParent, pBefore); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateTextEdit(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateField(XFA_ELEMENT_TextEdit, pParent, pBefore); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateDropdownList(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateField(XFA_ELEMENT_ChoiceList, pParent, pBefore); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateListBox(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateDropdownList(pParent, pBefore); |
- CXFA_Node* pUi = pField->GetNodeItem(XFA_NODEITEM_FirstChild); |
- CXFA_Node* pListBox = pUi->GetNodeItem(XFA_NODEITEM_FirstChild); |
- pListBox->SetEnum(XFA_ATTRIBUTE_Open, XFA_ATTRIBUTEENUM_Always); |
- pListBox->SetEnum(XFA_ATTRIBUTE_CommitOn, XFA_ATTRIBUTEENUM_Exit); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateImageField(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateField(XFA_ELEMENT_ImageEdit, pParent, pBefore); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreatePasswordEdit(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateField(XFA_ELEMENT_PasswordEdit, pParent, pBefore); |
- CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField); |
- pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None, FALSE); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateField(XFA_ELEMENT eElement, |
- CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateFormItem(XFA_ELEMENT_Field, pParent, pBefore); |
- CreateCopyNode(eElement, CreateCopyNode(XFA_ELEMENT_Ui, pField)); |
- CreateFontNode(pField); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateArc(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- return CreateDraw(XFA_ELEMENT_Arc, pParent, pBefore); |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateRectangle(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- return CreateDraw(XFA_ELEMENT_Rectangle, pParent, pBefore); |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateImage(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Image, pParent, pBefore); |
- CreateCopyNode(XFA_ELEMENT_ImageEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField)); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateLine(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Line, pParent, pBefore); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateText(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Text, pParent, pBefore); |
- CreateCopyNode(XFA_ELEMENT_TextEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField)); |
- CreateFontNode(pField); |
- return pField; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateDraw(XFA_ELEMENT eElement, |
- CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pDraw = CreateFormItem(XFA_ELEMENT_Draw, pParent, pBefore); |
- CreateValueNode(eElement, pDraw); |
- return pDraw; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateSubform(CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pSubform = CreateFormItem(XFA_ELEMENT_Subform, pParent, pBefore); |
- return pSubform; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateFormItem(XFA_ELEMENT eElement, |
- CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pTemplateParent = |
- pParent != NULL ? pParent->GetTemplateNode() : NULL; |
- CXFA_Node* pNewFormItem = pTemplateParent->CloneTemplateToForm(FALSE); |
- if (pParent != NULL) { |
- pParent->InsertChild(pNewFormItem, pBefore); |
- } |
- return pNewFormItem; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateCopyNode(XFA_ELEMENT eElement, |
- CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Node* pTemplateParent = |
- pParent != NULL ? pParent->GetTemplateNode() : NULL; |
- CXFA_Node* pNewNode = |
- CreateTemplateNode(eElement, pTemplateParent, |
- pBefore ? pBefore->GetTemplateNode() : NULL) |
- ->Clone(FALSE); |
- if (pParent != NULL) { |
- pParent->InsertChild(pNewNode, pBefore); |
- } |
- return pNewNode; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateTemplateNode(XFA_ELEMENT eElement, |
- CXFA_Node* pParent, |
- CXFA_Node* pBefore) const { |
- CXFA_Document* pXFADoc = GetXFADoc(); |
- CXFA_Node* pNewTemplateNode = pXFADoc->GetParser()->GetFactory()->CreateNode( |
- XFA_XDPPACKET_Template, eElement); |
- if (pParent != NULL) { |
- pParent->InsertChild(pNewTemplateNode, pBefore); |
- } |
- return pNewTemplateNode; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateFontNode(CXFA_Node* pParent) const { |
- CXFA_Node* pFont = CreateCopyNode(XFA_ELEMENT_Font, pParent); |
- pFont->SetCData(XFA_ATTRIBUTE_Typeface, FX_WSTRC(L"Myriad Pro"), FALSE); |
- return pFont; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateMarginNode(CXFA_Node* pParent, |
- FX_DWORD dwFlags, |
- FX_FLOAT fInsets[4]) const { |
- CXFA_Node* pMargin = CreateCopyNode(XFA_ELEMENT_Margin, pParent); |
- if (dwFlags & 0x01) { |
- pMargin->SetMeasure(XFA_ATTRIBUTE_LeftInset, |
- CXFA_Measurement(fInsets[0], XFA_UNIT_Pt), FALSE); |
- } |
- if (dwFlags & 0x02) { |
- pMargin->SetMeasure(XFA_ATTRIBUTE_TopInset, |
- CXFA_Measurement(fInsets[1], XFA_UNIT_Pt), FALSE); |
- } |
- if (dwFlags & 0x04) { |
- pMargin->SetMeasure(XFA_ATTRIBUTE_RightInset, |
- CXFA_Measurement(fInsets[2], XFA_UNIT_Pt), FALSE); |
- } |
- if (dwFlags & 0x08) { |
- pMargin->SetMeasure(XFA_ATTRIBUTE_BottomInset, |
- CXFA_Measurement(fInsets[3], XFA_UNIT_Pt), FALSE); |
- } |
- return pMargin; |
-} |
-CXFA_Node* CXFA_FFWidgetHandler::CreateValueNode(XFA_ELEMENT eValue, |
- CXFA_Node* pParent) const { |
- CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pParent); |
- CreateCopyNode(eValue, pValue); |
- return pValue; |
-} |
-IXFA_ObjFactory* CXFA_FFWidgetHandler::GetObjFactory() const { |
- return GetXFADoc()->GetParser()->GetFactory(); |
-} |
-CXFA_Document* CXFA_FFWidgetHandler::GetXFADoc() const { |
- return ((CXFA_FFDoc*)(m_pDocView->GetDoc()))->GetXFADoc(); |
-} |
-CXFA_FFMenuHandler::CXFA_FFMenuHandler() {} |
-CXFA_FFMenuHandler::~CXFA_FFMenuHandler() {} |
-FX_BOOL CXFA_FFMenuHandler::CanCopy(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->CanCopy(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::CanCut(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->CanCut(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::CanPaste(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->CanPaste(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::CanSelectAll(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->CanSelectAll(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::CanDelete(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->CanDelete(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::CanDeSelect(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->CanDeSelect(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::Copy(IXFA_Widget* hWidget, CFX_WideString& wsText) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->Copy(wsText); |
-} |
-FX_BOOL CXFA_FFMenuHandler::Cut(IXFA_Widget* hWidget, CFX_WideString& wsText) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->Cut(wsText); |
-} |
-FX_BOOL CXFA_FFMenuHandler::Paste(IXFA_Widget* hWidget, |
- const CFX_WideString& wsText) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->Paste(wsText); |
-} |
-FX_BOOL CXFA_FFMenuHandler::SelectAll(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->SelectAll(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::Delete(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->Delete(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::DeSelect(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->DeSelect(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::CanUndo(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->CanUndo(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::CanRedo(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->CanRedo(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::Undo(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->Undo(); |
-} |
-FX_BOOL CXFA_FFMenuHandler::Redo(IXFA_Widget* hWidget) { |
- return static_cast<CXFA_FFWidget*>(hWidget)->Redo(); |
-} |
-#define FX_EDIT_ISLATINWORD(u) \ |
- (u == 0x2D || (u <= 0x005A && u >= 0x0041) || \ |
- (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0) || \ |
- u == 0x0027) |
-FX_BOOL CXFA_FFMenuHandler::GetSuggestWords(IXFA_Widget* hWidget, |
- CFX_PointF pointf, |
- CFX_ByteStringArray& sSuggest) { |
- return static_cast<CXFA_FFWidget*>(hWidget) |
- ->GetSuggestWords(pointf, sSuggest); |
-} |
-FX_BOOL CXFA_FFMenuHandler::ReplaceSpellCheckWord( |
- IXFA_Widget* hWidget, |
- CFX_PointF pointf, |
- const CFX_ByteStringC& bsReplace) { |
- return static_cast<CXFA_FFWidget*>(hWidget) |
- ->ReplaceSpellCheckWord(pointf, bsReplace); |
-} |
+// Copyright 2014 PDFium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+ |
+#include "xfa/src/foxitlib.h" |
+#include "xfa/src/fxfa/src/common/xfa_common.h" |
+#include "xfa_fwladapter.h" |
+#include "xfa_ffwidgethandler.h" |
+#include "xfa_ffwidget.h" |
+#include "xfa_fffield.h" |
+#include "xfa_ffchoicelist.h" |
+#include "xfa_ffdoc.h" |
+#include "xfa_ffdocview.h" |
+CXFA_FFWidgetHandler::CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView) |
+ : m_pDocView(pDocView) {} |
+CXFA_FFWidgetHandler::~CXFA_FFWidgetHandler() {} |
+IXFA_PageView* CXFA_FFWidgetHandler::GetPageView(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->GetPageView(); |
+} |
+void CXFA_FFWidgetHandler::GetRect(IXFA_Widget* hWidget, CFX_RectF& rt) { |
+ static_cast<CXFA_FFWidget*>(hWidget)->GetWidgetRect(rt); |
+} |
+FX_DWORD CXFA_FFWidgetHandler::GetStatus(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->GetStatus(); |
+} |
+FX_BOOL CXFA_FFWidgetHandler::GetBBox(IXFA_Widget* hWidget, |
+ CFX_RectF& rtBox, |
+ FX_DWORD dwStatus, |
+ FX_BOOL bDrawFocus) { |
+ return static_cast<CXFA_FFWidget*>(hWidget) |
+ ->GetBBox(rtBox, dwStatus, bDrawFocus); |
+} |
+CXFA_WidgetAcc* CXFA_FFWidgetHandler::GetDataAcc(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc(); |
+} |
+void CXFA_FFWidgetHandler::GetName(IXFA_Widget* hWidget, |
+ CFX_WideString& wsName, |
+ int32_t iNameType) { |
+ static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc()->GetName(wsName, |
+ iNameType); |
+} |
+FX_BOOL CXFA_FFWidgetHandler::GetToolTip(IXFA_Widget* hWidget, |
+ CFX_WideString& wsToolTip) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->GetToolTip(wsToolTip); |
+} |
+void CXFA_FFWidgetHandler::SetPrivateData(IXFA_Widget* hWidget, |
+ void* module_id, |
+ void* pData, |
+ PD_CALLBACK_FREEDATA callback) { |
+ static_cast<CXFA_FFWidget*>(hWidget) |
+ ->SetPrivateData(module_id, pData, callback); |
+} |
+void* CXFA_FFWidgetHandler::GetPrivateData(IXFA_Widget* hWidget, |
+ void* module_id) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->GetPrivateData(module_id); |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnMouseEnter(IXFA_Widget* hWidget) { |
+ m_pDocView->LockUpdate(); |
+ FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseEnter(); |
+ m_pDocView->UnlockUpdate(); |
+ m_pDocView->UpdateDocView(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnMouseExit(IXFA_Widget* hWidget) { |
+ m_pDocView->LockUpdate(); |
+ FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseExit(); |
+ m_pDocView->UnlockUpdate(); |
+ m_pDocView->UpdateDocView(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnLButtonDown(IXFA_Widget* hWidget, |
+ FX_DWORD dwFlags, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ m_pDocView->LockUpdate(); |
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
+ FX_BOOL bRet = |
+ static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDown(dwFlags, fx, fy); |
+ if (bRet && m_pDocView->SetFocus(hWidget)) { |
+ ((CXFA_FFDoc*)m_pDocView->GetDoc()) |
+ ->GetDocProvider() |
+ ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget); |
+ } |
+ m_pDocView->UnlockUpdate(); |
+ m_pDocView->UpdateDocView(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnLButtonUp(IXFA_Widget* hWidget, |
+ FX_DWORD dwFlags, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ m_pDocView->LockUpdate(); |
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
+ m_pDocView->m_bLayoutEvent = TRUE; |
+ FX_BOOL bRet = |
+ static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonUp(dwFlags, fx, fy); |
+ m_pDocView->UnlockUpdate(); |
+ m_pDocView->UpdateDocView(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnLButtonDblClk(IXFA_Widget* hWidget, |
+ FX_DWORD dwFlags, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
+ FX_BOOL bRet = |
+ static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDblClk(dwFlags, fx, fy); |
+ m_pDocView->RunInvalidate(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnMouseMove(IXFA_Widget* hWidget, |
+ FX_DWORD dwFlags, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
+ FX_BOOL bRet = |
+ static_cast<CXFA_FFWidget*>(hWidget)->OnMouseMove(dwFlags, fx, fy); |
+ m_pDocView->RunInvalidate(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnMouseWheel(IXFA_Widget* hWidget, |
+ FX_DWORD dwFlags, |
+ int16_t zDelta, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
+ FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget) |
+ ->OnMouseWheel(dwFlags, zDelta, fx, fy); |
+ m_pDocView->RunInvalidate(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnRButtonDown(IXFA_Widget* hWidget, |
+ FX_DWORD dwFlags, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
+ FX_BOOL bRet = |
+ static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDown(dwFlags, fx, fy); |
+ if (bRet && m_pDocView->SetFocus(hWidget)) { |
+ ((CXFA_FFDoc*)m_pDocView->GetDoc()) |
+ ->GetDocProvider() |
+ ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget); |
+ } |
+ m_pDocView->RunInvalidate(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnRButtonUp(IXFA_Widget* hWidget, |
+ FX_DWORD dwFlags, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
+ FX_BOOL bRet = |
+ static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonUp(dwFlags, fx, fy); |
+ m_pDocView->RunInvalidate(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnRButtonDblClk(IXFA_Widget* hWidget, |
+ FX_DWORD dwFlags, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
+ FX_BOOL bRet = |
+ static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDblClk(dwFlags, fx, fy); |
+ m_pDocView->RunInvalidate(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnKeyDown(IXFA_Widget* hWidget, |
+ FX_DWORD dwKeyCode, |
+ FX_DWORD dwFlags) { |
+ FX_BOOL bRet = |
+ static_cast<CXFA_FFWidget*>(hWidget)->OnKeyDown(dwKeyCode, dwFlags); |
+ m_pDocView->RunInvalidate(); |
+ m_pDocView->UpdateDocView(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnKeyUp(IXFA_Widget* hWidget, |
+ FX_DWORD dwKeyCode, |
+ FX_DWORD dwFlags) { |
+ FX_BOOL bRet = |
+ static_cast<CXFA_FFWidget*>(hWidget)->OnKeyUp(dwKeyCode, dwFlags); |
+ m_pDocView->RunInvalidate(); |
+ return bRet; |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnChar(IXFA_Widget* hWidget, |
+ FX_DWORD dwChar, |
+ FX_DWORD dwFlags) { |
+ FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnChar(dwChar, dwFlags); |
+ m_pDocView->RunInvalidate(); |
+ return bRet; |
+} |
+FX_DWORD CXFA_FFWidgetHandler::OnHitTest(IXFA_Widget* hWidget, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ if (!(static_cast<CXFA_FFWidget*>(hWidget)->GetStatus() & |
+ XFA_WIDGETSTATUS_Visible)) { |
+ return FWL_WGTHITTEST_Unknown; |
+ } |
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
+ return static_cast<CXFA_FFWidget*>(hWidget)->OnHitTest(fx, fy); |
+} |
+FX_BOOL CXFA_FFWidgetHandler::OnSetCursor(IXFA_Widget* hWidget, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy); |
+ return static_cast<CXFA_FFWidget*>(hWidget)->OnSetCursor(fx, fy); |
+} |
+void CXFA_FFWidgetHandler::RenderWidget(IXFA_Widget* hWidget, |
+ CFX_Graphics* pGS, |
+ CFX_Matrix* pMatrix, |
+ FX_BOOL bHighlight) { |
+ static_cast<CXFA_FFWidget*>(hWidget)->RenderWidget( |
+ pGS, pMatrix, bHighlight ? XFA_WIDGETSTATUS_Highlight : 0, 0); |
+} |
+FX_BOOL CXFA_FFWidgetHandler::HasEvent(CXFA_WidgetAcc* pWidgetAcc, |
+ XFA_EVENTTYPE eEventType) { |
+ if (!pWidgetAcc || eEventType == XFA_EVENT_Unknown) { |
+ return FALSE; |
+ } |
+ if (pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) { |
+ return FALSE; |
+ } |
+ switch (eEventType) { |
+ case XFA_EVENT_Calculate: { |
+ CXFA_Calculate calc = pWidgetAcc->GetCalculate(); |
+ if (!calc) { |
+ return FALSE; |
+ } |
+ if (calc.GetScript()) { |
+ return TRUE; |
+ } |
+ return FALSE; |
+ } |
+ case XFA_EVENT_Validate: { |
+ CXFA_Validate val = pWidgetAcc->GetValidate(); |
+ if (!val) { |
+ return FALSE; |
+ } |
+ if (val.GetScript()) { |
+ return TRUE; |
+ } |
+ return FALSE; |
+ } |
+ default: |
+ break; |
+ } |
+ CXFA_NodeArray eventArray; |
+ return pWidgetAcc->GetEventByActivity(gs_EventActivity[eEventType], |
+ eventArray); |
+} |
+int32_t CXFA_FFWidgetHandler::ProcessEvent(CXFA_WidgetAcc* pWidgetAcc, |
+ CXFA_EventParam* pParam) { |
+ if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) { |
+ return XFA_EVENTERROR_NotExist; |
+ } |
+ if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) { |
+ return XFA_EVENTERROR_NotExist; |
+ } |
+ switch (pParam->m_eType) { |
+ case XFA_EVENT_Calculate: |
+ return pWidgetAcc->ProcessCalculate(); |
+ case XFA_EVENT_Validate: |
+ if (((CXFA_FFDoc*)m_pDocView->GetDoc()) |
+ ->GetDocProvider() |
+ ->IsValidationsEnabled(m_pDocView->GetDoc())) { |
+ return pWidgetAcc->ProcessValidate(); |
+ } |
+ return XFA_EVENTERROR_Disabled; |
+ case XFA_EVENT_InitCalculate: { |
+ CXFA_Calculate calc = pWidgetAcc->GetCalculate(); |
+ if (!calc) { |
+ return XFA_EVENTERROR_NotExist; |
+ } |
+ if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) { |
+ return XFA_EVENTERROR_Disabled; |
+ } |
+ CXFA_Script script = calc.GetScript(); |
+ return pWidgetAcc->ExecuteScript(script, pParam); |
+ } |
+ default: |
+ break; |
+ } |
+ int32_t iRet = |
+ pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam); |
+ return iRet; |
+} |
+IXFA_Widget* CXFA_FFWidgetHandler::CreateWidget(IXFA_Widget* hParent, |
+ XFA_WIDGETTYPE eType, |
+ IXFA_Widget* hBefore) { |
+ CXFA_Node* pParentFormItem = |
+ hParent ? static_cast<CXFA_FFWidget*>(hParent)->GetDataAcc()->GetNode() |
+ : NULL; |
+ CXFA_Node* pBeforeFormItem = |
+ hBefore ? static_cast<CXFA_FFWidget*>(hBefore)->GetDataAcc()->GetNode() |
+ : NULL; |
+ CXFA_Node* pNewFormItem = |
+ CreateWidgetFormItem(eType, pParentFormItem, pBeforeFormItem); |
+ if (pNewFormItem == NULL) { |
+ return NULL; |
+ } |
+ pNewFormItem->GetTemplateNode()->SetFlag(XFA_NODEFLAG_Initialized); |
+ pNewFormItem->SetFlag(XFA_NODEFLAG_Initialized); |
+ m_pDocView->RunLayout(); |
+ CXFA_LayoutItem* pLayout = |
+ m_pDocView->GetXFALayout()->GetLayoutItem(pNewFormItem); |
+ return (IXFA_Widget*)pLayout; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateWidgetFormItem( |
+ XFA_WIDGETTYPE eType, |
+ CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ switch (eType) { |
+ case XFA_WIDGETTYPE_Barcode: |
+ return NULL; |
+ case XFA_WIDGETTYPE_PushButton: |
+ return CreatePushButton(pParent, pBefore); |
+ case XFA_WIDGETTYPE_CheckButton: |
+ return CreateCheckButton(pParent, pBefore); |
+ case XFA_WIDGETTYPE_ExcludeGroup: |
+ return CreateExclGroup(pParent, pBefore); |
+ case XFA_WIDGETTYPE_RadioButton: |
+ return CreateRadioButton(pParent, pBefore); |
+ case XFA_WIDGETTYPE_Arc: |
+ return CreateArc(pParent, pBefore); |
+ case XFA_WIDGETTYPE_Rectangle: |
+ return CreateRectangle(pParent, pBefore); |
+ case XFA_WIDGETTYPE_Image: |
+ return CreateImage(pParent, pBefore); |
+ case XFA_WIDGETTYPE_Line: |
+ return CreateLine(pParent, pBefore); |
+ case XFA_WIDGETTYPE_Text: |
+ return CreateText(pParent, pBefore); |
+ case XFA_WIDGETTYPE_DatetimeEdit: |
+ return CreateDatetimeEdit(pParent, pBefore); |
+ case XFA_WIDGETTYPE_DecimalField: |
+ return CreateDecimalField(pParent, pBefore); |
+ case XFA_WIDGETTYPE_NumericField: |
+ return CreateNumericField(pParent, pBefore); |
+ case XFA_WIDGETTYPE_Signature: |
+ return CreateSignature(pParent, pBefore); |
+ case XFA_WIDGETTYPE_TextEdit: |
+ return CreateTextEdit(pParent, pBefore); |
+ case XFA_WIDGETTYPE_DropdownList: |
+ return CreateDropdownList(pParent, pBefore); |
+ case XFA_WIDGETTYPE_ListBox: |
+ return CreateListBox(pParent, pBefore); |
+ case XFA_WIDGETTYPE_ImageField: |
+ return CreateImageField(pParent, pBefore); |
+ case XFA_WIDGETTYPE_PasswordEdit: |
+ return CreatePasswordEdit(pParent, pBefore); |
+ case XFA_WIDGETTYPE_Subform: |
+ return CreateSubform(pParent, pBefore); |
+ default: |
+ break; |
+ } |
+ return NULL; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreatePushButton(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_Button, pParent, pBefore); |
+ CXFA_Node* pCaption = CreateCopyNode(XFA_ELEMENT_Caption, pField); |
+ CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pCaption); |
+ CXFA_Node* pText = CreateCopyNode(XFA_ELEMENT_Text, pValue); |
+ pText->SetContent(FX_WSTRC(L"Button"), FX_WSTRC(L"Button"), FALSE); |
+ CXFA_Node* pPara = CreateCopyNode(XFA_ELEMENT_Para, pCaption); |
+ pPara->SetEnum(XFA_ATTRIBUTE_VAlign, XFA_ATTRIBUTEENUM_Middle, FALSE); |
+ pPara->SetEnum(XFA_ATTRIBUTE_HAlign, XFA_ATTRIBUTEENUM_Center, FALSE); |
+ CreateFontNode(pCaption); |
+ CXFA_Node* pBorder = CreateCopyNode(XFA_ELEMENT_Border, pField); |
+ pBorder->SetEnum(XFA_ATTRIBUTE_Hand, XFA_ATTRIBUTEENUM_Right, FALSE); |
+ CXFA_Node* pEdge = CreateCopyNode(XFA_ELEMENT_Edge, pBorder); |
+ pEdge->SetEnum(XFA_ATTRIBUTE_Stroke, XFA_ATTRIBUTEENUM_Raised, FALSE); |
+ CXFA_Node* pFill = CreateCopyNode(XFA_ELEMENT_Fill, pBorder); |
+ CXFA_Node* pColor = CreateCopyNode(XFA_ELEMENT_Color, pFill); |
+ pColor->SetCData(XFA_ATTRIBUTE_Value, FX_WSTRC(L"212, 208, 200"), FALSE); |
+ CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField); |
+ pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateCheckButton(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateExclGroup(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ return CreateFormItem(XFA_ELEMENT_ExclGroup, pParent, pBefore); |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateRadioButton(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore); |
+ CXFA_Node* pUi = pField->GetFirstChildByClass(XFA_ELEMENT_Ui); |
+ CXFA_Node* pWidget = pUi->GetFirstChildByClass(XFA_ELEMENT_CheckButton); |
+ pWidget->SetEnum(XFA_ATTRIBUTE_Shape, XFA_ATTRIBUTEENUM_Round); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateDatetimeEdit(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_DateTimeEdit, pParent, pBefore); |
+ CreateValueNode(XFA_ELEMENT_Date, pField); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateDecimalField(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateNumericField(pParent, pBefore); |
+ CreateValueNode(XFA_ELEMENT_Decimal, pField); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateNumericField(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_NumericEdit, pParent, pBefore); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateSignature(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_Signature, pParent, pBefore); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateTextEdit(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_TextEdit, pParent, pBefore); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateDropdownList(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_ChoiceList, pParent, pBefore); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateListBox(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateDropdownList(pParent, pBefore); |
+ CXFA_Node* pUi = pField->GetNodeItem(XFA_NODEITEM_FirstChild); |
+ CXFA_Node* pListBox = pUi->GetNodeItem(XFA_NODEITEM_FirstChild); |
+ pListBox->SetEnum(XFA_ATTRIBUTE_Open, XFA_ATTRIBUTEENUM_Always); |
+ pListBox->SetEnum(XFA_ATTRIBUTE_CommitOn, XFA_ATTRIBUTEENUM_Exit); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateImageField(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_ImageEdit, pParent, pBefore); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreatePasswordEdit(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateField(XFA_ELEMENT_PasswordEdit, pParent, pBefore); |
+ CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField); |
+ pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None, FALSE); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateField(XFA_ELEMENT eElement, |
+ CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateFormItem(XFA_ELEMENT_Field, pParent, pBefore); |
+ CreateCopyNode(eElement, CreateCopyNode(XFA_ELEMENT_Ui, pField)); |
+ CreateFontNode(pField); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateArc(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ return CreateDraw(XFA_ELEMENT_Arc, pParent, pBefore); |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateRectangle(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ return CreateDraw(XFA_ELEMENT_Rectangle, pParent, pBefore); |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateImage(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Image, pParent, pBefore); |
+ CreateCopyNode(XFA_ELEMENT_ImageEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField)); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateLine(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Line, pParent, pBefore); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateText(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Text, pParent, pBefore); |
+ CreateCopyNode(XFA_ELEMENT_TextEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField)); |
+ CreateFontNode(pField); |
+ return pField; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateDraw(XFA_ELEMENT eElement, |
+ CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pDraw = CreateFormItem(XFA_ELEMENT_Draw, pParent, pBefore); |
+ CreateValueNode(eElement, pDraw); |
+ return pDraw; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateSubform(CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pSubform = CreateFormItem(XFA_ELEMENT_Subform, pParent, pBefore); |
+ return pSubform; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateFormItem(XFA_ELEMENT eElement, |
+ CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pTemplateParent = |
+ pParent != NULL ? pParent->GetTemplateNode() : NULL; |
+ CXFA_Node* pNewFormItem = pTemplateParent->CloneTemplateToForm(FALSE); |
+ if (pParent != NULL) { |
+ pParent->InsertChild(pNewFormItem, pBefore); |
+ } |
+ return pNewFormItem; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateCopyNode(XFA_ELEMENT eElement, |
+ CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Node* pTemplateParent = |
+ pParent != NULL ? pParent->GetTemplateNode() : NULL; |
+ CXFA_Node* pNewNode = |
+ CreateTemplateNode(eElement, pTemplateParent, |
+ pBefore ? pBefore->GetTemplateNode() : NULL) |
+ ->Clone(FALSE); |
+ if (pParent != NULL) { |
+ pParent->InsertChild(pNewNode, pBefore); |
+ } |
+ return pNewNode; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateTemplateNode(XFA_ELEMENT eElement, |
+ CXFA_Node* pParent, |
+ CXFA_Node* pBefore) const { |
+ CXFA_Document* pXFADoc = GetXFADoc(); |
+ CXFA_Node* pNewTemplateNode = pXFADoc->GetParser()->GetFactory()->CreateNode( |
+ XFA_XDPPACKET_Template, eElement); |
+ if (pParent != NULL) { |
+ pParent->InsertChild(pNewTemplateNode, pBefore); |
+ } |
+ return pNewTemplateNode; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateFontNode(CXFA_Node* pParent) const { |
+ CXFA_Node* pFont = CreateCopyNode(XFA_ELEMENT_Font, pParent); |
+ pFont->SetCData(XFA_ATTRIBUTE_Typeface, FX_WSTRC(L"Myriad Pro"), FALSE); |
+ return pFont; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateMarginNode(CXFA_Node* pParent, |
+ FX_DWORD dwFlags, |
+ FX_FLOAT fInsets[4]) const { |
+ CXFA_Node* pMargin = CreateCopyNode(XFA_ELEMENT_Margin, pParent); |
+ if (dwFlags & 0x01) { |
+ pMargin->SetMeasure(XFA_ATTRIBUTE_LeftInset, |
+ CXFA_Measurement(fInsets[0], XFA_UNIT_Pt), FALSE); |
+ } |
+ if (dwFlags & 0x02) { |
+ pMargin->SetMeasure(XFA_ATTRIBUTE_TopInset, |
+ CXFA_Measurement(fInsets[1], XFA_UNIT_Pt), FALSE); |
+ } |
+ if (dwFlags & 0x04) { |
+ pMargin->SetMeasure(XFA_ATTRIBUTE_RightInset, |
+ CXFA_Measurement(fInsets[2], XFA_UNIT_Pt), FALSE); |
+ } |
+ if (dwFlags & 0x08) { |
+ pMargin->SetMeasure(XFA_ATTRIBUTE_BottomInset, |
+ CXFA_Measurement(fInsets[3], XFA_UNIT_Pt), FALSE); |
+ } |
+ return pMargin; |
+} |
+CXFA_Node* CXFA_FFWidgetHandler::CreateValueNode(XFA_ELEMENT eValue, |
+ CXFA_Node* pParent) const { |
+ CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pParent); |
+ CreateCopyNode(eValue, pValue); |
+ return pValue; |
+} |
+IXFA_ObjFactory* CXFA_FFWidgetHandler::GetObjFactory() const { |
+ return GetXFADoc()->GetParser()->GetFactory(); |
+} |
+CXFA_Document* CXFA_FFWidgetHandler::GetXFADoc() const { |
+ return ((CXFA_FFDoc*)(m_pDocView->GetDoc()))->GetXFADoc(); |
+} |
+CXFA_FFMenuHandler::CXFA_FFMenuHandler() {} |
+CXFA_FFMenuHandler::~CXFA_FFMenuHandler() {} |
+FX_BOOL CXFA_FFMenuHandler::CanCopy(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanCopy(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::CanCut(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanCut(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::CanPaste(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanPaste(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::CanSelectAll(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanSelectAll(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::CanDelete(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanDelete(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::CanDeSelect(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanDeSelect(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::Copy(IXFA_Widget* hWidget, CFX_WideString& wsText) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->Copy(wsText); |
+} |
+FX_BOOL CXFA_FFMenuHandler::Cut(IXFA_Widget* hWidget, CFX_WideString& wsText) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->Cut(wsText); |
+} |
+FX_BOOL CXFA_FFMenuHandler::Paste(IXFA_Widget* hWidget, |
+ const CFX_WideString& wsText) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->Paste(wsText); |
+} |
+FX_BOOL CXFA_FFMenuHandler::SelectAll(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->SelectAll(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::Delete(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->Delete(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::DeSelect(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->DeSelect(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::CanUndo(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanUndo(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::CanRedo(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->CanRedo(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::Undo(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->Undo(); |
+} |
+FX_BOOL CXFA_FFMenuHandler::Redo(IXFA_Widget* hWidget) { |
+ return static_cast<CXFA_FFWidget*>(hWidget)->Redo(); |
+} |
+#define FX_EDIT_ISLATINWORD(u) \ |
+ (u == 0x2D || (u <= 0x005A && u >= 0x0041) || \ |
+ (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0) || \ |
+ u == 0x0027) |
+FX_BOOL CXFA_FFMenuHandler::GetSuggestWords(IXFA_Widget* hWidget, |
+ CFX_PointF pointf, |
+ CFX_ByteStringArray& sSuggest) { |
+ return static_cast<CXFA_FFWidget*>(hWidget) |
+ ->GetSuggestWords(pointf, sSuggest); |
+} |
+FX_BOOL CXFA_FFMenuHandler::ReplaceSpellCheckWord( |
+ IXFA_Widget* hWidget, |
+ CFX_PointF pointf, |
+ const CFX_ByteStringC& bsReplace) { |
+ return static_cast<CXFA_FFWidget*>(hWidget) |
+ ->ReplaceSpellCheckWord(pointf, bsReplace); |
+} |