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