Chromium Code Reviews| 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 #include "fpdfsdk/fpdfxfa/include/fpdfxfa_doc.h" | 7 #include "fpdfsdk/fpdfxfa/include/cpdfxfa_docenvironment.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_string.h" |
| 11 #include "core/fpdfapi/fpdf_parser/include/cpdf_stream_acc.h" | 11 #include "core/fpdfapi/fpdf_parser/include/cpdf_stream_acc.h" |
| 12 #include "core/fpdfapi/fpdf_parser/include/cpdf_string.h" | 12 #include "fpdfsdk/fpdfxfa/include/fpdfxfa_doc.h" |
| 13 #include "fpdfsdk/fpdfxfa/include/fpdfxfa_app.h" | |
| 14 #include "fpdfsdk/fpdfxfa/include/fpdfxfa_page.h" | 13 #include "fpdfsdk/fpdfxfa/include/fpdfxfa_page.h" |
| 15 #include "fpdfsdk/fpdfxfa/include/fpdfxfa_util.h" | |
| 16 #include "fpdfsdk/include/fsdk_define.h" | |
| 17 #include "fpdfsdk/include/cpdfsdk_interform.h" | 14 #include "fpdfsdk/include/cpdfsdk_interform.h" |
| 15 #include "fpdfsdk/javascript/ijs_runtime.h" | |
| 18 #include "fpdfsdk/include/fsdk_mgr.h" | 16 #include "fpdfsdk/include/fsdk_mgr.h" |
|
Tom Sepez
2016/09/08 17:12:37
nit: header order.
dsinclair
2016/09/08 18:07:49
Sorting is hard.
| |
| 19 #include "fpdfsdk/javascript/ijs_runtime.h" | |
| 20 #include "public/fpdf_formfill.h" | |
| 21 #include "xfa/fxfa/include/cxfa_eventparam.h" | |
| 22 #include "xfa/fxfa/include/xfa_ffapp.h" | |
| 23 #include "xfa/fxfa/include/xfa_ffdoc.h" | |
| 24 #include "xfa/fxfa/include/xfa_ffdocview.h" | 17 #include "xfa/fxfa/include/xfa_ffdocview.h" |
| 25 #include "xfa/fxfa/include/xfa_ffpageview.h" | |
| 26 #include "xfa/fxfa/include/xfa_ffwidget.h" | 18 #include "xfa/fxfa/include/xfa_ffwidget.h" |
| 27 #include "xfa/fxfa/include/xfa_ffwidgethandler.h" | 19 #include "xfa/fxfa/include/xfa_ffwidgethandler.h" |
| 28 | 20 |
| 29 #define IDS_XFA_Validate_Input \ | 21 #define IDS_XFA_Validate_Input \ |
| 30 "At least one required field was empty. Please fill in the required " \ | 22 "At least one required field was empty. Please fill in the required " \ |
| 31 "fields\r\n(highlighted) before continuing." | 23 "fields\r\n(highlighted) before continuing." |
| 32 | 24 |
| 33 // submit | 25 // submit |
| 34 #define FXFA_CONFIG 0x00000001 | 26 #define FXFA_CONFIG 0x00000001 |
| 35 #define FXFA_TEMPLATE 0x00000010 | 27 #define FXFA_TEMPLATE 0x00000010 |
| 36 #define FXFA_LOCALESET 0x00000100 | 28 #define FXFA_LOCALESET 0x00000100 |
| 37 #define FXFA_DATASETS 0x00001000 | 29 #define FXFA_DATASETS 0x00001000 |
| 38 #define FXFA_XMPMETA 0x00010000 | 30 #define FXFA_XMPMETA 0x00010000 |
| 39 #define FXFA_XFDF 0x00100000 | 31 #define FXFA_XFDF 0x00100000 |
| 40 #define FXFA_FORM 0x01000000 | 32 #define FXFA_FORM 0x01000000 |
| 41 #define FXFA_PDF 0x10000000 | 33 #define FXFA_PDF 0x10000000 |
| 42 | 34 |
| 43 #ifndef _WIN32 | |
| 44 extern void SetLastError(int err); | |
| 45 extern int GetLastError(); | |
| 46 #endif | |
| 47 | |
| 48 namespace { | 35 namespace { |
| 49 | 36 |
| 50 CFX_FloatRect FXRect2PDFRect(const CFX_RectF& fxRectF) { | 37 CFX_FloatRect FXRect2PDFRect(const CFX_RectF& fxRectF) { |
| 51 return CFX_FloatRect(fxRectF.left, fxRectF.bottom(), fxRectF.right(), | 38 return CFX_FloatRect(fxRectF.left, fxRectF.bottom(), fxRectF.right(), |
| 52 fxRectF.top); | 39 fxRectF.top); |
| 53 } | 40 } |
| 54 | 41 |
| 55 } // namespace | 42 } // namespace |
| 56 | 43 |
| 57 CPDFXFA_Document::CPDFXFA_Document(std::unique_ptr<CPDF_Document> pPDFDoc, | 44 CPDFXFA_DocEnvironment::CPDFXFA_DocEnvironment(CPDFXFA_Document* doc) |
|
Tom Sepez
2016/09/08 17:12:37
any code changes here? Its just moved up from bel
dsinclair
2016/09/08 18:07:49
The code changes were all to change things like m_
| |
| 58 CPDFXFA_App* pProvider) | 45 : m_pDocument(doc), m_pJSContext(nullptr) {} |
| 59 : m_iDocType(DOCTYPE_PDF), | |
| 60 m_pPDFDoc(std::move(pPDFDoc)), | |
| 61 m_pXFADocView(nullptr), | |
| 62 m_pApp(pProvider), | |
| 63 m_pJSContext(nullptr), | |
| 64 m_nLoadStatus(FXFA_LOADSTATUS_PRELOAD), | |
| 65 m_nPageCount(0) {} | |
| 66 | 46 |
| 67 CPDFXFA_Document::~CPDFXFA_Document() { | 47 CPDFXFA_DocEnvironment::~CPDFXFA_DocEnvironment() { |
| 68 m_nLoadStatus = FXFA_LOADSTATUS_CLOSING; | 48 if (m_pJSContext && m_pDocument->GetSDKDoc() && |
| 69 | 49 m_pDocument->GetSDKDoc()->GetEnv()) |
| 70 if (m_pXFADoc) { | 50 m_pDocument->GetSDKDoc()->GetEnv()->GetJSRuntime()->ReleaseContext( |
| 71 CXFA_FFApp* pApp = m_pApp->GetXFAApp(); | 51 m_pJSContext); |
| 72 if (pApp) { | |
| 73 CXFA_FFDocHandler* pDocHandler = pApp->GetDocHandler(); | |
| 74 if (pDocHandler) | |
| 75 CloseXFADoc(pDocHandler); | |
| 76 } | |
| 77 m_pXFADoc.reset(); | |
| 78 } | |
| 79 if (m_pJSContext && m_pSDKDoc && m_pSDKDoc->GetEnv()) | |
| 80 m_pSDKDoc->GetEnv()->GetJSRuntime()->ReleaseContext(m_pJSContext); | |
| 81 | |
| 82 m_nLoadStatus = FXFA_LOADSTATUS_CLOSED; | |
| 83 } | 52 } |
| 84 | 53 |
| 85 FX_BOOL CPDFXFA_Document::LoadXFADoc() { | 54 void CPDFXFA_DocEnvironment::SetChangeMark(CXFA_FFDoc* hDoc) { |
| 86 m_nLoadStatus = FXFA_LOADSTATUS_LOADING; | 55 if (hDoc == m_pDocument->GetXFADoc() && m_pDocument->GetSDKDoc()) |
| 87 | 56 m_pDocument->GetSDKDoc()->SetChangeMark(); |
| 88 if (!m_pPDFDoc) | |
| 89 return FALSE; | |
| 90 | |
| 91 m_XFAPageList.RemoveAll(); | |
| 92 | |
| 93 CXFA_FFApp* pApp = m_pApp->GetXFAApp(); | |
| 94 if (!pApp) | |
| 95 return FALSE; | |
| 96 | |
| 97 m_pXFADoc.reset(pApp->CreateDoc(this, m_pPDFDoc.get())); | |
| 98 if (!m_pXFADoc) { | |
| 99 SetLastError(FPDF_ERR_XFALOAD); | |
| 100 return FALSE; | |
| 101 } | |
| 102 | |
| 103 CXFA_FFDocHandler* pDocHandler = pApp->GetDocHandler(); | |
| 104 if (!pDocHandler) { | |
| 105 SetLastError(FPDF_ERR_XFALOAD); | |
| 106 return FALSE; | |
| 107 } | |
| 108 | |
| 109 m_pXFADoc->StartLoad(); | |
| 110 int iStatus = m_pXFADoc->DoLoad(nullptr); | |
| 111 if (iStatus != XFA_PARSESTATUS_Done) { | |
| 112 CloseXFADoc(pDocHandler); | |
| 113 SetLastError(FPDF_ERR_XFALOAD); | |
| 114 return FALSE; | |
| 115 } | |
| 116 m_pXFADoc->StopLoad(); | |
| 117 m_pXFADoc->GetXFADoc()->InitScriptContext(m_pApp->GetJSERuntime()); | |
| 118 | |
| 119 if (m_pXFADoc->GetDocType() == XFA_DOCTYPE_Dynamic) | |
| 120 m_iDocType = DOCTYPE_DYNAMIC_XFA; | |
| 121 else | |
| 122 m_iDocType = DOCTYPE_STATIC_XFA; | |
| 123 | |
| 124 m_pXFADocView = m_pXFADoc->CreateDocView(XFA_DOCVIEW_View); | |
| 125 if (m_pXFADocView->StartLayout() < 0) { | |
| 126 CloseXFADoc(pDocHandler); | |
| 127 SetLastError(FPDF_ERR_XFALAYOUT); | |
| 128 return FALSE; | |
| 129 } | |
| 130 | |
| 131 m_pXFADocView->DoLayout(nullptr); | |
| 132 m_pXFADocView->StopLayout(); | |
| 133 m_nLoadStatus = FXFA_LOADSTATUS_LOADED; | |
| 134 | |
| 135 return TRUE; | |
| 136 } | 57 } |
| 137 | 58 |
| 138 int CPDFXFA_Document::GetPageCount() { | 59 void CPDFXFA_DocEnvironment::InvalidateRect(CXFA_FFPageView* pPageView, |
| 139 if (!m_pPDFDoc && !m_pXFADoc) | 60 const CFX_RectF& rt, |
| 140 return 0; | 61 uint32_t dwFlags /* = 0 */) { |
| 141 | 62 if (!m_pDocument->GetXFADoc() || !m_pDocument->GetSDKDoc()) |
| 142 switch (m_iDocType) { | |
| 143 case DOCTYPE_PDF: | |
| 144 case DOCTYPE_STATIC_XFA: | |
| 145 if (m_pPDFDoc) | |
| 146 return m_pPDFDoc->GetPageCount(); | |
| 147 case DOCTYPE_DYNAMIC_XFA: | |
| 148 if (m_pXFADoc) | |
| 149 return m_pXFADocView->CountPageViews(); | |
| 150 default: | |
| 151 return 0; | |
| 152 } | |
| 153 } | |
| 154 | |
| 155 CPDFXFA_Page* CPDFXFA_Document::GetPage(int page_index) { | |
| 156 if (page_index < 0) | |
| 157 return nullptr; | |
| 158 | |
| 159 CPDFXFA_Page* pPage = nullptr; | |
| 160 int nCount = m_XFAPageList.GetSize(); | |
| 161 if (nCount > 0 && page_index < nCount) { | |
| 162 pPage = m_XFAPageList.GetAt(page_index); | |
| 163 if (pPage) | |
| 164 pPage->Retain(); | |
| 165 } else { | |
| 166 m_nPageCount = GetPageCount(); | |
| 167 m_XFAPageList.SetSize(m_nPageCount); | |
| 168 } | |
| 169 if (pPage) | |
| 170 return pPage; | |
| 171 | |
| 172 pPage = new CPDFXFA_Page(this, page_index); | |
| 173 if (!pPage->LoadPage()) { | |
| 174 pPage->Release(); | |
| 175 return nullptr; | |
| 176 } | |
| 177 m_XFAPageList.SetAt(page_index, pPage); | |
| 178 return pPage; | |
| 179 } | |
| 180 | |
| 181 CPDFXFA_Page* CPDFXFA_Document::GetPage(CXFA_FFPageView* pPage) { | |
| 182 if (!pPage) | |
| 183 return nullptr; | |
| 184 | |
| 185 if (!m_pXFADoc) | |
| 186 return nullptr; | |
| 187 | |
| 188 if (m_iDocType != DOCTYPE_DYNAMIC_XFA) | |
| 189 return nullptr; | |
| 190 | |
| 191 int nSize = m_XFAPageList.GetSize(); | |
| 192 for (int i = 0; i < nSize; i++) { | |
| 193 CPDFXFA_Page* pTempPage = m_XFAPageList.GetAt(i); | |
| 194 if (!pTempPage) | |
| 195 continue; | |
| 196 if (pTempPage->GetXFAPageView() && pTempPage->GetXFAPageView() == pPage) | |
| 197 return pTempPage; | |
| 198 } | |
| 199 | |
| 200 return nullptr; | |
| 201 } | |
| 202 | |
| 203 void CPDFXFA_Document::DeletePage(int page_index) { | |
| 204 // Delete from the document first because, if GetPage was never called for | |
| 205 // this |page_index| then |m_XFAPageList| may have size < |page_index| even | |
| 206 // if it's a valid page in the document. | |
| 207 if (m_pPDFDoc) | |
| 208 m_pPDFDoc->DeletePage(page_index); | |
| 209 | |
| 210 if (page_index < 0 || page_index >= m_XFAPageList.GetSize()) | |
| 211 return; | 63 return; |
| 212 | 64 |
| 213 if (CPDFXFA_Page* pPage = m_XFAPageList.GetAt(page_index)) | 65 if (m_pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA) |
| 214 pPage->Release(); | |
| 215 } | |
| 216 | |
| 217 void CPDFXFA_Document::RemovePage(CPDFXFA_Page* page) { | |
| 218 m_XFAPageList.SetAt(page->GetPageIndex(), nullptr); | |
| 219 } | |
| 220 | |
| 221 CPDFSDK_Document* CPDFXFA_Document::GetSDKDocument( | |
| 222 CPDFDoc_Environment* pFormFillEnv) { | |
| 223 if (!m_pSDKDoc && pFormFillEnv) | |
| 224 m_pSDKDoc.reset(new CPDFSDK_Document(this, pFormFillEnv)); | |
| 225 return m_pSDKDoc.get(); | |
| 226 } | |
| 227 | |
| 228 void CPDFXFA_Document::SetChangeMark(CXFA_FFDoc* hDoc) { | |
| 229 if (hDoc == m_pXFADoc.get() && m_pSDKDoc) | |
| 230 m_pSDKDoc->SetChangeMark(); | |
| 231 } | |
| 232 | |
| 233 void CPDFXFA_Document::InvalidateRect(CXFA_FFPageView* pPageView, | |
| 234 const CFX_RectF& rt, | |
| 235 uint32_t dwFlags /* = 0 */) { | |
| 236 if (!m_pXFADoc || !m_pSDKDoc) | |
| 237 return; | 66 return; |
| 238 | 67 |
| 239 if (m_iDocType != DOCTYPE_DYNAMIC_XFA) | 68 CPDFXFA_Page* pPage = m_pDocument->GetPage(pPageView); |
| 240 return; | |
| 241 | |
| 242 CPDFXFA_Page* pPage = GetPage(pPageView); | |
| 243 if (!pPage) | 69 if (!pPage) |
| 244 return; | 70 return; |
| 245 | 71 |
| 246 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 72 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 247 if (!pEnv) | 73 if (!pEnv) |
| 248 return; | 74 return; |
| 249 | 75 |
| 250 CFX_FloatRect rcPage = FXRect2PDFRect(rt); | 76 CFX_FloatRect rcPage = FXRect2PDFRect(rt); |
| 251 pEnv->FFI_Invalidate((FPDF_PAGE)pPage, rcPage.left, rcPage.bottom, | 77 pEnv->FFI_Invalidate((FPDF_PAGE)pPage, rcPage.left, rcPage.bottom, |
| 252 rcPage.right, rcPage.top); | 78 rcPage.right, rcPage.top); |
| 253 } | 79 } |
| 254 | 80 |
| 255 void CPDFXFA_Document::DisplayCaret(CXFA_FFWidget* hWidget, | 81 void CPDFXFA_DocEnvironment::DisplayCaret(CXFA_FFWidget* hWidget, |
| 256 FX_BOOL bVisible, | 82 FX_BOOL bVisible, |
| 257 const CFX_RectF* pRtAnchor) { | 83 const CFX_RectF* pRtAnchor) { |
| 258 if (!hWidget || !pRtAnchor || !m_pXFADoc || !m_pSDKDoc || !m_pXFADocView) | 84 if (!hWidget || !pRtAnchor || !m_pDocument->GetXFADoc() || |
|
Tom Sepez
2016/09/08 17:12:37
Do we have to worry about null m_pDocuments now th
dsinclair
2016/09/08 18:07:49
Technically, probably. What about storing as a CPD
Tom Sepez
2016/09/08 18:22:01
Nah, lets just assert non-nullness in the ctor at
| |
| 85 !m_pDocument->GetSDKDoc() || !m_pDocument->GetXFADocView()) | |
| 259 return; | 86 return; |
| 260 | 87 |
| 261 if (m_iDocType != DOCTYPE_DYNAMIC_XFA) | 88 if (m_pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA) |
| 262 return; | 89 return; |
| 263 | 90 |
| 264 CXFA_FFWidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); | 91 CXFA_FFWidgetHandler* pWidgetHandler = |
| 92 m_pDocument->GetXFADocView()->GetWidgetHandler(); | |
| 265 if (!pWidgetHandler) | 93 if (!pWidgetHandler) |
| 266 return; | 94 return; |
| 267 | 95 |
| 268 CXFA_FFPageView* pPageView = hWidget->GetPageView(); | 96 CXFA_FFPageView* pPageView = hWidget->GetPageView(); |
| 269 if (!pPageView) | 97 if (!pPageView) |
| 270 return; | 98 return; |
| 271 | 99 |
| 272 CPDFXFA_Page* pPage = GetPage(pPageView); | 100 CPDFXFA_Page* pPage = m_pDocument->GetPage(pPageView); |
| 273 if (!pPage) | 101 if (!pPage) |
| 274 return; | 102 return; |
| 275 | 103 |
| 276 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 104 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 277 if (!pEnv) | 105 if (!pEnv) |
| 278 return; | 106 return; |
| 279 | 107 |
| 280 CFX_FloatRect rcCaret = FXRect2PDFRect(*pRtAnchor); | 108 CFX_FloatRect rcCaret = FXRect2PDFRect(*pRtAnchor); |
| 281 pEnv->FFI_DisplayCaret((FPDF_PAGE)pPage, bVisible, rcCaret.left, rcCaret.top, | 109 pEnv->FFI_DisplayCaret((FPDF_PAGE)pPage, bVisible, rcCaret.left, rcCaret.top, |
| 282 rcCaret.right, rcCaret.bottom); | 110 rcCaret.right, rcCaret.bottom); |
| 283 } | 111 } |
| 284 | 112 |
| 285 FX_BOOL CPDFXFA_Document::GetPopupPos(CXFA_FFWidget* hWidget, | 113 FX_BOOL CPDFXFA_DocEnvironment::GetPopupPos(CXFA_FFWidget* hWidget, |
| 286 FX_FLOAT fMinPopup, | 114 FX_FLOAT fMinPopup, |
| 287 FX_FLOAT fMaxPopup, | 115 FX_FLOAT fMaxPopup, |
| 288 const CFX_RectF& rtAnchor, | 116 const CFX_RectF& rtAnchor, |
| 289 CFX_RectF& rtPopup) { | 117 CFX_RectF& rtPopup) { |
| 290 if (!hWidget) | 118 if (!hWidget) |
| 291 return FALSE; | 119 return FALSE; |
| 292 | 120 |
| 293 CXFA_FFPageView* pXFAPageView = hWidget->GetPageView(); | 121 CXFA_FFPageView* pXFAPageView = hWidget->GetPageView(); |
| 294 if (!pXFAPageView) | 122 if (!pXFAPageView) |
| 295 return FALSE; | 123 return FALSE; |
| 296 | 124 |
| 297 CPDFXFA_Page* pPage = GetPage(pXFAPageView); | 125 CPDFXFA_Page* pPage = m_pDocument->GetPage(pXFAPageView); |
| 298 if (!pPage) | 126 if (!pPage) |
| 299 return FALSE; | 127 return FALSE; |
| 300 | 128 |
| 301 CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc(); | 129 CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc(); |
| 302 int nRotate = pWidgetAcc->GetRotate(); | 130 int nRotate = pWidgetAcc->GetRotate(); |
| 303 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 131 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 304 if (!pEnv) | 132 if (!pEnv) |
| 305 return FALSE; | 133 return FALSE; |
| 306 | 134 |
| 307 FS_RECTF pageViewRect = {0.0f, 0.0f, 0.0f, 0.0f}; | 135 FS_RECTF pageViewRect = {0.0f, 0.0f, 0.0f, 0.0f}; |
| 308 pEnv->FFI_GetPageViewRect(pPage, pageViewRect); | 136 pEnv->FFI_GetPageViewRect(pPage, pageViewRect); |
| 309 | 137 |
| 310 int t1; | 138 int t1; |
| 311 int t2; | 139 int t2; |
| 312 CFX_FloatRect rcAnchor = FXRect2PDFRect(rtAnchor); | 140 CFX_FloatRect rcAnchor = FXRect2PDFRect(rtAnchor); |
| 313 switch (nRotate) { | 141 switch (nRotate) { |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 391 } | 219 } |
| 392 break; | 220 break; |
| 393 } | 221 } |
| 394 default: | 222 default: |
| 395 break; | 223 break; |
| 396 } | 224 } |
| 397 | 225 |
| 398 return TRUE; | 226 return TRUE; |
| 399 } | 227 } |
| 400 | 228 |
| 401 FX_BOOL CPDFXFA_Document::PopupMenu(CXFA_FFWidget* hWidget, | 229 FX_BOOL CPDFXFA_DocEnvironment::PopupMenu(CXFA_FFWidget* hWidget, |
| 402 CFX_PointF ptPopup) { | 230 CFX_PointF ptPopup) { |
| 403 if (!hWidget) | 231 if (!hWidget) |
| 404 return FALSE; | 232 return FALSE; |
| 405 | 233 |
| 406 CXFA_FFPageView* pXFAPageView = hWidget->GetPageView(); | 234 CXFA_FFPageView* pXFAPageView = hWidget->GetPageView(); |
| 407 if (!pXFAPageView) | 235 if (!pXFAPageView) |
| 408 return FALSE; | 236 return FALSE; |
| 409 | 237 |
| 410 CPDFXFA_Page* pPage = GetPage(pXFAPageView); | 238 CPDFXFA_Page* pPage = m_pDocument->GetPage(pXFAPageView); |
| 411 if (!pPage) | 239 if (!pPage) |
| 412 return FALSE; | 240 return FALSE; |
| 413 | 241 |
| 414 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 242 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 415 if (!pEnv) | 243 if (!pEnv) |
| 416 return FALSE; | 244 return FALSE; |
| 417 | 245 |
| 418 int menuFlag = 0; | 246 int menuFlag = 0; |
| 419 if (hWidget->CanUndo()) | 247 if (hWidget->CanUndo()) |
| 420 menuFlag |= FXFA_MEMU_UNDO; | 248 menuFlag |= FXFA_MEMU_UNDO; |
| 421 if (hWidget->CanRedo()) | 249 if (hWidget->CanRedo()) |
| 422 menuFlag |= FXFA_MEMU_REDO; | 250 menuFlag |= FXFA_MEMU_REDO; |
| 423 if (hWidget->CanPaste()) | 251 if (hWidget->CanPaste()) |
| 424 menuFlag |= FXFA_MEMU_PASTE; | 252 menuFlag |= FXFA_MEMU_PASTE; |
| 425 if (hWidget->CanCopy()) | 253 if (hWidget->CanCopy()) |
| 426 menuFlag |= FXFA_MEMU_COPY; | 254 menuFlag |= FXFA_MEMU_COPY; |
| 427 if (hWidget->CanCut()) | 255 if (hWidget->CanCut()) |
| 428 menuFlag |= FXFA_MEMU_CUT; | 256 menuFlag |= FXFA_MEMU_CUT; |
| 429 if (hWidget->CanSelectAll()) | 257 if (hWidget->CanSelectAll()) |
| 430 menuFlag |= FXFA_MEMU_SELECTALL; | 258 menuFlag |= FXFA_MEMU_SELECTALL; |
| 431 | 259 |
| 432 return pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, nullptr); | 260 return pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, nullptr); |
| 433 } | 261 } |
| 434 | 262 |
| 435 void CPDFXFA_Document::PageViewEvent(CXFA_FFPageView* pPageView, | 263 void CPDFXFA_DocEnvironment::PageViewEvent(CXFA_FFPageView* pPageView, |
| 436 uint32_t dwFlags) { | 264 uint32_t dwFlags) { |
| 437 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 265 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 438 if (!pEnv) | 266 if (!pEnv) |
| 439 return; | 267 return; |
| 440 | 268 |
| 441 if (m_nLoadStatus == FXFA_LOADSTATUS_LOADING || | 269 if (m_pDocument->GetLoadStatus() == FXFA_LOADSTATUS_LOADING || |
| 442 m_nLoadStatus == FXFA_LOADSTATUS_CLOSING || | 270 m_pDocument->GetLoadStatus() == FXFA_LOADSTATUS_CLOSING || |
| 443 XFA_PAGEVIEWEVENT_StopLayout != dwFlags) | 271 XFA_PAGEVIEWEVENT_StopLayout != dwFlags) |
| 444 return; | 272 return; |
| 445 | 273 |
| 446 int nNewCount = GetPageCount(); | 274 int nNewCount = m_pDocument->GetPageCount(); |
| 447 if (nNewCount == m_nPageCount) | 275 if (nNewCount == m_pDocument->GetOriginalPageCount()) |
| 448 return; | 276 return; |
| 449 | 277 |
| 450 CXFA_FFDocView* pXFADocView = GetXFADocView(); | 278 CXFA_FFDocView* pXFADocView = m_pDocument->GetXFADocView(); |
| 451 if (!pXFADocView) | 279 if (!pXFADocView) |
| 452 return; | 280 return; |
| 453 | 281 |
| 454 for (int iPageIter = 0; iPageIter < m_nPageCount; iPageIter++) { | 282 for (int iPageIter = 0; iPageIter < m_pDocument->GetOriginalPageCount(); |
| 455 CPDFXFA_Page* pPage = m_XFAPageList.GetAt(iPageIter); | 283 iPageIter++) { |
| 284 CPDFXFA_Page* pPage = m_pDocument->GetXFAPageList()->GetAt(iPageIter); | |
| 456 if (!pPage) | 285 if (!pPage) |
| 457 continue; | 286 continue; |
| 458 | 287 |
| 459 m_pSDKDoc->RemovePageView(pPage); | 288 m_pDocument->GetSDKDoc()->RemovePageView(pPage); |
| 460 pPage->SetXFAPageView(pXFADocView->GetPageView(iPageIter)); | 289 pPage->SetXFAPageView(pXFADocView->GetPageView(iPageIter)); |
| 461 } | 290 } |
| 462 | 291 |
| 463 int flag = (nNewCount < m_nPageCount) ? FXFA_PAGEVIEWEVENT_POSTREMOVED | 292 int flag = (nNewCount < m_pDocument->GetOriginalPageCount()) |
| 464 : FXFA_PAGEVIEWEVENT_POSTADDED; | 293 ? FXFA_PAGEVIEWEVENT_POSTREMOVED |
| 465 int count = FXSYS_abs(nNewCount - m_nPageCount); | 294 : FXFA_PAGEVIEWEVENT_POSTADDED; |
| 466 m_nPageCount = nNewCount; | 295 int count = FXSYS_abs(nNewCount - m_pDocument->GetOriginalPageCount()); |
| 467 m_XFAPageList.SetSize(nNewCount); | 296 m_pDocument->SetOriginalPageCount(nNewCount); |
| 468 pEnv->FFI_PageEvent(count, flag); | 297 pEnv->FFI_PageEvent(count, flag); |
| 469 } | 298 } |
| 470 | 299 |
| 471 void CPDFXFA_Document::WidgetPostAdd(CXFA_FFWidget* hWidget, | 300 void CPDFXFA_DocEnvironment::WidgetPostAdd(CXFA_FFWidget* hWidget, |
| 472 CXFA_WidgetAcc* pWidgetData) { | 301 CXFA_WidgetAcc* pWidgetData) { |
| 473 if (m_iDocType != DOCTYPE_DYNAMIC_XFA || !hWidget) | 302 if (m_pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA || !hWidget) |
| 474 return; | 303 return; |
| 475 | 304 |
| 476 CXFA_FFPageView* pPageView = hWidget->GetPageView(); | 305 CXFA_FFPageView* pPageView = hWidget->GetPageView(); |
| 477 if (!pPageView) | 306 if (!pPageView) |
| 478 return; | 307 return; |
| 479 | 308 |
| 480 CPDFXFA_Page* pXFAPage = GetPage(pPageView); | 309 CPDFXFA_Page* pXFAPage = m_pDocument->GetPage(pPageView); |
| 481 if (!pXFAPage) | 310 if (!pXFAPage) |
| 482 return; | 311 return; |
| 483 | 312 |
| 484 m_pSDKDoc->GetPageView(pXFAPage, true)->AddAnnot(hWidget); | 313 m_pDocument->GetSDKDoc()->GetPageView(pXFAPage, true)->AddAnnot(hWidget); |
| 485 } | 314 } |
| 486 | 315 |
| 487 void CPDFXFA_Document::WidgetPreRemove(CXFA_FFWidget* hWidget, | 316 void CPDFXFA_DocEnvironment::WidgetPreRemove(CXFA_FFWidget* hWidget, |
| 488 CXFA_WidgetAcc* pWidgetData) { | 317 CXFA_WidgetAcc* pWidgetData) { |
| 489 if (m_iDocType != DOCTYPE_DYNAMIC_XFA || !hWidget) | 318 if (m_pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA || !hWidget) |
| 490 return; | 319 return; |
| 491 | 320 |
| 492 CXFA_FFPageView* pPageView = hWidget->GetPageView(); | 321 CXFA_FFPageView* pPageView = hWidget->GetPageView(); |
| 493 if (!pPageView) | 322 if (!pPageView) |
| 494 return; | 323 return; |
| 495 | 324 |
| 496 CPDFXFA_Page* pXFAPage = GetPage(pPageView); | 325 CPDFXFA_Page* pXFAPage = m_pDocument->GetPage(pPageView); |
| 497 if (!pXFAPage) | 326 if (!pXFAPage) |
| 498 return; | 327 return; |
| 499 | 328 |
| 500 CPDFSDK_PageView* pSdkPageView = m_pSDKDoc->GetPageView(pXFAPage, true); | 329 CPDFSDK_PageView* pSdkPageView = |
| 330 m_pDocument->GetSDKDoc()->GetPageView(pXFAPage, true); | |
| 501 if (CPDFSDK_Annot* pAnnot = pSdkPageView->GetAnnotByXFAWidget(hWidget)) | 331 if (CPDFSDK_Annot* pAnnot = pSdkPageView->GetAnnotByXFAWidget(hWidget)) |
| 502 pSdkPageView->DeleteAnnot(pAnnot); | 332 pSdkPageView->DeleteAnnot(pAnnot); |
| 503 } | 333 } |
| 504 | 334 |
| 505 int32_t CPDFXFA_Document::CountPages(CXFA_FFDoc* hDoc) { | 335 int32_t CPDFXFA_DocEnvironment::CountPages(CXFA_FFDoc* hDoc) { |
| 506 if (hDoc == m_pXFADoc.get() && m_pSDKDoc) | 336 if (hDoc == m_pDocument->GetXFADoc() && m_pDocument->GetSDKDoc()) |
| 507 return GetPageCount(); | 337 return m_pDocument->GetPageCount(); |
| 508 return 0; | 338 return 0; |
| 509 } | 339 } |
| 510 | 340 |
| 511 int32_t CPDFXFA_Document::GetCurrentPage(CXFA_FFDoc* hDoc) { | 341 int32_t CPDFXFA_DocEnvironment::GetCurrentPage(CXFA_FFDoc* hDoc) { |
| 512 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) | 342 if (hDoc != m_pDocument->GetXFADoc() || !m_pDocument->GetSDKDoc()) |
| 513 return -1; | 343 return -1; |
| 514 if (m_iDocType != DOCTYPE_DYNAMIC_XFA) | 344 if (m_pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA) |
| 515 return -1; | 345 return -1; |
| 516 | 346 |
| 517 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 347 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 518 if (!pEnv) | 348 if (!pEnv) |
| 519 return -1; | 349 return -1; |
| 520 | 350 |
| 521 return pEnv->FFI_GetCurrentPageIndex(this); | 351 return pEnv->FFI_GetCurrentPageIndex(this); |
| 522 } | 352 } |
| 523 | 353 |
| 524 void CPDFXFA_Document::SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) { | 354 void CPDFXFA_DocEnvironment::SetCurrentPage(CXFA_FFDoc* hDoc, |
| 525 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc || | 355 int32_t iCurPage) { |
| 526 m_iDocType != DOCTYPE_DYNAMIC_XFA || iCurPage < 0 || | 356 if (hDoc != m_pDocument->GetXFADoc() || !m_pDocument->GetSDKDoc() || |
| 527 iCurPage >= m_pSDKDoc->GetPageCount()) { | 357 m_pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA || iCurPage < 0 || |
| 358 iCurPage >= m_pDocument->GetSDKDoc()->GetPageCount()) { | |
| 528 return; | 359 return; |
| 529 } | 360 } |
| 530 | 361 |
| 531 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 362 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 532 if (!pEnv) | 363 if (!pEnv) |
| 533 return; | 364 return; |
| 534 pEnv->FFI_SetCurrentPage(this, iCurPage); | 365 pEnv->FFI_SetCurrentPage(this, iCurPage); |
| 535 } | 366 } |
| 536 | 367 |
| 537 FX_BOOL CPDFXFA_Document::IsCalculationsEnabled(CXFA_FFDoc* hDoc) { | 368 FX_BOOL CPDFXFA_DocEnvironment::IsCalculationsEnabled(CXFA_FFDoc* hDoc) { |
| 538 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) | 369 if (hDoc != m_pDocument->GetXFADoc() || !m_pDocument->GetSDKDoc()) |
| 539 return FALSE; | 370 return FALSE; |
| 540 if (m_pSDKDoc->GetInterForm()) | 371 if (m_pDocument->GetSDKDoc()->GetInterForm()) |
| 541 return m_pSDKDoc->GetInterForm()->IsXfaCalculateEnabled(); | 372 return m_pDocument->GetSDKDoc()->GetInterForm()->IsXfaCalculateEnabled(); |
| 542 return FALSE; | 373 return FALSE; |
| 543 } | 374 } |
| 544 | 375 |
| 545 void CPDFXFA_Document::SetCalculationsEnabled(CXFA_FFDoc* hDoc, | 376 void CPDFXFA_DocEnvironment::SetCalculationsEnabled(CXFA_FFDoc* hDoc, |
| 546 FX_BOOL bEnabled) { | 377 FX_BOOL bEnabled) { |
| 547 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) | 378 if (hDoc != m_pDocument->GetXFADoc() || !m_pDocument->GetSDKDoc()) |
| 548 return; | 379 return; |
| 549 if (m_pSDKDoc->GetInterForm()) | 380 if (m_pDocument->GetSDKDoc()->GetInterForm()) |
| 550 m_pSDKDoc->GetInterForm()->XfaEnableCalculate(bEnabled); | 381 m_pDocument->GetSDKDoc()->GetInterForm()->XfaEnableCalculate(bEnabled); |
| 551 } | 382 } |
| 552 | 383 |
| 553 void CPDFXFA_Document::GetTitle(CXFA_FFDoc* hDoc, CFX_WideString& wsTitle) { | 384 void CPDFXFA_DocEnvironment::GetTitle(CXFA_FFDoc* hDoc, |
| 554 if (hDoc != m_pXFADoc.get() || !m_pPDFDoc) | 385 CFX_WideString& wsTitle) { |
| 386 if (hDoc != m_pDocument->GetXFADoc() || !m_pDocument->GetPDFDoc()) | |
| 555 return; | 387 return; |
| 556 | 388 |
| 557 CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo(); | 389 CPDF_Dictionary* pInfoDict = m_pDocument->GetPDFDoc()->GetInfo(); |
| 558 if (!pInfoDict) | 390 if (!pInfoDict) |
| 559 return; | 391 return; |
| 560 | 392 |
| 561 CFX_ByteString csTitle = pInfoDict->GetStringBy("Title"); | 393 CFX_ByteString csTitle = pInfoDict->GetStringBy("Title"); |
| 562 wsTitle = wsTitle.FromLocal(csTitle.GetBuffer(csTitle.GetLength())); | 394 wsTitle = wsTitle.FromLocal(csTitle.GetBuffer(csTitle.GetLength())); |
| 563 csTitle.ReleaseBuffer(csTitle.GetLength()); | 395 csTitle.ReleaseBuffer(csTitle.GetLength()); |
| 564 } | 396 } |
| 565 | 397 |
| 566 void CPDFXFA_Document::SetTitle(CXFA_FFDoc* hDoc, | 398 void CPDFXFA_DocEnvironment::SetTitle(CXFA_FFDoc* hDoc, |
| 567 const CFX_WideString& wsTitle) { | 399 const CFX_WideString& wsTitle) { |
| 568 if (hDoc != m_pXFADoc.get() || !m_pPDFDoc) | 400 if (hDoc != m_pDocument->GetXFADoc() || !m_pDocument->GetPDFDoc()) |
| 569 return; | 401 return; |
| 570 | 402 |
| 571 if (CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo()) | 403 if (CPDF_Dictionary* pInfoDict = m_pDocument->GetPDFDoc()->GetInfo()) |
| 572 pInfoDict->SetAt("Title", new CPDF_String(wsTitle)); | 404 pInfoDict->SetAt("Title", new CPDF_String(wsTitle)); |
| 573 } | 405 } |
| 574 | 406 |
| 575 void CPDFXFA_Document::ExportData(CXFA_FFDoc* hDoc, | 407 void CPDFXFA_DocEnvironment::ExportData(CXFA_FFDoc* hDoc, |
| 576 const CFX_WideString& wsFilePath, | 408 const CFX_WideString& wsFilePath, |
| 577 FX_BOOL bXDP) { | 409 FX_BOOL bXDP) { |
| 578 if (hDoc != m_pXFADoc.get()) | 410 if (hDoc != m_pDocument->GetXFADoc()) |
| 579 return; | 411 return; |
| 580 | 412 |
| 581 if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) | 413 if (m_pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA && |
| 414 m_pDocument->GetDocType() != DOCTYPE_STATIC_XFA) | |
| 582 return; | 415 return; |
| 583 | 416 |
| 584 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 417 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 585 if (!pEnv) | 418 if (!pEnv) |
| 586 return; | 419 return; |
| 587 | 420 |
| 588 int fileType = bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML; | 421 int fileType = bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML; |
| 589 CFX_ByteString bs = wsFilePath.UTF16LE_Encode(); | 422 CFX_ByteString bs = wsFilePath.UTF16LE_Encode(); |
| 590 if (wsFilePath.IsEmpty()) { | 423 if (wsFilePath.IsEmpty()) { |
| 591 if (!pEnv->GetFormFillInfo() || !pEnv->GetFormFillInfo()->m_pJsPlatform) | 424 if (!pEnv->GetFormFillInfo() || !pEnv->GetFormFillInfo()->m_pJsPlatform) |
| 592 return; | 425 return; |
| 593 | 426 |
| 594 CFX_WideString filepath = pEnv->JS_fieldBrowse(); | 427 CFX_WideString filepath = pEnv->JS_fieldBrowse(); |
| 595 bs = filepath.UTF16LE_Encode(); | 428 bs = filepath.UTF16LE_Encode(); |
| 596 } | 429 } |
| 597 int len = bs.GetLength(); | 430 int len = bs.GetLength(); |
| 598 FPDF_FILEHANDLER* pFileHandler = | 431 FPDF_FILEHANDLER* pFileHandler = |
| 599 pEnv->FFI_OpenFile(bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML, | 432 pEnv->FFI_OpenFile(bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML, |
| 600 (FPDF_WIDESTRING)bs.GetBuffer(len), "wb"); | 433 (FPDF_WIDESTRING)bs.GetBuffer(len), "wb"); |
| 601 bs.ReleaseBuffer(len); | 434 bs.ReleaseBuffer(len); |
| 602 if (!pFileHandler) | 435 if (!pFileHandler) |
| 603 return; | 436 return; |
| 604 | 437 |
| 605 CFPDF_FileStream fileWrite(pFileHandler); | 438 CFPDF_FileStream fileWrite(pFileHandler); |
| 606 CFX_ByteString content; | 439 CFX_ByteString content; |
| 607 if (fileType == FXFA_SAVEAS_XML) { | 440 if (fileType == FXFA_SAVEAS_XML) { |
| 608 content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; | 441 content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; |
| 609 fileWrite.WriteBlock(content.c_str(), fileWrite.GetSize(), | 442 fileWrite.WriteBlock(content.c_str(), fileWrite.GetSize(), |
| 610 content.GetLength()); | 443 content.GetLength()); |
| 611 m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Data, &fileWrite, | 444 m_pDocument->GetXFADocView()->GetDoc()->SavePackage(XFA_HASHCODE_Data, |
| 612 nullptr); | 445 &fileWrite, nullptr); |
| 613 } else if (fileType == FXFA_SAVEAS_XDP) { | 446 } else if (fileType == FXFA_SAVEAS_XDP) { |
| 614 if (!m_pPDFDoc) | 447 if (!m_pDocument->GetPDFDoc()) |
| 615 return; | 448 return; |
| 616 | 449 |
| 617 CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); | 450 CPDF_Dictionary* pRoot = m_pDocument->GetPDFDoc()->GetRoot(); |
| 618 if (!pRoot) | 451 if (!pRoot) |
| 619 return; | 452 return; |
| 620 | 453 |
| 621 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); | 454 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); |
| 622 if (!pAcroForm) | 455 if (!pAcroForm) |
| 623 return; | 456 return; |
| 624 | 457 |
| 625 CPDF_Array* pArray = ToArray(pAcroForm->GetObjectBy("XFA")); | 458 CPDF_Array* pArray = ToArray(pAcroForm->GetObjectBy("XFA")); |
| 626 if (!pArray) | 459 if (!pArray) |
| 627 return; | 460 return; |
| 628 | 461 |
| 629 int size = pArray->GetCount(); | 462 int size = pArray->GetCount(); |
| 630 for (int i = 1; i < size; i += 2) { | 463 for (int i = 1; i < size; i += 2) { |
| 631 CPDF_Object* pPDFObj = pArray->GetObjectAt(i); | 464 CPDF_Object* pPDFObj = pArray->GetObjectAt(i); |
| 632 CPDF_Object* pPrePDFObj = pArray->GetObjectAt(i - 1); | 465 CPDF_Object* pPrePDFObj = pArray->GetObjectAt(i - 1); |
| 633 if (!pPrePDFObj->IsString()) | 466 if (!pPrePDFObj->IsString()) |
| 634 continue; | 467 continue; |
| 635 if (!pPDFObj->IsReference()) | 468 if (!pPDFObj->IsReference()) |
| 636 continue; | 469 continue; |
| 637 | 470 |
| 638 CPDF_Stream* pStream = ToStream(pPDFObj->GetDirect()); | 471 CPDF_Stream* pStream = ToStream(pPDFObj->GetDirect()); |
| 639 if (!pStream) | 472 if (!pStream) |
| 640 continue; | 473 continue; |
| 641 if (pPrePDFObj->GetString() == "form") { | 474 if (pPrePDFObj->GetString() == "form") { |
| 642 m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Form, &fileWrite, | 475 m_pDocument->GetXFADocView()->GetDoc()->SavePackage( |
| 643 nullptr); | 476 XFA_HASHCODE_Form, &fileWrite, nullptr); |
| 644 continue; | 477 continue; |
| 645 } | 478 } |
| 646 if (pPrePDFObj->GetString() == "datasets") { | 479 if (pPrePDFObj->GetString() == "datasets") { |
| 647 m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Datasets, &fileWrite, | 480 m_pDocument->GetXFADocView()->GetDoc()->SavePackage( |
| 648 nullptr); | 481 XFA_HASHCODE_Datasets, &fileWrite, nullptr); |
| 649 continue; | 482 continue; |
| 650 } | 483 } |
| 651 if (i == size - 1) { | 484 if (i == size - 1) { |
| 652 CFX_WideString wPath = CFX_WideString::FromUTF16LE( | 485 CFX_WideString wPath = CFX_WideString::FromUTF16LE( |
| 653 reinterpret_cast<const unsigned short*>(bs.c_str()), | 486 reinterpret_cast<const unsigned short*>(bs.c_str()), |
| 654 bs.GetLength() / sizeof(unsigned short)); | 487 bs.GetLength() / sizeof(unsigned short)); |
| 655 CFX_ByteString bPath = wPath.UTF8Encode(); | 488 CFX_ByteString bPath = wPath.UTF8Encode(); |
| 656 const char* szFormat = | 489 const char* szFormat = |
| 657 "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>"; | 490 "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>"; |
| 658 content.Format(szFormat, bPath.c_str()); | 491 content.Format(szFormat, bPath.c_str()); |
| 659 fileWrite.WriteBlock(content.c_str(), fileWrite.GetSize(), | 492 fileWrite.WriteBlock(content.c_str(), fileWrite.GetSize(), |
| 660 content.GetLength()); | 493 content.GetLength()); |
| 661 } | 494 } |
| 662 std::unique_ptr<CPDF_StreamAcc> pAcc(new CPDF_StreamAcc); | 495 std::unique_ptr<CPDF_StreamAcc> pAcc(new CPDF_StreamAcc); |
| 663 pAcc->LoadAllData(pStream); | 496 pAcc->LoadAllData(pStream); |
| 664 fileWrite.WriteBlock(pAcc->GetData(), fileWrite.GetSize(), | 497 fileWrite.WriteBlock(pAcc->GetData(), fileWrite.GetSize(), |
| 665 pAcc->GetSize()); | 498 pAcc->GetSize()); |
| 666 } | 499 } |
| 667 } | 500 } |
| 668 if (!fileWrite.Flush()) { | 501 if (!fileWrite.Flush()) { |
| 669 // Ignoring flush error. | 502 // Ignoring flush error. |
| 670 } | 503 } |
| 671 } | 504 } |
| 672 | 505 |
| 673 void CPDFXFA_Document::GotoURL(CXFA_FFDoc* hDoc, | 506 void CPDFXFA_DocEnvironment::GotoURL(CXFA_FFDoc* hDoc, |
| 674 const CFX_WideString& bsURL, | 507 const CFX_WideString& bsURL, |
| 675 FX_BOOL bAppend) { | 508 FX_BOOL bAppend) { |
| 676 if (hDoc != m_pXFADoc.get()) | 509 if (hDoc != m_pDocument->GetXFADoc()) |
| 677 return; | 510 return; |
| 678 | 511 |
| 679 if (m_iDocType != DOCTYPE_DYNAMIC_XFA) | 512 if (m_pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA) |
| 680 return; | 513 return; |
| 681 | 514 |
| 682 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 515 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 683 if (!pEnv) | 516 if (!pEnv) |
| 684 return; | 517 return; |
| 685 | 518 |
| 686 CFX_WideStringC str(bsURL.c_str()); | 519 CFX_WideStringC str(bsURL.c_str()); |
| 687 | 520 |
| 688 pEnv->FFI_GotoURL(this, str, bAppend); | 521 pEnv->FFI_GotoURL(this, str, bAppend); |
| 689 } | 522 } |
| 690 | 523 |
| 691 FX_BOOL CPDFXFA_Document::IsValidationsEnabled(CXFA_FFDoc* hDoc) { | 524 FX_BOOL CPDFXFA_DocEnvironment::IsValidationsEnabled(CXFA_FFDoc* hDoc) { |
| 692 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) | 525 if (hDoc != m_pDocument->GetXFADoc() || !m_pDocument->GetSDKDoc()) |
| 693 return FALSE; | 526 return FALSE; |
| 694 if (m_pSDKDoc->GetInterForm()) | 527 if (m_pDocument->GetSDKDoc()->GetInterForm()) |
| 695 return m_pSDKDoc->GetInterForm()->IsXfaValidationsEnabled(); | 528 return m_pDocument->GetSDKDoc()->GetInterForm()->IsXfaValidationsEnabled(); |
| 696 return TRUE; | 529 return TRUE; |
| 697 } | 530 } |
| 698 | 531 |
| 699 void CPDFXFA_Document::SetValidationsEnabled(CXFA_FFDoc* hDoc, | 532 void CPDFXFA_DocEnvironment::SetValidationsEnabled(CXFA_FFDoc* hDoc, |
| 700 FX_BOOL bEnabled) { | 533 FX_BOOL bEnabled) { |
| 701 if (hDoc != m_pXFADoc.get() || !m_pSDKDoc) | 534 if (hDoc != m_pDocument->GetXFADoc() || !m_pDocument->GetSDKDoc()) |
| 702 return; | 535 return; |
| 703 if (m_pSDKDoc->GetInterForm()) | 536 if (m_pDocument->GetSDKDoc()->GetInterForm()) |
| 704 m_pSDKDoc->GetInterForm()->XfaSetValidationsEnabled(bEnabled); | 537 m_pDocument->GetSDKDoc()->GetInterForm()->XfaSetValidationsEnabled( |
| 538 bEnabled); | |
| 705 } | 539 } |
| 706 | 540 |
| 707 void CPDFXFA_Document::SetFocusWidget(CXFA_FFDoc* hDoc, | 541 void CPDFXFA_DocEnvironment::SetFocusWidget(CXFA_FFDoc* hDoc, |
| 708 CXFA_FFWidget* hWidget) { | 542 CXFA_FFWidget* hWidget) { |
| 709 if (hDoc != m_pXFADoc.get()) | 543 if (hDoc != m_pDocument->GetXFADoc()) |
| 710 return; | 544 return; |
| 711 | 545 |
| 712 if (!hWidget) { | 546 if (!hWidget) { |
| 713 m_pSDKDoc->SetFocusAnnot(nullptr); | 547 m_pDocument->GetSDKDoc()->SetFocusAnnot(nullptr); |
| 714 return; | 548 return; |
| 715 } | 549 } |
| 716 | 550 |
| 717 int pageViewCount = m_pSDKDoc->GetPageViewCount(); | 551 int pageViewCount = m_pDocument->GetSDKDoc()->GetPageViewCount(); |
| 718 for (int i = 0; i < pageViewCount; i++) { | 552 for (int i = 0; i < pageViewCount; i++) { |
| 719 CPDFSDK_PageView* pPageView = m_pSDKDoc->GetPageView(i); | 553 CPDFSDK_PageView* pPageView = m_pDocument->GetSDKDoc()->GetPageView(i); |
| 720 if (!pPageView) | 554 if (!pPageView) |
| 721 continue; | 555 continue; |
| 722 | 556 |
| 723 CPDFSDK_Annot* pAnnot = pPageView->GetAnnotByXFAWidget(hWidget); | 557 CPDFSDK_Annot* pAnnot = pPageView->GetAnnotByXFAWidget(hWidget); |
| 724 if (pAnnot) { | 558 if (pAnnot) { |
| 725 m_pSDKDoc->SetFocusAnnot(pAnnot); | 559 m_pDocument->GetSDKDoc()->SetFocusAnnot(pAnnot); |
| 726 break; | 560 break; |
| 727 } | 561 } |
| 728 } | 562 } |
| 729 } | 563 } |
| 730 | 564 |
| 731 void CPDFXFA_Document::Print(CXFA_FFDoc* hDoc, | 565 void CPDFXFA_DocEnvironment::Print(CXFA_FFDoc* hDoc, |
| 732 int32_t nStartPage, | 566 int32_t nStartPage, |
| 733 int32_t nEndPage, | 567 int32_t nEndPage, |
| 734 uint32_t dwOptions) { | 568 uint32_t dwOptions) { |
| 735 if (hDoc != m_pXFADoc.get()) | 569 if (hDoc != m_pDocument->GetXFADoc()) |
| 736 return; | 570 return; |
| 737 | 571 |
| 738 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 572 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 739 if (!pEnv || !pEnv->GetFormFillInfo() || | 573 if (!pEnv || !pEnv->GetFormFillInfo() || |
| 740 !pEnv->GetFormFillInfo()->m_pJsPlatform || | 574 !pEnv->GetFormFillInfo()->m_pJsPlatform || |
| 741 !pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print) { | 575 !pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print) { |
| 742 return; | 576 return; |
| 743 } | 577 } |
| 744 | 578 |
| 745 pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print( | 579 pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print( |
| 746 pEnv->GetFormFillInfo()->m_pJsPlatform, | 580 pEnv->GetFormFillInfo()->m_pJsPlatform, |
| 747 dwOptions & XFA_PRINTOPT_ShowDialog, nStartPage, nEndPage, | 581 dwOptions & XFA_PRINTOPT_ShowDialog, nStartPage, nEndPage, |
| 748 dwOptions & XFA_PRINTOPT_CanCancel, dwOptions & XFA_PRINTOPT_ShrinkPage, | 582 dwOptions & XFA_PRINTOPT_CanCancel, dwOptions & XFA_PRINTOPT_ShrinkPage, |
| 749 dwOptions & XFA_PRINTOPT_AsImage, dwOptions & XFA_PRINTOPT_ReverseOrder, | 583 dwOptions & XFA_PRINTOPT_AsImage, dwOptions & XFA_PRINTOPT_ReverseOrder, |
| 750 dwOptions & XFA_PRINTOPT_PrintAnnot); | 584 dwOptions & XFA_PRINTOPT_PrintAnnot); |
| 751 } | 585 } |
| 752 | 586 |
| 753 FX_ARGB CPDFXFA_Document::GetHighlightColor(CXFA_FFDoc* hDoc) { | 587 FX_ARGB CPDFXFA_DocEnvironment::GetHighlightColor(CXFA_FFDoc* hDoc) { |
| 754 if (hDoc != m_pXFADoc.get()) | 588 if (hDoc != m_pDocument->GetXFADoc()) |
| 755 return 0; | 589 return 0; |
| 756 if (!m_pSDKDoc) | 590 if (!m_pDocument->GetSDKDoc()) |
| 757 return 0; | 591 return 0; |
| 758 | 592 |
| 759 CPDFSDK_InterForm* pInterForm = m_pSDKDoc->GetInterForm(); | 593 CPDFSDK_InterForm* pInterForm = m_pDocument->GetSDKDoc()->GetInterForm(); |
| 760 if (!pInterForm) | 594 if (!pInterForm) |
| 761 return 0; | 595 return 0; |
| 762 | 596 |
| 763 FX_COLORREF color = pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA); | 597 FX_COLORREF color = pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA); |
| 764 uint8_t alpha = pInterForm->GetHighlightAlpha(); | 598 uint8_t alpha = pInterForm->GetHighlightAlpha(); |
| 765 FX_ARGB argb = ArgbEncode((int)alpha, color); | 599 FX_ARGB argb = ArgbEncode((int)alpha, color); |
| 766 return argb; | 600 return argb; |
| 767 } | 601 } |
| 768 | 602 |
| 769 FX_BOOL CPDFXFA_Document::NotifySubmit(FX_BOOL bPrevOrPost) { | 603 FX_BOOL CPDFXFA_DocEnvironment::NotifySubmit(FX_BOOL bPrevOrPost) { |
| 770 if (bPrevOrPost) | 604 if (bPrevOrPost) |
| 771 return OnBeforeNotifySubmit(); | 605 return OnBeforeNotifySubmit(); |
| 772 | 606 |
| 773 OnAfterNotifySubmit(); | 607 OnAfterNotifySubmit(); |
| 774 return TRUE; | 608 return TRUE; |
| 775 } | 609 } |
| 776 | 610 |
| 777 FX_BOOL CPDFXFA_Document::OnBeforeNotifySubmit() { | 611 FX_BOOL CPDFXFA_DocEnvironment::OnBeforeNotifySubmit() { |
| 778 if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) | 612 if (m_pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA && |
| 613 m_pDocument->GetDocType() != DOCTYPE_STATIC_XFA) | |
| 779 return TRUE; | 614 return TRUE; |
| 780 | 615 |
| 781 if (!m_pXFADocView) | 616 if (!m_pDocument->GetXFADocView()) |
| 782 return TRUE; | 617 return TRUE; |
| 783 | 618 |
| 784 CXFA_FFWidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); | 619 CXFA_FFWidgetHandler* pWidgetHandler = |
| 620 m_pDocument->GetXFADocView()->GetWidgetHandler(); | |
| 785 if (!pWidgetHandler) | 621 if (!pWidgetHandler) |
| 786 return TRUE; | 622 return TRUE; |
| 787 | 623 |
| 788 std::unique_ptr<CXFA_WidgetAccIterator> pWidgetAccIterator( | 624 std::unique_ptr<CXFA_WidgetAccIterator> pWidgetAccIterator( |
| 789 m_pXFADocView->CreateWidgetAccIterator()); | 625 m_pDocument->GetXFADocView()->CreateWidgetAccIterator()); |
| 790 if (pWidgetAccIterator) { | 626 if (pWidgetAccIterator) { |
| 791 CXFA_EventParam Param; | 627 CXFA_EventParam Param; |
| 792 Param.m_eType = XFA_EVENT_PreSubmit; | 628 Param.m_eType = XFA_EVENT_PreSubmit; |
| 793 while (CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext()) | 629 while (CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext()) |
| 794 pWidgetHandler->ProcessEvent(pWidgetAcc, &Param); | 630 pWidgetHandler->ProcessEvent(pWidgetAcc, &Param); |
| 795 } | 631 } |
| 796 | 632 |
| 797 pWidgetAccIterator.reset(m_pXFADocView->CreateWidgetAccIterator()); | 633 pWidgetAccIterator.reset( |
| 634 m_pDocument->GetXFADocView()->CreateWidgetAccIterator()); | |
| 798 if (!pWidgetAccIterator) | 635 if (!pWidgetAccIterator) |
| 799 return TRUE; | 636 return TRUE; |
| 800 | 637 |
| 801 CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); | 638 CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
| 802 pWidgetAcc = pWidgetAccIterator->MoveToNext(); | 639 pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
| 803 while (pWidgetAcc) { | 640 while (pWidgetAcc) { |
| 804 int fRet = pWidgetAcc->ProcessValidate(-1); | 641 int fRet = pWidgetAcc->ProcessValidate(-1); |
| 805 if (fRet == XFA_EVENTERROR_Error) { | 642 if (fRet == XFA_EVENTERROR_Error) { |
| 806 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 643 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 807 if (!pEnv) | 644 if (!pEnv) |
| 808 return FALSE; | 645 return FALSE; |
| 809 | 646 |
| 810 CFX_WideString ws; | 647 CFX_WideString ws; |
| 811 ws.FromLocal(IDS_XFA_Validate_Input); | 648 ws.FromLocal(IDS_XFA_Validate_Input); |
| 812 CFX_ByteString bs = ws.UTF16LE_Encode(); | 649 CFX_ByteString bs = ws.UTF16LE_Encode(); |
| 813 int len = bs.GetLength(); | 650 int len = bs.GetLength(); |
| 814 pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len), (FPDF_WIDESTRING)L"", | 651 pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len), (FPDF_WIDESTRING)L"", |
| 815 0, 1); | 652 0, 1); |
| 816 bs.ReleaseBuffer(len); | 653 bs.ReleaseBuffer(len); |
| 817 return FALSE; | 654 return FALSE; |
| 818 } | 655 } |
| 819 pWidgetAcc = pWidgetAccIterator->MoveToNext(); | 656 pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
| 820 } | 657 } |
| 821 m_pXFADocView->UpdateDocView(); | 658 m_pDocument->GetXFADocView()->UpdateDocView(); |
| 822 | 659 |
| 823 return TRUE; | 660 return TRUE; |
| 824 } | 661 } |
| 825 | 662 |
| 826 void CPDFXFA_Document::OnAfterNotifySubmit() { | 663 void CPDFXFA_DocEnvironment::OnAfterNotifySubmit() { |
| 827 if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA) | 664 if (m_pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA && |
| 665 m_pDocument->GetDocType() != DOCTYPE_STATIC_XFA) | |
| 828 return; | 666 return; |
| 829 | 667 |
| 830 if (!m_pXFADocView) | 668 if (!m_pDocument->GetXFADocView()) |
| 831 return; | 669 return; |
| 832 | 670 |
| 833 CXFA_FFWidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler(); | 671 CXFA_FFWidgetHandler* pWidgetHandler = |
| 672 m_pDocument->GetXFADocView()->GetWidgetHandler(); | |
| 834 if (!pWidgetHandler) | 673 if (!pWidgetHandler) |
| 835 return; | 674 return; |
| 836 | 675 |
| 837 std::unique_ptr<CXFA_WidgetAccIterator> pWidgetAccIterator( | 676 std::unique_ptr<CXFA_WidgetAccIterator> pWidgetAccIterator( |
| 838 m_pXFADocView->CreateWidgetAccIterator()); | 677 m_pDocument->GetXFADocView()->CreateWidgetAccIterator()); |
| 839 if (!pWidgetAccIterator) | 678 if (!pWidgetAccIterator) |
| 840 return; | 679 return; |
| 841 | 680 |
| 842 CXFA_EventParam Param; | 681 CXFA_EventParam Param; |
| 843 Param.m_eType = XFA_EVENT_PostSubmit; | 682 Param.m_eType = XFA_EVENT_PostSubmit; |
| 844 CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); | 683 CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
| 845 while (pWidgetAcc) { | 684 while (pWidgetAcc) { |
| 846 pWidgetHandler->ProcessEvent(pWidgetAcc, &Param); | 685 pWidgetHandler->ProcessEvent(pWidgetAcc, &Param); |
| 847 pWidgetAcc = pWidgetAccIterator->MoveToNext(); | 686 pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
| 848 } | 687 } |
| 849 m_pXFADocView->UpdateDocView(); | 688 m_pDocument->GetXFADocView()->UpdateDocView(); |
| 850 } | 689 } |
| 851 | 690 |
| 852 FX_BOOL CPDFXFA_Document::SubmitData(CXFA_FFDoc* hDoc, CXFA_Submit submit) { | 691 FX_BOOL CPDFXFA_DocEnvironment::SubmitData(CXFA_FFDoc* hDoc, |
| 853 if (!NotifySubmit(TRUE) || !m_pXFADocView) | 692 CXFA_Submit submit) { |
| 693 if (!NotifySubmit(TRUE) || !m_pDocument->GetXFADocView()) | |
| 854 return FALSE; | 694 return FALSE; |
| 855 | 695 |
| 856 m_pXFADocView->UpdateDocView(); | 696 m_pDocument->GetXFADocView()->UpdateDocView(); |
| 857 FX_BOOL ret = SubmitDataInternal(hDoc, submit); | 697 FX_BOOL ret = SubmitDataInternal(hDoc, submit); |
| 858 NotifySubmit(FALSE); | 698 NotifySubmit(FALSE); |
| 859 return ret; | 699 return ret; |
| 860 } | 700 } |
| 861 | 701 |
| 862 IFX_FileRead* CPDFXFA_Document::OpenLinkedFile(CXFA_FFDoc* hDoc, | 702 IFX_FileRead* CPDFXFA_DocEnvironment::OpenLinkedFile( |
| 863 const CFX_WideString& wsLink) { | 703 CXFA_FFDoc* hDoc, |
| 864 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 704 const CFX_WideString& wsLink) { |
| 705 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); | |
| 865 if (!pEnv) | 706 if (!pEnv) |
| 866 return FALSE; | 707 return FALSE; |
| 867 | 708 |
| 868 CFX_ByteString bs = wsLink.UTF16LE_Encode(); | 709 CFX_ByteString bs = wsLink.UTF16LE_Encode(); |
| 869 int len = bs.GetLength(); | 710 int len = bs.GetLength(); |
| 870 FPDF_FILEHANDLER* pFileHandler = | 711 FPDF_FILEHANDLER* pFileHandler = |
| 871 pEnv->FFI_OpenFile(0, (FPDF_WIDESTRING)bs.GetBuffer(len), "rb"); | 712 pEnv->FFI_OpenFile(0, (FPDF_WIDESTRING)bs.GetBuffer(len), "rb"); |
| 872 bs.ReleaseBuffer(len); | 713 bs.ReleaseBuffer(len); |
| 873 | 714 |
| 874 if (!pFileHandler) | 715 if (!pFileHandler) |
| 875 return nullptr; | 716 return nullptr; |
| 876 return new CFPDF_FileStream(pFileHandler); | 717 return new CFPDF_FileStream(pFileHandler); |
| 877 } | 718 } |
| 878 | 719 |
| 879 FX_BOOL CPDFXFA_Document::ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, | 720 FX_BOOL CPDFXFA_DocEnvironment::ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, |
| 880 int fileType, | 721 int fileType, |
| 881 FPDF_DWORD encodeType, | 722 FPDF_DWORD encodeType, |
| 882 FPDF_DWORD flag) { | 723 FPDF_DWORD flag) { |
| 883 if (!m_pXFADocView) | 724 if (!m_pDocument->GetXFADocView()) |
| 884 return FALSE; | 725 return FALSE; |
| 885 | 726 |
| 886 CFX_ByteString content; | 727 CFX_ByteString content; |
| 887 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 728 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 888 if (!pEnv) | 729 if (!pEnv) |
| 889 return FALSE; | 730 return FALSE; |
| 890 | 731 |
| 891 CFPDF_FileStream fileStream(pFileHandler); | 732 CFPDF_FileStream fileStream(pFileHandler); |
| 892 if (fileType == FXFA_SAVEAS_XML) { | 733 if (fileType == FXFA_SAVEAS_XML) { |
| 893 const char kContent[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; | 734 const char kContent[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; |
| 894 fileStream.WriteBlock(kContent, 0, strlen(kContent)); | 735 fileStream.WriteBlock(kContent, 0, strlen(kContent)); |
| 895 m_pXFADoc->SavePackage(XFA_HASHCODE_Data, &fileStream, nullptr); | 736 m_pDocument->GetXFADoc()->SavePackage(XFA_HASHCODE_Data, &fileStream, |
| 737 nullptr); | |
| 896 return TRUE; | 738 return TRUE; |
| 897 } | 739 } |
| 898 | 740 |
| 899 if (fileType != FXFA_SAVEAS_XDP) | 741 if (fileType != FXFA_SAVEAS_XDP) |
| 900 return TRUE; | 742 return TRUE; |
| 901 | 743 |
| 902 if (!flag) { | 744 if (!flag) { |
| 903 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | | 745 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | |
| 904 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; | 746 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; |
| 905 } | 747 } |
| 906 if (!m_pPDFDoc) { | 748 if (!m_pDocument->GetPDFDoc()) { |
| 907 fileStream.Flush(); | 749 fileStream.Flush(); |
| 908 return FALSE; | 750 return FALSE; |
| 909 } | 751 } |
| 910 | 752 |
| 911 CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); | 753 CPDF_Dictionary* pRoot = m_pDocument->GetPDFDoc()->GetRoot(); |
| 912 if (!pRoot) { | 754 if (!pRoot) { |
| 913 fileStream.Flush(); | 755 fileStream.Flush(); |
| 914 return FALSE; | 756 return FALSE; |
| 915 } | 757 } |
| 916 | 758 |
| 917 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); | 759 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); |
| 918 if (!pAcroForm) { | 760 if (!pAcroForm) { |
| 919 fileStream.Flush(); | 761 fileStream.Flush(); |
| 920 return FALSE; | 762 return FALSE; |
| 921 } | 763 } |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 946 continue; | 788 continue; |
| 947 if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS)) | 789 if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS)) |
| 948 continue; | 790 continue; |
| 949 if (pPrePDFObj->GetString() == "xmpmeta" && !(flag & FXFA_XMPMETA)) | 791 if (pPrePDFObj->GetString() == "xmpmeta" && !(flag & FXFA_XMPMETA)) |
| 950 continue; | 792 continue; |
| 951 if (pPrePDFObj->GetString() == "xfdf" && !(flag & FXFA_XFDF)) | 793 if (pPrePDFObj->GetString() == "xfdf" && !(flag & FXFA_XFDF)) |
| 952 continue; | 794 continue; |
| 953 if (pPrePDFObj->GetString() == "form" && !(flag & FXFA_FORM)) | 795 if (pPrePDFObj->GetString() == "form" && !(flag & FXFA_FORM)) |
| 954 continue; | 796 continue; |
| 955 if (pPrePDFObj->GetString() == "form") { | 797 if (pPrePDFObj->GetString() == "form") { |
| 956 m_pXFADoc->SavePackage(XFA_HASHCODE_Form, &fileStream, nullptr); | 798 m_pDocument->GetXFADoc()->SavePackage(XFA_HASHCODE_Form, &fileStream, |
| 799 nullptr); | |
| 957 } else if (pPrePDFObj->GetString() == "datasets") { | 800 } else if (pPrePDFObj->GetString() == "datasets") { |
| 958 m_pXFADoc->SavePackage(XFA_HASHCODE_Datasets, &fileStream, nullptr); | 801 m_pDocument->GetXFADoc()->SavePackage(XFA_HASHCODE_Datasets, &fileStream, |
| 802 nullptr); | |
| 959 } else { | 803 } else { |
| 960 // PDF,creator. | 804 // PDF,creator. |
| 961 } | 805 } |
| 962 } | 806 } |
| 963 return TRUE; | 807 return TRUE; |
| 964 } | 808 } |
| 965 | 809 |
| 966 void CPDFXFA_Document::ClearChangeMark() { | 810 void CPDFXFA_DocEnvironment::ToXFAContentFlags(CFX_WideString csSrcContent, |
| 967 if (m_pSDKDoc) | 811 FPDF_DWORD& flag) { |
| 968 m_pSDKDoc->ClearChangeMark(); | |
| 969 } | |
| 970 | |
| 971 void CPDFXFA_Document::ToXFAContentFlags(CFX_WideString csSrcContent, | |
| 972 FPDF_DWORD& flag) { | |
| 973 if (csSrcContent.Find(L" config ", 0) != -1) | 812 if (csSrcContent.Find(L" config ", 0) != -1) |
| 974 flag |= FXFA_CONFIG; | 813 flag |= FXFA_CONFIG; |
| 975 if (csSrcContent.Find(L" template ", 0) != -1) | 814 if (csSrcContent.Find(L" template ", 0) != -1) |
| 976 flag |= FXFA_TEMPLATE; | 815 flag |= FXFA_TEMPLATE; |
| 977 if (csSrcContent.Find(L" localeSet ", 0) != -1) | 816 if (csSrcContent.Find(L" localeSet ", 0) != -1) |
| 978 flag |= FXFA_LOCALESET; | 817 flag |= FXFA_LOCALESET; |
| 979 if (csSrcContent.Find(L" datasets ", 0) != -1) | 818 if (csSrcContent.Find(L" datasets ", 0) != -1) |
| 980 flag |= FXFA_DATASETS; | 819 flag |= FXFA_DATASETS; |
| 981 if (csSrcContent.Find(L" xmpmeta ", 0) != -1) | 820 if (csSrcContent.Find(L" xmpmeta ", 0) != -1) |
| 982 flag |= FXFA_XMPMETA; | 821 flag |= FXFA_XMPMETA; |
| 983 if (csSrcContent.Find(L" xfdf ", 0) != -1) | 822 if (csSrcContent.Find(L" xfdf ", 0) != -1) |
| 984 flag |= FXFA_XFDF; | 823 flag |= FXFA_XFDF; |
| 985 if (csSrcContent.Find(L" form ", 0) != -1) | 824 if (csSrcContent.Find(L" form ", 0) != -1) |
| 986 flag |= FXFA_FORM; | 825 flag |= FXFA_FORM; |
| 987 if (flag == 0) { | 826 if (flag == 0) { |
| 988 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | | 827 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | |
| 989 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; | 828 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; |
| 990 } | 829 } |
| 991 } | 830 } |
| 992 | 831 |
| 993 FX_BOOL CPDFXFA_Document::MailToInfo(CFX_WideString& csURL, | 832 FX_BOOL CPDFXFA_DocEnvironment::MailToInfo(CFX_WideString& csURL, |
| 994 CFX_WideString& csToAddress, | 833 CFX_WideString& csToAddress, |
| 995 CFX_WideString& csCCAddress, | 834 CFX_WideString& csCCAddress, |
| 996 CFX_WideString& csBCCAddress, | 835 CFX_WideString& csBCCAddress, |
| 997 CFX_WideString& csSubject, | 836 CFX_WideString& csSubject, |
| 998 CFX_WideString& csMsg) { | 837 CFX_WideString& csMsg) { |
| 999 CFX_WideString srcURL = csURL; | 838 CFX_WideString srcURL = csURL; |
| 1000 srcURL.TrimLeft(); | 839 srcURL.TrimLeft(); |
| 1001 if (srcURL.Left(7).CompareNoCase(L"mailto:") != 0) | 840 if (srcURL.Left(7).CompareNoCase(L"mailto:") != 0) |
| 1002 return FALSE; | 841 return FALSE; |
| 1003 | 842 |
| 1004 int pos = srcURL.Find(L'?', 0); | 843 int pos = srcURL.Find(L'?', 0); |
| 1005 CFX_WideString tmp; | 844 CFX_WideString tmp; |
| 1006 if (pos == -1) { | 845 if (pos == -1) { |
| 1007 pos = srcURL.Find(L'@', 0); | 846 pos = srcURL.Find(L'@', 0); |
| 1008 if (pos == -1) | 847 if (pos == -1) |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1048 csMsg += tmp; | 887 csMsg += tmp; |
| 1049 } | 888 } |
| 1050 srcURL = (pos == -1) ? L"" : srcURL.Right(csURL.GetLength() - (pos + 1)); | 889 srcURL = (pos == -1) ? L"" : srcURL.Right(csURL.GetLength() - (pos + 1)); |
| 1051 } | 890 } |
| 1052 csToAddress.Replace(L",", L";"); | 891 csToAddress.Replace(L",", L";"); |
| 1053 csCCAddress.Replace(L",", L";"); | 892 csCCAddress.Replace(L",", L";"); |
| 1054 csBCCAddress.Replace(L",", L";"); | 893 csBCCAddress.Replace(L",", L";"); |
| 1055 return TRUE; | 894 return TRUE; |
| 1056 } | 895 } |
| 1057 | 896 |
| 1058 FX_BOOL CPDFXFA_Document::SubmitDataInternal(CXFA_FFDoc* hDoc, | 897 FX_BOOL CPDFXFA_DocEnvironment::SubmitDataInternal(CXFA_FFDoc* hDoc, |
| 1059 CXFA_Submit submit) { | 898 CXFA_Submit submit) { |
| 1060 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); | 899 CPDFDoc_Environment* pEnv = m_pDocument->GetSDKDoc()->GetEnv(); |
| 1061 if (!pEnv) | 900 if (!pEnv) |
| 1062 return FALSE; | 901 return FALSE; |
| 1063 | 902 |
| 1064 CFX_WideStringC csURLC; | 903 CFX_WideStringC csURLC; |
| 1065 submit.GetSubmitTarget(csURLC); | 904 submit.GetSubmitTarget(csURLC); |
| 1066 CFX_WideString csURL(csURLC); | 905 CFX_WideString csURL(csURLC); |
| 1067 if (csURL.IsEmpty()) { | 906 if (csURL.IsEmpty()) { |
| 1068 CFX_WideString ws; | 907 CFX_WideString ws; |
| 1069 ws.FromLocal("Submit cancelled."); | 908 ws.FromLocal("Submit cancelled."); |
| 1070 CFX_ByteString bs = ws.UTF16LE_Encode(); | 909 CFX_ByteString bs = ws.UTF16LE_Encode(); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1149 CFX_WideString ws; | 988 CFX_WideString ws; |
| 1150 CFX_ByteString bs = csURL.UTF16LE_Encode(); | 989 CFX_ByteString bs = csURL.UTF16LE_Encode(); |
| 1151 int len = bs.GetLength(); | 990 int len = bs.GetLength(); |
| 1152 pEnv->FFI_UploadTo(pFileHandler, fileFlag, | 991 pEnv->FFI_UploadTo(pFileHandler, fileFlag, |
| 1153 (FPDF_WIDESTRING)bs.GetBuffer(len)); | 992 (FPDF_WIDESTRING)bs.GetBuffer(len)); |
| 1154 bs.ReleaseBuffer(len); | 993 bs.ReleaseBuffer(len); |
| 1155 } | 994 } |
| 1156 return bRet; | 995 return bRet; |
| 1157 } | 996 } |
| 1158 | 997 |
| 1159 FX_BOOL CPDFXFA_Document::SetGlobalProperty(CXFA_FFDoc* hDoc, | 998 FX_BOOL CPDFXFA_DocEnvironment::SetGlobalProperty( |
| 1160 const CFX_ByteStringC& szPropName, | 999 CXFA_FFDoc* hDoc, |
| 1161 CFXJSE_Value* pValue) { | 1000 const CFX_ByteStringC& szPropName, |
| 1162 if (hDoc != m_pXFADoc.get()) | 1001 CFXJSE_Value* pValue) { |
| 1002 if (hDoc != m_pDocument->GetXFADoc()) | |
| 1163 return FALSE; | 1003 return FALSE; |
| 1164 | 1004 |
| 1165 if (m_pSDKDoc && m_pSDKDoc->GetEnv()->GetJSRuntime()) | 1005 if (m_pDocument->GetSDKDoc() && |
| 1166 return m_pSDKDoc->GetEnv()->GetJSRuntime()->SetValueByName(szPropName, | 1006 m_pDocument->GetSDKDoc()->GetEnv()->GetJSRuntime()) |
| 1167 pValue); | 1007 return m_pDocument->GetSDKDoc()->GetEnv()->GetJSRuntime()->SetValueByName( |
| 1008 szPropName, pValue); | |
| 1168 return FALSE; | 1009 return FALSE; |
| 1169 } | 1010 } |
| 1170 | 1011 |
| 1171 FX_BOOL CPDFXFA_Document::GetGlobalProperty(CXFA_FFDoc* hDoc, | 1012 FX_BOOL CPDFXFA_DocEnvironment::GetGlobalProperty( |
| 1172 const CFX_ByteStringC& szPropName, | 1013 CXFA_FFDoc* hDoc, |
| 1173 CFXJSE_Value* pValue) { | 1014 const CFX_ByteStringC& szPropName, |
| 1174 if (hDoc != m_pXFADoc.get()) | 1015 CFXJSE_Value* pValue) { |
| 1016 if (hDoc != m_pDocument->GetXFADoc()) | |
| 1175 return FALSE; | 1017 return FALSE; |
| 1176 if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime()) | 1018 if (!m_pDocument->GetSDKDoc() || |
| 1019 !m_pDocument->GetSDKDoc()->GetEnv()->GetJSRuntime()) | |
| 1177 return FALSE; | 1020 return FALSE; |
| 1178 | 1021 |
| 1179 if (!m_pJSContext) { | 1022 if (!m_pJSContext) { |
| 1180 m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc.get()); | 1023 m_pDocument->GetSDKDoc()->GetEnv()->GetJSRuntime()->SetReaderDocument( |
| 1181 m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext(); | 1024 m_pDocument->GetSDKDoc()); |
| 1025 m_pJSContext = | |
| 1026 m_pDocument->GetSDKDoc()->GetEnv()->GetJSRuntime()->NewContext(); | |
| 1182 } | 1027 } |
| 1183 | 1028 |
| 1184 return m_pSDKDoc->GetEnv()->GetJSRuntime()->GetValueByName(szPropName, | 1029 return m_pDocument->GetSDKDoc()->GetEnv()->GetJSRuntime()->GetValueByName( |
| 1185 pValue); | 1030 szPropName, pValue); |
| 1186 } | 1031 } |
| OLD | NEW |