1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JavaScript.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/IJavaScript.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Define.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Object.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Value.h"
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/Document.h"
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_EventHandler.h"
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Context.h"
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Runtime.h"
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/app.h"
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/Field.h"
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/Icon.h"
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/Field.h"
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic v8::Isolate* GetIsolate(IFXJS_Context* cc)
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context *)cc;
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pRuntime->GetIsolate();
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_CONST(CJS_PrintParamsObj)
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_CONST()
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_PROP(CJS_PrintParamsObj)
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_PROP()
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_METHOD(CJS_PrintParamsObj)
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_METHOD()
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIMPLEMENT_JS_CLASS(CJS_PrintParamsObj, PrintParamsObj)
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovPrintParamsObj::PrintParamsObj(CJS_Object* pJSObject)
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov: CJS_EmbedObj(pJSObject)
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bUI = TRUE;
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	nStart = 0;
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	nEnd = 0;
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bSilent = FALSE;
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bShrinkToFit = FALSE;
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bPrintAsImage = FALSE;
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bReverse = FALSE;
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bAnnotations = TRUE;
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------- Document ---------------------- */
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define MINWIDTH  5.0f
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define MINHEIGHT 5.0f
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_CONST(CJS_Document)
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_CONST()
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_PROP(CJS_Document)
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(ADBE)
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(author)
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(baseURL)
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(bookmarkRoot)
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(calculate)
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(Collab)
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(creationDate)
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(creator)
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(delay)
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(dirty)
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(documentFileName)
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(external)
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(filesize)
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(icons)
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(info)
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(keywords)
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(layout)
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(media)
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(modDate)
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(mouseX)
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(mouseY)
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(numFields)
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(numPages)
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(pageNum)
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(pageWindowRect)
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(path)
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(producer)
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(subject)
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(title)
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(zoom)
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(zoomType)
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_PROP()
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_METHOD(CJS_Document)
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(addAnnot,0)
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(addField, 4)
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(addLink, 0)
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(addIcon, 0)
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(calculateNow, 0)
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(closeDoc, 0)
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(createDataObject, 0)
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(deletePages, 2)
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(exportAsText, 3)
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(exportAsFDF, 6)
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(exportAsXFDF, 5)
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(extractPages, 3)
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getAnnot, 0)
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getAnnots, 2)
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getAnnot3D, 2)
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getAnnots3D, 1)
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getField, 1)
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getIcon, 0)
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getLinks, 0)
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getNthFieldName, 1)
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getOCGs, 0)
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getPageBox, 0)
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getPageNthWord, 3)
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getPageNthWordQuads, 2)
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getPageNumWords, 1)
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getPrintParams, 0)
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(getURL, 2)
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(importAnFDF, 1)
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(importAnXFDF, 1)
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(importTextData, 2)
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(insertPages, 4)
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(mailForm, 6)
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(print, 9)
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(removeField, 1)
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(replacePages, 4)
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(resetForm, 1)
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(removeIcon, 0)
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(saveAs, 5)
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(submitForm, 23)
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(mailDoc, 0)
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_METHOD()
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIMPLEMENT_JS_CLASS(CJS_Document, Document)
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CJS_Document::InitInstance(IFXJS_Context* cc)
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	Document* pDoc = (Document*)GetEmbedObject();
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pDoc != NULL);
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pDoc->AttachDoc(pContext->GetReaderDocument());
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pDoc->SetIsolate(pContext->GetJSRuntime()->GetIsolate());
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* --------------------------------- Document --------------------------------- */
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDocument::Document(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject),
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_cwBaseURL(L""),
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pIconTree(NULL),
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pDocument(NULL),
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bDelay(FALSE),
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_isolate(NULL)
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDocument::~Document()
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pIconTree)
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pIconTree->DeleteIconTree();
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete m_pIconTree;
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pIconTree = NULL;
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0; i<m_DelayData.GetSize(); i++)
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CJS_DelayData* pData = m_DelayData.GetAt(i))
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			delete pData;
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pData = NULL;
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_DelayData.SetAt(i, NULL);
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_DelayData.RemoveAll();
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_DelayAnnotData.RemoveAll();
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//the total number of fileds in document.
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::numFields(OBJ_PROP_PARAMS)
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!vp.IsGetting()) return FALSE;
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov   	CPDFSDK_InterForm *pInterForm = m_pDocument->GetInterForm();
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_InterForm *pPDFForm = pInterForm->GetInterForm();
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pPDFForm != NULL);
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vp << (int)pPDFForm->CountFields();
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::dirty(OBJ_PROP_PARAMS)
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_pDocument->GetChangeMark())
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			vp << true;
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			vp << false;
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bool bChanged = false;
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> bChanged;
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (bChanged)
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pDocument->SetChangeMark();
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pDocument->ClearChangeMark();
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::ADBE(OBJ_PROP_PARAMS)
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp.SetNull();
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::pageNum(OBJ_PROP_PARAMS)
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CPDFSDK_PageView* pPageView = m_pDocument->GetCurrentView())
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			vp << pPageView->GetPageIndex();
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		int iPageCount = m_pDocument->GetPageCount();
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		int iPageNum = 0;
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> iPageNum;
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(!pEnv)
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return FALSE;
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (iPageNum >= 0 && iPageNum < iPageCount)
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			 pEnv->JS_docgotoPage(iPageNum);
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else if (iPageNum >= iPageCount)
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			 pEnv->JS_docgotoPage(iPageCount-1);
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else if (iPageNum < 0)
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			 pEnv->JS_docgotoPage(0);
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	return TRUE;
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::ParserParams(JSObject* pObj,CJS_AnnotObj& annotobj)
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::addAnnot(OBJ_METHOD_PARAMS)
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	return TRUE;
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::addField(OBJ_METHOD_PARAMS)
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//Doesn't support.
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//exports form fields as a tab-delimited text file to a local hard disk.
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment: need reader support
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note : watch the third parameter:cPath, for what case it can be safely saved?
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//int CPDFSDK_InterForm::ExportAsText(FX_BOOL bNoPassword,StringArray aFields,String cPath);
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//return value, int the index of the parameters illegal, the index is based on 1.
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::exportAsText(OBJ_METHOD_PARAMS)
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//exports form fields as a fdf file to the local hard drive
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment: need reader supports
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note:the last parameter hasn't been confirmed.because the previous one blocks the way.
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//int CPDFSDK_Document::ExportAsFDF(FX_BOOL bAllFields,BOOL bNoPassword,StringArray aFields,FX_BOOL bFlags,String cPath,FX_BOOL bAnnotations);
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::exportAsFDF(OBJ_METHOD_PARAMS)
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bAllFields = params.size() > 0 ? (FX_BOOL)params[0] : FALSE;
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bNoPassWord = params.size() > 1 ? (FX_BOOL)params[1] : TRUE;
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bWhole = params.size() > 2 ? (params[2].GetType() == VT_null) : TRUE;
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Array arrayFileds(isolate);
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!bWhole)
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		arrayFileds.Attach(params[2]);
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//FX_BOOL bFlags = params.size() > 3 ? (FX_BOOL)params[3] : FALSE;
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_WideString swFilePath = params.size() > 4 ? (FX_LPCWSTR)params[4].operator CFX_WideString() : (FX_LPCWSTR)L"";
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (swFilePath.IsEmpty())
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swFilePath = pEnv->JS_fieldBrowse();
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(swFilePath.IsEmpty())
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return TRUE;
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swFilePath = app::PDFPathToSysPath(swFilePath);
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pDocument->SetFocusAnnot(NULL);
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDFSDK_InterForm* pInterForm= (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pPDFForm != NULL);
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_PtrArray aFields;
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (bWhole)
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (int j=0,jsz=pPDFForm->CountFields(); j<jsz; j++)
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			aFields.Add(pPDFForm->GetField(j));
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (int i=0,isz=arrayFileds.GetLength(); i<isz; i++)
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Value valName(isolate);
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			arrayFileds.GetElement(i,valName);
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CFX_WideString swName = valName.operator CFX_WideString();
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			for (int j=0, jsz=pPDFForm->CountFields(swName); j<jsz; j++)
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				aFields.Add(pPDFForm->GetField(j, swName));
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_PtrArray fields;
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0,sz=aFields.GetSize(); i<sz; i++)
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	    CPDF_FormField* pField = (CPDF_FormField*)aFields[i];
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!bAllFields)
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (pField->GetValue() == L"")
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				continue;
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (bNoPassWord)
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (pField->GetFieldFlags() & 0x2000)
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				continue;
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        fields.Add((void*)pField);
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return pInterForm->ExportFieldsToFDFFile(swFilePath, fields, TRUE);
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//exports form fields an XFDF file to the local hard drive
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment: need reder supports
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note:the last parameter can't be test
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//int CPDFSDK_Document::ExportAsXFDF(FX_BOOL bAllFields,FX_BOOL  bNoPassWord,StringArray aFields,String cPath,FX_BOOL bAnnoatations);
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::exportAsXFDF(OBJ_METHOD_PARAMS)
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//Maps a field object in PDF document to a JavaScript variable
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment:
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note: the paremter cName, this is clue how to treat if the cName is not a valiable filed name in this document
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getField(OBJ_METHOD_PARAMS)
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() < 1) return FALSE;
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString wideName = params[0].operator CFX_WideString();
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pPDFForm != NULL);
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pPDFForm->CountFields(wideName) <= 0)
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vRet.SetNull();
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JSFXObject  pFieldObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Field"));
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Field * pJSField = (CJS_Field*)JS_GetPrivate(isolate,pFieldObj);
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pJSField != NULL);
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	Field * pField = (Field *)pJSField->GetEmbedObject();
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pField != NULL);
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pField->AttachField(this, wideName);
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet = pJSField;
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//Gets the name of the nth field in the document
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment:
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note: the parameter nIndex, if it is not available
465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
466ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getNthFieldName(OBJ_METHOD_PARAMS)
467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nIndex = params.size() > 0 ? (int)params[0] : -1;
471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nIndex == -1) return FALSE;
472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pPDFForm != NULL);
478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_FormField* pField = pPDFForm->GetField(nIndex);
480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pField)
481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet = pField->GetFullName();
484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//imports the specified fdf file.
488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comments: need reader suppport
489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note:once the cpath is illigl  then a file dialog box pops up in order to ask user to chooose the file
490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//int CPDFSDK_Document::importAnFDF(String cPath);
491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
492ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::importAnFDF(OBJ_METHOD_PARAMS)
493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) return FALSE;
500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swPath;
503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() > 0)
505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swPath = params[0];
506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (swPath.IsEmpty())
508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swPath = pEnv->JS_fieldBrowse();
511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(swPath.IsEmpty())
512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return TRUE;
513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swPath = app::PDFPathToSysPath(swPath);
517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pDocument->SetFocusAnnot(NULL);
520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pInterForm->ImportFormFromFDFFile(swPath, TRUE))
525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	m_pDocument->SetChangeMark();
528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	ASSERT(pEnv != NULL);
530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	IUndo* pUndo = IUndo::GetUndo(pEnv);
531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	ASSERT(pUndo != NULL);
532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	pUndo->Reset(m_pDocument);
533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//imports and specified XFDF file containing XML form data
538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment: need reader supports
539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note: same as up
540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//int CPDFSDK_Document::importAnFDF(String cPath)
541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
542ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::importAnXFDF(OBJ_METHOD_PARAMS)
543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) return FALSE;
550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//imports and specified text file
555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//commnet: need reader supports
556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note: same as up,when nRow is not rational,adobe is dumb for it.
557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//int CPDFSDK_Document::importTextData(String cPath,int nRow);
558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
559ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::importTextData(OBJ_METHOD_PARAMS)
560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) return FALSE;
567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//exports the form data and mails the resulting fdf file as an attachment to all recipients.
572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment: need reader supports
573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note:
574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//int CPDFSDK_Document::mailForm(FX_BOOL bUI,String cto,string ccc,string cbcc,string cSubject,string cms);
575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
576ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::mailForm(OBJ_METHOD_PARAMS)
577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iLength = params.size();
583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bUI = iLength > 0 ? (FX_BOOL)params[0] : TRUE;
585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cTo = iLength > 1 ? (FX_LPCWSTR)params[1].operator CFX_WideString() : (FX_LPCWSTR)L"";
586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cCc = iLength > 2 ? (FX_LPCWSTR)params[2].operator CFX_WideString() : (FX_LPCWSTR)L"";
587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cBcc = iLength > 3 ? (FX_LPCWSTR)params[3].operator CFX_WideString() : (FX_LPCWSTR)L"";
588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cSubject = iLength > 4 ? (FX_LPCWSTR)params[4].operator CFX_WideString() : (FX_LPCWSTR)L"";
589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cMsg = iLength > 5 ? (FX_LPCWSTR)params[5].operator CFX_WideString() : (FX_LPCWSTR)L"";
590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteTextBuf textBuf;
595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pInterForm->ExportFormToFDFTextBuf(textBuf))
596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFDoc_Environment* pEnv = pContext->GetReaderApp();
601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pEnv != NULL);
602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pRuntime->BeginBlock();
606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    pEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI, (FX_LPCWSTR)cTo, (FX_LPCWSTR)cSubject, (FX_LPCWSTR)cCc, (FX_LPCWSTR)cBcc, (FX_LPCWSTR)cMsg);
607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pRuntime->EndBlock();
608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	return TRUE;
609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
611ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::print(OBJ_METHOD_PARAMS)
612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bUI = TRUE;
619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nStart = 0;
620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nEnd = 0;
621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bSilent = FALSE;
622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bShrinkToFit = FALSE;
623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bPrintAsImage = FALSE;
624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bReverse = FALSE;
625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bAnnotations = FALSE;
626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nlength = params.size();
628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(nlength ==9)
629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (params[8].GetType() == VT_fxobject)
631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JSFXObject pObj = (JSFXObject)params[8];
633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"PrintParamsObj"))
635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					if (CJS_Object* pJSObj = (CJS_Object*)params[8])
637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							if (PrintParamsObj* pprintparamsObj = (PrintParamsObj*)pJSObj->GetEmbedObject())
639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							{
640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								bUI = pprintparamsObj->bUI;
641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								nStart = pprintparamsObj->nStart;
642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								nEnd = pprintparamsObj->nEnd;
643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								bSilent = pprintparamsObj->bSilent;
644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								bShrinkToFit = pprintparamsObj->bShrinkToFit;
645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								bPrintAsImage = pprintparamsObj->bPrintAsImage;
646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								bReverse = pprintparamsObj->bReverse;
647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								bAnnotations = pprintparamsObj->bAnnotations;
648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							}
649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(nlength >= 1)
657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			 bUI = params[0];
658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(nlength >= 2)
659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			 nStart = (int)params[1];
660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(nlength >= 3)
661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		    nEnd = (int)params[2];
662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(nlength >= 4)
663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bSilent = params[3];
664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(nlength >= 5)
665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		    bShrinkToFit = params[4];
666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(nlength >= 6)
667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bPrintAsImage = params[5];
668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(nlength >= 7)
669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bReverse = params[6];
670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(nlength >= 8)
671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bAnnotations = params[7];
672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	ASSERT(m_pDocument != NULL);
675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	if (CPDFDoc_Environment* pEnv = m_pDocument->GetEnv())
677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	{
678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pEnv->JS_docprint(bUI, nStart, nEnd, bSilent, bShrinkToFit, bPrintAsImage, bReverse, bAnnotations);
679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 		return TRUE;
680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	}
681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//removes the specified field from the document.
685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment:
686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note: if the filed name is not retional, adobe is dumb for it.
687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
688ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::removeField(OBJ_METHOD_PARAMS)
689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM))) return FALSE;
694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() < 1)
696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString sFieldName = params[0].operator CFX_WideString();
699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_PtrArray widgets;
704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pInterForm->GetWidgets(sFieldName, widgets);
705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nSize = widgets.GetSize();
707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nSize > 0)
709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (int i=0; i<nSize; i++)
711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets[i];
713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ASSERT(pWidget != NULL);
714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Rect rcAnnot = pWidget->GetRect();
716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcAnnot.left -= 1;
717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcAnnot.bottom -= 1;
718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcAnnot.right += 1;
719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcAnnot.top += 1;
720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CFX_RectArray aRefresh;
722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			aRefresh.Add(rcAnnot);
723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Page* pPage = pWidget->GetPDFPage();
725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ASSERT(pPage != NULL);
726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage);
728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pPageView->DeleteAnnot(pWidget);
729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pPageView->UpdateRects(aRefresh);
731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->SetChangeMark();
733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//reset filed values within a document.
739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment:
740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note: if the fields names r not rational, aodbe is dumb for it.
741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
742ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::resetForm(OBJ_METHOD_PARAMS)
743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) return FALSE;
749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pPDFForm != NULL);
755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Array aName(isolate);
758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() > 0)
760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch (params[0].GetType())
762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		default:
764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			aName.Attach(params[0]);
765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case VT_string:
767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			aName.SetElement(0,params[0]);
768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_PtrArray aFields;
772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (int i=0,isz=aName.GetLength(); i<isz; i++)
774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Value valElement(isolate);
776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			aName.GetElement(i,valElement);
777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CFX_WideString swVal = valElement.operator CFX_WideString();
778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			for (int j=0,jsz=pPDFForm->CountFields(swVal); j<jsz; j++)
780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				aFields.Add((void*)pPDFForm->GetField(j,swVal));
782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (aFields.GetSize() > 0)
786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 			pPDFForm->ResetForm(aFields, TRUE, TRUE);
788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 			m_pDocument->SetChangeMark();
789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 		pPDFForm->ResetForm(TRUE);
795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 		m_pDocument->SetChangeMark();
796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
803ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::saveAs(OBJ_METHOD_PARAMS)
804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	m_pDocument->DoSaveAs();
811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
816ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::submitForm(OBJ_METHOD_PARAMS)
817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nSize = params.size();
823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nSize < 1) return FALSE;
824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString strURL;
826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bFDF = TRUE;
827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bEmpty = FALSE;
828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Array aFields(isolate);
830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Value v = params[0];
832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (v.GetType() == VT_string)
833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		strURL = params[0].operator CFX_WideString();
835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (nSize > 1)
836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bFDF = params[1];
837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (nSize > 2)
838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bEmpty = params[2];
839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (nSize > 3)
840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			aFields.Attach(params[3]);
841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (v.GetType() == VT_object)
843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JSObject pObj = (JSObject)params[0];
845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"cURL");
846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!pValue.IsEmpty())
847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			strURL = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue));
848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"bFDF");
849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bFDF = CJS_Value(isolate,pValue, GET_VALUE_TYPE(pValue));
850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"bEmpty");
851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bEmpty = CJS_Value(isolate,pValue, GET_VALUE_TYPE(pValue));
852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj,L"aFields");
853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			aFields.Attach(CJS_Value(isolate,pValue, GET_VALUE_TYPE(pValue)));
854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pPDFInterForm != NULL);
860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bAll = (aFields.GetLength() == 0);
862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (bAll && bEmpty)
864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Context* pContext = (CJS_Context*)cc;
866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pContext != NULL);
867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Runtime* pRuntime = pContext->GetJSRuntime();
868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pRuntime != NULL);
869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pPDFInterForm->CheckRequiredFields())
872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pRuntime->BeginBlock();
874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pInterForm->SubmitForm(strURL, FALSE);
875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pRuntime->EndBlock();
876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_PtrArray fieldObjects;
883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (int i=0,sz=aFields.GetLength(); i<sz; i++)
885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Value valName(isolate);
887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			aFields.GetElement(i, valName);
888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CFX_WideString sName = valName.operator CFX_WideString();
889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ASSERT(pPDFForm != NULL);
892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			for (int j=0, jsz=pPDFForm->CountFields(sName); j<jsz; j++)
894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_FormField* pField = pPDFForm->GetField(j, sName);
896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (!bEmpty && pField->GetValue().IsEmpty())
897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					continue;
898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fieldObjects.Add(pField);
900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Context* pContext = (CJS_Context*)cc;
904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pContext != NULL);
905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Runtime* pRuntime = pContext->GetJSRuntime();
906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pRuntime != NULL);
907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pPDFInterForm->CheckRequiredFields(&fieldObjects, TRUE))
910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pRuntime->BeginBlock();
912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pInterForm->SubmitFields(strURL, fieldObjects, TRUE, !bFDF);
913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pRuntime->EndBlock();
914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//////////////////////////////////////////////////////////////////////////////////////////////
922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid Document::AttachDoc(CPDFSDK_Document *pDoc)
924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pDocument = pDoc;
926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
928ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_Document * Document::GetReaderDoc()
929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pDocument;
931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
933ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::ExtractFileName(CPDFSDK_Document *pDoc,CFX_ByteString &strFileName)
934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
938ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::ExtractFolderName(CPDFSDK_Document *pDoc,CFX_ByteString &strFolderName)
939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
943ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::bookmarkRoot(OBJ_PROP_PARAMS)
944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
948ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::mailDoc(OBJ_METHOD_PARAMS)
949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bUI = TRUE;
953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cTo = L"";
954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cCc = L"";
955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cBcc = L"";
956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cSubject = L"";
957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cMsg = L"";
958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bUI = params.size()>=1?static_cast<FX_BOOL>(params[0]):TRUE;
961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cTo = params.size()>=2?(const wchar_t*)params[1].operator CFX_WideString():L"";
962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cCc = params.size()>=3?(const wchar_t*)params[2].operator CFX_WideString():L"";
963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cBcc = params.size()>=4?(const wchar_t*)params[3].operator CFX_WideString():L"";
964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cSubject = params.size()>=5?(const wchar_t*)params[4].operator CFX_WideString():L"";
965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cMsg = params.size()>=6?(const wchar_t*)params[5].operator CFX_WideString():L"";
966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(params.size()>=1 && params[0].GetType() == VT_object)
970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JSObject  pObj = (JSObject )params[0];
972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"bUI");
974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bUI = (int)CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue));
975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"cTo");
977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cTo = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"cCc");
980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cCc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"cBcc");
983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cBcc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"cSubject");
986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cSubject = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"cMsg");
989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cMsg = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pRuntime->BeginBlock();
999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFDoc_Environment* pEnv = pRuntime->GetReaderApp();
1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pEnv->JS_docmailForm(NULL, 0, bUI, (FX_LPCWSTR)cTo, (FX_LPCWSTR)cSubject, (FX_LPCWSTR)cCc, (FX_LPCWSTR)cBcc, (FX_LPCWSTR)cMsg);
1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pRuntime->EndBlock();
1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::author(OBJ_PROP_PARAMS)
1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDictionary)return FALSE;
1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << pDictionary->GetUnicodeText("Author");
1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE;
1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString csAuthor;
1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> csAuthor;
1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDictionary->SetAtString("Author", PDF_EncodeText(csAuthor));
1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->SetChangeMark();
1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::info(OBJ_PROP_PARAMS)
1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDictionary)return FALSE;
1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cwAuthor			= pDictionary->GetUnicodeText("Author");
1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cwTitle			= pDictionary->GetUnicodeText("Title");
1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cwSubject		= pDictionary->GetUnicodeText("Subject");
1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cwKeywords		= pDictionary->GetUnicodeText("Keywords");
1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cwCreator		= pDictionary->GetUnicodeText("Creator");
1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cwProducer		= pDictionary->GetUnicodeText("Producer");
1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cwCreationDate	= pDictionary->GetUnicodeText("CreationDate");
1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cwModDate		= pDictionary->GetUnicodeText("ModDate");
1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cwTrapped		= pDictionary->GetUnicodeText("Trapped");
1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!vp.IsSetting())
1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Context* pContext = (CJS_Context *)cc;
1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Runtime* pRuntime = pContext->GetJSRuntime();
1052ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JSFXObject  pObj = JS_NewFxDynamicObj(*pRuntime, pContext, -1);
1054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pObj, L"Author", cwAuthor);
1056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pObj, L"Title", cwTitle);
1057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pObj, L"Subject", cwSubject);
1058ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pObj, L"Keywords", cwKeywords);
1059ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pObj, L"Creator", cwCreator);
1060ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pObj, L"Producer", cwProducer);
1061ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pObj, L"CreationDate", cwCreationDate);
1062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pObj, L"ModDate", cwModDate);
1063ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pObj, L"Trapped", cwTrapped);
1064ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1065ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// It's to be compatible to non-standard info dictionary.
1066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_POSITION pos = pDictionary->GetStartPos();
1067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while(pos)
1068ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CFX_ByteString bsKey;
1070ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Object* pValueObj = pDictionary->GetNextElement(pos, bsKey);
1071ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CFX_WideString wsKey  = CFX_WideString::FromUTF8(bsKey);
1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if((pValueObj->GetType()==PDFOBJ_STRING) || (pValueObj->GetType()==PDFOBJ_NAME) )
1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					JS_PutObjectString(isolate,pObj, wsKey, pValueObj->GetUnicodeText());
1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if(pValueObj->GetType()==PDFOBJ_NUMBER)
1075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				JS_PutObjectNumber(isolate,pObj, wsKey, (float)pValueObj->GetNumber());
1076ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if(pValueObj->GetType()==PDFOBJ_BOOLEAN)
1077ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				JS_PutObjectBoolean(isolate,pObj, wsKey, (bool)pValueObj->GetInteger());
1078ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1079ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << pObj;
1081ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1082ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1083ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1084ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1085ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1086ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1087ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1089ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::creationDate(OBJ_PROP_PARAMS)
1090ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1091ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1092ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1093ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
1094ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDictionary)return FALSE;
1095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1096ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1097ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1098ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << pDictionary->GetUnicodeText("CreationDate");
1099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE;
1104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString csCreationDate;
1106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> csCreationDate;
1107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDictionary->SetAtString("CreationDate", PDF_EncodeText(csCreationDate));
1108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->SetChangeMark();
1109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1114ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::creator(OBJ_PROP_PARAMS)
1115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
1119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDictionary)return FALSE;
1120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << pDictionary->GetUnicodeText("Creator");
1124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE;
1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString csCreator;
1131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> csCreator;
1132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDictionary->SetAtString("Creator", PDF_EncodeText(csCreator));
1133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->SetChangeMark();
1134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1138ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::delay(OBJ_PROP_PARAMS)
1139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << m_bDelay;
1143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(m_pDocument != NULL);
1148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE;
1150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bool b;
1152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> b;
1153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_bDelay = b;
1155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_bDelay)
1157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			for (int i=0,sz=m_DelayData.GetSize(); i<sz; i++)
1159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				delete m_DelayData.GetAt(i);
1160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_DelayData.RemoveAll();
1162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
1164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			for (int i=0,sz=m_DelayData.GetSize(); i<sz; i++)
1166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (CJS_DelayData* pData = m_DelayData.GetAt(i))
1168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
1169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					Field::DoDelay(m_pDocument, pData);
1170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					delete m_DelayData.GetAt(i);
1171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
1172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_DelayData.RemoveAll();
1174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1180ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::keywords(OBJ_PROP_PARAMS)
1181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
1185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDictionary)return FALSE;
1186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << pDictionary->GetUnicodeText("Keywords");
1190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE;
1195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString csKeywords;
1197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> csKeywords;
1198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDictionary->SetAtString("Keywords", PDF_EncodeText(csKeywords));
1199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->SetChangeMark();
1200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1204ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::modDate(OBJ_PROP_PARAMS)
1205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
1209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDictionary)return FALSE;
1210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << pDictionary->GetUnicodeText("ModDate");
1214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE;
1219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString csmodDate;
1221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> csmodDate;
1222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDictionary->SetAtString("ModDate", PDF_EncodeText(csmodDate));
1223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->SetChangeMark();
1224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1228ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::producer(OBJ_PROP_PARAMS)
1229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
1233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDictionary)return FALSE;
1234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << pDictionary->GetUnicodeText("Producer");
1238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE;
1243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString csproducer;
1245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> csproducer;
1246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDictionary->SetAtString("Producer", PDF_EncodeText(csproducer));
1247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->SetChangeMark();
1248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1252ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::subject(OBJ_PROP_PARAMS)
1253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
1257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDictionary)return FALSE;
1258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << pDictionary->GetUnicodeText("Subject");
1262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE;
1267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString cssubject;
1269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> cssubject;
1270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDictionary->SetAtString("Subject", PDF_EncodeText(cssubject));
1271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->SetChangeMark();
1272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1276ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::title(OBJ_PROP_PARAMS)
1277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pDocument == NULL || m_pDocument->GetDocument() == NULL)
1281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
1284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDictionary)return FALSE;
1285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << pDictionary->GetUnicodeText("Title");
1289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE;
1294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString cstitle;
1296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> cstitle;
1297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDictionary->SetAtString("Title", PDF_EncodeText(cstitle));
1298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->SetChangeMark();
1299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1303ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::numPages(OBJ_PROP_PARAMS)
1304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(m_pDocument != NULL);
1308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << m_pDocument->GetPageCount();
1309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1317ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::external(OBJ_PROP_PARAMS)
1318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//In Chrome case,should always return true.
1320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vp << TRUE;
1321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1324ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::filesize(OBJ_PROP_PARAMS)
1325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!vp.IsGetting())return FALSE;
1327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	CFile file(m_pDocument->GetPath(), CFile::modeRead | CFile::typeBinary | CFile::shareDenyNone);
1331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	vp << (double)file.GetLength();
1332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	file.Close();
1333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if ( m_pDocument->GetPath().IsEmpty() == FALSE)
1335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_ByteString bsStr = CFX_ByteString::FromUnicode( m_pDocument->GetPath() );
1337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FILE * pFile = NULL;
1338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pFile = fopen( bsStr.GetBuffer( bsStr.GetLength() ), "rb" );
1339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if ( pFile )
1340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fseek( pFile, 0, SEEK_END );
1342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			long lSize = ftell( pFile );
1343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fclose( pFile );
1344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pFile = NULL;
1345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			vp << (FX_INT32)(lSize);
1347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return TRUE;
1348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vp << 0;
1352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1355ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::mouseX(OBJ_PROP_PARAMS)
1356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	return TRUE;
1358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1360ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::mouseY(OBJ_PROP_PARAMS)
1361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	return TRUE;
1363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1365ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::baseURL(OBJ_PROP_PARAMS)
1366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << m_cwBaseURL;
1370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> m_cwBaseURL;
1375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1379ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::calculate(OBJ_PROP_PARAMS)
1380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
1384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
1385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
1387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pInterForm->IsCalculateEnabled())
1389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			vp << true;
1390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
1391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			vp << false;
1392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bool bCalculate;
1396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> bCalculate;
1397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pInterForm->EnableCalculate(bCalculate);
1399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1404ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::documentFileName(OBJ_PROP_PARAMS)
1405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!vp.IsGetting())
1407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString wsFilePath = m_pDocument->GetPath();
1410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32 i = wsFilePath.GetLength() - 1;
1412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for ( ; i >= 0; i-- )
1413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if ( wsFilePath.GetAt( i ) == L'\\' || wsFilePath.GetAt( i ) == L'/' )
1415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if ( i >= 0 && i < wsFilePath.GetLength() - 1 )
1418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << ( wsFilePath.GetBuffer( wsFilePath.GetLength() ) + i + 1 );
1420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}else{
1421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << L"";
1422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1426ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString Document::ReversalStr(CFX_WideString cbFrom)
1427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	wchar_t* pFrom = NULL;
1429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iLenth = cbFrom.GetLength();
1430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	wchar_t* pResult = (wchar_t*)malloc((iLenth+1) * sizeof(wchar_t));
1431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	memset(pResult, 0, (iLenth+1));
1432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pFrom = (wchar_t*)cbFrom.GetBuffer(iLenth);
1433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i = 0; i < iLenth; i++)
1435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pResult[i] = *(pFrom + iLenth - i - 1);
1437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cbFrom.ReleaseBuffer();
1440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cbRet = CFX_WideString(pResult);
1441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	free(pResult);
1442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pResult = NULL;
1443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return cbRet;
1444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1446ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString Document::CutString(CFX_WideString cbFrom)
1447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	wchar_t* pFrom = NULL;
1449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iLenth = cbFrom.GetLength();
1450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	wchar_t* pResult = (wchar_t*)malloc((iLenth+1) * sizeof(wchar_t));
1451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	memset(pResult, 0, (iLenth+1));
1452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pFrom = (wchar_t*)cbFrom.GetBuffer(iLenth);
1453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i = 0; i < iLenth; i++)
1455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pFrom[i] == L'\\' || pFrom[i] == L'/')
1457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pResult[i] = pFrom[i];
1459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cbFrom.ReleaseBuffer();
1462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cbRet = CFX_WideString(pResult);
1463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	free(pResult);
1464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pResult = NULL;
1465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return cbRet;
1466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1468ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::path(OBJ_PROP_PARAMS)
1469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!vp.IsGetting()) return FALSE;
1471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vp << app::SysPathToPDFPath(m_pDocument->GetPath());
1473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1477ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::pageWindowRect(OBJ_PROP_PARAMS)
1478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1482ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::layout(OBJ_PROP_PARAMS)
1483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1487ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::addLink(OBJ_METHOD_PARAMS)
1488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	return TRUE;
1490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1492ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::closeDoc(OBJ_METHOD_PARAMS)
1493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1503ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getPageBox(OBJ_METHOD_PARAMS)
1504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	return TRUE;
1506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1509ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getAnnot(OBJ_METHOD_PARAMS)
1510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	return TRUE;
1512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1514ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getAnnots(OBJ_METHOD_PARAMS)
1515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet.SetNull();
1517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1520ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getAnnot3D(OBJ_METHOD_PARAMS)
1521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet.SetNull();
1523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1526ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getAnnots3D(OBJ_METHOD_PARAMS)
1527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet = VT_undefined;
1529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1532ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getOCGs(OBJ_METHOD_PARAMS)
1533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1537ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getLinks(OBJ_METHOD_PARAMS)
1538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect)
1543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (rect.left <= LinkRect.left
1545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	  && rect.top <= LinkRect.top
1546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	  && rect.right >= LinkRect.right
1547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	  && rect.bottom >= LinkRect.bottom)
1548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return true;
1549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return false;
1551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid IconTree::InsertIconElement(IconElement* pNewIcon)
1554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pNewIcon)return;
1556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pHead == NULL && m_pEnd == NULL)
1558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pHead = m_pEnd = pNewIcon;
1560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_iLength++;
1561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEnd->NextIcon = pNewIcon;
1565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEnd = pNewIcon;
1566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_iLength++;
1567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid IconTree::DeleteIconTree()
1571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pHead || !m_pEnd)return;
1573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IconElement* pTemp = NULL;
1575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	while(m_pEnd != m_pHead)
1576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pTemp = m_pHead;
1578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pHead = m_pHead->NextIcon;
1579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pTemp;
1580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	delete m_pEnd;
1583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pHead = NULL;
1584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEnd = NULL;
1585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint IconTree::GetLength()
1588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_iLength;
1590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1592ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIconElement* IconTree::operator [](int iIndex)
1593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (iIndex >= 0 && iIndex <= m_iLength)
1595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		IconElement* pTemp = m_pHead;
1597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (int i = 0; i < iIndex; i++)
1598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pTemp = pTemp->NextIcon;
1600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return pTemp;
1602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return NULL;
1605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid IconTree::DeleteIconElement(CFX_WideString swIconName)
1608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IconElement* pTemp = m_pHead;
1610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iLoopCount = m_iLength;
1611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i = 0; i < iLoopCount - 1; i++)
1612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pTemp == m_pEnd)
1614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_pHead->IconName == swIconName)
1617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pHead = m_pHead->NextIcon;
1619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			delete pTemp;
1620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_iLength--;
1621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pTemp = m_pHead;
1622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pTemp->NextIcon->IconName == swIconName)
1624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (pTemp->NextIcon == m_pEnd)
1626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				m_pEnd = pTemp;
1628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				delete pTemp->NextIcon;
1629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				m_iLength--;
1630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pTemp->NextIcon = NULL;
1631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			else
1633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				IconElement* pElement = pTemp->NextIcon;
1635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pTemp->NextIcon = pTemp->NextIcon->NextIcon;
1636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				delete pElement;
1637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				m_iLength--;
1638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pElement = NULL;
1639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			continue;
1642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pTemp = pTemp->NextIcon;
1645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1648ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::addIcon(OBJ_METHOD_PARAMS)
1649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() != 2)return FALSE;
1651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
1653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
1654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
1655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
1656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swIconName = params[0].operator CFX_WideString();
1658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JSFXObject pJSIcon = (JSFXObject)params[1];
1660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (JS_GetObjDefnID(pJSIcon) != JS_GetObjDefnID(*pRuntime, L"Icon")) return FALSE;
1661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_EmbedObj* pEmbedObj = ((CJS_Object*)params[1])->GetEmbedObject();
1663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pEmbedObj)return FALSE;
1664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	Icon* pIcon = (Icon*)pEmbedObj;
1665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pIconTree)
1667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pIconTree = new IconTree();
1668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IconElement* pNewIcon = new IconElement();
1670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pNewIcon->IconName = swIconName;
1671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pNewIcon->NextIcon = NULL;
1672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pNewIcon->IconStream = pIcon;
1673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pIconTree->InsertIconElement(pNewIcon);
1674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1677ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::icons(OBJ_PROP_PARAMS)
1678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsSetting())
1680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pIconTree)
1683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp.SetNull();
1685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Array Icons(m_isolate);
1689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IconElement* pIconElement = NULL;
1690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iIconTreeLength = m_pIconTree->GetLength();
1691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context *)cc;
1693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
1694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i = 0; i < iIconTreeLength; i++)
1696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pIconElement = (*m_pIconTree)[i];
1698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JSFXObject  pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Icon"));
1700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pObj.IsEmpty()) return FALSE;
1701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Icon * pJS_Icon = (CJS_Icon *)JS_GetPrivate(pObj);
1703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!pJS_Icon) return FALSE;
1704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
1706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!pIcon)return FALSE;
1707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pIcon->SetStream(pIconElement->IconStream->GetStream());
1709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pIcon->SetIconName(pIconElement->IconName);
1710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		Icons.SetElement(i, CJS_Value(m_isolate,pJS_Icon));
1711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vp << Icons;
1714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1717ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getIcon(OBJ_METHOD_PARAMS)
1718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() != 1)return FALSE;
1720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!m_pIconTree)
1721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swIconName = params[0].operator CFX_WideString();
1723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iIconCounts = m_pIconTree->GetLength();
1724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context *)cc;
1726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
1727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i = 0; i < iIconCounts; i++)
1729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if ((*m_pIconTree)[i]->IconName == swIconName)
1731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			Icon* pRetIcon = (*m_pIconTree)[i]->IconStream;
1733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JSFXObject  pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Icon"));
1735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (pObj.IsEmpty()) return FALSE;
1736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Icon * pJS_Icon = (CJS_Icon *)JS_GetPrivate(pObj);
1738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (!pJS_Icon) return FALSE;
1739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
1741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (!pIcon)return FALSE;
1742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pIcon->SetIconName(swIconName);
1744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pIcon->SetStream(pRetIcon->GetStream());
1745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			vRet = pJS_Icon;
1746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return TRUE;
1747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
1751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1753ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::removeIcon(OBJ_METHOD_PARAMS)
1754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() != 1)return FALSE;
1756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!m_pIconTree)
1757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swIconName = params[0].operator CFX_WideString();
1759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FOXIT_CHROME_BUILD
1760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pIconTree->DeleteIconElement(swIconName);
1761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
1762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1765ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::createDataObject(OBJ_METHOD_PARAMS)
1766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
1768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swName = L"";
1771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString sbName = "";
1772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swValue = L"";
1773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swMIMEType = L"";
1774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swCryptFilter = L"";
1775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString sbFileValue = "";
1776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iParamSize = params.size();
1778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i = 0; i < iParamSize; i++)
1779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i == 0)
1781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swName = params[0];
1782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i == 1)
1783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swValue = params[1];
1784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i == 2)
1785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swMIMEType = params[2];
1786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i == 3)
1787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swCryptFilter = params[4];
1788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FILE* pFile = NULL;
1791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//CFileStatus fileStatus;
1793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	const int BUFSIZE = 17;
1794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BYTE buf[BUFSIZE];
1795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BYTE *pBuffer = NULL;
1796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char* pBuf = NULL;
1797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nFileSize = 0;
1798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	sbFileValue = CFX_ByteString::FromUnicode(swValue);
1799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	sbName = CFX_ByteString::FromUnicode(swName);
1800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iBufLength = sbFileValue.GetLength();
1801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pBuf = (char*)malloc(sizeof(char) * iBufLength);
1802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pBuf = sbFileValue.GetBuffer(iBufLength);
1803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if ( NULL == (pFile = FXSYS_fopen( sbName.GetBuffer(sbName.GetLength()), "wb+" )) )
1805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fwrite( pBuf, sizeof(char), iBufLength, pFile );
1810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fclose( pFile );
1811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pFile = NULL;
1812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pFile = FXSYS_fopen( sbName.GetBuffer(sbName.GetLength()), "rb+" );
1814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fseek( pFile, 0, SEEK_END );
1815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	nFileSize = ftell( pFile );
1816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pBuffer = new FX_BYTE[nFileSize];
1818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fseek( pFile, 0, SEEK_SET );
1819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	size_t s = fread( pBuffer, sizeof(char), nFileSize, pFile );
1820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(s == 0)
1821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete[] pBuffer;
1823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CRYPT_MD5Generate(pBuffer, nFileSize, buf);
1827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	buf[BUFSIZE - 1] = 0;
1828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString csCheckSum((FX_LPCWSTR)buf, 16);
1829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	delete[] pBuffer;
1830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1834ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::media(OBJ_PROP_PARAMS)
1835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1839ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::calculateNow(OBJ_METHOD_PARAMS)
1840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
1844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
1845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) return FALSE;
1846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
1848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pInterForm != NULL);
1849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pInterForm->OnCalculate();
1850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1853ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::Collab(OBJ_PROP_PARAMS)
1854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1858ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getPageNthWord(OBJ_METHOD_PARAMS)
1859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//if (IsSafeMode(cc)) return TRUE;
1861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
1865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nPageNo = params.GetSize() > 0 ? (int)params[0] : 0;
1867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nWordNo = params.GetSize() > 1 ? (int)params[1] : 0;
1868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bool bStrip = params.GetSize() > 2 ? (bool)params[2] : true;
1869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Document* pDocument = m_pDocument->GetDocument();
1871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDocument) return FALSE;
1872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount())
1874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		//sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
1876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
1880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pPageDict) return FALSE;
1881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Page page;
1883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	page.Load(pDocument, pPageDict);
1884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	page.StartParse();
1885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	page.ParseContent();
1886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_POSITION pos = page.GetFirstObjectPosition();
1888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nWords = 0;
1890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swRet;
1892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	while (pos)
1894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CPDF_PageObject* pPageObj = page.GetNextObject(pos))
1896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (pPageObj->m_Type == PDFPAGE_TEXT)
1898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				int nObjWords = CountWords((CPDF_TextObject*)pPageObj);
1900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (nWords + nObjWords >= nWordNo)
1902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
1903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					swRet = GetObjWordStr((CPDF_TextObject*)pPageObj, nWordNo - nWords);
1904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
1905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
1906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nWords += nObjWords;
1908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (bStrip)
1913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swRet.TrimLeft();
1915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swRet.TrimRight();
1916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet = swRet;
1919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1922ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getPageNthWordQuads(OBJ_METHOD_PARAMS)
1923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//if (IsSafeMode(cc)) return TRUE;
1925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
1929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
1931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1933ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getPageNumWords(OBJ_METHOD_PARAMS)
1934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
1936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
1938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nPageNo = params.GetSize() > 0 ? (int)params[0] : 0;
1940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Document* pDocument = m_pDocument->GetDocument();
1942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pDocument != NULL);
1943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount())
1945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		//sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
1947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
1951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pPageDict) return FALSE;
1952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Page page;
1954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	page.Load(pDocument, pPageDict);
1955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	page.StartParse();
1956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	page.ParseContent();
1957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_POSITION pos = page.GetFirstObjectPosition();
1959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nWords = 0;
1961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	while (pos)
1963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CPDF_PageObject* pPageObj = page.GetNextObject(pos))
1965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (pPageObj->m_Type == PDFPAGE_TEXT)
1967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_TextObject* pTextObj = (CPDF_TextObject*)pPageObj;
1969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nWords += CountWords(pTextObj);
1970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet = nWords;
1975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1979ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getPrintParams(OBJ_METHOD_PARAMS)
1980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
1982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
1983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
1984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
1985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"PrintParamsObj"));
1986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//not implemented yet.
1987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet = pRetObj;
1988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ISLATINWORD(u)	(u != 0x20 && u <= 0x28FF)
1993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint	Document::CountWords(CPDF_TextObject* pTextObj)
1995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pTextObj) return 0;
1997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nWords = 0;
1999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Font* pFont = pTextObj->GetFont();
2001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pFont) return 0;
2002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bIsLatin = FALSE;
2004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0, sz=pTextObj->CountChars(); i<sz; i++)
2006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_DWORD charcode = -1;
2008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_FLOAT kerning;
2009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pTextObj->GetCharInfo(i, charcode, kerning);
2011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
2012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_WORD unicode = 0;
2014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (swUnicode.GetLength() > 0)
2015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			unicode = swUnicode[0];
2016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (ISLATINWORD(unicode) && bIsLatin)
2018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			continue;
2019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2020ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bIsLatin = ISLATINWORD(unicode);
2021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (unicode != 0x20)
2022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nWords++;
2023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2025ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return nWords;
2026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2028ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex)
2029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2030ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pTextObj != NULL);
2031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swRet;
2033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Font* pFont = pTextObj->GetFont();
2035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pFont) return L"";
2036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nWords = 0;
2038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bIsLatin = FALSE;
2039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0, sz=pTextObj->CountChars(); i<sz; i++)
2041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_DWORD charcode = -1;
2043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_FLOAT kerning;
2044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pTextObj->GetCharInfo(i, charcode, kerning);
2046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
2047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_WORD unicode = 0;
2049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (swUnicode.GetLength() > 0)
2050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			unicode = swUnicode[0];
2051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2052ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (ISLATINWORD(unicode) && bIsLatin)
2053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
2056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bIsLatin = ISLATINWORD(unicode);
2058ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (unicode != 0x20)
2059ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nWords++;
2060ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2061ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (nWords-1 == nWordIndex)
2063ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swRet += unicode;
2064ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2065ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return swRet;
2067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2068ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2069ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::zoom(OBJ_PROP_PARAMS)
2070ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2071ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
2073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2074ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
2076ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov(none,	NoVary)
2077ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov(fitP,	FitPage)
2078ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov(fitW,	FitWidth)
2079ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov(fitH,	FitHeight)
2080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov(fitV,	FitVisibleWidth)
2081ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov(pref,	Preferred)
2082ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov(refW,	ReflowWidth)
2083ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
2084ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2085ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::zoomType(OBJ_PROP_PARAMS)
2086ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2087ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
2088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2089ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2090ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::deletePages(OBJ_METHOD_PARAMS)
2091ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2092ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2093ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2094ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2096ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2097ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2098ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
2099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	if (pEnv->GetAppName().Compare(PHANTOM) != 0)
2100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 		return TRUE;
2101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//if (IsSafeMode(cc)) return TRUE;
2103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
2105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
2107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_ASSEMBLE))) return FALSE;
2108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iSize = params.size();
2110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nStart = 0;
2112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nEnd = 0;
2113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (iSize < 1)
2115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (iSize == 1)
2118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (params[0].GetType() == VT_object)
2120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JSObject  pObj = (JSObject )params[0];
2122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"nStart");
2123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nStart = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
2124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pValue = JS_GetObjectElement(isolate,pObj, L"nEnd");
2126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nEnd = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
2127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
2129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nStart = (int)params[0];
2131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
2134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nStart = (int)params[0];
2136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nEnd = (int)params[1];
2137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nTotal = m_pDocument->GetPageCount();
2140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nStart < 0)	nStart = 0;
2142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nStart >= nTotal) nStart = nTotal - 1;
2143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nEnd < 0) nEnd = 0;
2145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nEnd >= nTotal) nEnd = nTotal - 1;
2146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nEnd < nStart) nEnd = nStart;
2148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FOXIT_CHROME_BUILD
2152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pDocument->DeletePages(nStart, nEnd - nStart + 1);
2153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
2154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
2155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
2156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2158ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::extractPages(OBJ_METHOD_PARAMS)
2159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
2167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
2169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
2171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT)) return FALSE;
2173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iSize = params.size();
2175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nTotal = m_pDocument->GetPageCount();
2177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nStart = 0;
2178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nEnd = nTotal - 1;
2179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swFilePath;
2181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (iSize < 1)
2183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (iSize == 1)
2186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (params[0].GetType() == VT_object)
2188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JSObject  pObj = (JSObject )params[0];
2190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"nStart");
2191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nStart = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
2192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pValue = JS_GetObjectElement(isolate,pObj, L"nEnd");
2194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nEnd = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
2195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pValue = JS_GetObjectElement(isolate,pObj, L"cPath");
2197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swFilePath = CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
2198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
2200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nStart = (int)params[0];
2202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (iSize == 2)
2205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nStart = (int)params[0];
2207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nEnd = (int)params[1];
2208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
2210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nStart = (int)params[0];
2212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nEnd = (int)params[1];
2213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swFilePath = params[2].operator CFX_WideString();
2214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nEnd < nStart)
2217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nEnd = nStart;
2218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Document *pNewDoc = new CPDF_Document;
2220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pNewDoc->CreateNewDoc();
2221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WordArray array;
2223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=nStart; i<=nEnd; i++)
2224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		array.Add(i);
2225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	m_pDocument->ExtractPages(array, pNewDoc);
2227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (swFilePath.IsEmpty())
2229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
2233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swFilePath = app::PDFPathToSysPath(swFilePath);
2235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Creator PDFCreater(pNewDoc);
2236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		PDFCreater.Create(swFilePath);
2237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pNewDoc;
2238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//		pEnv->OpenDocument(swFilePath);
2239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vRet.SetNull();
2240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
2243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2245ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::insertPages(OBJ_METHOD_PARAMS)
2246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
2254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
2256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
2258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
2260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_ASSEMBLE))) return FALSE;
2261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iSize = params.size();
2263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nStart = 0;
2265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nEnd = 0;
2266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nPage = 0;
2267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swFilePath;
2269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (iSize < 1)
2271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (iSize == 1)
2274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (params[0].GetType() == VT_object)
2276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JSObject  pObj = (JSObject )params[0];
2278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"nPage");
2280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nPage = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
2281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pValue = JS_GetObjectElement(isolate,pObj, L"cPath");
2283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swFilePath = CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
2284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pValue = JS_GetObjectElement(isolate,pObj, L"nStart");
2286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nStart = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
2287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pValue = JS_GetObjectElement(isolate,pObj, L"nEnd");
2289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nEnd = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
2290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
2292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nPage = (int)params[0];
2294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
2297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nPage = (int)params[0];
2299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (iSize >= 2)
2301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swFilePath = params[1].operator CFX_WideString();
2302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (iSize >= 3)
2304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nStart = (int)params[2];
2305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (iSize >= 4)
2307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nEnd = (int)params[3];
2308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	nPage++;
2311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nPage < 0)
2313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nPage = 0;
2314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nPage > m_pDocument->GetPageCount())
2316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nPage = m_pDocument->GetPageCount();
2317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (swFilePath.IsEmpty()) return FALSE;
2319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	swFilePath = app::PDFPathToSysPath(swFilePath);
2321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Parser pdfParser;
2323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pdfParser.StartParse(swFilePath, FALSE);
2324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Document* pSrcDoc = pdfParser.GetDocument();
2325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pSrcDoc)
2327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pdfParser.CloseParser();
2329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
2330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nTotal = pSrcDoc->GetPageCount();
2333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nStart < 0)	nStart = 0;
2335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nStart >= nTotal) nStart = nTotal - 1;
2336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nEnd < 0) nEnd = 0;
2338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nEnd >= nTotal) nEnd = nTotal - 1;
2339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nEnd < nStart) nEnd = nStart;
2341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WordArray array;
2343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=nStart; i<=nEnd; i++)
2344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		array.Add(i);
2345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	m_pDocument->InsertPages(nPage, pSrcDoc, array);
2347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pdfParser.CloseParser();
2349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
2351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2353ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::replacePages(OBJ_METHOD_PARAMS)
2354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
2362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
2364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pDocument != NULL);
2366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
2368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument->GetPermissions(FPDFPERM_ASSEMBLE))) return FALSE;
2369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iSize = params.size();
2371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nStart = -1;
2373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nEnd = -1;
2374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nPage = 0;
2375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swFilePath;
2377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (iSize < 1)
2379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (iSize == 1)
2382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (params[0].GetType() == VT_object)
2384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JSObject  pObj = (JSObject )params[0];
2386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"nPage");
2388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nPage = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
2389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pValue = JS_GetObjectElement(isolate,pObj, L"cPath");
2391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swFilePath = CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
2392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pValue = JS_GetObjectElement(isolate,pObj, L"nStart");
2394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nStart = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
2395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pValue = JS_GetObjectElement(isolate,pObj, L"nEnd");
2397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nEnd = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
2398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
2400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nPage = (int)params[0];
2402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
2405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nPage = (int)params[0];
2407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (iSize >= 2)
2409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swFilePath = params[1].operator CFX_WideString();
2410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (iSize >= 3)
2412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nStart = (int)params[2];
2413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (iSize >= 4)
2415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nEnd = (int)params[3];
2416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nPage < 0)
2419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nPage = 0;
2420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nPage >= m_pDocument->GetPageCount())
2422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nPage = m_pDocument->GetPageCount() - 1;
2423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (swFilePath.IsEmpty()) return FALSE;
2425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	swFilePath = app::PDFPathToSysPath(swFilePath);
2427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Parser pdfParser;
2429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pdfParser.StartParse(swFilePath, FALSE);
2430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Document* pSrcDoc = pdfParser.GetDocument();
2431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pSrcDoc)
2433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pdfParser.CloseParser();
2435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
2436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nTotal = pSrcDoc->GetPageCount();
2439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nStart < 0)
2441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (nEnd < 0)
2443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nStart = 0;
2445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nEnd = nTotal - 1;
2446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
2448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nStart = 0;
2450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
2453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (nEnd < 0)
2455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nEnd = nStart;
2457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
2459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (nStart >= nTotal) nStart = nTotal - 1;
2461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (nEnd >= nTotal) nEnd = nTotal - 1;
2462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (nEnd < nStart) nEnd = nStart;
2464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WordArray array;
2468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=nStart; i<=nEnd; i++)
2469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		array.Add(i);
2470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	m_pDocument->ReplacePages(nPage, pSrcDoc, array);
2472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pdfParser.CloseParser();
2474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
2476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2478ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL Document::getURL(OBJ_METHOD_PARAMS)
2479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
2481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
2483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid Document::AddDelayData(CJS_DelayData* pData)
2486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_DelayData.Add(pData);
2488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid Document::DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex)
2491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_DWordArray DelArray;
2493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0,sz=m_DelayData.GetSize(); i<sz; i++)
2495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CJS_DelayData* pData = m_DelayData.GetAt(i))
2497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
2498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (pData->sFieldName == sFieldName && pData->nControlIndex == nControlIndex)
2499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
2500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				Field::DoDelay(m_pDocument, pData);
2501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				delete pData;
2502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				m_DelayData.SetAt(i, NULL);
2503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				DelArray.Add(i);
2504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
2505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
2506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int j=DelArray.GetSize()-1; j>=0; j--)
2509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_DelayData.RemoveAt(DelArray[j]);
2511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid Document::AddDelayAnnotData(CJS_AnnotObj *pData)
2515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_DelayAnnotData.Add(pData);
2517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid Document::DoAnnotDelay()
2520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
2521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_DWordArray DelArray;
2522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int j=DelArray.GetSize()-1; j>=0; j--)
2524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
2525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_DelayData.RemoveAt(DelArray[j]);
2526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
2527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
2528