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