Remove pointless CPDFSDK_PageView usage in CJS_Object / CJS_EmbedObj.
[pdfium.git] / fpdfsdk / include / javascript / JS_Value.h
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 #ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_
8 #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_
9
10 #include "../../../core/include/fxcrt/fx_basic.h"
11 #include "../jsapi/fxjs_v8.h"
12
13 class CJS_Array;
14 class CJS_Date;
15 class CJS_Document;
16 class CJS_Object;
17
18 class CJS_Value {
19  public:
20   enum Type {
21     VT_unknown,
22     VT_string,
23     VT_number,
24     VT_boolean,
25     VT_date,
26     VT_object,
27     VT_fxobject,
28     VT_null,
29     VT_undefined
30   };
31
32   CJS_Value(v8::Isolate* isolate);
33   CJS_Value(v8::Isolate* isolate, v8::Local<v8::Value> pValue, Type t);
34   CJS_Value(v8::Isolate* isolate, const int& iValue);
35   CJS_Value(v8::Isolate* isolate, const double& dValue);
36   CJS_Value(v8::Isolate* isolate, const float& fValue);
37   CJS_Value(v8::Isolate* isolate, const bool& bValue);
38   CJS_Value(v8::Isolate* isolate, v8::Local<v8::Object>);
39   CJS_Value(v8::Isolate* isolate, CJS_Object*);
40   CJS_Value(v8::Isolate* isolate, CJS_Document*);
41   CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr);
42   CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr);
43   CJS_Value(v8::Isolate* isolate, CJS_Array& array);
44
45   ~CJS_Value();
46
47   void SetNull();
48   void Attach(v8::Local<v8::Value> pValue, Type t);
49   void Attach(CJS_Value* pValue);
50   void Detach();
51
52   Type GetType() const;
53   int ToInt() const;
54   bool ToBool() const;
55   double ToDouble() const;
56   float ToFloat() const;
57   CJS_Object* ToCJSObject() const;
58   CFX_WideString ToCFXWideString() const;
59   CFX_ByteString ToCFXByteString() const;
60   v8::Local<v8::Object> ToV8Object() const;
61   v8::Local<v8::Array> ToV8Array() const;
62   v8::Local<v8::Value> ToV8Value() const;
63
64   void operator=(int iValue);
65   void operator=(bool bValue);
66   void operator=(double);
67   void operator=(float);
68   void operator=(CJS_Object*);
69   void operator=(CJS_Document*);
70   void operator=(v8::Local<v8::Object>);
71   void operator=(CJS_Array&);
72   void operator=(CJS_Date&);
73   void operator=(const FX_WCHAR* pWstr);
74   void operator=(const FX_CHAR* pStr);
75   void operator=(CJS_Value value);
76
77   FX_BOOL IsArrayObject() const;
78   FX_BOOL IsDateObject() const;
79   FX_BOOL ConvertToArray(CJS_Array&) const;
80   FX_BOOL ConvertToDate(CJS_Date&) const;
81
82   v8::Isolate* GetIsolate() { return m_isolate; }
83
84  protected:
85   Type m_eType;
86   v8::Local<v8::Value> m_pValue;
87   v8::Isolate* m_isolate;
88 };
89
90 class CJS_Parameters : public CFX_ArrayTemplate<CJS_Value> {
91  public:
92   void push_back(const CJS_Value& newElement) {
93     CFX_ArrayTemplate<CJS_Value>::Add(newElement);
94   }
95   int size() const { return CFX_ArrayTemplate<CJS_Value>::GetSize(); }
96 };
97
98 class CJS_PropValue : public CJS_Value {
99  public:
100   CJS_PropValue(const CJS_Value&);
101   CJS_PropValue(v8::Isolate* isolate);
102   ~CJS_PropValue();
103
104  public:
105   FX_BOOL IsSetting();
106   FX_BOOL IsGetting();
107   void operator<<(int);
108   void operator>>(int&) const;
109   void operator<<(bool);
110   void operator>>(bool&) const;
111   void operator<<(double);
112   void operator>>(double&) const;
113   void operator<<(CJS_Object* pObj);
114   void operator>>(CJS_Object*& ppObj) const;
115   void operator<<(CJS_Document* pJsDoc);
116   void operator>>(CJS_Document*& ppJsDoc) const;
117   void operator<<(CFX_ByteString);
118   void operator>>(CFX_ByteString&) const;
119   void operator<<(CFX_WideString);
120   void operator>>(CFX_WideString&) const;
121   void operator<<(const FX_WCHAR* c_string);
122   void operator<<(v8::Local<v8::Object>);
123   void operator>>(v8::Local<v8::Object>&) const;
124   void operator>>(CJS_Array& array) const;
125   void operator<<(CJS_Array& array);
126   void operator<<(CJS_Date& date);
127   void operator>>(CJS_Date& date) const;
128   operator v8::Local<v8::Value>() const;
129   void StartSetting();
130   void StartGetting();
131
132  private:
133   FX_BOOL m_bIsSetting;
134 };
135
136 class CJS_Array {
137  public:
138   CJS_Array(v8::Isolate* isolate);
139   virtual ~CJS_Array();
140
141   void Attach(v8::Local<v8::Array> pArray);
142   void GetElement(unsigned index, CJS_Value& value);
143   void SetElement(unsigned index, CJS_Value value);
144   int GetLength();
145   FX_BOOL IsAttached();
146   operator v8::Local<v8::Array>();
147
148   v8::Isolate* GetIsolate() { return m_isolate; }
149
150  private:
151   v8::Local<v8::Array> m_pArray;
152   v8::Isolate* m_isolate;
153 };
154
155 class CJS_Date {
156   friend class CJS_Value;
157
158  public:
159   CJS_Date(v8::Isolate* isolate);
160   CJS_Date(v8::Isolate* isolate, double dMsec_time);
161   CJS_Date(v8::Isolate* isolate,
162            int year,
163            int mon,
164            int day,
165            int hour,
166            int min,
167            int sec);
168   virtual ~CJS_Date();
169   void Attach(v8::Local<v8::Value> pDate);
170
171   int GetYear();
172   void SetYear(int iYear);
173
174   int GetMonth();
175   void SetMonth(int iMonth);
176
177   int GetDay();
178   void SetDay(int iDay);
179
180   int GetHours();
181   void SetHours(int iHours);
182
183   int GetMinutes();
184   void SetMinutes(int minutes);
185
186   int GetSeconds();
187   void SetSeconds(int seconds);
188
189   operator v8::Local<v8::Value>();
190   operator double() const;
191
192   CFX_WideString ToString() const;
193
194   static double
195   MakeDate(int year, int mon, int mday, int hour, int min, int sec, int ms);
196
197   FX_BOOL IsValidDate();
198
199  protected:
200   v8::Local<v8::Value> m_pDate;
201   v8::Isolate* m_isolate;
202 };
203
204 double JS_GetDateTime();
205 int JS_GetYearFromTime(double dt);
206 int JS_GetMonthFromTime(double dt);
207 int JS_GetDayFromTime(double dt);
208 int JS_GetHourFromTime(double dt);
209 int JS_GetMinFromTime(double dt);
210 int JS_GetSecFromTime(double dt);
211 double JS_DateParse(const wchar_t* string);
212 double JS_MakeDay(int nYear, int nMonth, int nDay);
213 double JS_MakeTime(int nHour, int nMin, int nSec, int nMs);
214 double JS_MakeDate(double day, double time);
215 bool JS_PortIsNan(double d);
216 double JS_LocalTime(double d);
217
218 #endif  // FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_