blob: ac90e62b0d7cd986624ec2124dcef5c36795c246 [file] [log] [blame]
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -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.
Lei Zhanga6d9f0e2015-06-13 00:48:38 -07004
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07005// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
Tom Sepez19922bb2015-05-28 13:23:12 -07007#ifndef FPDFSDK_INCLUDE_JAVASCRIPT_APP_H_
8#define FPDFSDK_INCLUDE_JAVASCRIPT_APP_H_
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07009
Tom Sepez9a3f8122015-04-07 15:35:48 -070010#include "JS_Define.h"
11
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070012class CJS_Runtime;
13
14/* ---------------------------- TimerObj ---------------------------- */
15
16class CJS_Timer;
17
18class TimerObj : public CJS_EmbedObj
19{
20public:
21 TimerObj(CJS_Object* pJSObject);
22 virtual ~TimerObj();
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070023
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070024public:
25 void SetTimer(CJS_Timer* pTimer);
26 CJS_Timer* GetTimer() const;
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070027
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070028private:
29 CJS_Timer* m_pTimer;
30};
31
32class CJS_TimerObj : public CJS_Object
33{
34public:
35 CJS_TimerObj(JSFXObject pObject) : CJS_Object(pObject) {}
36 virtual ~CJS_TimerObj(){}
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070037
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070038 DECLARE_JS_CLASS(CJS_TimerObj);
39};
40
41
42// struct APP_MENUITEM_ARRAY;
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070043//
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070044// struct APP_MENUITEM
45// {
46// APP_MENUITEM() : oSubMenu(NULL), cName(L""), cReturn(L""), bMarked(false), bEnabled(true)
47// {
48// }
49// CFX_WideString cName;
50// CFX_WideString cReturn;
51// APP_MENUITEM_ARRAY* oSubMenu;
52// bool bMarked;
53// bool bEnabled;
54// };
55
56// struct APP_MENUITEM_ARRAY
57// {
58// APP_MENUITEM_ARRAY() : m_hMenu(NULL), pContents(NULL), nSize(0)
59// {
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070060//
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070061// }
62// APP_MENUITEM * pContents;
63// HMENU m_hMenu;
64// int nSize;
65// };
66
67// struct APP_MENU;
68// struct APP_MENU_ARRAY
69// {
70// APP_MENU_ARRAY():
71// pContent(NULL)
72// {
73// }
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070074//
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070075// APP_MENU* pContent;
76// };
77
78// struct APP_MENU
79// {
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070080// APP_MENU():bSubMenu(false),
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070081// SubMenuItems(NULL),
82// cwMenuItemName(L""),
83// hMenu(NULL),
84// iSize(0)
85// {
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070086//
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070087// }
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070088//
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070089// APP_MENU(CFX_WideString &cwName):
90// cwMenuItemName(cwName),
91// bSubMenu(false),
92// SubMenuItems(NULL),
93// hMenu(NULL),
94// iSize(0)
95// {
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070096//
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070097// }
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070098//
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070099// CFX_WideString cwMenuItemName;
Lei Zhanga6d9f0e2015-06-13 00:48:38 -0700100// bool bSubMenu;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700101// APP_MENU_ARRAY* SubMenuItems;
102// int iSize;
103// HMENU hMenu;
104// };
105
106class app : public CJS_EmbedObj
107{
108public:
109 app(CJS_Object * pJSObject);
110 virtual ~app();
111
112public:
Tom Sepez2f3dfef2015-03-02 15:35:26 -0800113 FX_BOOL activeDocs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
114 FX_BOOL calculate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
115 FX_BOOL formsVersion(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
116 FX_BOOL fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
117 FX_BOOL fullscreen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
118 FX_BOOL language(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
119 FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
120 FX_BOOL platform(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
121 FX_BOOL runtimeHighlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
122 FX_BOOL viewerType(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
123 FX_BOOL viewerVariation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
Lei Zhanga6d9f0e2015-06-13 00:48:38 -0700124 FX_BOOL viewerVersion(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700125
126
Tom Sepez2f3dfef2015-03-02 15:35:26 -0800127 FX_BOOL alert(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
128 FX_BOOL beep(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
129 FX_BOOL browseForDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
130 FX_BOOL clearInterval(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
131 FX_BOOL clearTimeOut(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
132 FX_BOOL execDialog(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
133 FX_BOOL execMenuItem(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
134 FX_BOOL findComponent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
135 FX_BOOL goBack(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
136 FX_BOOL goForward(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
137 FX_BOOL launchURL(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
138 FX_BOOL mailMsg(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
139 FX_BOOL newFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
140 FX_BOOL newDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
141 FX_BOOL openDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
142 FX_BOOL openFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
143 FX_BOOL popUpMenuEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
144 FX_BOOL popUpMenu(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
145 FX_BOOL response(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
146 FX_BOOL setInterval(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
147 FX_BOOL setTimeOut(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700148
149private:
Lei Zhanga6d9f0e2015-06-13 00:48:38 -0700150// FX_DWORD AppGetTickCount();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700151 void TimerProc(CJS_Timer* pTimer);
152 void RunJsScript(CJS_Runtime * pRuntime,const CFX_WideString & wsScript);
153// void ParsePopupMenuObj(APP_MENUITEM * ppMenuItem,JSObject * pObj);
154// void DeleteMenuItems(APP_MENUITEM_ARRAY * pMenuItems);
155// void AddMenuItem(APP_MENUITEM_ARRAY * pMenuItems, HMENU hMenu, MENUITEMINFO MenuItemInfo);
156// void InitMenuItemInfo(MENUITEMINFO& MenuItemInfo);
157// void DestroyPopUpMenu();
158
159// void ParserMenuItem(APP_MENU* pHead, const CJS_Parameters&params);
160// void AddItemToMenu(APP_MENU* pHead, HMENU hMenu, MENUITEMINFO MenuItemInfo);
161// void DestroyMenuItems(APP_MENU* pHead);
162
163public:
164 static CFX_WideString SysPathToPDFPath(const CFX_WideString& sOldPath);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700165
166private:
167
Lei Zhanga6d9f0e2015-06-13 00:48:38 -0700168 bool m_bCalculate;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700169 bool m_bRuntimeHighLight;
170
171 CFX_ArrayTemplate<CJS_Timer*> m_aTimer;
172// APP_MENU* m_pMenuHead;
Lei Zhanga6d9f0e2015-06-13 00:48:38 -0700173
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700174public:
175// static CReader_App* s_App;
176};
177
178class CJS_App : public CJS_Object
179{
180public:
181 CJS_App(JSFXObject pObject) : CJS_Object(pObject) {};
182 virtual ~CJS_App(void){};
183
184 DECLARE_JS_CLASS(CJS_App);
185
186 JS_STATIC_PROP(activeDocs, app);
187 JS_STATIC_PROP(calculate, app);
188 JS_STATIC_PROP(formsVersion, app);
189 JS_STATIC_PROP(fs, app);
190 JS_STATIC_PROP(fullscreen, app);
191 JS_STATIC_PROP(language, app);
192 JS_STATIC_PROP(media, app);
193 JS_STATIC_PROP(platform, app);
194 JS_STATIC_PROP(runtimeHighlight, app);
195 JS_STATIC_PROP(viewerType, app);
196 JS_STATIC_PROP(viewerVariation, app);
Lei Zhanga6d9f0e2015-06-13 00:48:38 -0700197 JS_STATIC_PROP(viewerVersion, app);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700198
199 JS_STATIC_METHOD(alert, app);
200 JS_STATIC_METHOD(beep, app);
201 JS_STATIC_METHOD(browseForDoc, app);
202 JS_STATIC_METHOD(clearInterval, app);
203 JS_STATIC_METHOD(clearTimeOut, app);
204 JS_STATIC_METHOD(execDialog, app);
205 JS_STATIC_METHOD(execMenuItem, app);
206 JS_STATIC_METHOD(findComponent, app);
207 JS_STATIC_METHOD(goBack, app);
208 JS_STATIC_METHOD(goForward, app);
209 JS_STATIC_METHOD(launchURL, app);
210 JS_STATIC_METHOD(mailMsg, app);
211 JS_STATIC_METHOD(newFDF, app);
212 JS_STATIC_METHOD(newDoc, app);
213 JS_STATIC_METHOD(openDoc, app);
214 JS_STATIC_METHOD(openFDF, app);
215 JS_STATIC_METHOD(popUpMenuEx, app);
216 JS_STATIC_METHOD(popUpMenu, app);
217 JS_STATIC_METHOD(response, app);
218 JS_STATIC_METHOD(setInterval, app);
219 JS_STATIC_METHOD(setTimeOut, app);
220
221};
222
Tom Sepez19922bb2015-05-28 13:23:12 -0700223#endif // FPDFSDK_INCLUDE_JAVASCRIPT_APP_H_