1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/foxitlib.h"
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_common.h"
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_fwladapter.h"
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffwidgethandler.h"
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffwidget.h"
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_fffield.h"
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffchoicelist.h"
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffdoc.h"
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_ffdocview.h"
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFWidgetHandler::CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView)
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    : m_pDocView(pDocView) {}
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFWidgetHandler::~CXFA_FFWidgetHandler() {}
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_PageView* CXFA_FFWidgetHandler::GetPageView(IXFA_Widget* hWidget) {
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->GetPageView();
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFWidgetHandler::GetRect(IXFA_Widget* hWidget, CFX_RectF& rt) {
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->GetWidgetRect(rt);
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD CXFA_FFWidgetHandler::GetStatus(IXFA_Widget* hWidget) {
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->GetStatus();
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::GetBBox(IXFA_Widget* hWidget,
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      CFX_RectF& rtBox,
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      FX_DWORD dwStatus,
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      FX_BOOL bDrawFocus) {
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ->GetBBox(rtBox, dwStatus, bDrawFocus);
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_WidgetAcc* CXFA_FFWidgetHandler::GetDataAcc(IXFA_Widget* hWidget) {
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc();
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFWidgetHandler::GetName(IXFA_Widget* hWidget,
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   CFX_WideString& wsName,
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   int32_t iNameType) {
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->GetDataAcc()->GetName(wsName,
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                              iNameType);
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::GetToolTip(IXFA_Widget* hWidget,
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         CFX_WideString& wsToolTip) {
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->GetToolTip(wsToolTip);
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFWidgetHandler::SetPrivateData(IXFA_Widget* hWidget,
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          void* module_id,
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          void* pData,
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          PD_CALLBACK_FREEDATA callback) {
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ->SetPrivateData(module_id, pData, callback);
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid* CXFA_FFWidgetHandler::GetPrivateData(IXFA_Widget* hWidget,
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           void* module_id) {
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->GetPrivateData(module_id);
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnMouseEnter(IXFA_Widget* hWidget) {
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->LockUpdate();
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseEnter();
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->UnlockUpdate();
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->UpdateDocView();
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnMouseExit(IXFA_Widget* hWidget) {
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->LockUpdate();
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnMouseExit();
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->UnlockUpdate();
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->UpdateDocView();
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnLButtonDown(IXFA_Widget* hWidget,
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            FX_DWORD dwFlags,
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            FX_FLOAT fx,
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            FX_FLOAT fy) {
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->LockUpdate();
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet =
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDown(dwFlags, fx, fy);
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bRet && m_pDocView->SetFocus(hWidget)) {
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ((CXFA_FFDoc*)m_pDocView->GetDoc())
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        ->GetDocProvider()
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget);
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->UnlockUpdate();
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->UpdateDocView();
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnLButtonUp(IXFA_Widget* hWidget,
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_DWORD dwFlags,
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_FLOAT fx,
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_FLOAT fy) {
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->LockUpdate();
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->m_bLayoutEvent = TRUE;
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet =
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonUp(dwFlags, fx, fy);
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->UnlockUpdate();
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->UpdateDocView();
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnLButtonDblClk(IXFA_Widget* hWidget,
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                              FX_DWORD dwFlags,
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                              FX_FLOAT fx,
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                              FX_FLOAT fy) {
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet =
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<CXFA_FFWidget*>(hWidget)->OnLButtonDblClk(dwFlags, fx, fy);
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->RunInvalidate();
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnMouseMove(IXFA_Widget* hWidget,
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_DWORD dwFlags,
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_FLOAT fx,
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_FLOAT fy) {
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet =
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<CXFA_FFWidget*>(hWidget)->OnMouseMove(dwFlags, fx, fy);
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->RunInvalidate();
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnMouseWheel(IXFA_Widget* hWidget,
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           FX_DWORD dwFlags,
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           int16_t zDelta,
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           FX_FLOAT fx,
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           FX_FLOAT fy) {
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     ->OnMouseWheel(dwFlags, zDelta, fx, fy);
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->RunInvalidate();
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnRButtonDown(IXFA_Widget* hWidget,
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            FX_DWORD dwFlags,
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            FX_FLOAT fx,
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            FX_FLOAT fy) {
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet =
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDown(dwFlags, fx, fy);
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bRet && m_pDocView->SetFocus(hWidget)) {
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ((CXFA_FFDoc*)m_pDocView->GetDoc())
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        ->GetDocProvider()
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        ->SetFocusWidget(m_pDocView->GetDoc(), (IXFA_Widget*)hWidget);
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->RunInvalidate();
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnRButtonUp(IXFA_Widget* hWidget,
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_DWORD dwFlags,
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_FLOAT fx,
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_FLOAT fy) {
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet =
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonUp(dwFlags, fx, fy);
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->RunInvalidate();
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnRButtonDblClk(IXFA_Widget* hWidget,
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                              FX_DWORD dwFlags,
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                              FX_FLOAT fx,
162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                              FX_FLOAT fy) {
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet =
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<CXFA_FFWidget*>(hWidget)->OnRButtonDblClk(dwFlags, fx, fy);
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->RunInvalidate();
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnKeyDown(IXFA_Widget* hWidget,
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_DWORD dwKeyCode,
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_DWORD dwFlags) {
172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet =
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<CXFA_FFWidget*>(hWidget)->OnKeyDown(dwKeyCode, dwFlags);
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->RunInvalidate();
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->UpdateDocView();
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnKeyUp(IXFA_Widget* hWidget,
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      FX_DWORD dwKeyCode,
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      FX_DWORD dwFlags) {
181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet =
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<CXFA_FFWidget*>(hWidget)->OnKeyUp(dwKeyCode, dwFlags);
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->RunInvalidate();
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnChar(IXFA_Widget* hWidget,
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     FX_DWORD dwChar,
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     FX_DWORD dwFlags) {
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRet = static_cast<CXFA_FFWidget*>(hWidget)->OnChar(dwChar, dwFlags);
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->RunInvalidate();
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRet;
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD CXFA_FFWidgetHandler::OnHitTest(IXFA_Widget* hWidget,
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         FX_FLOAT fx,
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         FX_FLOAT fy) {
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!(static_cast<CXFA_FFWidget*>(hWidget)->GetStatus() &
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        XFA_WIDGETSTATUS_Visible)) {
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FWL_WGTHITTEST_Unknown;
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->OnHitTest(fx, fy);
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::OnSetCursor(IXFA_Widget* hWidget,
204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_FLOAT fx,
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                          FX_FLOAT fy) {
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->Rotate2Normal(fx, fy);
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->OnSetCursor(fx, fy);
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_FFWidgetHandler::RenderWidget(IXFA_Widget* hWidget,
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        CFX_Graphics* pGS,
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        CFX_Matrix* pMatrix,
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        FX_BOOL bHighlight) {
213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static_cast<CXFA_FFWidget*>(hWidget)->RenderWidget(
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pGS, pMatrix, bHighlight ? XFA_WIDGETSTATUS_Highlight : 0, 0);
215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFWidgetHandler::HasEvent(CXFA_WidgetAcc* pWidgetAcc,
217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       XFA_EVENTTYPE eEventType) {
218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pWidgetAcc || eEventType == XFA_EVENT_Unknown) {
219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) {
222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (eEventType) {
225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_EVENT_Calculate: {
226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_Calculate calc = pWidgetAcc->GetCalculate();
227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!calc) {
228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return FALSE;
229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (calc.GetScript()) {
231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return TRUE;
232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_EVENT_Validate: {
236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_Validate val = pWidgetAcc->GetValidate();
237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!val) {
238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return FALSE;
239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (val.GetScript()) {
241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return TRUE;
242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_NodeArray eventArray;
249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pWidgetAcc->GetEventByActivity(gs_EventActivity[eEventType],
250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        eventArray);
251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_FFWidgetHandler::ProcessEvent(CXFA_WidgetAcc* pWidgetAcc,
253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           CXFA_EventParam* pParam) {
254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pParam || pParam->m_eType == XFA_EVENT_Unknown) {
255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return XFA_EVENTERROR_NotExist;
256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pWidgetAcc || pWidgetAcc->GetClassID() == XFA_ELEMENT_Draw) {
258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return XFA_EVENTERROR_NotExist;
259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (pParam->m_eType) {
261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_EVENT_Calculate:
262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return pWidgetAcc->ProcessCalculate();
263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_EVENT_Validate:
264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (((CXFA_FFDoc*)m_pDocView->GetDoc())
265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              ->GetDocProvider()
266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              ->IsValidationsEnabled(m_pDocView->GetDoc())) {
267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return pWidgetAcc->ProcessValidate();
268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return XFA_EVENTERROR_Disabled;
270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_EVENT_InitCalculate: {
271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_Calculate calc = pWidgetAcc->GetCalculate();
272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!calc) {
273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return XFA_EVENTERROR_NotExist;
274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pWidgetAcc->GetNode()->HasFlag(XFA_NODEFLAG_UserInteractive)) {
276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return XFA_EVENTERROR_Disabled;
277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_Script script = calc.GetScript();
279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return pWidgetAcc->ExecuteScript(script, pParam);
280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iRet =
285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pWidgetAcc->ProcessEvent(gs_EventActivity[pParam->m_eType], pParam);
286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return iRet;
287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_Widget* CXFA_FFWidgetHandler::CreateWidget(IXFA_Widget* hParent,
289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                XFA_WIDGETTYPE eType,
290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                IXFA_Widget* hBefore) {
291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pParentFormItem =
292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      hParent ? static_cast<CXFA_FFWidget*>(hParent)->GetDataAcc()->GetNode()
293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              : NULL;
294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pBeforeFormItem =
295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      hBefore ? static_cast<CXFA_FFWidget*>(hBefore)->GetDataAcc()->GetNode()
296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              : NULL;
297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pNewFormItem =
298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CreateWidgetFormItem(eType, pParentFormItem, pBeforeFormItem);
299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pNewFormItem == NULL) {
300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return NULL;
301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pNewFormItem->GetTemplateNode()->SetFlag(XFA_NODEFLAG_Initialized);
303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pNewFormItem->SetFlag(XFA_NODEFLAG_Initialized);
304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pDocView->RunLayout();
305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_LayoutItem* pLayout =
306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pDocView->GetXFALayout()->GetLayoutItem(pNewFormItem);
307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return (IXFA_Widget*)pLayout;
308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateWidgetFormItem(
310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_WIDGETTYPE eType,
311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pParent,
312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pBefore) const {
313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (eType) {
314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_Barcode:
315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return NULL;
316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_PushButton:
317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreatePushButton(pParent, pBefore);
318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_CheckButton:
319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateCheckButton(pParent, pBefore);
320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_ExcludeGroup:
321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateExclGroup(pParent, pBefore);
322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_RadioButton:
323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateRadioButton(pParent, pBefore);
324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_Arc:
325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateArc(pParent, pBefore);
326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_Rectangle:
327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateRectangle(pParent, pBefore);
328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_Image:
329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateImage(pParent, pBefore);
330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_Line:
331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateLine(pParent, pBefore);
332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_Text:
333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateText(pParent, pBefore);
334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_DatetimeEdit:
335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateDatetimeEdit(pParent, pBefore);
336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_DecimalField:
337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateDecimalField(pParent, pBefore);
338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_NumericField:
339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateNumericField(pParent, pBefore);
340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_Signature:
341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateSignature(pParent, pBefore);
342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_TextEdit:
343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateTextEdit(pParent, pBefore);
344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_DropdownList:
345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateDropdownList(pParent, pBefore);
346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_ListBox:
347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateListBox(pParent, pBefore);
348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_ImageField:
349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateImageField(pParent, pBefore);
350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_PasswordEdit:
351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreatePasswordEdit(pParent, pBefore);
352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_WIDGETTYPE_Subform:
353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return CreateSubform(pParent, pBefore);
354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreatePushButton(CXFA_Node* pParent,
360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                  CXFA_Node* pBefore) const {
361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_ELEMENT_Button, pParent, pBefore);
362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pCaption = CreateCopyNode(XFA_ELEMENT_Caption, pField);
363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pCaption);
364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pText = CreateCopyNode(XFA_ELEMENT_Text, pValue);
365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pText->SetContent(FX_WSTRC(L"Button"), FX_WSTRC(L"Button"), FALSE);
366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pPara = CreateCopyNode(XFA_ELEMENT_Para, pCaption);
367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pPara->SetEnum(XFA_ATTRIBUTE_VAlign, XFA_ATTRIBUTEENUM_Middle, FALSE);
368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pPara->SetEnum(XFA_ATTRIBUTE_HAlign, XFA_ATTRIBUTEENUM_Center, FALSE);
369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CreateFontNode(pCaption);
370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pBorder = CreateCopyNode(XFA_ELEMENT_Border, pField);
371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pBorder->SetEnum(XFA_ATTRIBUTE_Hand, XFA_ATTRIBUTEENUM_Right, FALSE);
372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pEdge = CreateCopyNode(XFA_ELEMENT_Edge, pBorder);
373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pEdge->SetEnum(XFA_ATTRIBUTE_Stroke, XFA_ATTRIBUTEENUM_Raised, FALSE);
374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pFill = CreateCopyNode(XFA_ELEMENT_Fill, pBorder);
375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pColor = CreateCopyNode(XFA_ELEMENT_Color, pFill);
376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pColor->SetCData(XFA_ATTRIBUTE_Value, FX_WSTRC(L"212, 208, 200"), FALSE);
377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField);
378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None);
379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateCheckButton(CXFA_Node* pParent,
382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                   CXFA_Node* pBefore) const {
383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore);
384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateExclGroup(CXFA_Node* pParent,
387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 CXFA_Node* pBefore) const {
388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return CreateFormItem(XFA_ELEMENT_ExclGroup, pParent, pBefore);
389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateRadioButton(CXFA_Node* pParent,
391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                   CXFA_Node* pBefore) const {
392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_ELEMENT_CheckButton, pParent, pBefore);
393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pUi = pField->GetFirstChildByClass(XFA_ELEMENT_Ui);
394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pWidget = pUi->GetFirstChildByClass(XFA_ELEMENT_CheckButton);
395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pWidget->SetEnum(XFA_ATTRIBUTE_Shape, XFA_ATTRIBUTEENUM_Round);
396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateDatetimeEdit(CXFA_Node* pParent,
399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_ELEMENT_DateTimeEdit, pParent, pBefore);
401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CreateValueNode(XFA_ELEMENT_Date, pField);
402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateDecimalField(CXFA_Node* pParent,
405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateNumericField(pParent, pBefore);
407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CreateValueNode(XFA_ELEMENT_Decimal, pField);
408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateNumericField(CXFA_Node* pParent,
411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_ELEMENT_NumericEdit, pParent, pBefore);
413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateSignature(CXFA_Node* pParent,
416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 CXFA_Node* pBefore) const {
417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_ELEMENT_Signature, pParent, pBefore);
418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateTextEdit(CXFA_Node* pParent,
421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                CXFA_Node* pBefore) const {
422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_ELEMENT_TextEdit, pParent, pBefore);
423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateDropdownList(CXFA_Node* pParent,
426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_ELEMENT_ChoiceList, pParent, pBefore);
428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateListBox(CXFA_Node* pParent,
431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               CXFA_Node* pBefore) const {
432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateDropdownList(pParent, pBefore);
433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pUi = pField->GetNodeItem(XFA_NODEITEM_FirstChild);
434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pListBox = pUi->GetNodeItem(XFA_NODEITEM_FirstChild);
435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pListBox->SetEnum(XFA_ATTRIBUTE_Open, XFA_ATTRIBUTEENUM_Always);
436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pListBox->SetEnum(XFA_ATTRIBUTE_CommitOn, XFA_ATTRIBUTEENUM_Exit);
437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateImageField(CXFA_Node* pParent,
440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                  CXFA_Node* pBefore) const {
441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_ELEMENT_ImageEdit, pParent, pBefore);
442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreatePasswordEdit(CXFA_Node* pParent,
445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateField(XFA_ELEMENT_PasswordEdit, pParent, pBefore);
447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pBind = CreateCopyNode(XFA_ELEMENT_Bind, pField);
448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pBind->SetEnum(XFA_ATTRIBUTE_Match, XFA_ATTRIBUTEENUM_None, FALSE);
449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateField(XFA_ELEMENT eElement,
452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             CXFA_Node* pParent,
453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             CXFA_Node* pBefore) const {
454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateFormItem(XFA_ELEMENT_Field, pParent, pBefore);
455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CreateCopyNode(eElement, CreateCopyNode(XFA_ELEMENT_Ui, pField));
456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CreateFontNode(pField);
457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateArc(CXFA_Node* pParent,
460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           CXFA_Node* pBefore) const {
461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return CreateDraw(XFA_ELEMENT_Arc, pParent, pBefore);
462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateRectangle(CXFA_Node* pParent,
464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 CXFA_Node* pBefore) const {
465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return CreateDraw(XFA_ELEMENT_Rectangle, pParent, pBefore);
466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateImage(CXFA_Node* pParent,
468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             CXFA_Node* pBefore) const {
469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Image, pParent, pBefore);
470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CreateCopyNode(XFA_ELEMENT_ImageEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField));
471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateLine(CXFA_Node* pParent,
474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            CXFA_Node* pBefore) const {
475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Line, pParent, pBefore);
476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateText(CXFA_Node* pParent,
479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            CXFA_Node* pBefore) const {
480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pField = CreateDraw(XFA_ELEMENT_Text, pParent, pBefore);
481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CreateCopyNode(XFA_ELEMENT_TextEdit, CreateCopyNode(XFA_ELEMENT_Ui, pField));
482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CreateFontNode(pField);
483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pField;
484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateDraw(XFA_ELEMENT eElement,
486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            CXFA_Node* pParent,
487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            CXFA_Node* pBefore) const {
488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pDraw = CreateFormItem(XFA_ELEMENT_Draw, pParent, pBefore);
489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CreateValueNode(eElement, pDraw);
490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pDraw;
491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateSubform(CXFA_Node* pParent,
493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               CXFA_Node* pBefore) const {
494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pSubform = CreateFormItem(XFA_ELEMENT_Subform, pParent, pBefore);
495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pSubform;
496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateFormItem(XFA_ELEMENT eElement,
498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                CXFA_Node* pParent,
499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                CXFA_Node* pBefore) const {
500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pTemplateParent =
501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pParent != NULL ? pParent->GetTemplateNode() : NULL;
502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pNewFormItem = pTemplateParent->CloneTemplateToForm(FALSE);
503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pParent != NULL) {
504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pParent->InsertChild(pNewFormItem, pBefore);
505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pNewFormItem;
507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateCopyNode(XFA_ELEMENT eElement,
509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                CXFA_Node* pParent,
510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                CXFA_Node* pBefore) const {
511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pTemplateParent =
512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pParent != NULL ? pParent->GetTemplateNode() : NULL;
513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pNewNode =
514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CreateTemplateNode(eElement, pTemplateParent,
515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         pBefore ? pBefore->GetTemplateNode() : NULL)
516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          ->Clone(FALSE);
517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pParent != NULL) {
518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pParent->InsertChild(pNewNode, pBefore);
519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pNewNode;
521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateTemplateNode(XFA_ELEMENT eElement,
523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    CXFA_Node* pParent,
524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    CXFA_Node* pBefore) const {
525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Document* pXFADoc = GetXFADoc();
526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pNewTemplateNode = pXFADoc->GetParser()->GetFactory()->CreateNode(
527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_XDPPACKET_Template, eElement);
528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pParent != NULL) {
529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pParent->InsertChild(pNewTemplateNode, pBefore);
530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pNewTemplateNode;
532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateFontNode(CXFA_Node* pParent) const {
534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pFont = CreateCopyNode(XFA_ELEMENT_Font, pParent);
535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pFont->SetCData(XFA_ATTRIBUTE_Typeface, FX_WSTRC(L"Myriad Pro"), FALSE);
536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pFont;
537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateMarginNode(CXFA_Node* pParent,
539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                  FX_DWORD dwFlags,
540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                  FX_FLOAT fInsets[4]) const {
541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pMargin = CreateCopyNode(XFA_ELEMENT_Margin, pParent);
542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (dwFlags & 0x01) {
543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pMargin->SetMeasure(XFA_ATTRIBUTE_LeftInset,
544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        CXFA_Measurement(fInsets[0], XFA_UNIT_Pt), FALSE);
545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (dwFlags & 0x02) {
547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pMargin->SetMeasure(XFA_ATTRIBUTE_TopInset,
548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        CXFA_Measurement(fInsets[1], XFA_UNIT_Pt), FALSE);
549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (dwFlags & 0x04) {
551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pMargin->SetMeasure(XFA_ATTRIBUTE_RightInset,
552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        CXFA_Measurement(fInsets[2], XFA_UNIT_Pt), FALSE);
553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (dwFlags & 0x08) {
555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pMargin->SetMeasure(XFA_ATTRIBUTE_BottomInset,
556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        CXFA_Measurement(fInsets[3], XFA_UNIT_Pt), FALSE);
557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pMargin;
559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_FFWidgetHandler::CreateValueNode(XFA_ELEMENT eValue,
561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 CXFA_Node* pParent) const {
562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pValue = CreateCopyNode(XFA_ELEMENT_Value, pParent);
563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CreateCopyNode(eValue, pValue);
564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pValue;
565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_ObjFactory* CXFA_FFWidgetHandler::GetObjFactory() const {
567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return GetXFADoc()->GetParser()->GetFactory();
568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Document* CXFA_FFWidgetHandler::GetXFADoc() const {
570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return ((CXFA_FFDoc*)(m_pDocView->GetDoc()))->GetXFADoc();
571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFMenuHandler::CXFA_FFMenuHandler() {}
573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_FFMenuHandler::~CXFA_FFMenuHandler() {}
574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::CanCopy(IXFA_Widget* hWidget) {
575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->CanCopy();
576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::CanCut(IXFA_Widget* hWidget) {
578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->CanCut();
579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::CanPaste(IXFA_Widget* hWidget) {
581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->CanPaste();
582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::CanSelectAll(IXFA_Widget* hWidget) {
584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->CanSelectAll();
585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::CanDelete(IXFA_Widget* hWidget) {
587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->CanDelete();
588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::CanDeSelect(IXFA_Widget* hWidget) {
590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->CanDeSelect();
591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::Copy(IXFA_Widget* hWidget, CFX_WideString& wsText) {
593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->Copy(wsText);
594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::Cut(IXFA_Widget* hWidget, CFX_WideString& wsText) {
596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->Cut(wsText);
597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::Paste(IXFA_Widget* hWidget,
599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                  const CFX_WideString& wsText) {
600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->Paste(wsText);
601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::SelectAll(IXFA_Widget* hWidget) {
603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->SelectAll();
604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::Delete(IXFA_Widget* hWidget) {
606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->Delete();
607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::DeSelect(IXFA_Widget* hWidget) {
609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->DeSelect();
610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::CanUndo(IXFA_Widget* hWidget) {
612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->CanUndo();
613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::CanRedo(IXFA_Widget* hWidget) {
615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->CanRedo();
616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::Undo(IXFA_Widget* hWidget) {
618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->Undo();
619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::Redo(IXFA_Widget* hWidget) {
621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)->Redo();
622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FX_EDIT_ISLATINWORD(u)                                     \
624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  (u == 0x2D || (u <= 0x005A && u >= 0x0041) ||                    \
625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann   (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0) || \
626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann   u == 0x0027)
627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::GetSuggestWords(IXFA_Widget* hWidget,
628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            CFX_PointF pointf,
629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            CFX_ByteStringArray& sSuggest) {
630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)
631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ->GetSuggestWords(pointf, sSuggest);
632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_FFMenuHandler::ReplaceSpellCheckWord(
634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    IXFA_Widget* hWidget,
635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_PointF pointf,
636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CFX_ByteStringC& bsReplace) {
637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<CXFA_FFWidget*>(hWidget)
638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ->ReplaceSpellCheckWord(pointf, bsReplace);
639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
640