diff options
Diffstat (limited to 'xfa/fxfa/parser')
-rw-r--r-- | xfa/fxfa/parser/xfa_doclayout.h | 7 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_document.h | 4 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_layout_appadapter.cpp | 20 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_layout_appadapter.h | 2 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_layout_pagemgr_new.cpp | 457 |
5 files changed, 240 insertions, 250 deletions
diff --git a/xfa/fxfa/parser/xfa_doclayout.h b/xfa/fxfa/parser/xfa_doclayout.h index 267f79980b..a0b29e5ff8 100644 --- a/xfa/fxfa/parser/xfa_doclayout.h +++ b/xfa/fxfa/parser/xfa_doclayout.h @@ -63,13 +63,6 @@ class CXFA_ContainerLayoutItem : public CXFA_LayoutItem { CXFA_Node* m_pOldSubform; }; -#define XFA_WIDGETSTATUS_Access 0x80000000 -#define XFA_WIDGETSTATUS_Disabled 0x40000000 -#define XFA_WIDGETSTATUS_RectCached 0x20000000 -#define XFA_WIDGETSTATUS_ButtonDown 0x10000000 -#define XFA_WIDGETSTATUS_Highlight 0x08000000 -#define XFA_WIDGETSTATUS_TextEditValueChanged 0x04000000 - class CXFA_ContentLayoutItem : public CXFA_LayoutItem { public: CXFA_ContentLayoutItem(CXFA_Node* pNode); diff --git a/xfa/fxfa/parser/xfa_document.h b/xfa/fxfa/parser/xfa_document.h index 16428ea781..86b2a6f62c 100644 --- a/xfa/fxfa/parser/xfa_document.h +++ b/xfa/fxfa/parser/xfa_document.h @@ -39,10 +39,6 @@ enum XFA_VERSION { XFA_VERSION_MAX = 400, }; -#define XFA_LAYOUTSTATUS_Visible 0x0001 -#define XFA_LAYOUTSTATUS_Viewable 0x0010 -#define XFA_LAYOUTSTATUS_Printable 0x0020 - enum XFA_LAYOUTRESULT { XFA_LAYOUTRESULT_Continue, XFA_LAYOUTRESULT_Done, diff --git a/xfa/fxfa/parser/xfa_layout_appadapter.cpp b/xfa/fxfa/parser/xfa_layout_appadapter.cpp index 2331972c75..dca11da80f 100644 --- a/xfa/fxfa/parser/xfa_layout_appadapter.cpp +++ b/xfa/fxfa/parser/xfa_layout_appadapter.cpp @@ -20,26 +20,6 @@ #include "xfa/fxfa/parser/xfa_script.h" #include "xfa/fxfa/parser/xfa_utils.h" -uint32_t XFA_GetRelevant(CXFA_Node* pFormItem, uint32_t dwParentRelvant) { - uint32_t dwRelevant = XFA_LAYOUTSTATUS_Viewable | XFA_LAYOUTSTATUS_Printable; - CFX_WideStringC wsRelevant; - if (pFormItem->TryCData(XFA_ATTRIBUTE_Relevant, wsRelevant)) { - if (wsRelevant == FX_WSTRC(L"+print") || wsRelevant == FX_WSTRC(L"print")) { - dwRelevant &= ~XFA_LAYOUTSTATUS_Viewable; - } else if (wsRelevant == FX_WSTRC(L"-print")) { - dwRelevant &= ~XFA_LAYOUTSTATUS_Printable; - } - } - if (!(dwParentRelvant & XFA_LAYOUTSTATUS_Viewable) && - (dwRelevant != XFA_LAYOUTSTATUS_Viewable)) { - dwRelevant &= ~XFA_LAYOUTSTATUS_Viewable; - } - if (!(dwParentRelvant & XFA_LAYOUTSTATUS_Printable) && - (dwRelevant != XFA_LAYOUTSTATUS_Printable)) { - dwRelevant &= ~XFA_LAYOUTSTATUS_Printable; - } - return dwRelevant; -} void XFA_ReleaseLayoutItem(CXFA_LayoutItem* pLayoutItem) { CXFA_LayoutItem* pNode = pLayoutItem->m_pFirstChild; CXFA_FFNotify* pNotify = diff --git a/xfa/fxfa/parser/xfa_layout_appadapter.h b/xfa/fxfa/parser/xfa_layout_appadapter.h index eb4a9631d6..be7072b704 100644 --- a/xfa/fxfa/parser/xfa_layout_appadapter.h +++ b/xfa/fxfa/parser/xfa_layout_appadapter.h @@ -71,7 +71,7 @@ class CXFA_TraverseStrategy_ContentLayoutItem { return (CXFA_ContentLayoutItem*)pLayoutItem->m_pParent; } }; -uint32_t XFA_GetRelevant(CXFA_Node* pFormItem, uint32_t dwParentRelvant); + void XFA_ReleaseLayoutItem(CXFA_LayoutItem* pLayoutItem); #endif // XFA_FXFA_PARSER_XFA_LAYOUT_APPADAPTER_H_ diff --git a/xfa/fxfa/parser/xfa_layout_pagemgr_new.cpp b/xfa/fxfa/parser/xfa_layout_pagemgr_new.cpp index 08ce54f844..374d1dc44e 100644 --- a/xfa/fxfa/parser/xfa_layout_pagemgr_new.cpp +++ b/xfa/fxfa/parser/xfa_layout_pagemgr_new.cpp @@ -22,6 +22,206 @@ #include "xfa/fxfa/parser/xfa_script_imp.h" #include "xfa/fxfa/parser/xfa_utils.h" +namespace { + +class PageSetContainerLayoutItem { + public: + static inline CXFA_ContainerLayoutItem* GetFirstChild( + CXFA_ContainerLayoutItem* pLayoutItem) { + if (pLayoutItem->m_pFormNode->GetClassID() != XFA_ELEMENT_PageSet) + return nullptr; + + CXFA_ContainerLayoutItem* pChildItem = + static_cast<CXFA_ContainerLayoutItem*>(pLayoutItem->m_pFirstChild); + while (pChildItem && + pChildItem->m_pFormNode->GetClassID() != XFA_ELEMENT_PageSet) { + pChildItem = + static_cast<CXFA_ContainerLayoutItem*>(pChildItem->m_pNextSibling); + } + return pChildItem; + } + + static inline CXFA_ContainerLayoutItem* GetNextSibling( + CXFA_ContainerLayoutItem* pLayoutItem) { + CXFA_ContainerLayoutItem* pChildItem = + static_cast<CXFA_ContainerLayoutItem*>(pLayoutItem->m_pNextSibling); + while (pChildItem && + pChildItem->m_pFormNode->GetClassID() != XFA_ELEMENT_PageSet) { + pChildItem = + static_cast<CXFA_ContainerLayoutItem*>(pChildItem->m_pNextSibling); + } + return pChildItem; + } + + static inline CXFA_ContainerLayoutItem* GetParent( + CXFA_ContainerLayoutItem* pLayoutItem) { + return static_cast<CXFA_ContainerLayoutItem*>(pLayoutItem->m_pParent); + } +}; + +uint32_t GetRelevant(CXFA_Node* pFormItem, uint32_t dwParentRelvant) { + uint32_t dwRelevant = XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable; + CFX_WideStringC wsRelevant; + if (pFormItem->TryCData(XFA_ATTRIBUTE_Relevant, wsRelevant)) { + if (wsRelevant == FX_WSTRC(L"+print") || wsRelevant == FX_WSTRC(L"print")) + dwRelevant &= ~XFA_WidgetStatus_Viewable; + else if (wsRelevant == FX_WSTRC(L"-print")) + dwRelevant &= ~XFA_WidgetStatus_Printable; + } + if (!(dwParentRelvant & XFA_WidgetStatus_Viewable) && + (dwRelevant != XFA_WidgetStatus_Viewable)) { + dwRelevant &= ~XFA_WidgetStatus_Viewable; + } + if (!(dwParentRelvant & XFA_WidgetStatus_Printable) && + (dwRelevant != XFA_WidgetStatus_Printable)) { + dwRelevant &= ~XFA_WidgetStatus_Printable; + } + return dwRelevant; +} + +void SyncContainer(CXFA_FFNotify* pNotify, + CXFA_LayoutProcessor* pDocLayout, + CXFA_LayoutItem* pContainerItem, + uint32_t dwRelevant, + FX_BOOL bVisible, + int32_t nPageIndex) { + FX_BOOL bVisibleItem = FALSE; + uint32_t dwStatus = 0; + uint32_t dwRelevantContainer = 0; + if (bVisible) { + XFA_ATTRIBUTEENUM eAttributeValue = + pContainerItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Presence); + if (eAttributeValue == XFA_ATTRIBUTEENUM_Visible || + eAttributeValue == XFA_ATTRIBUTEENUM_Unknown) { + bVisibleItem = TRUE; + } + dwRelevantContainer = GetRelevant(pContainerItem->m_pFormNode, dwRelevant); + dwStatus = + (bVisibleItem ? XFA_WidgetStatus_Visible : 0) | dwRelevantContainer; + } + pNotify->OnLayoutItemAdded(pDocLayout, pContainerItem, nPageIndex, dwStatus); + for (CXFA_LayoutItem* pChild = pContainerItem->m_pFirstChild; pChild; + pChild = pChild->m_pNextSibling) { + if (pChild->IsContentLayoutItem()) { + SyncContainer(pNotify, pDocLayout, pChild, dwRelevantContainer, + bVisibleItem, nPageIndex); + } + } +} + +void ReorderLayoutItemToTail(CXFA_ContainerLayoutItem* pLayoutItem) { + CXFA_ContainerLayoutItem* pParentLayoutItem = + (CXFA_ContainerLayoutItem*)pLayoutItem->m_pParent; + if (!pParentLayoutItem) + return; + + pParentLayoutItem->RemoveChild(pLayoutItem); + pParentLayoutItem->AddChild(pLayoutItem); +} + +void RemoveLayoutItem(CXFA_ContainerLayoutItem* pLayoutItem) { + CXFA_ContainerLayoutItem* pParentLayoutItem = + (CXFA_ContainerLayoutItem*)pLayoutItem->m_pParent; + if (!pParentLayoutItem) + return; + + pParentLayoutItem->RemoveChild(pLayoutItem); +} + +CXFA_Node* ResolveBreakTarget(CXFA_Node* pPageSetRoot, + FX_BOOL bNewExprStyle, + CFX_WideStringC& wsTargetExpr) { + CXFA_Document* pDocument = pPageSetRoot->GetDocument(); + if (wsTargetExpr.IsEmpty()) + return nullptr; + + CFX_WideString wsTargetAll(wsTargetExpr); + wsTargetAll.TrimLeft(); + wsTargetAll.TrimRight(); + int32_t iSpliteIndex = 0; + FX_BOOL bTargetAllFind = TRUE; + while (iSpliteIndex != -1) { + CFX_WideString wsTargetExpr; + int32_t iSpliteNextIndex = 0; + if (!bTargetAllFind) { + iSpliteNextIndex = wsTargetAll.Find(' ', iSpliteIndex); + wsTargetExpr = + wsTargetAll.Mid(iSpliteIndex, iSpliteNextIndex - iSpliteIndex); + } else { + wsTargetExpr = wsTargetAll; + } + if (wsTargetExpr.IsEmpty()) + return nullptr; + + bTargetAllFind = FALSE; + if (wsTargetExpr.GetAt(0) == '#') { + CXFA_Node* pNode = pDocument->GetNodeByID( + ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Template)), + wsTargetExpr.Mid(1).AsStringC()); + if (pNode) + return pNode; + } else if (bNewExprStyle) { + CFX_WideString wsProcessedTarget = wsTargetExpr; + if (wsTargetExpr.Left(4) == FX_WSTRC(L"som(") && + wsTargetExpr.Right(1) == FX_WSTRC(L")")) { + wsProcessedTarget = wsTargetExpr.Mid(4, wsTargetExpr.GetLength() - 5); + } + XFA_RESOLVENODE_RS rs; + int32_t iCount = pDocument->GetScriptContext()->ResolveObjects( + pPageSetRoot, wsProcessedTarget.AsStringC(), rs, + XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | + XFA_RESOLVENODE_Attributes | XFA_RESOLVENODE_Siblings | + XFA_RESOLVENODE_Parent); + if (iCount > 0 && rs.nodes[0]->IsNode()) + return rs.nodes[0]->AsNode(); + } + iSpliteIndex = iSpliteNextIndex; + } + return nullptr; +} + +void SetLayoutGeneratedNodeFlag(CXFA_Node* pNode) { + pNode->SetFlag(XFA_NODEFLAG_LayoutGeneratedNode, false); + pNode->ClearFlag(XFA_NODEFLAG_UnusedNode); +} + +FX_BOOL CheckContentAreaNotUsed( + CXFA_ContainerLayoutItem* pPageAreaLayoutItem, + CXFA_Node* pContentArea, + CXFA_ContainerLayoutItem*& pContentAreaLayoutItem) { + for (CXFA_ContainerLayoutItem* pLayoutItem = + (CXFA_ContainerLayoutItem*)pPageAreaLayoutItem->m_pFirstChild; + pLayoutItem; + pLayoutItem = (CXFA_ContainerLayoutItem*)pLayoutItem->m_pNextSibling) { + if (pLayoutItem->m_pFormNode == pContentArea) { + if (pLayoutItem->m_pFirstChild == NULL) { + pContentAreaLayoutItem = pLayoutItem; + return TRUE; + } + return FALSE; + } + } + return TRUE; +} + +void SyncRemoveLayoutItem(CXFA_LayoutItem* pParentLayoutItem, + CXFA_FFNotify* pNotify, + CXFA_LayoutProcessor* pDocLayout) { + CXFA_LayoutItem* pNextLayoutItem; + CXFA_LayoutItem* pCurLayoutItem = pParentLayoutItem->m_pFirstChild; + while (pCurLayoutItem) { + pNextLayoutItem = pCurLayoutItem->m_pNextSibling; + if (pCurLayoutItem->m_pFirstChild) + SyncRemoveLayoutItem(pCurLayoutItem, pNotify, pDocLayout); + + pNotify->OnLayoutItemRemoving(pDocLayout, pCurLayoutItem); + delete pCurLayoutItem; + pCurLayoutItem = pNextLayoutItem; + } +} + +} // namespace + CXFA_LayoutPageMgr::CXFA_LayoutPageMgr(CXFA_LayoutProcessor* pLayoutProcessor) : m_pLayoutProcessor(pLayoutProcessor), m_pTemplatePageSetRoot(nullptr), @@ -179,40 +379,22 @@ FX_BOOL CXFA_LayoutPageMgr::AppendNewPage(FX_BOOL bFirstTemPage) { } return !bFirstTemPage || m_pCurrentContainerRecord; } -static void XFA_LayoutItemMgr_ReorderLayoutItemToTail( - CXFA_ContainerLayoutItem* pLayoutItem) { - CXFA_ContainerLayoutItem* pParentLayoutItem = - (CXFA_ContainerLayoutItem*)pLayoutItem->m_pParent; - if (!pParentLayoutItem) { - return; - } - pParentLayoutItem->RemoveChild(pLayoutItem); - pParentLayoutItem->AddChild(pLayoutItem); -} -static void XFA_LayoutItemMgr_RemoveLayoutItem( - CXFA_ContainerLayoutItem* pLayoutItem) { - CXFA_ContainerLayoutItem* pParentLayoutItem = - (CXFA_ContainerLayoutItem*)pLayoutItem->m_pParent; - if (!pParentLayoutItem) { - return; - } - pParentLayoutItem->RemoveChild(pLayoutItem); -} + void CXFA_LayoutPageMgr::RemoveLayoutRecord(CXFA_ContainerRecord* pNewRecord, CXFA_ContainerRecord* pPrevRecord) { if (!pNewRecord || !pPrevRecord) { return; } if (pNewRecord->pCurPageSet != pPrevRecord->pCurPageSet) { - XFA_LayoutItemMgr_RemoveLayoutItem(pNewRecord->pCurPageSet); + RemoveLayoutItem(pNewRecord->pCurPageSet); return; } if (pNewRecord->pCurPageArea != pPrevRecord->pCurPageArea) { - XFA_LayoutItemMgr_RemoveLayoutItem(pNewRecord->pCurPageArea); + RemoveLayoutItem(pNewRecord->pCurPageArea); return; } if (pNewRecord->pCurContentArea != pPrevRecord->pCurContentArea) { - XFA_LayoutItemMgr_RemoveLayoutItem(pNewRecord->pCurContentArea); + RemoveLayoutItem(pNewRecord->pCurContentArea); return; } } @@ -223,15 +405,15 @@ void CXFA_LayoutPageMgr::ReorderPendingLayoutRecordToTail( return; } if (pNewRecord->pCurPageSet != pPrevRecord->pCurPageSet) { - XFA_LayoutItemMgr_ReorderLayoutItemToTail(pNewRecord->pCurPageSet); + ReorderLayoutItemToTail(pNewRecord->pCurPageSet); return; } if (pNewRecord->pCurPageArea != pPrevRecord->pCurPageArea) { - XFA_LayoutItemMgr_ReorderLayoutItemToTail(pNewRecord->pCurPageArea); + ReorderLayoutItemToTail(pNewRecord->pCurPageArea); return; } if (pNewRecord->pCurContentArea != pPrevRecord->pCurContentArea) { - XFA_LayoutItemMgr_ReorderLayoutItemToTail(pNewRecord->pCurContentArea); + ReorderLayoutItemToTail(pNewRecord->pCurContentArea); return; } } @@ -267,59 +449,6 @@ FX_FLOAT CXFA_LayoutPageMgr::GetAvailHeight() { } return XFA_LAYOUT_FLOAT_MAX; } -static CXFA_Node* XFA_ResolveBreakTarget(CXFA_Node* pPageSetRoot, - FX_BOOL bNewExprStyle, - CFX_WideStringC& wsTargetExpr) { - CXFA_Document* pDocument = pPageSetRoot->GetDocument(); - if (wsTargetExpr.IsEmpty()) { - return NULL; - } - CFX_WideString wsTargetAll(wsTargetExpr); - wsTargetAll.TrimLeft(); - wsTargetAll.TrimRight(); - int32_t iSpliteIndex = 0; - FX_BOOL bTargetAllFind = TRUE; - while (iSpliteIndex != -1) { - CFX_WideString wsTargetExpr; - int32_t iSpliteNextIndex = 0; - if (!bTargetAllFind) { - iSpliteNextIndex = wsTargetAll.Find(' ', iSpliteIndex); - wsTargetExpr = - wsTargetAll.Mid(iSpliteIndex, iSpliteNextIndex - iSpliteIndex); - } else { - wsTargetExpr = wsTargetAll; - } - if (wsTargetExpr.IsEmpty()) { - return NULL; - } - bTargetAllFind = FALSE; - if (wsTargetExpr.GetAt(0) == '#') { - CXFA_Node* pNode = pDocument->GetNodeByID( - ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Template)), - wsTargetExpr.Mid(1).AsStringC()); - if (pNode) { - return pNode; - } - } else if (bNewExprStyle) { - CFX_WideString wsProcessedTarget = wsTargetExpr; - if (wsTargetExpr.Left(4) == FX_WSTRC(L"som(") && - wsTargetExpr.Right(1) == FX_WSTRC(L")")) { - wsProcessedTarget = wsTargetExpr.Mid(4, wsTargetExpr.GetLength() - 5); - } - XFA_RESOLVENODE_RS rs; - int32_t iCount = pDocument->GetScriptContext()->ResolveObjects( - pPageSetRoot, wsProcessedTarget.AsStringC(), rs, - XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | - XFA_RESOLVENODE_Attributes | XFA_RESOLVENODE_Siblings | - XFA_RESOLVENODE_Parent); - if (iCount > 0 && rs.nodes[0]->IsNode()) { - return rs.nodes[0]->AsNode(); - } - } - iSpliteIndex = iSpliteNextIndex; - } - return NULL; -} FX_BOOL XFA_LayoutPageMgr_RunBreakTestScript(CXFA_Node* pTestScript) { CFX_WideString wsExpression; @@ -434,43 +563,14 @@ void CXFA_LayoutPageMgr::AddContentAreaLayoutItem( pNewRecord->pCurPageArea->AddChild(pNewContentAreaLayoutItem); pNewRecord->pCurContentArea = pNewContentAreaLayoutItem; } -class CXFA_TraverseStrategy_PageSetContainerLayoutItem { - public: - static inline CXFA_ContainerLayoutItem* GetFirstChild( - CXFA_ContainerLayoutItem* pLayoutItem) { - if (pLayoutItem->m_pFormNode->GetClassID() == XFA_ELEMENT_PageSet) { - CXFA_ContainerLayoutItem* pChildItem = - (CXFA_ContainerLayoutItem*)pLayoutItem->m_pFirstChild; - while (pChildItem && - pChildItem->m_pFormNode->GetClassID() != XFA_ELEMENT_PageSet) { - pChildItem = (CXFA_ContainerLayoutItem*)pChildItem->m_pNextSibling; - } - return pChildItem; - } - return NULL; - } - static inline CXFA_ContainerLayoutItem* GetNextSibling( - CXFA_ContainerLayoutItem* pLayoutItem) { - CXFA_ContainerLayoutItem* pChildItem = - (CXFA_ContainerLayoutItem*)pLayoutItem->m_pNextSibling; - while (pChildItem && - pChildItem->m_pFormNode->GetClassID() != XFA_ELEMENT_PageSet) { - pChildItem = (CXFA_ContainerLayoutItem*)pChildItem->m_pNextSibling; - } - return pChildItem; - } - static inline CXFA_ContainerLayoutItem* GetParent( - CXFA_ContainerLayoutItem* pLayoutItem) { - return (CXFA_ContainerLayoutItem*)pLayoutItem->m_pParent; - } -}; + void CXFA_LayoutPageMgr::FinishPaginatedPageSets() { CXFA_ContainerLayoutItem* pRootPageSetLayoutItem = m_pPageSetLayoutItemRoot; for (; pRootPageSetLayoutItem; pRootPageSetLayoutItem = (CXFA_ContainerLayoutItem*)pRootPageSetLayoutItem->m_pNextSibling) { CXFA_NodeIteratorTemplate<CXFA_ContainerLayoutItem, - CXFA_TraverseStrategy_PageSetContainerLayoutItem> + PageSetContainerLayoutItem> sIterator(pRootPageSetLayoutItem); for (CXFA_ContainerLayoutItem* pPageSetLayoutItem = sIterator.GetCurrent(); pPageSetLayoutItem; pPageSetLayoutItem = sIterator.MoveToNext()) { @@ -647,25 +747,11 @@ FX_BOOL CXFA_LayoutPageMgr::RunBreak(XFA_ELEMENT eBreakType, if (pTarget && pTarget->GetClassID() != XFA_ELEMENT_PageArea) { pTarget = NULL; } - if (m_nAvailPages % 2 != 1 || !m_pCurrentContainerRecord || - (pTarget && - pTarget != GetCurrentContainerRecord()->pCurPageArea->m_pFormNode) || - bStartNew) { - if (m_nAvailPages % 2 == 1) { - } - } break; case XFA_ATTRIBUTEENUM_PageEven: if (pTarget && pTarget->GetClassID() != XFA_ELEMENT_PageArea) { pTarget = NULL; } - if (m_nAvailPages % 2 != 0 || !m_pCurrentContainerRecord || - (pTarget && - pTarget != GetCurrentContainerRecord()->pCurPageArea->m_pFormNode) || - bStartNew) { - if (m_nAvailPages % 2 == 0) { - } - } break; case XFA_ATTRIBUTEENUM_Auto: default: @@ -693,13 +779,13 @@ FX_BOOL CXFA_LayoutPageMgr::ExecuteBreakBeforeOrAfter( } CFX_WideStringC wsTarget = pCurNode->GetCData(XFA_ATTRIBUTE_Target); CXFA_Node* pTarget = - XFA_ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, wsTarget); + ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, wsTarget); wsBreakTrailer = pCurNode->GetCData(XFA_ATTRIBUTE_Trailer); wsBreakLeader = pCurNode->GetCData(XFA_ATTRIBUTE_Leader); pBreakLeaderTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsBreakLeader); + ResolveBreakTarget(pContainer, TRUE, wsBreakLeader); pBreakTrailerTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsBreakTrailer); + ResolveBreakTarget(pContainer, TRUE, wsBreakTrailer); if (RunBreak(eType, pCurNode->GetEnum(XFA_ATTRIBUTE_TargetType), pTarget, bStartNew)) { return TRUE; @@ -729,7 +815,7 @@ FX_BOOL CXFA_LayoutPageMgr::ExecuteBreakBeforeOrAfter( CFX_WideStringC wsTarget = pCurNode->GetCData( bBefore ? XFA_ATTRIBUTE_BeforeTarget : XFA_ATTRIBUTE_AfterTarget); CXFA_Node* pTarget = - XFA_ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, wsTarget); + ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, wsTarget); if (RunBreak(bBefore ? XFA_ELEMENT_BreakBefore : XFA_ELEMENT_BreakAfter, pCurNode->GetEnum(bBefore ? XFA_ATTRIBUTE_Before : XFA_ATTRIBUTE_After), @@ -742,10 +828,7 @@ FX_BOOL CXFA_LayoutPageMgr::ExecuteBreakBeforeOrAfter( } return FALSE; } -static void XFA_SetLayoutGeneratedNodeFlag(CXFA_Node* pNode) { - pNode->SetFlag(XFA_NODEFLAG_LayoutGeneratedNode, false); - pNode->ClearFlag(XFA_NODEFLAG_UnusedNode); -} + FX_BOOL CXFA_LayoutPageMgr::ProcessBreakBeforeOrAfter( CXFA_Node* pBreakNode, FX_BOOL bBefore, @@ -769,7 +852,7 @@ FX_BOOL CXFA_LayoutPageMgr::ProcessBreakBeforeOrAfter( pBreakLeaderNode = pDocument->DataMerge_CopyContainer( pLeaderTemplate, pFormNode, pDataScope, TRUE); pDocument->DataMerge_UpdateBindingRelations(pBreakLeaderNode); - XFA_SetLayoutGeneratedNodeFlag(pBreakLeaderNode); + SetLayoutGeneratedNodeFlag(pBreakLeaderNode); } if (pTrailerTemplate) { if (!pDataScope) { @@ -778,7 +861,7 @@ FX_BOOL CXFA_LayoutPageMgr::ProcessBreakBeforeOrAfter( pBreakTrailerNode = pDocument->DataMerge_CopyContainer( pTrailerTemplate, pFormNode, pDataScope, TRUE); pDocument->DataMerge_UpdateBindingRelations(pBreakTrailerNode); - XFA_SetLayoutGeneratedNodeFlag(pBreakTrailerNode); + SetLayoutGeneratedNodeFlag(pBreakTrailerNode); } return TRUE; } @@ -801,7 +884,7 @@ FX_BOOL CXFA_LayoutPageMgr::ProcessBookendLeaderOrTrailer( pBookendAppendNode = pDocument->DataMerge_CopyContainer( pLeaderTemplate, pFormNode, pDataScope, TRUE); pDocument->DataMerge_UpdateBindingRelations(pBookendAppendNode); - XFA_SetLayoutGeneratedNodeFlag(pBookendAppendNode); + SetLayoutGeneratedNodeFlag(pBookendAppendNode); return TRUE; } } @@ -827,8 +910,8 @@ CXFA_Node* CXFA_LayoutPageMgr::BreakOverflow(CXFA_Node* pOverflowNode, !wsOverflowTarget.IsEmpty()) { if (!wsOverflowTarget.IsEmpty() && bCreatePage && !m_bCreateOverFlowPage) { - CXFA_Node* pTarget = XFA_ResolveBreakTarget(m_pTemplatePageSetRoot, - TRUE, wsOverflowTarget); + CXFA_Node* pTarget = + ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, wsOverflowTarget); if (pTarget) { m_bCreateOverFlowPage = TRUE; switch (pTarget->GetClassID()) { @@ -847,9 +930,9 @@ CXFA_Node* CXFA_LayoutPageMgr::BreakOverflow(CXFA_Node* pOverflowNode, } if (!bCreatePage) { pLeaderTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsOverflowLeader); + ResolveBreakTarget(pContainer, TRUE, wsOverflowLeader); pTrailerTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsOverflowTrailer); + ResolveBreakTarget(pContainer, TRUE, wsOverflowTrailer); } return pOverflowNode; } @@ -860,8 +943,8 @@ CXFA_Node* CXFA_LayoutPageMgr::BreakOverflow(CXFA_Node* pOverflowNode, pOverflowNode->TryCData(XFA_ATTRIBUTE_Trailer, wsOverflowTrailer); pOverflowNode->TryCData(XFA_ATTRIBUTE_Target, wsOverflowTarget); if (!wsOverflowTarget.IsEmpty() && bCreatePage && !m_bCreateOverFlowPage) { - CXFA_Node* pTarget = XFA_ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, - wsOverflowTarget); + CXFA_Node* pTarget = + ResolveBreakTarget(m_pTemplatePageSetRoot, TRUE, wsOverflowTarget); if (pTarget) { m_bCreateOverFlowPage = TRUE; switch (pTarget->GetClassID()) { @@ -879,10 +962,9 @@ CXFA_Node* CXFA_LayoutPageMgr::BreakOverflow(CXFA_Node* pOverflowNode, } } if (!bCreatePage) { - pLeaderTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsOverflowLeader); + pLeaderTemplate = ResolveBreakTarget(pContainer, TRUE, wsOverflowLeader); pTrailerTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsOverflowTrailer); + ResolveBreakTarget(pContainer, TRUE, wsOverflowTrailer); } return pOverflowNode; } @@ -920,7 +1002,7 @@ FX_BOOL CXFA_LayoutPageMgr::ProcessOverflow(CXFA_Node* pFormNode, pLeaderNode = pDocument->DataMerge_CopyContainer( pLeaderTemplate, pFormNode, pDataScope, TRUE); pDocument->DataMerge_UpdateBindingRelations(pLeaderNode); - XFA_SetLayoutGeneratedNodeFlag(pLeaderNode); + SetLayoutGeneratedNodeFlag(pLeaderNode); } if (pTrailerTemplate) { if (!pDataScope) { @@ -929,7 +1011,7 @@ FX_BOOL CXFA_LayoutPageMgr::ProcessOverflow(CXFA_Node* pFormNode, pTrailerNode = pDocument->DataMerge_CopyContainer( pTrailerTemplate, pFormNode, pDataScope, TRUE); pDocument->DataMerge_UpdateBindingRelations(pTrailerNode); - XFA_SetLayoutGeneratedNodeFlag(pTrailerNode); + SetLayoutGeneratedNodeFlag(pTrailerNode); } return TRUE; } @@ -954,7 +1036,7 @@ FX_BOOL CXFA_LayoutPageMgr::ResolveBookendLeaderOrTrailer( wsBookendLeader); if (!wsBookendLeader.IsEmpty()) { pBookendAppendTemplate = - XFA_ResolveBreakTarget(pContainer, FALSE, wsBookendLeader); + ResolveBreakTarget(pContainer, FALSE, wsBookendLeader); return TRUE; } return FALSE; @@ -963,7 +1045,7 @@ FX_BOOL CXFA_LayoutPageMgr::ResolveBookendLeaderOrTrailer( bLeader ? XFA_ATTRIBUTE_Leader : XFA_ATTRIBUTE_Trailer, wsBookendLeader); pBookendAppendTemplate = - XFA_ResolveBreakTarget(pContainer, TRUE, wsBookendLeader); + ResolveBreakTarget(pContainer, TRUE, wsBookendLeader); return TRUE; } return FALSE; @@ -1251,24 +1333,7 @@ CXFA_Node* CXFA_LayoutPageMgr::GetNextAvailPageArea( } return NULL; } -static FX_BOOL XFA_LayoutPageMgr_CheckContentAreaNotUsed( - CXFA_ContainerLayoutItem* pPageAreaLayoutItem, - CXFA_Node* pContentArea, - CXFA_ContainerLayoutItem*& pContentAreaLayoutItem) { - for (CXFA_ContainerLayoutItem* pLayoutItem = - (CXFA_ContainerLayoutItem*)pPageAreaLayoutItem->m_pFirstChild; - pLayoutItem; - pLayoutItem = (CXFA_ContainerLayoutItem*)pLayoutItem->m_pNextSibling) { - if (pLayoutItem->m_pFormNode == pContentArea) { - if (pLayoutItem->m_pFirstChild == NULL) { - pContentAreaLayoutItem = pLayoutItem; - return TRUE; - } - return FALSE; - } - } - return TRUE; -} + FX_BOOL CXFA_LayoutPageMgr::GetNextContentArea(CXFA_Node* pContentArea) { CXFA_Node* pCurContentNode = GetCurrentContainerRecord()->pCurContentArea->m_pFormNode; @@ -1283,9 +1348,8 @@ FX_BOOL CXFA_LayoutPageMgr::GetNextContentArea(CXFA_Node* pContentArea) { return FALSE; } CXFA_ContainerLayoutItem* pContentAreaLayout = NULL; - if (!XFA_LayoutPageMgr_CheckContentAreaNotUsed( - GetCurrentContainerRecord()->pCurPageArea, pContentArea, - pContentAreaLayout)) { + if (!CheckContentAreaNotUsed(GetCurrentContainerRecord()->pCurPageArea, + pContentArea, pContentAreaLayout)) { return FALSE; } if (pContentAreaLayout) { @@ -1495,21 +1559,7 @@ CXFA_LayoutItem* CXFA_LayoutPageMgr::FindOrCreateLayoutItem( return pFormNode->GetDocument()->GetParser()->GetNotify()->OnCreateLayoutItem( pFormNode); } -static void XFA_SyncRemoveLayoutItem(CXFA_LayoutItem* pParentLayoutItem, - CXFA_FFNotify* pNotify, - CXFA_LayoutProcessor* pDocLayout) { - CXFA_LayoutItem* pNextLayoutItem; - CXFA_LayoutItem* pCurLayoutItem = pParentLayoutItem->m_pFirstChild; - while (pCurLayoutItem) { - pNextLayoutItem = pCurLayoutItem->m_pNextSibling; - if (pCurLayoutItem->m_pFirstChild) { - XFA_SyncRemoveLayoutItem(pCurLayoutItem, pNotify, pDocLayout); - } - pNotify->OnLayoutItemRemoving(pDocLayout, pCurLayoutItem); - delete pCurLayoutItem; - pCurLayoutItem = pNextLayoutItem; - } -} + void CXFA_LayoutPageMgr::SaveLayoutItem(CXFA_LayoutItem* pParentLayoutItem) { CXFA_LayoutItem* pNextLayoutItem; CXFA_LayoutItem* pCurLayoutItem = pParentLayoutItem->m_pFirstChild; @@ -1523,7 +1573,7 @@ void CXFA_LayoutPageMgr::SaveLayoutItem(CXFA_LayoutItem* pParentLayoutItem) { CXFA_LayoutProcessor* pDocLayout = m_pTemplatePageSetRoot->GetDocument()->GetDocLayout(); if (pCurLayoutItem->m_pFirstChild) { - XFA_SyncRemoveLayoutItem(pCurLayoutItem, pNotify, pDocLayout); + SyncRemoveLayoutItem(pCurLayoutItem, pNotify, pDocLayout); } pNotify->OnLayoutItemRemoving(pDocLayout, pCurLayoutItem); delete pCurLayoutItem; @@ -1787,36 +1837,7 @@ void CXFA_LayoutPageMgr::LayoutPageSetContents() { } } } -void XFA_SyncContainer(CXFA_FFNotify* pNotify, - CXFA_LayoutProcessor* pDocLayout, - CXFA_LayoutItem* pContainerItem, - uint32_t dwRelevant, - FX_BOOL bVisible, - int32_t nPageIndex) { - FX_BOOL bVisibleItem = FALSE; - uint32_t dwStatus = 0; - uint32_t dwRelevantContainer = 0; - if (bVisible) { - XFA_ATTRIBUTEENUM eAttributeValue = - pContainerItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Presence); - if (eAttributeValue == XFA_ATTRIBUTEENUM_Visible || - eAttributeValue == XFA_ATTRIBUTEENUM_Unknown) { - bVisibleItem = TRUE; - } - dwRelevantContainer = - XFA_GetRelevant(pContainerItem->m_pFormNode, dwRelevant); - dwStatus = - (bVisibleItem ? XFA_LAYOUTSTATUS_Visible : 0) | dwRelevantContainer; - } - pNotify->OnLayoutItemAdded(pDocLayout, pContainerItem, nPageIndex, dwStatus); - for (CXFA_LayoutItem* pChild = pContainerItem->m_pFirstChild; pChild; - pChild = pChild->m_pNextSibling) { - if (pChild->IsContentLayoutItem()) { - XFA_SyncContainer(pNotify, pDocLayout, pChild, dwRelevantContainer, - bVisibleItem, nPageIndex); - } - } -} + void CXFA_LayoutPageMgr::SyncLayoutData() { MergePageSetContents(); LayoutPageSetContents(); @@ -1837,7 +1858,7 @@ void CXFA_LayoutPageMgr::SyncLayoutData() { case XFA_ELEMENT_PageArea: { nPageIdx++; uint32_t dwRelevant = - XFA_LAYOUTSTATUS_Viewable | XFA_LAYOUTSTATUS_Printable; + XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable; CXFA_NodeIteratorTemplate<CXFA_LayoutItem, CXFA_TraverseStrategy_LayoutItem> iterator(pContainerItem); @@ -1853,9 +1874,9 @@ void CXFA_LayoutPageMgr::SyncLayoutData() { (pContentItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Presence) == XFA_ATTRIBUTEENUM_Visible); uint32_t dwRelevantChild = - XFA_GetRelevant(pContentItem->m_pFormNode, dwRelevant); - XFA_SyncContainer(pNotify, m_pLayoutProcessor, pContentItem, - dwRelevantChild, bVisible, nPageIdx); + GetRelevant(pContentItem->m_pFormNode, dwRelevant); + SyncContainer(pNotify, m_pLayoutProcessor, pContentItem, + dwRelevantChild, bVisible, nPageIdx); pChildLayoutItem = iterator.SkipChildrenAndMoveToNext(); } } break; |