Kill off some more unreachable fopen's.
[pdfium.git] / fpdfsdk / src / javascript / JS_EventHandler.cpp
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_EventHandler.h"
10 //#include "../../include/javascript/JS_ResMgr.h"
11 #include "../../include/javascript/JS_Context.h"
12 #include "../../include/javascript/JS_Runtime.h"
13 #include "../../include/javascript/JS_Define.h"
14 #include "../../include/javascript/JS_Object.h"
15 #include "../../include/javascript/JS_Value.h"
16 #include "../../include/javascript/Document.h"
17 #include "../../include/javascript/Field.h"
18
19 /* ---------------------------- CJS_EventHandler ---------------------------- */
20
21 CJS_EventHandler::CJS_EventHandler(CJS_Context * pContext)       :
22         m_pJSContext(pContext),
23         m_eEventType(JET_UNKNOWN),
24         m_bValid(FALSE),
25         m_pWideStrChange(NULL),
26         m_nCommitKey(-1),
27         m_bKeyDown(FALSE),
28         m_bModifier(FALSE),
29         m_bShift(FALSE),
30         m_pISelEnd(NULL),
31         m_nSelEndDu(0),
32         m_pISelStart(NULL),
33         m_nSelStartDu(0),
34         m_bWillCommit(FALSE),
35         m_pValue(NULL),
36         m_bFieldFull(FALSE),
37         m_pbRc(NULL),
38         m_bRcDu(FALSE),
39         m_pSourceDoc(NULL),
40         m_pTargetBookMark(NULL),
41         m_pTargetDoc(NULL),
42         m_pTargetAnnot(NULL)
43 {
44 }
45
46 CJS_EventHandler::~CJS_EventHandler()
47 {
48 }
49
50 void CJS_EventHandler::OnApp_Init()
51 {
52         Initial(JET_APP_INIT);
53 }
54
55 void CJS_EventHandler::OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName)
56 {
57         Initial(JET_DOC_OPEN);
58
59         m_pTargetDoc = pDoc;
60         m_strTargetName = strTargetName;        
61 }
62
63 void CJS_EventHandler::OnDoc_WillPrint(CPDFSDK_Document* pDoc)
64 {
65         Initial(JET_DOC_WILLPRINT);
66
67         m_pTargetDoc = pDoc;    
68 }
69
70 void CJS_EventHandler::OnDoc_DidPrint(CPDFSDK_Document* pDoc)
71 {
72         Initial(JET_DOC_DIDPRINT);
73         
74         m_pTargetDoc = pDoc;            
75 }
76
77 void CJS_EventHandler::OnDoc_WillSave(CPDFSDK_Document* pDoc)
78 {
79         Initial(JET_DOC_WILLSAVE);
80         m_pTargetDoc = pDoc;            
81 }
82
83 void CJS_EventHandler::OnDoc_DidSave(CPDFSDK_Document* pDoc)
84 {
85         Initial(JET_DOC_DIDSAVE);       
86         
87         m_pTargetDoc = pDoc;    
88 }
89
90 void CJS_EventHandler::OnDoc_WillClose(CPDFSDK_Document* pDoc)
91 {
92         Initial(JET_DOC_WILLCLOSE);
93
94         m_pTargetDoc = pDoc;    
95 }
96
97 void CJS_EventHandler::OnPage_Open(CPDFSDK_Document* pDoc)
98 {
99         Initial(JET_PAGE_OPEN);
100
101         m_pTargetDoc = pDoc;
102 }
103
104 void CJS_EventHandler::OnPage_Close(CPDFSDK_Document* pDoc)
105 {
106         Initial(JET_PAGE_CLOSE);
107         
108         m_pTargetDoc = pDoc;
109 }
110
111 void CJS_EventHandler::OnPage_InView(CPDFSDK_Document* pDoc)
112 {
113         Initial(JET_PAGE_INVIEW);
114         
115         m_pTargetDoc = pDoc;
116 }
117
118 void CJS_EventHandler::OnPage_OutView(CPDFSDK_Document* pDoc)
119 {
120         Initial(JET_PAGE_OUTVIEW);
121         
122         m_pTargetDoc = pDoc;
123 }
124
125 void CJS_EventHandler::OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
126 {
127         Initial(JET_FIELD_MOUSEENTER);
128
129         m_bModifier = bModifier;
130         m_bShift = bShift;
131
132         ASSERT(pTarget != NULL);
133         m_strTargetName = pTarget->GetFullName();
134 }
135
136 void CJS_EventHandler::OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
137 {
138         Initial(JET_FIELD_MOUSEEXIT);
139
140         m_bModifier = bModifier;
141         m_bShift = bShift;
142         ASSERT(pTarget != NULL);
143         m_strTargetName = pTarget->GetFullName();       
144 }
145
146 void CJS_EventHandler::OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
147 {
148         Initial(JET_FIELD_MOUSEDOWN);
149         m_eEventType = JET_FIELD_MOUSEDOWN;
150         
151         m_bModifier = bModifier;
152         m_bShift = bShift;      
153         ASSERT(pTarget != NULL);
154         m_strTargetName = pTarget->GetFullName();
155 }
156
157 void CJS_EventHandler::OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
158 {
159         Initial(JET_FIELD_MOUSEUP);
160
161         m_bModifier = bModifier;
162         m_bShift = bShift;
163         ASSERT(pTarget != NULL);
164         m_strTargetName = pTarget->GetFullName();
165 }
166
167 void CJS_EventHandler::OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, 
168                                                                          const CFX_WideString& Value)
169 {
170         Initial(JET_FIELD_FOCUS);
171
172         m_bModifier = bModifier;
173         m_bShift = bShift;  
174         ASSERT(pTarget != NULL);
175         m_strTargetName = pTarget->GetFullName();
176         m_pValue = (CFX_WideString*)&Value;
177 }
178
179 void CJS_EventHandler::OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget,
180                                                                         const CFX_WideString& Value)
181 {
182         Initial(JET_FIELD_BLUR);
183
184         m_bModifier = bModifier;
185         m_bShift = bShift;
186         ASSERT(pTarget != NULL);
187         m_strTargetName = pTarget->GetFullName();
188         m_pValue = (CFX_WideString*)&Value;     
189 }
190
191 void CJS_EventHandler::OnField_Keystroke(int nCommitKey, CFX_WideString &strChange,
192                                                                                  const CFX_WideString& strChangeEx, FX_BOOL KeyDown,
193                                                                                  FX_BOOL bModifier, int& nSelEnd, int& nSelStart,
194                                                                                  FX_BOOL bShift, CPDF_FormField* pTarget,
195                                                                                  CFX_WideString& Value, FX_BOOL bWillCommit,
196                                                                                   FX_BOOL bFieldFull, FX_BOOL& bRc)
197 {
198         Initial(JET_FIELD_KEYSTROKE);
199         
200         m_nCommitKey = nCommitKey;
201         m_pWideStrChange = &strChange;
202         m_WideStrChangeEx = strChangeEx;
203         m_bKeyDown = KeyDown;
204         m_bModifier = bModifier;
205         m_pISelEnd = &nSelEnd;
206         m_pISelStart = &nSelStart;
207         m_bShift = bShift;      
208         ASSERT(pTarget != NULL);
209         m_strTargetName = pTarget->GetFullName();
210         m_pValue = &Value;
211         m_bWillCommit = bWillCommit;    
212         m_pbRc = &bRc;
213         m_bFieldFull = bFieldFull;
214 }
215
216 void CJS_EventHandler::OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx,
217                                                                                 FX_BOOL bKeyDown, FX_BOOL bModifier, FX_BOOL bShift,
218                                                                                 CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc)
219 {
220         Initial(JET_FIELD_VALIDATE);
221         
222         m_pWideStrChange = &strChange;
223         m_WideStrChangeEx = strChangeEx;        
224         m_bKeyDown = bKeyDown;
225         m_bModifier = bModifier;
226         m_bShift = bShift;
227         ASSERT(pTarget != NULL);
228         m_strTargetName = pTarget->GetFullName();
229         m_pValue = &Value;      
230         m_pbRc = &bRc;  
231 }
232
233 void CJS_EventHandler::OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, 
234                                                                                  CFX_WideString& Value, FX_BOOL& bRc)
235 {
236         Initial(JET_FIELD_CALCULATE);
237
238         if (pSource)
239                 m_strSourceName = pSource->GetFullName();
240         ASSERT(pTarget != NULL);
241         m_strTargetName = pTarget->GetFullName();
242     m_pValue = &Value;
243         m_pbRc = &bRc;
244 }
245
246 void CJS_EventHandler::OnField_Format(int nCommitKey, CPDF_FormField* pTarget,
247                                                                           CFX_WideString& Value, FX_BOOL bWillCommit)
248 {
249         Initial(JET_FIELD_FORMAT);
250         
251         m_nCommitKey = nCommitKey;        
252         ASSERT(pTarget != NULL);
253         m_strTargetName = pTarget->GetFullName();
254         m_pValue = &Value;
255         m_bWillCommit = bWillCommit;
256 }
257
258 void CJS_EventHandler::OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
259 {
260         Initial(JET_SCREEN_FOCUS);
261
262         m_bModifier = bModifier;
263         m_bShift = bShift;
264         m_pTargetAnnot = pScreen;
265 }
266
267 void CJS_EventHandler::OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
268 {
269         Initial(JET_SCREEN_BLUR);
270
271         m_bModifier = bModifier;
272         m_bShift = bShift;
273         m_pTargetAnnot = pScreen;
274 }
275
276 void CJS_EventHandler::OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
277 {
278         Initial(JET_SCREEN_OPEN);
279
280         m_bModifier = bModifier;
281         m_bShift = bShift;
282         m_pTargetAnnot = pScreen;
283 }
284
285 void CJS_EventHandler::OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
286 {
287         Initial(JET_SCREEN_CLOSE);
288
289         m_bModifier = bModifier;
290         m_bShift = bShift;
291         m_pTargetAnnot = pScreen;
292 }
293
294 void CJS_EventHandler::OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
295 {
296         Initial(JET_SCREEN_MOUSEDOWN);
297
298         m_bModifier = bModifier;
299         m_bShift = bShift;
300         m_pTargetAnnot = pScreen;
301 }
302
303 void CJS_EventHandler::OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
304 {
305         Initial(JET_SCREEN_MOUSEUP);
306
307         m_bModifier = bModifier;
308         m_bShift = bShift;
309         m_pTargetAnnot = pScreen;
310 }
311
312 void CJS_EventHandler::OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
313 {
314         Initial(JET_SCREEN_MOUSEENTER);
315
316         m_bModifier = bModifier;
317         m_bShift = bShift;
318         m_pTargetAnnot = pScreen;
319 }
320
321 void CJS_EventHandler::OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
322 {
323         Initial(JET_SCREEN_MOUSEEXIT);
324
325         m_bModifier = bModifier;
326         m_bShift = bShift;
327         m_pTargetAnnot = pScreen;
328 }
329
330 void CJS_EventHandler::OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
331 {
332         Initial(JET_SCREEN_INVIEW);
333
334         m_bModifier = bModifier;
335         m_bShift = bShift;
336         m_pTargetAnnot = pScreen;
337 }
338
339 void CJS_EventHandler::OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
340 {
341         Initial(JET_SCREEN_OUTVIEW);
342
343         m_bModifier = bModifier;
344         m_bShift = bShift;
345         m_pTargetAnnot = pScreen;
346 }
347
348 void CJS_EventHandler::OnLink_MouseUp(CPDFSDK_Document* pTarget)
349 {
350         Initial(JET_LINK_MOUSEUP);
351         
352         m_pTargetDoc = pTarget; 
353 }
354
355 void CJS_EventHandler::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark)
356 {
357         Initial(JET_BOOKMARK_MOUSEUP);
358
359         m_pTargetBookMark = pBookMark;  
360 }
361
362 void CJS_EventHandler::OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString& strTargetName)
363 {
364         Initial(JET_MENU_EXEC);
365
366         m_pTargetDoc = pTarget;
367         m_strTargetName = strTargetName;
368 }
369
370 void CJS_EventHandler::OnExternal_Exec()
371 {
372         Initial(JET_EXTERNAL_EXEC);
373 }
374
375 void CJS_EventHandler::OnBatchExec(CPDFSDK_Document* pTarget)
376 {
377         Initial(JET_BATCH_EXEC);
378
379         m_pTargetDoc = pTarget; 
380 }
381
382 void CJS_EventHandler::OnConsole_Exec()
383 {
384         Initial(JET_CONSOLE_EXEC);
385 }
386
387
388 void CJS_EventHandler::Initial(JS_EVENT_T type)
389 {
390         m_eEventType = type;
391
392         m_strTargetName = L"";
393         m_strSourceName = L"";
394         m_pWideStrChange = NULL;
395         m_WideStrChangeDu = L"";
396         m_WideStrChangeEx = L"";
397         m_nCommitKey = -1;
398         m_bKeyDown = FALSE;
399         m_bModifier = FALSE;
400         m_bShift = FALSE;
401         m_pISelEnd = NULL;
402         m_nSelEndDu = 0;
403         m_pISelStart = NULL;
404         m_nSelStartDu = 0;
405         m_bWillCommit = FALSE;
406         m_pValue = NULL;
407         m_bFieldFull = FALSE;
408         m_pbRc = NULL;
409         m_bRcDu = FALSE;
410
411         m_pSourceDoc = NULL;
412         m_pTargetBookMark = NULL;
413         m_pTargetDoc = NULL;
414         m_pTargetAnnot = NULL;
415
416         m_bValid = TRUE;
417 }
418
419 void CJS_EventHandler::Destroy()
420 {
421         m_bValid = FALSE;
422 }
423
424 FX_BOOL CJS_EventHandler::IsValid()
425 {
426         return m_bValid;
427 }
428
429 CFX_WideString & CJS_EventHandler::Change()
430 {
431         if (m_pWideStrChange != NULL)
432                 return *m_pWideStrChange;
433         else
434         {
435                 return m_WideStrChangeDu;
436         }
437 }
438
439 CFX_WideString CJS_EventHandler::ChangeEx()
440 {
441         return m_WideStrChangeEx;
442 }
443
444 int CJS_EventHandler::CommitKey()
445 {
446         return m_nCommitKey;
447 }
448
449 FX_BOOL CJS_EventHandler::FieldFull()
450 {
451         return m_bFieldFull;
452 }
453
454 FX_BOOL CJS_EventHandler::KeyDown()
455 {
456         return m_bKeyDown;
457 }
458
459 FX_BOOL CJS_EventHandler::Modifier()
460 {
461         return m_bModifier;
462 }
463
464 FX_LPCWSTR CJS_EventHandler::Name()
465 {
466         switch (m_eEventType)
467         {
468         case JET_APP_INIT:                      return L"Init";
469         case JET_BATCH_EXEC:            return L"Exec";
470         case JET_BOOKMARK_MOUSEUP:      return L"Mouse Up";
471         case JET_CONSOLE_EXEC:          return L"Exec";
472         case JET_DOC_DIDPRINT:          return L"DidPrint";
473         case JET_DOC_DIDSAVE:           return L"DidSave";
474         case JET_DOC_OPEN:                      return L"Open";
475         case JET_DOC_WILLCLOSE:         return L"WillClose";
476         case JET_DOC_WILLPRINT:         return L"WillPrint";
477         case JET_DOC_WILLSAVE:          return L"WillSave";
478         case JET_EXTERNAL_EXEC:         return L"Exec";
479         case JET_FIELD_FOCUS:           
480         case JET_SCREEN_FOCUS:          return L"Focus";
481         case JET_FIELD_BLUR:            
482         case JET_SCREEN_BLUR:           return L"Blur";
483         case JET_FIELD_MOUSEDOWN:
484         case JET_SCREEN_MOUSEDOWN:      return L"Mouse Down";
485         case JET_FIELD_MOUSEUP:         
486         case JET_SCREEN_MOUSEUP:        return L"Mouse Up";
487         case JET_FIELD_MOUSEENTER:
488         case JET_SCREEN_MOUSEENTER:     return L"Mouse Enter";
489         case JET_FIELD_MOUSEEXIT:
490         case JET_SCREEN_MOUSEEXIT:      return L"Mouse Exit";
491         case JET_FIELD_CALCULATE:       return L"Calculate";
492         case JET_FIELD_FORMAT:          return L"Format";
493         case JET_FIELD_KEYSTROKE:       return L"Keystroke";
494         case JET_FIELD_VALIDATE:        return L"Validate";
495         case JET_LINK_MOUSEUP:          return L"Mouse Up";
496         case JET_MENU_EXEC:                     return L"Exec";
497         case JET_PAGE_OPEN:             
498         case JET_SCREEN_OPEN:           return L"Open";
499         case JET_PAGE_CLOSE:
500         case JET_SCREEN_CLOSE:          return L"Close";
501         case JET_SCREEN_INVIEW: 
502         case JET_PAGE_INVIEW:           return L"InView";
503         case JET_PAGE_OUTVIEW:
504         case JET_SCREEN_OUTVIEW:        return L"OutView";
505         default:
506                 return L"";
507         }
508
509         return L"";
510 }
511
512 FX_LPCWSTR CJS_EventHandler::Type()
513 {
514         switch (m_eEventType)
515         {
516         case JET_APP_INIT:                      return L"App";
517         case JET_BATCH_EXEC:            return L"Batch";
518         case JET_BOOKMARK_MOUSEUP:      return L"BookMark";     
519         case JET_CONSOLE_EXEC:          return L"Console";
520         case JET_DOC_DIDPRINT:
521         case JET_DOC_DIDSAVE:
522         case JET_DOC_OPEN:
523         case JET_DOC_WILLCLOSE:
524         case JET_DOC_WILLPRINT:
525         case JET_DOC_WILLSAVE:          return L"Doc";
526         case JET_EXTERNAL_EXEC:         return L"External";
527         case JET_FIELD_BLUR:
528         case JET_FIELD_FOCUS:
529         case JET_FIELD_MOUSEDOWN:
530         case JET_FIELD_MOUSEENTER:
531         case JET_FIELD_MOUSEEXIT:
532         case JET_FIELD_MOUSEUP:
533         case JET_FIELD_CALCULATE:
534         case JET_FIELD_FORMAT:
535         case JET_FIELD_KEYSTROKE:
536         case JET_FIELD_VALIDATE:        return L"Field";
537         case JET_SCREEN_FOCUS:
538         case JET_SCREEN_BLUR:
539         case JET_SCREEN_OPEN:
540         case JET_SCREEN_CLOSE:
541         case JET_SCREEN_MOUSEDOWN:
542         case JET_SCREEN_MOUSEUP:
543         case JET_SCREEN_MOUSEENTER:
544         case JET_SCREEN_MOUSEEXIT:
545         case JET_SCREEN_INVIEW:
546         case JET_SCREEN_OUTVIEW:        return L"Screen";
547         case JET_LINK_MOUSEUP:          return L"Link"; 
548         case JET_MENU_EXEC:                     return L"Menu";
549         case JET_PAGE_OPEN:
550         case JET_PAGE_CLOSE:
551         case JET_PAGE_INVIEW:
552         case JET_PAGE_OUTVIEW:return L"Page";
553         default:
554                 return L"";
555         }
556
557         return L"";
558 }
559
560 FX_BOOL& CJS_EventHandler::Rc()
561 {
562         if (m_pbRc != NULL)
563                 return *m_pbRc;
564         else
565         {           
566                 return m_bRcDu;
567         }
568 }
569
570 int & CJS_EventHandler::SelEnd()
571 {
572         if (m_pISelEnd != NULL)
573         {
574                 return *m_pISelEnd;
575         }
576         else
577         {
578                 return m_nSelEndDu;
579         }
580 }
581
582 int & CJS_EventHandler::SelStart()
583 {
584         if (m_pISelStart != NULL)
585                 return * m_pISelStart;
586         else
587         {
588                 return m_nSelStartDu;
589         }
590 }
591
592 FX_BOOL CJS_EventHandler::Shift()
593 {
594         return m_bShift;
595 }
596
597 Field* CJS_EventHandler::Source()
598 {
599         ASSERT(m_pJSContext != NULL);
600
601         CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
602
603         JSFXObject  pDocObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document"));
604         ASSERT(pDocObj.IsEmpty() == FALSE);
605         JSFXObject  pFieldObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field"));
606         ASSERT(pFieldObj.IsEmpty() == FALSE);
607
608         CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj);
609         ASSERT(pJSDocument != NULL);
610         Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
611         ASSERT(pDocument != NULL);
612         if (m_pTargetDoc != NULL)
613                 pDocument->AttachDoc(m_pTargetDoc);
614         else
615                 pDocument->AttachDoc(m_pJSContext->GetReaderDocument());
616         
617         //if (m_pSourceField == NULL)
618         //      return NULL;
619         //CRAO_Widget *pWidget = IBCL_Widget::GetWidget(m_pSourceField);
620         //CPDF_FormField* pFormField = pWidget->GetFormField();
621         //ASSERT(pFormField);
622         //CFX_WideString csFieldName = pFormField->GetFullName();
623         CJS_Field * pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj);
624         ASSERT(pJSField != NULL);
625         Field * pField = (Field *)pJSField->GetEmbedObject(); 
626         ASSERT(pField != NULL);
627         pField->AttachField(pDocument, m_strSourceName);
628         return pField;  
629 }
630
631 Field* CJS_EventHandler::Target_Field()
632 {
633         ASSERT(m_pJSContext != NULL);
634
635         CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
636
637         JSFXObject pDocObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document"));
638         ASSERT(pDocObj.IsEmpty() == FALSE);
639         JSFXObject pFieldObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field"));
640         ASSERT(pFieldObj.IsEmpty() == FALSE);
641
642         CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj);
643         ASSERT(pJSDocument != NULL);
644         Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
645         ASSERT(pDocument != NULL);
646         if (m_pTargetDoc != NULL)
647                 pDocument->AttachDoc(m_pTargetDoc);
648         else
649                 pDocument->AttachDoc(m_pJSContext->GetReaderDocument());
650         
651         CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj);
652         ASSERT(pJSField != NULL);
653
654         Field* pField = (Field *)pJSField->GetEmbedObject(); 
655         ASSERT(pField != NULL);
656
657         pField->AttachField(pDocument, m_strTargetName);
658         return pField;  
659 }
660
661 CFX_WideString& CJS_EventHandler::Value()
662 {
663         return *m_pValue;
664 }
665
666 FX_BOOL CJS_EventHandler::WillCommit()
667 {
668         return m_bWillCommit;
669 }
670
671 CFX_WideString CJS_EventHandler::TargetName()
672 {
673         return m_strTargetName;
674 }
675
676