// 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 #include "../../include/javascript/JavaScript.h" #include "../../include/javascript/IJavaScript.h" #include "../../include/javascript/JS_Define.h" #include "../../include/javascript/JS_Object.h" #include "../../include/javascript/JS_Value.h" #include "../../include/javascript/JS_EventHandler.h" //#include "../include/JS_ResMgr.h" #include "../../include/javascript/JS_Context.h" #include "../../include/javascript/event.h" #include "../../include/javascript/Field.h" /* -------------------------- event -------------------------- */ BEGIN_JS_STATIC_CONST(CJS_Event) END_JS_STATIC_CONST() BEGIN_JS_STATIC_PROP(CJS_Event) JS_STATIC_PROP_ENTRY(change) JS_STATIC_PROP_ENTRY(changeEx) JS_STATIC_PROP_ENTRY(commitKey) JS_STATIC_PROP_ENTRY(fieldFull) JS_STATIC_PROP_ENTRY(keyDown) JS_STATIC_PROP_ENTRY(modifier) JS_STATIC_PROP_ENTRY(name) JS_STATIC_PROP_ENTRY(rc) JS_STATIC_PROP_ENTRY(richChange) JS_STATIC_PROP_ENTRY(richChangeEx) JS_STATIC_PROP_ENTRY(richValue) JS_STATIC_PROP_ENTRY(selEnd) JS_STATIC_PROP_ENTRY(selStart) JS_STATIC_PROP_ENTRY(shift) JS_STATIC_PROP_ENTRY(source) JS_STATIC_PROP_ENTRY(target) JS_STATIC_PROP_ENTRY(targetName) JS_STATIC_PROP_ENTRY(type) JS_STATIC_PROP_ENTRY(value) JS_STATIC_PROP_ENTRY(willCommit) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_Event) END_JS_STATIC_METHOD() IMPLEMENT_JS_CLASS(CJS_Event, event) event::event(CJS_Object* pJsObject) : CJS_EmbedObj(pJsObject) {} event::~event() { } FX_BOOL event::change(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); CFX_WideString& wChange = pEvent->Change(); if (vp.IsSetting()) { if (vp.GetType() == CJS_Value::VT_string) vp >> wChange; } else { vp << wChange; } return TRUE; } FX_BOOL event::changeEx(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); vp << pEvent->ChangeEx(); return TRUE; } FX_BOOL event::commitKey(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); vp << pEvent->CommitKey(); return TRUE; } FX_BOOL event::fieldFull(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); if (!vp.IsGetting() && wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) return FALSE; if (pEvent->FieldFull()) vp << TRUE; else vp << FALSE; return TRUE; } FX_BOOL event::keyDown(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); if (pEvent->KeyDown()) vp << TRUE; else vp << FALSE; return TRUE; } FX_BOOL event::modifier(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); if (pEvent->Modifier()) vp << TRUE; else vp << FALSE; return TRUE; } FX_BOOL event::name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); vp << pEvent->Name(); return TRUE; } FX_BOOL event::rc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); FX_BOOL& bRc = pEvent->Rc(); if (vp.IsSetting()) { vp >> bRc; } else { vp << bRc; } return TRUE; } FX_BOOL event::richChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { return TRUE; if (vp.IsSetting()) { } else { ; } return TRUE; } FX_BOOL event::richChangeEx(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { return TRUE; if (vp.IsSetting()) { } else { ; } return TRUE; } FX_BOOL event::richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { return TRUE; if (vp.IsSetting()) { } else { ; } return TRUE; } FX_BOOL event::selEnd(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) { return TRUE; } int& iSelEnd = pEvent->SelEnd(); if (vp.IsSetting()) { vp >> iSelEnd; } else { vp << iSelEnd; } return TRUE; } FX_BOOL event::selStart(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) { return TRUE; } int& iSelStart = pEvent->SelStart(); if (vp.IsSetting()) { vp >> iSelStart; } else { vp << iSelStart; } return TRUE; } FX_BOOL event::shift(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); if (pEvent->Shift()) vp << TRUE; else vp << FALSE; return TRUE; } FX_BOOL event::source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); vp << pEvent->Source()->GetJSObject(); return TRUE; } FX_BOOL event::target(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); vp << pEvent->Target_Field()->GetJSObject(); return TRUE; } FX_BOOL event::targetName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); vp << pEvent->TargetName(); return TRUE; } FX_BOOL event::type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); vp << pEvent->Type(); return TRUE; } FX_BOOL event::value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); if (wcscmp((const wchar_t*)pEvent->Type(), L"Field") != 0) return FALSE; if (!pEvent->m_pValue) return FALSE; CFX_WideString& val = pEvent->Value(); if (vp.IsSetting()) { vp >> val; } else { vp << val; } return TRUE; } FX_BOOL event::willCommit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { if (!vp.IsGetting()) return FALSE; CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_EventHandler* pEvent = pContext->GetEventHandler(); ASSERT(pEvent != NULL); if (pEvent->WillCommit()) vp << TRUE; else vp << FALSE; return TRUE; }