| // 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 "fpdfsdk/javascript/event.h" |
| |
| #include "fpdfsdk/javascript/Field.h" |
| #include "fpdfsdk/javascript/JS_Define.h" |
| #include "fpdfsdk/javascript/JS_EventHandler.h" |
| #include "fpdfsdk/javascript/JS_Object.h" |
| #include "fpdfsdk/javascript/JS_Value.h" |
| #include "fpdfsdk/javascript/cjs_event_context.h" |
| |
| JSConstSpec CJS_Event::ConstSpecs[] = {{0, JSConstSpec::Number, 0, 0}}; |
| |
| JSPropertySpec CJS_Event::PropertySpecs[] = { |
| {"change", get_change_static, set_change_static}, |
| {"changeEx", get_change_ex_static, set_change_ex_static}, |
| {"commitKey", get_commit_key_static, set_commit_key_static}, |
| {"fieldFull", get_field_full_static, set_field_full_static}, |
| {"keyDown", get_key_down_static, set_key_down_static}, |
| {"modifier", get_modifier_static, set_modifier_static}, |
| {"name", get_name_static, set_name_static}, |
| {"rc", get_rc_static, set_rc_static}, |
| {"richChange", get_rich_change_static, set_rich_change_static}, |
| {"richChangeEx", get_rich_change_ex_static, set_rich_change_ex_static}, |
| {"richValue", get_rich_value_static, set_rich_value_static}, |
| {"selEnd", get_sel_end_static, set_sel_end_static}, |
| {"selStart", get_sel_start_static, set_sel_start_static}, |
| {"shift", get_shift_static, set_shift_static}, |
| {"source", get_source_static, set_source_static}, |
| {"target", get_target_static, set_target_static}, |
| {"targetName", get_target_name_static, set_target_name_static}, |
| {"type", get_type_static, set_type_static}, |
| {"value", get_value_static, set_value_static}, |
| {"willCommit", get_will_commit_static, set_will_commit_static}, |
| {0, 0, 0}}; |
| |
| JSMethodSpec CJS_Event::MethodSpecs[] = {{0, 0}}; |
| |
| IMPLEMENT_JS_CLASS(CJS_Event, event) |
| |
| event::event(CJS_Object* pJsObject) : CJS_EmbedObj(pJsObject) {} |
| |
| event::~event() {} |
| |
| bool event::get_change(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->Change()); |
| return true; |
| } |
| |
| bool event::set_change(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| |
| if (vp.GetJSValue()->GetType() == CJS_Value::VT_string) { |
| WideString& wChange = pEvent->Change(); |
| wChange = vp.ToWideString(); |
| } |
| return true; |
| } |
| |
| bool event::get_change_ex(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| |
| vp->Set(pEvent->ChangeEx()); |
| return true; |
| } |
| |
| bool event::set_change_ex(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_commit_key(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| |
| vp->Set(pEvent->CommitKey()); |
| return true; |
| } |
| |
| bool event::set_commit_key(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_field_full(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| |
| if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) |
| return false; |
| |
| vp->Set(pEvent->FieldFull()); |
| return true; |
| } |
| |
| bool event::set_field_full(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_key_down(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->KeyDown()); |
| return true; |
| } |
| |
| bool event::set_key_down(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_modifier(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->Modifier()); |
| return true; |
| } |
| |
| bool event::set_modifier(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_name(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->Name()); |
| return true; |
| } |
| |
| bool event::set_name(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_rc(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->Rc()); |
| return true; |
| } |
| |
| bool event::set_rc(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| pEvent->Rc() = vp.ToBool(); |
| return true; |
| } |
| |
| bool event::get_rich_change(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| return true; |
| } |
| |
| bool event::set_rich_change(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return true; |
| } |
| |
| bool event::get_rich_change_ex(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| return true; |
| } |
| |
| bool event::set_rich_change_ex(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return true; |
| } |
| |
| bool event::get_rich_value(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| return true; |
| } |
| |
| bool event::set_rich_value(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return true; |
| } |
| |
| bool event::get_sel_end(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| |
| if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) |
| return true; |
| |
| vp->Set(pEvent->SelEnd()); |
| return true; |
| } |
| |
| bool event::set_sel_end(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| |
| if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) |
| return true; |
| |
| pEvent->SelEnd() = vp.ToInt(); |
| return true; |
| } |
| |
| bool event::get_sel_start(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| |
| if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) |
| return true; |
| |
| vp->Set(pEvent->SelStart()); |
| return true; |
| } |
| |
| bool event::set_sel_start(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| |
| if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) |
| return true; |
| |
| pEvent->SelStart() = vp.ToInt(); |
| return true; |
| } |
| |
| bool event::get_shift(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->Shift()); |
| return true; |
| } |
| |
| bool event::set_shift(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_source(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->Source()->GetJSObject()); |
| return true; |
| } |
| |
| bool event::set_source(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_target(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->Target_Field()->GetJSObject()); |
| return true; |
| } |
| |
| bool event::set_target(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_target_name(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->TargetName()); |
| return true; |
| } |
| |
| bool event::set_target_name(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_type(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->Type()); |
| return true; |
| } |
| |
| bool event::set_type(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |
| |
| bool event::get_value(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| |
| if (wcscmp((const wchar_t*)pEvent->Type(), L"Field") != 0) |
| return false; |
| |
| if (!pEvent->m_pValue) |
| return false; |
| |
| vp->Set(pEvent->Value()); |
| return true; |
| } |
| |
| bool event::set_value(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| |
| if (wcscmp((const wchar_t*)pEvent->Type(), L"Field") != 0) |
| return false; |
| |
| if (!pEvent->m_pValue) |
| return false; |
| |
| pEvent->Value() = vp.ToWideString(); |
| return true; |
| } |
| |
| bool event::get_will_commit(CJS_Runtime* pRuntime, |
| CJS_PropValue* vp, |
| WideString* sError) { |
| CJS_EventHandler* pEvent = |
| pRuntime->GetCurrentEventContext()->GetEventHandler(); |
| vp->Set(pEvent->WillCommit()); |
| return true; |
| } |
| |
| bool event::set_will_commit(CJS_Runtime* pRuntime, |
| const CJS_PropValue& vp, |
| WideString* sError) { |
| return false; |
| } |