Home | History | Annotate | Download | only in parser
      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 #include "xfa/src/foxitlib.h"
      8 #include "xfa/src/fxfa/src/common/xfa_utils.h"
      9 #include "xfa/src/fxfa/src/common/xfa_object.h"
     10 #include "xfa/src/fxfa/src/common/xfa_document.h"
     11 #include "xfa/src/fxfa/src/common/xfa_parser.h"
     12 #include "xfa/src/fxfa/src/common/xfa_script.h"
     13 #include "xfa/src/fxfa/src/common/xfa_docdata.h"
     14 #include "xfa/src/fxfa/src/common/xfa_doclayout.h"
     15 #include "xfa/src/fxfa/src/common/xfa_localemgr.h"
     16 #include "xfa/src/fxfa/src/common/xfa_fm2jsapi.h"
     17 #include "xfa_script_eventpseudomodel.h"
     18 CScript_EventPseudoModel::CScript_EventPseudoModel(CXFA_Document* pDocument)
     19     : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_EventPseudoModel) {
     20   m_uScriptHash = XFA_HASHCODE_Event;
     21 }
     22 CScript_EventPseudoModel::~CScript_EventPseudoModel() {}
     23 void Script_EventPseudoModel_StringProperty(FXJSE_HVALUE hValue,
     24                                             CFX_WideString& wsValue,
     25                                             FX_BOOL bSetting) {
     26   if (bSetting) {
     27     CFX_ByteString bsValue;
     28     FXJSE_Value_ToUTF8String(hValue, bsValue);
     29     wsValue = CFX_WideString::FromUTF8(bsValue, bsValue.GetLength());
     30   } else {
     31     FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsValue));
     32   }
     33 }
     34 void Script_EventPseudoModel_InterProperty(FXJSE_HVALUE hValue,
     35                                            int32_t& iValue,
     36                                            FX_BOOL bSetting) {
     37   if (bSetting) {
     38     iValue = FXJSE_Value_ToInteger(hValue);
     39   } else {
     40     FXJSE_Value_SetInteger(hValue, iValue);
     41   }
     42 }
     43 void Script_EventPseudoModel_BooleanProperty(FXJSE_HVALUE hValue,
     44                                              FX_BOOL& bValue,
     45                                              FX_BOOL bSetting) {
     46   if (bSetting) {
     47     bValue = FXJSE_Value_ToBoolean(hValue);
     48   } else {
     49     FXJSE_Value_SetBoolean(hValue, bValue);
     50   }
     51 }
     52 void CScript_EventPseudoModel::Script_EventPseudoModel_Property(
     53     FXJSE_HVALUE hValue,
     54     FX_DWORD dwFlag,
     55     FX_BOOL bSetting) {
     56   IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
     57   if (!pScriptContext) {
     58     return;
     59   }
     60   CXFA_EventParam* pEventParam = pScriptContext->GetEventParam();
     61   if (!pEventParam) {
     62     return;
     63   }
     64   switch (dwFlag) {
     65     case XFA_EVENT_CANCELACTION:
     66       Script_EventPseudoModel_BooleanProperty(
     67           hValue, pEventParam->m_bCancelAction, bSetting);
     68       break;
     69     case XFA_EVENT_CHANGE:
     70       Script_EventPseudoModel_StringProperty(hValue, pEventParam->m_wsChange,
     71                                              bSetting);
     72       break;
     73     case XFA_EVENT_COMMITKEY:
     74       Script_EventPseudoModel_InterProperty(hValue, pEventParam->m_iCommitKey,
     75                                             bSetting);
     76       break;
     77     case XFA_EVENT_FULLTEXT:
     78       Script_EventPseudoModel_StringProperty(hValue, pEventParam->m_wsFullText,
     79                                              bSetting);
     80       break;
     81     case XFA_EVENT_KEYDOWN:
     82       Script_EventPseudoModel_BooleanProperty(hValue, pEventParam->m_bKeyDown,
     83                                               bSetting);
     84       break;
     85     case XFA_EVENT_MODIFIER:
     86       Script_EventPseudoModel_BooleanProperty(hValue, pEventParam->m_bModifier,
     87                                               bSetting);
     88       break;
     89     case XFA_EVENT_NEWCONTENTTYPE:
     90       Script_EventPseudoModel_StringProperty(
     91           hValue, pEventParam->m_wsNewContentType, bSetting);
     92       break;
     93     case XFA_EVENT_NEWTEXT:
     94       Script_EventPseudoModel_StringProperty(hValue, pEventParam->m_wsNewText,
     95                                              bSetting);
     96       break;
     97     case XFA_EVENT_PREVCONTENTTYPE:
     98       Script_EventPseudoModel_StringProperty(
     99           hValue, pEventParam->m_wsPrevContentType, bSetting);
    100       break;
    101     case XFA_EVENT_PREVTEXT:
    102       Script_EventPseudoModel_StringProperty(hValue, pEventParam->m_wsPrevText,
    103                                              bSetting);
    104       break;
    105     case XFA_EVENT_REENTER:
    106       Script_EventPseudoModel_BooleanProperty(hValue, pEventParam->m_bReenter,
    107                                               bSetting);
    108       break;
    109     case XFA_EVENT_SELEND:
    110       Script_EventPseudoModel_InterProperty(hValue, pEventParam->m_iSelEnd,
    111                                             bSetting);
    112       break;
    113     case XFA_EVENT_SELSTART:
    114       Script_EventPseudoModel_InterProperty(hValue, pEventParam->m_iSelStart,
    115                                             bSetting);
    116       break;
    117     case XFA_EVENT_SHIFT:
    118       Script_EventPseudoModel_BooleanProperty(hValue, pEventParam->m_bShift,
    119                                               bSetting);
    120       break;
    121     case XFA_EVENT_SOAPFAULTCODE:
    122       Script_EventPseudoModel_StringProperty(
    123           hValue, pEventParam->m_wsSoapFaultCode, bSetting);
    124       break;
    125     case XFA_EVENT_SOAPFAULTSTRING:
    126       Script_EventPseudoModel_StringProperty(
    127           hValue, pEventParam->m_wsSoapFaultString, bSetting);
    128       break;
    129     case XFA_EVENT_TARGET:
    130       break;
    131     default:
    132       break;
    133   }
    134 }
    135 void CScript_EventPseudoModel::Script_EventPseudoModel_CancelAction(
    136     FXJSE_HVALUE hValue,
    137     FX_BOOL bSetting,
    138     XFA_ATTRIBUTE eAttribute) {
    139   Script_EventPseudoModel_Property(hValue, XFA_EVENT_CANCELACTION, bSetting);
    140 }
    141 void CScript_EventPseudoModel::Script_EventPseudoModel_Change(
    142     FXJSE_HVALUE hValue,
    143     FX_BOOL bSetting,
    144     XFA_ATTRIBUTE eAttribute) {
    145   Script_EventPseudoModel_Property(hValue, XFA_EVENT_CHANGE, bSetting);
    146 }
    147 void CScript_EventPseudoModel::Script_EventPseudoModel_CommitKey(
    148     FXJSE_HVALUE hValue,
    149     FX_BOOL bSetting,
    150     XFA_ATTRIBUTE eAttribute) {
    151   Script_EventPseudoModel_Property(hValue, XFA_EVENT_COMMITKEY, bSetting);
    152 }
    153 void CScript_EventPseudoModel::Script_EventPseudoModel_FullText(
    154     FXJSE_HVALUE hValue,
    155     FX_BOOL bSetting,
    156     XFA_ATTRIBUTE eAttribute) {
    157   Script_EventPseudoModel_Property(hValue, XFA_EVENT_FULLTEXT, bSetting);
    158 }
    159 void CScript_EventPseudoModel::Script_EventPseudoModel_KeyDown(
    160     FXJSE_HVALUE hValue,
    161     FX_BOOL bSetting,
    162     XFA_ATTRIBUTE eAttribute) {
    163   Script_EventPseudoModel_Property(hValue, XFA_EVENT_KEYDOWN, bSetting);
    164 }
    165 void CScript_EventPseudoModel::Script_EventPseudoModel_Modifier(
    166     FXJSE_HVALUE hValue,
    167     FX_BOOL bSetting,
    168     XFA_ATTRIBUTE eAttribute) {
    169   Script_EventPseudoModel_Property(hValue, XFA_EVENT_MODIFIER, bSetting);
    170 }
    171 void CScript_EventPseudoModel::Script_EventPseudoModel_NewContentType(
    172     FXJSE_HVALUE hValue,
    173     FX_BOOL bSetting,
    174     XFA_ATTRIBUTE eAttribute) {
    175   Script_EventPseudoModel_Property(hValue, XFA_EVENT_NEWCONTENTTYPE, bSetting);
    176 }
    177 void CScript_EventPseudoModel::Script_EventPseudoModel_NewText(
    178     FXJSE_HVALUE hValue,
    179     FX_BOOL bSetting,
    180     XFA_ATTRIBUTE eAttribute) {
    181   Script_EventPseudoModel_Property(hValue, XFA_EVENT_NEWTEXT, bSetting);
    182 }
    183 void CScript_EventPseudoModel::Script_EventPseudoModel_PrevContentType(
    184     FXJSE_HVALUE hValue,
    185     FX_BOOL bSetting,
    186     XFA_ATTRIBUTE eAttribute) {
    187   Script_EventPseudoModel_Property(hValue, XFA_EVENT_PREVCONTENTTYPE, bSetting);
    188 }
    189 void CScript_EventPseudoModel::Script_EventPseudoModel_PrevText(
    190     FXJSE_HVALUE hValue,
    191     FX_BOOL bSetting,
    192     XFA_ATTRIBUTE eAttribute) {
    193   Script_EventPseudoModel_Property(hValue, XFA_EVENT_PREVTEXT, bSetting);
    194 }
    195 void CScript_EventPseudoModel::Script_EventPseudoModel_Reenter(
    196     FXJSE_HVALUE hValue,
    197     FX_BOOL bSetting,
    198     XFA_ATTRIBUTE eAttribute) {
    199   Script_EventPseudoModel_Property(hValue, XFA_EVENT_REENTER, bSetting);
    200 }
    201 void CScript_EventPseudoModel::Script_EventPseudoModel_SelEnd(
    202     FXJSE_HVALUE hValue,
    203     FX_BOOL bSetting,
    204     XFA_ATTRIBUTE eAttribute) {
    205   Script_EventPseudoModel_Property(hValue, XFA_EVENT_SELEND, bSetting);
    206 }
    207 void CScript_EventPseudoModel::Script_EventPseudoModel_SelStart(
    208     FXJSE_HVALUE hValue,
    209     FX_BOOL bSetting,
    210     XFA_ATTRIBUTE eAttribute) {
    211   Script_EventPseudoModel_Property(hValue, XFA_EVENT_SELSTART, bSetting);
    212 }
    213 void CScript_EventPseudoModel::Script_EventPseudoModel_Shift(
    214     FXJSE_HVALUE hValue,
    215     FX_BOOL bSetting,
    216     XFA_ATTRIBUTE eAttribute) {
    217   Script_EventPseudoModel_Property(hValue, XFA_EVENT_SHIFT, bSetting);
    218 }
    219 void CScript_EventPseudoModel::Script_EventPseudoModel_SoapFaultCode(
    220     FXJSE_HVALUE hValue,
    221     FX_BOOL bSetting,
    222     XFA_ATTRIBUTE eAttribute) {
    223   Script_EventPseudoModel_Property(hValue, XFA_EVENT_SOAPFAULTCODE, bSetting);
    224 }
    225 void CScript_EventPseudoModel::Script_EventPseudoModel_SoapFaultString(
    226     FXJSE_HVALUE hValue,
    227     FX_BOOL bSetting,
    228     XFA_ATTRIBUTE eAttribute) {
    229   Script_EventPseudoModel_Property(hValue, XFA_EVENT_SOAPFAULTSTRING, bSetting);
    230 }
    231 void CScript_EventPseudoModel::Script_EventPseudoModel_Target(
    232     FXJSE_HVALUE hValue,
    233     FX_BOOL bSetting,
    234     XFA_ATTRIBUTE eAttribute) {
    235   Script_EventPseudoModel_Property(hValue, XFA_EVENT_TARGET, bSetting);
    236 }
    237 void CScript_EventPseudoModel::Script_EventPseudoModel_Emit(
    238     CFXJSE_Arguments* pArguments) {
    239   IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
    240   if (!pScriptContext) {
    241     return;
    242   }
    243   CXFA_EventParam* pEventParam = pScriptContext->GetEventParam();
    244   if (!pEventParam) {
    245     return;
    246   }
    247   IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();
    248   if (!pNotify) {
    249     return;
    250   }
    251   IXFA_WidgetHandler* pWidgetHandler = pNotify->GetWidgetHandler();
    252   if (!pWidgetHandler) {
    253     return;
    254   }
    255   pWidgetHandler->ProcessEvent(pEventParam->m_pTarget, pEventParam);
    256 }
    257 void CScript_EventPseudoModel::Script_EventPseudoModel_Reset(
    258     CFXJSE_Arguments* pArguments) {
    259   IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
    260   if (!pScriptContext) {
    261     return;
    262   }
    263   CXFA_EventParam* pEventParam = pScriptContext->GetEventParam();
    264   if (!pEventParam) {
    265     return;
    266   }
    267   pEventParam->Reset();
    268 }
    269