1 // Copyright 2017 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 #ifndef XFA_FXFA_PARSER_CXFA_OBJECT_H_ 8 #define XFA_FXFA_PARSER_CXFA_OBJECT_H_ 9 10 #include <memory> 11 12 #include "core/fxcrt/fx_string.h" 13 #include "fxjs/fxjse.h" 14 #include "xfa/fxfa/fxfa_basic.h" 15 16 enum class XFA_ObjectType { 17 Object, 18 List, 19 Node, 20 NodeC, 21 NodeV, 22 ModelNode, 23 TextNode, 24 TreeList, 25 ContainerNode, 26 ContentNode, 27 VariablesThis 28 }; 29 30 class CJX_Object; 31 class CXFA_Document; 32 class CXFA_Node; 33 class CXFA_TreeList; 34 class CXFA_WidgetAcc; 35 36 class CXFA_Object : public CFXJSE_HostObject { 37 public: 38 ~CXFA_Object() override; 39 GetDocument()40 CXFA_Document* GetDocument() const { return m_pDocument.Get(); } GetObjectType()41 XFA_ObjectType GetObjectType() const { return m_objectType; } 42 IsNode()43 bool IsNode() const { 44 return m_objectType == XFA_ObjectType::Node || 45 m_objectType == XFA_ObjectType::NodeC || 46 m_objectType == XFA_ObjectType::NodeV || 47 m_objectType == XFA_ObjectType::ModelNode || 48 m_objectType == XFA_ObjectType::TextNode || 49 m_objectType == XFA_ObjectType::ContainerNode || 50 m_objectType == XFA_ObjectType::ContentNode || 51 m_objectType == XFA_ObjectType::VariablesThis; 52 } IsTreeList()53 bool IsTreeList() const { return m_objectType == XFA_ObjectType::TreeList; } IsContentNode()54 bool IsContentNode() const { 55 return m_objectType == XFA_ObjectType::ContentNode; 56 } IsContainerNode()57 bool IsContainerNode() const { 58 return m_objectType == XFA_ObjectType::ContainerNode; 59 } IsModelNode()60 bool IsModelNode() const { return m_objectType == XFA_ObjectType::ModelNode; } IsNodeV()61 bool IsNodeV() const { return m_objectType == XFA_ObjectType::NodeV; } IsVariablesThis()62 bool IsVariablesThis() const { 63 return m_objectType == XFA_ObjectType::VariablesThis; 64 } 65 66 CXFA_Node* AsNode(); 67 CXFA_TreeList* AsTreeList(); 68 69 const CXFA_Node* AsNode() const; 70 const CXFA_TreeList* AsTreeList() const; 71 JSObject()72 CJX_Object* JSObject() { return m_pJSObject.get(); } JSObject()73 const CJX_Object* JSObject() const { return m_pJSObject.get(); } 74 HasCreatedUIWidget()75 bool HasCreatedUIWidget() const { 76 return m_elementType == XFA_Element::Field || 77 m_elementType == XFA_Element::Draw || 78 m_elementType == XFA_Element::Subform || 79 m_elementType == XFA_Element::ExclGroup; 80 } 81 void CreateWidgetAcc(); GetWidgetAcc()82 CXFA_WidgetAcc* GetWidgetAcc() { return acc_.get(); } 83 GetElementType()84 XFA_Element GetElementType() const { return m_elementType; } GetClassName()85 WideStringView GetClassName() const { return m_elementName; } GetClassHashCode()86 uint32_t GetClassHashCode() const { return m_elementNameHash; } 87 88 WideString GetSOMExpression(); 89 90 protected: 91 CXFA_Object(CXFA_Document* pDocument, 92 XFA_ObjectType objectType, 93 XFA_Element eType, 94 const WideStringView& elementName, 95 std::unique_ptr<CJX_Object> jsObject); 96 97 UnownedPtr<CXFA_Document> const m_pDocument; 98 const XFA_ObjectType m_objectType; 99 const XFA_Element m_elementType; 100 101 const uint32_t m_elementNameHash; 102 const WideStringView m_elementName; 103 104 std::unique_ptr<CJX_Object> m_pJSObject; 105 std::unique_ptr<CXFA_WidgetAcc> acc_; 106 }; 107 108 CXFA_Node* ToNode(CXFA_Object* pObj); 109 const CXFA_Node* ToNode(const CXFA_Object* pObj); 110 111 #endif // XFA_FXFA_PARSER_CXFA_OBJECT_H_ 112