Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxfa / src / common / xfa_object.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_OBJECT_H_\r
8 #define _XFA_OBJECT_H_\r
9 class CXFA_Document;\r
10 class IXFA_ObjFactory;\r
11 class IXFA_Notify;\r
12 class CXFA_Object;\r
13 class CXFA_OrdinaryObject;\r
14 class CXFA_Node;\r
15 class CXFA_NodeList;\r
16 class CXFA_ArrayNodeList;\r
17 class CXFA_AttachNodeList;\r
18 enum XFA_OBJECTTYPE {\r
19     XFA_OBJECTTYPE_OrdinaryObject = 0x0,\r
20     XFA_OBJECTTYPE_OrdinaryList   = 0x1,\r
21     XFA_OBJECTTYPE_NodeList       = 0x2,\r
22     XFA_OBJECTTYPE_Node           = 0x4,\r
23     XFA_OBJECTTYPE_NodeC          = 0x5,\r
24     XFA_OBJECTTYPE_NodeV          = 0x6,\r
25     XFA_OBJECTTYPE_ModelNode      = 0x8,\r
26     XFA_OBJECTTYPE_TextNode       = 0x9,\r
27     XFA_OBJECTTYPE_ContainerNode  = 0xA,\r
28     XFA_OBJECTTYPE_ContentNode    = 0xB,\r
29     XFA_OBJECTTYPE_VariablesThis  = 0xC,\r
30     XFA_OBJECTTYPEMASK            = 0xF,\r
31     XFA_NODEFLAG_Initialized      = 0x00020,\r
32     XFA_NODEFLAG_HasRemoved           = 0x00200,\r
33     XFA_NODEFLAG_NeedsInitApp     = 0x00400,\r
34     XFA_NODEFLAG_BindFormItems    = 0x00800,\r
35     XFA_NODEFLAG_UserInteractive  = 0x01000,\r
36     XFA_NODEFLAG_SkipDataBinding  = 0x02000,\r
37     XFA_NODEFLAG_OwnXMLNode               =     0x04000,\r
38     XFA_NODEFLAG_UnusedNode       = 0x08000,\r
39     XFA_NODEFLAG_LayoutGeneratedNode = 0x10000,\r
40 };\r
41 class CXFA_Object : public CFX_Object\r
42 {\r
43 public:\r
44     CXFA_Object(CXFA_Document* pDocument, FX_DWORD uFlags);\r
45     inline CXFA_Document*       GetDocument() const\r
46     {\r
47         return m_pDocument;\r
48     }\r
49     inline FX_DWORD                     GetFlag() const\r
50     {\r
51         return m_uFlags;\r
52     }\r
53     inline XFA_OBJECTTYPE       GetObjectType()         const\r
54     {\r
55         return (XFA_OBJECTTYPE)(m_uFlags & XFA_OBJECTTYPEMASK);\r
56     }\r
57     inline FX_BOOL                      IsNode()                        const\r
58     {\r
59         return (m_uFlags & XFA_OBJECTTYPEMASK) >= XFA_OBJECTTYPE_Node;\r
60     }\r
61     inline FX_BOOL                      IsOrdinaryObject()      const\r
62     {\r
63         return (m_uFlags & XFA_OBJECTTYPEMASK) == XFA_OBJECTTYPE_OrdinaryObject;\r
64     }\r
65     inline FX_BOOL                      IsNodeList()            const\r
66     {\r
67         return (m_uFlags & XFA_OBJECTTYPEMASK) == XFA_OBJECTTYPE_NodeList;\r
68     }\r
69     inline FX_BOOL                      IsOrdinaryList()        const\r
70     {\r
71         return (m_uFlags & XFA_OBJECTTYPEMASK) == XFA_OBJECTTYPE_OrdinaryList;\r
72     }\r
73     FX_BOOL                                     IsContentNode()         const\r
74     {\r
75         return (m_uFlags & XFA_OBJECTTYPEMASK) == XFA_OBJECTTYPE_ContentNode;\r
76     }\r
77     FX_BOOL                                     IsContainerNode()       const\r
78     {\r
79         return (m_uFlags & XFA_OBJECTTYPEMASK) == XFA_OBJECTTYPE_ContainerNode;\r
80     }\r
81     XFA_ELEMENT                         GetClassID() const;\r
82     void                                        GetClassName(CFX_WideStringC &wsName) const;\r
83     FX_UINT32                           GetClassHashCode() const;\r
84     void                                Script_ObjectClass_ClassName(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
85     void                                ThrowScriptErrorMessage(FX_INT32 iStringID, ...);\r
86 protected:\r
87     CXFA_Document               *m_pDocument;\r
88     FX_DWORD                    m_uFlags;\r
89 };\r
90 #define XFA_NODEFILTER_Children                 0x01\r
91 #define XFA_NODEFILTER_Properties               0x02\r
92 #define XFA_NODEFILTER_OneOfProperty    0x04\r
93 #define XFA_CLONEFLAG_Content                   0x01\r
94 enum XFA_NODEITEM {\r
95     XFA_NODEITEM_Parent,\r
96     XFA_NODEITEM_FirstChild,\r
97     XFA_NODEITEM_NextSibling,\r
98     XFA_NODEITEM_PrevSibling,\r
99 };\r
100 enum XFA_SOM_MESSAGETYPE {\r
101     XFA_SOM_ValidationMessage,\r
102     XFA_SOM_FormatMessage,\r
103     XFA_SOM_MandatoryMessage\r
104 };\r
105 typedef CFX_StackTemplate<CXFA_Node*> CXFA_NodeStack;\r
106 typedef CXFA_PtrSetTemplate<CXFA_Node*> CXFA_NodeSet;\r
107 typedef void (*PD_CALLBACK_DUPLICATEDATA)(FX_LPVOID& pData);\r
108 typedef struct _XFA_MAPDATABLOCKCALLBACKINFO {\r
109     PD_CALLBACK_FREEDATA                pFree;\r
110     PD_CALLBACK_DUPLICATEDATA   pCopy;\r
111 } XFA_MAPDATABLOCKCALLBACKINFO;\r
112 typedef struct _XFA_MAPDATABLOCK : public CFX_Object {\r
113     FX_LPBYTE                           GetData() const\r
114     {\r
115         return (FX_LPBYTE)this + sizeof(_XFA_MAPDATABLOCK);\r
116     }\r
117     XFA_MAPDATABLOCKCALLBACKINFO*       pCallbackInfo;\r
118     FX_INT32                                            iBytes;\r
119 } XFA_MAPDATABLOCK, * XFA_LPMAPDATABLOCK;\r
120 typedef struct _XFA_MAPMODULEDATA : public CFX_Object {\r
121     CFX_MapPtrToPtr                     m_ValueMap;\r
122     CFX_MapPtrTemplate<FX_LPVOID, XFA_LPMAPDATABLOCK> m_BufferMap;\r
123 } XFA_MAPMODULEDATA, * XFA_LPMAPMODULEDATA;\r
124 #define XFA_CalcRefCount        (FX_LPVOID)(FX_UINTPTR)FXBSTR_ID('X', 'F', 'A', 'R')\r
125 #define XFA_CalcData            (FX_LPVOID)(FX_UINTPTR)FXBSTR_ID('X', 'F', 'A', 'C')\r
126 #define XFA_LAYOUTITEMKEY       (FX_LPVOID)(FX_UINTPTR)FXBSTR_ID('L', 'Y', 'I', 'M')\r
127 class CXFA_Node : public CXFA_Object\r
128 {\r
129 public:\r
130     XFA_ELEMENT                 GetClassID() const\r
131     {\r
132         return (XFA_ELEMENT)m_eNodeClass;\r
133     }\r
134     FX_DWORD                    GetPacketID() const\r
135     {\r
136         return m_ePacket;\r
137     }\r
138     FX_BOOL                             HasFlag(FX_DWORD dwFlag) const;\r
139     void                                SetFlag(FX_DWORD dwFlag, FX_BOOL bOn = TRUE, FX_BOOL bNotify = TRUE);\r
140     FX_BOOL                             IsAttributeInXML();\r
141     FX_BOOL                             IsFormContainer()\r
142     {\r
143         return m_ePacket == XFA_XDPPACKET_Form && IsContainerNode();\r
144     }\r
145     void                                SetXMLMappingNode(IFDE_XMLNode* pXMLNode)\r
146     {\r
147         m_pXMLNode = pXMLNode;\r
148     }\r
149     IFDE_XMLNode*               GetXMLMappingNode() const\r
150     {\r
151         return m_pXMLNode;\r
152     }\r
153     IFDE_XMLNode*               CreateXMLMappingNode();\r
154     FX_BOOL                             IsNeedSavingXMLNode();\r
155     inline FX_DWORD             GetNameHash() const\r
156     {\r
157         return m_dwNameHash;\r
158     }\r
159     inline FX_BOOL              IsUnnamed() const\r
160     {\r
161         return m_dwNameHash == 0;\r
162     }\r
163     CXFA_Node*                  GetModelNode();\r
164     void                                UpdateNameHash();\r
165     FX_BOOL                             HasAttribute(XFA_ATTRIBUTE eAttr, FX_BOOL bCanInherit = FALSE);\r
166     FX_BOOL                             SetAttribute(XFA_ATTRIBUTE eAttr, FX_WSTR wsValue, FX_BOOL bNotify = FALSE);\r
167     FX_BOOL                             GetAttribute(XFA_ATTRIBUTE eAttr, CFX_WideString &wsValue, FX_BOOL bUseDefault = TRUE);\r
168     FX_BOOL                             SetAttribute(FX_WSTR wsAttr, FX_WSTR wsValue, FX_BOOL bNotify = FALSE);\r
169     FX_BOOL                             GetAttribute(FX_WSTR wsAttr, CFX_WideString &wsValue, FX_BOOL bUseDefault = TRUE);\r
170     FX_BOOL                             RemoveAttribute(FX_WSTR wsAttr);\r
171     FX_BOOL                             SetContent(const CFX_WideString& wsContent, const CFX_WideString& wsXMLValue, FX_BOOL bNotify = FALSE,  FX_BOOL bScriptModify = FALSE, FX_BOOL bSyncData = TRUE);\r
172     FX_BOOL                             TryContent(CFX_WideString& wsContent, FX_BOOL bScriptModify = FALSE, FX_BOOL bProto = TRUE);\r
173     CFX_WideString              GetContent();\r
174 \r
175     FX_BOOL                             TryNamespace(CFX_WideString& wsNamespace);\r
176 \r
177     FX_BOOL                             SetBoolean(XFA_ATTRIBUTE eAttr, FX_BOOL bValue, FX_BOOL bNotify = FALSE)\r
178     {\r
179         return SetValue(eAttr, XFA_ATTRIBUTETYPE_Boolean, (FX_LPVOID)(FX_UINTPTR)bValue, bNotify);\r
180     }\r
181     FX_BOOL                             TryBoolean(XFA_ATTRIBUTE eAttr, FX_BOOL &bValue, FX_BOOL bUseDefault = TRUE);\r
182     FX_BOOL                             GetBoolean(XFA_ATTRIBUTE eAttr)\r
183     {\r
184         FX_BOOL bValue;\r
185         return TryBoolean(eAttr, bValue, TRUE) ? bValue : FALSE;\r
186     }\r
187     FX_BOOL                             SetInteger(XFA_ATTRIBUTE eAttr, FX_INT32 iValue, FX_BOOL bNotify = FALSE)\r
188     {\r
189         return SetValue(eAttr, XFA_ATTRIBUTETYPE_Integer, (FX_LPVOID)(FX_UINTPTR)iValue, bNotify);\r
190     }\r
191     FX_BOOL                             TryInteger(XFA_ATTRIBUTE eAttr, FX_INT32 &iValue, FX_BOOL bUseDefault = TRUE);\r
192     FX_INT32                    GetInteger(XFA_ATTRIBUTE eAttr)\r
193     {\r
194         FX_INT32 iValue;\r
195         return TryInteger(eAttr, iValue, TRUE) ? iValue : 0;\r
196     }\r
197     FX_BOOL                             SetEnum(XFA_ATTRIBUTE eAttr, XFA_ATTRIBUTEENUM eValue, FX_BOOL bNotify = FALSE)\r
198     {\r
199         return SetValue(eAttr, XFA_ATTRIBUTETYPE_Enum, (FX_LPVOID)(FX_UINTPTR)eValue, bNotify);\r
200     }\r
201     FX_BOOL                             TryEnum(XFA_ATTRIBUTE eAttr, XFA_ATTRIBUTEENUM &eValue, FX_BOOL bUseDefault = TRUE);\r
202     XFA_ATTRIBUTEENUM   GetEnum(XFA_ATTRIBUTE eAttr)\r
203     {\r
204         XFA_ATTRIBUTEENUM eValue;\r
205         return TryEnum(eAttr, eValue, TRUE) ? eValue : XFA_ATTRIBUTEENUM_Unknown;\r
206     }\r
207     FX_BOOL                             SetCData(XFA_ATTRIBUTE eAttr, const CFX_WideString& wsValue, FX_BOOL bNotify = FALSE, FX_BOOL bScriptModify = FALSE);\r
208     FX_BOOL                             SetAttributeValue(const CFX_WideString& wsValue, const CFX_WideString& wsXMLValue, FX_BOOL bNotify = FALSE, FX_BOOL bScriptModify = FALSE);\r
209     FX_BOOL                             TryCData(XFA_ATTRIBUTE eAttr, CFX_WideString &wsValue, FX_BOOL bUseDefault = TRUE, FX_BOOL bProto = TRUE);\r
210     FX_BOOL                             TryCData(XFA_ATTRIBUTE eAttr, CFX_WideStringC &wsValue, FX_BOOL bUseDefault = TRUE, FX_BOOL bProto = TRUE);\r
211     CFX_WideStringC             GetCData(XFA_ATTRIBUTE eAttr)\r
212     {\r
213         CFX_WideStringC wsValue;\r
214         return TryCData(eAttr, wsValue) ? wsValue : CFX_WideStringC();\r
215     }\r
216     FX_BOOL                             SetMeasure(XFA_ATTRIBUTE eAttr, CXFA_Measurement mValue, FX_BOOL bNotify = FALSE);\r
217     FX_BOOL                             TryMeasure(XFA_ATTRIBUTE eAttr, CXFA_Measurement &mValue, FX_BOOL bUseDefault = TRUE);\r
218     CXFA_Measurement    GetMeasure(XFA_ATTRIBUTE eAttr)\r
219     {\r
220         CXFA_Measurement mValue;\r
221         return TryMeasure(eAttr, mValue, TRUE) ? mValue : CXFA_Measurement();\r
222     }\r
223     FX_BOOL                             SetObject(XFA_ATTRIBUTE eAttr, FX_LPVOID pData, XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo = NULL);\r
224     FX_BOOL                             TryObject(XFA_ATTRIBUTE eAttr, FX_LPVOID &pData);\r
225     FX_LPVOID                   GetObject(XFA_ATTRIBUTE eAttr)\r
226     {\r
227         FX_LPVOID pData;\r
228         return TryObject(eAttr, pData) ? pData : NULL;\r
229     }\r
230     FX_BOOL                             SetUserData(FX_LPVOID pKey, FX_LPVOID pData, XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo = NULL);\r
231     FX_BOOL                             TryUserData(FX_LPVOID pKey, FX_LPVOID &pData, FX_BOOL bProtoAlso = FALSE);\r
232     FX_LPVOID                   GetUserData(FX_LPVOID pKey, FX_BOOL bProtoAlso = FALSE)\r
233     {\r
234         FX_LPVOID pData;\r
235         return TryUserData(pKey, pData, bProtoAlso) ? pData : NULL;\r
236     }\r
237     CXFA_Node*                  GetProperty(FX_INT32 index, XFA_ELEMENT eProperty, FX_BOOL bCreateProperty = TRUE);\r
238     FX_INT32                    CountChildren(XFA_ELEMENT eElement,  FX_BOOL bOnlyChild = FALSE);\r
239     CXFA_Node*                  GetChild(FX_INT32 index, XFA_ELEMENT eElement,  FX_BOOL bOnlyChild = FALSE);\r
240     FX_INT32                    InsertChild(FX_INT32 index, CXFA_Node *pNode);\r
241     FX_BOOL                             InsertChild(CXFA_Node *pNode, CXFA_Node* pBeforeNode = NULL);\r
242     FX_BOOL                             RemoveChild(CXFA_Node *pNode, FX_BOOL bNotify = TRUE);\r
243     CXFA_Node*                  Clone(FX_BOOL bRecursive);\r
244     CXFA_Node*                  GetNodeItem(XFA_NODEITEM eItem) const;\r
245     CXFA_Node*                  GetNodeItem(XFA_NODEITEM eItem, XFA_OBJECTTYPE eType) const;\r
246     FX_INT32                    GetNodeList(CXFA_NodeArray &nodes, FX_DWORD dwTypeFilter = XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties, XFA_ELEMENT eElementFilter = XFA_ELEMENT_UNKNOWN, FX_INT32 iLevel = 1);\r
247     CXFA_Node*                  CreateSamePacketNode(XFA_ELEMENT eElement, FX_DWORD dwFlags = XFA_NODEFLAG_Initialized);\r
248     CXFA_Node*                  CloneTemplateToForm(FX_BOOL bRecursive);\r
249     CXFA_Node*                  GetTemplateNode();\r
250     void                                SetTemplateNode(CXFA_Node* pTemplateNode);\r
251     CXFA_Node*                  GetDataDescriptionNode();\r
252     void                                SetDataDescriptionNode(CXFA_Node* pDataDescriptionNode);\r
253     CXFA_Node*                  GetBindData();\r
254     FX_INT32                    GetBindItems(CXFA_NodeArray& formItems);\r
255     FX_INT32                    AddBindItem(CXFA_Node* pFormNode);\r
256     FX_INT32                    RemoveBindItem(CXFA_Node* pFormNode);\r
257     FX_BOOL                             HasBindItem();\r
258     CXFA_WidgetData*    GetWidgetData();\r
259     CXFA_WidgetData*    GetContainerWidgetData();\r
260     FX_BOOL                             GetLocaleName(CFX_WideString& wsLocaleName);\r
261     XFA_ATTRIBUTEENUM   GetIntact();\r
262     CXFA_Node*                  GetFirstChildByName(FX_WSTR wsNodeName) const;\r
263     CXFA_Node*                  GetFirstChildByName(FX_DWORD dwNodeNameHash) const;\r
264     CXFA_Node*                  GetFirstChildByClass(XFA_ELEMENT eNodeClass) const;\r
265     CXFA_Node*                  GetNextSameNameSibling(FX_DWORD dwNodeNameHash) const;\r
266     CXFA_Node*                  GetNextSameNameSibling(FX_WSTR wsNodeName) const;\r
267     CXFA_Node*                  GetNextSameClassSibling(XFA_ELEMENT eNodeClass) const;\r
268     FX_INT32                    GetNodeSameNameIndex() const;\r
269     FX_INT32                    GetNodeSameClassIndex() const;\r
270     void                                GetSOMExpression(CFX_WideString& wsSOMExpression);\r
271     CXFA_Node*                  GetInstanceMgrOfSubform();\r
272 \r
273 \r
274     CXFA_Node*                  GetOccurNode();\r
275     void                                Script_TreeClass_ResolveNode(CFXJSE_Arguments* pArguments);\r
276     void                                Script_TreeClass_ResolveNodes(CFXJSE_Arguments* pArguments);\r
277     void                                Script_Som_ResolveNodeList(FXJSE_HVALUE hValue, CFX_WideString wsExpression, FX_DWORD dwFlag, CXFA_Node* refNode = NULL);\r
278     void                                Script_TreeClass_All(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
279     void                                Script_TreeClass_Nodes(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
280     void                                Script_TreeClass_ClassAll(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
281     void                                Script_TreeClass_Parent(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
282     void                                Script_TreeClass_Index(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
283     void                                Script_TreeClass_ClassIndex(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
284     void                                Script_TreeClass_SomExpression(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
285     void                                Script_NodeClass_ApplyXSL(CFXJSE_Arguments* pArguments);\r
286     void                                Script_NodeClass_AssignNode(CFXJSE_Arguments* pArguments);\r
287     void                                Script_NodeClass_Clone(CFXJSE_Arguments* pArguments);\r
288     void                                Script_NodeClass_GetAttribute(CFXJSE_Arguments* pArguments);\r
289     void                                Script_NodeClass_GetElement(CFXJSE_Arguments* pArguments);\r
290     void                                Script_NodeClass_IsPropertySpecified(CFXJSE_Arguments* pArguments);\r
291     void                                Script_NodeClass_LoadXML(CFXJSE_Arguments* pArguments);\r
292     void                                Script_NodeClass_SaveFilteredXML(CFXJSE_Arguments* pArguments);\r
293     void                                Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments);\r
294     void                                Script_NodeClass_SetAttribute(CFXJSE_Arguments* pArguments);\r
295     void                                Script_NodeClass_SetElement(CFXJSE_Arguments* pArguments);\r
296     void                                Script_NodeClass_Ns(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
297     void                                Script_NodeClass_Model(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
298     void                                Script_NodeClass_IsContainer(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
299     void                                Script_NodeClass_IsNull(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
300     void                                Script_NodeClass_OneOfChild(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
301     void        Script_ContainerClass_GetDelta(CFXJSE_Arguments* pArguments);\r
302     void        Script_ContainerClass_GetDeltas(CFXJSE_Arguments* pArguments);\r
303     void        Script_ModelClass_ClearErrorList(CFXJSE_Arguments* pArguments);\r
304     void        Script_ModelClass_CreateNode(CFXJSE_Arguments* pArguments);\r
305     void        Script_ModelClass_IsCompatibleNS(CFXJSE_Arguments* pArguments);\r
306     void        Script_ModelClass_Context(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
307     void        Script_ModelClass_AliasNode(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
308     void        Script_WsdlConnection_Execute(CFXJSE_Arguments* pArguments);\r
309     void        Script_Delta_Restore(CFXJSE_Arguments* pArguments);\r
310     void        Script_Delta_CurrentValue(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
311     void        Script_Delta_SavedValue(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
312     void        Script_Delta_Target(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
313     void        Script_Attribute_SendAttributeChangeMessage(FX_LPVOID eAttribute, FX_LPVOID eValue, FX_BOOL bScriptModify);\r
314     void        Script_Attribute_Integer(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
315     void        Script_Attribute_IntegerRead(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
316     void        Script_Attribute_BOOL(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
317     void        Script_Attribute_BOOLRead(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
318     void        Script_Attribute_String(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
319     void        Script_Attribute_StringRead(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
320     void        Script_Som_ValidationMessage(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
321     void        Script_Field_Length(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
322     void        Script_Som_DefaultValue(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
323     void        Script_Som_DefaultValue_Read(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
324     void        Script_Boolean_Value(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
325     void   Script_Som_Message(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_SOM_MESSAGETYPE iMessageType);\r
326     void                                Script_Som_BorderColor(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
327     void                                Script_Som_BorderWidth(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
328     void                                Script_Som_FillColor(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
329     void                                Script_Som_DataNode(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
330     void                                Script_Som_FontColor(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
331     void                                Script_Som_Mandatory(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
332     void                                Script_Som_MandatoryMessage(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
333     void                                Script_Som_InstanceIndex(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
334     void        Script_Draw_DefaultValue(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
335     void        Script_Field_DefaultValue(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
336     void        Script_Field_EditValue(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
337     void        Script_Field_FormatMessage(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
338     void        Script_Field_FormattedValue(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
339     void        Script_Field_ParentSubform(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
340     void        Script_Field_SelectedIndex(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
341     void        Script_Field_ClearItems(CFXJSE_Arguments* pArguments);\r
342     void        Script_Field_ExecEvent(CFXJSE_Arguments* pArguments);\r
343     void        Script_Field_ExecInitialize(CFXJSE_Arguments* pArguments);\r
344     void        Script_Field_DeleteItem(CFXJSE_Arguments* pArguments);\r
345     void        Script_Field_GetSaveItem(CFXJSE_Arguments* pArguments);\r
346     void        Script_Field_BoundItem(CFXJSE_Arguments* pArguments);\r
347     void        Script_Field_GetItemState(CFXJSE_Arguments* pArguments);\r
348     void        Script_Field_ExecCalculate(CFXJSE_Arguments* pArguments);\r
349     void        Script_Field_SetItems(CFXJSE_Arguments* pArguments);\r
350     void        Script_Field_GetDisplayItem(CFXJSE_Arguments* pArguments);\r
351     void        Script_Field_SetItemState(CFXJSE_Arguments* pArguments);\r
352     void        Script_Field_AddItem(CFXJSE_Arguments* pArguments);\r
353     void        Script_Field_ExecValidate(CFXJSE_Arguments* pArguments);\r
354     void        Script_ExclGroup_DefaultAndRawValue(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
355     void        Script_ExclGroup_ErrorText(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
356     void        Script_ExclGroup_Transient(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
357     void        Script_ExclGroup_ExecEvent(CFXJSE_Arguments* pArguments);\r
358     void        Script_ExclGroup_SelectedMember(CFXJSE_Arguments* pArguments);\r
359     void        Script_ExclGroup_ExecInitialize(CFXJSE_Arguments* pArguments);\r
360     void        Script_ExclGroup_ExecCalculate(CFXJSE_Arguments* pArguments);\r
361     void        Script_ExclGroup_ExecValidate(CFXJSE_Arguments* pArguments);\r
362     void        Script_Subform_InstanceManager(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
363     void        Script_Subform_Locale(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
364     void        Script_Subform_ExecEvent(CFXJSE_Arguments* pArguments);\r
365     void        Script_Subform_ExecInitialize(CFXJSE_Arguments* pArguments);\r
366     void        Script_Subform_ExecCalculate(CFXJSE_Arguments* pArguments);\r
367     void        Script_Subform_ExecValidate(CFXJSE_Arguments* pArguments);\r
368     void        Script_Subform_GetInvalidObjects(CFXJSE_Arguments* pArguments);\r
369 \r
370     FX_INT32 Subform_and_SubformSet_InstanceIndex();\r
371     void        Script_Template_FormNodes(CFXJSE_Arguments* pArguments);\r
372     void        Script_Template_Remerge(CFXJSE_Arguments* pArguments);\r
373     void        Script_Template_ExecInitialize(CFXJSE_Arguments* pArguments);\r
374     void        Script_Template_CreateNode(CFXJSE_Arguments* pArguments);\r
375     void        Script_Template_Recalculate(CFXJSE_Arguments* pArguments);\r
376     void        Script_Template_ExecCalculate(CFXJSE_Arguments* pArguments);\r
377     void        Script_Template_ExecValidate(CFXJSE_Arguments* pArguments);\r
378     void        Script_Manifest_Evaluate(CFXJSE_Arguments* pArguments);\r
379     void        Script_InstanceManager_Count(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
380     void        Script_InstanceManager_Max(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
381     void        Script_InstanceManager_Min(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
382     void        Script_InstanceManager_MoveInstance(CFXJSE_Arguments* pArguments);\r
383     void        Script_InstanceManager_RemoveInstance(CFXJSE_Arguments* pArguments);\r
384     void        Script_InstanceManager_SetInstances(CFXJSE_Arguments* pArguments);\r
385     void        Script_InstanceManager_AddInstance(CFXJSE_Arguments* pArguments);\r
386     void        Script_InstanceManager_InsertInstance(CFXJSE_Arguments* pArguments);\r
387     FX_INT32 InstanceManager_SetInstances(FX_INT32 iCount);\r
388     FX_INT32 InstanceManager_MoveInstance(FX_INT32 iTo, FX_INT32 iFrom);\r
389     void        Script_Occur_Max(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
390     void        Script_Occur_Min(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
391     void        Script_Desc_Metadata(CFXJSE_Arguments* pArguments);\r
392     void        Script_Form_FormNodes(CFXJSE_Arguments* pArguments);\r
393     void        Script_Form_Remerge(CFXJSE_Arguments* pArguments);\r
394     void        Script_Form_ExecInitialize(CFXJSE_Arguments* pArguments);\r
395     void        Script_Form_Recalculate(CFXJSE_Arguments* pArguments);\r
396     void        Script_Form_ExecCalculate(CFXJSE_Arguments* pArguments);\r
397     void        Script_Form_ExecValidate(CFXJSE_Arguments* pArguments);\r
398     void        Script_Form_Checksum(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
399     void        Script_Packet_GetAttribute(CFXJSE_Arguments* pArguments);\r
400     void        Script_Packet_SetAttribute(CFXJSE_Arguments* pArguments);\r
401     void        Script_Packet_RemoveAttribute(CFXJSE_Arguments* pArguments);\r
402     void        Script_Packet_Content(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
403     void        Script_Source_Next(CFXJSE_Arguments* pArguments);\r
404     void        Script_Source_CancelBatch(CFXJSE_Arguments* pArguments);\r
405     void        Script_Source_First(CFXJSE_Arguments* pArguments);\r
406     void        Script_Source_UpdateBatch(CFXJSE_Arguments* pArguments);\r
407     void        Script_Source_Previous(CFXJSE_Arguments* pArguments);\r
408     void        Script_Source_IsBOF(CFXJSE_Arguments* pArguments);\r
409     void        Script_Source_IsEOF(CFXJSE_Arguments* pArguments);\r
410     void        Script_Source_Cancel(CFXJSE_Arguments* pArguments);\r
411     void        Script_Source_Update(CFXJSE_Arguments* pArguments);\r
412     void        Script_Source_Open(CFXJSE_Arguments* pArguments);\r
413     void        Script_Source_Delete(CFXJSE_Arguments* pArguments);\r
414     void        Script_Source_AddNew(CFXJSE_Arguments* pArguments);\r
415     void        Script_Source_Requery(CFXJSE_Arguments* pArguments);\r
416     void        Script_Source_Resync(CFXJSE_Arguments* pArguments);\r
417     void        Script_Source_Close(CFXJSE_Arguments* pArguments);\r
418     void        Script_Source_Last(CFXJSE_Arguments* pArguments);\r
419     void        Script_Source_HasDataChanged(CFXJSE_Arguments* pArguments);\r
420     void        Script_Source_Db(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
421     void        Script_Xfa_This(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
422     void        Script_Handler_Version(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
423     void        Script_SubmitFormat_Mode(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
424     void        Script_Extras_Type(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
425     void        Script_Encrypt_Format(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
426     void        Script_Script_Stateless(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
427 protected:\r
428     CXFA_Node(CXFA_Document *pDoc, FX_WORD ePacket, XFA_ELEMENT eElement);\r
429     ~CXFA_Node();\r
430     friend class CXFA_Document;\r
431     CXFA_Node*                  Deprecated_GetPrevSibling();\r
432     FX_BOOL                             SetValue(XFA_ATTRIBUTE eAttr, XFA_ATTRIBUTETYPE eType, FX_LPVOID pValue, FX_BOOL bNotify);\r
433     FX_BOOL                             GetValue(XFA_ATTRIBUTE eAttr, XFA_ATTRIBUTETYPE eType, FX_BOOL bUseDefault, FX_LPVOID &pValue);\r
434     void                                OnRemoved(CXFA_Node *pParent, CXFA_Node *pRemoved, FX_BOOL bNotify);\r
435     void                                OnChanging(XFA_ATTRIBUTE eAttr, FX_LPVOID pNewValue, FX_BOOL bNotify);\r
436     void                                OnChanged(XFA_ATTRIBUTE eAttr, FX_LPVOID pNewValue, FX_BOOL bNotify, FX_BOOL bScriptModify = FALSE);\r
437     FX_INT32                    execSingleEventByName(FX_WSTR wsEventName, XFA_ELEMENT eElementType);\r
438     FX_BOOL                             SetScriptContent(const CFX_WideString& wsContent, const CFX_WideString& wsXMLValue, FX_BOOL bNotify = TRUE, FX_BOOL bScriptModify = FALSE, FX_BOOL bSyncData = TRUE);\r
439     CFX_WideString              GetScriptContent(FX_BOOL bScriptModify = FALSE);\r
440     XFA_LPMAPMODULEDATA GetMapModuleData(FX_BOOL bCreateNew);\r
441     void                                SetMapModuleValue(FX_LPVOID pKey, FX_LPVOID pValue);\r
442     FX_BOOL                             GetMapModuleValue(FX_LPVOID pKey, FX_LPVOID &pValue);\r
443     void                                SetMapModuleString(FX_LPVOID pKey, FX_WSTR wsValue);\r
444     FX_BOOL                             GetMapModuleString(FX_LPVOID pKey, CFX_WideStringC &wsValue);\r
445     void                                SetMapModuleBuffer(FX_LPVOID pKey, FX_LPVOID pValue, FX_INT32 iBytes, XFA_MAPDATABLOCKCALLBACKINFO* pCallbackInfo = NULL);\r
446     FX_BOOL                             GetMapModuleBuffer(FX_LPVOID pKey, FX_LPVOID &pValue, FX_INT32 &iBytes, FX_BOOL bProtoAlso = TRUE);\r
447     FX_BOOL                             HasMapModuleKey(FX_LPVOID pKey, FX_BOOL bProtoAlso = FALSE);\r
448     void                                RemoveMapModuleKey(FX_LPVOID pKey = NULL);\r
449     void                                MergeAllData(FX_LPVOID pDstModule, FX_BOOL bUseSrcAttr = TRUE);\r
450     void                                MoveBufferMapData(CXFA_Node* pDstModule, FX_LPVOID pKey);\r
451     void                                MoveBufferMapData(CXFA_Node* pSrcModule, CXFA_Node* pDstModule, FX_LPVOID pKey, FX_BOOL bRecursive = FALSE);\r
452 protected:\r
453     CXFA_Node                   *m_pNext;\r
454     CXFA_Node                   *m_pChild;\r
455     CXFA_Node                   *m_pLastChild;\r
456     CXFA_Node                   *m_pParent;\r
457     IFDE_XMLNode                *m_pXMLNode;\r
458     XFA_ELEMENT                 m_eNodeClass;\r
459     FX_WORD                             m_ePacket;\r
460     FX_DWORD                    m_dwNameHash;\r
461     CXFA_Node                   *m_pAuxNode;\r
462     XFA_LPMAPMODULEDATA m_pMapModuleData;\r
463 };\r
464 class CXFA_OrdinaryObject : public CXFA_Object\r
465 {\r
466 public:\r
467     CXFA_OrdinaryObject(CXFA_Document* pDocument, XFA_ELEMENT eElement) : CXFA_Object(pDocument, XFA_OBJECTTYPE_OrdinaryObject), m_uScriptHash(0)\r
468     {\r
469         m_eNodeClass = eElement;\r
470     }\r
471     XFA_ELEMENT                 GetClassID() const\r
472     {\r
473         return (XFA_ELEMENT)m_eNodeClass;\r
474     }\r
475     FX_UINT32                   GetScriptObjHash()\r
476     {\r
477         return m_uScriptHash;\r
478     }\r
479 protected:\r
480     XFA_ELEMENT                 m_eNodeClass;\r
481     FX_UINT32                   m_uScriptHash;\r
482 };\r
483 class CXFA_ThisProxy : public CXFA_Object\r
484 {\r
485 public :\r
486     CXFA_ThisProxy(CXFA_Node* pThisNode, CXFA_Node* pScriptNode): CXFA_Object(pThisNode->GetDocument(), XFA_OBJECTTYPE_VariablesThis), m_pThisNode(NULL), m_pScriptNode(NULL)\r
487     {\r
488         m_pThisNode = pThisNode;\r
489         m_pScriptNode = pScriptNode;\r
490     }\r
491     virtual ~CXFA_ThisProxy() {}\r
492     CXFA_Node* GetThisNode()\r
493     {\r
494         return m_pThisNode;\r
495     }\r
496     CXFA_Node* GetScriptNode()\r
497     {\r
498         return m_pScriptNode;\r
499     }\r
500 private:\r
501     CXFA_Node* m_pThisNode;\r
502     CXFA_Node* m_pScriptNode;\r
503 };\r
504 class CXFA_NodeList : public CXFA_Object\r
505 {\r
506 public:\r
507     CXFA_NodeList(CXFA_Document* pDocument);\r
508     virtual ~CXFA_NodeList() {}\r
509     XFA_ELEMENT                 GetClassID() const\r
510     {\r
511         return XFA_ELEMENT_NodeList;\r
512     }\r
513     CXFA_Node*                  NamedItem(FX_WSTR wsName);\r
514     virtual FX_INT32    GetLength() = 0;\r
515     virtual FX_BOOL             Append(CXFA_Node* pNode) = 0;\r
516     virtual FX_BOOL             Insert(CXFA_Node* pNewNode, CXFA_Node* pBeforeNode) = 0;\r
517     virtual FX_BOOL             Remove(CXFA_Node* pNode) = 0;\r
518     virtual CXFA_Node*  Item(FX_INT32 iIndex) = 0;\r
519 \r
520     void        Script_ListClass_Append(CFXJSE_Arguments* pArguments);\r
521     void        Script_ListClass_Insert(CFXJSE_Arguments* pArguments);\r
522     void        Script_ListClass_Remove(CFXJSE_Arguments* pArguments);\r
523     void        Script_ListClass_Item(CFXJSE_Arguments* pArguments);\r
524 \r
525     void        Script_TreelistClass_NamedItem(CFXJSE_Arguments* pArguments);\r
526     void        Script_ListClass_Length(FXJSE_HVALUE hValue, FX_BOOL bSetting, XFA_ATTRIBUTE eAttribute);\r
527 };\r
528 class CXFA_ArrayNodeList : public CXFA_NodeList\r
529 {\r
530 public:\r
531     CXFA_ArrayNodeList(CXFA_Document* pDocument);\r
532     void        SetArrayNodeList(const CXFA_NodeArray &srcArray);\r
533     virtual FX_INT32    GetLength();\r
534     virtual FX_BOOL             Append(CXFA_Node* pNode);\r
535     virtual FX_BOOL             Insert(CXFA_Node* pNewNode, CXFA_Node* pBeforeNode);\r
536     virtual FX_BOOL             Remove(CXFA_Node* pNode);\r
537     virtual CXFA_Node*  Item(FX_INT32 iIndex);\r
538 protected:\r
539     CXFA_NodeArray      m_array;\r
540 };\r
541 class CXFA_AttachNodeList : public CXFA_NodeList\r
542 {\r
543 public:\r
544     CXFA_AttachNodeList(CXFA_Document* pDocument, CXFA_Node* pAttachNode);\r
545 \r
546     virtual FX_INT32    GetLength();\r
547     virtual FX_BOOL             Append(CXFA_Node* pNode);\r
548     virtual FX_BOOL             Insert(CXFA_Node* pNewNode, CXFA_Node* pBeforeNode);\r
549     virtual FX_BOOL             Remove(CXFA_Node* pNode);\r
550     virtual CXFA_Node*  Item(FX_INT32 iIndex);\r
551 protected:\r
552     CXFA_Node*          m_pAttachNode;\r
553 };\r
554 class CXFA_TraverseStrategy_XFAContainerNode\r
555 {\r
556 public:\r
557     static CXFA_Node* GetFirstChild(CXFA_Node* pTemplateNode, FX_LPVOID pUserData = NULL)\r
558     {\r
559         return pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild, XFA_OBJECTTYPE_ContainerNode);\r
560     }\r
561     static CXFA_Node* GetNextSibling(CXFA_Node* pTemplateNode, FX_LPVOID pUserData = NULL)\r
562     {\r
563         return pTemplateNode->GetNodeItem(XFA_NODEITEM_NextSibling, XFA_OBJECTTYPE_ContainerNode);\r
564     }\r
565     static CXFA_Node* GetParent(CXFA_Node* pTemplateNode, FX_LPVOID pUserData = NULL)\r
566     {\r
567         return pTemplateNode->GetNodeItem(XFA_NODEITEM_Parent, XFA_OBJECTTYPE_ContainerNode);\r
568     }\r
569 };\r
570 typedef CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode> CXFA_ContainerIterator;\r
571 class CXFA_TraverseStrategy_XFANode\r
572 {\r
573 public:\r
574     static inline CXFA_Node* GetFirstChild(CXFA_Node* pTemplateNode)\r
575     {\r
576         return pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);\r
577     }\r
578     static inline CXFA_Node* GetNextSibling(CXFA_Node* pTemplateNode)\r
579     {\r
580         return pTemplateNode->GetNodeItem(XFA_NODEITEM_NextSibling);\r
581     }\r
582     static inline CXFA_Node* GetParent(CXFA_Node* pTemplateNode)\r
583     {\r
584         return pTemplateNode->GetNodeItem(XFA_NODEITEM_Parent);\r
585     }\r
586 };\r
587 typedef CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> CXFA_NodeIterator;\r
588 #endif\r