summaryrefslogtreecommitdiff
path: root/xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h')
-rw-r--r--xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h152
1 files changed, 152 insertions, 0 deletions
diff --git a/xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h b/xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h
new file mode 100644
index 0000000000..5f6607f7cc
--- /dev/null
+++ b/xfa/src/fxfa/parser/xfa_layout_pagemgr_new.h
@@ -0,0 +1,152 @@
+// 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
+
+#ifndef XFA_SRC_FXFA_PARSER_XFA_LAYOUT_PAGEMGR_NEW_H_
+#define XFA_SRC_FXFA_PARSER_XFA_LAYOUT_PAGEMGR_NEW_H_
+
+#include "xfa/src/fxfa/parser/xfa_doclayout.h"
+#include "xfa/src/fxfa/parser/xfa_layout_itemlayout.h"
+
+class CXFA_ContainerRecord {
+ public:
+ CXFA_ContainerRecord(CXFA_ContainerLayoutItem* pPageSet = NULL,
+ CXFA_ContainerLayoutItem* pPageArea = NULL,
+ CXFA_ContainerLayoutItem* pContentArea = NULL)
+ : pCurPageSet(pPageSet),
+ pCurPageArea(pPageArea),
+ pCurContentArea(pContentArea) {}
+ CXFA_ContainerLayoutItem* pCurPageSet;
+ CXFA_ContainerLayoutItem* pCurPageArea;
+ CXFA_ContainerLayoutItem* pCurContentArea;
+};
+class CXFA_LayoutPageMgr {
+ public:
+ CXFA_LayoutPageMgr(CXFA_LayoutProcessor* pLayoutProcessor);
+ ~CXFA_LayoutPageMgr();
+ FX_BOOL InitLayoutPage(CXFA_Node* pFormNode);
+ FX_BOOL PrepareFirstPage(CXFA_Node* pRootSubform);
+ FX_FLOAT GetAvailHeight();
+ FX_BOOL GetNextAvailContentHeight(FX_FLOAT fChildHeight);
+ void SubmitContentItem(CXFA_ContentLayoutItem* pContentLayoutItem,
+ XFA_ItemLayoutProcessorResult eStatus);
+ void FinishPaginatedPageSets();
+ void SyncLayoutData();
+ int32_t GetPageCount() const;
+ IXFA_LayoutPage* GetPage(int32_t index) const;
+ int32_t GetPageIndex(const IXFA_LayoutPage* pPage) const;
+ inline CXFA_ContainerLayoutItem* GetRootLayoutItem() const {
+ return m_pPageSetLayoutItemRoot;
+ }
+ FX_BOOL ProcessBreakBeforeOrAfter(CXFA_Node* pBreakNode,
+ FX_BOOL bBefore,
+ CXFA_Node*& pBreakLeaderNode,
+ CXFA_Node*& pBreakTrailerNode,
+ FX_BOOL& bCreatePage);
+ FX_BOOL ProcessOverflow(CXFA_Node* pFormNode,
+ CXFA_Node*& pLeaderNode,
+ CXFA_Node*& pTrailerNode,
+ FX_BOOL bDataMerge = FALSE,
+ FX_BOOL bCreatePage = TRUE);
+ CXFA_Node* QueryOverflow(CXFA_Node* pFormNode,
+ CXFA_LayoutContext* pLayoutContext = NULL);
+ FX_BOOL ProcessBookendLeaderOrTrailer(CXFA_Node* pBookendNode,
+ FX_BOOL bLeader,
+ CXFA_Node*& pBookendAppendNode);
+ CXFA_LayoutItem* FindOrCreateLayoutItem(CXFA_Node* pFormNode);
+
+ protected:
+ FX_BOOL AppendNewPage(FX_BOOL bFirstTemPage = FALSE);
+ void ReorderPendingLayoutRecordToTail(CXFA_ContainerRecord* pNewRecord,
+ CXFA_ContainerRecord* pPrevRecord);
+ void RemoveLayoutRecord(CXFA_ContainerRecord* pNewRecord,
+ CXFA_ContainerRecord* pPrevRecord);
+ inline CXFA_ContainerRecord* GetCurrentContainerRecord() {
+ CXFA_ContainerRecord* result =
+ ((CXFA_ContainerRecord*)m_rgProposedContainerRecord.GetAt(
+ m_pCurrentContainerRecord));
+ ASSERT(result);
+ return result;
+ }
+ CXFA_ContainerRecord* CreateContainerRecord(CXFA_Node* pPageNode = NULL,
+ FX_BOOL bCreateNew = FALSE);
+ void AddPageAreaLayoutItem(CXFA_ContainerRecord* pNewRecord,
+ CXFA_Node* pNewPageArea);
+ void AddContentAreaLayoutItem(CXFA_ContainerRecord* pNewRecord,
+ CXFA_Node* pContentArea);
+ FX_BOOL RunBreak(XFA_ELEMENT eBreakType,
+ XFA_ATTRIBUTEENUM eTargetType,
+ CXFA_Node* pTarget,
+ FX_BOOL bStartNew);
+ CXFA_Node* BreakOverflow(CXFA_Node* pOverflowNode,
+ CXFA_Node*& pLeaderTemplate,
+ CXFA_Node*& pTrailerTemplate,
+ FX_BOOL bCreatePage = TRUE);
+ FX_BOOL ResolveBookendLeaderOrTrailer(CXFA_Node* pBookendNode,
+ FX_BOOL bLeader,
+ CXFA_Node*& pBookendAppendTemplate);
+ FX_BOOL ExecuteBreakBeforeOrAfter(CXFA_Node* pCurNode,
+ FX_BOOL bBefore,
+ CXFA_Node*& pBreakLeaderTemplate,
+ CXFA_Node*& pBreakTrailerTemplate);
+
+ int32_t CreateMinPageRecord(CXFA_Node* pPageArea,
+ FX_BOOL bTargetPageArea,
+ FX_BOOL bCreateLast = FALSE);
+ void CreateMinPageSetRecord(CXFA_Node* pPageSet, FX_BOOL bCreateAll = FALSE);
+ void CreateNextMinRecord(CXFA_Node* pRecordNode);
+ FX_BOOL FindPageAreaFromPageSet(CXFA_Node* pPageSet,
+ CXFA_Node* pStartChild,
+ CXFA_Node* pTargetPageArea = NULL,
+ CXFA_Node* pTargetContentArea = NULL,
+ FX_BOOL bNewPage = FALSE,
+ FX_BOOL bQuery = FALSE);
+ FX_BOOL FindPageAreaFromPageSet_Ordered(CXFA_Node* pPageSet,
+ CXFA_Node* pStartChild,
+ CXFA_Node* pTargetPageArea = NULL,
+ CXFA_Node* pTargetContentArea = NULL,
+ FX_BOOL bNewPage = FALSE,
+ FX_BOOL bQuery = FALSE);
+ FX_BOOL FindPageAreaFromPageSet_SimplexDuplex(
+ CXFA_Node* pPageSet,
+ CXFA_Node* pStartChild,
+ CXFA_Node* pTargetPageArea = NULL,
+ CXFA_Node* pTargetContentArea = NULL,
+ FX_BOOL bNewPage = FALSE,
+ FX_BOOL bQuery = FALSE,
+ XFA_ATTRIBUTEENUM ePreferredPosition = XFA_ATTRIBUTEENUM_First);
+ FX_BOOL MatchPageAreaOddOrEven(CXFA_Node* pPageArea, FX_BOOL bLastMatch);
+ CXFA_Node* GetNextAvailPageArea(CXFA_Node* pTargetPageArea,
+ CXFA_Node* pTargetContentArea = NULL,
+ FX_BOOL bNewPage = FALSE,
+ FX_BOOL bQuery = FALSE);
+ FX_BOOL GetNextContentArea(CXFA_Node* pTargetContentArea);
+ void InitPageSetMap();
+ void ProcessLastPageSet();
+ inline FX_BOOL IsPageSetRootOrderedOccurrence() {
+ return m_ePageSetMode == XFA_ATTRIBUTEENUM_OrderedOccurrence;
+ }
+ void ClearData();
+ void ClearRecordList();
+ void MergePageSetContents();
+ void LayoutPageSetContents();
+ void PrepareLayout();
+ void SaveLayoutItem(CXFA_LayoutItem* pParentLayoutItem);
+ CXFA_LayoutProcessor* m_pLayoutProcessor;
+ CXFA_Node* m_pTemplatePageSetRoot;
+ CXFA_ContainerLayoutItem* m_pPageSetLayoutItemRoot;
+ CXFA_ContainerLayoutItem* m_pPageSetCurRoot;
+ FX_POSITION m_pCurrentContainerRecord;
+ CFX_PtrList m_rgProposedContainerRecord;
+ CXFA_Node* m_pCurPageArea;
+ int32_t m_nAvailPages;
+ int32_t m_nCurPageCount;
+ XFA_ATTRIBUTEENUM m_ePageSetMode;
+ FX_BOOL m_bCreateOverFlowPage;
+ CFX_MapPtrTemplate<CXFA_Node*, int32_t> m_pPageSetMap;
+ CFX_ArrayTemplate<CXFA_ContainerLayoutItem*> m_PageArray;
+};
+
+#endif // XFA_SRC_FXFA_PARSER_XFA_LAYOUT_PAGEMGR_NEW_H_