Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "Document.h" | 7 #include "Document.h" |
| 8 | 8 |
| 9 #include "../../include/fsdk_mgr.h" // For CPDFDoc_Environment. | 9 #include "../../include/fsdk_mgr.h" // For CPDFDoc_Environment. |
| 10 #include "../../include/javascript/IJavaScript.h" | 10 #include "../../include/javascript/IJavaScript.h" |
| (...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 513 if (params.size() != 1) { | 513 if (params.size() != 1) { |
| 514 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); | 514 sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); |
| 515 return FALSE; | 515 return FALSE; |
| 516 } | 516 } |
| 517 | 517 |
| 518 CFX_WideString sFieldName = params[0].ToCFXWideString(); | 518 CFX_WideString sFieldName = params[0].ToCFXWideString(); |
| 519 CPDFSDK_InterForm* pInterForm = | 519 CPDFSDK_InterForm* pInterForm = |
| 520 (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); | 520 (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); |
| 521 ASSERT(pInterForm != NULL); | 521 ASSERT(pInterForm != NULL); |
| 522 | 522 |
| 523 CFX_PtrArray widgets; | 523 std::vector<CPDFSDK_Widget*> widgets; |
| 524 pInterForm->GetWidgets(sFieldName, widgets); | 524 pInterForm->GetWidgets(sFieldName, &widgets); |
| 525 | 525 |
| 526 int nSize = widgets.GetSize(); | 526 if (widgets.empty()) |
| 527 return TRUE; | |
| 527 | 528 |
| 528 if (nSize > 0) { | 529 for (CPDFSDK_Widget* pWidget : widgets) { |
| 529 for (int i = 0; i < nSize; i++) { | 530 CPDF_Rect rcAnnot = pWidget->GetRect(); |
| 530 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets[i]; | 531 rcAnnot.left -= 1; |
|
Tom Sepez
2015/11/09 21:25:32
nit: some would say --.
Lei Zhang
2015/11/09 22:45:28
Done.
| |
| 531 ASSERT(pWidget != NULL); | 532 rcAnnot.bottom -= 1; |
| 533 rcAnnot.right += 1; | |
| 534 rcAnnot.top += 1; | |
| 532 | 535 |
| 533 CPDF_Rect rcAnnot = pWidget->GetRect(); | 536 CFX_RectArray aRefresh; |
| 534 rcAnnot.left -= 1; | 537 aRefresh.Add(rcAnnot); |
| 535 rcAnnot.bottom -= 1; | |
| 536 rcAnnot.right += 1; | |
| 537 rcAnnot.top += 1; | |
| 538 | 538 |
| 539 CFX_RectArray aRefresh; | 539 CPDF_Page* pPage = pWidget->GetPDFPage(); |
| 540 aRefresh.Add(rcAnnot); | 540 ASSERT(pPage != NULL); |
|
Tom Sepez
2015/11/09 21:25:32
nit: ASSERT(pPage)
Lei Zhang
2015/11/09 22:45:28
Done.
| |
| 541 | 541 |
| 542 CPDF_Page* pPage = pWidget->GetPDFPage(); | 542 CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage); |
| 543 ASSERT(pPage != NULL); | 543 pPageView->DeleteAnnot(pWidget); |
| 544 | 544 |
|
Tom Sepez
2015/11/09 21:25:32
nit: blank line probably not needed here.
Lei Zhang
2015/11/09 22:45:28
Done.
| |
| 545 CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage); | 545 pPageView->UpdateRects(aRefresh); |
| 546 pPageView->DeleteAnnot(pWidget); | |
| 547 | |
| 548 pPageView->UpdateRects(aRefresh); | |
| 549 } | |
| 550 m_pDocument->SetChangeMark(); | |
| 551 } | 546 } |
| 547 m_pDocument->SetChangeMark(); | |
| 552 | 548 |
| 553 return TRUE; | 549 return TRUE; |
| 554 } | 550 } |
| 555 | 551 |
| 556 // reset filed values within a document. | 552 // reset filed values within a document. |
| 557 // comment: | 553 // comment: |
| 558 // note: if the fields names r not rational, aodbe is dumb for it. | 554 // note: if the fields names r not rational, aodbe is dumb for it. |
| 559 | 555 |
| 560 FX_BOOL Document::resetForm(IJS_Context* cc, | 556 FX_BOOL Document::resetForm(IJS_Context* cc, |
| 561 const CJS_Parameters& params, | 557 const CJS_Parameters& params, |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 575 if (params.size() > 0) { | 571 if (params.size() > 0) { |
| 576 switch (params[0].GetType()) { | 572 switch (params[0].GetType()) { |
| 577 default: | 573 default: |
| 578 aName.Attach(params[0].ToV8Array()); | 574 aName.Attach(params[0].ToV8Array()); |
| 579 break; | 575 break; |
| 580 case CJS_Value::VT_string: | 576 case CJS_Value::VT_string: |
| 581 aName.SetElement(0, params[0]); | 577 aName.SetElement(0, params[0]); |
| 582 break; | 578 break; |
| 583 } | 579 } |
| 584 | 580 |
| 585 CFX_PtrArray aFields; | 581 std::vector<CPDF_FormField*> aFields; |
| 586 | 582 for (int i = 0, isz = aName.GetLength(); i < isz; ++i) { |
| 587 for (int i = 0, isz = aName.GetLength(); i < isz; i++) { | |
| 588 CJS_Value valElement(pRuntime); | 583 CJS_Value valElement(pRuntime); |
| 589 aName.GetElement(i, valElement); | 584 aName.GetElement(i, valElement); |
| 590 CFX_WideString swVal = valElement.ToCFXWideString(); | 585 CFX_WideString swVal = valElement.ToCFXWideString(); |
| 591 for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; j++) { | 586 for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; ++j) |
| 592 aFields.Add((void*)pPDFForm->GetField(j, swVal)); | 587 aFields.push_back(pPDFForm->GetField(j, swVal)); |
| 593 } | |
| 594 } | 588 } |
| 595 | 589 |
| 596 if (aFields.GetSize() > 0) { | 590 if (!aFields.empty()) { |
| 597 pPDFForm->ResetForm(aFields, TRUE, TRUE); | 591 pPDFForm->ResetForm(aFields, TRUE, TRUE); |
| 598 m_pDocument->SetChangeMark(); | 592 m_pDocument->SetChangeMark(); |
| 599 } | 593 } |
| 600 } else { | 594 } else { |
| 601 pPDFForm->ResetForm(TRUE); | 595 pPDFForm->ResetForm(TRUE); |
|
Tom Sepez
2015/11/09 21:25:32
nit: maybe early return instead of else. (Someone
Lei Zhang
2015/11/09 22:45:28
Done.
| |
| 602 m_pDocument->SetChangeMark(); | 596 m_pDocument->SetChangeMark(); |
| 603 } | 597 } |
| 604 | 598 |
| 605 return TRUE; | 599 return TRUE; |
| 606 } | 600 } |
| 607 | 601 |
| 608 FX_BOOL Document::saveAs(IJS_Context* cc, | 602 FX_BOOL Document::saveAs(IJS_Context* cc, |
| 609 const CJS_Parameters& params, | 603 const CJS_Parameters& params, |
| 610 CJS_Value& vRet, | 604 CJS_Value& vRet, |
| 611 CFX_WideString& sError) { | 605 CFX_WideString& sError) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 656 pValue = FXJS_GetObjectElement(isolate, pObj, L"aFields"); | 650 pValue = FXJS_GetObjectElement(isolate, pObj, L"aFields"); |
| 657 aFields.Attach( | 651 aFields.Attach( |
| 658 CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToV8Array()); | 652 CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToV8Array()); |
| 659 } | 653 } |
| 660 | 654 |
| 661 CPDFSDK_InterForm* pInterForm = | 655 CPDFSDK_InterForm* pInterForm = |
| 662 (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); | 656 (CPDFSDK_InterForm*)m_pDocument->GetInterForm(); |
| 663 CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); | 657 CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); |
| 664 FX_BOOL bAll = (aFields.GetLength() == 0); | 658 FX_BOOL bAll = (aFields.GetLength() == 0); |
| 665 if (bAll && bEmpty) { | 659 if (bAll && bEmpty) { |
| 666 if (pPDFInterForm->CheckRequiredFields()) { | 660 if (pPDFInterForm->CheckRequiredFields(nullptr, TRUE)) { |
| 667 pRuntime->BeginBlock(); | 661 pRuntime->BeginBlock(); |
| 668 pInterForm->SubmitForm(strURL, FALSE); | 662 pInterForm->SubmitForm(strURL, FALSE); |
| 669 pRuntime->EndBlock(); | 663 pRuntime->EndBlock(); |
| 670 } | 664 } |
| 671 return TRUE; | 665 return TRUE; |
| 672 } | 666 } |
| 673 | 667 |
| 674 CFX_PtrArray fieldObjects; | 668 std::vector<CPDF_FormField*> fieldObjects; |
| 675 for (int i = 0, sz = aFields.GetLength(); i < sz; i++) { | 669 for (int i = 0, sz = aFields.GetLength(); i < sz; ++i) { |
| 676 CJS_Value valName(pRuntime); | 670 CJS_Value valName(pRuntime); |
| 677 aFields.GetElement(i, valName); | 671 aFields.GetElement(i, valName); |
| 678 | 672 |
| 679 CFX_WideString sName = valName.ToCFXWideString(); | 673 CFX_WideString sName = valName.ToCFXWideString(); |
| 680 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); | 674 CPDF_InterForm* pPDFForm = pInterForm->GetInterForm(); |
| 681 for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) { | 675 for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) { |
| 682 CPDF_FormField* pField = pPDFForm->GetField(j, sName); | 676 CPDF_FormField* pField = pPDFForm->GetField(j, sName); |
| 683 if (!bEmpty && pField->GetValue().IsEmpty()) | 677 if (!bEmpty && pField->GetValue().IsEmpty()) |
| 684 continue; | 678 continue; |
| 685 | 679 |
| 686 fieldObjects.Add(pField); | 680 fieldObjects.push_back(pField); |
| 687 } | 681 } |
| 688 } | 682 } |
| 689 | 683 |
| 690 if (pPDFInterForm->CheckRequiredFields(&fieldObjects, TRUE)) { | 684 if (pPDFInterForm->CheckRequiredFields(&fieldObjects, TRUE)) { |
| 691 pRuntime->BeginBlock(); | 685 pRuntime->BeginBlock(); |
| 692 pInterForm->SubmitFields(strURL, fieldObjects, TRUE, !bFDF); | 686 pInterForm->SubmitFields(strURL, fieldObjects, TRUE, !bFDF); |
| 693 pRuntime->EndBlock(); | 687 pRuntime->EndBlock(); |
| 694 } | 688 } |
| 695 return TRUE; | 689 return TRUE; |
| 696 } | 690 } |
| (...skipping 1121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1818 CFX_DWordArray DelArray; | 1812 CFX_DWordArray DelArray; |
| 1819 | 1813 |
| 1820 for (int j = DelArray.GetSize() - 1; j >= 0; j--) { | 1814 for (int j = DelArray.GetSize() - 1; j >= 0; j--) { |
| 1821 m_DelayData.RemoveAt(DelArray[j]); | 1815 m_DelayData.RemoveAt(DelArray[j]); |
| 1822 } | 1816 } |
| 1823 } | 1817 } |
| 1824 | 1818 |
| 1825 CJS_Document* Document::GetCJSDoc() const { | 1819 CJS_Document* Document::GetCJSDoc() const { |
| 1826 return static_cast<CJS_Document*>(m_pJSObject); | 1820 return static_cast<CJS_Document*>(m_pJSObject); |
| 1827 } | 1821 } |
| OLD | NEW |