Home | History | Annotate | Download | only in javascript
      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_JAVASCRIPT_JS_EVENTHANDLER_H_
      8 #define FPDFSDK_JAVASCRIPT_JS_EVENTHANDLER_H_
      9 
     10 #include "core/fxcrt/fx_string.h"
     11 #include "core/fxcrt/fx_system.h"
     12 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
     13 
     14 class CJS_EventContext;
     15 class CPDFSDK_Annot;
     16 class CPDF_Bookmark;
     17 class CPDF_FormField;
     18 class Field;
     19 
     20 enum JS_EVENT_T {
     21   JET_UNKNOWN,
     22   JET_APP_INIT,
     23   JET_DOC_OPEN,
     24   JET_DOC_WILLPRINT,
     25   JET_DOC_DIDPRINT,
     26   JET_DOC_WILLSAVE,
     27   JET_DOC_DIDSAVE,
     28   JET_DOC_WILLCLOSE,
     29   JET_PAGE_OPEN,
     30   JET_PAGE_CLOSE,
     31   JET_PAGE_INVIEW,
     32   JET_PAGE_OUTVIEW,
     33   JET_FIELD_MOUSEDOWN,
     34   JET_FIELD_MOUSEUP,
     35   JET_FIELD_MOUSEENTER,
     36   JET_FIELD_MOUSEEXIT,
     37   JET_FIELD_FOCUS,
     38   JET_FIELD_BLUR,
     39   JET_FIELD_KEYSTROKE,
     40   JET_FIELD_VALIDATE,
     41   JET_FIELD_CALCULATE,
     42   JET_FIELD_FORMAT,
     43   JET_SCREEN_FOCUS,
     44   JET_SCREEN_BLUR,
     45   JET_SCREEN_OPEN,
     46   JET_SCREEN_CLOSE,
     47   JET_SCREEN_MOUSEDOWN,
     48   JET_SCREEN_MOUSEUP,
     49   JET_SCREEN_MOUSEENTER,
     50   JET_SCREEN_MOUSEEXIT,
     51   JET_SCREEN_INVIEW,
     52   JET_SCREEN_OUTVIEW,
     53   JET_BATCH_EXEC,
     54   JET_MENU_EXEC,
     55   JET_CONSOLE_EXEC,
     56   JET_EXTERNAL_EXEC,
     57   JET_BOOKMARK_MOUSEUP,
     58   JET_LINK_MOUSEUP
     59 };
     60 
     61 class CJS_EventHandler {
     62  public:
     63   explicit CJS_EventHandler(CJS_EventContext* pContext);
     64   virtual ~CJS_EventHandler();
     65 
     66   void OnApp_Init();
     67 
     68   void OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv,
     69                   const CFX_WideString& strTargetName);
     70   void OnDoc_WillPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv);
     71   void OnDoc_DidPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv);
     72   void OnDoc_WillSave(CPDFSDK_FormFillEnvironment* pFormFillEnv);
     73   void OnDoc_DidSave(CPDFSDK_FormFillEnvironment* pFormFillEnv);
     74   void OnDoc_WillClose(CPDFSDK_FormFillEnvironment* pFormFillEnv);
     75 
     76   void OnPage_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv);
     77   void OnPage_Close(CPDFSDK_FormFillEnvironment* pFormFillEnv);
     78   void OnPage_InView(CPDFSDK_FormFillEnvironment* pFormFillEnv);
     79   void OnPage_OutView(CPDFSDK_FormFillEnvironment* pFormFillEnv);
     80 
     81   void OnField_Calculate(CPDF_FormField* pSource,
     82                          CPDF_FormField* pTarget,
     83                          CFX_WideString& Value,
     84                          bool& bRc);
     85   void OnField_Format(CPDF_FormField* pTarget,
     86                       CFX_WideString& Value,
     87                       bool bWillCommit);
     88   void OnField_Keystroke(CFX_WideString& strChange,
     89                          const CFX_WideString& strChangeEx,
     90                          bool KeyDown,
     91                          bool bModifier,
     92                          int& nSelEnd,
     93                          int& nSelStart,
     94                          bool bShift,
     95                          CPDF_FormField* pTarget,
     96                          CFX_WideString& Value,
     97                          bool bWillCommit,
     98                          bool bFieldFull,
     99                          bool& bRc);
    100   void OnField_Validate(CFX_WideString& strChange,
    101                         const CFX_WideString& strChangeEx,
    102                         bool bKeyDown,
    103                         bool bModifier,
    104                         bool bShift,
    105                         CPDF_FormField* pTarget,
    106                         CFX_WideString& Value,
    107                         bool& bRc);
    108 
    109   void OnField_MouseDown(bool bModifier, bool bShift, CPDF_FormField* pTarget);
    110   void OnField_MouseEnter(bool bModifier, bool bShift, CPDF_FormField* pTarget);
    111   void OnField_MouseExit(bool bModifier, bool bShift, CPDF_FormField* pTarget);
    112   void OnField_MouseUp(bool bModifier, bool bShift, CPDF_FormField* pTarget);
    113   void OnField_Blur(bool bModifier,
    114                     bool bShift,
    115                     CPDF_FormField* pTarget,
    116                     const CFX_WideString& Value);
    117   void OnField_Focus(bool bModifier,
    118                      bool bShift,
    119                      CPDF_FormField* pTarget,
    120                      const CFX_WideString& Value);
    121 
    122   void OnScreen_Focus(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
    123   void OnScreen_Blur(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
    124   void OnScreen_Open(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
    125   void OnScreen_Close(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
    126   void OnScreen_MouseDown(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
    127   void OnScreen_MouseUp(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
    128   void OnScreen_MouseEnter(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
    129   void OnScreen_MouseExit(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
    130   void OnScreen_InView(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
    131   void OnScreen_OutView(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
    132 
    133   void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
    134   void OnLink_MouseUp(CPDFSDK_FormFillEnvironment* pFormFillEnv);
    135 
    136   void OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv,
    137                    const CFX_WideString& strTargetName);
    138   void OnBatchExec(CPDFSDK_FormFillEnvironment* pFormFillEnv);
    139   void OnConsole_Exec();
    140   void OnExternal_Exec();
    141 
    142  public:
    143   void Initial(JS_EVENT_T type);
    144   void Destroy();
    145   bool IsValid();
    146 
    147   CFX_WideString& Change();
    148   CFX_WideString ChangeEx();
    149   int CommitKey();
    150   bool FieldFull();
    151   bool KeyDown();
    152   bool Modifier();
    153   const FX_WCHAR* Name();
    154   const FX_WCHAR* Type();
    155   bool& Rc();
    156   int& SelEnd();
    157   int& SelStart();
    158   bool Shift();
    159   Field* Source();
    160   Field* Target_Field();
    161   CFX_WideString& Value();
    162   bool WillCommit();
    163   CFX_WideString TargetName();
    164 
    165   JS_EVENT_T EventType() { return m_eEventType; }
    166 
    167  public:
    168   CJS_EventContext* const m_pJSEventContext;  // Not Owned.
    169   JS_EVENT_T m_eEventType;
    170   bool m_bValid;
    171 
    172   CFX_WideString m_strTargetName;
    173   CFX_WideString m_strSourceName;
    174   CFX_WideString* m_pWideStrChange;
    175   CFX_WideString m_WideStrChangeDu;
    176   CFX_WideString m_WideStrChangeEx;
    177   int m_nCommitKey;
    178   bool m_bKeyDown;
    179   bool m_bModifier;
    180   bool m_bShift;
    181   int* m_pISelEnd;
    182   int m_nSelEndDu;
    183   int* m_pISelStart;
    184   int m_nSelStartDu;
    185   bool m_bWillCommit;
    186   CFX_WideString* m_pValue;
    187   bool m_bFieldFull;
    188   bool* m_pbRc;
    189   bool m_bRcDu;
    190 
    191   CPDF_Bookmark* m_pTargetBookMark;
    192   CPDFSDK_FormFillEnvironment::ObservedPtr m_pTargetFormFillEnv;
    193   CPDFSDK_Annot::ObservedPtr m_pTargetAnnot;
    194 };
    195 
    196 #endif  // FPDFSDK_JAVASCRIPT_JS_EVENTHANDLER_H_
    197