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

Side by Side Diff: fpdfsdk/cpdfsdk_interform.cpp

Issue 2410893002: Merge CPDFSDK_Document into CPDFSDK_FormFillEnvironment (Closed)
Patch Set: Rebase to master Created 4 years, 2 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
OLDNEW
1 // Copyright 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 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/cpdfsdk_interform.h" 7 #include "fpdfsdk/cpdfsdk_interform.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
11 #include <vector> 11 #include <vector>
12 12
13 #include "core/fpdfapi/page/cpdf_page.h" 13 #include "core/fpdfapi/page/cpdf_page.h"
14 #include "core/fpdfapi/parser/cfdf_document.h" 14 #include "core/fpdfapi/parser/cfdf_document.h"
15 #include "core/fpdfapi/parser/cpdf_array.h" 15 #include "core/fpdfapi/parser/cpdf_array.h"
16 #include "core/fpdfapi/parser/cpdf_document.h" 16 #include "core/fpdfapi/parser/cpdf_document.h"
17 #include "core/fpdfapi/parser/cpdf_stream.h" 17 #include "core/fpdfapi/parser/cpdf_stream.h"
18 #include "core/fpdfdoc/cpdf_actionfields.h" 18 #include "core/fpdfdoc/cpdf_actionfields.h"
19 #include "core/fpdfdoc/cpdf_interform.h" 19 #include "core/fpdfdoc/cpdf_interform.h"
20 #include "core/fxge/cfx_graphstatedata.h" 20 #include "core/fxge/cfx_graphstatedata.h"
21 #include "core/fxge/cfx_pathdata.h" 21 #include "core/fxge/cfx_pathdata.h"
22 #include "core/fxge/cfx_renderdevice.h" 22 #include "core/fxge/cfx_renderdevice.h"
23 #include "fpdfsdk/cba_annotiterator.h" 23 #include "fpdfsdk/cba_annotiterator.h"
24 #include "fpdfsdk/cpdfsdk_annot.h" 24 #include "fpdfsdk/cpdfsdk_annot.h"
25 #include "fpdfsdk/cpdfsdk_document.h"
26 #include "fpdfsdk/cpdfsdk_formfillenvironment.h" 25 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
27 #include "fpdfsdk/cpdfsdk_pageview.h" 26 #include "fpdfsdk/cpdfsdk_pageview.h"
28 #include "fpdfsdk/cpdfsdk_widget.h" 27 #include "fpdfsdk/cpdfsdk_widget.h"
29 #include "fpdfsdk/formfiller/cffl_formfiller.h" 28 #include "fpdfsdk/formfiller/cffl_formfiller.h"
30 #include "fpdfsdk/fsdk_actionhandler.h" 29 #include "fpdfsdk/fsdk_actionhandler.h"
31 #include "fpdfsdk/fsdk_define.h" 30 #include "fpdfsdk/fsdk_define.h"
32 #include "fpdfsdk/fxedit/fxet_edit.h" 31 #include "fpdfsdk/fxedit/fxet_edit.h"
33 #include "fpdfsdk/ipdfsdk_annothandler.h" 32 #include "fpdfsdk/ipdfsdk_annothandler.h"
34 #include "fpdfsdk/javascript/ijs_context.h" 33 #include "fpdfsdk/javascript/ijs_context.h"
35 #include "fpdfsdk/javascript/ijs_runtime.h" 34 #include "fpdfsdk/javascript/ijs_runtime.h"
36 #include "fpdfsdk/pdfwindow/PWL_Utils.h" 35 #include "fpdfsdk/pdfwindow/PWL_Utils.h"
37 #include "third_party/base/stl_util.h" 36 #include "third_party/base/stl_util.h"
38 37
39 #ifdef PDF_ENABLE_XFA 38 #ifdef PDF_ENABLE_XFA
40 #include "fpdfsdk/cpdfsdk_xfawidget.h" 39 #include "fpdfsdk/cpdfsdk_xfawidget.h"
41 #include "fpdfsdk/fpdfxfa/cpdfxfa_document.h" 40 #include "fpdfsdk/fpdfxfa/cpdfxfa_document.h"
42 #include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h" 41 #include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h"
43 #include "xfa/fxfa/cxfa_eventparam.h" 42 #include "xfa/fxfa/cxfa_eventparam.h"
44 #include "xfa/fxfa/xfa_ffdocview.h" 43 #include "xfa/fxfa/xfa_ffdocview.h"
45 #include "xfa/fxfa/xfa_ffwidget.h" 44 #include "xfa/fxfa/xfa_ffwidget.h"
46 #include "xfa/fxfa/xfa_ffwidgethandler.h" 45 #include "xfa/fxfa/xfa_ffwidgethandler.h"
47 #endif // PDF_ENABLE_XFA 46 #endif // PDF_ENABLE_XFA
48 47
49 CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_FormFillEnvironment* pFormFillEnv) 48 CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_FormFillEnvironment* pFormFillEnv)
50 : m_pFormFillEnv(pFormFillEnv), 49 : m_pFormFillEnv(pFormFillEnv),
51 m_pInterForm(new CPDF_InterForm( 50 m_pInterForm(new CPDF_InterForm(m_pFormFillEnv->GetPDFDocument())),
52 m_pFormFillEnv->GetSDKDocument()->GetPDFDocument())),
53 #ifdef PDF_ENABLE_XFA 51 #ifdef PDF_ENABLE_XFA
54 m_bXfaCalculate(TRUE), 52 m_bXfaCalculate(TRUE),
55 m_bXfaValidationsEnabled(TRUE), 53 m_bXfaValidationsEnabled(TRUE),
56 #endif // PDF_ENABLE_XFA 54 #endif // PDF_ENABLE_XFA
57 m_bCalculate(TRUE), 55 m_bCalculate(TRUE),
58 m_bBusy(FALSE), 56 m_bBusy(FALSE),
59 m_iHighlightAlpha(0) { 57 m_iHighlightAlpha(0) {
60 m_pInterForm->SetFormNotify(this); 58 m_pInterForm->SetFormNotify(this);
61 for (int i = 0; i < kNumFieldTypes; ++i) 59 for (int i = 0; i < kNumFieldTypes; ++i)
62 m_bNeedHightlight[i] = FALSE; 60 m_bNeedHightlight[i] = FALSE;
(...skipping 29 matching lines...) Expand all
92 CPDFSDK_Widget* pWidget = nullptr; 90 CPDFSDK_Widget* pWidget = nullptr;
93 const auto it = m_Map.find(pControl); 91 const auto it = m_Map.find(pControl);
94 if (it != m_Map.end()) 92 if (it != m_Map.end())
95 pWidget = it->second; 93 pWidget = it->second;
96 if (pWidget) 94 if (pWidget)
97 return pWidget; 95 return pWidget;
98 if (!createIfNeeded) 96 if (!createIfNeeded)
99 return nullptr; 97 return nullptr;
100 98
101 CPDF_Dictionary* pControlDict = pControl->GetWidget(); 99 CPDF_Dictionary* pControlDict = pControl->GetWidget();
102 CPDF_Document* pDocument = m_pFormFillEnv->GetSDKDocument()->GetPDFDocument(); 100 CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
103 CPDFSDK_PageView* pPage = nullptr; 101 CPDFSDK_PageView* pPage = nullptr;
104 102
105 if (CPDF_Dictionary* pPageDict = pControlDict->GetDictFor("P")) { 103 if (CPDF_Dictionary* pPageDict = pControlDict->GetDictFor("P")) {
106 int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum()); 104 int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum());
107 if (nPageIndex >= 0) 105 if (nPageIndex >= 0)
108 pPage = m_pFormFillEnv->GetSDKDocument()->GetPageView(nPageIndex); 106 pPage = m_pFormFillEnv->GetPageView(nPageIndex);
109 } 107 }
110 108
111 if (!pPage) { 109 if (!pPage) {
112 int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict); 110 int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict);
113 if (nPageIndex >= 0) 111 if (nPageIndex >= 0)
114 pPage = m_pFormFillEnv->GetSDKDocument()->GetPageView(nPageIndex); 112 pPage = m_pFormFillEnv->GetPageView(nPageIndex);
115 } 113 }
116 114
117 if (!pPage) 115 if (!pPage)
118 return nullptr; 116 return nullptr;
119 117
120 return static_cast<CPDFSDK_Widget*>(pPage->GetAnnotByDict(pControlDict)); 118 return static_cast<CPDFSDK_Widget*>(pPage->GetAnnotByDict(pControlDict));
121 } 119 }
122 120
123 void CPDFSDK_InterForm::GetWidgets( 121 void CPDFSDK_InterForm::GetWidgets(
124 const CFX_WideString& sFieldName, 122 const CFX_WideString& sFieldName,
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 } 327 }
330 } 328 }
331 329
332 void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) { 330 void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) {
333 for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { 331 for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
334 CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); 332 CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
335 ASSERT(pFormCtrl); 333 ASSERT(pFormCtrl);
336 334
337 if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, false)) { 335 if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, false)) {
338 UnderlyingPageType* pPage = pWidget->GetUnderlyingPage(); 336 UnderlyingPageType* pPage = pWidget->GetUnderlyingPage();
339 CPDFSDK_PageView* pPageView = 337 CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage, false);
340 m_pFormFillEnv->GetSDKDocument()->GetPageView(pPage, false);
341 FX_RECT rcBBox = m_pFormFillEnv->GetInteractiveFormFiller()->GetViewBBox( 338 FX_RECT rcBBox = m_pFormFillEnv->GetInteractiveFormFiller()->GetViewBBox(
342 pPageView, pWidget); 339 pPageView, pWidget);
343 340
344 m_pFormFillEnv->Invalidate(pPage, rcBBox.left, rcBBox.top, rcBBox.right, 341 m_pFormFillEnv->Invalidate(pPage, rcBBox.left, rcBBox.top, rcBBox.right,
345 rcBBox.bottom); 342 rcBBox.bottom);
346 } 343 }
347 } 344 }
348 } 345 }
349 346
350 FX_BOOL CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField, 347 FX_BOOL CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField,
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 nBufSize = fdfEncodedData.GetLength(); 503 nBufSize = fdfEncodedData.GetLength();
507 pBuf = FX_Alloc(uint8_t, nBufSize); 504 pBuf = FX_Alloc(uint8_t, nBufSize);
508 FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize); 505 FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize);
509 return TRUE; 506 return TRUE;
510 } 507 }
511 508
512 FX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf( 509 FX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(
513 const std::vector<CPDF_FormField*>& fields, 510 const std::vector<CPDF_FormField*>& fields,
514 bool bIncludeOrExclude, 511 bool bIncludeOrExclude,
515 CFX_ByteTextBuf& textBuf) { 512 CFX_ByteTextBuf& textBuf) {
516 std::unique_ptr<CFDF_Document> pFDF(m_pInterForm->ExportToFDF( 513 std::unique_ptr<CFDF_Document> pFDF(
517 m_pFormFillEnv->GetSDKDocument()->GetPath().AsStringC(), fields, 514 m_pInterForm->ExportToFDF(m_pFormFillEnv->JS_docGetFilePath().AsStringC(),
518 bIncludeOrExclude, false)); 515 fields, bIncludeOrExclude, false));
519 return pFDF ? pFDF->WriteBuf(textBuf) : FALSE; 516 return pFDF ? pFDF->WriteBuf(textBuf) : FALSE;
520 } 517 }
521 518
522 CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName( 519 CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName(
523 const CFX_WideString& sFileExt) { 520 const CFX_WideString& sFileExt) {
524 return L""; 521 return L"";
525 } 522 }
526 523
527 FX_BOOL CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination, 524 FX_BOOL CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination,
528 FX_BOOL bUrlEncoded) { 525 FX_BOOL bUrlEncoded) {
529 if (sDestination.IsEmpty()) 526 if (sDestination.IsEmpty())
530 return FALSE; 527 return FALSE;
531 528
532 if (!m_pFormFillEnv || !m_pFormFillEnv->GetSDKDocument() || !m_pInterForm) 529 if (!m_pFormFillEnv || !m_pInterForm)
533 return FALSE; 530 return FALSE;
534 531
535 CFX_WideString wsPDFFilePath = m_pFormFillEnv->GetSDKDocument()->GetPath(); 532 CFX_WideString wsPDFFilePath = m_pFormFillEnv->JS_docGetFilePath();
536 CFDF_Document* pFDFDoc = 533 CFDF_Document* pFDFDoc =
537 m_pInterForm->ExportToFDF(wsPDFFilePath.AsStringC(), false); 534 m_pInterForm->ExportToFDF(wsPDFFilePath.AsStringC(), false);
538 if (!pFDFDoc) 535 if (!pFDFDoc)
539 return FALSE; 536 return FALSE;
540 537
541 CFX_ByteTextBuf FdfBuffer; 538 CFX_ByteTextBuf FdfBuffer;
542 FX_BOOL bRet = pFDFDoc->WriteBuf(FdfBuffer); 539 FX_BOOL bRet = pFDFDoc->WriteBuf(FdfBuffer);
543 delete pFDFDoc; 540 delete pFDFDoc;
544 if (!bRet) 541 if (!bRet)
545 return FALSE; 542 return FALSE;
546 543
547 uint8_t* pBuffer = FdfBuffer.GetBuffer(); 544 uint8_t* pBuffer = FdfBuffer.GetBuffer();
548 FX_STRSIZE nBufSize = FdfBuffer.GetLength(); 545 FX_STRSIZE nBufSize = FdfBuffer.GetLength();
549 546
550 if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize)) 547 if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize))
551 return FALSE; 548 return FALSE;
552 549
553 m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str()); 550 m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
554 551
555 if (bUrlEncoded) 552 if (bUrlEncoded)
556 FX_Free(pBuffer); 553 FX_Free(pBuffer);
557 554
558 return TRUE; 555 return TRUE;
559 } 556 }
560 557
561 FX_BOOL CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) { 558 FX_BOOL CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) {
562 CFDF_Document* pFDF = m_pInterForm->ExportToFDF( 559 CFDF_Document* pFDF = m_pInterForm->ExportToFDF(
563 m_pFormFillEnv->GetSDKDocument()->GetPath().AsStringC(), false); 560 m_pFormFillEnv->JS_docGetFilePath().AsStringC(), false);
564 if (!pFDF) 561 if (!pFDF)
565 return FALSE; 562 return FALSE;
566 563
567 FX_BOOL bRet = pFDF->WriteBuf(textBuf); 564 FX_BOOL bRet = pFDF->WriteBuf(textBuf);
568 delete pFDF; 565 delete pFDF;
569 566
570 return bRet; 567 return bRet;
571 } 568 }
572 569
573 FX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) { 570 FX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 } 707 }
711 } 708 }
712 709
713 FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) { 710 FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) {
714 if (nFieldType < 0 || nFieldType > kNumFieldTypes) 711 if (nFieldType < 0 || nFieldType > kNumFieldTypes)
715 return FXSYS_RGB(255, 255, 255); 712 return FXSYS_RGB(255, 255, 255);
716 if (nFieldType == 0) 713 if (nFieldType == 0)
717 return m_aHighlightColor[0]; 714 return m_aHighlightColor[0];
718 return m_aHighlightColor[nFieldType - 1]; 715 return m_aHighlightColor[nFieldType - 1];
719 } 716 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698