| OLD | NEW |
| 1 // Copyright 2014 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 #ifndef FPDFSDK_INCLUDE_FSDK_MGR_H_ | 7 #ifndef FPDFSDK_INCLUDE_CPDFDOC_ENVIRONMENT_H_ |
| 8 #define FPDFSDK_INCLUDE_FSDK_MGR_H_ | 8 #define FPDFSDK_INCLUDE_CPDFDOC_ENVIRONMENT_H_ |
| 9 | 9 |
| 10 #include <map> | |
| 11 #include <memory> | 10 #include <memory> |
| 12 #include <vector> | |
| 13 | 11 |
| 14 #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" | 12 #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" |
| 15 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" | 13 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" |
| 16 #include "core/fpdfdoc/include/cpdf_occontext.h" | 14 #include "core/fpdfdoc/include/cpdf_occontext.h" |
| 17 #include "core/fxcrt/include/cfx_observable.h" | 15 #include "core/fxcrt/include/cfx_observable.h" |
| 18 #include "fpdfsdk/cfx_systemhandler.h" | 16 #include "fpdfsdk/cfx_systemhandler.h" |
| 19 #include "fpdfsdk/include/cpdfsdk_annot.h" | |
| 20 #include "fpdfsdk/include/fsdk_actionhandler.h" | |
| 21 #include "fpdfsdk/include/fsdk_common.h" | |
| 22 #include "fpdfsdk/include/fsdk_define.h" | 17 #include "fpdfsdk/include/fsdk_define.h" |
| 23 #include "public/fpdf_formfill.h" | 18 #include "public/fpdf_formfill.h" |
| 24 #include "public/fpdf_fwlevent.h" | 19 #include "public/fpdf_fwlevent.h" |
| 25 | 20 |
| 26 class CFFL_IFormFiller; | 21 class CFFL_IFormFiller; |
| 27 class CFX_SystemHandler; | 22 class CFX_SystemHandler; |
| 28 class CPDF_AnnotList; | |
| 29 class CPDFSDK_ActionHandler; | 23 class CPDFSDK_ActionHandler; |
| 30 class CPDFSDK_Annot; | |
| 31 class CPDFSDK_AnnotHandlerMgr; | 24 class CPDFSDK_AnnotHandlerMgr; |
| 32 class CPDFSDK_InterForm; | 25 class CPDFSDK_Document; |
| 33 class CPDFSDK_PageView; | |
| 34 class CPDFSDK_Widget; | |
| 35 class IJS_Runtime; | 26 class IJS_Runtime; |
| 36 | 27 |
| 37 class CPDFDoc_Environment final { | 28 class CPDFDoc_Environment final { |
| 38 public: | 29 public: |
| 39 CPDFDoc_Environment(UnderlyingDocumentType* pDoc, FPDF_FORMFILLINFO* pFFinfo); | 30 CPDFDoc_Environment(UnderlyingDocumentType* pDoc, FPDF_FORMFILLINFO* pFFinfo); |
| 40 ~CPDFDoc_Environment(); | 31 ~CPDFDoc_Environment(); |
| 41 | 32 |
| 42 void FFI_Invalidate(FPDF_PAGE page, | 33 void FFI_Invalidate(FPDF_PAGE page, |
| 43 double left, | 34 double left, |
| 44 double top, | 35 double top, |
| (...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 std::unique_ptr<CPDFSDK_AnnotHandlerMgr> m_pAnnotHandlerMgr; | 429 std::unique_ptr<CPDFSDK_AnnotHandlerMgr> m_pAnnotHandlerMgr; |
| 439 std::unique_ptr<CPDFSDK_ActionHandler> m_pActionHandler; | 430 std::unique_ptr<CPDFSDK_ActionHandler> m_pActionHandler; |
| 440 std::unique_ptr<IJS_Runtime> m_pJSRuntime; | 431 std::unique_ptr<IJS_Runtime> m_pJSRuntime; |
| 441 FPDF_FORMFILLINFO* const m_pInfo; | 432 FPDF_FORMFILLINFO* const m_pInfo; |
| 442 CPDFSDK_Document* m_pSDKDoc; | 433 CPDFSDK_Document* m_pSDKDoc; |
| 443 UnderlyingDocumentType* const m_pUnderlyingDoc; | 434 UnderlyingDocumentType* const m_pUnderlyingDoc; |
| 444 std::unique_ptr<CFFL_IFormFiller> m_pIFormFiller; | 435 std::unique_ptr<CFFL_IFormFiller> m_pIFormFiller; |
| 445 std::unique_ptr<CFX_SystemHandler> m_pSysHandler; | 436 std::unique_ptr<CFX_SystemHandler> m_pSysHandler; |
| 446 }; | 437 }; |
| 447 | 438 |
| 448 class CPDFSDK_Document : public CFX_Observable<CPDFSDK_Document> { | 439 #endif // FPDFSDK_INCLUDE_CPDFDOC_ENVIRONMENT_H_ |
| 449 public: | |
| 450 static CPDFSDK_Document* FromFPDFFormHandle(FPDF_FORMHANDLE hHandle); | |
| 451 | |
| 452 CPDFSDK_Document(UnderlyingDocumentType* pDoc, CPDFDoc_Environment* pEnv); | |
| 453 ~CPDFSDK_Document(); | |
| 454 | |
| 455 CPDFSDK_InterForm* GetInterForm(); | |
| 456 | |
| 457 // Gets the document object for the next layer down; for master this is | |
| 458 // a CPDF_Document, but for XFA it is a CPDFXFA_Document. | |
| 459 UnderlyingDocumentType* GetUnderlyingDocument() const { | |
| 460 #ifdef PDF_ENABLE_XFA | |
| 461 return GetXFADocument(); | |
| 462 #else // PDF_ENABLE_XFA | |
| 463 return GetPDFDocument(); | |
| 464 #endif // PDF_ENABLE_XFA | |
| 465 } | |
| 466 | |
| 467 // Gets the CPDF_Document, either directly in master, or from the | |
| 468 // CPDFXFA_Document for XFA. | |
| 469 CPDF_Document* GetPDFDocument() const { | |
| 470 #ifdef PDF_ENABLE_XFA | |
| 471 return m_pDoc ? m_pDoc->GetPDFDoc() : nullptr; | |
| 472 #else // PDF_ENABLE_XFA | |
| 473 return m_pDoc; | |
| 474 #endif // PDF_ENABLE_XFA | |
| 475 } | |
| 476 | |
| 477 #ifdef PDF_ENABLE_XFA | |
| 478 // Gets the XFA document directly (XFA-only). | |
| 479 CPDFXFA_Document* GetXFADocument() const { return m_pDoc; } | |
| 480 | |
| 481 int GetPageViewCount() const { return m_pageMap.size(); } | |
| 482 #endif // PDF_ENABLE_XFA | |
| 483 | |
| 484 CPDFSDK_PageView* GetPageView(UnderlyingPageType* pPage, bool ReNew); | |
| 485 CPDFSDK_PageView* GetPageView(int nIndex); | |
| 486 CPDFSDK_PageView* GetCurrentView(); | |
| 487 void RemovePageView(UnderlyingPageType* pPage); | |
| 488 void UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot); | |
| 489 | |
| 490 CPDFSDK_Annot* GetFocusAnnot(); | |
| 491 | |
| 492 IJS_Runtime* GetJsRuntime(); | |
| 493 | |
| 494 FX_BOOL SetFocusAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag = 0); | |
| 495 FX_BOOL KillFocusAnnot(FX_UINT nFlag = 0); | |
| 496 | |
| 497 FX_BOOL ExtractPages(const std::vector<uint16_t>& arrExtraPages, | |
| 498 CPDF_Document* pDstDoc); | |
| 499 FX_BOOL InsertPages(int nInsertAt, | |
| 500 const CPDF_Document* pSrcDoc, | |
| 501 const std::vector<uint16_t>& arrSrcPages); | |
| 502 FX_BOOL ReplacePages(int nPage, | |
| 503 const CPDF_Document* pSrcDoc, | |
| 504 const std::vector<uint16_t>& arrSrcPages); | |
| 505 | |
| 506 void OnCloseDocument(); | |
| 507 | |
| 508 int GetPageCount() { return m_pDoc->GetPageCount(); } | |
| 509 FX_BOOL GetPermissions(int nFlag); | |
| 510 FX_BOOL GetChangeMark() { return m_bChangeMask; } | |
| 511 void SetChangeMark() { m_bChangeMask = TRUE; } | |
| 512 void ClearChangeMark() { m_bChangeMask = FALSE; } | |
| 513 CFX_WideString GetPath(); | |
| 514 UnderlyingPageType* GetPage(int nIndex); | |
| 515 CPDFDoc_Environment* GetEnv() { return m_pEnv; } | |
| 516 void ProcJavascriptFun(); | |
| 517 FX_BOOL ProcOpenAction(); | |
| 518 CPDF_OCContext* GetOCContext(); | |
| 519 | |
| 520 private: | |
| 521 std::map<UnderlyingPageType*, CPDFSDK_PageView*> m_pageMap; | |
| 522 UnderlyingDocumentType* m_pDoc; | |
| 523 std::unique_ptr<CPDFSDK_InterForm> m_pInterForm; | |
| 524 CPDFSDK_Annot* m_pFocusAnnot; | |
| 525 CPDFDoc_Environment* m_pEnv; | |
| 526 std::unique_ptr<CPDF_OCContext> m_pOccontent; | |
| 527 FX_BOOL m_bChangeMask; | |
| 528 FX_BOOL m_bBeingDestroyed; | |
| 529 }; | |
| 530 | |
| 531 class CPDFSDK_PageView final : public CPDF_Page::View { | |
| 532 public: | |
| 533 CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc, UnderlyingPageType* page); | |
| 534 ~CPDFSDK_PageView(); | |
| 535 | |
| 536 #ifdef PDF_ENABLE_XFA | |
| 537 void PageView_OnDraw(CFX_RenderDevice* pDevice, | |
| 538 CFX_Matrix* pUser2Device, | |
| 539 CPDF_RenderOptions* pOptions, | |
| 540 const FX_RECT& pClip); | |
| 541 #else // PDF_ENABLE_XFA | |
| 542 void PageView_OnDraw(CFX_RenderDevice* pDevice, | |
| 543 CFX_Matrix* pUser2Device, | |
| 544 CPDF_RenderOptions* pOptions); | |
| 545 #endif // PDF_ENABLE_XFA | |
| 546 | |
| 547 const CPDF_Annot* GetPDFAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); | |
| 548 CPDFSDK_Annot* GetFXAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); | |
| 549 const CPDF_Annot* GetPDFWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); | |
| 550 CPDFSDK_Annot* GetFXWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY); | |
| 551 CPDFSDK_Annot* GetFocusAnnot(); | |
| 552 void SetFocusAnnot(CPDFSDK_Annot* pSDKAnnot, FX_UINT nFlag = 0) { | |
| 553 m_pSDKDoc->SetFocusAnnot(pSDKAnnot, nFlag); | |
| 554 } | |
| 555 FX_BOOL KillFocusAnnot(FX_UINT nFlag = 0) { | |
| 556 return m_pSDKDoc->KillFocusAnnot(nFlag); | |
| 557 } | |
| 558 void KillFocusAnnotIfNeeded(); | |
| 559 | |
| 560 CPDFSDK_Annot* AddAnnot(CPDF_Dictionary* pDict); | |
| 561 CPDFSDK_Annot* AddAnnot(const FX_CHAR* lpSubType, CPDF_Dictionary* pDict); | |
| 562 CPDFSDK_Annot* AddAnnot(CPDF_Annot* pPDFAnnot); | |
| 563 | |
| 564 FX_BOOL DeleteAnnot(CPDFSDK_Annot* pAnnot); | |
| 565 size_t CountAnnots() const; | |
| 566 CPDFSDK_Annot* GetAnnot(size_t nIndex); | |
| 567 CPDFSDK_Annot* GetAnnotByDict(CPDF_Dictionary* pDict); | |
| 568 | |
| 569 #ifdef PDF_ENABLE_XFA | |
| 570 CPDFSDK_Annot* AddAnnot(CXFA_FFWidget* pPDFAnnot); | |
| 571 CPDFSDK_Annot* GetAnnotByXFAWidget(CXFA_FFWidget* hWidget); | |
| 572 CPDFXFA_Page* GetPDFXFAPage() { return m_page; } | |
| 573 #endif // PDF_ENABLE_XFA | |
| 574 | |
| 575 CPDF_Page* GetPDFPage() const; | |
| 576 CPDF_Document* GetPDFDocument(); | |
| 577 CPDFSDK_Document* GetSDKDocument() { return m_pSDKDoc; } | |
| 578 FX_BOOL OnLButtonDown(const CFX_FloatPoint& point, FX_UINT nFlag); | |
| 579 FX_BOOL OnLButtonUp(const CFX_FloatPoint& point, FX_UINT nFlag); | |
| 580 #ifdef PDF_ENABLE_XFA | |
| 581 FX_BOOL OnRButtonDown(const CFX_FloatPoint& point, FX_UINT nFlag); | |
| 582 FX_BOOL OnRButtonUp(const CFX_FloatPoint& point, FX_UINT nFlag); | |
| 583 #endif // PDF_ENABLE_XFA | |
| 584 FX_BOOL OnChar(int nChar, FX_UINT nFlag); | |
| 585 FX_BOOL OnKeyDown(int nKeyCode, int nFlag); | |
| 586 FX_BOOL OnKeyUp(int nKeyCode, int nFlag); | |
| 587 | |
| 588 FX_BOOL OnMouseMove(const CFX_FloatPoint& point, int nFlag); | |
| 589 FX_BOOL OnMouseWheel(double deltaX, | |
| 590 double deltaY, | |
| 591 const CFX_FloatPoint& point, | |
| 592 int nFlag); | |
| 593 bool IsValidAnnot(const CPDF_Annot* p) const; | |
| 594 void GetCurrentMatrix(CFX_Matrix& matrix) { matrix = m_curMatrix; } | |
| 595 void UpdateRects(const std::vector<CFX_FloatRect>& rects); | |
| 596 void UpdateView(CPDFSDK_Annot* pAnnot); | |
| 597 const std::vector<CPDFSDK_Annot*>& GetAnnotList() const { | |
| 598 return m_fxAnnotArray; | |
| 599 } | |
| 600 | |
| 601 int GetPageIndex() const; | |
| 602 void LoadFXAnnots(); | |
| 603 void ClearFXAnnots(); | |
| 604 void SetValid(FX_BOOL bValid) { m_bValid = bValid; } | |
| 605 FX_BOOL IsValid() { return m_bValid; } | |
| 606 void SetLock(FX_BOOL bLocked) { m_bLocked = bLocked; } | |
| 607 FX_BOOL IsLocked() { return m_bLocked; } | |
| 608 #ifndef PDF_ENABLE_XFA | |
| 609 bool OwnsPage() const { return m_bOwnsPage; } | |
| 610 void TakePageOwnership() { m_bOwnsPage = true; } | |
| 611 #endif // PDF_ENABLE_XFA | |
| 612 | |
| 613 private: | |
| 614 int GetPageIndexForStaticPDF() const; | |
| 615 | |
| 616 CFX_Matrix m_curMatrix; | |
| 617 UnderlyingPageType* const m_page; | |
| 618 std::unique_ptr<CPDF_AnnotList> m_pAnnotList; | |
| 619 std::vector<CPDFSDK_Annot*> m_fxAnnotArray; | |
| 620 CPDFSDK_Document* const m_pSDKDoc; | |
| 621 CPDFSDK_Annot* m_CaptureWidget; | |
| 622 #ifndef PDF_ENABLE_XFA | |
| 623 bool m_bOwnsPage; | |
| 624 #endif // PDF_ENABLE_XFA | |
| 625 FX_BOOL m_bEnterWidget; | |
| 626 FX_BOOL m_bExitWidget; | |
| 627 FX_BOOL m_bOnWidget; | |
| 628 FX_BOOL m_bValid; | |
| 629 FX_BOOL m_bLocked; | |
| 630 }; | |
| 631 | |
| 632 #endif // FPDFSDK_INCLUDE_FSDK_MGR_H_ | |
| OLD | NEW |