void CXFA_FFNotify::OnValueChanging(CXFA_Node* pSender, XFA_ATTRIBUTE eAttr) { if (eAttr != XFA_ATTRIBUTE_Presence) return; if (pSender->GetPacketID() & XFA_XDPPACKET_Datasets) return; if (!pSender->IsFormContainer()) return; CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); if (!pDocView) return; if (pDocView->GetLayoutStatus() < XFA_DOCVIEW_LAYOUTSTATUS_End) return; CXFA_WidgetAcc* pWidgetAcc = static_cast<CXFA_WidgetAcc*>(pSender->GetWidgetData()); if (!pWidgetAcc) return; CXFA_FFWidget* pWidget = nullptr; while ((pWidget = pWidgetAcc->GetNextWidget(pWidget)) != nullptr) { if (pWidget->IsLoaded()) pWidget->AddInvalidateRect(); } }
void CXFA_FFNotify::OnChildRemoved() { CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); if (!pDocView) return; bool bLayoutReady = !(pDocView->m_bInLayoutStatus) && (pDocView->GetLayoutStatus() == XFA_DOCVIEW_LAYOUTSTATUS_End); if (bLayoutReady) m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc); }
void CXFA_FFNotify::OnChildAdded(CXFA_Node* pSender) { if (!pSender->IsFormContainer()) { return; } CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); if (!pDocView) { return; } FX_BOOL bLayoutReady = !(pDocView->m_bInLayoutStatus) && (pDocView->GetLayoutStatus() == XFA_DOCVIEW_LAYOUTSTATUS_End); if (bLayoutReady) m_pDoc->GetDocProvider()->SetChangeMark(m_pDoc); }
void CXFA_FFNotify::OnLayoutItemAdded(CXFA_LayoutProcessor* pLayout, CXFA_LayoutItem* pSender, int32_t iPageIdx, uint32_t dwStatus) { CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout); if (!pDocView) return; CXFA_FFWidget* pWidget = XFA_GetWidgetFromLayoutItem(pSender); if (!pWidget) return; CXFA_FFPageView* pNewPageView = pDocView->GetPageView(iPageIdx); uint32_t dwFilter = XFA_WidgetStatus_Visible | XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable; pWidget->ModifyStatus(dwStatus, dwFilter); CXFA_FFPageView* pPrePageView = pWidget->GetPageView(); if (pPrePageView != pNewPageView || (dwStatus & (XFA_WidgetStatus_Visible | XFA_WidgetStatus_Viewable)) == (XFA_WidgetStatus_Visible | XFA_WidgetStatus_Viewable)) { pWidget->SetPageView(pNewPageView); m_pDoc->GetDocProvider()->WidgetPostAdd(pWidget, pWidget->GetDataAcc()); } if (pDocView->GetLayoutStatus() != XFA_DOCVIEW_LAYOUTSTATUS_End || !(dwStatus & XFA_WidgetStatus_Visible)) { return; } if (pWidget->IsLoaded()) { CFX_RectF rtOld; pWidget->GetWidgetRect(rtOld); if (rtOld != pWidget->ReCacheWidgetRect()) pWidget->PerformLayout(); } else { pWidget->LoadWidget(); } pWidget->AddInvalidateRect(nullptr); }
int32_t CXFA_FFNotify::GetLayoutStatus() { CXFA_FFDocView* pDocView = m_pDoc->GetDocView(); return pDocView ? pDocView->GetLayoutStatus() : 0; }