1 // Copyright 2014 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_INCLUDE_XFA_FFPAGEVIEW_H_ 8 #define XFA_FXFA_INCLUDE_XFA_FFPAGEVIEW_H_ 9 10 #include "xfa/fxfa/parser/xfa_doclayout.h" 11 12 class CXFA_FFWidget; 13 class CXFA_FFDocView; 14 15 class CXFA_FFPageView : public CXFA_ContainerLayoutItem { 16 public: 17 CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea); 18 ~CXFA_FFPageView() override; 19 20 CXFA_FFDocView* GetDocView() const; 21 void GetPageViewRect(CFX_RectF& rtPage) const; 22 void GetDisplayMatrix(CFX_Matrix& mt, 23 const CFX_Rect& rtDisp, 24 int32_t iRotate) const; 25 IXFA_WidgetIterator* CreateWidgetIterator( 26 uint32_t dwTraverseWay = XFA_TRAVERSEWAY_Form, 27 uint32_t dwWidgetFilter = XFA_WidgetStatus_Visible | 28 XFA_WidgetStatus_Viewable); 29 30 protected: 31 CXFA_FFDocView* const m_pDocView; 32 }; 33 34 typedef CXFA_NodeIteratorTemplate<CXFA_LayoutItem, 35 CXFA_TraverseStrategy_LayoutItem> 36 CXFA_LayoutItemIterator; 37 38 class CXFA_FFPageWidgetIterator : public IXFA_WidgetIterator { 39 public: 40 CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, uint32_t dwFilter); 41 ~CXFA_FFPageWidgetIterator() override; 42 43 void Reset() override; 44 CXFA_FFWidget* MoveToFirst() override; 45 CXFA_FFWidget* MoveToLast() override; 46 CXFA_FFWidget* MoveToNext() override; 47 CXFA_FFWidget* MoveToPrevious() override; 48 CXFA_FFWidget* GetCurrentWidget() override; 49 FX_BOOL SetCurrentWidget(CXFA_FFWidget* hWidget) override; 50 51 protected: 52 CXFA_FFWidget* GetWidget(CXFA_LayoutItem* pLayoutItem); 53 54 CXFA_FFPageView* m_pPageView; 55 CXFA_FFWidget* m_hCurWidget; 56 uint32_t m_dwFilter; 57 FX_BOOL m_bIgnorerelevant; 58 CXFA_LayoutItemIterator m_sIterator; 59 }; 60 typedef CFX_ArrayTemplate<CXFA_FFWidget*> CXFA_WidgetArray; 61 62 class CXFA_TabParam { 63 public: 64 CXFA_TabParam(); 65 ~CXFA_TabParam(); 66 67 CXFA_FFWidget* m_pWidget; 68 CXFA_WidgetArray m_Children; 69 }; 70 71 class CXFA_FFTabOrderPageWidgetIterator : public IXFA_WidgetIterator { 72 public: 73 CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView, 74 uint32_t dwFilter); 75 ~CXFA_FFTabOrderPageWidgetIterator() override; 76 77 void Reset() override; 78 CXFA_FFWidget* MoveToFirst() override; 79 CXFA_FFWidget* MoveToLast() override; 80 CXFA_FFWidget* MoveToNext() override; 81 CXFA_FFWidget* MoveToPrevious() override; 82 CXFA_FFWidget* GetCurrentWidget() override; 83 FX_BOOL SetCurrentWidget(CXFA_FFWidget* hWidget) override; 84 85 protected: 86 CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget); 87 CXFA_FFWidget* FindWidgetByName(const CFX_WideString& wsWidgetName, 88 CXFA_FFWidget* pRefWidget); 89 void CreateTabOrderWidgetArray(); 90 void CreateSpaceOrderWidgetArray(CXFA_WidgetArray& WidgetArray); 91 CXFA_FFWidget* GetWidget(CXFA_LayoutItem* pLayoutItem); 92 void OrderContainer(CXFA_LayoutItemIterator* sIterator, 93 CXFA_LayoutItem* pContainerItem, 94 CXFA_TabParam* pContainer, 95 FX_BOOL& bCurrentItem, 96 FX_BOOL& bContentArea, 97 FX_BOOL bMarsterPage = FALSE); 98 99 CXFA_WidgetArray m_TabOrderWidgetArray; 100 CXFA_FFPageView* m_pPageView; 101 uint32_t m_dwFilter; 102 int32_t m_iCurWidget; 103 FX_BOOL m_bIgnorerelevant; 104 }; 105 106 #endif // XFA_FXFA_INCLUDE_XFA_FFPAGEVIEW_H_ 107