Home | History | Annotate | Download | only in fpdfsdk
      1 // Copyright 2016 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 FPDFSDK_CPDFSDK_ANNOTHANDLERMGR_H_
      8 #define FPDFSDK_CPDFSDK_ANNOTHANDLERMGR_H_
      9 
     10 #include <map>
     11 #include <memory>
     12 
     13 #include "core/fpdfdoc/cpdf_annot.h"
     14 #include "core/fxcrt/fx_coordinates.h"
     15 #include "core/fxcrt/unowned_ptr.h"
     16 #include "fpdfsdk/cpdfsdk_annot.h"
     17 
     18 class CFX_Matrix;
     19 class CFX_RenderDevice;
     20 class CPDFSDK_FormFillEnvironment;
     21 class CPDFSDK_BAAnnotHandler;
     22 class CPDFSDK_WidgetHandler;
     23 class CPDFSDK_PageView;
     24 class IPDFSDK_AnnotHandler;
     25 
     26 #ifdef PDF_ENABLE_XFA
     27 class CPDFSDK_XFAWidgetHandler;
     28 class CXFA_FFWidget;
     29 #endif  // PDF_ENABLE_XFA
     30 
     31 class CPDFSDK_AnnotHandlerMgr {
     32  public:
     33   explicit CPDFSDK_AnnotHandlerMgr(CPDFSDK_FormFillEnvironment* pApp);
     34   ~CPDFSDK_AnnotHandlerMgr();
     35 
     36   CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView);
     37 #ifdef PDF_ENABLE_XFA
     38   CPDFSDK_Annot* NewAnnot(CXFA_FFWidget* pAnnot, CPDFSDK_PageView* pPageView);
     39 #endif  // PDF_ENABLE_XFA
     40   void ReleaseAnnot(CPDFSDK_Annot* pAnnot);
     41 
     42   void Annot_OnCreate(CPDFSDK_Annot* pAnnot);
     43   void Annot_OnLoad(CPDFSDK_Annot* pAnnot);
     44 
     45   WideString Annot_GetSelectedText(CPDFSDK_Annot* pAnnot);
     46   void Annot_ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text);
     47 
     48   IPDFSDK_AnnotHandler* GetAnnotHandler(CPDFSDK_Annot* pAnnot) const;
     49   void Annot_OnDraw(CPDFSDK_PageView* pPageView,
     50                     CPDFSDK_Annot* pAnnot,
     51                     CFX_RenderDevice* pDevice,
     52                     CFX_Matrix* pUser2Device,
     53                     bool bDrawAnnots);
     54 
     55   void Annot_OnMouseEnter(CPDFSDK_PageView* pPageView,
     56                           CPDFSDK_Annot::ObservedPtr* pAnnot,
     57                           uint32_t nFlags);
     58   void Annot_OnMouseExit(CPDFSDK_PageView* pPageView,
     59                          CPDFSDK_Annot::ObservedPtr* pAnnot,
     60                          uint32_t nFlags);
     61   bool Annot_OnLButtonDown(CPDFSDK_PageView* pPageView,
     62                            CPDFSDK_Annot::ObservedPtr* pAnnot,
     63                            uint32_t nFlags,
     64                            const CFX_PointF& point);
     65   bool Annot_OnLButtonUp(CPDFSDK_PageView* pPageView,
     66                          CPDFSDK_Annot::ObservedPtr* pAnnot,
     67                          uint32_t nFlags,
     68                          const CFX_PointF& point);
     69   bool Annot_OnLButtonDblClk(CPDFSDK_PageView* pPageView,
     70                              CPDFSDK_Annot::ObservedPtr* pAnnot,
     71                              uint32_t nFlags,
     72                              const CFX_PointF& point);
     73   bool Annot_OnMouseMove(CPDFSDK_PageView* pPageView,
     74                          CPDFSDK_Annot::ObservedPtr* pAnnot,
     75                          uint32_t nFlags,
     76                          const CFX_PointF& point);
     77   bool Annot_OnMouseWheel(CPDFSDK_PageView* pPageView,
     78                           CPDFSDK_Annot::ObservedPtr* pAnnot,
     79                           uint32_t nFlags,
     80                           short zDelta,
     81                           const CFX_PointF& point);
     82   bool Annot_OnRButtonDown(CPDFSDK_PageView* pPageView,
     83                            CPDFSDK_Annot::ObservedPtr* pAnnot,
     84                            uint32_t nFlags,
     85                            const CFX_PointF& point);
     86   bool Annot_OnRButtonUp(CPDFSDK_PageView* pPageView,
     87                          CPDFSDK_Annot::ObservedPtr* pAnnot,
     88                          uint32_t nFlags,
     89                          const CFX_PointF& point);
     90   bool Annot_OnChar(CPDFSDK_Annot* pAnnot, uint32_t nChar, uint32_t nFlags);
     91   bool Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
     92   bool Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
     93 
     94   bool Annot_OnSetFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag);
     95   bool Annot_OnKillFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag);
     96 
     97 #ifdef PDF_ENABLE_XFA
     98   bool Annot_OnChangeFocus(CPDFSDK_Annot::ObservedPtr* pSetAnnot,
     99                            CPDFSDK_Annot::ObservedPtr* pKillAnnot);
    100 #endif  // PDF_ENABLE_XFA
    101 
    102   CFX_FloatRect Annot_OnGetViewBBox(CPDFSDK_PageView* pPageView,
    103                                     CPDFSDK_Annot* pAnnot);
    104   bool Annot_OnHitTest(CPDFSDK_PageView* pPageView,
    105                        CPDFSDK_Annot* pAnnot,
    106                        const CFX_PointF& point);
    107 
    108  private:
    109   IPDFSDK_AnnotHandler* GetAnnotHandler(CPDF_Annot::Subtype nSubtype) const;
    110   CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, bool bNext);
    111 
    112   std::unique_ptr<CPDFSDK_BAAnnotHandler> m_pBAAnnotHandler;
    113   std::unique_ptr<CPDFSDK_WidgetHandler> m_pWidgetHandler;
    114 #ifdef PDF_ENABLE_XFA
    115   std::unique_ptr<CPDFSDK_XFAWidgetHandler> m_pXFAWidgetHandler;
    116 #endif  // PDF_ENABLE_XFA
    117 };
    118 
    119 #endif  // FPDFSDK_CPDFSDK_ANNOTHANDLERMGR_H_
    120