summaryrefslogtreecommitdiff
path: root/xfa/src/fxfa/src/common/xfa_doclayout.h
blob: d360faa62c1bf0114509127aa08bf50cf8ec6165 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// 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_DOCLAYOUT_H_
#define _XFA_DOCLAYOUT_H_
#define _XFA_LAYOUTITEM_ProcessCACHE_
class CXFA_LayoutItem;
class IXFA_LayoutPage;
class CXFA_LayoutItem
{
public:
    IXFA_LayoutPage*	GetPage() const;
    CXFA_Node*			GetFormNode() const;
    void				GetRect(CFX_RectF &rtLayout, FX_BOOL bRelative = FALSE) const;
    int32_t			GetIndex() const;
    int32_t			GetCount() const;
    CXFA_LayoutItem*	GetParent() const;
    CXFA_LayoutItem*	GetFirst() const;
    CXFA_LayoutItem*	GetPrev() const;
    CXFA_LayoutItem*	GetNext() const;
    CXFA_LayoutItem*	GetLast() const;
};
class CXFA_LayoutItemImpl
{
public:
    CXFA_LayoutItemImpl(CXFA_Node *pNode, FX_BOOL bIsContentLayoutItem);
    virtual ~CXFA_LayoutItemImpl();
    FX_BOOL IsContentLayoutItem()
    {
        return m_bIsContentLayoutItem;
    }
    void	AddChild(CXFA_LayoutItemImpl *pChildItem);
    void	AddHeadChild(CXFA_LayoutItemImpl *pChildItem);
    void	RemoveChild(CXFA_LayoutItemImpl *pChildItem);
    void	InsertChild(CXFA_LayoutItemImpl *pBeforeItem, CXFA_LayoutItemImpl *pChildItem);
public:
    CXFA_Node*				m_pFormNode;
    CXFA_LayoutItemImpl*	m_pParent;
    CXFA_LayoutItemImpl*	m_pNextSibling;
    CXFA_LayoutItemImpl*	m_pFirstChild;
    FX_BOOL					m_bIsContentLayoutItem;
};
class CXFA_ContainerLayoutItemImpl : public CXFA_LayoutItemImpl
{
public:
    CXFA_ContainerLayoutItemImpl(CXFA_Node *pNode);
public:
    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_ContentLayoutItemImpl : public CXFA_LayoutItemImpl
{
public:
    CXFA_ContentLayoutItemImpl(CXFA_Node *pNode);
    virtual ~CXFA_ContentLayoutItemImpl();
public:
    CXFA_ContentLayoutItemImpl* m_pPrev;
    CXFA_ContentLayoutItemImpl* m_pNext;
    CFX_PointF		m_sPos;
    CFX_SizeF		m_sSize;
    FX_DWORD		m_dwStatus;
};
class CXFA_TraverseStrategy_LayoutItem
{
public:
    static inline CXFA_LayoutItem* GetFirstChild(CXFA_LayoutItem* pLayoutItem)
    {
        return (CXFA_LayoutItem*)((CXFA_LayoutItemImpl*)pLayoutItem)->m_pFirstChild;
    }
    static inline CXFA_LayoutItem* GetNextSibling(CXFA_LayoutItem* pLayoutItem)
    {
        return (CXFA_LayoutItem*)((CXFA_LayoutItemImpl*)pLayoutItem)->m_pNextSibling;
    }
    static inline CXFA_LayoutItem* GetParent(CXFA_LayoutItem* pLayoutItem)
    {
        return (CXFA_LayoutItem*)((CXFA_LayoutItemImpl*)pLayoutItem)->m_pParent;
    }
};
class IXFA_LayoutPage
{
public:
    IXFA_DocLayout*		GetLayout() const;
    int32_t			GetPageIndex() const;
    void				GetPageSize(CFX_SizeF &size);
    CXFA_Node*			GetMasterPage() const;
};
class IXFA_DocLayout
{
public:
    virtual CXFA_Document*		GetDocument() const = 0;
    virtual	int32_t			StartLayout(FX_BOOL bForceRestart = FALSE) = 0;
    virtual int32_t			DoLayout(IFX_Pause *pPause = NULL) = 0;
    virtual FX_BOOL				IncrementLayout() = 0;
    virtual int32_t			CountPages() const = 0;
    virtual IXFA_LayoutPage*	GetPage(int32_t index) const = 0;

    virtual CXFA_LayoutItem*	GetLayoutItem(CXFA_Node *pFormItem) = 0;
};
#endif