Add FX_OVERRIDE and use it for virtual functions of FX_FINAL classes.
[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 _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
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:
79         void push_back(TYPE newElement){CFX_ArrayTemplate<TYPE>::Add(newElement);}
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
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