Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxfa / src / common / xfa_doclayout.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _XFA_DOCLAYOUT_H_\r
8 #define _XFA_DOCLAYOUT_H_\r
9 #define _XFA_LAYOUTITEM_ProcessCACHE_\r
10 class CXFA_LayoutItem;\r
11 class IXFA_LayoutPage;\r
12 class CXFA_LayoutItem\r
13 {\r
14 public:\r
15     IXFA_LayoutPage*    GetPage() const;\r
16     CXFA_Node*                  GetFormNode() const;\r
17     void                                GetRect(CFX_RectF &rtLayout, FX_BOOL bRelative = FALSE) const;\r
18     FX_INT32                    GetIndex() const;\r
19     FX_INT32                    GetCount() const;\r
20     CXFA_LayoutItem*    GetParent() const;\r
21     CXFA_LayoutItem*    GetFirst() const;\r
22     CXFA_LayoutItem*    GetPrev() const;\r
23     CXFA_LayoutItem*    GetNext() const;\r
24     CXFA_LayoutItem*    GetLast() const;\r
25 };\r
26 class CXFA_LayoutItemImpl : public CFX_Object\r
27 {\r
28 public:\r
29     CXFA_LayoutItemImpl(CXFA_Node *pNode, FX_BOOL bIsContentLayoutItem);\r
30     virtual ~CXFA_LayoutItemImpl();\r
31     FX_BOOL IsContentLayoutItem()\r
32     {\r
33         return m_bIsContentLayoutItem;\r
34     }\r
35     void        AddChild(CXFA_LayoutItemImpl *pChildItem);\r
36     void        AddHeadChild(CXFA_LayoutItemImpl *pChildItem);\r
37     void        RemoveChild(CXFA_LayoutItemImpl *pChildItem);\r
38     void        InsertChild(CXFA_LayoutItemImpl *pBeforeItem, CXFA_LayoutItemImpl *pChildItem);\r
39 public:\r
40     CXFA_Node*                          m_pFormNode;\r
41     CXFA_LayoutItemImpl*        m_pParent;\r
42     CXFA_LayoutItemImpl*        m_pNextSibling;\r
43     CXFA_LayoutItemImpl*        m_pFirstChild;\r
44     FX_BOOL                                     m_bIsContentLayoutItem;\r
45 };\r
46 class CXFA_ContainerLayoutItemImpl : public CXFA_LayoutItemImpl\r
47 {\r
48 public:\r
49     CXFA_ContainerLayoutItemImpl(CXFA_Node *pNode);\r
50 public:\r
51     CXFA_Node*                   m_pOldSubform;\r
52 };\r
53 #define XFA_WIDGETSTATUS_Access                                 0x80000000\r
54 #define XFA_WIDGETSTATUS_Disabled                               0x40000000\r
55 #define XFA_WIDGETSTATUS_RectCached                             0x20000000\r
56 #define XFA_WIDGETSTATUS_ButtonDown                             0x10000000\r
57 #define XFA_WIDGETSTATUS_Highlight                              0x08000000\r
58 #define XFA_WIDGETSTATUS_TextEditValueChanged   0x04000000\r
59 class CXFA_ContentLayoutItemImpl : public CXFA_LayoutItemImpl\r
60 {\r
61 public:\r
62     CXFA_ContentLayoutItemImpl(CXFA_Node *pNode);\r
63     virtual ~CXFA_ContentLayoutItemImpl();\r
64 public:\r
65     CXFA_ContentLayoutItemImpl* m_pPrev;\r
66     CXFA_ContentLayoutItemImpl* m_pNext;\r
67     CFX_PointF          m_sPos;\r
68     CFX_SizeF           m_sSize;\r
69     FX_DWORD            m_dwStatus;\r
70 };\r
71 class CXFA_TraverseStrategy_LayoutItem\r
72 {\r
73 public:\r
74     static inline CXFA_LayoutItem* GetFirstChild(CXFA_LayoutItem* pLayoutItem)\r
75     {\r
76         return (CXFA_LayoutItem*)((CXFA_LayoutItemImpl*)pLayoutItem)->m_pFirstChild;\r
77     }\r
78     static inline CXFA_LayoutItem* GetNextSibling(CXFA_LayoutItem* pLayoutItem)\r
79     {\r
80         return (CXFA_LayoutItem*)((CXFA_LayoutItemImpl*)pLayoutItem)->m_pNextSibling;\r
81     }\r
82     static inline CXFA_LayoutItem* GetParent(CXFA_LayoutItem* pLayoutItem)\r
83     {\r
84         return (CXFA_LayoutItem*)((CXFA_LayoutItemImpl*)pLayoutItem)->m_pParent;\r
85     }\r
86 };\r
87 class IXFA_LayoutPage\r
88 {\r
89 public:\r
90     IXFA_DocLayout*             GetLayout() const;\r
91     FX_INT32                    GetPageIndex() const;\r
92     void                                GetPageSize(CFX_SizeF &size);\r
93     CXFA_Node*                  GetMasterPage() const;\r
94 };\r
95 class IXFA_DocLayout\r
96 {\r
97 public:\r
98     virtual CXFA_Document*              GetDocument() const = 0;\r
99     virtual     FX_INT32                        StartLayout(FX_BOOL bForceRestart = FALSE) = 0;\r
100     virtual FX_INT32                    DoLayout(IFX_Pause *pPause = NULL) = 0;\r
101     virtual FX_BOOL                             IncrementLayout() = 0;\r
102     virtual FX_INT32                    CountPages() const = 0;\r
103     virtual IXFA_LayoutPage*    GetPage(FX_INT32 index) const = 0;\r
104 \r
105     virtual CXFA_LayoutItem*    GetLayoutItem(CXFA_Node *pFormItem) = 0;\r
106 };\r
107 #endif\r