| OLD | NEW |
| (Empty) |
| 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 "fpdfsdk/src/javascript/event.h" | |
| 8 | |
| 9 #include "fpdfsdk/include/javascript/IJavaScript.h" | |
| 10 #include "fpdfsdk/src/javascript/Field.h" | |
| 11 #include "fpdfsdk/src/javascript/JS_Context.h" | |
| 12 #include "fpdfsdk/src/javascript/JS_Define.h" | |
| 13 #include "fpdfsdk/src/javascript/JS_EventHandler.h" | |
| 14 #include "fpdfsdk/src/javascript/JS_Object.h" | |
| 15 #include "fpdfsdk/src/javascript/JS_Value.h" | |
| 16 | |
| 17 /* -------------------------- event -------------------------- */ | |
| 18 | |
| 19 BEGIN_JS_STATIC_CONST(CJS_Event) | |
| 20 END_JS_STATIC_CONST() | |
| 21 | |
| 22 BEGIN_JS_STATIC_PROP(CJS_Event) | |
| 23 JS_STATIC_PROP_ENTRY(change) | |
| 24 JS_STATIC_PROP_ENTRY(changeEx) | |
| 25 JS_STATIC_PROP_ENTRY(commitKey) | |
| 26 JS_STATIC_PROP_ENTRY(fieldFull) | |
| 27 JS_STATIC_PROP_ENTRY(keyDown) | |
| 28 JS_STATIC_PROP_ENTRY(modifier) | |
| 29 JS_STATIC_PROP_ENTRY(name) | |
| 30 JS_STATIC_PROP_ENTRY(rc) | |
| 31 JS_STATIC_PROP_ENTRY(richChange) | |
| 32 JS_STATIC_PROP_ENTRY(richChangeEx) | |
| 33 JS_STATIC_PROP_ENTRY(richValue) | |
| 34 JS_STATIC_PROP_ENTRY(selEnd) | |
| 35 JS_STATIC_PROP_ENTRY(selStart) | |
| 36 JS_STATIC_PROP_ENTRY(shift) | |
| 37 JS_STATIC_PROP_ENTRY(source) | |
| 38 JS_STATIC_PROP_ENTRY(target) | |
| 39 JS_STATIC_PROP_ENTRY(targetName) | |
| 40 JS_STATIC_PROP_ENTRY(type) | |
| 41 JS_STATIC_PROP_ENTRY(value) | |
| 42 JS_STATIC_PROP_ENTRY(willCommit) | |
| 43 END_JS_STATIC_PROP() | |
| 44 | |
| 45 BEGIN_JS_STATIC_METHOD(CJS_Event) | |
| 46 END_JS_STATIC_METHOD() | |
| 47 | |
| 48 IMPLEMENT_JS_CLASS(CJS_Event, event) | |
| 49 | |
| 50 event::event(CJS_Object* pJsObject) : CJS_EmbedObj(pJsObject) {} | |
| 51 | |
| 52 event::~event() { | |
| 53 } | |
| 54 | |
| 55 FX_BOOL event::change(IJS_Context* cc, | |
| 56 CJS_PropValue& vp, | |
| 57 CFX_WideString& sError) { | |
| 58 CJS_Context* pContext = (CJS_Context*)cc; | |
| 59 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 60 CFX_WideString& wChange = pEvent->Change(); | |
| 61 if (vp.IsSetting()) { | |
| 62 if (vp.GetType() == CJS_Value::VT_string) | |
| 63 vp >> wChange; | |
| 64 } else { | |
| 65 vp << wChange; | |
| 66 } | |
| 67 return TRUE; | |
| 68 } | |
| 69 | |
| 70 FX_BOOL event::changeEx(IJS_Context* cc, | |
| 71 CJS_PropValue& vp, | |
| 72 CFX_WideString& sError) { | |
| 73 if (!vp.IsGetting()) | |
| 74 return FALSE; | |
| 75 | |
| 76 CJS_Context* pContext = (CJS_Context*)cc; | |
| 77 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 78 | |
| 79 vp << pEvent->ChangeEx(); | |
| 80 return TRUE; | |
| 81 } | |
| 82 | |
| 83 FX_BOOL event::commitKey(IJS_Context* cc, | |
| 84 CJS_PropValue& vp, | |
| 85 CFX_WideString& sError) { | |
| 86 if (!vp.IsGetting()) | |
| 87 return FALSE; | |
| 88 | |
| 89 CJS_Context* pContext = (CJS_Context*)cc; | |
| 90 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 91 | |
| 92 vp << pEvent->CommitKey(); | |
| 93 return TRUE; | |
| 94 } | |
| 95 | |
| 96 FX_BOOL event::fieldFull(IJS_Context* cc, | |
| 97 CJS_PropValue& vp, | |
| 98 CFX_WideString& sError) { | |
| 99 CJS_Context* pContext = (CJS_Context*)cc; | |
| 100 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 101 | |
| 102 if (!vp.IsGetting() && | |
| 103 wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) | |
| 104 return FALSE; | |
| 105 | |
| 106 if (pEvent->FieldFull()) | |
| 107 vp << TRUE; | |
| 108 else | |
| 109 vp << FALSE; | |
| 110 return TRUE; | |
| 111 } | |
| 112 | |
| 113 FX_BOOL event::keyDown(IJS_Context* cc, | |
| 114 CJS_PropValue& vp, | |
| 115 CFX_WideString& sError) { | |
| 116 if (!vp.IsGetting()) | |
| 117 return FALSE; | |
| 118 | |
| 119 CJS_Context* pContext = (CJS_Context*)cc; | |
| 120 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 121 | |
| 122 if (pEvent->KeyDown()) | |
| 123 vp << TRUE; | |
| 124 else | |
| 125 vp << FALSE; | |
| 126 return TRUE; | |
| 127 } | |
| 128 | |
| 129 FX_BOOL event::modifier(IJS_Context* cc, | |
| 130 CJS_PropValue& vp, | |
| 131 CFX_WideString& sError) { | |
| 132 if (!vp.IsGetting()) | |
| 133 return FALSE; | |
| 134 | |
| 135 CJS_Context* pContext = (CJS_Context*)cc; | |
| 136 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 137 | |
| 138 if (pEvent->Modifier()) | |
| 139 vp << TRUE; | |
| 140 else | |
| 141 vp << FALSE; | |
| 142 return TRUE; | |
| 143 } | |
| 144 | |
| 145 FX_BOOL event::name(IJS_Context* cc, | |
| 146 CJS_PropValue& vp, | |
| 147 CFX_WideString& sError) { | |
| 148 if (!vp.IsGetting()) | |
| 149 return FALSE; | |
| 150 | |
| 151 CJS_Context* pContext = (CJS_Context*)cc; | |
| 152 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 153 | |
| 154 vp << pEvent->Name(); | |
| 155 return TRUE; | |
| 156 } | |
| 157 | |
| 158 FX_BOOL event::rc(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) { | |
| 159 CJS_Context* pContext = (CJS_Context*)cc; | |
| 160 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 161 | |
| 162 FX_BOOL& bRc = pEvent->Rc(); | |
| 163 if (vp.IsSetting()) { | |
| 164 vp >> bRc; | |
| 165 } else { | |
| 166 vp << bRc; | |
| 167 } | |
| 168 return TRUE; | |
| 169 } | |
| 170 | |
| 171 FX_BOOL event::richChange(IJS_Context* cc, | |
| 172 CJS_PropValue& vp, | |
| 173 CFX_WideString& sError) { | |
| 174 return TRUE; | |
| 175 } | |
| 176 | |
| 177 FX_BOOL event::richChangeEx(IJS_Context* cc, | |
| 178 CJS_PropValue& vp, | |
| 179 CFX_WideString& sError) { | |
| 180 return TRUE; | |
| 181 } | |
| 182 | |
| 183 FX_BOOL event::richValue(IJS_Context* cc, | |
| 184 CJS_PropValue& vp, | |
| 185 CFX_WideString& sError) { | |
| 186 return TRUE; | |
| 187 } | |
| 188 | |
| 189 FX_BOOL event::selEnd(IJS_Context* cc, | |
| 190 CJS_PropValue& vp, | |
| 191 CFX_WideString& sError) { | |
| 192 CJS_Context* pContext = (CJS_Context*)cc; | |
| 193 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 194 | |
| 195 if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) { | |
| 196 return TRUE; | |
| 197 } | |
| 198 | |
| 199 int& iSelEnd = pEvent->SelEnd(); | |
| 200 if (vp.IsSetting()) { | |
| 201 vp >> iSelEnd; | |
| 202 } else { | |
| 203 vp << iSelEnd; | |
| 204 } | |
| 205 return TRUE; | |
| 206 } | |
| 207 | |
| 208 FX_BOOL event::selStart(IJS_Context* cc, | |
| 209 CJS_PropValue& vp, | |
| 210 CFX_WideString& sError) { | |
| 211 CJS_Context* pContext = (CJS_Context*)cc; | |
| 212 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 213 | |
| 214 if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) { | |
| 215 return TRUE; | |
| 216 } | |
| 217 int& iSelStart = pEvent->SelStart(); | |
| 218 if (vp.IsSetting()) { | |
| 219 vp >> iSelStart; | |
| 220 } else { | |
| 221 vp << iSelStart; | |
| 222 } | |
| 223 return TRUE; | |
| 224 } | |
| 225 | |
| 226 FX_BOOL event::shift(IJS_Context* cc, | |
| 227 CJS_PropValue& vp, | |
| 228 CFX_WideString& sError) { | |
| 229 if (!vp.IsGetting()) | |
| 230 return FALSE; | |
| 231 | |
| 232 CJS_Context* pContext = (CJS_Context*)cc; | |
| 233 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 234 | |
| 235 if (pEvent->Shift()) | |
| 236 vp << TRUE; | |
| 237 else | |
| 238 vp << FALSE; | |
| 239 return TRUE; | |
| 240 } | |
| 241 | |
| 242 FX_BOOL event::source(IJS_Context* cc, | |
| 243 CJS_PropValue& vp, | |
| 244 CFX_WideString& sError) { | |
| 245 if (!vp.IsGetting()) | |
| 246 return FALSE; | |
| 247 | |
| 248 CJS_Context* pContext = (CJS_Context*)cc; | |
| 249 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 250 | |
| 251 vp << pEvent->Source()->GetJSObject(); | |
| 252 return TRUE; | |
| 253 } | |
| 254 | |
| 255 FX_BOOL event::target(IJS_Context* cc, | |
| 256 CJS_PropValue& vp, | |
| 257 CFX_WideString& sError) { | |
| 258 if (!vp.IsGetting()) | |
| 259 return FALSE; | |
| 260 | |
| 261 CJS_Context* pContext = (CJS_Context*)cc; | |
| 262 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 263 | |
| 264 vp << pEvent->Target_Field()->GetJSObject(); | |
| 265 return TRUE; | |
| 266 } | |
| 267 | |
| 268 FX_BOOL event::targetName(IJS_Context* cc, | |
| 269 CJS_PropValue& vp, | |
| 270 CFX_WideString& sError) { | |
| 271 if (!vp.IsGetting()) | |
| 272 return FALSE; | |
| 273 | |
| 274 CJS_Context* pContext = (CJS_Context*)cc; | |
| 275 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 276 | |
| 277 vp << pEvent->TargetName(); | |
| 278 return TRUE; | |
| 279 } | |
| 280 | |
| 281 FX_BOOL event::type(IJS_Context* cc, | |
| 282 CJS_PropValue& vp, | |
| 283 CFX_WideString& sError) { | |
| 284 if (!vp.IsGetting()) | |
| 285 return FALSE; | |
| 286 | |
| 287 CJS_Context* pContext = (CJS_Context*)cc; | |
| 288 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 289 | |
| 290 vp << pEvent->Type(); | |
| 291 return TRUE; | |
| 292 } | |
| 293 | |
| 294 FX_BOOL event::value(IJS_Context* cc, | |
| 295 CJS_PropValue& vp, | |
| 296 CFX_WideString& sError) { | |
| 297 CJS_Context* pContext = (CJS_Context*)cc; | |
| 298 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 299 | |
| 300 if (wcscmp((const wchar_t*)pEvent->Type(), L"Field") != 0) | |
| 301 return FALSE; | |
| 302 if (!pEvent->m_pValue) | |
| 303 return FALSE; | |
| 304 CFX_WideString& val = pEvent->Value(); | |
| 305 if (vp.IsSetting()) { | |
| 306 vp >> val; | |
| 307 } else { | |
| 308 vp << val; | |
| 309 } | |
| 310 return TRUE; | |
| 311 } | |
| 312 | |
| 313 FX_BOOL event::willCommit(IJS_Context* cc, | |
| 314 CJS_PropValue& vp, | |
| 315 CFX_WideString& sError) { | |
| 316 if (!vp.IsGetting()) | |
| 317 return FALSE; | |
| 318 | |
| 319 CJS_Context* pContext = (CJS_Context*)cc; | |
| 320 CJS_EventHandler* pEvent = pContext->GetEventHandler(); | |
| 321 | |
| 322 if (pEvent->WillCommit()) | |
| 323 vp << TRUE; | |
| 324 else | |
| 325 vp << FALSE; | |
| 326 return TRUE; | |
| 327 } | |
| OLD | NEW |