• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 _JS_VALUE_H_
8 #define _JS_VALUE_H_
9 
10 class CJS_Array;
11 class CJS_Date;
12 
13 class CJS_Value
14 {
15 public:
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 
GetIsolate()69 	v8::Isolate* GetIsolate() {return m_isolate;}
70 protected:
71 	v8::Handle<v8::Value> m_pValue;
72 	FXJSVALUETYPE m_eType;
73 	v8::Isolate* m_isolate;
74 };
75 
76 template<class TYPE> class CJS_ParametersTmpl : public CFX_ArrayTemplate<TYPE>
77 {
78 public:
push_back(TYPE newElement)79 	void push_back(TYPE newElement){CFX_ArrayTemplate<TYPE>::Add(newElement);}
size()80 	int size() const{return CFX_ArrayTemplate<TYPE>::GetSize();}
81 };
82 typedef CJS_ParametersTmpl<CJS_Value> CJS_Parameters;
83 
84 class CJS_PropValue: public CJS_Value
85 {
86 public:
87 	CJS_PropValue(const CJS_Value &);
88 	CJS_PropValue(v8::Isolate* isolate);
89 	~CJS_PropValue();
90 public:
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();
120 private:
121 	FX_BOOL m_bIsSetting;
122 };
123 
124 class CJS_Array
125 {
126 public:
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 
GetIsolate()137 	v8::Isolate* GetIsolate() {return m_isolate;}
138 private:
139 	v8::Handle<v8::Array> m_pArray;
140 	v8::Isolate* m_isolate;
141 };
142 
143 class CJS_Date
144 {
145 friend class CJS_Value;
146 public:
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 
180 protected:
181 	v8::Handle<v8::Value> m_pDate;
182 	v8::Isolate* m_isolate;
183 };
184 
185 #endif //_JS_VALUE_H_
186 
187