Cleanup some numeric code.
[pdfium.git] / fpdfsdk / src / javascript / event.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 "event.h"
8
9 #include "../../include/javascript/IJavaScript.h"
10 #include "JS_Define.h"
11 #include "JS_Object.h"
12 #include "JS_Value.h"
13 #include "JS_EventHandler.h"
14 #include "JS_Context.h"
15 #include "Field.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   ASSERT(pContext != NULL);
60   CJS_EventHandler* pEvent = pContext->GetEventHandler();
61   ASSERT(pEvent != NULL);
62
63   CFX_WideString& wChange = pEvent->Change();
64   if (vp.IsSetting()) {
65     if (vp.GetType() == CJS_Value::VT_string)
66       vp >> wChange;
67   } else {
68     vp << wChange;
69   }
70   return TRUE;
71 }
72
73 FX_BOOL event::changeEx(IJS_Context* cc,
74                         CJS_PropValue& vp,
75                         CFX_WideString& sError) {
76   if (!vp.IsGetting())
77     return FALSE;
78
79   CJS_Context* pContext = (CJS_Context*)cc;
80   ASSERT(pContext != NULL);
81   CJS_EventHandler* pEvent = pContext->GetEventHandler();
82   ASSERT(pEvent != NULL);
83
84   vp << pEvent->ChangeEx();
85   return TRUE;
86 }
87
88 FX_BOOL event::commitKey(IJS_Context* cc,
89                          CJS_PropValue& vp,
90                          CFX_WideString& sError) {
91   if (!vp.IsGetting())
92     return FALSE;
93
94   CJS_Context* pContext = (CJS_Context*)cc;
95   ASSERT(pContext != NULL);
96   CJS_EventHandler* pEvent = pContext->GetEventHandler();
97   ASSERT(pEvent != NULL);
98
99   vp << pEvent->CommitKey();
100   return TRUE;
101 }
102
103 FX_BOOL event::fieldFull(IJS_Context* cc,
104                          CJS_PropValue& vp,
105                          CFX_WideString& sError) {
106   CJS_Context* pContext = (CJS_Context*)cc;
107   ASSERT(pContext != NULL);
108   CJS_EventHandler* pEvent = pContext->GetEventHandler();
109   ASSERT(pEvent != NULL);
110
111   if (!vp.IsGetting() &&
112       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(IJS_Context* cc,
123                        CJS_PropValue& vp,
124                        CFX_WideString& sError) {
125   if (!vp.IsGetting())
126     return FALSE;
127
128   CJS_Context* pContext = (CJS_Context*)cc;
129   ASSERT(pContext != NULL);
130   CJS_EventHandler* pEvent = pContext->GetEventHandler();
131   ASSERT(pEvent != NULL);
132
133   if (pEvent->KeyDown())
134     vp << TRUE;
135   else
136     vp << FALSE;
137   return TRUE;
138 }
139
140 FX_BOOL event::modifier(IJS_Context* cc,
141                         CJS_PropValue& vp,
142                         CFX_WideString& sError) {
143   if (!vp.IsGetting())
144     return FALSE;
145
146   CJS_Context* pContext = (CJS_Context*)cc;
147   ASSERT(pContext != NULL);
148   CJS_EventHandler* pEvent = pContext->GetEventHandler();
149   ASSERT(pEvent != NULL);
150
151   if (pEvent->Modifier())
152     vp << TRUE;
153   else
154     vp << FALSE;
155   return TRUE;
156 }
157
158 FX_BOOL event::name(IJS_Context* cc,
159                     CJS_PropValue& vp,
160                     CFX_WideString& sError) {
161   if (!vp.IsGetting())
162     return FALSE;
163
164   CJS_Context* pContext = (CJS_Context*)cc;
165   ASSERT(pContext != NULL);
166   CJS_EventHandler* pEvent = pContext->GetEventHandler();
167   ASSERT(pEvent != NULL);
168
169   vp << pEvent->Name();
170   return TRUE;
171 }
172
173 FX_BOOL event::rc(IJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) {
174   CJS_Context* pContext = (CJS_Context*)cc;
175   ASSERT(pContext != NULL);
176   CJS_EventHandler* pEvent = pContext->GetEventHandler();
177   ASSERT(pEvent != NULL);
178
179   FX_BOOL& bRc = pEvent->Rc();
180   if (vp.IsSetting()) {
181     vp >> bRc;
182   } else {
183     vp << bRc;
184   }
185   return TRUE;
186 }
187
188 FX_BOOL event::richChange(IJS_Context* cc,
189                           CJS_PropValue& vp,
190                           CFX_WideString& sError) {
191   return TRUE;
192   if (vp.IsSetting()) {
193   } else {
194     ;
195   }
196   return TRUE;
197 }
198
199 FX_BOOL event::richChangeEx(IJS_Context* cc,
200                             CJS_PropValue& vp,
201                             CFX_WideString& sError) {
202   return TRUE;
203   if (vp.IsSetting()) {
204   } else {
205     ;
206   }
207   return TRUE;
208 }
209
210 FX_BOOL event::richValue(IJS_Context* cc,
211                          CJS_PropValue& vp,
212                          CFX_WideString& sError) {
213   return TRUE;
214   if (vp.IsSetting()) {
215   } else {
216     ;
217   }
218   return TRUE;
219 }
220
221 FX_BOOL event::selEnd(IJS_Context* cc,
222                       CJS_PropValue& vp,
223                       CFX_WideString& sError) {
224   CJS_Context* pContext = (CJS_Context*)cc;
225   ASSERT(pContext != NULL);
226   CJS_EventHandler* pEvent = pContext->GetEventHandler();
227   ASSERT(pEvent != NULL);
228
229   if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) {
230     return TRUE;
231   }
232
233   int& iSelEnd = pEvent->SelEnd();
234   if (vp.IsSetting()) {
235     vp >> iSelEnd;
236   } else {
237     vp << iSelEnd;
238   }
239   return TRUE;
240 }
241
242 FX_BOOL event::selStart(IJS_Context* cc,
243                         CJS_PropValue& vp,
244                         CFX_WideString& sError) {
245   CJS_Context* pContext = (CJS_Context*)cc;
246   ASSERT(pContext != NULL);
247   CJS_EventHandler* pEvent = pContext->GetEventHandler();
248   ASSERT(pEvent != NULL);
249
250   if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) {
251     return TRUE;
252   }
253   int& iSelStart = pEvent->SelStart();
254   if (vp.IsSetting()) {
255     vp >> iSelStart;
256   } else {
257     vp << iSelStart;
258   }
259   return TRUE;
260 }
261
262 FX_BOOL event::shift(IJS_Context* cc,
263                      CJS_PropValue& vp,
264                      CFX_WideString& sError) {
265   if (!vp.IsGetting())
266     return FALSE;
267
268   CJS_Context* pContext = (CJS_Context*)cc;
269   ASSERT(pContext != NULL);
270   CJS_EventHandler* pEvent = pContext->GetEventHandler();
271   ASSERT(pEvent != NULL);
272
273   if (pEvent->Shift())
274     vp << TRUE;
275   else
276     vp << FALSE;
277   return TRUE;
278 }
279
280 FX_BOOL event::source(IJS_Context* cc,
281                       CJS_PropValue& vp,
282                       CFX_WideString& sError) {
283   if (!vp.IsGetting())
284     return FALSE;
285
286   CJS_Context* pContext = (CJS_Context*)cc;
287   ASSERT(pContext != NULL);
288   CJS_EventHandler* pEvent = pContext->GetEventHandler();
289   ASSERT(pEvent != NULL);
290
291   vp << pEvent->Source()->GetJSObject();
292   return TRUE;
293 }
294
295 FX_BOOL event::target(IJS_Context* cc,
296                       CJS_PropValue& vp,
297                       CFX_WideString& sError) {
298   if (!vp.IsGetting())
299     return FALSE;
300
301   CJS_Context* pContext = (CJS_Context*)cc;
302   ASSERT(pContext != NULL);
303   CJS_EventHandler* pEvent = pContext->GetEventHandler();
304   ASSERT(pEvent != NULL);
305
306   vp << pEvent->Target_Field()->GetJSObject();
307   return TRUE;
308 }
309
310 FX_BOOL event::targetName(IJS_Context* cc,
311                           CJS_PropValue& vp,
312                           CFX_WideString& sError) {
313   if (!vp.IsGetting())
314     return FALSE;
315
316   CJS_Context* pContext = (CJS_Context*)cc;
317   ASSERT(pContext != NULL);
318   CJS_EventHandler* pEvent = pContext->GetEventHandler();
319   ASSERT(pEvent != NULL);
320
321   vp << pEvent->TargetName();
322   return TRUE;
323 }
324
325 FX_BOOL event::type(IJS_Context* cc,
326                     CJS_PropValue& vp,
327                     CFX_WideString& sError) {
328   if (!vp.IsGetting())
329     return FALSE;
330
331   CJS_Context* pContext = (CJS_Context*)cc;
332   ASSERT(pContext != NULL);
333   CJS_EventHandler* pEvent = pContext->GetEventHandler();
334   ASSERT(pEvent != NULL);
335
336   vp << pEvent->Type();
337   return TRUE;
338 }
339
340 FX_BOOL event::value(IJS_Context* cc,
341                      CJS_PropValue& vp,
342                      CFX_WideString& sError) {
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     vp >> val;
355   } else {
356     vp << val;
357   }
358   return TRUE;
359 }
360
361 FX_BOOL event::willCommit(IJS_Context* cc,
362                           CJS_PropValue& vp,
363                           CFX_WideString& sError) {
364   if (!vp.IsGetting())
365     return FALSE;
366
367   CJS_Context* pContext = (CJS_Context*)cc;
368   ASSERT(pContext != NULL);
369   CJS_EventHandler* pEvent = pContext->GetEventHandler();
370   ASSERT(pEvent != NULL);
371
372   if (pEvent->WillCommit())
373     vp << TRUE;
374   else
375     vp << FALSE;
376   return TRUE;
377 }