1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef XFA_FXFA_CXFA_FFDOCVIEW_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define XFA_FXFA_CXFA_FFDOCVIEW_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <list> 11*3ac0a46fSAndroid Build Coastguard Worker #include <vector> 12*3ac0a46fSAndroid Build Coastguard Worker 13*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/gc/heap.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/garbage-collected.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/member.h" 16*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/visitor.h" 17*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_eventparam.h" 18*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffdoc.h" 19*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffwidget.h" 20*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/fxfa.h" 21*3ac0a46fSAndroid Build Coastguard Worker 22*3ac0a46fSAndroid Build Coastguard Worker class CXFA_BindItems; 23*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFDoc; 24*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFWidgetHandler; 25*3ac0a46fSAndroid Build Coastguard Worker class CXFA_Node; 26*3ac0a46fSAndroid Build Coastguard Worker class CXFA_Subform; 27*3ac0a46fSAndroid Build Coastguard Worker class CXFA_ViewLayoutItem; 28*3ac0a46fSAndroid Build Coastguard Worker 29*3ac0a46fSAndroid Build Coastguard Worker extern const XFA_AttributeValue kXFAEventActivity[]; 30*3ac0a46fSAndroid Build Coastguard Worker 31*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFDocView : public cppgc::GarbageCollected<CXFA_FFDocView> { 32*3ac0a46fSAndroid Build Coastguard Worker public: 33*3ac0a46fSAndroid Build Coastguard Worker enum class LayoutStatus : uint8_t { kNone, kStart, kDoing, kEnd }; 34*3ac0a46fSAndroid Build Coastguard Worker 35*3ac0a46fSAndroid Build Coastguard Worker class UpdateScope { 36*3ac0a46fSAndroid Build Coastguard Worker CPPGC_STACK_ALLOCATED(); 37*3ac0a46fSAndroid Build Coastguard Worker 38*3ac0a46fSAndroid Build Coastguard Worker public: 39*3ac0a46fSAndroid Build Coastguard Worker explicit UpdateScope(CXFA_FFDocView* pDocView); 40*3ac0a46fSAndroid Build Coastguard Worker ~UpdateScope(); 41*3ac0a46fSAndroid Build Coastguard Worker 42*3ac0a46fSAndroid Build Coastguard Worker private: 43*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<CXFA_FFDocView> const m_pDocView; 44*3ac0a46fSAndroid Build Coastguard Worker }; 45*3ac0a46fSAndroid Build Coastguard Worker 46*3ac0a46fSAndroid Build Coastguard Worker CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 47*3ac0a46fSAndroid Build Coastguard Worker ~CXFA_FFDocView(); 48*3ac0a46fSAndroid Build Coastguard Worker 49*3ac0a46fSAndroid Build Coastguard Worker void Trace(cppgc::Visitor* visitor) const; 50*3ac0a46fSAndroid Build Coastguard Worker GetDoc()51*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc* GetDoc() const { return m_pDoc; } 52*3ac0a46fSAndroid Build Coastguard Worker int32_t StartLayout(); 53*3ac0a46fSAndroid Build Coastguard Worker int32_t DoLayout(); 54*3ac0a46fSAndroid Build Coastguard Worker void StopLayout(); 55*3ac0a46fSAndroid Build Coastguard Worker SetLayoutEvent()56*3ac0a46fSAndroid Build Coastguard Worker void SetLayoutEvent() { m_bLayoutEvent = true; } InLayoutStatus()57*3ac0a46fSAndroid Build Coastguard Worker bool InLayoutStatus() const { return m_bInLayoutStatus; } GetLayoutStatus()58*3ac0a46fSAndroid Build Coastguard Worker LayoutStatus GetLayoutStatus() const { return m_iStatus; } 59*3ac0a46fSAndroid Build Coastguard Worker 60*3ac0a46fSAndroid Build Coastguard Worker void UpdateDocView(); 61*3ac0a46fSAndroid Build Coastguard Worker void UpdateUIDisplay(CXFA_Node* pNode, CXFA_FFWidget* pExcept); 62*3ac0a46fSAndroid Build Coastguard Worker 63*3ac0a46fSAndroid Build Coastguard Worker int32_t CountPageViews() const; 64*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFPageView* GetPageView(int32_t nIndex) const; 65*3ac0a46fSAndroid Build Coastguard Worker 66*3ac0a46fSAndroid Build Coastguard Worker void ResetNode(CXFA_Node* pNode); 67*3ac0a46fSAndroid Build Coastguard Worker CXFA_Node* GetRootSubform(); 68*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidgetHandler* GetWidgetHandler(); GetFocusWidget()69*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* GetFocusWidget() const { return m_pFocusWidget; } 70*3ac0a46fSAndroid Build Coastguard Worker bool SetFocus(CXFA_FFWidget* pNewFocus); 71*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* GetWidgetForNode(CXFA_Node* node); 72*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* GetWidgetByName(const WideString& wsName, 73*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* pRefWidget); 74*3ac0a46fSAndroid Build Coastguard Worker CXFA_LayoutProcessor* GetLayoutProcessor() const; 75*3ac0a46fSAndroid Build Coastguard Worker void OnPageViewEvent(CXFA_ViewLayoutItem* pSender, 76*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc::PageViewEvent eEvent); LockUpdate()77*3ac0a46fSAndroid Build Coastguard Worker void LockUpdate() { m_iLock++; } UnlockUpdate()78*3ac0a46fSAndroid Build Coastguard Worker void UnlockUpdate() { m_iLock--; } 79*3ac0a46fSAndroid Build Coastguard Worker void InvalidateRect(CXFA_FFPageView* pPageView, 80*3ac0a46fSAndroid Build Coastguard Worker const CFX_RectF& rtInvalidate); 81*3ac0a46fSAndroid Build Coastguard Worker void RunDocClose(); 82*3ac0a46fSAndroid Build Coastguard Worker 83*3ac0a46fSAndroid Build Coastguard Worker void ProcessValueChanged(CXFA_Node* node); 84*3ac0a46fSAndroid Build Coastguard Worker void SetChangeMark(); 85*3ac0a46fSAndroid Build Coastguard Worker 86*3ac0a46fSAndroid Build Coastguard Worker void AddValidateNode(CXFA_Node* node); 87*3ac0a46fSAndroid Build Coastguard Worker void AddCalculateNodeNotify(CXFA_Node* pNodeChange); 88*3ac0a46fSAndroid Build Coastguard Worker void AddCalculateNode(CXFA_Node* node); 89*3ac0a46fSAndroid Build Coastguard Worker 90*3ac0a46fSAndroid Build Coastguard Worker bool RunLayout(); 91*3ac0a46fSAndroid Build Coastguard Worker void AddNewFormNode(CXFA_Node* pNode); 92*3ac0a46fSAndroid Build Coastguard Worker void AddIndexChangedSubform(CXFA_Subform* pNode); GetFocusNode()93*3ac0a46fSAndroid Build Coastguard Worker CXFA_Node* GetFocusNode() const { return m_pFocusNode; } 94*3ac0a46fSAndroid Build Coastguard Worker void SetFocusNode(CXFA_Node* pNode); 95*3ac0a46fSAndroid Build Coastguard Worker void DeleteLayoutItem(CXFA_FFWidget* pWidget); 96*3ac0a46fSAndroid Build Coastguard Worker XFA_EventError ExecEventActivityByDeepFirst(CXFA_Node* pFormNode, 97*3ac0a46fSAndroid Build Coastguard Worker XFA_EVENTTYPE eEventType, 98*3ac0a46fSAndroid Build Coastguard Worker bool bIsFormReady, 99*3ac0a46fSAndroid Build Coastguard Worker bool bRecursive); 100*3ac0a46fSAndroid Build Coastguard Worker AddBindItem(CXFA_BindItems * item)101*3ac0a46fSAndroid Build Coastguard Worker void AddBindItem(CXFA_BindItems* item) { m_BindItems.push_back(item); } 102*3ac0a46fSAndroid Build Coastguard Worker void AddNullTestMsg(const WideString& msg); 103*3ac0a46fSAndroid Build Coastguard Worker 104*3ac0a46fSAndroid Build Coastguard Worker private: 105*3ac0a46fSAndroid Build Coastguard Worker explicit CXFA_FFDocView(CXFA_FFDoc* pDoc); 106*3ac0a46fSAndroid Build Coastguard Worker 107*3ac0a46fSAndroid Build Coastguard Worker bool RunEventLayoutReady(); 108*3ac0a46fSAndroid Build Coastguard Worker void RunBindItems(); 109*3ac0a46fSAndroid Build Coastguard Worker void InitCalculate(CXFA_Node* pNode); 110*3ac0a46fSAndroid Build Coastguard Worker void InitLayout(CXFA_Node* pNode); 111*3ac0a46fSAndroid Build Coastguard Worker size_t RunCalculateRecursive(size_t index); 112*3ac0a46fSAndroid Build Coastguard Worker void ShowNullTestMsg(); 113*3ac0a46fSAndroid Build Coastguard Worker bool ResetSingleNodeData(CXFA_Node* pNode); 114*3ac0a46fSAndroid Build Coastguard Worker IsUpdateLocked()115*3ac0a46fSAndroid Build Coastguard Worker bool IsUpdateLocked() const { return m_iLock > 0; } 116*3ac0a46fSAndroid Build Coastguard Worker bool InitValidate(CXFA_Node* pNode); 117*3ac0a46fSAndroid Build Coastguard Worker bool RunValidate(); 118*3ac0a46fSAndroid Build Coastguard Worker XFA_EventError RunCalculateWidgets(); 119*3ac0a46fSAndroid Build Coastguard Worker void RunSubformIndexChange(); 120*3ac0a46fSAndroid Build Coastguard Worker 121*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_FFDoc> const m_pDoc; 122*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_FFWidgetHandler> m_pWidgetHandler; 123*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_Node> m_pFocusNode; 124*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_FFWidget> m_pFocusWidget; 125*3ac0a46fSAndroid Build Coastguard Worker std::list<cppgc::Member<CXFA_Node>> m_ValidateNodes; 126*3ac0a46fSAndroid Build Coastguard Worker std::vector<cppgc::Member<CXFA_Node>> m_CalculateNodes; 127*3ac0a46fSAndroid Build Coastguard Worker std::list<cppgc::Member<CXFA_BindItems>> m_BindItems; 128*3ac0a46fSAndroid Build Coastguard Worker std::list<cppgc::Member<CXFA_Node>> m_NewAddedNodes; 129*3ac0a46fSAndroid Build Coastguard Worker std::list<cppgc::Member<CXFA_Subform>> m_IndexChangedSubforms; 130*3ac0a46fSAndroid Build Coastguard Worker std::vector<WideString> m_NullTestMsgArray; 131*3ac0a46fSAndroid Build Coastguard Worker bool m_bLayoutEvent = false; 132*3ac0a46fSAndroid Build Coastguard Worker bool m_bInLayoutStatus = false; 133*3ac0a46fSAndroid Build Coastguard Worker LayoutStatus m_iStatus = LayoutStatus::kNone; 134*3ac0a46fSAndroid Build Coastguard Worker int32_t m_iLock = 0; 135*3ac0a46fSAndroid Build Coastguard Worker }; 136*3ac0a46fSAndroid Build Coastguard Worker 137*3ac0a46fSAndroid Build Coastguard Worker #endif // XFA_FXFA_CXFA_FFDOCVIEW_H_ 138