FX_BOOL CPDFXFA_Page::LoadXFAPageView() { if (!m_pDocument) return FALSE; CXFA_FFDoc* pXFADoc = m_pDocument->GetXFADoc(); if (!pXFADoc) return FALSE; CXFA_FFDocView* pXFADocView = m_pDocument->GetXFADocView(); if (!pXFADocView) return FALSE; CXFA_FFPageView* pPageView = pXFADocView->GetPageView(m_iPageIndex); if (!pPageView) return FALSE; m_pXFAPageView = pPageView; return TRUE; }
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); }
void CPDFXFA_DocEnvironment::PageViewEvent(CXFA_FFPageView* pPageView, uint32_t dwFlags) { CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv(); if (!pFormFillEnv) return; if (m_pContext->GetLoadStatus() == FXFA_LOADSTATUS_LOADING || m_pContext->GetLoadStatus() == FXFA_LOADSTATUS_CLOSING || XFA_PAGEVIEWEVENT_StopLayout != dwFlags) return; int nNewCount = m_pContext->GetPageCount(); if (nNewCount == m_pContext->GetOriginalPageCount()) return; CXFA_FFDocView* pXFADocView = m_pContext->GetXFADocView(); if (!pXFADocView) return; for (int iPageIter = 0; iPageIter < m_pContext->GetOriginalPageCount(); iPageIter++) { CPDFXFA_Page* pPage = (*m_pContext->GetXFAPageList())[iPageIter]; if (!pPage) continue; m_pContext->GetFormFillEnv()->RemovePageView(pPage); pPage->SetXFAPageView(pXFADocView->GetPageView(iPageIter)); } int flag = (nNewCount < m_pContext->GetOriginalPageCount()) ? FXFA_PAGEVIEWEVENT_POSTREMOVED : FXFA_PAGEVIEWEVENT_POSTADDED; int count = FXSYS_abs(nNewCount - m_pContext->GetOriginalPageCount()); m_pContext->SetOriginalPageCount(nNewCount); pFormFillEnv->PageEvent(count, flag); }