// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#ifndef _JS_VALUE_H_ | |
#define _JS_VALUE_H_ | |
class CJS_Array; | |
class CJS_Date; | |
class CJS_Value | |
{ | |
public: | |
CJS_Value(v8::Isolate* isolate); | |
CJS_Value(v8::Isolate* isolate, v8::Handle<v8::Value> pValue,FXJSVALUETYPE t); | |
CJS_Value(v8::Isolate* isolate, const int &iValue); | |
CJS_Value(v8::Isolate* isolate, const double &dValue); | |
CJS_Value(v8::Isolate* isolate, const float &fValue); | |
CJS_Value(v8::Isolate* isolate, const bool &bValue); | |
CJS_Value(v8::Isolate* isolate, JSFXObject); | |
CJS_Value(v8::Isolate* isolate, CJS_Object *); | |
CJS_Value(v8::Isolate* isolate, FX_LPCSTR pStr); | |
CJS_Value(v8::Isolate* isolate, FX_LPCWSTR pWstr); | |
CJS_Value(v8::Isolate* isolate, CJS_Array& array); | |
~CJS_Value(); | |
void SetNull(); | |
void Attach(v8::Handle<v8::Value> pValue,FXJSVALUETYPE t); | |
void Attach(CJS_Value *pValue); | |
void Detach(); | |
operator int() const; | |
operator bool() const; | |
operator double() const; | |
operator float() const; | |
operator CJS_Object *() const; | |
//operator JSFXObject *() const; | |
operator v8::Handle<v8::Object>() const; | |
operator v8::Handle<v8::Array>() const; | |
operator CFX_WideString() const; | |
//operator FX_WCHAR *() const; | |
operator CFX_ByteString() const; | |
v8::Handle<v8::Value> ToJSValue(); | |
void operator = (int iValue); | |
void operator = (bool bValue); | |
void operator = (double); | |
void operator = (float); | |
void operator = (CJS_Object *); | |
void operator = (v8::Handle<v8::Object>); | |
// void operator = (JSObject *); | |
void operator = (CJS_Array &); | |
void operator = (CJS_Date &); | |
void operator = (FX_LPCWSTR pWstr); | |
void operator = (FX_LPCSTR pStr); | |
void operator = (CJS_Value value); | |
FX_BOOL IsArrayObject() const; | |
FX_BOOL IsDateObject() const; | |
FXJSVALUETYPE GetType() const; | |
FX_BOOL ConvertToArray(CJS_Array &) const; | |
FX_BOOL ConvertToDate(CJS_Date &) const; | |
v8::Isolate* GetIsolate() {return m_isolate;} | |
protected: | |
v8::Handle<v8::Value> m_pValue; | |
FXJSVALUETYPE m_eType; | |
v8::Isolate* m_isolate; | |
}; | |
template<class TYPE> class CJS_ParametersTmpl : public CFX_ArrayTemplate<TYPE> | |
{ | |
public: | |
void push_back(TYPE newElement){CFX_ArrayTemplate<TYPE>::Add(newElement);} | |
int size() const{return CFX_ArrayTemplate<TYPE>::GetSize();} | |
}; | |
typedef CJS_ParametersTmpl<CJS_Value> CJS_Parameters; | |
class CJS_PropValue: public CJS_Value | |
{ | |
public: | |
CJS_PropValue(const CJS_Value &); | |
CJS_PropValue(v8::Isolate* isolate); | |
~CJS_PropValue(); | |
public: | |
FX_BOOL IsSetting(); | |
FX_BOOL IsGetting(); | |
void operator<<(int ); | |
void operator>>(int &) const; | |
void operator<<(bool); | |
void operator>>(bool &) const; | |
void operator<<(double ); | |
void operator>>(double &) const; | |
void operator<<(CJS_Object *pObj); | |
void operator>>(CJS_Object *&ppObj) const; | |
void operator<<(CFX_ByteString); | |
void operator>>(CFX_ByteString &) const; | |
void operator<<(CFX_WideString); | |
void operator>>(CFX_WideString &) const; | |
void operator<<(FX_LPCWSTR c_string); | |
void operator<<(JSFXObject); | |
void operator>>(JSFXObject &) const; | |
void operator>>(CJS_Array &array) const; | |
void operator<<(CJS_Array &array); | |
void operator<<(CJS_Date &date); | |
void operator>>(CJS_Date &date) const; | |
operator v8::Handle<v8::Value>() const; | |
void StartSetting(); | |
void StartGetting(); | |
private: | |
FX_BOOL m_bIsSetting; | |
}; | |
class CJS_Array | |
{ | |
public: | |
CJS_Array(v8::Isolate* isolate); | |
virtual ~CJS_Array(); | |
void Attach(v8::Handle<v8::Array> pArray); | |
void GetElement(unsigned index,CJS_Value &value); | |
void SetElement(unsigned index,CJS_Value value); | |
int GetLength(); | |
FX_BOOL IsAttached(); | |
operator v8::Handle<v8::Array>(); | |
v8::Isolate* GetIsolate() {return m_isolate;} | |
private: | |
v8::Handle<v8::Array> m_pArray; | |
v8::Isolate* m_isolate; | |
}; | |
class CJS_Date | |
{ | |
friend class CJS_Value; | |
public: | |
CJS_Date(v8::Isolate* isolate); | |
CJS_Date(v8::Isolate* isolate,double dMsec_time); | |
CJS_Date(v8::Isolate* isolate,int year, int mon, int day,int hour, int min, int sec); | |
virtual ~CJS_Date(); | |
void Attach(v8::Handle<v8::Value> pDate); | |
int GetYear(); | |
void SetYear(int iYear); | |
int GetMonth(); | |
void SetMonth(int iMonth); | |
int GetDay(); | |
void SetDay(int iDay); | |
int GetHours(); | |
void SetHours(int iHours); | |
int GetMinutes(); | |
void SetMinutes(int minutes); | |
int GetSeconds(); | |
void SetSeconds(int seconds); | |
operator v8::Handle<v8::Value>(); | |
operator double() const; | |
CFX_WideString ToString() const; | |
static double MakeDate(int year, int mon, int mday,int hour, int min, int sec,int ms); | |
FX_BOOL IsValidDate(); | |
protected: | |
v8::Handle<v8::Value> m_pDate; | |
v8::Isolate* m_isolate; | |
}; | |
#endif //_JS_VALUE_H_ | |