// Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef XFA_FXFA_APP_XFA_FFPAGEVIEW_H_ #define XFA_FXFA_APP_XFA_FFPAGEVIEW_H_ #include "xfa/fxfa/parser/xfa_doclayout.h" class CXFA_FFWidget; class CXFA_FFDocView; class CXFA_FFPageView : public CXFA_ContainerLayoutItem, public IXFA_PageView { public: CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea); ~CXFA_FFPageView() override; // IFXA_PageView: IXFA_DocView* GetDocView() override; int32_t GetPageViewIndex() override; void GetPageViewRect(CFX_RectF& rtPage) override; void GetDisplayMatrix(CFX_Matrix& mt, const CFX_Rect& rtDisp, int32_t iRotate) override; int32_t LoadPageView(IFX_Pause* pPause = NULL) override; void UnloadPageView() override; IXFA_Widget* GetWidgetByPos(FX_FLOAT fx, FX_FLOAT fy) override; IXFA_WidgetIterator* CreateWidgetIterator( FX_DWORD dwTraverseWay = XFA_TRAVERSEWAY_Form, FX_DWORD dwWidgetFilter = XFA_WIDGETFILTER_Visible | XFA_WIDGETFILTER_Viewable | XFA_WIDGETFILTER_AllType) override; FX_BOOL IsPageViewLoaded(); protected: CXFA_FFDocView* m_pDocView; FX_BOOL m_bLoaded; }; typedef CXFA_NodeIteratorTemplate CXFA_LayoutItemIterator; class CXFA_FFPageWidgetIterator : public IXFA_WidgetIterator { public: CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, FX_DWORD dwFilter); virtual ~CXFA_FFPageWidgetIterator(); virtual void Release() { delete this; } virtual void Reset(); virtual IXFA_Widget* MoveToFirst(); virtual IXFA_Widget* MoveToLast(); virtual IXFA_Widget* MoveToNext(); virtual IXFA_Widget* MoveToPrevious(); virtual IXFA_Widget* GetCurrentWidget(); virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget); protected: IXFA_Widget* GetWidget(CXFA_LayoutItem* pLayoutItem); CXFA_FFPageView* m_pPageView; IXFA_Widget* m_hCurWidget; FX_DWORD m_dwFilter; FX_BOOL m_bIgnorerelevant; CXFA_LayoutItemIterator m_sIterator; }; typedef CFX_ArrayTemplate CXFA_WidgetArray; class CXFA_TabParam { public: CXFA_TabParam() : m_pWidget(NULL) {} ~CXFA_TabParam() {} CXFA_FFWidget* m_pWidget; CXFA_WidgetArray m_Children; }; class CXFA_FFTabOrderPageWidgetIterator : public IXFA_WidgetIterator { public: CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView, FX_DWORD dwFilter); virtual ~CXFA_FFTabOrderPageWidgetIterator(); virtual void Release(); virtual void Reset(); virtual IXFA_Widget* MoveToFirst(); virtual IXFA_Widget* MoveToLast(); virtual IXFA_Widget* MoveToNext(); virtual IXFA_Widget* MoveToPrevious(); virtual IXFA_Widget* GetCurrentWidget(); virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget); protected: CXFA_WidgetArray m_TabOrderWidgetArray; CXFA_FFPageView* m_pPageView; FX_DWORD m_dwFilter; int32_t m_iCurWidget; FX_BOOL m_bIgnorerelevant; CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget); CXFA_FFWidget* FindWidgetByName(const CFX_WideStringC& wsWidgetName, CXFA_FFWidget* pRefWidget); void CreateTabOrderWidgetArray(); void CreateSpaceOrderWidgetArray(CXFA_WidgetArray& WidgetArray); CXFA_FFWidget* GetWidget(CXFA_LayoutItem* pLayoutItem); void OrderContainer(CXFA_LayoutItemIterator* sIterator, CXFA_LayoutItem* pContainerItem, CXFA_TabParam* pContainer, FX_BOOL& bCurrentItem, FX_BOOL& bContentArea, FX_BOOL bMarsterPage = FALSE); }; #endif // XFA_FXFA_APP_XFA_FFPAGEVIEW_H_