Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(662)

Side by Side Diff: fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp

Issue 2322003002: Cleanup CPDFXFA_Document. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | fpdfsdk/fpdfxfa/include/fpdfxfa_doc.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "fpdfsdk/fpdfxfa/include/fpdfxfa_doc.h" 7 #include "fpdfsdk/fpdfxfa/include/fpdfxfa_doc.h"
8 8
9 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" 9 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h"
10 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h"
(...skipping 27 matching lines...) Expand all
38 #define FXFA_XMPMETA 0x00010000 38 #define FXFA_XMPMETA 0x00010000
39 #define FXFA_XFDF 0x00100000 39 #define FXFA_XFDF 0x00100000
40 #define FXFA_FORM 0x01000000 40 #define FXFA_FORM 0x01000000
41 #define FXFA_PDF 0x10000000 41 #define FXFA_PDF 0x10000000
42 42
43 #ifndef _WIN32 43 #ifndef _WIN32
44 extern void SetLastError(int err); 44 extern void SetLastError(int err);
45 extern int GetLastError(); 45 extern int GetLastError();
46 #endif 46 #endif
47 47
48 namespace {
49
50 CFX_FloatRect FXRect2PDFRect(const CFX_RectF& fxRectF) {
51 return CFX_FloatRect(fxRectF.left, fxRectF.bottom(), fxRectF.right(),
Tom Sepez 2016/09/08 16:53:36 The code at old line 220 flipped top and bottom. D
dsinclair 2016/09/12 13:25:49 Done.
52 fxRectF.top);
53 }
54
55 } // namespace
56
48 CPDFXFA_Document::CPDFXFA_Document(std::unique_ptr<CPDF_Document> pPDFDoc, 57 CPDFXFA_Document::CPDFXFA_Document(std::unique_ptr<CPDF_Document> pPDFDoc,
49 CPDFXFA_App* pProvider) 58 CPDFXFA_App* pProvider)
50 : m_iDocType(DOCTYPE_PDF), 59 : m_iDocType(DOCTYPE_PDF),
51 m_pPDFDoc(std::move(pPDFDoc)), 60 m_pPDFDoc(std::move(pPDFDoc)),
52 m_pXFADocView(nullptr), 61 m_pXFADocView(nullptr),
53 m_pApp(pProvider), 62 m_pApp(pProvider),
54 m_pJSContext(nullptr), 63 m_pJSContext(nullptr),
55 m_nLoadStatus(FXFA_LOADSTATUS_PRELOAD), 64 m_nLoadStatus(FXFA_LOADSTATUS_PRELOAD),
56 m_nPageCount(0) {} 65 m_nPageCount(0) {}
57 66
58 CPDFXFA_Document::~CPDFXFA_Document() { 67 CPDFXFA_Document::~CPDFXFA_Document() {
59 m_nLoadStatus = FXFA_LOADSTATUS_CLOSING; 68 m_nLoadStatus = FXFA_LOADSTATUS_CLOSING;
60 69
61 if (m_pXFADoc) { 70 if (m_pXFADoc) {
62 CXFA_FFApp* pApp = m_pApp->GetXFAApp(); 71 CXFA_FFApp* pApp = m_pApp->GetXFAApp();
63 if (pApp) { 72 if (pApp) {
64 CXFA_FFDocHandler* pDocHandler = pApp->GetDocHandler(); 73 CXFA_FFDocHandler* pDocHandler = pApp->GetDocHandler();
65 if (pDocHandler) { 74 if (pDocHandler)
66 CloseXFADoc(pDocHandler); 75 CloseXFADoc(pDocHandler);
67 }
68 } 76 }
69 m_pXFADoc.reset(); 77 m_pXFADoc.reset();
70 } 78 }
71 if (m_pJSContext && m_pSDKDoc && m_pSDKDoc->GetEnv()) 79 if (m_pJSContext && m_pSDKDoc && m_pSDKDoc->GetEnv())
72 m_pSDKDoc->GetEnv()->GetJSRuntime()->ReleaseContext(m_pJSContext); 80 m_pSDKDoc->GetEnv()->GetJSRuntime()->ReleaseContext(m_pJSContext);
73 81
74 m_nLoadStatus = FXFA_LOADSTATUS_CLOSED; 82 m_nLoadStatus = FXFA_LOADSTATUS_CLOSED;
75 } 83 }
76 84
77 FX_BOOL CPDFXFA_Document::LoadXFADoc() { 85 FX_BOOL CPDFXFA_Document::LoadXFADoc() {
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 m_XFAPageList.SetAt(page->GetPageIndex(), nullptr); 218 m_XFAPageList.SetAt(page->GetPageIndex(), nullptr);
211 } 219 }
212 220
213 CPDFSDK_Document* CPDFXFA_Document::GetSDKDocument( 221 CPDFSDK_Document* CPDFXFA_Document::GetSDKDocument(
214 CPDFDoc_Environment* pFormFillEnv) { 222 CPDFDoc_Environment* pFormFillEnv) {
215 if (!m_pSDKDoc && pFormFillEnv) 223 if (!m_pSDKDoc && pFormFillEnv)
216 m_pSDKDoc.reset(new CPDFSDK_Document(this, pFormFillEnv)); 224 m_pSDKDoc.reset(new CPDFSDK_Document(this, pFormFillEnv));
217 return m_pSDKDoc.get(); 225 return m_pSDKDoc.get();
218 } 226 }
219 227
220 void CPDFXFA_Document::FXRect2PDFRect(const CFX_RectF& fxRectF,
221 CFX_FloatRect& pdfRect) {
222 pdfRect.left = fxRectF.left;
223 pdfRect.top = fxRectF.bottom();
224 pdfRect.right = fxRectF.right();
225 pdfRect.bottom = fxRectF.top;
226 }
227
228 void CPDFXFA_Document::SetChangeMark(CXFA_FFDoc* hDoc) { 228 void CPDFXFA_Document::SetChangeMark(CXFA_FFDoc* hDoc) {
229 if (hDoc == m_pXFADoc.get() && m_pSDKDoc) { 229 if (hDoc == m_pXFADoc.get() && m_pSDKDoc)
230 m_pSDKDoc->SetChangeMark(); 230 m_pSDKDoc->SetChangeMark();
231 }
232 } 231 }
233 232
234 void CPDFXFA_Document::InvalidateRect(CXFA_FFPageView* pPageView, 233 void CPDFXFA_Document::InvalidateRect(CXFA_FFPageView* pPageView,
235 const CFX_RectF& rt, 234 const CFX_RectF& rt,
236 uint32_t dwFlags /* = 0 */) { 235 uint32_t dwFlags /* = 0 */) {
237 if (!m_pXFADoc || !m_pSDKDoc) 236 if (!m_pXFADoc || !m_pSDKDoc)
238 return; 237 return;
239 238
240 if (m_iDocType != DOCTYPE_DYNAMIC_XFA) 239 if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
241 return; 240 return;
242 241
243 CFX_FloatRect rcPage;
244 FXRect2PDFRect(rt, rcPage);
245
246 CPDFXFA_Page* pPage = GetPage(pPageView); 242 CPDFXFA_Page* pPage = GetPage(pPageView);
247 if (!pPage) 243 if (!pPage)
248 return; 244 return;
249 245
250 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 246 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
251 if (!pEnv) 247 if (!pEnv)
252 return; 248 return;
253 249
250 CFX_FloatRect rcPage = FXRect2PDFRect(rt);
254 pEnv->FFI_Invalidate((FPDF_PAGE)pPage, rcPage.left, rcPage.bottom, 251 pEnv->FFI_Invalidate((FPDF_PAGE)pPage, rcPage.left, rcPage.bottom,
255 rcPage.right, rcPage.top); 252 rcPage.right, rcPage.top);
256 } 253 }
257 254
258 void CPDFXFA_Document::DisplayCaret(CXFA_FFWidget* hWidget, 255 void CPDFXFA_Document::DisplayCaret(CXFA_FFWidget* hWidget,
259 FX_BOOL bVisible, 256 FX_BOOL bVisible,
260 const CFX_RectF* pRtAnchor) { 257 const CFX_RectF* pRtAnchor) {
261 if (!hWidget || !pRtAnchor || !m_pXFADoc || !m_pSDKDoc || !m_pXFADocView) 258 if (!hWidget || !pRtAnchor || !m_pXFADoc || !m_pSDKDoc || !m_pXFADocView)
262 return; 259 return;
263 260
264 if (m_iDocType != DOCTYPE_DYNAMIC_XFA) 261 if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
265 return; 262 return;
266 263
267 CXFA_FFWidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); 264 CXFA_FFWidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler();
268 if (!pWidgetHandler) 265 if (!pWidgetHandler)
269 return; 266 return;
270 267
271 CXFA_FFPageView* pPageView = hWidget->GetPageView(); 268 CXFA_FFPageView* pPageView = hWidget->GetPageView();
272 if (!pPageView) 269 if (!pPageView)
273 return; 270 return;
274 271
275 CPDFXFA_Page* pPage = GetPage(pPageView); 272 CPDFXFA_Page* pPage = GetPage(pPageView);
276 if (!pPage) 273 if (!pPage)
277 return; 274 return;
278 275
279 CFX_FloatRect rcCaret;
280 FXRect2PDFRect(*pRtAnchor, rcCaret);
281
282 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 276 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
283 if (!pEnv) 277 if (!pEnv)
284 return; 278 return;
285 279
280 CFX_FloatRect rcCaret = FXRect2PDFRect(*pRtAnchor);
286 pEnv->FFI_DisplayCaret((FPDF_PAGE)pPage, bVisible, rcCaret.left, rcCaret.top, 281 pEnv->FFI_DisplayCaret((FPDF_PAGE)pPage, bVisible, rcCaret.left, rcCaret.top,
287 rcCaret.right, rcCaret.bottom); 282 rcCaret.right, rcCaret.bottom);
288 } 283 }
289 284
290 FX_BOOL CPDFXFA_Document::GetPopupPos(CXFA_FFWidget* hWidget, 285 FX_BOOL CPDFXFA_Document::GetPopupPos(CXFA_FFWidget* hWidget,
291 FX_FLOAT fMinPopup, 286 FX_FLOAT fMinPopup,
292 FX_FLOAT fMaxPopup, 287 FX_FLOAT fMaxPopup,
293 const CFX_RectF& rtAnchor, 288 const CFX_RectF& rtAnchor,
294 CFX_RectF& rtPopup) { 289 CFX_RectF& rtPopup) {
295 if (!hWidget) 290 if (!hWidget)
296 return FALSE; 291 return FALSE;
297 292
298 CXFA_FFPageView* pXFAPageView = hWidget->GetPageView(); 293 CXFA_FFPageView* pXFAPageView = hWidget->GetPageView();
299 if (!pXFAPageView) 294 if (!pXFAPageView)
300 return FALSE; 295 return FALSE;
301 296
302 CPDFXFA_Page* pPage = GetPage(pXFAPageView); 297 CPDFXFA_Page* pPage = GetPage(pXFAPageView);
303 if (!pPage) 298 if (!pPage)
304 return FALSE; 299 return FALSE;
305 300
306 CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc(); 301 CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc();
307 int nRotate = pWidgetAcc->GetRotate(); 302 int nRotate = pWidgetAcc->GetRotate();
308 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 303 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
309 if (!pEnv) 304 if (!pEnv)
310 return FALSE; 305 return FALSE;
306
311 FS_RECTF pageViewRect = {0.0f, 0.0f, 0.0f, 0.0f}; 307 FS_RECTF pageViewRect = {0.0f, 0.0f, 0.0f, 0.0f};
312 pEnv->FFI_GetPageViewRect(pPage, pageViewRect); 308 pEnv->FFI_GetPageViewRect(pPage, pageViewRect);
313 309
314 CFX_FloatRect rcAnchor; 310 int t1;
315 rcAnchor.left = rtAnchor.left; 311 int t2;
316 rcAnchor.top = rtAnchor.bottom(); 312 CFX_FloatRect rcAnchor = FXRect2PDFRect(rtAnchor);
317 rcAnchor.right = rtAnchor.right();
318 rcAnchor.bottom = rtAnchor.top;
319
320 int t1, t2, t;
321 uint32_t dwPos;
322 FX_FLOAT fPoupHeight;
323 switch (nRotate) { 313 switch (nRotate) {
324 case 90: { 314 case 90: {
325 t1 = (int)(pageViewRect.right - rcAnchor.right); 315 t1 = (int)(pageViewRect.right - rcAnchor.right);
326 t2 = (int)(rcAnchor.left - pageViewRect.left); 316 t2 = (int)(rcAnchor.left - pageViewRect.left);
327 if (rcAnchor.bottom < pageViewRect.bottom) { 317 if (rcAnchor.bottom < pageViewRect.bottom)
328 rtPopup.left += rcAnchor.bottom - pageViewRect.bottom; 318 rtPopup.left += rcAnchor.bottom - pageViewRect.bottom;
329 }
330
331 break; 319 break;
332 } 320 }
333
334 case 180: { 321 case 180: {
335 t2 = (int)(pageViewRect.top - rcAnchor.top); 322 t2 = (int)(pageViewRect.top - rcAnchor.top);
336 t1 = (int)(rcAnchor.bottom - pageViewRect.bottom); 323 t1 = (int)(rcAnchor.bottom - pageViewRect.bottom);
337 if (rcAnchor.left < pageViewRect.left) { 324 if (rcAnchor.left < pageViewRect.left)
338 rtPopup.left += rcAnchor.left - pageViewRect.left; 325 rtPopup.left += rcAnchor.left - pageViewRect.left;
339 }
340 break; 326 break;
341 } 327 }
342 case 270: { 328 case 270: {
343 t1 = (int)(rcAnchor.left - pageViewRect.left); 329 t1 = (int)(rcAnchor.left - pageViewRect.left);
344 t2 = (int)(pageViewRect.right - rcAnchor.right); 330 t2 = (int)(pageViewRect.right - rcAnchor.right);
345 331 if (rcAnchor.top > pageViewRect.top)
346 if (rcAnchor.top > pageViewRect.top) {
347 rtPopup.left -= rcAnchor.top - pageViewRect.top; 332 rtPopup.left -= rcAnchor.top - pageViewRect.top;
348 }
349 break; 333 break;
350 } 334 }
351 case 0: 335 case 0:
352 default: { 336 default: {
353 t1 = (int)(pageViewRect.top - rcAnchor.top); 337 t1 = (int)(pageViewRect.top - rcAnchor.top);
354 t2 = (int)(rcAnchor.bottom - pageViewRect.bottom); 338 t2 = (int)(rcAnchor.bottom - pageViewRect.bottom);
355 if (rcAnchor.right > pageViewRect.right) { 339 if (rcAnchor.right > pageViewRect.right)
356 rtPopup.left -= rcAnchor.right - pageViewRect.right; 340 rtPopup.left -= rcAnchor.right - pageViewRect.right;
357 }
358 break; 341 break;
359 } 342 }
360 } 343 }
361 344
362 if (t1 <= 0 && t2 <= 0) { 345 int t;
346 uint32_t dwPos;
347 if (t1 <= 0 && t2 <= 0)
363 return FALSE; 348 return FALSE;
364 }
365 if (t1 <= 0) { 349 if (t1 <= 0) {
366 t = t2; 350 t = t2;
367 dwPos = 1; 351 dwPos = 1;
368 } else if (t2 <= 0) { 352 } else if (t2 <= 0) {
369 t = t1; 353 t = t1;
370 dwPos = 0; 354 dwPos = 0;
371 } else if (t1 > t2) { 355 } else if (t1 > t2) {
372 t = t1; 356 t = t1;
373 dwPos = 0; 357 dwPos = 0;
374 } else { 358 } else {
375 t = t2; 359 t = t2;
376 dwPos = 1; 360 dwPos = 1;
377 } 361 }
378 if (t < fMinPopup) { 362
379 fPoupHeight = fMinPopup; 363 FX_FLOAT fPopupHeight;
380 } else if (t > fMaxPopup) { 364 if (t < fMinPopup)
381 fPoupHeight = fMaxPopup; 365 fPopupHeight = fMinPopup;
382 } else { 366 else if (t > fMaxPopup)
383 fPoupHeight = (FX_FLOAT)t; 367 fPopupHeight = fMaxPopup;
384 } 368 else
369 fPopupHeight = static_cast<FX_FLOAT>(t);
385 370
386 switch (nRotate) { 371 switch (nRotate) {
387 case 0: 372 case 0:
388 case 180: { 373 case 180: {
389 if (dwPos == 0) { 374 if (dwPos == 0) {
390 rtPopup.top = rtAnchor.height; 375 rtPopup.top = rtAnchor.height;
391 rtPopup.height = fPoupHeight; 376 rtPopup.height = fPopupHeight;
392 } else { 377 } else {
393 rtPopup.top = -fPoupHeight; 378 rtPopup.top = -fPopupHeight;
394 rtPopup.height = fPoupHeight; 379 rtPopup.height = fPopupHeight;
395 } 380 }
396 break; 381 break;
397 } 382 }
398 case 90: 383 case 90:
399 case 270: { 384 case 270: {
400 if (dwPos == 0) { 385 if (dwPos == 0) {
401 rtPopup.top = rtAnchor.width; 386 rtPopup.top = rtAnchor.width;
402 rtPopup.height = fPoupHeight; 387 rtPopup.height = fPopupHeight;
403 } else { 388 } else {
404 rtPopup.top = -fPoupHeight; 389 rtPopup.top = -fPopupHeight;
405 rtPopup.height = fPoupHeight; 390 rtPopup.height = fPopupHeight;
406 } 391 }
407 break; 392 break;
408 } 393 }
409 default: 394 default:
410 break; 395 break;
411 } 396 }
412 397
413 return TRUE; 398 return TRUE;
414 } 399 }
415 400
416 FX_BOOL CPDFXFA_Document::PopupMenu(CXFA_FFWidget* hWidget, 401 FX_BOOL CPDFXFA_Document::PopupMenu(CXFA_FFWidget* hWidget,
417 CFX_PointF ptPopup, 402 CFX_PointF ptPopup) {
418 const CFX_RectF* pRectExclude) {
419 if (!hWidget) 403 if (!hWidget)
420 return FALSE; 404 return FALSE;
421 405
422 CXFA_FFPageView* pXFAPageView = hWidget->GetPageView(); 406 CXFA_FFPageView* pXFAPageView = hWidget->GetPageView();
423 if (!pXFAPageView) 407 if (!pXFAPageView)
424 return FALSE; 408 return FALSE;
425 409
426 CPDFXFA_Page* pPage = GetPage(pXFAPageView); 410 CPDFXFA_Page* pPage = GetPage(pXFAPageView);
427 if (!pPage) 411 if (!pPage)
428 return FALSE; 412 return FALSE;
429 413
414 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
415 if (!pEnv)
416 return FALSE;
417
430 int menuFlag = 0; 418 int menuFlag = 0;
431
432 if (hWidget->CanUndo()) 419 if (hWidget->CanUndo())
433 menuFlag |= FXFA_MEMU_UNDO; 420 menuFlag |= FXFA_MEMU_UNDO;
Tom Sepez 2016/09/08 16:53:36 nit: MEMU is apparently a train in India, and is n
dsinclair 2016/09/12 13:25:48 Done.
434 if (hWidget->CanRedo()) 421 if (hWidget->CanRedo())
435 menuFlag |= FXFA_MEMU_REDO; 422 menuFlag |= FXFA_MEMU_REDO;
436 if (hWidget->CanPaste()) 423 if (hWidget->CanPaste())
437 menuFlag |= FXFA_MEMU_PASTE; 424 menuFlag |= FXFA_MEMU_PASTE;
438 if (hWidget->CanCopy()) 425 if (hWidget->CanCopy())
439 menuFlag |= FXFA_MEMU_COPY; 426 menuFlag |= FXFA_MEMU_COPY;
440 if (hWidget->CanCut()) 427 if (hWidget->CanCut())
441 menuFlag |= FXFA_MEMU_CUT; 428 menuFlag |= FXFA_MEMU_CUT;
442 if (hWidget->CanSelectAll()) 429 if (hWidget->CanSelectAll())
443 menuFlag |= FXFA_MEMU_SELECTALL; 430 menuFlag |= FXFA_MEMU_SELECTALL;
444 431
445 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 432 return pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, nullptr);
446 return pEnv &&
447 pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, nullptr);
448 } 433 }
449 434
450 void CPDFXFA_Document::PageViewEvent(CXFA_FFPageView* pPageView, 435 void CPDFXFA_Document::PageViewEvent(CXFA_FFPageView* pPageView,
451 uint32_t dwFlags) { 436 uint32_t dwFlags) {
452 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 437 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
453 if (!pEnv) 438 if (!pEnv)
454 return; 439 return;
455 440
456 if (m_nLoadStatus != FXFA_LOADSTATUS_LOADING && 441 if (m_nLoadStatus == FXFA_LOADSTATUS_LOADING ||
457 m_nLoadStatus != FXFA_LOADSTATUS_CLOSING && 442 m_nLoadStatus == FXFA_LOADSTATUS_CLOSING ||
458 XFA_PAGEVIEWEVENT_StopLayout == dwFlags) { 443 XFA_PAGEVIEWEVENT_StopLayout != dwFlags)
459 int nNewCount = GetPageCount(); 444 return;
460 if (nNewCount == m_nPageCount)
461 return;
462 445
463 CXFA_FFDocView* pXFADocView = GetXFADocView(); 446 int nNewCount = GetPageCount();
464 if (!pXFADocView) 447 if (nNewCount == m_nPageCount)
465 return; 448 return;
466 for (int iPageIter = 0; iPageIter < m_nPageCount; iPageIter++) {
467 CPDFXFA_Page* pPage = m_XFAPageList.GetAt(iPageIter);
468 if (!pPage)
469 continue;
470 m_pSDKDoc->RemovePageView(pPage);
471 CXFA_FFPageView* pXFAPageView = pXFADocView->GetPageView(iPageIter);
472 pPage->SetXFAPageView(pXFAPageView);
473 }
474 449
475 int flag = (nNewCount < m_nPageCount) ? FXFA_PAGEVIEWEVENT_POSTREMOVED 450 CXFA_FFDocView* pXFADocView = GetXFADocView();
476 : FXFA_PAGEVIEWEVENT_POSTADDED; 451 if (!pXFADocView)
477 int count = FXSYS_abs(nNewCount - m_nPageCount); 452 return;
478 m_nPageCount = nNewCount; 453
479 m_XFAPageList.SetSize(nNewCount); 454 for (int iPageIter = 0; iPageIter < m_nPageCount; iPageIter++) {
480 pEnv->FFI_PageEvent(count, flag); 455 CPDFXFA_Page* pPage = m_XFAPageList.GetAt(iPageIter);
456 if (!pPage)
457 continue;
458
459 m_pSDKDoc->RemovePageView(pPage);
460 pPage->SetXFAPageView(pXFADocView->GetPageView(iPageIter));
481 } 461 }
462
463 int flag = (nNewCount < m_nPageCount) ? FXFA_PAGEVIEWEVENT_POSTREMOVED
464 : FXFA_PAGEVIEWEVENT_POSTADDED;
465 int count = FXSYS_abs(nNewCount - m_nPageCount);
466 m_nPageCount = nNewCount;
467 m_XFAPageList.SetSize(nNewCount);
468 pEnv->FFI_PageEvent(count, flag);
482 } 469 }
483 470
484 void CPDFXFA_Document::WidgetPostAdd(CXFA_FFWidget* hWidget, 471 void CPDFXFA_Document::WidgetPostAdd(CXFA_FFWidget* hWidget,
485 CXFA_WidgetAcc* pWidgetData) { 472 CXFA_WidgetAcc* pWidgetData) {
486 if (m_iDocType != DOCTYPE_DYNAMIC_XFA || !hWidget) 473 if (m_iDocType != DOCTYPE_DYNAMIC_XFA || !hWidget)
487 return; 474 return;
488 475
489 CXFA_FFPageView* pPageView = hWidget->GetPageView(); 476 CXFA_FFPageView* pPageView = hWidget->GetPageView();
490 if (!pPageView) 477 if (!pPageView)
491 return; 478 return;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 520
534 return pEnv->FFI_GetCurrentPageIndex(this); 521 return pEnv->FFI_GetCurrentPageIndex(this);
535 } 522 }
536 523
537 void CPDFXFA_Document::SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) { 524 void CPDFXFA_Document::SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) {
538 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc || 525 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc ||
539 m_iDocType != DOCTYPE_DYNAMIC_XFA || iCurPage < 0 || 526 m_iDocType != DOCTYPE_DYNAMIC_XFA || iCurPage < 0 ||
540 iCurPage >= m_pSDKDoc->GetPageCount()) { 527 iCurPage >= m_pSDKDoc->GetPageCount()) {
541 return; 528 return;
542 } 529 }
530
543 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 531 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
544 if (!pEnv) 532 if (!pEnv)
545 return; 533 return;
546 pEnv->FFI_SetCurrentPage(this, iCurPage); 534 pEnv->FFI_SetCurrentPage(this, iCurPage);
547 } 535 }
548 536
549 FX_BOOL CPDFXFA_Document::IsCalculationsEnabled(CXFA_FFDoc* hDoc) { 537 FX_BOOL CPDFXFA_Document::IsCalculationsEnabled(CXFA_FFDoc* hDoc) {
550 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) 538 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc)
551 return FALSE; 539 return FALSE;
552 if (m_pSDKDoc->GetInterForm()) 540 if (m_pSDKDoc->GetInterForm())
553 return m_pSDKDoc->GetInterForm()->IsXfaCalculateEnabled(); 541 return m_pSDKDoc->GetInterForm()->IsXfaCalculateEnabled();
554
555 return FALSE; 542 return FALSE;
556 } 543 }
557 544
558 void CPDFXFA_Document::SetCalculationsEnabled(CXFA_FFDoc* hDoc, 545 void CPDFXFA_Document::SetCalculationsEnabled(CXFA_FFDoc* hDoc,
559 FX_BOOL bEnabled) { 546 FX_BOOL bEnabled) {
560 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) 547 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc)
561 return; 548 return;
562 if (m_pSDKDoc->GetInterForm()) 549 if (m_pSDKDoc->GetInterForm())
563 m_pSDKDoc->GetInterForm()->XfaEnableCalculate(bEnabled); 550 m_pSDKDoc->GetInterForm()->XfaEnableCalculate(bEnabled);
564 } 551 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 583
597 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 584 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
598 if (!pEnv) 585 if (!pEnv)
599 return; 586 return;
600 587
601 int fileType = bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML; 588 int fileType = bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML;
602 CFX_ByteString bs = wsFilePath.UTF16LE_Encode(); 589 CFX_ByteString bs = wsFilePath.UTF16LE_Encode();
603 if (wsFilePath.IsEmpty()) { 590 if (wsFilePath.IsEmpty()) {
604 if (!pEnv->GetFormFillInfo() || !pEnv->GetFormFillInfo()->m_pJsPlatform) 591 if (!pEnv->GetFormFillInfo() || !pEnv->GetFormFillInfo()->m_pJsPlatform)
605 return; 592 return;
593
606 CFX_WideString filepath = pEnv->JS_fieldBrowse(); 594 CFX_WideString filepath = pEnv->JS_fieldBrowse();
607 bs = filepath.UTF16LE_Encode(); 595 bs = filepath.UTF16LE_Encode();
608 } 596 }
609 int len = bs.GetLength() / sizeof(unsigned short); 597 int len = bs.GetLength();
dsinclair 2016/09/08 15:13:51 This pattern is repeated a few times in this file.
Tom Sepez 2016/09/08 16:53:36 Maybe we don't want to pass an odd number of bytes
Tom Sepez 2016/09/08 16:55:07 No, actually if it's smakller, getbuffer just leav
dsinclair 2016/09/12 13:25:48 So, is there anything to be done here?
610 FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile( 598 FPDF_FILEHANDLER* pFileHandler =
611 bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML, 599 pEnv->FFI_OpenFile(bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML,
612 (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), "wb"); 600 (FPDF_WIDESTRING)bs.GetBuffer(len), "wb");
613 bs.ReleaseBuffer(len * sizeof(unsigned short)); 601 bs.ReleaseBuffer(len);
614 if (!pFileHandler) 602 if (!pFileHandler)
615 return; 603 return;
616 604
617 CFPDF_FileStream fileWrite(pFileHandler); 605 CFPDF_FileStream fileWrite(pFileHandler);
618 CFX_ByteString content; 606 CFX_ByteString content;
619 if (fileType == FXFA_SAVEAS_XML) { 607 if (fileType == FXFA_SAVEAS_XML) {
620 content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; 608 content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
621 fileWrite.WriteBlock(content.c_str(), fileWrite.GetSize(), 609 fileWrite.WriteBlock(content.c_str(), fileWrite.GetSize(),
622 content.GetLength()); 610 content.GetLength());
623 m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Data, &fileWrite, 611 m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Data, &fileWrite,
624 nullptr); 612 nullptr);
625 } else if (fileType == FXFA_SAVEAS_XDP) { 613 } else if (fileType == FXFA_SAVEAS_XDP) {
626 if (!m_pPDFDoc) 614 if (!m_pPDFDoc)
627 return; 615 return;
616
628 CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); 617 CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot();
629 if (!pRoot) 618 if (!pRoot)
630 return; 619 return;
620
631 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); 621 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm");
632 if (!pAcroForm) 622 if (!pAcroForm)
633 return; 623 return;
624
634 CPDF_Array* pArray = ToArray(pAcroForm->GetObjectBy("XFA")); 625 CPDF_Array* pArray = ToArray(pAcroForm->GetObjectBy("XFA"));
635 if (!pArray) 626 if (!pArray)
636 return; 627 return;
637 628
638 int size = pArray->GetCount(); 629 int size = pArray->GetCount();
639 for (int i = 1; i < size; i += 2) { 630 for (int i = 1; i < size; i += 2) {
640 CPDF_Object* pPDFObj = pArray->GetObjectAt(i); 631 CPDF_Object* pPDFObj = pArray->GetObjectAt(i);
641 CPDF_Object* pPrePDFObj = pArray->GetObjectAt(i - 1); 632 CPDF_Object* pPrePDFObj = pArray->GetObjectAt(i - 1);
642 if (!pPrePDFObj->IsString()) 633 if (!pPrePDFObj->IsString())
643 continue; 634 continue;
644 if (!pPDFObj->IsReference()) 635 if (!pPDFObj->IsReference())
645 continue; 636 continue;
637
646 CPDF_Stream* pStream = ToStream(pPDFObj->GetDirect()); 638 CPDF_Stream* pStream = ToStream(pPDFObj->GetDirect());
647 if (!pStream) 639 if (!pStream)
648 continue; 640 continue;
649 if (pPrePDFObj->GetString() == "form") { 641 if (pPrePDFObj->GetString() == "form") {
650 m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Form, &fileWrite, 642 m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Form, &fileWrite,
651 nullptr); 643 nullptr);
652 } else if (pPrePDFObj->GetString() == "datasets") { 644 continue;
645 }
646 if (pPrePDFObj->GetString() == "datasets") {
653 m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Datasets, &fileWrite, 647 m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Datasets, &fileWrite,
654 nullptr); 648 nullptr);
655 } else { 649 continue;
656 if (i == size - 1) {
657 CFX_WideString wPath = CFX_WideString::FromUTF16LE(
658 reinterpret_cast<const unsigned short*>(bs.c_str()),
659 bs.GetLength() / sizeof(unsigned short));
660 CFX_ByteString bPath = wPath.UTF8Encode();
661 const char* szFormat =
662 "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>";
663 content.Format(szFormat, bPath.c_str());
664 fileWrite.WriteBlock(content.c_str(), fileWrite.GetSize(),
665 content.GetLength());
666 }
667 std::unique_ptr<CPDF_StreamAcc> pAcc(new CPDF_StreamAcc);
668 pAcc->LoadAllData(pStream);
669 fileWrite.WriteBlock(pAcc->GetData(), fileWrite.GetSize(),
670 pAcc->GetSize());
671 } 650 }
651 if (i == size - 1) {
652 CFX_WideString wPath = CFX_WideString::FromUTF16LE(
653 reinterpret_cast<const unsigned short*>(bs.c_str()),
654 bs.GetLength() / sizeof(unsigned short));
655 CFX_ByteString bPath = wPath.UTF8Encode();
656 const char* szFormat =
657 "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>";
658 content.Format(szFormat, bPath.c_str());
659 fileWrite.WriteBlock(content.c_str(), fileWrite.GetSize(),
660 content.GetLength());
661 }
662 std::unique_ptr<CPDF_StreamAcc> pAcc(new CPDF_StreamAcc);
663 pAcc->LoadAllData(pStream);
664 fileWrite.WriteBlock(pAcc->GetData(), fileWrite.GetSize(),
665 pAcc->GetSize());
672 } 666 }
673 } 667 }
674 if (!fileWrite.Flush()) { 668 if (!fileWrite.Flush()) {
675 // Ignoring flush error. 669 // Ignoring flush error.
676 } 670 }
677 } 671 }
678 672
679 void CPDFXFA_Document::GotoURL(CXFA_FFDoc* hDoc, 673 void CPDFXFA_Document::GotoURL(CXFA_FFDoc* hDoc,
680 const CFX_WideString& bsURL, 674 const CFX_WideString& bsURL,
681 FX_BOOL bAppend) { 675 FX_BOOL bAppend) {
(...skipping 10 matching lines...) Expand all
692 CFX_WideStringC str(bsURL.c_str()); 686 CFX_WideStringC str(bsURL.c_str());
693 687
694 pEnv->FFI_GotoURL(this, str, bAppend); 688 pEnv->FFI_GotoURL(this, str, bAppend);
695 } 689 }
696 690
697 FX_BOOL CPDFXFA_Document::IsValidationsEnabled(CXFA_FFDoc* hDoc) { 691 FX_BOOL CPDFXFA_Document::IsValidationsEnabled(CXFA_FFDoc* hDoc) {
698 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) 692 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc)
699 return FALSE; 693 return FALSE;
700 if (m_pSDKDoc->GetInterForm()) 694 if (m_pSDKDoc->GetInterForm())
701 return m_pSDKDoc->GetInterForm()->IsXfaValidationsEnabled(); 695 return m_pSDKDoc->GetInterForm()->IsXfaValidationsEnabled();
702
703 return TRUE; 696 return TRUE;
704 } 697 }
705 698
706 void CPDFXFA_Document::SetValidationsEnabled(CXFA_FFDoc* hDoc, 699 void CPDFXFA_Document::SetValidationsEnabled(CXFA_FFDoc* hDoc,
707 FX_BOOL bEnabled) { 700 FX_BOOL bEnabled) {
708 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) 701 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc)
709 return; 702 return;
710 if (m_pSDKDoc->GetInterForm()) 703 if (m_pSDKDoc->GetInterForm())
711 m_pSDKDoc->GetInterForm()->XfaSetValidationsEnabled(bEnabled); 704 m_pSDKDoc->GetInterForm()->XfaSetValidationsEnabled(bEnabled);
712 } 705 }
713 706
714 void CPDFXFA_Document::SetFocusWidget(CXFA_FFDoc* hDoc, 707 void CPDFXFA_Document::SetFocusWidget(CXFA_FFDoc* hDoc,
715 CXFA_FFWidget* hWidget) { 708 CXFA_FFWidget* hWidget) {
716 if (hDoc != m_pXFADoc.get()) 709 if (hDoc != m_pXFADoc.get())
717 return; 710 return;
718 711
719 if (!hWidget) { 712 if (!hWidget) {
720 m_pSDKDoc->SetFocusAnnot(nullptr); 713 m_pSDKDoc->SetFocusAnnot(nullptr);
721 return; 714 return;
722 } 715 }
723 716
724 int pageViewCount = m_pSDKDoc->GetPageViewCount(); 717 int pageViewCount = m_pSDKDoc->GetPageViewCount();
725 for (int i = 0; i < pageViewCount; i++) { 718 for (int i = 0; i < pageViewCount; i++) {
726 CPDFSDK_PageView* pPageView = m_pSDKDoc->GetPageView(i); 719 CPDFSDK_PageView* pPageView = m_pSDKDoc->GetPageView(i);
727 if (!pPageView) 720 if (!pPageView)
728 continue; 721 continue;
722
729 CPDFSDK_Annot* pAnnot = pPageView->GetAnnotByXFAWidget(hWidget); 723 CPDFSDK_Annot* pAnnot = pPageView->GetAnnotByXFAWidget(hWidget);
730 if (pAnnot) { 724 if (pAnnot) {
731 m_pSDKDoc->SetFocusAnnot(pAnnot); 725 m_pSDKDoc->SetFocusAnnot(pAnnot);
732 break; 726 break;
733 } 727 }
734 } 728 }
735 } 729 }
736 730
737 void CPDFXFA_Document::Print(CXFA_FFDoc* hDoc, 731 void CPDFXFA_Document::Print(CXFA_FFDoc* hDoc,
738 int32_t nStartPage, 732 int32_t nStartPage,
(...skipping 10 matching lines...) Expand all
749 } 743 }
750 744
751 pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print( 745 pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print(
752 pEnv->GetFormFillInfo()->m_pJsPlatform, 746 pEnv->GetFormFillInfo()->m_pJsPlatform,
753 dwOptions & XFA_PRINTOPT_ShowDialog, nStartPage, nEndPage, 747 dwOptions & XFA_PRINTOPT_ShowDialog, nStartPage, nEndPage,
754 dwOptions & XFA_PRINTOPT_CanCancel, dwOptions & XFA_PRINTOPT_ShrinkPage, 748 dwOptions & XFA_PRINTOPT_CanCancel, dwOptions & XFA_PRINTOPT_ShrinkPage,
755 dwOptions & XFA_PRINTOPT_AsImage, dwOptions & XFA_PRINTOPT_ReverseOrder, 749 dwOptions & XFA_PRINTOPT_AsImage, dwOptions & XFA_PRINTOPT_ReverseOrder,
756 dwOptions & XFA_PRINTOPT_PrintAnnot); 750 dwOptions & XFA_PRINTOPT_PrintAnnot);
757 } 751 }
758 752
759 void CPDFXFA_Document::GetURL(CXFA_FFDoc* hDoc, CFX_WideString& wsDocURL) {
760 if (hDoc != m_pXFADoc.get())
761 return;
762
763 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
764 if (!pEnv)
765 return;
766
767 pEnv->FFI_GetURL(this, wsDocURL);
768 }
769
770 FX_ARGB CPDFXFA_Document::GetHighlightColor(CXFA_FFDoc* hDoc) { 753 FX_ARGB CPDFXFA_Document::GetHighlightColor(CXFA_FFDoc* hDoc) {
771 if (hDoc != m_pXFADoc.get()) 754 if (hDoc != m_pXFADoc.get())
772 return 0; 755 return 0;
773 if (m_pSDKDoc) { 756 if (!m_pSDKDoc)
Tom Sepez 2016/09/08 16:53:36 nit: maybe combine with 754
dsinclair 2016/09/12 13:25:49 Done.
774 if (CPDFSDK_InterForm* pInterForm = m_pSDKDoc->GetInterForm()) { 757 return 0;
775 FX_COLORREF color = pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA); 758
776 uint8_t alpha = pInterForm->GetHighlightAlpha(); 759 CPDFSDK_InterForm* pInterForm = m_pSDKDoc->GetInterForm();
777 FX_ARGB argb = ArgbEncode((int)alpha, color); 760 if (!pInterForm)
778 return argb; 761 return 0;
779 } 762
780 } 763 FX_COLORREF color = pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA);
781 return 0; 764 uint8_t alpha = pInterForm->GetHighlightAlpha();
765 FX_ARGB argb = ArgbEncode((int)alpha, color);
Tom Sepez 2016/09/08 16:53:36 nit: local argb not needed (nor are the others, bu
dsinclair 2016/09/12 13:25:48 Done.
766 return argb;
782 } 767 }
783 768
784 FX_BOOL CPDFXFA_Document::NotifySubmit(FX_BOOL bPrevOrPost) { 769 FX_BOOL CPDFXFA_Document::NotifySubmit(FX_BOOL bPrevOrPost) {
785 if (bPrevOrPost) 770 if (bPrevOrPost)
786 return OnBeforeNotifySubmit(); 771 return OnBeforeNotifySubmit();
787 772
788 OnAfterNotifySubmit(); 773 OnAfterNotifySubmit();
789 return TRUE; 774 return TRUE;
790 } 775 }
791 776
(...skipping 11 matching lines...) Expand all
803 std::unique_ptr<CXFA_WidgetAccIterator> pWidgetAccIterator( 788 std::unique_ptr<CXFA_WidgetAccIterator> pWidgetAccIterator(
804 m_pXFADocView->CreateWidgetAccIterator()); 789 m_pXFADocView->CreateWidgetAccIterator());
805 if (pWidgetAccIterator) { 790 if (pWidgetAccIterator) {
806 CXFA_EventParam Param; 791 CXFA_EventParam Param;
807 Param.m_eType = XFA_EVENT_PreSubmit; 792 Param.m_eType = XFA_EVENT_PreSubmit;
808 while (CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext()) 793 while (CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext())
809 pWidgetHandler->ProcessEvent(pWidgetAcc, &Param); 794 pWidgetHandler->ProcessEvent(pWidgetAcc, &Param);
810 } 795 }
811 796
812 pWidgetAccIterator.reset(m_pXFADocView->CreateWidgetAccIterator()); 797 pWidgetAccIterator.reset(m_pXFADocView->CreateWidgetAccIterator());
813 if (pWidgetAccIterator) { 798 if (!pWidgetAccIterator)
814 CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); 799 return TRUE;
800
801 CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext();
802 pWidgetAcc = pWidgetAccIterator->MoveToNext();
803 while (pWidgetAcc) {
804 int fRet = pWidgetAcc->ProcessValidate(-1);
805 if (fRet == XFA_EVENTERROR_Error) {
806 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
807 if (!pEnv)
808 return FALSE;
809
810 CFX_WideString ws;
811 ws.FromLocal(IDS_XFA_Validate_Input);
812 CFX_ByteString bs = ws.UTF16LE_Encode();
813 int len = bs.GetLength();
814 pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len), (FPDF_WIDESTRING)L"",
815 0, 1);
816 bs.ReleaseBuffer(len);
817 return FALSE;
818 }
815 pWidgetAcc = pWidgetAccIterator->MoveToNext(); 819 pWidgetAcc = pWidgetAccIterator->MoveToNext();
816 while (pWidgetAcc) {
817 int fRet = pWidgetAcc->ProcessValidate(-1);
818 if (fRet == XFA_EVENTERROR_Error) {
819 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
820 if (!pEnv)
821 return FALSE;
822 CFX_WideString ws;
823 ws.FromLocal(IDS_XFA_Validate_Input);
824 CFX_ByteString bs = ws.UTF16LE_Encode();
825 int len = bs.GetLength() / sizeof(unsigned short);
826 pEnv->FFI_Alert(
827 (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)),
828 (FPDF_WIDESTRING)L"", 0, 1);
829 bs.ReleaseBuffer(len * sizeof(unsigned short));
830 return FALSE;
831 }
832 pWidgetAcc = pWidgetAccIterator->MoveToNext();
833 }
834 m_pXFADocView->UpdateDocView();
835 } 820 }
821 m_pXFADocView->UpdateDocView();
822
836 return TRUE; 823 return TRUE;
837 } 824 }
838 825
839 void CPDFXFA_Document::OnAfterNotifySubmit() { 826 void CPDFXFA_Document::OnAfterNotifySubmit() {
840 if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) 827 if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA)
841 return; 828 return;
842 829
843 if (!m_pXFADocView) 830 if (!m_pXFADocView)
844 return; 831 return;
845 832
(...skipping 12 matching lines...) Expand all
858 while (pWidgetAcc) { 845 while (pWidgetAcc) {
859 pWidgetHandler->ProcessEvent(pWidgetAcc, &Param); 846 pWidgetHandler->ProcessEvent(pWidgetAcc, &Param);
860 pWidgetAcc = pWidgetAccIterator->MoveToNext(); 847 pWidgetAcc = pWidgetAccIterator->MoveToNext();
861 } 848 }
862 m_pXFADocView->UpdateDocView(); 849 m_pXFADocView->UpdateDocView();
863 } 850 }
864 851
865 FX_BOOL CPDFXFA_Document::SubmitData(CXFA_FFDoc* hDoc, CXFA_Submit submit) { 852 FX_BOOL CPDFXFA_Document::SubmitData(CXFA_FFDoc* hDoc, CXFA_Submit submit) {
866 if (!NotifySubmit(TRUE) || !m_pXFADocView) 853 if (!NotifySubmit(TRUE) || !m_pXFADocView)
867 return FALSE; 854 return FALSE;
855
868 m_pXFADocView->UpdateDocView(); 856 m_pXFADocView->UpdateDocView();
869
870 FX_BOOL ret = SubmitDataInternal(hDoc, submit); 857 FX_BOOL ret = SubmitDataInternal(hDoc, submit);
871 NotifySubmit(FALSE); 858 NotifySubmit(FALSE);
872 return ret; 859 return ret;
873 } 860 }
874 861
875 IFX_FileRead* CPDFXFA_Document::OpenLinkedFile(CXFA_FFDoc* hDoc, 862 IFX_FileRead* CPDFXFA_Document::OpenLinkedFile(CXFA_FFDoc* hDoc,
876 const CFX_WideString& wsLink) { 863 const CFX_WideString& wsLink) {
877 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 864 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
878 if (!pEnv) 865 if (!pEnv)
879 return FALSE; 866 return FALSE;
867
880 CFX_ByteString bs = wsLink.UTF16LE_Encode(); 868 CFX_ByteString bs = wsLink.UTF16LE_Encode();
881 int len = bs.GetLength() / sizeof(unsigned short); 869 int len = bs.GetLength();
882 FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile( 870 FPDF_FILEHANDLER* pFileHandler =
883 0, (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), "rb"); 871 pEnv->FFI_OpenFile(0, (FPDF_WIDESTRING)bs.GetBuffer(len), "rb");
Tom Sepez 2016/09/08 16:53:36 pre-existing: casting a buffer of bytestring to w
dsinclair 2016/09/12 13:25:49 Acknowledged.
884 bs.ReleaseBuffer(len * sizeof(unsigned short)); 872 bs.ReleaseBuffer(len);
885 873
886 if (!pFileHandler) 874 if (!pFileHandler)
887 return nullptr; 875 return nullptr;
888 return new CFPDF_FileStream(pFileHandler); 876 return new CFPDF_FileStream(pFileHandler);
889 } 877 }
890 878
891 FX_BOOL CPDFXFA_Document::ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, 879 FX_BOOL CPDFXFA_Document::ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler,
892 int fileType, 880 int fileType,
893 FPDF_DWORD encodeType, 881 FPDF_DWORD encodeType,
894 FPDF_DWORD flag) { 882 FPDF_DWORD flag) {
895 if (!m_pXFADocView) 883 if (!m_pXFADocView)
896 return FALSE; 884 return FALSE;
897 885
898 CFX_ByteString content; 886 CFX_ByteString content;
899 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 887 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
900 if (!pEnv) 888 if (!pEnv)
901 return FALSE; 889 return FALSE;
902 890
903 CFPDF_FileStream fileStream(pFileHandler); 891 CFPDF_FileStream fileStream(pFileHandler);
904
905 if (fileType == FXFA_SAVEAS_XML) { 892 if (fileType == FXFA_SAVEAS_XML) {
906 const char kContent[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; 893 const char kContent[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
907 fileStream.WriteBlock(kContent, 0, strlen(kContent)); 894 fileStream.WriteBlock(kContent, 0, strlen(kContent));
908 m_pXFADoc->SavePackage(XFA_HASHCODE_Data, &fileStream, nullptr); 895 m_pXFADoc->SavePackage(XFA_HASHCODE_Data, &fileStream, nullptr);
909 return TRUE; 896 return TRUE;
910 } 897 }
911 898
912 if (fileType != FXFA_SAVEAS_XDP) 899 if (fileType != FXFA_SAVEAS_XDP)
913 return TRUE; 900 return TRUE;
914 901
915 if (!flag) { 902 if (!flag) {
916 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | 903 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS |
917 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; 904 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM;
918 } 905 }
919 if (!m_pPDFDoc) { 906 if (!m_pPDFDoc) {
920 fileStream.Flush(); 907 fileStream.Flush();
921 return FALSE; 908 return FALSE;
922 } 909 }
910
923 CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); 911 CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot();
924 if (!pRoot) { 912 if (!pRoot) {
925 fileStream.Flush(); 913 fileStream.Flush();
926 return FALSE; 914 return FALSE;
927 } 915 }
916
928 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); 917 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm");
929 if (!pAcroForm) { 918 if (!pAcroForm) {
930 fileStream.Flush(); 919 fileStream.Flush();
931 return FALSE; 920 return FALSE;
932 } 921 }
922
933 CPDF_Array* pArray = ToArray(pAcroForm->GetObjectBy("XFA")); 923 CPDF_Array* pArray = ToArray(pAcroForm->GetObjectBy("XFA"));
934 if (!pArray) { 924 if (!pArray) {
935 fileStream.Flush(); 925 fileStream.Flush();
936 return FALSE; 926 return FALSE;
937 } 927 }
938 928
939 int size = pArray->GetCount(); 929 int size = pArray->GetCount();
940 for (int i = 1; i < size; i += 2) { 930 for (int i = 1; i < size; i += 2) {
941 CPDF_Object* pPDFObj = pArray->GetObjectAt(i); 931 CPDF_Object* pPDFObj = pArray->GetObjectAt(i);
942 CPDF_Object* pPrePDFObj = pArray->GetObjectAt(i - 1); 932 CPDF_Object* pPrePDFObj = pArray->GetObjectAt(i - 1);
943 if (!pPrePDFObj->IsString()) 933 if (!pPrePDFObj->IsString())
944 continue; 934 continue;
945 if (!pPDFObj->IsReference()) 935 if (!pPDFObj->IsReference())
946 continue; 936 continue;
937
947 CPDF_Object* pDirectObj = pPDFObj->GetDirect(); 938 CPDF_Object* pDirectObj = pPDFObj->GetDirect();
948 if (!pDirectObj->IsStream()) 939 if (!pDirectObj->IsStream())
949 continue; 940 continue;
950 if (pPrePDFObj->GetString() == "config" && !(flag & FXFA_CONFIG)) 941 if (pPrePDFObj->GetString() == "config" && !(flag & FXFA_CONFIG))
951 continue; 942 continue;
952 if (pPrePDFObj->GetString() == "template" && !(flag & FXFA_TEMPLATE)) 943 if (pPrePDFObj->GetString() == "template" && !(flag & FXFA_TEMPLATE))
953 continue; 944 continue;
954 if (pPrePDFObj->GetString() == "localeSet" && !(flag & FXFA_LOCALESET)) 945 if (pPrePDFObj->GetString() == "localeSet" && !(flag & FXFA_LOCALESET))
955 continue; 946 continue;
956 if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS)) 947 if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS))
(...skipping 29 matching lines...) Expand all
986 if (csSrcContent.Find(L" localeSet ", 0) != -1) 977 if (csSrcContent.Find(L" localeSet ", 0) != -1)
987 flag |= FXFA_LOCALESET; 978 flag |= FXFA_LOCALESET;
988 if (csSrcContent.Find(L" datasets ", 0) != -1) 979 if (csSrcContent.Find(L" datasets ", 0) != -1)
989 flag |= FXFA_DATASETS; 980 flag |= FXFA_DATASETS;
990 if (csSrcContent.Find(L" xmpmeta ", 0) != -1) 981 if (csSrcContent.Find(L" xmpmeta ", 0) != -1)
991 flag |= FXFA_XMPMETA; 982 flag |= FXFA_XMPMETA;
992 if (csSrcContent.Find(L" xfdf ", 0) != -1) 983 if (csSrcContent.Find(L" xfdf ", 0) != -1)
993 flag |= FXFA_XFDF; 984 flag |= FXFA_XFDF;
994 if (csSrcContent.Find(L" form ", 0) != -1) 985 if (csSrcContent.Find(L" form ", 0) != -1)
995 flag |= FXFA_FORM; 986 flag |= FXFA_FORM;
996 if (flag == 0) 987 if (flag == 0) {
997 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | 988 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS |
998 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; 989 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM;
990 }
999 } 991 }
1000 992
1001 FX_BOOL CPDFXFA_Document::MailToInfo(CFX_WideString& csURL, 993 FX_BOOL CPDFXFA_Document::MailToInfo(CFX_WideString& csURL,
1002 CFX_WideString& csToAddress, 994 CFX_WideString& csToAddress,
1003 CFX_WideString& csCCAddress, 995 CFX_WideString& csCCAddress,
1004 CFX_WideString& csBCCAddress, 996 CFX_WideString& csBCCAddress,
1005 CFX_WideString& csSubject, 997 CFX_WideString& csSubject,
1006 CFX_WideString& csMsg) { 998 CFX_WideString& csMsg) {
1007 CFX_WideString srcURL = csURL; 999 CFX_WideString srcURL = csURL;
1008 srcURL.TrimLeft(); 1000 srcURL.TrimLeft();
1009 if (0 != srcURL.Left(7).CompareNoCase(L"mailto:")) 1001 if (srcURL.Left(7).CompareNoCase(L"mailto:") != 0)
1010 return FALSE; 1002 return FALSE;
1003
1011 int pos = srcURL.Find(L'?', 0); 1004 int pos = srcURL.Find(L'?', 0);
1012 CFX_WideString tmp; 1005 CFX_WideString tmp;
1013 if (pos == -1) { 1006 if (pos == -1) {
1014 pos = srcURL.Find(L'@', 0); 1007 pos = srcURL.Find(L'@', 0);
1015 if (pos == -1) 1008 if (pos == -1)
1016 return FALSE; 1009 return FALSE;
1017 1010
1018 tmp = srcURL.Right(csURL.GetLength() - 7); 1011 tmp = srcURL.Right(csURL.GetLength() - 7);
1019 tmp.TrimLeft();
1020 tmp.TrimRight();
1021 } else { 1012 } else {
1022 tmp = srcURL.Left(pos); 1013 tmp = srcURL.Left(pos);
1023 tmp = tmp.Right(tmp.GetLength() - 7); 1014 tmp = tmp.Right(tmp.GetLength() - 7);
1024 tmp.TrimLeft();
1025 tmp.TrimRight();
1026 } 1015 }
1016 tmp.TrimLeft();
1017 tmp.TrimRight();
1027 1018
1028 csToAddress = tmp; 1019 csToAddress = tmp;
1029 1020
1030 srcURL = srcURL.Right(srcURL.GetLength() - (pos + 1)); 1021 srcURL = srcURL.Right(srcURL.GetLength() - (pos + 1));
1031 while (!srcURL.IsEmpty()) { 1022 while (!srcURL.IsEmpty()) {
1032 srcURL.TrimLeft(); 1023 srcURL.TrimLeft();
1033 srcURL.TrimRight(); 1024 srcURL.TrimRight();
1034 pos = srcURL.Find(L'&', 0); 1025 pos = srcURL.Find(L'&', 0);
1035 if (pos == -1)
1036 tmp = srcURL;
1037 else
1038 tmp = srcURL.Left(pos);
1039 1026
1027 tmp = (pos == -1) ? srcURL : srcURL.Left(pos);
dsinclair 2016/09/08 15:13:51 ()'s aren't strictly needed but seems a bit easier
1040 tmp.TrimLeft(); 1028 tmp.TrimLeft();
1041 tmp.TrimRight(); 1029 tmp.TrimRight();
1042 if (tmp.GetLength() >= 3 && 0 == tmp.Left(3).CompareNoCase(L"cc=")) { 1030 if (tmp.GetLength() >= 3 && tmp.Left(3).CompareNoCase(L"cc=") == 0) {
1043 tmp = tmp.Right(tmp.GetLength() - 3); 1031 tmp = tmp.Right(tmp.GetLength() - 3);
1044 if (!csCCAddress.IsEmpty()) 1032 if (!csCCAddress.IsEmpty())
1045 csCCAddress += L';'; 1033 csCCAddress += L';';
1046 csCCAddress += tmp; 1034 csCCAddress += tmp;
1047
1048 } else if (tmp.GetLength() >= 4 && 1035 } else if (tmp.GetLength() >= 4 &&
1049 0 == tmp.Left(4).CompareNoCase(L"bcc=")) { 1036 tmp.Left(4).CompareNoCase(L"bcc=") == 0) {
1050 tmp = tmp.Right(tmp.GetLength() - 4); 1037 tmp = tmp.Right(tmp.GetLength() - 4);
1051 if (!csBCCAddress.IsEmpty()) 1038 if (!csBCCAddress.IsEmpty())
1052 csBCCAddress += L';'; 1039 csBCCAddress += L';';
1053 csBCCAddress += tmp; 1040 csBCCAddress += tmp;
1054 } else if (tmp.GetLength() >= 8 && 1041 } else if (tmp.GetLength() >= 8 &&
1055 0 == tmp.Left(8).CompareNoCase(L"subject=")) { 1042 tmp.Left(8).CompareNoCase(L"subject=") == 0) {
1056 tmp = tmp.Right(tmp.GetLength() - 8); 1043 tmp = tmp.Right(tmp.GetLength() - 8);
1057 csSubject += tmp; 1044 csSubject += tmp;
1058 } else if (tmp.GetLength() >= 5 && 1045 } else if (tmp.GetLength() >= 5 &&
1059 0 == tmp.Left(5).CompareNoCase(L"body=")) { 1046 tmp.Left(5).CompareNoCase(L"body=") == 0) {
1060 tmp = tmp.Right(tmp.GetLength() - 5); 1047 tmp = tmp.Right(tmp.GetLength() - 5);
1061 csMsg += tmp; 1048 csMsg += tmp;
1062 } 1049 }
1063 if (pos == -1) 1050 srcURL = (pos == -1) ? L"" : srcURL.Right(csURL.GetLength() - (pos + 1));
1064 srcURL = L"";
1065 else
1066 srcURL = srcURL.Right(csURL.GetLength() - (pos + 1));
1067 } 1051 }
1068 csToAddress.Replace(L",", L";"); 1052 csToAddress.Replace(L",", L";");
1069 csCCAddress.Replace(L",", L";"); 1053 csCCAddress.Replace(L",", L";");
1070 csBCCAddress.Replace(L",", L";"); 1054 csBCCAddress.Replace(L",", L";");
1071 return TRUE; 1055 return TRUE;
1072 } 1056 }
1073 1057
1074 FX_BOOL CPDFXFA_Document::SubmitDataInternal(CXFA_FFDoc* hDoc, 1058 FX_BOOL CPDFXFA_Document::SubmitDataInternal(CXFA_FFDoc* hDoc,
1075 CXFA_Submit submit) { 1059 CXFA_Submit submit) {
1076 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); 1060 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
1077 if (!pEnv) 1061 if (!pEnv)
1078 return FALSE; 1062 return FALSE;
1063
1079 CFX_WideStringC csURLC; 1064 CFX_WideStringC csURLC;
1080 submit.GetSubmitTarget(csURLC); 1065 submit.GetSubmitTarget(csURLC);
1081 CFX_WideString csURL(csURLC); 1066 CFX_WideString csURL(csURLC);
1082 if (csURL.IsEmpty()) { 1067 if (csURL.IsEmpty()) {
1083 CFX_WideString ws; 1068 CFX_WideString ws;
1084 ws.FromLocal("Submit cancelled."); 1069 ws.FromLocal("Submit cancelled.");
1085 CFX_ByteString bs = ws.UTF16LE_Encode(); 1070 CFX_ByteString bs = ws.UTF16LE_Encode();
1086 int len = bs.GetLength() / sizeof(unsigned short); 1071 int len = bs.GetLength();
1087 pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), 1072 pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len), (FPDF_WIDESTRING)L"", 0,
dsinclair 2016/09/08 15:13:51 These can't static_cast because it's a unsigned sh
Tom Sepez 2016/09/08 16:53:36 ok, pre-existing, but casting bs to FPDF_Widestrin
dsinclair 2016/09/12 13:25:49 Followup.
1088 (FPDF_WIDESTRING)L"", 0, 4); 1073 4);
1089 bs.ReleaseBuffer(len * sizeof(unsigned short)); 1074 bs.ReleaseBuffer(len);
Tom Sepez 2016/09/08 16:53:36 ReleaseBuffer isn't required as |bs| still owns th
dsinclair 2016/09/12 13:25:49 Done.
1090 return FALSE; 1075 return FALSE;
1091 } 1076 }
1077
1092 FPDF_BOOL bRet = TRUE; 1078 FPDF_BOOL bRet = TRUE;
1093 FPDF_FILEHANDLER* pFileHandler = nullptr; 1079 FPDF_FILEHANDLER* pFileHandler = nullptr;
1094 int fileFlag = -1; 1080 int fileFlag = -1;
1095 switch (submit.GetSubmitFormat()) { 1081 switch (submit.GetSubmitFormat()) {
1096 case XFA_ATTRIBUTEENUM_Xdp: { 1082 case XFA_ATTRIBUTEENUM_Xdp: {
1097 CFX_WideStringC csContentC; 1083 CFX_WideStringC csContentC;
1098 submit.GetSubmitXDPContent(csContentC); 1084 submit.GetSubmitXDPContent(csContentC);
1099 CFX_WideString csContent; 1085 CFX_WideString csContent;
1100 csContent = csContentC; 1086 csContent = csContentC;
1101 csContent.TrimLeft(); 1087 csContent.TrimLeft();
1102 csContent.TrimRight(); 1088 csContent.TrimRight();
1103 CFX_WideString space; 1089 CFX_WideString space;
1104 space.FromLocal(" "); 1090 space.FromLocal(" ");
1105 csContent = space + csContent + space; 1091 csContent = space + csContent + space;
1106 FPDF_DWORD flag = 0; 1092 FPDF_DWORD flag = 0;
1107 if (submit.IsSubmitEmbedPDF()) 1093 if (submit.IsSubmitEmbedPDF())
1108 flag |= FXFA_PDF; 1094 flag |= FXFA_PDF;
1095
1109 ToXFAContentFlags(csContent, flag); 1096 ToXFAContentFlags(csContent, flag);
1110 pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XDP, nullptr, "wb"); 1097 pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XDP, nullptr, "wb");
1111 fileFlag = FXFA_SAVEAS_XDP; 1098 fileFlag = FXFA_SAVEAS_XDP;
1112 ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XDP, 0, flag); 1099 ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XDP, 0, flag);
1113 break; 1100 break;
1114 } 1101 }
1115 case XFA_ATTRIBUTEENUM_Xml: 1102 case XFA_ATTRIBUTEENUM_Xml:
1116 pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, nullptr, "wb"); 1103 pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, nullptr, "wb");
1117 fileFlag = FXFA_SAVEAS_XML; 1104 fileFlag = FXFA_SAVEAS_XML;
1118 ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0, 0x01111111); 1105 ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0, 0x01111111);
1119 break; 1106 break;
1120 case XFA_ATTRIBUTEENUM_Pdf: 1107 case XFA_ATTRIBUTEENUM_Pdf:
1121 break; 1108 break;
1122 case XFA_ATTRIBUTEENUM_Urlencoded: 1109 case XFA_ATTRIBUTEENUM_Urlencoded:
1123 pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, nullptr, "wb"); 1110 pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, nullptr, "wb");
1124 fileFlag = FXFA_SAVEAS_XML; 1111 fileFlag = FXFA_SAVEAS_XML;
1125 ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0, 0x01111111); 1112 ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0, 0x01111111);
1126 break; 1113 break;
1127 default: 1114 default:
1128 return false; 1115 return false;
1129 } 1116 }
1130 if (!pFileHandler) 1117 if (!pFileHandler)
1131 return FALSE; 1118 return FALSE;
1132 if (0 == csURL.Left(7).CompareNoCase(L"mailto:")) { 1119 if (csURL.Left(7).CompareNoCase(L"mailto:") == 0) {
1133 CFX_WideString csToAddress; 1120 CFX_WideString csToAddress;
1134 CFX_WideString csCCAddress; 1121 CFX_WideString csCCAddress;
1135 CFX_WideString csBCCAddress; 1122 CFX_WideString csBCCAddress;
1136 CFX_WideString csSubject; 1123 CFX_WideString csSubject;
1137 CFX_WideString csMsg; 1124 CFX_WideString csMsg;
1138 bRet = MailToInfo(csURL, csToAddress, csCCAddress, csBCCAddress, csSubject, 1125 bRet = MailToInfo(csURL, csToAddress, csCCAddress, csBCCAddress, csSubject,
1139 csMsg); 1126 csMsg);
1140 if (!bRet) 1127 if (!bRet)
1141 return FALSE; 1128 return FALSE;
1129
1142 CFX_ByteString bsTo = CFX_WideString(csToAddress).UTF16LE_Encode(); 1130 CFX_ByteString bsTo = CFX_WideString(csToAddress).UTF16LE_Encode();
1143 CFX_ByteString bsCC = CFX_WideString(csCCAddress).UTF16LE_Encode(); 1131 CFX_ByteString bsCC = CFX_WideString(csCCAddress).UTF16LE_Encode();
1144 CFX_ByteString bsBcc = CFX_WideString(csBCCAddress).UTF16LE_Encode(); 1132 CFX_ByteString bsBcc = CFX_WideString(csBCCAddress).UTF16LE_Encode();
1145 CFX_ByteString bsSubject = CFX_WideString(csSubject).UTF16LE_Encode(); 1133 CFX_ByteString bsSubject = CFX_WideString(csSubject).UTF16LE_Encode();
1146 CFX_ByteString bsMsg = CFX_WideString(csMsg).UTF16LE_Encode(); 1134 CFX_ByteString bsMsg = CFX_WideString(csMsg).UTF16LE_Encode();
1147 FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength()); 1135 FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength());
1148 FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength()); 1136 FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength());
1149 FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength()); 1137 FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength());
1150 FPDF_WIDESTRING pSubject = 1138 FPDF_WIDESTRING pSubject =
1151 (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength()); 1139 (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength());
1152 FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength()); 1140 FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength());
1153 pEnv->FFI_EmailTo(pFileHandler, pTo, pSubject, pCC, pBcc, pMsg); 1141 pEnv->FFI_EmailTo(pFileHandler, pTo, pSubject, pCC, pBcc, pMsg);
1154 bsTo.ReleaseBuffer(); 1142 bsTo.ReleaseBuffer();
1155 bsCC.ReleaseBuffer(); 1143 bsCC.ReleaseBuffer();
1156 bsBcc.ReleaseBuffer(); 1144 bsBcc.ReleaseBuffer();
1157 bsSubject.ReleaseBuffer(); 1145 bsSubject.ReleaseBuffer();
1158 bsMsg.ReleaseBuffer(); 1146 bsMsg.ReleaseBuffer();
1159 } else { 1147 } else {
1160 // HTTP or FTP 1148 // HTTP or FTP
1161 CFX_WideString ws; 1149 CFX_WideString ws;
1162 CFX_ByteString bs = csURL.UTF16LE_Encode(); 1150 CFX_ByteString bs = csURL.UTF16LE_Encode();
1163 int len = bs.GetLength() / sizeof(unsigned short); 1151 int len = bs.GetLength();
1164 pEnv->FFI_UploadTo( 1152 pEnv->FFI_UploadTo(pFileHandler, fileFlag,
1165 pFileHandler, fileFlag, 1153 (FPDF_WIDESTRING)bs.GetBuffer(len));
1166 (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short))); 1154 bs.ReleaseBuffer(len);
1167 bs.ReleaseBuffer(len * sizeof(unsigned short));
1168 } 1155 }
1169 return bRet; 1156 return bRet;
1170 } 1157 }
1171 1158
1172 FX_BOOL CPDFXFA_Document::SetGlobalProperty(CXFA_FFDoc* hDoc, 1159 FX_BOOL CPDFXFA_Document::SetGlobalProperty(CXFA_FFDoc* hDoc,
1173 const CFX_ByteStringC& szPropName, 1160 const CFX_ByteStringC& szPropName,
1174 CFXJSE_Value* pValue) { 1161 CFXJSE_Value* pValue) {
1175 if (hDoc != m_pXFADoc.get()) 1162 if (hDoc != m_pXFADoc.get())
1176 return FALSE; 1163 return FALSE;
1177 1164
1178 if (m_pSDKDoc && m_pSDKDoc->GetEnv()->GetJSRuntime()) 1165 if (m_pSDKDoc && m_pSDKDoc->GetEnv()->GetJSRuntime())
1179 return m_pSDKDoc->GetEnv()->GetJSRuntime()->SetValueByName(szPropName, 1166 return m_pSDKDoc->GetEnv()->GetJSRuntime()->SetValueByName(szPropName,
1180 pValue); 1167 pValue);
1181 return FALSE; 1168 return FALSE;
1182 } 1169 }
1183 FX_BOOL CPDFXFA_Document::GetPDFScriptObject(CXFA_FFDoc* hDoc,
1184 const CFX_ByteStringC& utf8Name,
1185 CFXJSE_Value* pValue) {
1186 if (hDoc != m_pXFADoc.get())
1187 return FALSE;
1188 1170
1189 if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime())
1190 return FALSE;
1191
1192 if (!m_pJSContext) {
1193 m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc.get());
1194 m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext();
1195 }
1196
1197 return m_pSDKDoc->GetEnv()->GetJSRuntime()->GetValueByName(utf8Name, pValue);
1198 }
1199 FX_BOOL CPDFXFA_Document::GetGlobalProperty(CXFA_FFDoc* hDoc, 1171 FX_BOOL CPDFXFA_Document::GetGlobalProperty(CXFA_FFDoc* hDoc,
1200 const CFX_ByteStringC& szPropName, 1172 const CFX_ByteStringC& szPropName,
1201 CFXJSE_Value* pValue) { 1173 CFXJSE_Value* pValue) {
1202 if (hDoc != m_pXFADoc.get()) 1174 if (hDoc != m_pXFADoc.get())
1203 return FALSE; 1175 return FALSE;
1204 if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime()) 1176 if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime())
1205 return FALSE; 1177 return FALSE;
1206 1178
1207 if (!m_pJSContext) { 1179 if (!m_pJSContext) {
1208 m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc.get()); 1180 m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc.get());
1209 m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext(); 1181 m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext();
1210 } 1182 }
1211 1183
1212 return m_pSDKDoc->GetEnv()->GetJSRuntime()->GetValueByName(szPropName, 1184 return m_pSDKDoc->GetEnv()->GetJSRuntime()->GetValueByName(szPropName,
1213 pValue); 1185 pValue);
1214 } 1186 }
OLDNEW
« no previous file with comments | « no previous file | fpdfsdk/fpdfxfa/include/fpdfxfa_doc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698