14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffdocview.h" 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/fx_extension.h" 10d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/cfxjse_engine.h" 11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/xfa/cjx_object.h" 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/ptr_util.h" 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/stl_util.h" 14d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffapp.h" 15d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffbarcode.h" 16d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffcheckbutton.h" 17d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffdoc.h" 18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffdraw.h" 19d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffexclgroup.h" 20d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_fffield.h" 21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffimage.h" 22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffimageedit.h" 23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffpageview.h" 24d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffpushbutton.h" 25d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffsignature.h" 26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffsubform.h" 27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_fftext.h" 28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffwidget.h" 29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffwidgethandler.h" 30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_fwladapterwidgetmgr.h" 31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_textprovider.h" 32d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_widgetacciterator.h" 33d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_acrobat.h" 344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_binditems.h" 35d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_calculate.h" 364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_layoutprocessor.h" 37d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_pageset.h" 38d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_present.h" 39d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_subform.h" 40d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_validate.h" 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/xfa_resolvenode_rs.h" 42d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 43d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannconst XFA_AttributeEnum gs_EventActivity[] = { 44d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::Click, XFA_AttributeEnum::Change, 45d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::DocClose, XFA_AttributeEnum::DocReady, 46d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::Enter, XFA_AttributeEnum::Exit, 47d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::Full, XFA_AttributeEnum::IndexChange, 48d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::Initialize, XFA_AttributeEnum::MouseDown, 49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::MouseEnter, XFA_AttributeEnum::MouseExit, 50d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::MouseUp, XFA_AttributeEnum::PostExecute, 51d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::PostOpen, XFA_AttributeEnum::PostPrint, 52d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::PostSave, XFA_AttributeEnum::PostSign, 53d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::PostSubmit, XFA_AttributeEnum::PreExecute, 54d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::PreOpen, XFA_AttributeEnum::PrePrint, 55d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::PreSave, XFA_AttributeEnum::PreSign, 56d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::PreSubmit, XFA_AttributeEnum::Ready, 57d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_AttributeEnum::Unknown, 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}; 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_FFDocView::CXFA_FFDocView(CXFA_FFDoc* pDoc) 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : m_bLayoutEvent(false), 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pListFocusWidget(nullptr), 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bInLayoutStatus(false), 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDoc(pDoc), 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pXFADocLayout(nullptr), 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_iStatus(XFA_DOCVIEW_LAYOUTSTATUS_None), 674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_iLock(0) {} 684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_FFDocView::~CXFA_FFDocView() { 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann DestroyDocView(); 714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::InitLayout(CXFA_Node* pNode) { 744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunBindItems(); 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Initialize, false, true, 764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nullptr); 774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pNode, XFA_EVENT_IndexChange, false, true, 784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nullptr); 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 80d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_FFDocView::StartLayout(int32_t iStartPage) { 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Start; 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDoc->GetXFADoc()->DoProtoMerge(); 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDoc->GetXFADoc()->DoDataMerge(); 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pXFADocLayout = GetXFALayout(); 86d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iStatus = m_pXFADocLayout->StartLayout(); 88d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iStatus < 0) 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return iStatus; 90d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pRootItem = 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); 93d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pRootItem) 944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return iStatus; 95d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann InitLayout(pRootItem); 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann InitCalculate(pRootItem); 984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann InitValidate(pRootItem); 99d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready, true, true, nullptr); 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Start; 1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return iStatus; 1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 104d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannint32_t CXFA_FFDocView::DoLayout() { 1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iStatus = 100; 107d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iStatus = m_pXFADocLayout->DoLayout(); 108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iStatus != 100) 1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return iStatus; 110d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_Doing; 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return iStatus; 1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 114d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::StopLayout() { 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pRootItem = 1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); 118d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pRootItem) 1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 120d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 121d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Subform* pSubformNode = 122d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pRootItem->GetChild<CXFA_Subform>(0, XFA_Element::Subform, false); 123d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pSubformNode) 1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 125d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 126d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_PageSet* pPageSetNode = 127d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pSubformNode->GetFirstChildByClass<CXFA_PageSet>(XFA_Element::PageSet); 128d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pPageSetNode) 1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 130d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunCalculateWidgets(); 1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunValidate(); 133d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann InitLayout(pPageSetNode); 1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann InitCalculate(pPageSetNode); 1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann InitValidate(pPageSetNode); 137d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pPageSetNode, XFA_EVENT_Ready, true, true, 1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nullptr); 1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready, false, true, 1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nullptr); 1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_DocReady, false, true, 1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nullptr); 144d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunCalculateWidgets(); 1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunValidate(); 147d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (RunLayout()) { 1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready, false, true, 1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nullptr); 1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 152d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_CalculateAccs.clear(); 154d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_pFocusAcc && !m_pFocusWidget) 155d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetFocusWidgetAcc(m_pFocusAcc.Get()); 156d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_End; 1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 159d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::ShowNullTestMsg() { 1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iCount = pdfium::CollectionSize<int32_t>(m_arrNullTestMsg); 1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_FFApp* pApp = m_pDoc->GetApp(); 1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IXFA_AppProvider* pAppProvider = pApp->GetAppProvider(); 1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pAppProvider && iCount) { 1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iRemain = iCount > 7 ? iCount - 7 : 0; 1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann iCount -= iRemain; 167d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsMsg; 168d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (int32_t i = 0; i < iCount; i++) 16933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann wsMsg += m_arrNullTestMsg[i] + L"\n"; 170d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (iRemain > 0) { 172d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsMsg += L"\n" + WideString::Format( 173d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann L"Message limit exceeded. Remaining %d " 174d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann L"validation errors not reported.", 175d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iRemain); 1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pAppProvider->MsgBox(wsMsg, pAppProvider->GetAppTitle(), XFA_MBICON_Status, 1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_MB_OK); 1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_arrNullTestMsg.clear(); 1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::UpdateDocView() { 1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (IsUpdateLocked()) 1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann LockUpdate(); 1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (CXFA_Node* pNode : m_NewAddedNodes) { 1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann InitCalculate(pNode); 1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann InitValidate(pNode); 1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Ready, true, true, nullptr); 1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_NewAddedNodes.clear(); 194d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunSubformIndexChange(); 1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunCalculateWidgets(); 1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunValidate(); 198d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ShowNullTestMsg(); 200d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (RunLayout() && m_bLayoutEvent) 2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunEventLayoutReady(); 2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bLayoutEvent = false; 2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_CalculateAccs.clear(); 2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunInvalidate(); 2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann UnlockUpdate(); 2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 210d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannint32_t CXFA_FFDocView::CountPageViews() const { 211d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_pXFADocLayout ? m_pXFADocLayout->CountPages() : 0; 2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 213d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 214d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_FFPageView* CXFA_FFDocView::GetPageView(int32_t nIndex) const { 215d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!m_pXFADocLayout) 2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return static_cast<CXFA_FFPageView*>(m_pXFADocLayout->GetPage(nIndex)); 2184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_LayoutProcessor* CXFA_FFDocView::GetXFALayout() const { 2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pDoc->GetXFADoc()->GetDocLayout(); 2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 223d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFDocView::ResetSingleWidgetAccData(CXFA_WidgetAcc* pWidgetAcc) { 2254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pNode = pWidgetAcc->GetNode(); 2264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_Element eType = pNode->GetElementType(); 227d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eType != XFA_Element::Field && eType != XFA_Element::ExclGroup) 2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 229d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pWidgetAcc->ResetData(); 231d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pWidgetAcc->UpdateUIDisplay(this, nullptr); 232d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Validate* validate = pNode->GetValidateIfExists(); 233d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!validate) 234d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 235d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 236d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann AddValidateWidget(pWidgetAcc); 237d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann validate->SetFlag(XFA_NodeFlag_NeedsInitApp, false); 2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 240d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 241d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFDocView::ResetWidgetAcc(CXFA_WidgetAcc* pWidgetAcc) { 2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bLayoutEvent = true; 2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bChanged = false; 2444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pFormNode = nullptr; 2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pWidgetAcc) { 2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bChanged = ResetSingleWidgetAccData(pWidgetAcc); 2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFormNode = pWidgetAcc->GetNode(); 2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFormNode = GetRootSubform(); 2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 251d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pFormNode) 2524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 253d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pFormNode->GetElementType() != XFA_Element::Field && 2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFormNode->GetElementType() != XFA_Element::ExclGroup) { 256d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_WidgetAccIterator Iterator(pFormNode); 2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann while (CXFA_WidgetAcc* pAcc = Iterator.MoveToNext()) { 2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bChanged |= ResetSingleWidgetAccData(pAcc); 259d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pAcc->GetNode()->GetElementType() == XFA_Element::ExclGroup) 2604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann Iterator.SkipTree(); 2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 263d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bChanged) 264d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pDoc->GetDocEnvironment()->SetChangeMark(m_pDoc.Get()); 2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 266d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_FFDocView::ProcessWidgetEvent(CXFA_EventParam* pParam, 2684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_WidgetAcc* pWidgetAcc) { 2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pParam) 2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_Error; 2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pParam->m_eType == XFA_EVENT_Validate) { 273d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsValidateStr(L"preSubmit"); 2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pConfigItem = 2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Config)); 2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pConfigItem) { 277d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Acrobat* pAcrobatNode = 278d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pConfigItem->GetChild<CXFA_Acrobat>(0, XFA_Element::Acrobat, false); 279d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Validate* pValidateNode = 280d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pAcrobatNode ? pAcrobatNode->GetChild<CXFA_Validate>( 281d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 0, XFA_Element::Validate, false) 282d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann : nullptr; 2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pValidateNode) { 284d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Present* pPresentNode = 285d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pConfigItem->GetChild<CXFA_Present>(0, XFA_Element::Present, false); 286d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pValidateNode = pPresentNode ? pPresentNode->GetChild<CXFA_Validate>( 287d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 0, XFA_Element::Validate, false) 288d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann : nullptr; 2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 290d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pValidateNode) 291d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsValidateStr = pValidateNode->JSObject()->GetContent(false); 2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 293d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 294d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!wsValidateStr.Contains(L"preSubmit")) 2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_Success; 2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 297d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pNode = pWidgetAcc ? pWidgetAcc->GetNode() : nullptr; 2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pNode) { 3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pRootItem = 3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); 302d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pRootItem) 3034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_Error; 304d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 305d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = pRootItem->GetChild<CXFA_Node>(0, XFA_Element::Subform, false); 3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 307d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pNode, pParam->m_eType, pParam->m_bIsFormReady, 3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann true, nullptr); 3104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_Success; 3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 312d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 313d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_FFWidget* CXFA_FFDocView::GetWidgetForNode(CXFA_Node* node) { 314d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return static_cast<CXFA_FFWidget*>(GetXFALayout()->GetLayoutItem(node)); 315d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 316d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_FFWidgetHandler* CXFA_FFDocView::GetWidgetHandler() { 3184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pWidgetHandler) 3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pWidgetHandler = pdfium::MakeUnique<CXFA_FFWidgetHandler>(this); 3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pWidgetHandler.get(); 3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 323d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstd::unique_ptr<CXFA_WidgetAccIterator> 324d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_FFDocView::CreateWidgetAccIterator() { 325d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Subform* pFormRoot = GetRootSubform(); 326d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pFormRoot ? pdfium::MakeUnique<CXFA_WidgetAccIterator>(pFormRoot) 327d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann : nullptr; 3284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 329d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 3304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::KillFocus() { 3314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pFocusWidget && 3324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann (m_pFocusWidget->GetStatus() & XFA_WidgetStatus_Focused)) { 333d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pFocusWidget->OnKillFocus(nullptr); 3344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFocusAcc = nullptr; 3364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFocusWidget = nullptr; 3374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pOldFocusWidget = nullptr; 3384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 339d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 3404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFDocView::SetFocus(CXFA_FFWidget* hWidget) { 3414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_FFWidget* pNewFocus = hWidget; 342d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_pOldFocusWidget == pNewFocus) 3434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 344d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 345d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_FFWidget* pOldFocus = m_pOldFocusWidget.Get(); 3464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pOldFocusWidget = pNewFocus; 3474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pOldFocus) { 3484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pFocusWidget != m_pOldFocusWidget && 3494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann (pOldFocus->GetStatus() & XFA_WidgetStatus_Focused)) { 3504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFocusWidget = pOldFocus; 3514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pOldFocus->OnKillFocus(pNewFocus); 3524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else if ((pOldFocus->GetStatus() & XFA_WidgetStatus_Visible)) { 353d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pOldFocus->IsLoaded()) 3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pOldFocus->LoadWidget(); 355d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 356d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pOldFocus->OnSetFocus(m_pFocusWidget.Get()); 3574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFocusWidget = pOldFocus; 3584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pOldFocus->OnKillFocus(pNewFocus); 3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 361d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_pFocusWidget == m_pOldFocusWidget) 3624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 363d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 364d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNewFocus = m_pOldFocusWidget.Get(); 3654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pListFocusWidget && pNewFocus == m_pListFocusWidget) { 3664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFocusAcc = nullptr; 3674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFocusWidget = nullptr; 3684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pListFocusWidget = nullptr; 3694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pOldFocusWidget = nullptr; 3704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 3714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pNewFocus && (pNewFocus->GetStatus() & XFA_WidgetStatus_Visible)) { 373d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pNewFocus->IsLoaded()) 3744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pNewFocus->LoadWidget(); 375d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNewFocus->OnSetFocus(m_pFocusWidget.Get()); 3764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 377d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pFocusAcc = pNewFocus ? pNewFocus->GetNode()->GetWidgetAcc() : nullptr; 3784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFocusWidget = pNewFocus; 3794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pOldFocusWidget = m_pFocusWidget; 3804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 3814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 382d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 3834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::SetFocusWidgetAcc(CXFA_WidgetAcc* pWidgetAcc) { 384d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_FFWidget* pNewFocus = nullptr; 385d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pWidgetAcc) 386d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNewFocus = GetWidgetForNode(pWidgetAcc->GetNode()); 387d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!SetFocus(pNewFocus)) 388d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 389d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 390d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pFocusAcc = pWidgetAcc; 391d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_iStatus != XFA_DOCVIEW_LAYOUTSTATUS_End) 392d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 393d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 394d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pDoc->GetDocEnvironment()->SetFocusWidget(m_pDoc.Get(), 395d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pFocusWidget.Get()); 3964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 397d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::DeleteLayoutItem(CXFA_FFWidget* pWidget) { 399d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_pFocusAcc && m_pFocusAcc->GetNode() != pWidget->GetNode()) 400d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 401d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 402d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pFocusAcc = nullptr; 403d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pFocusWidget = nullptr; 404d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pOldFocusWidget = nullptr; 4054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 406d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 4074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic int32_t XFA_ProcessEvent(CXFA_FFDocView* pDocView, 4084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_WidgetAcc* pWidgetAcc, 4094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_EventParam* pParam) { 410d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) 4114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_NotExist; 412d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pWidgetAcc) 4134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_NotExist; 414d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 415d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* node = pWidgetAcc->GetNode(); 416d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (node && node->GetElementType() == XFA_Element::Draw) 417d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return XFA_EVENTERROR_NotExist; 418d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 4194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (pParam->m_eType) { 4204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_EVENT_Calculate: 421d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return node->ProcessCalculate(pDocView); 4224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_EVENT_Validate: 423d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pDocView->GetDoc()->GetDocEnvironment()->IsValidationsEnabled( 424d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDocView->GetDoc())) { 425d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return node->ProcessValidate(pDocView, 0x01); 4264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_Disabled; 4284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case XFA_EVENT_InitCalculate: { 429d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Calculate* calc = node->GetCalculateIfExists(); 430d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!calc) 4314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_NotExist; 432d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (node->IsUserInteractive()) 4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_Disabled; 4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 435d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return node->ExecuteScript(pDocView, calc->GetScriptIfExists(), pParam); 4364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann default: 4384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 4394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 440d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 441d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return node->ProcessEvent(pDocView, gs_EventActivity[pParam->m_eType], 442d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pParam); 4434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 444d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 4454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_FFDocView::ExecEventActivityByDeepFirst(CXFA_Node* pFormNode, 4464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_EVENTTYPE eEventType, 4474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIsFormReady, 4484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bRecursive, 4494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pExclude) { 450d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pFormNode == pExclude) 451d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return XFA_EVENTERROR_NotExist; 452d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 4534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_Element elementType = pFormNode->GetElementType(); 4544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (elementType == XFA_Element::Field) { 455d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (eEventType == XFA_EVENT_IndexChange) 456d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return XFA_EVENTERROR_NotExist; 457d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 458d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_WidgetAcc* pWidgetAcc = pFormNode->GetWidgetAcc(); 459d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pWidgetAcc) 460d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return XFA_EVENTERROR_NotExist; 461d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_EventParam eParam; 4634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_eType = eEventType; 4644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_pTarget = pWidgetAcc; 4654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_bIsFormReady = bIsFormReady; 4664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_ProcessEvent(this, pWidgetAcc, &eParam); 4674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 468d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 469d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iRet = XFA_EVENTERROR_NotExist; 4704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bRecursive) { 471d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Node* pNode = pFormNode->GetFirstContainerChild(); pNode; 472d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNode = pNode->GetNextContainerSibling()) { 4734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann elementType = pNode->GetElementType(); 4744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (elementType != XFA_Element::Variables && 4754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann elementType != XFA_Element::Draw) { 4764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann iRet |= ExecEventActivityByDeepFirst(pNode, eEventType, bIsFormReady, 4774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bRecursive, pExclude); 4784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 481d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_WidgetAcc* pWidgetAcc = pFormNode->GetWidgetAcc(); 482d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pWidgetAcc) 4834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return iRet; 484d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_EventParam eParam; 4864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_eType = eEventType; 4874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_pTarget = pWidgetAcc; 4884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_bIsFormReady = bIsFormReady; 4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann iRet |= XFA_ProcessEvent(this, pWidgetAcc, &eParam); 490d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 4914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return iRet; 4924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 494d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_FFWidget* CXFA_FFDocView::GetWidgetByName(const WideString& wsName, 4954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_FFWidget* pRefWidget) { 496d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_WidgetAcc* pRefAcc = 497d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pRefWidget ? pRefWidget->GetNode()->GetWidgetAcc() : nullptr; 4984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_WidgetAcc* pAcc = GetWidgetAccByName(wsName, pRefAcc); 499d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pAcc) 500d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return nullptr; 501d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return GetWidgetForNode(pAcc->GetNode()); 5024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_WidgetAcc* CXFA_FFDocView::GetWidgetAccByName( 505d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const WideString& wsName, 5064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_WidgetAcc* pRefWidgetAcc) { 507d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsExpression; 5084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | 5094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent; 510d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFXJSE_Engine* pScriptContext = m_pDoc->GetXFADoc()->GetScriptContext(); 511d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pScriptContext) 5124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 513d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 5144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* refNode = nullptr; 5154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pRefWidgetAcc) { 5164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann refNode = pRefWidgetAcc->GetNode(); 5174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann wsExpression = wsName; 5184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 5194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann wsExpression = L"$form." + wsName; 5204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 521d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 522d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_RESOLVENODE_RS resolveNodeRS; 523d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pScriptContext->ResolveObjects(refNode, wsExpression.AsStringView(), 524d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann &resolveNodeRS, dwStyle, nullptr)) { 5254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 5264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 527d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 528d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (resolveNodeRS.dwFlags == XFA_ResolveNode_RSType_Nodes) { 529d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pNode = resolveNodeRS.objects.front()->AsNode(); 530d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pNode) 531d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pNode->GetWidgetAcc(); 5324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 5334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::OnPageEvent(CXFA_ContainerLayoutItem* pSender, 5374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwEvent) { 5384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_FFPageView* pFFPageView = static_cast<CXFA_FFPageView*>(pSender); 5394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDoc->GetDocEnvironment()->PageViewEvent(pFFPageView, dwEvent); 5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 542d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::AddInvalidateRect(CXFA_FFWidget* pWidget, 5444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_RectF& rtInvalidate) { 5454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann AddInvalidateRect(pWidget->GetPageView(), rtInvalidate); 5464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::AddInvalidateRect(CXFA_FFPageView* pPageView, 5494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_RectF& rtInvalidate) { 5504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_mapPageInvalidate[pPageView]) { 5514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_mapPageInvalidate[pPageView]->Union(rtInvalidate); 5524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 5534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 554d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 55533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann m_mapPageInvalidate[pPageView] = pdfium::MakeUnique<CFX_RectF>(rtInvalidate); 5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::RunInvalidate() { 5594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (const auto& pair : m_mapPageInvalidate) 560d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pDoc->GetDocEnvironment()->InvalidateRect(pair.first, *pair.second); 561d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_mapPageInvalidate.clear(); 5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFDocView::RunLayout() { 5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann LockUpdate(); 5674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bInLayoutStatus = true; 5684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pXFADocLayout->IncrementLayout() && 5694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pXFADocLayout->StartLayout() < 100) { 5704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pXFADocLayout->DoLayout(); 5714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann UnlockUpdate(); 5724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bInLayoutStatus = false; 5734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDoc->GetDocEnvironment()->PageViewEvent(nullptr, 5744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_PAGEVIEWEVENT_StopLayout); 5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 5764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 577d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 5784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bInLayoutStatus = false; 5794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDoc->GetDocEnvironment()->PageViewEvent(nullptr, 5804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_PAGEVIEWEVENT_StopLayout); 5814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann UnlockUpdate(); 5824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 5834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::RunSubformIndexChange() { 5864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (CXFA_Node* pSubformNode : m_IndexChangedSubforms) { 587d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pSubformNode->GetWidgetAcc()) 5884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 5894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_EventParam eParam; 5914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann eParam.m_eType = XFA_EVENT_IndexChange; 592d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann eParam.m_pTarget = pSubformNode->GetWidgetAcc(); 593d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pSubformNode->ProcessEvent(this, XFA_AttributeEnum::IndexChange, &eParam); 5944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 5954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_IndexChangedSubforms.clear(); 5964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::AddNewFormNode(CXFA_Node* pNode) { 5994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_NewAddedNodes.push_back(pNode); 6004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann InitLayout(pNode); 6014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::AddIndexChangedSubform(CXFA_Node* pNode) { 6044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(pNode->GetElementType() == XFA_Element::Subform); 6054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_IndexChangedSubforms.push_back(pNode); 6064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::RunDocClose() { 6094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pRootItem = 6104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); 611d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pRootItem) 6124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 613d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 6144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_DocClose, false, true, 6154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nullptr); 6164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 617d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 6184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::DestroyDocView() { 6194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ClearInvalidateList(); 6204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_iStatus = XFA_DOCVIEW_LAYOUTSTATUS_None; 6214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_iLock = 0; 6224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_ValidateAccs.clear(); 6234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_BindItems.clear(); 6244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_CalculateAccs.clear(); 6254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::AddCalculateWidgetAcc(CXFA_WidgetAcc* pWidgetAcc) { 6284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_WidgetAcc* pCurrentAcc = 6294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann !m_CalculateAccs.empty() ? m_CalculateAccs.back() : nullptr; 6304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pCurrentAcc != pWidgetAcc) 6314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_CalculateAccs.push_back(pWidgetAcc); 6324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::AddCalculateNodeNotify(CXFA_Node* pNodeChange) { 635d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_CalcData* pGlobalData = pNodeChange->JSObject()->GetCalcData(); 63633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann if (!pGlobalData) 63733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann return; 63833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann 639d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto* pResult : pGlobalData->m_Globals) { 640d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pResult->HasRemovedChildren()) 641d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann AddCalculateWidgetAcc(pResult->GetWidgetAcc()); 6424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 6434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 645d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannsize_t CXFA_FFDocView::RunCalculateRecursive(size_t index) { 646d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (index < m_CalculateAccs.size()) { 647d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* node = m_CalculateAccs[index]->GetNode(); 648d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 649d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann AddCalculateNodeNotify(node); 650d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann size_t recurse = node->JSObject()->GetCalcRecursionCount() + 1; 651d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann node->JSObject()->SetCalcRecursionCount(recurse); 652d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (recurse > 11) 6534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 654d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (node->ProcessCalculate(this) == XFA_EVENTERROR_Success) 655d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann AddValidateWidget(node->GetWidgetAcc()); 656d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 657d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann index = RunCalculateRecursive(++index); 6584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 659d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return index; 6604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_FFDocView::RunCalculateWidgets() { 663d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!m_pDoc->GetDocEnvironment()->IsCalculationsEnabled(m_pDoc.Get())) 6644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_Disabled; 665d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!m_CalculateAccs.empty()) 666d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann RunCalculateRecursive(0); 6674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (CXFA_WidgetAcc* pCurAcc : m_CalculateAccs) 669d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pCurAcc->GetNode()->JSObject()->SetCalcRecursionCount(0); 6704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_CalculateAccs.clear(); 6724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return XFA_EVENTERROR_Success; 6734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::AddValidateWidget(CXFA_WidgetAcc* pWidget) { 6764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pdfium::ContainsValue(m_ValidateAccs, pWidget)) 6774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_ValidateAccs.push_back(pWidget); 6784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 680d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFDocView::InitCalculate(CXFA_Node* pNode) { 6814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pNode, XFA_EVENT_InitCalculate, false, true, 6824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nullptr); 683d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 684d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 685d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFDocView::ProcessValueChanged(CXFA_WidgetAcc* widgetAcc) { 686d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann AddValidateWidget(widgetAcc); 687d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann AddCalculateWidgetAcc(widgetAcc); 688d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann RunCalculateWidgets(); 689d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann RunValidate(); 6904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFDocView::InitValidate(CXFA_Node* pNode) { 693d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!m_pDoc->GetDocEnvironment()->IsValidationsEnabled(m_pDoc.Get())) 6944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 6954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pNode, XFA_EVENT_Validate, false, true, nullptr); 6974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_ValidateAccs.clear(); 6984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 6994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 7004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFDocView::RunValidate() { 702d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!m_pDoc->GetDocEnvironment()->IsValidationsEnabled(m_pDoc.Get())) 7034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 7044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (CXFA_WidgetAcc* pAcc : m_ValidateAccs) { 706d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* node = pAcc->GetNode(); 707d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!node->HasRemovedChildren()) 708d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann node->ProcessValidate(this, 0); 7094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_ValidateAccs.clear(); 7114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 7124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 713d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 7144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFDocView::RunEventLayoutReady() { 7154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pRootItem = 7164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); 717d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pRootItem) 7184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 719d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 7204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExecEventActivityByDeepFirst(pRootItem, XFA_EVENT_Ready, false, true, 7214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nullptr); 7224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann RunLayout(); 7234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 7244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 725d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 7264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::RunBindItems() { 727d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto* item : m_BindItems) { 7284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (item->HasRemovedChildren()) 7294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 7304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 731d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* pWidgetNode = item->GetParent(); 732d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_WidgetAcc* pAcc = pWidgetNode->GetWidgetAcc(); 7334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pAcc) 7344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 7354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 736d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFXJSE_Engine* pScriptContext = 7374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pWidgetNode->GetDocument()->GetScriptContext(); 738d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsRef = item->GetRef(); 7394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | 7404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent | 7414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_RESOLVENODE_ALL; 7424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann XFA_RESOLVENODE_RS rs; 743d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pScriptContext->ResolveObjects(pWidgetNode, wsRef.AsStringView(), &rs, 744d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dwStyle, nullptr); 745d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pAcc->DeleteItem(-1, false, false); 746d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (rs.dwFlags != XFA_ResolveNode_RSType_Nodes || rs.objects.empty()) 7474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 7484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 749d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsValueRef = item->GetValueRef(); 750d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsLabelRef = item->GetLabelRef(); 7514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const bool bUseValue = wsLabelRef.IsEmpty() || wsLabelRef == wsValueRef; 75233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann const bool bLabelUseContent = wsLabelRef.IsEmpty() || wsLabelRef == L"$"; 75333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann const bool bValueUseContent = wsValueRef.IsEmpty() || wsValueRef == L"$"; 754d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsValue; 755d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsLabel; 756d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann uint32_t uValueHash = FX_HashCode_GetW(wsValueRef.AsStringView(), false); 757d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CXFA_Object* refObject : rs.objects) { 758d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* refNode = refObject->AsNode(); 759d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!refNode) 7604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 761d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 7624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bValueUseContent) { 763d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsValue = refNode->JSObject()->GetContent(false); 7644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 7654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* nodeValue = refNode->GetFirstChildByName(uValueHash); 766d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsValue = nodeValue ? nodeValue->JSObject()->GetContent(false) 767d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann : refNode->JSObject()->GetContent(false); 7684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 769d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 7704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!bUseValue) { 7714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bLabelUseContent) { 772d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsLabel = refNode->JSObject()->GetContent(false); 7734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 774d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Node* nodeLabel = 775d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann refNode->GetFirstChildByName(wsLabelRef.AsStringView()); 7764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nodeLabel) 777d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann wsLabel = nodeLabel->JSObject()->GetContent(false); 7784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 7804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann wsLabel = wsValue; 7814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 782d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pAcc->InsertItem(wsLabel, wsValue, false); 7834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_BindItems.clear(); 7864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 787d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 7884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFDocView::SetChangeMark() { 789d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_iStatus < XFA_DOCVIEW_LAYOUTSTATUS_End) 7904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 791d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 792d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pDoc->GetDocEnvironment()->SetChangeMark(m_pDoc.Get()); 7934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 794d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 795d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_Subform* CXFA_FFDocView::GetRootSubform() { 7964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CXFA_Node* pFormPacketNode = 7974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Form)); 798d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pFormPacketNode) 7994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 8004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 801d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pFormPacketNode->GetFirstChildByClass<CXFA_Subform>( 802d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann XFA_Element::Subform); 8034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 804