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