Home | History | Annotate | Download | only in include
      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 FPDFSDK_INCLUDE_FSDK_ANNOTHANDLER_H_
      8 #define FPDFSDK_INCLUDE_FSDK_ANNOTHANDLER_H_
      9 
     10 #include <map>
     11 #include <vector>
     12 
     13 #include "core/include/fxcrt/fx_basic.h"
     14 
     15 #ifdef PDF_ENABLE_XFA
     16 #define FSDK_XFAWIDGET_TYPENAME "XFAWidget"
     17 #endif  // PDF_ENABLE_XFA
     18 
     19 class CFFL_IFormFiller;
     20 class CFX_RenderDevice;
     21 class CPDFDoc_Environment;
     22 class CPDFSDK_Annot;
     23 class CPDFSDK_PageView;
     24 class CPDF_Annot;
     25 class CFX_Matrix;
     26 class CPDF_Point;
     27 
     28 class IPDFSDK_AnnotHandler {
     29  public:
     30   virtual ~IPDFSDK_AnnotHandler() {}
     31 
     32   virtual CFX_ByteString GetType() = 0;
     33 
     34   virtual CFX_ByteString GetName() = 0;
     35 
     36   virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot) = 0;
     37 
     38   virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot,
     39                                   CPDFSDK_PageView* pPage) = 0;
     40 
     41 #ifdef PDF_ENABLE_XFA
     42   virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* hWidget,
     43                                   CPDFSDK_PageView* pPage) = 0;
     44 #endif  // PDF_ENABLE_XFA
     45 
     46   virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot) = 0;
     47 
     48   virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) = 0;
     49 
     50   virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView* pPageView,
     51                                 CPDFSDK_Annot* pAnnot) = 0;
     52 
     53   virtual FX_BOOL HitTest(CPDFSDK_PageView* pPageView,
     54                           CPDFSDK_Annot* pAnnot,
     55                           const CPDF_Point& point) = 0;
     56 
     57   virtual void OnDraw(CPDFSDK_PageView* pPageView,
     58                       CPDFSDK_Annot* pAnnot,
     59                       CFX_RenderDevice* pDevice,
     60                       CFX_Matrix* pUser2Device,
     61                       FX_DWORD dwFlags) = 0;
     62 
     63   virtual void OnDrawSleep(CPDFSDK_PageView* pPageView,
     64                            CPDFSDK_Annot* pAnnot,
     65                            CFX_RenderDevice* pDevice,
     66                            CFX_Matrix* pUser2Device,
     67                            const CPDF_Rect& rcWindow,
     68                            FX_DWORD dwFlags) = 0;
     69 
     70   virtual void OnCreate(CPDFSDK_Annot* pAnnot) = 0;
     71 
     72   virtual void OnLoad(CPDFSDK_Annot* pAnnot) = 0;
     73 
     74   virtual void OnDelete(CPDFSDK_Annot* pAnnot) = 0;
     75 
     76   virtual void OnRelease(CPDFSDK_Annot* pAnnot) = 0;
     77 
     78   virtual void OnMouseEnter(CPDFSDK_PageView* pPageView,
     79                             CPDFSDK_Annot* pAnnot,
     80                             FX_DWORD nFlag) = 0;
     81   virtual void OnMouseExit(CPDFSDK_PageView* pPageView,
     82                            CPDFSDK_Annot* pAnnot,
     83                            FX_DWORD nFlag) = 0;
     84 
     85   virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView,
     86                                 CPDFSDK_Annot* pAnnot,
     87                                 FX_DWORD nFlags,
     88                                 const CPDF_Point& point) = 0;
     89   virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView,
     90                               CPDFSDK_Annot* pAnnot,
     91                               FX_DWORD nFlags,
     92                               const CPDF_Point& point) = 0;
     93   virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView,
     94                                   CPDFSDK_Annot* pAnnot,
     95                                   FX_DWORD nFlags,
     96                                   const CPDF_Point& point) = 0;
     97   virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView,
     98                               CPDFSDK_Annot* pAnnot,
     99                               FX_DWORD nFlags,
    100                               const CPDF_Point& point) = 0;
    101   virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView,
    102                                CPDFSDK_Annot* pAnnot,
    103                                FX_DWORD nFlags,
    104                                short zDelta,
    105                                const CPDF_Point& point) = 0;
    106   virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView,
    107                                 CPDFSDK_Annot* pAnnot,
    108                                 FX_DWORD nFlags,
    109                                 const CPDF_Point& point) = 0;
    110   virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView,
    111                               CPDFSDK_Annot* pAnnot,
    112                               FX_DWORD nFlags,
    113                               const CPDF_Point& point) = 0;
    114   virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView* pPageView,
    115                                   CPDFSDK_Annot* pAnnot,
    116                                   FX_DWORD nFlags,
    117                                   const CPDF_Point& point) = 0;
    118   // by wjm.
    119   virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot,
    120                          FX_DWORD nChar,
    121                          FX_DWORD nFlags) = 0;
    122   virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) = 0;
    123   virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) = 0;
    124 
    125   virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) = 0;
    126   virtual void OnSelected(CPDFSDK_Annot* pAnnot) = 0;
    127 
    128   virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
    129   virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
    130 #ifdef PDF_ENABLE_XFA
    131   virtual FX_BOOL OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot,
    132                                     CPDFSDK_Annot* pNewAnnot) = 0;
    133 #endif  // PDF_ENABLE_XFA
    134 };
    135 
    136 class CPDFSDK_BFAnnotHandler : public IPDFSDK_AnnotHandler {
    137  public:
    138   explicit CPDFSDK_BFAnnotHandler(CPDFDoc_Environment* pApp)
    139       : m_pApp(pApp), m_pFormFiller(NULL) {}
    140   ~CPDFSDK_BFAnnotHandler() override {}
    141 
    142   // IPDFSDK_AnnotHandler
    143   CFX_ByteString GetType() override { return CFX_ByteString("Widget"); }
    144   CFX_ByteString GetName() override { return CFX_ByteString("WidgetHandler"); }
    145   FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot) override;
    146   CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) override;
    147 #ifdef PDF_ENABLE_XFA
    148   CPDFSDK_Annot* NewAnnot(IXFA_Widget* hWidget,
    149                           CPDFSDK_PageView* pPage) override;
    150 #endif  // PDF_ENABLE_XFA
    151   void ReleaseAnnot(CPDFSDK_Annot* pAnnot) override;
    152   void DeleteAnnot(CPDFSDK_Annot* pAnnot) override {}
    153   CPDF_Rect GetViewBBox(CPDFSDK_PageView* pPageView,
    154                         CPDFSDK_Annot* pAnnot) override;
    155   FX_BOOL HitTest(CPDFSDK_PageView* pPageView,
    156                   CPDFSDK_Annot* pAnnot,
    157                   const CPDF_Point& point) override;
    158   void OnDraw(CPDFSDK_PageView* pPageView,
    159               CPDFSDK_Annot* pAnnot,
    160               CFX_RenderDevice* pDevice,
    161               CFX_Matrix* pUser2Device,
    162               FX_DWORD dwFlags) override;
    163   void OnDrawSleep(CPDFSDK_PageView* pPageView,
    164                    CPDFSDK_Annot* pAnnot,
    165                    CFX_RenderDevice* pDevice,
    166                    CFX_Matrix* pUser2Device,
    167                    const CPDF_Rect& rcWindow,
    168                    FX_DWORD dwFlags) override {}
    169   void OnCreate(CPDFSDK_Annot* pAnnot) override;
    170   void OnLoad(CPDFSDK_Annot* pAnnot) override;
    171   void OnDelete(CPDFSDK_Annot* pAnnot) override {}
    172   void OnRelease(CPDFSDK_Annot* pAnnot) override {}
    173   void OnMouseEnter(CPDFSDK_PageView* pPageView,
    174                     CPDFSDK_Annot* pAnnot,
    175                     FX_DWORD nFlag) override;
    176   void OnMouseExit(CPDFSDK_PageView* pPageView,
    177                    CPDFSDK_Annot* pAnnot,
    178                    FX_DWORD nFlag) override;
    179   FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView,
    180                         CPDFSDK_Annot* pAnnot,
    181                         FX_DWORD nFlags,
    182                         const CPDF_Point& point) override;
    183   FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView,
    184                       CPDFSDK_Annot* pAnnot,
    185                       FX_DWORD nFlags,
    186                       const CPDF_Point& point) override;
    187   FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView,
    188                           CPDFSDK_Annot* pAnnot,
    189                           FX_DWORD nFlags,
    190                           const CPDF_Point& point) override;
    191   FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView,
    192                       CPDFSDK_Annot* pAnnot,
    193                       FX_DWORD nFlags,
    194                       const CPDF_Point& point) override;
    195   FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView,
    196                        CPDFSDK_Annot* pAnnot,
    197                        FX_DWORD nFlags,
    198                        short zDelta,
    199                        const CPDF_Point& point) override;
    200   FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView,
    201                         CPDFSDK_Annot* pAnnot,
    202                         FX_DWORD nFlags,
    203                         const CPDF_Point& point) override;
    204   FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView,
    205                       CPDFSDK_Annot* pAnnot,
    206                       FX_DWORD nFlags,
    207                       const CPDF_Point& point) override;
    208   FX_BOOL OnRButtonDblClk(CPDFSDK_PageView* pPageView,
    209                           CPDFSDK_Annot* pAnnot,
    210                           FX_DWORD nFlags,
    211                           const CPDF_Point& point) override {
    212     return FALSE;
    213   }
    214   FX_BOOL OnChar(CPDFSDK_Annot* pAnnot,
    215                  FX_DWORD nChar,
    216                  FX_DWORD nFlags) override;
    217   FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) override;
    218   FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) override;
    219   void OnDeSelected(CPDFSDK_Annot* pAnnot) override {}
    220   void OnSelected(CPDFSDK_Annot* pAnnot) override {}
    221   FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) override;
    222   FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) override;
    223 #ifdef PDF_ENABLE_XFA
    224   FX_BOOL OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot,
    225                             CPDFSDK_Annot* pNewAnnot) override {
    226     return TRUE;
    227   }
    228 #endif  // PDF_ENABLE_XFA
    229 
    230   void SetFormFiller(CFFL_IFormFiller* pFiller) { m_pFormFiller = pFiller; }
    231   CFFL_IFormFiller* GetFormFiller() { return m_pFormFiller; }
    232 
    233  private:
    234   CPDFDoc_Environment* m_pApp;
    235   CFFL_IFormFiller* m_pFormFiller;
    236 };
    237 
    238 #ifdef PDF_ENABLE_XFA
    239 class CPDFSDK_XFAAnnotHandler : public IPDFSDK_AnnotHandler {
    240  public:
    241   explicit CPDFSDK_XFAAnnotHandler(CPDFDoc_Environment* pApp);
    242   ~CPDFSDK_XFAAnnotHandler() {}
    243 
    244  public:
    245   virtual CFX_ByteString GetType() { return FSDK_XFAWIDGET_TYPENAME; }
    246 
    247   virtual CFX_ByteString GetName() { return "XFAWidgetHandler"; }
    248 
    249   virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot);
    250 
    251   virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) {
    252     return NULL;
    253   }
    254 
    255   virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* pAnnot, CPDFSDK_PageView* pPage);
    256 
    257   virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot);
    258 
    259   virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) {}
    260 
    261   virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView* pPageView,
    262                                 CPDFSDK_Annot* pAnnot);
    263 
    264   virtual FX_BOOL HitTest(CPDFSDK_PageView* pPageView,
    265                           CPDFSDK_Annot* pAnnot,
    266                           const CPDF_Point& point);
    267 
    268   virtual void OnDraw(CPDFSDK_PageView* pPageView,
    269                       CPDFSDK_Annot* pAnnot,
    270                       CFX_RenderDevice* pDevice,
    271                       CFX_Matrix* pUser2Device,
    272                       FX_DWORD dwFlags);
    273 
    274   virtual void OnDrawSleep(CPDFSDK_PageView* pPageView,
    275                            CPDFSDK_Annot* pAnnot,
    276                            CFX_RenderDevice* pDevice,
    277                            CFX_Matrix* pUser2Device,
    278                            const CPDF_Rect& rcWindow,
    279                            FX_DWORD dwFlags) {}
    280 
    281   virtual void OnCreate(CPDFSDK_Annot* pAnnot) {}
    282 
    283   virtual void OnLoad(CPDFSDK_Annot* pAnnot) {}
    284 
    285   virtual void OnDelete(CPDFSDK_Annot* pAnnot) {}
    286 
    287   virtual void OnRelease(CPDFSDK_Annot* pAnnot) {}
    288 
    289   virtual void OnMouseEnter(CPDFSDK_PageView* pPageView,
    290                             CPDFSDK_Annot* pAnnot,
    291                             FX_DWORD nFlag);
    292   virtual void OnMouseExit(CPDFSDK_PageView* pPageView,
    293                            CPDFSDK_Annot* pAnnot,
    294                            FX_DWORD nFlag);
    295 
    296   virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView,
    297                                 CPDFSDK_Annot* pAnnot,
    298                                 FX_DWORD nFlags,
    299                                 const CPDF_Point& point);
    300   virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView,
    301                               CPDFSDK_Annot* pAnnot,
    302                               FX_DWORD nFlags,
    303                               const CPDF_Point& point);
    304   virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView,
    305                                   CPDFSDK_Annot* pAnnot,
    306                                   FX_DWORD nFlags,
    307                                   const CPDF_Point& point);
    308   virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView,
    309                               CPDFSDK_Annot* pAnnot,
    310                               FX_DWORD nFlags,
    311                               const CPDF_Point& point);
    312   virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView,
    313                                CPDFSDK_Annot* pAnnot,
    314                                FX_DWORD nFlags,
    315                                short zDelta,
    316                                const CPDF_Point& point);
    317   virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView,
    318                                 CPDFSDK_Annot* pAnnot,
    319                                 FX_DWORD nFlags,
    320                                 const CPDF_Point& point);
    321   virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView,
    322                               CPDFSDK_Annot* pAnnot,
    323                               FX_DWORD nFlags,
    324                               const CPDF_Point& point);
    325   virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView* pPageView,
    326                                   CPDFSDK_Annot* pAnnot,
    327                                   FX_DWORD nFlags,
    328                                   const CPDF_Point& point);
    329   // by wjm.
    330   virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot,
    331                          FX_DWORD nChar,
    332                          FX_DWORD nFlags);
    333   virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
    334   virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
    335 
    336   virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) {}
    337   virtual void OnSelected(CPDFSDK_Annot* pAnnot) {}
    338 
    339   virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
    340   virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
    341   virtual FX_BOOL OnXFAChangedFocus(CPDFSDK_Annot* pOldAnnot,
    342                                     CPDFSDK_Annot* pNewAnnot);
    343 
    344  private:
    345   IXFA_WidgetHandler* GetXFAWidgetHandler(CPDFSDK_Annot* pAnnot);
    346   FX_DWORD GetFWLFlags(FX_DWORD dwFlag);
    347 
    348  private:
    349   CPDFDoc_Environment* m_pApp;
    350 };
    351 #endif  // PDF_ENABLE_XFA
    352 
    353 #define CBA_AnnotHandlerArray CFX_ArrayTemplate<IPDFSDK_AnnotHandler*>
    354 class CPDFSDK_AnnotHandlerMgr {
    355  public:
    356   // Destroy the handler
    357   explicit CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp);
    358   virtual ~CPDFSDK_AnnotHandlerMgr();
    359 
    360  public:
    361   void RegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler);
    362   void UnRegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler);
    363 
    364   virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot,
    365                                   CPDFSDK_PageView* pPageView);
    366 #ifdef PDF_ENABLE_XFA
    367   virtual CPDFSDK_Annot* NewAnnot(IXFA_Widget* pAnnot,
    368                                   CPDFSDK_PageView* pPageView);
    369 #endif  // PDF_ENABLE_XFA
    370   virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot);
    371 
    372   virtual void Annot_OnCreate(CPDFSDK_Annot* pAnnot);
    373   virtual void Annot_OnLoad(CPDFSDK_Annot* pAnnot);
    374 
    375  public:
    376   IPDFSDK_AnnotHandler* GetAnnotHandler(CPDFSDK_Annot* pAnnot) const;
    377   virtual void Annot_OnDraw(CPDFSDK_PageView* pPageView,
    378                             CPDFSDK_Annot* pAnnot,
    379                             CFX_RenderDevice* pDevice,
    380                             CFX_Matrix* pUser2Device,
    381                             FX_DWORD dwFlags);
    382 
    383   virtual void Annot_OnMouseEnter(CPDFSDK_PageView* pPageView,
    384                                   CPDFSDK_Annot* pAnnot,
    385                                   FX_DWORD nFlags);
    386   virtual void Annot_OnMouseExit(CPDFSDK_PageView* pPageView,
    387                                  CPDFSDK_Annot* pAnnot,
    388                                  FX_DWORD nFlags);
    389 
    390   virtual FX_BOOL Annot_OnLButtonDown(CPDFSDK_PageView* pPageView,
    391                                       CPDFSDK_Annot* pAnnot,
    392                                       FX_DWORD nFlags,
    393                                       const CPDF_Point& point);
    394   virtual FX_BOOL Annot_OnLButtonUp(CPDFSDK_PageView* pPageView,
    395                                     CPDFSDK_Annot* pAnnot,
    396                                     FX_DWORD nFlags,
    397                                     const CPDF_Point& point);
    398   virtual FX_BOOL Annot_OnLButtonDblClk(CPDFSDK_PageView* pPageView,
    399                                         CPDFSDK_Annot* pAnnot,
    400                                         FX_DWORD nFlags,
    401                                         const CPDF_Point& point);
    402 
    403   virtual FX_BOOL Annot_OnMouseMove(CPDFSDK_PageView* pPageView,
    404                                     CPDFSDK_Annot* pAnnot,
    405                                     FX_DWORD nFlags,
    406                                     const CPDF_Point& point);
    407   virtual FX_BOOL Annot_OnMouseWheel(CPDFSDK_PageView* pPageView,
    408                                      CPDFSDK_Annot* pAnnot,
    409                                      FX_DWORD nFlags,
    410                                      short zDelta,
    411                                      const CPDF_Point& point);
    412   virtual FX_BOOL Annot_OnRButtonDown(CPDFSDK_PageView* pPageView,
    413                                       CPDFSDK_Annot* pAnnot,
    414                                       FX_DWORD nFlags,
    415                                       const CPDF_Point& point);
    416   virtual FX_BOOL Annot_OnRButtonUp(CPDFSDK_PageView* pPageView,
    417                                     CPDFSDK_Annot* pAnnot,
    418                                     FX_DWORD nFlags,
    419                                     const CPDF_Point& point);
    420 
    421   virtual FX_BOOL Annot_OnChar(CPDFSDK_Annot* pAnnot,
    422                                FX_DWORD nChar,
    423                                FX_DWORD nFlags);
    424   virtual FX_BOOL Annot_OnKeyDown(CPDFSDK_Annot* pAnnot,
    425                                   int nKeyCode,
    426                                   int nFlag);
    427   virtual FX_BOOL Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
    428 
    429   virtual FX_BOOL Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
    430   virtual FX_BOOL Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
    431 
    432 #ifdef PDF_ENABLE_XFA
    433   virtual FX_BOOL Annot_OnChangeFocus(CPDFSDK_Annot* pSetAnnot,
    434                                       CPDFSDK_Annot* pKillAnnot);
    435 #endif  // PDF_ENABLE_XFA
    436 
    437   virtual CPDF_Rect Annot_OnGetViewBBox(CPDFSDK_PageView* pPageView,
    438                                         CPDFSDK_Annot* pAnnot);
    439   virtual FX_BOOL Annot_OnHitTest(CPDFSDK_PageView* pPageView,
    440                                   CPDFSDK_Annot* pAnnot,
    441                                   const CPDF_Point& point);
    442 
    443  private:
    444   IPDFSDK_AnnotHandler* GetAnnotHandler(const CFX_ByteString& sType) const;
    445   CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, FX_BOOL bNext);
    446 
    447  private:
    448   CBA_AnnotHandlerArray m_Handlers;
    449   std::map<CFX_ByteString, IPDFSDK_AnnotHandler*> m_mapType2Handler;
    450   CPDFDoc_Environment* m_pApp;
    451 };
    452 
    453 class CPDFSDK_AnnotIterator {
    454  public:
    455   CPDFSDK_AnnotIterator(CPDFSDK_PageView* pPageView, bool bReverse);
    456   ~CPDFSDK_AnnotIterator();
    457 
    458   CPDFSDK_Annot* Next();
    459 
    460  private:
    461   CPDFSDK_Annot* NextAnnot();
    462   CPDFSDK_Annot* PrevAnnot();
    463 
    464   std::vector<CPDFSDK_Annot*> m_iteratorAnnotList;
    465   const bool m_bReverse;
    466   size_t m_pos;
    467 };
    468 
    469 #endif  // FPDFSDK_INCLUDE_FSDK_ANNOTHANDLER_H_
    470