blob: aa4c0f170aef8d5be5d51b5717345ff8b95a08d4 [file] [log] [blame]
jaepark98e10192016-08-15 10:51:11 -07001// Copyright 2016 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
dsinclair114e46a2016-09-29 17:18:21 -07007#include "fpdfsdk/cpdfsdk_xfawidgethandler.h"
jaepark98e10192016-08-15 10:51:11 -07008
dsinclair1727aee2016-09-29 13:12:56 -07009#include "core/fpdfdoc/cpdf_interform.h"
dsinclair114e46a2016-09-29 17:18:21 -070010#include "fpdfsdk/cpdfsdk_annot.h"
dsinclair735606d2016-10-05 15:47:02 -070011#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
dsinclair114e46a2016-09-29 17:18:21 -070012#include "fpdfsdk/cpdfsdk_interform.h"
13#include "fpdfsdk/cpdfsdk_pageview.h"
14#include "fpdfsdk/cpdfsdk_xfawidget.h"
dsinclair521b7502016-11-02 13:02:28 -070015#include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
dsinclair447b1f32016-12-08 10:06:32 -080016#include "xfa/fwl/cfwl_app.h"
17#include "xfa/fwl/fwl_widgethit.h"
Dan Sinclair80c48782017-03-23 12:11:20 -040018#include "xfa/fxfa/cxfa_ffdocview.h"
19#include "xfa/fxfa/cxfa_ffpageview.h"
20#include "xfa/fxfa/cxfa_ffwidget.h"
21#include "xfa/fxfa/cxfa_ffwidgethandler.h"
dsinclair5b493092016-09-29 20:20:24 -070022#include "xfa/fxfa/fxfa_basic.h"
Dan Sinclair2b918c82017-07-13 14:47:10 -040023#include "xfa/fxgraphics/cxfa_graphics.h"
jaepark98e10192016-08-15 10:51:11 -070024
dsinclair735606d2016-10-05 15:47:02 -070025CPDFSDK_XFAWidgetHandler::CPDFSDK_XFAWidgetHandler(
dsinclair8779fa82016-10-12 12:05:44 -070026 CPDFSDK_FormFillEnvironment* pFormFillEnv)
27 : m_pFormFillEnv(pFormFillEnv) {}
jaepark98e10192016-08-15 10:51:11 -070028
jaepark8c541822016-08-30 13:43:05 -070029CPDFSDK_XFAWidgetHandler::~CPDFSDK_XFAWidgetHandler() {}
jaepark98e10192016-08-15 10:51:11 -070030
tsepez4cf55152016-11-02 14:37:54 -070031bool CPDFSDK_XFAWidgetHandler::CanAnswer(CPDFSDK_Annot* pAnnot) {
jaepark98e10192016-08-15 10:51:11 -070032 return !!pAnnot->GetXFAWidget();
33}
34
jaepark8c541822016-08-30 13:43:05 -070035CPDFSDK_Annot* CPDFSDK_XFAWidgetHandler::NewAnnot(CPDF_Annot* pAnnot,
36 CPDFSDK_PageView* pPage) {
jaepark98e10192016-08-15 10:51:11 -070037 return nullptr;
38}
39
jaepark8c541822016-08-30 13:43:05 -070040CPDFSDK_Annot* CPDFSDK_XFAWidgetHandler::NewAnnot(CXFA_FFWidget* pAnnot,
41 CPDFSDK_PageView* pPage) {
dsinclair8779fa82016-10-12 12:05:44 -070042 CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
jaepark98e10192016-08-15 10:51:11 -070043 CPDFSDK_XFAWidget* pWidget = new CPDFSDK_XFAWidget(pAnnot, pPage, pInterForm);
44 pInterForm->AddXFAMap(pAnnot, pWidget);
45 return pWidget;
46}
47
jaepark8c541822016-08-30 13:43:05 -070048void CPDFSDK_XFAWidgetHandler::OnDraw(CPDFSDK_PageView* pPageView,
49 CPDFSDK_Annot* pAnnot,
50 CFX_RenderDevice* pDevice,
jaepark75f84a52016-09-09 15:39:09 -070051 CFX_Matrix* pUser2Device,
52 bool bDrawAnnots) {
jaepark98e10192016-08-15 10:51:11 -070053 ASSERT(pPageView);
54 ASSERT(pAnnot);
55
Dan Sinclair2b918c82017-07-13 14:47:10 -040056 CXFA_Graphics gs(pDevice);
jaepark98e10192016-08-15 10:51:11 -070057
Dan Sinclairbba2a7c2017-02-07 16:36:39 -050058 CFX_Matrix mt = *pUser2Device;
tsepez4cf55152016-11-02 14:37:54 -070059 bool bIsHighlight = false;
dsinclair7cbe68e2016-10-12 11:56:23 -070060 if (pPageView->GetFormFillEnv()->GetFocusAnnot() != pAnnot)
tsepez4cf55152016-11-02 14:37:54 -070061 bIsHighlight = true;
jaepark98e10192016-08-15 10:51:11 -070062
dsinclairb402b172016-10-11 09:26:32 -070063 GetXFAWidgetHandler(pAnnot)->RenderWidget(pAnnot->GetXFAWidget(), &gs, &mt,
64 bIsHighlight);
jaepark98e10192016-08-15 10:51:11 -070065
66 // to do highlight and shadow
67}
68
jaepark8c541822016-08-30 13:43:05 -070069void CPDFSDK_XFAWidgetHandler::OnLoad(CPDFSDK_Annot* pAnnot) {}
jaepark98e10192016-08-15 10:51:11 -070070
jaepark8c541822016-08-30 13:43:05 -070071void CPDFSDK_XFAWidgetHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
jaepark98e10192016-08-15 10:51:11 -070072 CPDFSDK_XFAWidget* pWidget = reinterpret_cast<CPDFSDK_XFAWidget*>(pAnnot);
73 CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm();
74 pInterForm->RemoveXFAMap(pWidget->GetXFAWidget());
75
76 delete pWidget;
77}
78
jaepark8c541822016-08-30 13:43:05 -070079CFX_FloatRect CPDFSDK_XFAWidgetHandler::GetViewBBox(CPDFSDK_PageView* pPageView,
80 CPDFSDK_Annot* pAnnot) {
jaepark98e10192016-08-15 10:51:11 -070081 ASSERT(pAnnot);
82
83 CFX_RectF rcBBox;
84 XFA_Element eType = pAnnot->GetXFAWidget()->GetDataAcc()->GetUIType();
85 if (eType == XFA_Element::Signature)
Dan Sinclair1b08df12017-02-09 09:17:20 -050086 rcBBox = pAnnot->GetXFAWidget()->GetBBox(XFA_WidgetStatus_Visible, true);
jaepark98e10192016-08-15 10:51:11 -070087 else
Dan Sinclair1b08df12017-02-09 09:17:20 -050088 rcBBox = pAnnot->GetXFAWidget()->GetBBox(XFA_WidgetStatus_None);
jaepark98e10192016-08-15 10:51:11 -070089
90 CFX_FloatRect rcWidget(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width,
91 rcBBox.top + rcBBox.height);
92 rcWidget.left -= 1.0f;
93 rcWidget.right += 1.0f;
94 rcWidget.bottom -= 1.0f;
95 rcWidget.top += 1.0f;
96
97 return rcWidget;
98}
99
Diana Gagedce2d722017-06-20 11:17:11 -0700100CFX_WideString CPDFSDK_XFAWidgetHandler::GetSelectedText(
101 CPDFSDK_Annot* pAnnot) {
102 return CFX_WideString();
103}
104
tsepez4cf55152016-11-02 14:37:54 -0700105bool CPDFSDK_XFAWidgetHandler::HitTest(CPDFSDK_PageView* pPageView,
106 CPDFSDK_Annot* pAnnot,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500107 const CFX_PointF& point) {
jaepark98e10192016-08-15 10:51:11 -0700108 if (!pPageView || !pAnnot)
tsepez4cf55152016-11-02 14:37:54 -0700109 return false;
jaepark98e10192016-08-15 10:51:11 -0700110
dsinclairb402b172016-10-11 09:26:32 -0700111 CPDFSDK_FormFillEnvironment* pFormFillEnv = pPageView->GetFormFillEnv();
dsinclair7cbe68e2016-10-12 11:56:23 -0700112 if (!pFormFillEnv)
tsepez4cf55152016-11-02 14:37:54 -0700113 return false;
jaepark98e10192016-08-15 10:51:11 -0700114
dsinclair521b7502016-11-02 13:02:28 -0700115 CPDFXFA_Context* pContext = pFormFillEnv->GetXFAContext();
116 if (!pContext)
tsepez4cf55152016-11-02 14:37:54 -0700117 return false;
jaepark98e10192016-08-15 10:51:11 -0700118
dsinclair521b7502016-11-02 13:02:28 -0700119 CXFA_FFDocView* pDocView = pContext->GetXFADocView();
jaepark98e10192016-08-15 10:51:11 -0700120 if (!pDocView)
tsepez4cf55152016-11-02 14:37:54 -0700121 return false;
jaepark98e10192016-08-15 10:51:11 -0700122
123 CXFA_FFWidgetHandler* pWidgetHandler = pDocView->GetWidgetHandler();
124 if (!pWidgetHandler)
tsepez4cf55152016-11-02 14:37:54 -0700125 return false;
jaepark98e10192016-08-15 10:51:11 -0700126
127 FWL_WidgetHit dwHitTest =
Dan Sinclairb45ea1f2017-02-21 14:27:59 -0500128 pWidgetHandler->OnHitTest(pAnnot->GetXFAWidget(), point);
jaepark98e10192016-08-15 10:51:11 -0700129 return dwHitTest != FWL_WidgetHit::Unknown;
130}
131
jaepark8c541822016-08-30 13:43:05 -0700132void CPDFSDK_XFAWidgetHandler::OnMouseEnter(CPDFSDK_PageView* pPageView,
tsepezf8074ce2016-09-27 14:29:57 -0700133 CPDFSDK_Annot::ObservedPtr* pAnnot,
jaepark8c541822016-08-30 13:43:05 -0700134 uint32_t nFlag) {
tsepezf8074ce2016-09-27 14:29:57 -0700135 if (!pPageView || !(*pAnnot))
jaepark98e10192016-08-15 10:51:11 -0700136 return;
tsepezf8074ce2016-09-27 14:29:57 -0700137 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get());
138 pWidgetHandler->OnMouseEnter((*pAnnot)->GetXFAWidget());
jaepark98e10192016-08-15 10:51:11 -0700139}
140
jaepark8c541822016-08-30 13:43:05 -0700141void CPDFSDK_XFAWidgetHandler::OnMouseExit(CPDFSDK_PageView* pPageView,
tsepezf8074ce2016-09-27 14:29:57 -0700142 CPDFSDK_Annot::ObservedPtr* pAnnot,
jaepark8c541822016-08-30 13:43:05 -0700143 uint32_t nFlag) {
tsepezf8074ce2016-09-27 14:29:57 -0700144 if (!pPageView || !(*pAnnot))
jaepark98e10192016-08-15 10:51:11 -0700145 return;
146
tsepezf8074ce2016-09-27 14:29:57 -0700147 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get());
148 pWidgetHandler->OnMouseExit((*pAnnot)->GetXFAWidget());
jaepark98e10192016-08-15 10:51:11 -0700149}
150
tsepez4cf55152016-11-02 14:37:54 -0700151bool CPDFSDK_XFAWidgetHandler::OnLButtonDown(CPDFSDK_PageView* pPageView,
152 CPDFSDK_Annot::ObservedPtr* pAnnot,
153 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500154 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700155 if (!pPageView || !(*pAnnot))
tsepez4cf55152016-11-02 14:37:54 -0700156 return false;
jaepark98e10192016-08-15 10:51:11 -0700157
tsepezf8074ce2016-09-27 14:29:57 -0700158 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get());
159 return pWidgetHandler->OnLButtonDown((*pAnnot)->GetXFAWidget(),
Dan Sinclairb45ea1f2017-02-21 14:27:59 -0500160 GetFWLFlags(nFlags), point);
jaepark98e10192016-08-15 10:51:11 -0700161}
162
tsepez4cf55152016-11-02 14:37:54 -0700163bool CPDFSDK_XFAWidgetHandler::OnLButtonUp(CPDFSDK_PageView* pPageView,
164 CPDFSDK_Annot::ObservedPtr* pAnnot,
165 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500166 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700167 if (!pPageView || !(*pAnnot))
tsepez4cf55152016-11-02 14:37:54 -0700168 return false;
jaepark98e10192016-08-15 10:51:11 -0700169
tsepezf8074ce2016-09-27 14:29:57 -0700170 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get());
171 return pWidgetHandler->OnLButtonUp((*pAnnot)->GetXFAWidget(),
Dan Sinclairb45ea1f2017-02-21 14:27:59 -0500172 GetFWLFlags(nFlags), point);
jaepark98e10192016-08-15 10:51:11 -0700173}
174
tsepez4cf55152016-11-02 14:37:54 -0700175bool CPDFSDK_XFAWidgetHandler::OnLButtonDblClk(
tsepezf8074ce2016-09-27 14:29:57 -0700176 CPDFSDK_PageView* pPageView,
177 CPDFSDK_Annot::ObservedPtr* pAnnot,
178 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500179 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700180 if (!pPageView || !(*pAnnot))
tsepez4cf55152016-11-02 14:37:54 -0700181 return false;
jaepark98e10192016-08-15 10:51:11 -0700182
tsepezf8074ce2016-09-27 14:29:57 -0700183 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get());
184 return pWidgetHandler->OnLButtonDblClk((*pAnnot)->GetXFAWidget(),
Dan Sinclairb45ea1f2017-02-21 14:27:59 -0500185 GetFWLFlags(nFlags), point);
jaepark98e10192016-08-15 10:51:11 -0700186}
187
tsepez4cf55152016-11-02 14:37:54 -0700188bool CPDFSDK_XFAWidgetHandler::OnMouseMove(CPDFSDK_PageView* pPageView,
189 CPDFSDK_Annot::ObservedPtr* pAnnot,
190 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500191 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700192 if (!pPageView || !(*pAnnot))
tsepez4cf55152016-11-02 14:37:54 -0700193 return false;
jaepark98e10192016-08-15 10:51:11 -0700194
tsepezf8074ce2016-09-27 14:29:57 -0700195 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get());
196 return pWidgetHandler->OnMouseMove((*pAnnot)->GetXFAWidget(),
Dan Sinclairb45ea1f2017-02-21 14:27:59 -0500197 GetFWLFlags(nFlags), point);
jaepark98e10192016-08-15 10:51:11 -0700198}
199
tsepez4cf55152016-11-02 14:37:54 -0700200bool CPDFSDK_XFAWidgetHandler::OnMouseWheel(CPDFSDK_PageView* pPageView,
201 CPDFSDK_Annot::ObservedPtr* pAnnot,
202 uint32_t nFlags,
203 short zDelta,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500204 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700205 if (!pPageView || !(*pAnnot))
tsepez4cf55152016-11-02 14:37:54 -0700206 return false;
jaepark98e10192016-08-15 10:51:11 -0700207
tsepezf8074ce2016-09-27 14:29:57 -0700208 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get());
Dan Sinclairb45ea1f2017-02-21 14:27:59 -0500209 return pWidgetHandler->OnMouseWheel((*pAnnot)->GetXFAWidget(),
210 GetFWLFlags(nFlags), zDelta, point);
jaepark98e10192016-08-15 10:51:11 -0700211}
212
tsepez4cf55152016-11-02 14:37:54 -0700213bool CPDFSDK_XFAWidgetHandler::OnRButtonDown(CPDFSDK_PageView* pPageView,
214 CPDFSDK_Annot::ObservedPtr* pAnnot,
215 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500216 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700217 if (!pPageView || !(*pAnnot))
tsepez4cf55152016-11-02 14:37:54 -0700218 return false;
jaepark98e10192016-08-15 10:51:11 -0700219
tsepezf8074ce2016-09-27 14:29:57 -0700220 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get());
221 return pWidgetHandler->OnRButtonDown((*pAnnot)->GetXFAWidget(),
Dan Sinclairb45ea1f2017-02-21 14:27:59 -0500222 GetFWLFlags(nFlags), point);
jaepark98e10192016-08-15 10:51:11 -0700223}
224
tsepez4cf55152016-11-02 14:37:54 -0700225bool CPDFSDK_XFAWidgetHandler::OnRButtonUp(CPDFSDK_PageView* pPageView,
226 CPDFSDK_Annot::ObservedPtr* pAnnot,
227 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500228 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700229 if (!pPageView || !(*pAnnot))
tsepez4cf55152016-11-02 14:37:54 -0700230 return false;
jaepark98e10192016-08-15 10:51:11 -0700231
tsepezf8074ce2016-09-27 14:29:57 -0700232 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get());
233 return pWidgetHandler->OnRButtonUp((*pAnnot)->GetXFAWidget(),
Dan Sinclairb45ea1f2017-02-21 14:27:59 -0500234 GetFWLFlags(nFlags), point);
jaepark98e10192016-08-15 10:51:11 -0700235}
236
tsepez4cf55152016-11-02 14:37:54 -0700237bool CPDFSDK_XFAWidgetHandler::OnRButtonDblClk(
tsepezf8074ce2016-09-27 14:29:57 -0700238 CPDFSDK_PageView* pPageView,
239 CPDFSDK_Annot::ObservedPtr* pAnnot,
240 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500241 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700242 if (!pPageView || !(*pAnnot))
tsepez4cf55152016-11-02 14:37:54 -0700243 return false;
jaepark98e10192016-08-15 10:51:11 -0700244
tsepezf8074ce2016-09-27 14:29:57 -0700245 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot->Get());
246 return pWidgetHandler->OnRButtonDblClk((*pAnnot)->GetXFAWidget(),
Dan Sinclairb45ea1f2017-02-21 14:27:59 -0500247 GetFWLFlags(nFlags), point);
jaepark98e10192016-08-15 10:51:11 -0700248}
249
tsepez4cf55152016-11-02 14:37:54 -0700250bool CPDFSDK_XFAWidgetHandler::OnChar(CPDFSDK_Annot* pAnnot,
251 uint32_t nChar,
252 uint32_t nFlags) {
jaepark98e10192016-08-15 10:51:11 -0700253 if (!pAnnot)
tsepez4cf55152016-11-02 14:37:54 -0700254 return false;
jaepark98e10192016-08-15 10:51:11 -0700255
256 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
257 return pWidgetHandler->OnChar(pAnnot->GetXFAWidget(), nChar,
258 GetFWLFlags(nFlags));
259}
260
tsepez4cf55152016-11-02 14:37:54 -0700261bool CPDFSDK_XFAWidgetHandler::OnKeyDown(CPDFSDK_Annot* pAnnot,
262 int nKeyCode,
263 int nFlag) {
jaepark98e10192016-08-15 10:51:11 -0700264 if (!pAnnot)
tsepez4cf55152016-11-02 14:37:54 -0700265 return false;
jaepark98e10192016-08-15 10:51:11 -0700266
267 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
268 return pWidgetHandler->OnKeyDown(pAnnot->GetXFAWidget(), nKeyCode,
269 GetFWLFlags(nFlag));
270}
271
tsepez4cf55152016-11-02 14:37:54 -0700272bool CPDFSDK_XFAWidgetHandler::OnKeyUp(CPDFSDK_Annot* pAnnot,
273 int nKeyCode,
274 int nFlag) {
jaepark98e10192016-08-15 10:51:11 -0700275 if (!pAnnot)
tsepez4cf55152016-11-02 14:37:54 -0700276 return false;
jaepark98e10192016-08-15 10:51:11 -0700277
278 CXFA_FFWidgetHandler* pWidgetHandler = GetXFAWidgetHandler(pAnnot);
279 return pWidgetHandler->OnKeyUp(pAnnot->GetXFAWidget(), nKeyCode,
280 GetFWLFlags(nFlag));
281}
282
tsepez4cf55152016-11-02 14:37:54 -0700283bool CPDFSDK_XFAWidgetHandler::OnSetFocus(CPDFSDK_Annot::ObservedPtr* pAnnot,
284 uint32_t nFlag) {
285 return true;
jaepark98e10192016-08-15 10:51:11 -0700286}
287
tsepez4cf55152016-11-02 14:37:54 -0700288bool CPDFSDK_XFAWidgetHandler::OnKillFocus(CPDFSDK_Annot::ObservedPtr* pAnnot,
289 uint32_t nFlag) {
290 return true;
jaepark8c541822016-08-30 13:43:05 -0700291}
292
tsepez4cf55152016-11-02 14:37:54 -0700293bool CPDFSDK_XFAWidgetHandler::OnXFAChangedFocus(
tsepezf8074ce2016-09-27 14:29:57 -0700294 CPDFSDK_Annot::ObservedPtr* pOldAnnot,
295 CPDFSDK_Annot::ObservedPtr* pNewAnnot) {
jaepark98e10192016-08-15 10:51:11 -0700296 CXFA_FFWidgetHandler* pWidgetHandler = nullptr;
tsepezf8074ce2016-09-27 14:29:57 -0700297 if (*pOldAnnot)
298 pWidgetHandler = GetXFAWidgetHandler(pOldAnnot->Get());
299 else if (*pNewAnnot)
300 pWidgetHandler = GetXFAWidgetHandler(pNewAnnot->Get());
jaepark98e10192016-08-15 10:51:11 -0700301
tsepezf8074ce2016-09-27 14:29:57 -0700302 if (!pWidgetHandler)
tsepez4cf55152016-11-02 14:37:54 -0700303 return true;
jaepark98e10192016-08-15 10:51:11 -0700304
tsepezf8074ce2016-09-27 14:29:57 -0700305 CXFA_FFWidget* hWidget = *pNewAnnot ? (*pNewAnnot)->GetXFAWidget() : nullptr;
306 if (!hWidget)
tsepez4cf55152016-11-02 14:37:54 -0700307 return true;
jaepark98e10192016-08-15 10:51:11 -0700308
tsepezf8074ce2016-09-27 14:29:57 -0700309 CXFA_FFPageView* pXFAPageView = hWidget->GetPageView();
310 if (!pXFAPageView)
tsepez4cf55152016-11-02 14:37:54 -0700311 return true;
tsepezf8074ce2016-09-27 14:29:57 -0700312
tsepez4cf55152016-11-02 14:37:54 -0700313 bool bRet = pXFAPageView->GetDocView()->SetFocus(hWidget);
tsepezf8074ce2016-09-27 14:29:57 -0700314 if (pXFAPageView->GetDocView()->GetFocusWidget() == hWidget)
tsepez4cf55152016-11-02 14:37:54 -0700315 bRet = true;
tsepezf8074ce2016-09-27 14:29:57 -0700316
317 return bRet;
jaepark98e10192016-08-15 10:51:11 -0700318}
319
jaepark8c541822016-08-30 13:43:05 -0700320CXFA_FFWidgetHandler* CPDFSDK_XFAWidgetHandler::GetXFAWidgetHandler(
jaepark98e10192016-08-15 10:51:11 -0700321 CPDFSDK_Annot* pAnnot) {
322 if (!pAnnot)
323 return nullptr;
324
325 CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
326 if (!pPageView)
327 return nullptr;
328
dsinclairb402b172016-10-11 09:26:32 -0700329 CPDFSDK_FormFillEnvironment* pFormFillEnv = pPageView->GetFormFillEnv();
dsinclair7cbe68e2016-10-12 11:56:23 -0700330 if (!pFormFillEnv)
jaepark98e10192016-08-15 10:51:11 -0700331 return nullptr;
332
dsinclair521b7502016-11-02 13:02:28 -0700333 CPDFXFA_Context* pDoc = pFormFillEnv->GetXFAContext();
jaepark98e10192016-08-15 10:51:11 -0700334 if (!pDoc)
335 return nullptr;
336
337 CXFA_FFDocView* pDocView = pDoc->GetXFADocView();
338 if (!pDocView)
339 return nullptr;
340
341 return pDocView->GetWidgetHandler();
342}
343
jaepark8c541822016-08-30 13:43:05 -0700344uint32_t CPDFSDK_XFAWidgetHandler::GetFWLFlags(uint32_t dwFlag) {
jaepark98e10192016-08-15 10:51:11 -0700345 uint32_t dwFWLFlag = 0;
346
347 if (dwFlag & FWL_EVENTFLAG_ControlKey)
348 dwFWLFlag |= FWL_KEYFLAG_Ctrl;
349 if (dwFlag & FWL_EVENTFLAG_LeftButtonDown)
350 dwFWLFlag |= FWL_KEYFLAG_LButton;
351 if (dwFlag & FWL_EVENTFLAG_MiddleButtonDown)
352 dwFWLFlag |= FWL_KEYFLAG_MButton;
353 if (dwFlag & FWL_EVENTFLAG_RightButtonDown)
354 dwFWLFlag |= FWL_KEYFLAG_RButton;
355 if (dwFlag & FWL_EVENTFLAG_ShiftKey)
356 dwFWLFlag |= FWL_KEYFLAG_Shift;
357 if (dwFlag & FWL_EVENTFLAG_AltKey)
358 dwFWLFlag |= FWL_KEYFLAG_Alt;
359
360 return dwFWLFlag;
361}