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_ffwidgethandler.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <vector>
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fxjs/xfa/cjx_object.h"
12d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffdoc.h"
13d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffdocview.h"
14d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_fffield.h"
15d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffwidget.h"
16d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_fwladapterwidgetmgr.h"
17d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_calculate.h"
18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_checkbutton.h"
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_layoutprocessor.h"
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_measurement.h"
21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_node.h"
22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_ui.h"
23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_validate.h"
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_FFWidgetHandler::CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView)
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    : m_pDocView(pDocView) {}
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_FFWidgetHandler::~CXFA_FFWidgetHandler() {}
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnMouseEnter(CXFA_FFWidget* hWidget) {
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->LockUpdate();
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bRet = hWidget->OnMouseEnter();
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->UnlockUpdate();
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->UpdateDocView();
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnMouseExit(CXFA_FFWidget* hWidget) {
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->LockUpdate();
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bRet = hWidget->OnMouseExit();
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->UnlockUpdate();
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->UpdateDocView();
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnLButtonDown(CXFA_FFWidget* hWidget,
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         uint32_t dwFlags,
4833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                                         const CFX_PointF& point) {
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->LockUpdate();
5033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool bRet = hWidget->OnLButtonDown(dwFlags, hWidget->Rotate2Normal(point));
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bRet && m_pDocView->SetFocus(hWidget)) {
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pDocView->GetDoc()->GetDocEnvironment()->SetFocusWidget(
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pDocView->GetDoc(), hWidget);
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->UnlockUpdate();
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->UpdateDocView();
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnLButtonUp(CXFA_FFWidget* hWidget,
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       uint32_t dwFlags,
6233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                                       const CFX_PointF& point) {
634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->LockUpdate();
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->m_bLayoutEvent = true;
6533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool bRet = hWidget->OnLButtonUp(dwFlags, hWidget->Rotate2Normal(point));
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->UnlockUpdate();
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->UpdateDocView();
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnLButtonDblClk(CXFA_FFWidget* hWidget,
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           uint32_t dwFlags,
7333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                                           const CFX_PointF& point) {
7433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool bRet = hWidget->OnLButtonDblClk(dwFlags, hWidget->Rotate2Normal(point));
754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->RunInvalidate();
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnMouseMove(CXFA_FFWidget* hWidget,
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       uint32_t dwFlags,
8133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                                       const CFX_PointF& point) {
8233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool bRet = hWidget->OnMouseMove(dwFlags, hWidget->Rotate2Normal(point));
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->RunInvalidate();
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnMouseWheel(CXFA_FFWidget* hWidget,
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        uint32_t dwFlags,
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        int16_t zDelta,
9033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                                        const CFX_PointF& point) {
9133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool bRet =
9233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      hWidget->OnMouseWheel(dwFlags, zDelta, hWidget->Rotate2Normal(point));
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->RunInvalidate();
944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnRButtonDown(CXFA_FFWidget* hWidget,
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         uint32_t dwFlags,
9933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                                         const CFX_PointF& point) {
10033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool bRet = hWidget->OnRButtonDown(dwFlags, hWidget->Rotate2Normal(point));
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bRet && m_pDocView->SetFocus(hWidget)) {
1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pDocView->GetDoc()->GetDocEnvironment()->SetFocusWidget(
1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        m_pDocView->GetDoc(), hWidget);
1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->RunInvalidate();
1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnRButtonUp(CXFA_FFWidget* hWidget,
1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       uint32_t dwFlags,
11133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                                       const CFX_PointF& point) {
11233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool bRet = hWidget->OnRButtonUp(dwFlags, hWidget->Rotate2Normal(point));
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->RunInvalidate();
1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnRButtonDblClk(CXFA_FFWidget* hWidget,
1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           uint32_t dwFlags,
11933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                                           const CFX_PointF& point) {
12033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool bRet = hWidget->OnRButtonDblClk(dwFlags, hWidget->Rotate2Normal(point));
1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->RunInvalidate();
1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnKeyDown(CXFA_FFWidget* hWidget,
1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     uint32_t dwKeyCode,
1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                     uint32_t dwFlags) {
1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bRet = hWidget->OnKeyDown(dwKeyCode, dwFlags);
1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->RunInvalidate();
1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->UpdateDocView();
1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnKeyUp(CXFA_FFWidget* hWidget,
1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   uint32_t dwKeyCode,
1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   uint32_t dwFlags) {
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bRet = hWidget->OnKeyUp(dwKeyCode, dwFlags);
1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->RunInvalidate();
1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnChar(CXFA_FFWidget* hWidget,
1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  uint32_t dwChar,
1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                  uint32_t dwFlags) {
1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bRet = hWidget->OnChar(dwChar, dwFlags);
1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->RunInvalidate();
1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bRet;
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
150d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannWideString CXFA_FFWidgetHandler::GetSelectedText(CXFA_FFWidget* widget) {
151d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!widget->CanCopy())
152d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return WideString();
153d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
154d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  return widget->Copy().value_or(WideString());
155d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann}
156d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
157d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFWidgetHandler::PasteText(CXFA_FFWidget* widget,
158d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                     const WideString& text) {
159d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!widget->CanPaste())
160d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return;
161d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
162d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  widget->Paste(text);
163d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann}
164d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFWL_WidgetHit CXFA_FFWidgetHandler::OnHitTest(CXFA_FFWidget* hWidget,
16633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                                              const CFX_PointF& point) {
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!(hWidget->GetStatus() & XFA_WidgetStatus_Visible))
1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return FWL_WidgetHit::Unknown;
16933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  return hWidget->OnHitTest(hWidget->Rotate2Normal(point));
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::OnSetCursor(CXFA_FFWidget* hWidget,
17333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                                       const CFX_PointF& point) {
17433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  return hWidget->OnSetCursor(hWidget->Rotate2Normal(point));
1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CXFA_FFWidgetHandler::RenderWidget(CXFA_FFWidget* hWidget,
178d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                        CXFA_Graphics* pGS,
179d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                        const CFX_Matrix& matrix,
1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        bool bHighlight) {
181d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  hWidget->RenderWidget(pGS, matrix,
1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        bHighlight ? XFA_WidgetStatus_Highlight : 0);
1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CXFA_FFWidgetHandler::HasEvent(CXFA_WidgetAcc* pWidgetAcc,
1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    XFA_EVENTTYPE eEventType) {
187d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (eEventType == XFA_EVENT_Unknown)
1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
189d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!pWidgetAcc)
190d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return false;
191d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
192d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Node* node = pWidgetAcc->GetNode();
193d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!node || node->GetElementType() == XFA_Element::Draw)
1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (eEventType) {
1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_EVENT_Calculate: {
198d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      CXFA_Calculate* calc = node->GetCalculateIfExists();
199d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return calc && calc->GetScriptIfExists();
2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_EVENT_Validate: {
202d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      CXFA_Validate* validate = node->GetValidateIfExists();
203d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return validate && validate->GetScriptIfExists();
2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
208d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  return !pWidgetAcc->GetEventByActivity(gs_EventActivity[eEventType], false)
209d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann              .empty();
2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CXFA_FFWidgetHandler::ProcessEvent(CXFA_WidgetAcc* pWidgetAcc,
2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           CXFA_EventParam* pParam) {
2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pParam || pParam->m_eType == XFA_EVENT_Unknown)
2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return XFA_EVENTERROR_NotExist;
216d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!pWidgetAcc)
217d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return XFA_EVENTERROR_NotExist;
218d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
219d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Node* node = pWidgetAcc->GetNode();
220d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!node || node->GetElementType() == XFA_Element::Draw)
2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return XFA_EVENTERROR_NotExist;
2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (pParam->m_eType) {
2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_EVENT_Calculate:
225d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return node->ProcessCalculate(m_pDocView);
2264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_EVENT_Validate:
2274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (m_pDocView->GetDoc()->GetDocEnvironment()->IsValidationsEnabled(
2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann              m_pDocView->GetDoc())) {
229d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann        return node->ProcessValidate(m_pDocView, 0);
2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
2314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return XFA_EVENTERROR_Disabled;
2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_EVENT_InitCalculate: {
233d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      CXFA_Calculate* calc = node->GetCalculateIfExists();
2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!calc)
2354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return XFA_EVENTERROR_NotExist;
236d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      if (node->IsUserInteractive())
2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return XFA_EVENTERROR_Disabled;
238d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      return node->ExecuteScript(m_pDocView, calc->GetScriptIfExists(), pParam);
2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iRet =
244d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      node->ProcessEvent(m_pDocView, gs_EventActivity[pParam->m_eType], pParam);
2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return iRet;
2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_FFWidget* CXFA_FFWidgetHandler::CreateWidget(CXFA_FFWidget* hParent,
2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                  XFA_WIDGETTYPE eType,
2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                  CXFA_FFWidget* hBefore) {
251d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Node* pParentFormItem = hParent ? hParent->GetNode() : nullptr;
252d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Node* pBeforeFormItem = hBefore ? hBefore->GetNode() : nullptr;
2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNewFormItem =
2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CreateWidgetFormItem(eType, pParentFormItem, pBeforeFormItem);
2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNewFormItem)
2564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return nullptr;
2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
258d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Node* templateNode = pNewFormItem->GetTemplateNodeIfExists();
259d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!templateNode)
260d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return nullptr;
261d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
262d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  templateNode->SetFlag(XFA_NodeFlag_Initialized, true);
2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNewFormItem->SetFlag(XFA_NodeFlag_Initialized, true);
2644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_pDocView->RunLayout();
2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_LayoutItem* pLayout =
2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocView->GetXFALayout()->GetLayoutItem(pNewFormItem);
2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(pLayout);
2684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateWidgetFormItem(
2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_WIDGETTYPE eType,
2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pParent,
2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Node* pBefore) const {
2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (eType) {
2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_Barcode:
2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return nullptr;
2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_PushButton:
2784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreatePushButton(pParent, pBefore);
2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_CheckButton:
2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateCheckButton(pParent, pBefore);
2814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_ExcludeGroup:
2824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateExclGroup(pParent, pBefore);
2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_RadioButton:
2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateRadioButton(pParent, pBefore);
2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_Arc:
2864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateArc(pParent, pBefore);
2874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_Rectangle:
2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateRectangle(pParent, pBefore);
2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_Image:
2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateImage(pParent, pBefore);
2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_Line:
2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateLine(pParent, pBefore);
2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_Text:
2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateText(pParent, pBefore);
2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_DatetimeEdit:
2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateDatetimeEdit(pParent, pBefore);
2974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_DecimalField:
2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateDecimalField(pParent, pBefore);
2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_NumericField:
3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateNumericField(pParent, pBefore);
3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_Signature:
3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateSignature(pParent, pBefore);
3034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_TextEdit:
3044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateTextEdit(pParent, pBefore);
3054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_DropdownList:
3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateDropdownList(pParent, pBefore);
3074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_ListBox:
3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateListBox(pParent, pBefore);
3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_ImageField:
3104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateImageField(pParent, pBefore);
3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_PasswordEdit:
3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreatePasswordEdit(pParent, pBefore);
3134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case XFA_WIDGETTYPE_Subform:
3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return CreateSubform(pParent, pBefore);
3154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    default:
3164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return nullptr;
3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreatePushButton(CXFA_Node* pParent,
3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                  CXFA_Node* pBefore) const {
3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_Element::Button, pParent, pBefore);
3234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pCaption = CreateCopyNode(XFA_Element::Caption, pField);
3244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pValue = CreateCopyNode(XFA_Element::Value, pCaption);
3254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pText = CreateCopyNode(XFA_Element::Text, pValue);
326d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pText->JSObject()->SetContent(L"Button", L"Button", false, false, true);
3274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pPara = CreateCopyNode(XFA_Element::Para, pCaption);
329d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pPara->JSObject()->SetEnum(XFA_Attribute::VAlign, XFA_AttributeEnum::Middle,
330d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                             false);
331d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pPara->JSObject()->SetEnum(XFA_Attribute::HAlign, XFA_AttributeEnum::Center,
332d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                             false);
3334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CreateFontNode(pCaption);
3344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pBorder = CreateCopyNode(XFA_Element::Border, pField);
336d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pBorder->JSObject()->SetEnum(XFA_Attribute::Hand, XFA_AttributeEnum::Right,
337d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                               false);
3384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pEdge = CreateCopyNode(XFA_Element::Edge, pBorder);
340d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pEdge->JSObject()->SetEnum(XFA_Attribute::Stroke, XFA_AttributeEnum::Raised,
341d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                             false);
3424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pFill = CreateCopyNode(XFA_Element::Fill, pBorder);
3444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pColor = CreateCopyNode(XFA_Element::Color, pFill);
345d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pColor->JSObject()->SetCData(XFA_Attribute::Value, L"212, 208, 200", false,
346d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                               false);
3474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pBind = CreateCopyNode(XFA_Element::Bind, pField);
349d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pBind->JSObject()->SetEnum(XFA_Attribute::Match, XFA_AttributeEnum::None,
350d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                             false);
3514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pField;
3534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateCheckButton(CXFA_Node* pParent,
3564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                   CXFA_Node* pBefore) const {
3574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateField(XFA_Element::CheckButton, pParent, pBefore);
3584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateExclGroup(CXFA_Node* pParent,
3614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                 CXFA_Node* pBefore) const {
3624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateFormItem(XFA_Element::ExclGroup, pParent, pBefore);
3634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateRadioButton(CXFA_Node* pParent,
3664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                   CXFA_Node* pBefore) const {
3674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_Element::CheckButton, pParent, pBefore);
368d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Ui* pUi = pField->GetFirstChildByClass<CXFA_Ui>(XFA_Element::Ui);
369d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_CheckButton* pWidget =
370d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      pUi->GetFirstChildByClass<CXFA_CheckButton>(XFA_Element::CheckButton);
371d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pWidget->JSObject()->SetEnum(XFA_Attribute::Shape, XFA_AttributeEnum::Round,
372d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                               false);
3734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pField;
3744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateDatetimeEdit(CXFA_Node* pParent,
3774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
3784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_Element::DateTimeEdit, pParent, pBefore);
3794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CreateValueNode(XFA_Element::Date, pField);
3804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pField;
3814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateDecimalField(CXFA_Node* pParent,
3844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
3854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pField = CreateNumericField(pParent, pBefore);
3864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CreateValueNode(XFA_Element::Decimal, pField);
3874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pField;
3884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateNumericField(CXFA_Node* pParent,
3914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
3924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateField(XFA_Element::NumericEdit, pParent, pBefore);
3934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateSignature(CXFA_Node* pParent,
3964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                 CXFA_Node* pBefore) const {
3974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateField(XFA_Element::Signature, pParent, pBefore);
3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateTextEdit(CXFA_Node* pParent,
4014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                CXFA_Node* pBefore) const {
4024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateField(XFA_Element::TextEdit, pParent, pBefore);
4034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateDropdownList(CXFA_Node* pParent,
4064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
4074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateField(XFA_Element::ChoiceList, pParent, pBefore);
4084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateListBox(CXFA_Node* pParent,
4114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               CXFA_Node* pBefore) const {
4124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pField = CreateDropdownList(pParent, pBefore);
413d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Node* pUi = pField->GetFirstChild();
414d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Node* pListBox = pUi->GetFirstChild();
415d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pListBox->JSObject()->SetEnum(XFA_Attribute::Open, XFA_AttributeEnum::Always,
416d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                false);
417d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pListBox->JSObject()->SetEnum(XFA_Attribute::CommitOn,
418d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                XFA_AttributeEnum::Exit, false);
4194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pField;
4204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateImageField(CXFA_Node* pParent,
4234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                  CXFA_Node* pBefore) const {
4244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateField(XFA_Element::ImageEdit, pParent, pBefore);
4254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreatePasswordEdit(CXFA_Node* pParent,
4284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
4294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_Element::PasswordEdit, pParent, pBefore);
4304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pBind = CreateCopyNode(XFA_Element::Bind, pField);
431d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pBind->JSObject()->SetEnum(XFA_Attribute::Match, XFA_AttributeEnum::None,
432d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                             false);
4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pField;
4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateField(XFA_Element eElement,
4374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             CXFA_Node* pParent,
4384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             CXFA_Node* pBefore) const {
4394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pField = CreateFormItem(XFA_Element::Field, pParent, pBefore);
4404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CreateCopyNode(eElement, CreateCopyNode(XFA_Element::Ui, pField));
4414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CreateFontNode(pField);
4424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pField;
4434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateArc(CXFA_Node* pParent,
4464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                           CXFA_Node* pBefore) const {
4474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateDraw(XFA_Element::Arc, pParent, pBefore);
4484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateRectangle(CXFA_Node* pParent,
4514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                 CXFA_Node* pBefore) const {
4524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateDraw(XFA_Element::Rectangle, pParent, pBefore);
4534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateImage(CXFA_Node* pParent,
4564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                             CXFA_Node* pBefore) const {
4574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pField = CreateDraw(XFA_Element::Image, pParent, pBefore);
4584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CreateCopyNode(XFA_Element::ImageEdit,
4594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                 CreateCopyNode(XFA_Element::Ui, pField));
4604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pField;
4614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateLine(CXFA_Node* pParent,
4644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            CXFA_Node* pBefore) const {
4654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateDraw(XFA_Element::Line, pParent, pBefore);
4664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateText(CXFA_Node* pParent,
4694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            CXFA_Node* pBefore) const {
4704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pField = CreateDraw(XFA_Element::Text, pParent, pBefore);
4714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CreateCopyNode(XFA_Element::TextEdit,
4724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                 CreateCopyNode(XFA_Element::Ui, pField));
4734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CreateFontNode(pField);
4744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pField;
4754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateDraw(XFA_Element eElement,
4784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            CXFA_Node* pParent,
4794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                            CXFA_Node* pBefore) const {
4804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pDraw = CreateFormItem(XFA_Element::Draw, pParent, pBefore);
4814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CreateValueNode(eElement, pDraw);
4824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pDraw;
4834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateSubform(CXFA_Node* pParent,
4864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                               CXFA_Node* pBefore) const {
4874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return CreateFormItem(XFA_Element::Subform, pParent, pBefore);
4884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateFormItem(XFA_Element eElement,
4914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                CXFA_Node* pParent,
4924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                CXFA_Node* pBefore) const {
493d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!pParent)
494d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return nullptr;
495d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
496d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Node* pTemplateParent = pParent->GetTemplateNodeIfExists();
497d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!pTemplateParent)
498d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return nullptr;
499d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
5004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNewFormItem = pTemplateParent->CloneTemplateToForm(false);
5014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pParent)
5024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pParent->InsertChild(pNewFormItem, pBefore);
5034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pNewFormItem;
5044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateCopyNode(XFA_Element eElement,
5074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                CXFA_Node* pParent,
5084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                CXFA_Node* pBefore) const {
509d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  if (!pParent)
510d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    return nullptr;
511d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann
512d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CXFA_Node* pTemplateParent = pParent->GetTemplateNodeIfExists();
5134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNewNode =
5144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CreateTemplateNode(eElement, pTemplateParent,
515d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                         pBefore ? pBefore->GetTemplateNodeIfExists() : nullptr)
5164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          ->Clone(false);
5174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pParent)
5184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pParent->InsertChild(pNewNode, pBefore);
5194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pNewNode;
5204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateTemplateNode(XFA_Element eElement,
5234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                    CXFA_Node* pParent,
5244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
5254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Document* pXFADoc = GetXFADoc();
5264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNewTemplateNode =
527d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann      pXFADoc->CreateNode(XFA_PacketType::Template, eElement);
5284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pParent)
5294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pParent->InsertChild(pNewTemplateNode, pBefore);
5304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pNewTemplateNode;
5314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateFontNode(CXFA_Node* pParent) const {
5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pFont = CreateCopyNode(XFA_Element::Font, pParent);
535d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  pFont->JSObject()->SetCData(XFA_Attribute::Typeface, L"Myriad Pro", false,
536d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                              false);
5374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pFont;
5384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateMarginNode(CXFA_Node* pParent,
5414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                  uint32_t dwFlags,
542d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                                  float fInsets[4]) const {
5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pMargin = CreateCopyNode(XFA_Element::Margin, pParent);
5444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (dwFlags & 0x01)
545d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    pMargin->JSObject()->SetMeasure(XFA_Attribute::LeftInset,
546d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                    CXFA_Measurement(fInsets[0], XFA_Unit::Pt),
547d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                    false);
5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (dwFlags & 0x02)
549d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    pMargin->JSObject()->SetMeasure(XFA_Attribute::TopInset,
550d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                    CXFA_Measurement(fInsets[1], XFA_Unit::Pt),
551d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                    false);
5524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (dwFlags & 0x04)
553d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    pMargin->JSObject()->SetMeasure(XFA_Attribute::RightInset,
554d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                    CXFA_Measurement(fInsets[2], XFA_Unit::Pt),
555d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                    false);
5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (dwFlags & 0x08)
557d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann    pMargin->JSObject()->SetMeasure(XFA_Attribute::BottomInset,
558d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                    CXFA_Measurement(fInsets[3], XFA_Unit::Pt),
559d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                                    false);
5604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pMargin;
5614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateValueNode(XFA_Element eValue,
5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                 CXFA_Node* pParent) const {
5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pValue = CreateCopyNode(XFA_Element::Value, pParent);
5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CreateCopyNode(eValue, pValue);
5674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return pValue;
5684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Document* CXFA_FFWidgetHandler::GetObjFactory() const {
5714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return GetXFADoc();
5724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Document* CXFA_FFWidgetHandler::GetXFADoc() const {
5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_pDocView->GetDoc()->GetXFADoc();
5764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
577