dsinclair | 0b851ff | 2016-07-21 12:03:01 -0700 | [diff] [blame] | 1 | // Copyright 2016 PDFium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | |
| 7 | #include "xfa/fxfa/parser/cxfa_layoutitem.h" |
| 8 | |
dsinclair | 6ea5ba0 | 2016-08-03 10:20:32 -0700 | [diff] [blame] | 9 | #include "xfa/fxfa/app/xfa_ffnotify.h" |
dsinclair | 0b851ff | 2016-07-21 12:03:01 -0700 | [diff] [blame] | 10 | #include "xfa/fxfa/parser/cxfa_containerlayoutitem.h" |
| 11 | #include "xfa/fxfa/parser/cxfa_contentlayoutitem.h" |
| 12 | |
dsinclair | 6ea5ba0 | 2016-08-03 10:20:32 -0700 | [diff] [blame] | 13 | void XFA_ReleaseLayoutItem(CXFA_LayoutItem* pLayoutItem) { |
| 14 | CXFA_LayoutItem* pNode = pLayoutItem->m_pFirstChild; |
| 15 | CXFA_FFNotify* pNotify = pLayoutItem->m_pFormNode->GetDocument()->GetNotify(); |
| 16 | CXFA_LayoutProcessor* pDocLayout = |
| 17 | pLayoutItem->m_pFormNode->GetDocument()->GetDocLayout(); |
| 18 | while (pNode) { |
| 19 | CXFA_LayoutItem* pNext = pNode->m_pNextSibling; |
| 20 | pNode->m_pParent = nullptr; |
| 21 | pNotify->OnLayoutItemRemoving(pDocLayout, |
| 22 | static_cast<CXFA_LayoutItem*>(pNode)); |
| 23 | XFA_ReleaseLayoutItem(pNode); |
| 24 | pNode = pNext; |
| 25 | } |
| 26 | |
| 27 | pNotify->OnLayoutItemRemoving(pDocLayout, pLayoutItem); |
| 28 | if (pLayoutItem->m_pFormNode->GetElementType() == XFA_Element::PageArea) { |
| 29 | pNotify->OnPageEvent(static_cast<CXFA_ContainerLayoutItem*>(pLayoutItem), |
| 30 | XFA_PAGEVIEWEVENT_PostRemoved); |
| 31 | } |
| 32 | delete pLayoutItem; |
| 33 | } |
| 34 | |
dsinclair | 0b851ff | 2016-07-21 12:03:01 -0700 | [diff] [blame] | 35 | CXFA_LayoutItem::CXFA_LayoutItem(CXFA_Node* pNode, FX_BOOL bIsContentLayoutItem) |
| 36 | : m_pFormNode(pNode), |
| 37 | m_pParent(nullptr), |
| 38 | m_pNextSibling(nullptr), |
| 39 | m_pFirstChild(nullptr), |
| 40 | m_bIsContentLayoutItem(bIsContentLayoutItem) {} |
| 41 | |
| 42 | CXFA_LayoutItem::~CXFA_LayoutItem() {} |
| 43 | |
| 44 | CXFA_ContainerLayoutItem* CXFA_LayoutItem::AsContainerLayoutItem() { |
| 45 | return IsContainerLayoutItem() ? static_cast<CXFA_ContainerLayoutItem*>(this) |
| 46 | : nullptr; |
| 47 | } |
| 48 | CXFA_ContentLayoutItem* CXFA_LayoutItem::AsContentLayoutItem() { |
| 49 | return IsContentLayoutItem() ? static_cast<CXFA_ContentLayoutItem*>(this) |
| 50 | : nullptr; |
| 51 | } |