CXFA_Node* CXFA_FFNotify::GetFocusWidgetNode() { CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); if (!pDocView) { return nullptr; } CXFA_WidgetAcc* pAcc = pDocView->GetFocusWidgetAcc(); return pAcc ? pAcc->GetNode() : nullptr; }
void CXFA_FFDocView::RunCalculateRecursive(int32_t& iIndex) { while (iIndex < m_CalculateAccs.GetSize()) { CXFA_WidgetAcc* pCurAcc = (CXFA_WidgetAcc*)m_CalculateAccs[iIndex]; AddCalculateNodeNotify(pCurAcc->GetNode()); int32_t iRefCount = (int32_t)(uintptr_t)pCurAcc->GetNode()->GetUserData(XFA_CalcRefCount); iRefCount++; pCurAcc->GetNode()->SetUserData(XFA_CalcRefCount, (void*)(uintptr_t)iRefCount); if (iRefCount > 11) { break; } if ((pCurAcc->ProcessCalculate()) == XFA_EVENTERROR_Sucess) { AddValidateWidget(pCurAcc); } iIndex++; RunCalculateRecursive(iIndex); } }
FX_BOOL CXFA_FFDocView::RunValidate() { if (!m_pDoc->GetDocProvider()->IsValidationsEnabled(m_pDoc)) { return FALSE; } int32_t iCounts = m_ValidateAccs.GetSize(); for (int32_t i = 0; i < iCounts; i++) { CXFA_WidgetAcc* pAcc = (CXFA_WidgetAcc*)m_ValidateAccs[i]; if (pAcc->GetNode()->HasFlag(XFA_NODEFLAG_HasRemoved)) { continue; } pAcc->ProcessValidate(); } m_ValidateAccs.RemoveAll(); return TRUE; }
CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetTraverseWidget( CXFA_FFWidget* pWidget) { CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc(); CXFA_Node* pTraversal = pAcc->GetNode()->GetChild(0, XFA_Element::Traversal); if (pTraversal) { CXFA_Node* pTraverse = pTraversal->GetChild(0, XFA_Element::Traverse); if (pTraverse) { CFX_WideString wsTraverseWidgetName; if (pTraverse->GetAttribute(XFA_ATTRIBUTE_Ref, wsTraverseWidgetName)) { return FindWidgetByName(wsTraverseWidgetName, pWidget); } } } return nullptr; }
FX_BOOL CXFA_FFDocView::RunValidate() { if (!m_pDoc->GetDocEnvironment()->IsValidationsEnabled(m_pDoc)) { return FALSE; } int32_t iCounts = m_ValidateAccs.GetSize(); for (int32_t i = 0; i < iCounts; i++) { CXFA_WidgetAcc* pAcc = m_ValidateAccs[i]; if (pAcc->GetNode()->HasRemovedChildren()) continue; pAcc->ProcessValidate(); } m_ValidateAccs.RemoveAll(); return TRUE; }
int32_t CXFA_FFDocView::RunCalculateWidgets() { if (!m_pDoc->GetDocProvider()->IsCalculationsEnabled(m_pDoc)) { return XFA_EVENTERROR_Disabled; } int32_t iCounts = m_CalculateAccs.GetSize(); int32_t iIndex = 0; if (iCounts > 0) { RunCalculateRecursive(iIndex); } for (int32_t i = 0; i < m_CalculateAccs.GetSize(); i++) { CXFA_WidgetAcc* pCurAcc = (CXFA_WidgetAcc*)m_CalculateAccs[i]; pCurAcc->GetNode()->SetUserData(XFA_CalcRefCount, (void*)(uintptr_t)0); } m_CalculateAccs.RemoveAll(); return XFA_EVENTERROR_Sucess; }
void CXFA_FFTextEdit::ValidateNumberField(const CFX_WideString& wsText) { CXFA_WidgetAcc* pAcc = GetDataAcc(); if (pAcc && pAcc->GetUIType() == XFA_Element::NumericEdit) { IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider(); if (pAppProvider) { CFX_WideString wsTitle; pAppProvider->LoadString(XFA_IDS_AppName, wsTitle); CFX_WideString wsError; pAppProvider->LoadString(XFA_IDS_ValidateNumberError, wsError); CFX_WideString wsSomField; pAcc->GetNode()->GetSOMExpression(wsSomField); CFX_WideString wsMessage; wsMessage.Format(wsError.c_str(), wsText.c_str(), wsSomField.c_str()); pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Error, XFA_MB_OK); } } }
void CXFA_FFDocView::AddCalculateNodeNotify(CXFA_Node* pNodeChange) { CXFA_CalcData* pGlobalData = (CXFA_CalcData*)pNodeChange->GetUserData(XFA_CalcData); int32_t iCount = pGlobalData ? pGlobalData->m_Globals.GetSize() : 0; for (int32_t i = 0; i < iCount; i++) { CXFA_WidgetAcc* pResultAcc = pGlobalData->m_Globals[i]; if (pResultAcc->GetNode()->HasRemovedChildren()) continue; int32_t iAccs = m_CalculateAccs.GetSize(); CXFA_WidgetAcc* pCurrentAcc = iAccs > 0 ? m_CalculateAccs[iAccs - 1] : nullptr; if (pCurrentAcc != pResultAcc) { m_CalculateAccs.Add(pResultAcc); } } }
void CXFA_FFDocView::AddCalculateNodeNotify(CXFA_Node* pNodeChange) { CXFA_CalcData* pGlobalData = (CXFA_CalcData*)pNodeChange->GetUserData(XFA_CalcData); int32_t iCount = pGlobalData ? pGlobalData->m_Globals.GetSize() : 0; for (int32_t i = 0; i < iCount; i++) { CXFA_WidgetAcc* pResultAcc = (CXFA_WidgetAcc*)pGlobalData->m_Globals[i]; if (pResultAcc->GetNode()->HasFlag(XFA_NODEFLAG_HasRemoved)) { continue; } int32_t iAccs = m_CalculateAccs.GetSize(); CXFA_WidgetAcc* pCurrentAcc = (iAccs < 1) ? (CXFA_WidgetAcc*)NULL : (CXFA_WidgetAcc*)m_CalculateAccs[iAccs - 1]; if (pCurrentAcc != pResultAcc) { m_CalculateAccs.Add(pResultAcc); } } }