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 _APP_H_
8#define _APP_H_
9
10class CJS_Runtime;
11
12/* ---------------------------- TimerObj ---------------------------- */
13
14class CJS_Timer;
15
16class TimerObj : public CJS_EmbedObj
17{
18public:
19	TimerObj(CJS_Object* pJSObject);
20	virtual ~TimerObj();
21
22public:
23	void			SetTimer(CJS_Timer* pTimer);
24	CJS_Timer*		GetTimer() const;
25
26private:
27	CJS_Timer*		m_pTimer;
28};
29
30class CJS_TimerObj : public CJS_Object
31{
32public:
33	CJS_TimerObj(JSFXObject pObject) : CJS_Object(pObject) {}
34	virtual ~CJS_TimerObj(){}
35
36	DECLARE_JS_CLASS(CJS_TimerObj);
37};
38
39
40// struct APP_MENUITEM_ARRAY;
41//
42// struct APP_MENUITEM
43// {
44// 	APP_MENUITEM() : oSubMenu(NULL), cName(L""), cReturn(L""), bMarked(false), bEnabled(true)
45// 	{
46// 	}
47// 	CFX_WideString cName;
48// 	CFX_WideString cReturn;
49// 	APP_MENUITEM_ARRAY* oSubMenu;
50// 	bool bMarked;
51// 	bool bEnabled;
52// };
53
54// struct APP_MENUITEM_ARRAY
55// {
56// 	APP_MENUITEM_ARRAY() : m_hMenu(NULL), pContents(NULL), nSize(0)
57// 	{
58//
59// 	}
60// 	APP_MENUITEM * pContents;
61// 	HMENU m_hMenu;
62// 	int	nSize;
63// };
64
65// struct APP_MENU;
66// struct APP_MENU_ARRAY
67// {
68// 	APP_MENU_ARRAY():
69//     pContent(NULL)
70// 	{
71// 	}
72//
73// 	APP_MENU* pContent;
74// };
75
76// struct APP_MENU
77// {
78// 	APP_MENU():bSubMenu(false),
79// 	SubMenuItems(NULL),
80// 	cwMenuItemName(L""),
81// 	hMenu(NULL),
82// 	iSize(0)
83// 	{
84//
85// 	}
86//
87// 	APP_MENU(CFX_WideString &cwName):
88// 	cwMenuItemName(cwName),
89// 	bSubMenu(false),
90// 	SubMenuItems(NULL),
91// 	hMenu(NULL),
92// 	iSize(0)
93// 	{
94//
95// 	}
96//
97// 	CFX_WideString cwMenuItemName;
98// 	bool bSubMenu;
99// 	APP_MENU_ARRAY* SubMenuItems;
100// 	int iSize;
101// 	HMENU hMenu;
102// };
103
104class app : public CJS_EmbedObj
105{
106public:
107	app(CJS_Object * pJSObject);
108	virtual ~app();
109
110public:
111	FX_BOOL						activeDocs(OBJ_PROP_PARAMS);
112	FX_BOOL						calculate(OBJ_PROP_PARAMS);
113	FX_BOOL						formsVersion(OBJ_PROP_PARAMS);
114	FX_BOOL						fs(OBJ_PROP_PARAMS);
115	FX_BOOL						fullscreen(OBJ_PROP_PARAMS);
116	FX_BOOL						language(OBJ_PROP_PARAMS);
117	FX_BOOL						media(OBJ_PROP_PARAMS);
118	FX_BOOL						platform(OBJ_PROP_PARAMS);
119	FX_BOOL						runtimeHighlight(OBJ_PROP_PARAMS);
120	FX_BOOL						viewerType(OBJ_PROP_PARAMS);
121	FX_BOOL						viewerVariation(OBJ_PROP_PARAMS);
122	FX_BOOL						viewerVersion(OBJ_PROP_PARAMS);
123
124
125	FX_BOOL						alert(OBJ_METHOD_PARAMS);
126	FX_BOOL						beep(OBJ_METHOD_PARAMS);
127	FX_BOOL						browseForDoc(OBJ_METHOD_PARAMS);
128	FX_BOOL						clearInterval(OBJ_METHOD_PARAMS);
129	FX_BOOL						clearTimeOut(OBJ_METHOD_PARAMS);
130	FX_BOOL						execDialog(OBJ_METHOD_PARAMS);
131	FX_BOOL						execMenuItem(OBJ_METHOD_PARAMS);
132	FX_BOOL						findComponent(OBJ_METHOD_PARAMS);
133	FX_BOOL						goBack(OBJ_METHOD_PARAMS);
134	FX_BOOL						goForward(OBJ_METHOD_PARAMS);
135	FX_BOOL						launchURL(OBJ_METHOD_PARAMS);
136	FX_BOOL						mailMsg(OBJ_METHOD_PARAMS);
137	FX_BOOL						newFDF(OBJ_METHOD_PARAMS);
138	FX_BOOL						newDoc(OBJ_METHOD_PARAMS);
139	FX_BOOL						openDoc(OBJ_METHOD_PARAMS);
140	FX_BOOL						openFDF(OBJ_METHOD_PARAMS);
141	FX_BOOL						popUpMenuEx(OBJ_METHOD_PARAMS);
142	FX_BOOL						popUpMenu(OBJ_METHOD_PARAMS);
143	FX_BOOL						response(OBJ_METHOD_PARAMS);
144	FX_BOOL						setInterval(OBJ_METHOD_PARAMS);
145	FX_BOOL						setTimeOut(OBJ_METHOD_PARAMS);
146
147private:
148//	FX_DWORD					AppGetTickCount();
149	void						TimerProc(CJS_Timer* pTimer);
150	void						RunJsScript(CJS_Runtime * pRuntime,const CFX_WideString & wsScript);
151//	void						ParsePopupMenuObj(APP_MENUITEM * ppMenuItem,JSObject * pObj);
152//	void						DeleteMenuItems(APP_MENUITEM_ARRAY * pMenuItems);
153// 	void						AddMenuItem(APP_MENUITEM_ARRAY * pMenuItems, HMENU hMenu, MENUITEMINFO MenuItemInfo);
154// 	void						InitMenuItemInfo(MENUITEMINFO& MenuItemInfo);
155// 	void						DestroyPopUpMenu();
156
157// 	void						ParserMenuItem(APP_MENU* pHead, const CJS_Parameters&params);
158// 	void						AddItemToMenu(APP_MENU* pHead, HMENU hMenu, MENUITEMINFO MenuItemInfo);
159// 	void						DestroyMenuItems(APP_MENU* pHead);
160
161public:
162	static CFX_WideString		SysPathToPDFPath(const CFX_WideString& sOldPath);
163	static CFX_WideString		PDFPathToSysPath(const CFX_WideString& sOldPath);
164	static CFX_WideString		RelativePathToSysPath(const CFX_WideString& sOldPath, const CFX_WideString& sFilePath);
165
166
167private:
168
169	bool						m_bCalculate;
170	CJS_Runtime*				m_pRuntime;
171	bool						m_bRuntimeHighLight;
172
173	CFX_ArrayTemplate<CJS_Timer*>	m_aTimer;
174//	APP_MENU*					m_pMenuHead;
175
176public:
177//	static CReader_App* s_App;
178};
179
180class CJS_App : public CJS_Object
181{
182public:
183	CJS_App(JSFXObject  pObject) : CJS_Object(pObject) {};
184	virtual ~CJS_App(void){};
185
186	DECLARE_JS_CLASS(CJS_App);
187
188	JS_STATIC_PROP(activeDocs, app);
189	JS_STATIC_PROP(calculate, app);
190	JS_STATIC_PROP(formsVersion, app);
191	JS_STATIC_PROP(fs, app);
192	JS_STATIC_PROP(fullscreen, app);
193	JS_STATIC_PROP(language, app);
194	JS_STATIC_PROP(media, app);
195	JS_STATIC_PROP(platform, app);
196	JS_STATIC_PROP(runtimeHighlight, app);
197	JS_STATIC_PROP(viewerType, app);
198	JS_STATIC_PROP(viewerVariation, app);
199	JS_STATIC_PROP(viewerVersion, app);
200
201	JS_STATIC_METHOD(alert, app);
202	JS_STATIC_METHOD(beep, app);
203	JS_STATIC_METHOD(browseForDoc, app);
204	JS_STATIC_METHOD(clearInterval, app);
205	JS_STATIC_METHOD(clearTimeOut, app);
206	JS_STATIC_METHOD(execDialog, app);
207	JS_STATIC_METHOD(execMenuItem, app);
208	JS_STATIC_METHOD(findComponent, app);
209	JS_STATIC_METHOD(goBack, app);
210	JS_STATIC_METHOD(goForward, app);
211	JS_STATIC_METHOD(launchURL, app);
212	JS_STATIC_METHOD(mailMsg, app);
213	JS_STATIC_METHOD(newFDF, app);
214	JS_STATIC_METHOD(newDoc, app);
215	JS_STATIC_METHOD(openDoc, app);
216	JS_STATIC_METHOD(openFDF, app);
217	JS_STATIC_METHOD(popUpMenuEx, app);
218	JS_STATIC_METHOD(popUpMenu, app);
219	JS_STATIC_METHOD(response, app);
220	JS_STATIC_METHOD(setInterval, app);
221	JS_STATIC_METHOD(setTimeOut, app);
222
223};
224
225#endif //_APP_H_
226