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