Remove trailing whitespaces in fpdfsdk.
[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 {
20 public:
21         CJS_Value(v8::Isolate* isolate);
22         CJS_Value(v8::Isolate* isolate, v8::Local<v8::Value> pValue,FXJSVALUETYPE t);
23         CJS_Value(v8::Isolate* isolate, const int &iValue);
24         CJS_Value(v8::Isolate* isolate, const double &dValue);
25         CJS_Value(v8::Isolate* isolate, const float &fValue);
26         CJS_Value(v8::Isolate* isolate, const bool &bValue);
27         CJS_Value(v8::Isolate* isolate, JSFXObject);
28         CJS_Value(v8::Isolate* isolate, CJS_Object*);
29         CJS_Value(v8::Isolate* isolate, CJS_Document*);
30         CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr);
31         CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr);
32         CJS_Value(v8::Isolate* isolate, CJS_Array& array);
33
34         ~CJS_Value();
35
36         void SetNull();
37     void Attach(v8::Local<v8::Value> pValue,FXJSVALUETYPE t);
38         void Attach(CJS_Value *pValue);
39         void Detach();
40
41
42         int ToInt() const;
43         bool ToBool() const;
44         double ToDouble() const;
45         float  ToFloat() const;
46         CJS_Object* ToCJSObject() const;
47         CFX_WideString ToCFXWideString() const;
48         CFX_ByteString ToCFXByteString() const;
49         v8::Local<v8::Object> ToV8Object() const;
50         v8::Local<v8::Array> ToV8Array() const;
51         v8::Local<v8::Value> ToV8Value() const;
52
53         void operator = (int iValue);
54         void operator = (bool bValue);
55         void operator = (double);
56         void operator = (float);
57         void operator = (CJS_Object*);
58         void operator = (CJS_Document*);
59         void operator = (v8::Local<v8::Object>);
60         void operator = (CJS_Array &);
61         void operator = (CJS_Date &);
62         void operator = (const FX_WCHAR* pWstr);
63         void operator = (const FX_CHAR* pStr);
64         void operator = (CJS_Value value);
65
66         FX_BOOL IsArrayObject() const;
67         FX_BOOL IsDateObject() const;
68         FXJSVALUETYPE GetType() const;
69
70         FX_BOOL ConvertToArray(CJS_Array &) const;
71         FX_BOOL ConvertToDate(CJS_Date &) const;
72
73         v8::Isolate* GetIsolate() {return m_isolate;}
74 protected:
75         v8::Local<v8::Value> m_pValue;
76         FXJSVALUETYPE m_eType;
77         v8::Isolate* m_isolate;
78 };
79
80 class CJS_Parameters : public CFX_ArrayTemplate<CJS_Value>
81 {
82 public:
83         void push_back(const CJS_Value& newElement) {
84                 CFX_ArrayTemplate<CJS_Value>::Add(newElement);
85         }
86         int size() const {
87                 return CFX_ArrayTemplate<CJS_Value>::GetSize();
88         }
89 };
90
91 class CJS_PropValue: public CJS_Value
92 {
93 public:
94         CJS_PropValue(const CJS_Value&);
95         CJS_PropValue(v8::Isolate* isolate);
96         ~CJS_PropValue();
97 public:
98         FX_BOOL IsSetting();
99         FX_BOOL IsGetting();
100         void operator<<(int);
101         void operator>>(int&) const;
102         void operator<<(bool);
103         void operator>>(bool&) const;
104         void operator<<(double);
105         void operator>>(double&) const;
106         void operator<<(CJS_Object* pObj);
107         void operator>>(CJS_Object*& ppObj) const;
108         void operator<<(CJS_Document* pJsDoc);
109         void operator>>(CJS_Document*& ppJsDoc) const;
110         void operator<<(CFX_ByteString);
111         void operator>>(CFX_ByteString&) const;
112         void operator<<(CFX_WideString);
113         void operator>>(CFX_WideString&) const;
114         void operator<<(const FX_WCHAR* c_string);
115         void operator<<(JSFXObject);
116         void operator>>(JSFXObject&) const;
117         void operator>>(CJS_Array& array) const;
118         void operator<<(CJS_Array& array);
119         void operator<<(CJS_Date& date);
120         void operator>>(CJS_Date& date) const;
121         operator v8::Local<v8::Value>() const;
122         void StartSetting();
123         void StartGetting();
124 private:
125         FX_BOOL m_bIsSetting;
126 };
127
128 class CJS_Array
129 {
130 public:
131         CJS_Array(v8::Isolate* isolate);
132         virtual ~CJS_Array();
133
134         void Attach(v8::Local<v8::Array> pArray);
135         void GetElement(unsigned index,CJS_Value &value);
136         void SetElement(unsigned index,CJS_Value value);
137     int GetLength();
138         FX_BOOL IsAttached();
139         operator v8::Local<v8::Array>();
140
141         v8::Isolate* GetIsolate() {return m_isolate;}
142 private:
143         v8::Local<v8::Array> m_pArray;
144         v8::Isolate* m_isolate;
145 };
146
147 class CJS_Date
148 {
149 friend class CJS_Value;
150 public:
151         CJS_Date(v8::Isolate* isolate);
152         CJS_Date(v8::Isolate* isolate,double dMsec_time);
153         CJS_Date(v8::Isolate* isolate,int year, int mon, int day,int hour, int min, int sec);
154         virtual ~CJS_Date();
155         void Attach(v8::Local<v8::Value> pDate);
156
157         int     GetYear();
158         void    SetYear(int iYear);
159
160         int     GetMonth();
161         void    SetMonth(int iMonth);
162
163         int     GetDay();
164         void    SetDay(int iDay);
165
166         int     GetHours();
167         void    SetHours(int iHours);
168
169         int     GetMinutes();
170         void    SetMinutes(int minutes);
171
172         int     GetSeconds();
173         void    SetSeconds(int seconds);
174
175         operator v8::Local<v8::Value>();
176         operator double() const;
177
178         CFX_WideString  ToString() const;
179
180         static double   MakeDate(int year, int mon, int mday,int hour, int min, int sec,int ms);
181
182         FX_BOOL IsValidDate();
183
184 protected:
185         v8::Local<v8::Value> m_pDate;
186         v8::Isolate* m_isolate;
187 };
188
189 #endif  // FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_