blob: 52ab4dd2c6d935125a4195e01b4b44b122dfb2aa [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_annothandlermgr.h"
jaepark98e10192016-08-15 10:51:11 -07008
tsepez0e606b52016-11-18 16:22:41 -08009#include "core/fpdfapi/parser/cpdf_number.h"
10#include "core/fpdfapi/parser/cpdf_string.h"
dsinclair1727aee2016-09-29 13:12:56 -070011#include "core/fpdfdoc/cpdf_annot.h"
dsinclair114e46a2016-09-29 17:18:21 -070012#include "fpdfsdk/cpdfsdk_annot.h"
Dan Sinclaircbf76e62018-03-28 21:00:35 +000013#include "fpdfsdk/cpdfsdk_annotiterator.h"
dsinclair114e46a2016-09-29 17:18:21 -070014#include "fpdfsdk/cpdfsdk_baannot.h"
15#include "fpdfsdk/cpdfsdk_baannothandler.h"
16#include "fpdfsdk/cpdfsdk_datetime.h"
dsinclair735606d2016-10-05 15:47:02 -070017#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
dsinclair114e46a2016-09-29 17:18:21 -070018#include "fpdfsdk/cpdfsdk_pageview.h"
19#include "fpdfsdk/cpdfsdk_widgethandler.h"
Tom Sepezfe91c6c2017-05-16 15:33:20 -070020#include "third_party/base/ptr_util.h"
jaepark98e10192016-08-15 10:51:11 -070021
22#ifdef PDF_ENABLE_XFA
dsinclair114e46a2016-09-29 17:18:21 -070023#include "fpdfsdk/cpdfsdk_xfawidgethandler.h"
dsinclair4d29e782016-10-04 14:02:47 -070024#include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
Dan Sinclair80c48782017-03-23 12:11:20 -040025#include "xfa/fxfa/cxfa_ffpageview.h"
26#include "xfa/fxfa/cxfa_ffwidget.h"
jaepark98e10192016-08-15 10:51:11 -070027#endif // PDF_ENABLE_XFA
28
dsinclair735606d2016-10-05 15:47:02 -070029CPDFSDK_AnnotHandlerMgr::CPDFSDK_AnnotHandlerMgr(
dsinclair8779fa82016-10-12 12:05:44 -070030 CPDFSDK_FormFillEnvironment* pFormFillEnv)
Tom Sepezfe91c6c2017-05-16 15:33:20 -070031 : m_pBAAnnotHandler(pdfium::MakeUnique<CPDFSDK_BAAnnotHandler>()),
Lei Zhang60fa2fc2017-07-21 17:42:19 -070032 m_pWidgetHandler(pdfium::MakeUnique<CPDFSDK_WidgetHandler>(pFormFillEnv))
jaepark98e10192016-08-15 10:51:11 -070033#ifdef PDF_ENABLE_XFA
Lei Zhang60fa2fc2017-07-21 17:42:19 -070034 ,
Tom Sepezfe91c6c2017-05-16 15:33:20 -070035 m_pXFAWidgetHandler(
Lei Zhang60fa2fc2017-07-21 17:42:19 -070036 pdfium::MakeUnique<CPDFSDK_XFAWidgetHandler>(pFormFillEnv))
jaepark98e10192016-08-15 10:51:11 -070037#endif // PDF_ENABLE_XFA
Lei Zhang60fa2fc2017-07-21 17:42:19 -070038{
jaepark98e10192016-08-15 10:51:11 -070039}
40
41CPDFSDK_AnnotHandlerMgr::~CPDFSDK_AnnotHandlerMgr() {}
42
jaepark98e10192016-08-15 10:51:11 -070043CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(CPDF_Annot* pAnnot,
44 CPDFSDK_PageView* pPageView) {
45 ASSERT(pPageView);
jaepark35512aa2016-08-29 17:15:08 -070046 return GetAnnotHandler(pAnnot->GetSubtype())->NewAnnot(pAnnot, pPageView);
jaepark98e10192016-08-15 10:51:11 -070047}
48
49#ifdef PDF_ENABLE_XFA
50CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(CXFA_FFWidget* pAnnot,
51 CPDFSDK_PageView* pPageView) {
52 ASSERT(pAnnot);
53 ASSERT(pPageView);
54
jaepark956553e2016-08-31 06:49:27 -070055 return GetAnnotHandler(CPDF_Annot::Subtype::XFAWIDGET)
56 ->NewAnnot(pAnnot, pPageView);
jaepark98e10192016-08-15 10:51:11 -070057}
58#endif // PDF_ENABLE_XFA
59
60void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
jaepark35512aa2016-08-29 17:15:08 -070061 IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot);
jaepark35512aa2016-08-29 17:15:08 -070062 pAnnotHandler->ReleaseAnnot(pAnnot);
jaepark98e10192016-08-15 10:51:11 -070063}
64
65void CPDFSDK_AnnotHandlerMgr::Annot_OnCreate(CPDFSDK_Annot* pAnnot) {
66 CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
67
68 CPDFSDK_DateTime curTime;
tsepez0e606b52016-11-18 16:22:41 -080069 pPDFAnnot->GetAnnotDict()->SetNewFor<CPDF_String>(
70 "M", curTime.ToPDFDateTimeString(), false);
71 pPDFAnnot->GetAnnotDict()->SetNewFor<CPDF_Number>("F", 0);
jaepark98e10192016-08-15 10:51:11 -070072}
73
74void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot) {
75 ASSERT(pAnnot);
jaepark35512aa2016-08-29 17:15:08 -070076 GetAnnotHandler(pAnnot)->OnLoad(pAnnot);
jaepark98e10192016-08-15 10:51:11 -070077}
78
Lei Zhanga4c7ac42018-04-17 15:12:58 +000079WideString CPDFSDK_AnnotHandlerMgr::Annot_GetText(CPDFSDK_Annot* pAnnot) {
80 return GetAnnotHandler(pAnnot)->GetText(pAnnot);
81}
82
Ryan Harrison275e2602017-09-18 14:23:18 -040083WideString CPDFSDK_AnnotHandlerMgr::Annot_GetSelectedText(
Diana Gagedce2d722017-06-20 11:17:11 -070084 CPDFSDK_Annot* pAnnot) {
85 return GetAnnotHandler(pAnnot)->GetSelectedText(pAnnot);
86}
87
Ryan Harrison275e2602017-09-18 14:23:18 -040088void CPDFSDK_AnnotHandlerMgr::Annot_ReplaceSelection(CPDFSDK_Annot* pAnnot,
89 const WideString& text) {
Diana Gageab390972017-07-28 17:07:39 -070090 GetAnnotHandler(pAnnot)->ReplaceSelection(pAnnot, text);
Diana Gage1c7f1422017-07-24 11:19:52 -070091}
92
jaepark98e10192016-08-15 10:51:11 -070093IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(
94 CPDFSDK_Annot* pAnnot) const {
jaepark35512aa2016-08-29 17:15:08 -070095 return GetAnnotHandler(pAnnot->GetAnnotSubtype());
jaepark98e10192016-08-15 10:51:11 -070096}
97
98IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(
jaepark956553e2016-08-31 06:49:27 -070099 CPDF_Annot::Subtype nAnnotSubtype) const {
100 if (nAnnotSubtype == CPDF_Annot::Subtype::WIDGET)
jaepark8c541822016-08-30 13:43:05 -0700101 return m_pWidgetHandler.get();
jaepark35512aa2016-08-29 17:15:08 -0700102
103#ifdef PDF_ENABLE_XFA
jaepark956553e2016-08-31 06:49:27 -0700104 if (nAnnotSubtype == CPDF_Annot::Subtype::XFAWIDGET)
jaepark8c541822016-08-30 13:43:05 -0700105 return m_pXFAWidgetHandler.get();
jaepark35512aa2016-08-29 17:15:08 -0700106#endif // PDF_ENABLE_XFA
107
108 return m_pBAAnnotHandler.get();
jaepark98e10192016-08-15 10:51:11 -0700109}
110
111void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView,
112 CPDFSDK_Annot* pAnnot,
113 CFX_RenderDevice* pDevice,
jaepark75f84a52016-09-09 15:39:09 -0700114 CFX_Matrix* pUser2Device,
115 bool bDrawAnnots) {
jaepark98e10192016-08-15 10:51:11 -0700116 ASSERT(pAnnot);
jaepark75f84a52016-09-09 15:39:09 -0700117 GetAnnotHandler(pAnnot)->OnDraw(pPageView, pAnnot, pDevice, pUser2Device,
118 bDrawAnnots);
jaepark98e10192016-08-15 10:51:11 -0700119}
120
tsepez4cf55152016-11-02 14:37:54 -0700121bool CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown(
jaepark98e10192016-08-15 10:51:11 -0700122 CPDFSDK_PageView* pPageView,
tsepezf8074ce2016-09-27 14:29:57 -0700123 CPDFSDK_Annot::ObservedPtr* pAnnot,
jaepark98e10192016-08-15 10:51:11 -0700124 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500125 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700126 ASSERT(*pAnnot);
127 return GetAnnotHandler(pAnnot->Get())
128 ->OnLButtonDown(pPageView, pAnnot, nFlags, point);
jaepark98e10192016-08-15 10:51:11 -0700129}
130
tsepez4cf55152016-11-02 14:37:54 -0700131bool CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp(
jaepark98e10192016-08-15 10:51:11 -0700132 CPDFSDK_PageView* pPageView,
tsepezf8074ce2016-09-27 14:29:57 -0700133 CPDFSDK_Annot::ObservedPtr* pAnnot,
jaepark98e10192016-08-15 10:51:11 -0700134 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500135 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700136 ASSERT(*pAnnot);
137 return GetAnnotHandler(pAnnot->Get())
138 ->OnLButtonUp(pPageView, pAnnot, nFlags, point);
jaepark98e10192016-08-15 10:51:11 -0700139}
140
tsepez4cf55152016-11-02 14:37:54 -0700141bool CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk(
jaepark98e10192016-08-15 10:51:11 -0700142 CPDFSDK_PageView* pPageView,
tsepezf8074ce2016-09-27 14:29:57 -0700143 CPDFSDK_Annot::ObservedPtr* pAnnot,
jaepark98e10192016-08-15 10:51:11 -0700144 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500145 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700146 ASSERT(*pAnnot);
147 return GetAnnotHandler(pAnnot->Get())
148 ->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
jaepark98e10192016-08-15 10:51:11 -0700149}
150
tsepez4cf55152016-11-02 14:37:54 -0700151bool CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove(
jaepark98e10192016-08-15 10:51:11 -0700152 CPDFSDK_PageView* pPageView,
tsepezf8074ce2016-09-27 14:29:57 -0700153 CPDFSDK_Annot::ObservedPtr* pAnnot,
jaepark98e10192016-08-15 10:51:11 -0700154 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500155 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700156 ASSERT(*pAnnot);
157 return GetAnnotHandler(pAnnot->Get())
158 ->OnMouseMove(pPageView, pAnnot, nFlags, point);
jaepark98e10192016-08-15 10:51:11 -0700159}
160
tsepez4cf55152016-11-02 14:37:54 -0700161bool CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel(
jaepark98e10192016-08-15 10:51:11 -0700162 CPDFSDK_PageView* pPageView,
tsepezf8074ce2016-09-27 14:29:57 -0700163 CPDFSDK_Annot::ObservedPtr* pAnnot,
jaepark98e10192016-08-15 10:51:11 -0700164 uint32_t nFlags,
165 short zDelta,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500166 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700167 ASSERT(*pAnnot);
168 return GetAnnotHandler(pAnnot->Get())
169 ->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point);
jaepark98e10192016-08-15 10:51:11 -0700170}
171
tsepez4cf55152016-11-02 14:37:54 -0700172bool CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown(
jaepark98e10192016-08-15 10:51:11 -0700173 CPDFSDK_PageView* pPageView,
tsepezf8074ce2016-09-27 14:29:57 -0700174 CPDFSDK_Annot::ObservedPtr* pAnnot,
jaepark98e10192016-08-15 10:51:11 -0700175 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500176 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700177 ASSERT(*pAnnot);
178 return GetAnnotHandler(pAnnot->Get())
179 ->OnRButtonDown(pPageView, pAnnot, nFlags, point);
jaepark98e10192016-08-15 10:51:11 -0700180}
181
tsepez4cf55152016-11-02 14:37:54 -0700182bool CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp(
jaepark98e10192016-08-15 10:51:11 -0700183 CPDFSDK_PageView* pPageView,
tsepezf8074ce2016-09-27 14:29:57 -0700184 CPDFSDK_Annot::ObservedPtr* pAnnot,
jaepark98e10192016-08-15 10:51:11 -0700185 uint32_t nFlags,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500186 const CFX_PointF& point) {
tsepezf8074ce2016-09-27 14:29:57 -0700187 ASSERT(*pAnnot);
188 return GetAnnotHandler(pAnnot->Get())
189 ->OnRButtonUp(pPageView, pAnnot, nFlags, point);
jaepark98e10192016-08-15 10:51:11 -0700190}
191
tsepezf8074ce2016-09-27 14:29:57 -0700192void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter(
193 CPDFSDK_PageView* pPageView,
194 CPDFSDK_Annot::ObservedPtr* pAnnot,
195 uint32_t nFlag) {
196 ASSERT(*pAnnot);
197 GetAnnotHandler(pAnnot->Get())->OnMouseEnter(pPageView, pAnnot, nFlag);
jaepark98e10192016-08-15 10:51:11 -0700198}
199
tsepezf8074ce2016-09-27 14:29:57 -0700200void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit(
201 CPDFSDK_PageView* pPageView,
202 CPDFSDK_Annot::ObservedPtr* pAnnot,
203 uint32_t nFlag) {
204 ASSERT(*pAnnot);
205 GetAnnotHandler(pAnnot->Get())->OnMouseExit(pPageView, pAnnot, nFlag);
jaepark98e10192016-08-15 10:51:11 -0700206}
207
tsepez4cf55152016-11-02 14:37:54 -0700208bool CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot,
209 uint32_t nChar,
210 uint32_t nFlags) {
jaepark35512aa2016-08-29 17:15:08 -0700211 return GetAnnotHandler(pAnnot)->OnChar(pAnnot, nChar, nFlags);
jaepark98e10192016-08-15 10:51:11 -0700212}
213
tsepez4cf55152016-11-02 14:37:54 -0700214bool CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot,
215 int nKeyCode,
216 int nFlag) {
Lei Zhang60fa2fc2017-07-21 17:42:19 -0700217 if (CPDFSDK_FormFillEnvironment::IsCTRLKeyDown(nFlag) ||
218 CPDFSDK_FormFillEnvironment::IsALTKeyDown(nFlag)) {
jaepark35512aa2016-08-29 17:15:08 -0700219 return GetAnnotHandler(pAnnot)->OnKeyDown(pAnnot, nKeyCode, nFlag);
thestig7b3252f2016-11-08 21:30:11 -0800220 }
jaepark98e10192016-08-15 10:51:11 -0700221
jaepark35512aa2016-08-29 17:15:08 -0700222 CPDFSDK_PageView* pPage = pAnnot->GetPageView();
223 CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot();
224 if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) {
Lei Zhang60fa2fc2017-07-21 17:42:19 -0700225 CPDFSDK_Annot::ObservedPtr pNext(GetNextAnnot(
226 pFocusAnnot, !CPDFSDK_FormFillEnvironment::IsSHIFTKeyDown(nFlag)));
tsepezf8074ce2016-09-27 14:29:57 -0700227 if (pNext && pNext.Get() != pFocusAnnot) {
dsinclair7cbe68e2016-10-12 11:56:23 -0700228 pPage->GetFormFillEnv()->SetFocusAnnot(&pNext);
tsepez4cf55152016-11-02 14:37:54 -0700229 return true;
jaepark98e10192016-08-15 10:51:11 -0700230 }
231 }
232
thestig7b3252f2016-11-08 21:30:11 -0800233 return GetAnnotHandler(pAnnot)->OnKeyDown(pAnnot, nKeyCode, nFlag);
jaepark98e10192016-08-15 10:51:11 -0700234}
235
tsepez4cf55152016-11-02 14:37:54 -0700236bool CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot,
237 int nKeyCode,
238 int nFlag) {
239 return false;
jaepark98e10192016-08-15 10:51:11 -0700240}
241
tsepez4cf55152016-11-02 14:37:54 -0700242bool CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus(
tsepezf8074ce2016-09-27 14:29:57 -0700243 CPDFSDK_Annot::ObservedPtr* pAnnot,
244 uint32_t nFlag) {
245 ASSERT(*pAnnot);
dsinclairb402b172016-10-11 09:26:32 -0700246 return GetAnnotHandler(pAnnot->Get())->OnSetFocus(pAnnot, nFlag);
jaepark98e10192016-08-15 10:51:11 -0700247}
248
tsepez4cf55152016-11-02 14:37:54 -0700249bool CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus(
tsepezf8074ce2016-09-27 14:29:57 -0700250 CPDFSDK_Annot::ObservedPtr* pAnnot,
251 uint32_t nFlag) {
252 ASSERT(*pAnnot);
253 return GetAnnotHandler(pAnnot->Get())->OnKillFocus(pAnnot, nFlag);
jaepark98e10192016-08-15 10:51:11 -0700254}
255
256#ifdef PDF_ENABLE_XFA
tsepez4cf55152016-11-02 14:37:54 -0700257bool CPDFSDK_AnnotHandlerMgr::Annot_OnChangeFocus(
tsepezf8074ce2016-09-27 14:29:57 -0700258 CPDFSDK_Annot::ObservedPtr* pSetAnnot,
259 CPDFSDK_Annot::ObservedPtr* pKillAnnot) {
tsepez4cf55152016-11-02 14:37:54 -0700260 bool bXFA = (*pSetAnnot && (*pSetAnnot)->GetXFAWidget()) ||
261 (*pKillAnnot && (*pKillAnnot)->GetXFAWidget());
jaepark98e10192016-08-15 10:51:11 -0700262
263 if (bXFA) {
264 if (IPDFSDK_AnnotHandler* pXFAAnnotHandler =
jaepark956553e2016-08-31 06:49:27 -0700265 GetAnnotHandler(CPDF_Annot::Subtype::XFAWIDGET))
jaepark98e10192016-08-15 10:51:11 -0700266 return pXFAAnnotHandler->OnXFAChangedFocus(pKillAnnot, pSetAnnot);
267 }
268
tsepez4cf55152016-11-02 14:37:54 -0700269 return true;
jaepark98e10192016-08-15 10:51:11 -0700270}
271#endif // PDF_ENABLE_XFA
272
273CFX_FloatRect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox(
274 CPDFSDK_PageView* pPageView,
275 CPDFSDK_Annot* pAnnot) {
276 ASSERT(pAnnot);
jaepark35512aa2016-08-29 17:15:08 -0700277 return GetAnnotHandler(pAnnot)->GetViewBBox(pPageView, pAnnot);
jaepark98e10192016-08-15 10:51:11 -0700278}
279
tsepez4cf55152016-11-02 14:37:54 -0700280bool CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView* pPageView,
281 CPDFSDK_Annot* pAnnot,
Dan Sinclairf528eee2017-02-14 11:52:07 -0500282 const CFX_PointF& point) {
jaepark98e10192016-08-15 10:51:11 -0700283 ASSERT(pAnnot);
jaepark35512aa2016-08-29 17:15:08 -0700284 IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot);
285 if (pAnnotHandler->CanAnswer(pAnnot))
286 return pAnnotHandler->HitTest(pPageView, pAnnot, point);
287
tsepez4cf55152016-11-02 14:37:54 -0700288 return false;
jaepark98e10192016-08-15 10:51:11 -0700289}
290
291CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,
tsepez4cf55152016-11-02 14:37:54 -0700292 bool bNext) {
jaepark98e10192016-08-15 10:51:11 -0700293#ifdef PDF_ENABLE_XFA
294 CPDFSDK_PageView* pPageView = pSDKAnnot->GetPageView();
295 CPDFXFA_Page* pPage = pPageView->GetPDFXFAPage();
296 if (!pPage)
297 return nullptr;
298 if (pPage->GetPDFPage()) { // for pdf annots.
Dan Sinclaircbf76e62018-03-28 21:00:35 +0000299 CPDFSDK_AnnotIterator ai(pSDKAnnot->GetPageView(),
300 pSDKAnnot->GetAnnotSubtype());
jaepark98e10192016-08-15 10:51:11 -0700301 CPDFSDK_Annot* pNext =
302 bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot);
303 return pNext;
304 }
305 // for xfa annots
306 std::unique_ptr<IXFA_WidgetIterator> pWidgetIterator(
307 pPage->GetXFAPageView()->CreateWidgetIterator(
308 XFA_TRAVERSEWAY_Tranvalse, XFA_WidgetStatus_Visible |
309 XFA_WidgetStatus_Viewable |
310 XFA_WidgetStatus_Focused));
311 if (!pWidgetIterator)
312 return nullptr;
313 if (pWidgetIterator->GetCurrentWidget() != pSDKAnnot->GetXFAWidget())
314 pWidgetIterator->SetCurrentWidget(pSDKAnnot->GetXFAWidget());
315 CXFA_FFWidget* hNextFocus =
316 bNext ? pWidgetIterator->MoveToNext() : pWidgetIterator->MoveToPrevious();
317 if (!hNextFocus && pSDKAnnot)
318 hNextFocus = pWidgetIterator->MoveToFirst();
319
320 return pPageView->GetAnnotByXFAWidget(hNextFocus);
321#else // PDF_ENABLE_XFA
Dan Sinclaircbf76e62018-03-28 21:00:35 +0000322 CPDFSDK_AnnotIterator ai(pSDKAnnot->GetPageView(),
323 CPDF_Annot::Subtype::WIDGET);
jaepark98e10192016-08-15 10:51:11 -0700324 return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot);
325#endif // PDF_ENABLE_XFA
326}