| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "../include/fsdk_define.h" | 7 #include "../include/fsdk_define.h" |
| 8 #include "../include/fsdk_mgr.h" | 8 #include "../include/fsdk_mgr.h" |
| 9 #include "../include/formfiller/FFL_FormFiller.h" | 9 #include "../include/formfiller/FFL_FormFiller.h" |
| 10 #include "../include/fsdk_annothandler.h" | 10 #include "../include/fsdk_annothandler.h" |
| 11 | 11 |
| 12 | 12 CPDFSDK_AnnotHandlerMgr::CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp) { |
| 13 CPDFSDK_AnnotHandlerMgr::CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp) | 13 m_pApp = pApp; |
| 14 { | 14 |
| 15 m_pApp = pApp; | 15 CPDFSDK_BFAnnotHandler* pHandler = new CPDFSDK_BFAnnotHandler(m_pApp); |
| 16 | 16 pHandler->SetFormFiller(m_pApp->GetIFormFiller()); |
| 17 CPDFSDK_BFAnnotHandler* pHandler = new CPDFSDK_BFAnnotHandler(m_pApp); | 17 RegisterAnnotHandler(pHandler); |
| 18 pHandler->SetFormFiller(m_pApp->GetIFormFiller()); | 18 } |
| 19 RegisterAnnotHandler(pHandler); | 19 |
| 20 } | 20 CPDFSDK_AnnotHandlerMgr::~CPDFSDK_AnnotHandlerMgr() { |
| 21 | 21 for (int i = 0; i < m_Handlers.GetSize(); i++) { |
| 22 CPDFSDK_AnnotHandlerMgr::~CPDFSDK_AnnotHandlerMgr() | 22 IPDFSDK_AnnotHandler* pHandler = m_Handlers.GetAt(i); |
| 23 { | 23 delete pHandler; |
| 24 for(int i=0; i<m_Handlers.GetSize(); i++) | 24 } |
| 25 { | 25 m_Handlers.RemoveAll(); |
| 26 IPDFSDK_AnnotHandler* pHandler = m_Handlers.GetAt(i); | 26 m_mapType2Handler.RemoveAll(); |
| 27 delete pHandler; | 27 } |
| 28 } | 28 |
| 29 m_Handlers.RemoveAll(); | 29 void CPDFSDK_AnnotHandlerMgr::RegisterAnnotHandler( |
| 30 m_mapType2Handler.RemoveAll(); | 30 IPDFSDK_AnnotHandler* pAnnotHandler) { |
| 31 } | 31 ASSERT(pAnnotHandler != NULL); |
| 32 | 32 |
| 33 void CPDFSDK_AnnotHandlerMgr::RegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnn
otHandler) | 33 ASSERT(GetAnnotHandler(pAnnotHandler->GetType()) == NULL); |
| 34 { | 34 |
| 35 ASSERT(pAnnotHandler != NULL); | 35 m_Handlers.Add(pAnnotHandler); |
| 36 | 36 m_mapType2Handler.SetAt(pAnnotHandler->GetType(), (void*)pAnnotHandler); |
| 37 ASSERT(GetAnnotHandler(pAnnotHandler->GetType()) == NULL); | 37 } |
| 38 | 38 |
| 39 m_Handlers.Add(pAnnotHandler); | 39 void CPDFSDK_AnnotHandlerMgr::UnRegisterAnnotHandler( |
| 40 m_mapType2Handler.SetAt(pAnnotHandler->GetType(), (void*)pAnnotHandler); | 40 IPDFSDK_AnnotHandler* pAnnotHandler) { |
| 41 } | 41 ASSERT(pAnnotHandler != NULL); |
| 42 | 42 |
| 43 void CPDFSDK_AnnotHandlerMgr::UnRegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnno
tHandler) | 43 m_mapType2Handler.RemoveKey(pAnnotHandler->GetType()); |
| 44 { | 44 |
| 45 ASSERT(pAnnotHandler != NULL); | 45 for (int i = 0, sz = m_Handlers.GetSize(); i < sz; i++) { |
| 46 | 46 if (m_Handlers.GetAt(i) == pAnnotHandler) { |
| 47 m_mapType2Handler.RemoveKey(pAnnotHandler->GetType()); | 47 m_Handlers.RemoveAt(i); |
| 48 | 48 break; |
| 49 for (int i=0, sz=m_Handlers.GetSize(); i<sz; i++) | 49 } |
| 50 { | 50 } |
| 51 if (m_Handlers.GetAt(i) == pAnnotHandler) | 51 } |
| 52 { | 52 |
| 53 m_Handlers.RemoveAt(i); | 53 CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(CPDF_Annot* pAnnot, |
| 54 break; | 54 CPDFSDK_PageView* pPageView) { |
| 55 } | 55 ASSERT(pAnnot != NULL); |
| 56 } | 56 ASSERT(pPageView != NULL); |
| 57 } | 57 |
| 58 | 58 if (IPDFSDK_AnnotHandler* pAnnotHandler = |
| 59 CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(CPDF_Annot * pAnnot, CPDFSDK_Pa
geView *pPageView) | 59 GetAnnotHandler(pAnnot->GetSubType())) { |
| 60 { | 60 return pAnnotHandler->NewAnnot(pAnnot, pPageView); |
| 61 ASSERT(pAnnot != NULL); | 61 } |
| 62 ASSERT(pPageView != NULL); | 62 |
| 63 | 63 return new CPDFSDK_Annot(pAnnot, pPageView); |
| 64 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot->GetSubType
())) | 64 } |
| 65 { | 65 |
| 66 return pAnnotHandler->NewAnnot(pAnnot, pPageView); | 66 void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(CPDFSDK_Annot* pAnnot) { |
| 67 } | 67 ASSERT(pAnnot != NULL); |
| 68 | 68 |
| 69 return new CPDFSDK_Annot(pAnnot, pPageView); | 69 pAnnot->GetPDFPage(); |
| 70 } | 70 |
| 71 | 71 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 72 void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(CPDFSDK_Annot* pAnnot) | 72 pAnnotHandler->OnRelease(pAnnot); |
| 73 { | 73 pAnnotHandler->ReleaseAnnot(pAnnot); |
| 74 ASSERT(pAnnot != NULL); | 74 } else { |
| 75 | 75 delete (CPDFSDK_Annot*)pAnnot; |
| 76 pAnnot->GetPDFPage(); | 76 } |
| 77 | 77 } |
| 78 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | 78 |
| 79 { | 79 void CPDFSDK_AnnotHandlerMgr::Annot_OnCreate(CPDFSDK_Annot* pAnnot) { |
| 80 pAnnotHandler->OnRelease(pAnnot); | 80 ASSERT(pAnnot != NULL); |
| 81 pAnnotHandler->ReleaseAnnot(pAnnot); | 81 |
| 82 } | 82 CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); |
| 83 else | 83 |
| 84 { | 84 CPDFSDK_DateTime curTime; |
| 85 delete (CPDFSDK_Annot*)pAnnot; | 85 pPDFAnnot->GetAnnotDict()->SetAtString("M", curTime.ToPDFDateTimeString()); |
| 86 } | 86 pPDFAnnot->GetAnnotDict()->SetAtNumber("F", 0); |
| 87 } | 87 |
| 88 | 88 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 89 void CPDFSDK_AnnotHandlerMgr::Annot_OnCreate(CPDFSDK_Annot* pAnnot) | 89 pAnnotHandler->OnCreate(pAnnot); |
| 90 { | 90 } |
| 91 ASSERT(pAnnot != NULL); | 91 } |
| 92 | 92 |
| 93 CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); | 93 void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot) { |
| 94 | 94 ASSERT(pAnnot != NULL); |
| 95 CPDFSDK_DateTime curTime; | 95 |
| 96 pPDFAnnot->GetAnnotDict()->SetAtString("M", curTime.ToPDFDateTimeString()); | 96 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 97 pPDFAnnot->GetAnnotDict()->SetAtNumber("F", 0); | 97 pAnnotHandler->OnLoad(pAnnot); |
| 98 | 98 } |
| 99 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | 99 } |
| 100 { | 100 |
| 101 pAnnotHandler->OnCreate(pAnnot); | 101 IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler( |
| 102 } | 102 CPDFSDK_Annot* pAnnot) const { |
| 103 } | 103 ASSERT(pAnnot != NULL); |
| 104 | 104 |
| 105 void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot) | 105 CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); |
| 106 { | 106 ASSERT(pPDFAnnot != NULL); |
| 107 ASSERT(pAnnot != NULL); | 107 |
| 108 | 108 return GetAnnotHandler(pPDFAnnot->GetSubType()); |
| 109 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | 109 } |
| 110 { | 110 |
| 111 pAnnotHandler->OnLoad(pAnnot); | 111 IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler( |
| 112 } | 112 const CFX_ByteString& sType) const { |
| 113 } | 113 void* pRet = NULL; |
| 114 | 114 m_mapType2Handler.Lookup(sType, pRet); |
| 115 IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(CPDFSDK_Annot* pA
nnot) const | 115 return (IPDFSDK_AnnotHandler*)pRet; |
| 116 { | 116 } |
| 117 ASSERT(pAnnot != NULL); | 117 |
| 118 | 118 void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView, |
| 119 CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); | 119 CPDFSDK_Annot* pAnnot, |
| 120 ASSERT(pPDFAnnot != NULL); | 120 CFX_RenderDevice* pDevice, |
| 121 | 121 CPDF_Matrix* pUser2Device, |
| 122 return GetAnnotHandler(pPDFAnnot->GetSubType()); | 122 FX_DWORD dwFlags) { |
| 123 } | 123 ASSERT(pAnnot != NULL); |
| 124 | 124 |
| 125 IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(const CFX_ByteStr
ing& sType) const | 125 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 126 { | 126 pAnnotHandler->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); |
| 127 void* pRet = NULL; | 127 } else { |
| 128 m_mapType2Handler.Lookup(sType, pRet); | 128 pAnnot->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); |
| 129 return (IPDFSDK_AnnotHandler*)pRet; | 129 } |
| 130 } | 130 } |
| 131 | 131 |
| 132 void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView, CPDFSDK_
Annot* pAnnot, CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,FX_DWORD dwF
lags) | 132 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown( |
| 133 { | 133 CPDFSDK_PageView* pPageView, |
| 134 ASSERT(pAnnot != NULL); | 134 CPDFSDK_Annot* pAnnot, |
| 135 | 135 FX_DWORD nFlags, |
| 136 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | 136 const CPDF_Point& point) { |
| 137 { | 137 ASSERT(pAnnot != NULL); |
| 138 pAnnotHandler->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags)
; | 138 |
| 139 } | 139 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 140 else | 140 return pAnnotHandler->OnLButtonDown(pPageView, pAnnot, nFlags, point); |
| 141 { | 141 } |
| 142 pAnnot->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); | 142 return FALSE; |
| 143 } | 143 } |
| 144 } | 144 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp(CPDFSDK_PageView* pPageView, |
| 145 | 145 CPDFSDK_Annot* pAnnot, |
| 146 | 146 FX_DWORD nFlags, |
| 147 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown(CPDFSDK_PageView * pPageVie
w, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | 147 const CPDF_Point& point) { |
| 148 { | 148 ASSERT(pAnnot != NULL); |
| 149 ASSERT(pAnnot != NULL); | 149 |
| 150 | 150 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 151 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | 151 return pAnnotHandler->OnLButtonUp(pPageView, pAnnot, nFlags, point); |
| 152 { | 152 } |
| 153 return pAnnotHandler->OnLButtonDown(pPageView, pAnnot, nFlags, point); | 153 return FALSE; |
| 154 } | 154 } |
| 155 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk( |
| 156 CPDFSDK_PageView* pPageView, |
| 157 CPDFSDK_Annot* pAnnot, |
| 158 FX_DWORD nFlags, |
| 159 const CPDF_Point& point) { |
| 160 ASSERT(pAnnot != NULL); |
| 161 |
| 162 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 163 return pAnnotHandler->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); |
| 164 } |
| 165 return FALSE; |
| 166 } |
| 167 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove(CPDFSDK_PageView* pPageView, |
| 168 CPDFSDK_Annot* pAnnot, |
| 169 FX_DWORD nFlags, |
| 170 const CPDF_Point& point) { |
| 171 ASSERT(pAnnot != NULL); |
| 172 |
| 173 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 174 return pAnnotHandler->OnMouseMove(pPageView, pAnnot, nFlags, point); |
| 175 } |
| 176 return FALSE; |
| 177 } |
| 178 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel(CPDFSDK_PageView* pPageView, |
| 179 CPDFSDK_Annot* pAnnot, |
| 180 FX_DWORD nFlags, |
| 181 short zDelta, |
| 182 const CPDF_Point& point) { |
| 183 ASSERT(pAnnot != NULL); |
| 184 |
| 185 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 186 return pAnnotHandler->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, |
| 187 point); |
| 188 } |
| 189 return FALSE; |
| 190 } |
| 191 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown( |
| 192 CPDFSDK_PageView* pPageView, |
| 193 CPDFSDK_Annot* pAnnot, |
| 194 FX_DWORD nFlags, |
| 195 const CPDF_Point& point) { |
| 196 ASSERT(pAnnot != NULL); |
| 197 |
| 198 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 199 return pAnnotHandler->OnRButtonDown(pPageView, pAnnot, nFlags, point); |
| 200 } |
| 201 return FALSE; |
| 202 } |
| 203 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp(CPDFSDK_PageView* pPageView, |
| 204 CPDFSDK_Annot* pAnnot, |
| 205 FX_DWORD nFlags, |
| 206 const CPDF_Point& point) { |
| 207 ASSERT(pAnnot != NULL); |
| 208 |
| 209 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 210 return pAnnotHandler->OnRButtonUp(pPageView, pAnnot, nFlags, point); |
| 211 } |
| 212 return FALSE; |
| 213 } |
| 214 |
| 215 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter(CPDFSDK_PageView* pPageView, |
| 216 CPDFSDK_Annot* pAnnot, |
| 217 FX_DWORD nFlag) { |
| 218 ASSERT(pAnnot != NULL); |
| 219 |
| 220 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 221 pAnnotHandler->OnMouseEnter(pPageView, pAnnot, nFlag); |
| 222 } |
| 223 return; |
| 224 } |
| 225 |
| 226 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit(CPDFSDK_PageView* pPageView, |
| 227 CPDFSDK_Annot* pAnnot, |
| 228 FX_DWORD nFlag) { |
| 229 ASSERT(pAnnot != NULL); |
| 230 |
| 231 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 232 pAnnotHandler->OnMouseExit(pPageView, pAnnot, nFlag); |
| 233 } |
| 234 return; |
| 235 } |
| 236 |
| 237 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot, |
| 238 FX_DWORD nChar, |
| 239 FX_DWORD nFlags) { |
| 240 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 241 return pAnnotHandler->OnChar(pAnnot, nChar, nFlags); |
| 242 } |
| 243 return FALSE; |
| 244 } |
| 245 |
| 246 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, |
| 247 int nKeyCode, |
| 248 int nFlag) { |
| 249 if (!m_pApp->FFI_IsCTRLKeyDown(nFlag) && !m_pApp->FFI_IsALTKeyDown(nFlag)) { |
| 250 CPDFSDK_PageView* pPage = pAnnot->GetPageView(); |
| 251 CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot(); |
| 252 if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) { |
| 253 CPDFSDK_Annot* pNext = |
| 254 GetNextAnnot(pFocusAnnot, !m_pApp->FFI_IsSHIFTKeyDown(nFlag)); |
| 255 |
| 256 if (pNext && pNext != pFocusAnnot) { |
| 257 CPDFSDK_Document* pDocument = pPage->GetSDKDocument(); |
| 258 pDocument->SetFocusAnnot(pNext); |
| 259 return TRUE; |
| 260 } |
| 261 } |
| 262 } |
| 263 |
| 264 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 265 return pAnnotHandler->OnKeyDown(pAnnot, nKeyCode, nFlag); |
| 266 } |
| 267 return FALSE; |
| 268 } |
| 269 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, |
| 270 int nKeyCode, |
| 271 int nFlag) { |
| 272 return FALSE; |
| 273 } |
| 274 |
| 275 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, |
| 276 FX_DWORD nFlag) { |
| 277 ASSERT(pAnnot != NULL); |
| 278 |
| 279 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 280 if (pAnnotHandler->OnSetFocus(pAnnot, nFlag)) { |
| 281 CPDFSDK_PageView* pPage = pAnnot->GetPageView(); |
| 282 pPage->GetSDKDocument(); |
| 283 return TRUE; |
| 284 } |
| 285 } |
| 286 return FALSE; |
| 287 } |
| 288 |
| 289 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, |
| 290 FX_DWORD nFlag) { |
| 291 ASSERT(pAnnot); |
| 292 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) |
| 293 return pAnnotHandler->OnKillFocus(pAnnot, nFlag); |
| 294 |
| 295 return FALSE; |
| 296 } |
| 297 |
| 298 CPDF_Rect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox( |
| 299 CPDFSDK_PageView* pPageView, |
| 300 CPDFSDK_Annot* pAnnot) { |
| 301 ASSERT(pAnnot); |
| 302 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) |
| 303 return pAnnotHandler->GetViewBBox(pPageView, pAnnot); |
| 304 |
| 305 return pAnnot->GetRect(); |
| 306 } |
| 307 |
| 308 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView* pPageView, |
| 309 CPDFSDK_Annot* pAnnot, |
| 310 const CPDF_Point& point) { |
| 311 ASSERT(pAnnot); |
| 312 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) { |
| 313 if (pAnnotHandler->CanAnswer(pAnnot)) |
| 314 return pAnnotHandler->HitTest(pPageView, pAnnot, point); |
| 315 } |
| 316 return FALSE; |
| 317 } |
| 318 |
| 319 CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, |
| 320 FX_BOOL bNext) { |
| 321 CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), "Widget", ""); |
| 322 return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); |
| 323 } |
| 324 |
| 325 FX_BOOL CPDFSDK_BFAnnotHandler::CanAnswer(CPDFSDK_Annot* pAnnot) { |
| 326 ASSERT(pAnnot->GetType() == "Widget"); |
| 327 if (pAnnot->GetSubType() == BFFT_SIGNATURE) |
| 155 return FALSE; | 328 return FALSE; |
| 156 } | 329 |
| 157 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp(CPDFSDK_PageView * pPageView,
CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | 330 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; |
| 158 { | 331 if (!pWidget->IsVisible()) |
| 159 ASSERT(pAnnot != NULL); | |
| 160 | |
| 161 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | |
| 162 { | |
| 163 return pAnnotHandler->OnLButtonUp(pPageView, pAnnot, nFlags, point); | |
| 164 } | |
| 165 return FALSE; | 332 return FALSE; |
| 166 } | 333 |
| 167 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk(CPDFSDK_PageView * pPageV
iew, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | 334 int nFieldFlags = pWidget->GetFieldFlags(); |
| 168 { | 335 if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY) |
| 169 ASSERT(pAnnot != NULL); | |
| 170 | |
| 171 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | |
| 172 { | |
| 173 return pAnnotHandler->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); | |
| 174 } | |
| 175 return FALSE; | 336 return FALSE; |
| 176 } | 337 |
| 177 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove(CPDFSDK_PageView * pPageView,
CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | 338 if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON) |
| 178 { | 339 return TRUE; |
| 179 ASSERT(pAnnot != NULL); | 340 |
| 180 | 341 CPDF_Page* pPage = pWidget->GetPDFPage(); |
| 181 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | 342 CPDF_Document* pDocument = pPage->m_pDocument; |
| 182 { | 343 FX_DWORD dwPermissions = pDocument->GetUserPermissions(); |
| 183 return pAnnotHandler->OnMouseMove(pPageView, pAnnot, nFlags, point); | 344 return (dwPermissions & FPDFPERM_FILL_FORM) || |
| 184 } | 345 (dwPermissions & FPDFPERM_ANNOT_FORM); |
| 346 } |
| 347 |
| 348 CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(CPDF_Annot* pAnnot, |
| 349 CPDFSDK_PageView* pPage) { |
| 350 CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument(); |
| 351 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm(); |
| 352 CPDF_FormControl* pCtrl = CPDFSDK_Widget::GetFormControl( |
| 353 pInterForm->GetInterForm(), pAnnot->GetAnnotDict()); |
| 354 if (!pCtrl) |
| 355 return nullptr; |
| 356 |
| 357 CPDFSDK_Widget* pWidget = new CPDFSDK_Widget(pAnnot, pPage, pInterForm); |
| 358 pInterForm->AddMap(pCtrl, pWidget); |
| 359 CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); |
| 360 if (pPDFInterForm && pPDFInterForm->NeedConstructAP()) |
| 361 pWidget->ResetAppearance(nullptr, FALSE); |
| 362 |
| 363 return pWidget; |
| 364 } |
| 365 |
| 366 void CPDFSDK_BFAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) { |
| 367 ASSERT(pAnnot != NULL); |
| 368 |
| 369 if (m_pFormFiller) |
| 370 m_pFormFiller->OnDelete(pAnnot); |
| 371 |
| 372 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; |
| 373 CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm(); |
| 374 ASSERT(pInterForm != NULL); |
| 375 |
| 376 CPDF_FormControl* pCtrol = pWidget->GetFormControl(); |
| 377 pInterForm->RemoveMap(pCtrol); |
| 378 |
| 379 delete pWidget; |
| 380 } |
| 381 |
| 382 void CPDFSDK_BFAnnotHandler::OnDraw(CPDFSDK_PageView* pPageView, |
| 383 CPDFSDK_Annot* pAnnot, |
| 384 CFX_RenderDevice* pDevice, |
| 385 CPDF_Matrix* pUser2Device, |
| 386 FX_DWORD dwFlags) { |
| 387 ASSERT(pAnnot != NULL); |
| 388 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 389 |
| 390 if (sSubType == BFFT_SIGNATURE) { |
| 391 pAnnot->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); |
| 392 } else { |
| 393 if (m_pFormFiller) { |
| 394 m_pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags); |
| 395 } |
| 396 } |
| 397 } |
| 398 |
| 399 void CPDFSDK_BFAnnotHandler::OnMouseEnter(CPDFSDK_PageView* pPageView, |
| 400 CPDFSDK_Annot* pAnnot, |
| 401 FX_DWORD nFlag) { |
| 402 ASSERT(pAnnot != NULL); |
| 403 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 404 |
| 405 if (sSubType == BFFT_SIGNATURE) { |
| 406 } else { |
| 407 if (m_pFormFiller) |
| 408 m_pFormFiller->OnMouseEnter(pPageView, pAnnot, nFlag); |
| 409 } |
| 410 } |
| 411 void CPDFSDK_BFAnnotHandler::OnMouseExit(CPDFSDK_PageView* pPageView, |
| 412 CPDFSDK_Annot* pAnnot, |
| 413 FX_DWORD nFlag) { |
| 414 ASSERT(pAnnot != NULL); |
| 415 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 416 |
| 417 if (sSubType == BFFT_SIGNATURE) { |
| 418 } else { |
| 419 if (m_pFormFiller) |
| 420 m_pFormFiller->OnMouseExit(pPageView, pAnnot, nFlag); |
| 421 } |
| 422 } |
| 423 FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDown(CPDFSDK_PageView* pPageView, |
| 424 CPDFSDK_Annot* pAnnot, |
| 425 FX_DWORD nFlags, |
| 426 const CPDF_Point& point) { |
| 427 ASSERT(pAnnot != NULL); |
| 428 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 429 |
| 430 if (sSubType == BFFT_SIGNATURE) { |
| 431 } else { |
| 432 if (m_pFormFiller) |
| 433 return m_pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point); |
| 434 } |
| 435 |
| 436 return FALSE; |
| 437 } |
| 438 |
| 439 FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonUp(CPDFSDK_PageView* pPageView, |
| 440 CPDFSDK_Annot* pAnnot, |
| 441 FX_DWORD nFlags, |
| 442 const CPDF_Point& point) { |
| 443 ASSERT(pAnnot != NULL); |
| 444 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 445 |
| 446 if (sSubType == BFFT_SIGNATURE) { |
| 447 } else { |
| 448 if (m_pFormFiller) |
| 449 return m_pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point); |
| 450 } |
| 451 |
| 452 return FALSE; |
| 453 } |
| 454 |
| 455 FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDblClk(CPDFSDK_PageView* pPageView, |
| 456 CPDFSDK_Annot* pAnnot, |
| 457 FX_DWORD nFlags, |
| 458 const CPDF_Point& point) { |
| 459 ASSERT(pAnnot != NULL); |
| 460 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 461 |
| 462 if (sSubType == BFFT_SIGNATURE) { |
| 463 } else { |
| 464 if (m_pFormFiller) |
| 465 return m_pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); |
| 466 } |
| 467 |
| 468 return FALSE; |
| 469 } |
| 470 |
| 471 FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseMove(CPDFSDK_PageView* pPageView, |
| 472 CPDFSDK_Annot* pAnnot, |
| 473 FX_DWORD nFlags, |
| 474 const CPDF_Point& point) { |
| 475 ASSERT(pAnnot != NULL); |
| 476 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 477 |
| 478 if (sSubType == BFFT_SIGNATURE) { |
| 479 } else { |
| 480 if (m_pFormFiller) |
| 481 return m_pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point); |
| 482 } |
| 483 |
| 484 return FALSE; |
| 485 } |
| 486 |
| 487 FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseWheel(CPDFSDK_PageView* pPageView, |
| 488 CPDFSDK_Annot* pAnnot, |
| 489 FX_DWORD nFlags, |
| 490 short zDelta, |
| 491 const CPDF_Point& point) { |
| 492 ASSERT(pAnnot != NULL); |
| 493 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 494 |
| 495 if (sSubType == BFFT_SIGNATURE) { |
| 496 } else { |
| 497 if (m_pFormFiller) |
| 498 return m_pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, |
| 499 point); |
| 500 } |
| 501 |
| 502 return FALSE; |
| 503 } |
| 504 |
| 505 FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonDown(CPDFSDK_PageView* pPageView, |
| 506 CPDFSDK_Annot* pAnnot, |
| 507 FX_DWORD nFlags, |
| 508 const CPDF_Point& point) { |
| 509 ASSERT(pAnnot != NULL); |
| 510 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 511 |
| 512 if (sSubType == BFFT_SIGNATURE) { |
| 513 } else { |
| 514 if (m_pFormFiller) |
| 515 return m_pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point); |
| 516 } |
| 517 |
| 518 return FALSE; |
| 519 } |
| 520 FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonUp(CPDFSDK_PageView* pPageView, |
| 521 CPDFSDK_Annot* pAnnot, |
| 522 FX_DWORD nFlags, |
| 523 const CPDF_Point& point) { |
| 524 ASSERT(pAnnot != NULL); |
| 525 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 526 |
| 527 if (sSubType == BFFT_SIGNATURE) { |
| 528 } else { |
| 529 if (m_pFormFiller) |
| 530 return m_pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point); |
| 531 } |
| 532 |
| 533 return FALSE; |
| 534 } |
| 535 |
| 536 FX_BOOL CPDFSDK_BFAnnotHandler::OnChar(CPDFSDK_Annot* pAnnot, |
| 537 FX_DWORD nChar, |
| 538 FX_DWORD nFlags) { |
| 539 ASSERT(pAnnot != NULL); |
| 540 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 541 |
| 542 if (sSubType == BFFT_SIGNATURE) { |
| 543 } else { |
| 544 if (m_pFormFiller) |
| 545 return m_pFormFiller->OnChar(pAnnot, nChar, nFlags); |
| 546 } |
| 547 |
| 548 return FALSE; |
| 549 } |
| 550 |
| 551 FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyDown(CPDFSDK_Annot* pAnnot, |
| 552 int nKeyCode, |
| 553 int nFlag) { |
| 554 ASSERT(pAnnot != NULL); |
| 555 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 556 |
| 557 if (sSubType == BFFT_SIGNATURE) { |
| 558 } else { |
| 559 if (m_pFormFiller) |
| 560 return m_pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlag); |
| 561 } |
| 562 |
| 563 return FALSE; |
| 564 } |
| 565 |
| 566 FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyUp(CPDFSDK_Annot* pAnnot, |
| 567 int nKeyCode, |
| 568 int nFlag) { |
| 569 return FALSE; |
| 570 } |
| 571 void CPDFSDK_BFAnnotHandler::OnCreate(CPDFSDK_Annot* pAnnot) { |
| 572 ASSERT(pAnnot != NULL); |
| 573 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 574 |
| 575 if (sSubType == BFFT_SIGNATURE) { |
| 576 } else { |
| 577 if (m_pFormFiller) |
| 578 m_pFormFiller->OnCreate(pAnnot); |
| 579 } |
| 580 } |
| 581 |
| 582 void CPDFSDK_BFAnnotHandler::OnLoad(CPDFSDK_Annot* pAnnot) { |
| 583 ASSERT(pAnnot != NULL); |
| 584 |
| 585 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 586 |
| 587 if (sSubType == BFFT_SIGNATURE) { |
| 588 } else { |
| 589 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; |
| 590 if (!pWidget->IsAppearanceValid()) |
| 591 pWidget->ResetAppearance(NULL, FALSE); |
| 592 |
| 593 int nFieldType = pWidget->GetFieldType(); |
| 594 if (nFieldType == FIELDTYPE_TEXTFIELD || nFieldType == FIELDTYPE_COMBOBOX) { |
| 595 FX_BOOL bFormated = FALSE; |
| 596 CFX_WideString sValue = pWidget->OnFormat(bFormated); |
| 597 if (bFormated && nFieldType == FIELDTYPE_COMBOBOX) { |
| 598 pWidget->ResetAppearance(sValue.c_str(), FALSE); |
| 599 } |
| 600 } |
| 601 |
| 602 if (m_pFormFiller) |
| 603 m_pFormFiller->OnLoad(pAnnot); |
| 604 } |
| 605 } |
| 606 |
| 607 FX_BOOL CPDFSDK_BFAnnotHandler::OnSetFocus(CPDFSDK_Annot* pAnnot, |
| 608 FX_DWORD nFlag) { |
| 609 ASSERT(pAnnot != NULL); |
| 610 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 611 |
| 612 if (sSubType == BFFT_SIGNATURE) { |
| 613 } else { |
| 614 if (m_pFormFiller) |
| 615 return m_pFormFiller->OnSetFocus(pAnnot, nFlag); |
| 616 } |
| 617 |
| 618 return TRUE; |
| 619 } |
| 620 FX_BOOL CPDFSDK_BFAnnotHandler::OnKillFocus(CPDFSDK_Annot* pAnnot, |
| 621 FX_DWORD nFlag) { |
| 622 ASSERT(pAnnot != NULL); |
| 623 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 624 |
| 625 if (sSubType == BFFT_SIGNATURE) { |
| 626 } else { |
| 627 if (m_pFormFiller) |
| 628 return m_pFormFiller->OnKillFocus(pAnnot, nFlag); |
| 629 } |
| 630 |
| 631 return TRUE; |
| 632 } |
| 633 |
| 634 CPDF_Rect CPDFSDK_BFAnnotHandler::GetViewBBox(CPDFSDK_PageView* pPageView, |
| 635 CPDFSDK_Annot* pAnnot) { |
| 636 ASSERT(pAnnot != NULL); |
| 637 CFX_ByteString sSubType = pAnnot->GetSubType(); |
| 638 |
| 639 if (sSubType == BFFT_SIGNATURE) { |
| 640 } else { |
| 641 if (m_pFormFiller) |
| 642 return m_pFormFiller->GetViewBBox(pPageView, pAnnot); |
| 643 } |
| 644 |
| 645 return CPDF_Rect(0, 0, 0, 0); |
| 646 } |
| 647 |
| 648 FX_BOOL CPDFSDK_BFAnnotHandler::HitTest(CPDFSDK_PageView* pPageView, |
| 649 CPDFSDK_Annot* pAnnot, |
| 650 const CPDF_Point& point) { |
| 651 ASSERT(pPageView); |
| 652 ASSERT(pAnnot); |
| 653 |
| 654 CPDF_Rect rect = GetViewBBox(pPageView, pAnnot); |
| 655 return rect.Contains(point.x, point.y); |
| 656 } |
| 657 |
| 658 // CReader_AnnotIteratorEx |
| 659 |
| 660 CPDFSDK_AnnotIterator::CPDFSDK_AnnotIterator(CPDFSDK_PageView* pPageView, |
| 661 FX_BOOL bReverse, |
| 662 FX_BOOL bIgnoreTopmost /*=FALSE*/, |
| 663 FX_BOOL bCircle /*=FALSE*/, |
| 664 CFX_PtrArray* pList /*=NULL*/) { |
| 665 ASSERT(pPageView); |
| 666 m_bReverse = bReverse; |
| 667 m_bIgnoreTopmost = bIgnoreTopmost; |
| 668 m_bCircle = bCircle; |
| 669 m_pIteratorAnnotList.RemoveAll(); |
| 670 InitIteratorAnnotList(pPageView, pList); |
| 671 } |
| 672 |
| 673 CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot(const CPDFSDK_Annot* pCurrent) { |
| 674 int index = -1; |
| 675 int nCount = m_pIteratorAnnotList.GetSize(); |
| 676 if (pCurrent) { |
| 677 for (int i = 0; i < nCount; i++) { |
| 678 CPDFSDK_Annot* pReaderAnnot = |
| 679 (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(i); |
| 680 if (pReaderAnnot == pCurrent) { |
| 681 index = i; |
| 682 break; |
| 683 } |
| 684 } |
| 685 } |
| 686 return NextAnnot(index); |
| 687 } |
| 688 CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot(const CPDFSDK_Annot* pCurrent) { |
| 689 int index = -1; |
| 690 int nCount = m_pIteratorAnnotList.GetSize(); |
| 691 if (pCurrent) { |
| 692 for (int i = 0; i < nCount; i++) { |
| 693 CPDFSDK_Annot* pReaderAnnot = |
| 694 (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(i); |
| 695 if (pReaderAnnot == pCurrent) { |
| 696 index = i; |
| 697 break; |
| 698 } |
| 699 } |
| 700 } |
| 701 return PrevAnnot(index); |
| 702 } |
| 703 CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot(int& index) { |
| 704 int nCount = m_pIteratorAnnotList.GetSize(); |
| 705 if (nCount <= 0) |
| 706 index = -1; |
| 707 else { |
| 708 if (index < 0) { |
| 709 index = 0; |
| 710 } else { |
| 711 if (m_bCircle) { |
| 712 index = (index < nCount - 1) ? (index + 1) : 0; |
| 713 } else { |
| 714 index = (index < nCount - 1) ? (index + 1) : -1; |
| 715 } |
| 716 } |
| 717 } |
| 718 return (index < 0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index); |
| 719 } |
| 720 |
| 721 CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot(int& index) { |
| 722 int nCount = m_pIteratorAnnotList.GetSize(); |
| 723 if (nCount <= 0) |
| 724 index = -1; |
| 725 else { |
| 726 if (index < 0) { |
| 727 index = nCount - 1; |
| 728 } else { |
| 729 if (m_bCircle) { |
| 730 index = (index > 0) ? (index - 1) : nCount - 1; |
| 731 } else { |
| 732 index = (index > 0) ? (index - 1) : -1; |
| 733 } |
| 734 } |
| 735 } |
| 736 return (index < 0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index); |
| 737 } |
| 738 |
| 739 CPDFSDK_Annot* CPDFSDK_AnnotIterator::Next(const CPDFSDK_Annot* pCurrent) { |
| 740 return (m_bReverse) ? PrevAnnot(pCurrent) : NextAnnot(pCurrent); |
| 741 } |
| 742 |
| 743 CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(const CPDFSDK_Annot* pCurrent) { |
| 744 return (m_bReverse) ? NextAnnot(pCurrent) : PrevAnnot(pCurrent); |
| 745 } |
| 746 |
| 747 CPDFSDK_Annot* CPDFSDK_AnnotIterator::Next(int& index) { |
| 748 return (m_bReverse) ? PrevAnnot(index) : NextAnnot(index); |
| 749 } |
| 750 |
| 751 CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(int& index) { |
| 752 return (m_bReverse) ? NextAnnot(index) : PrevAnnot(index); |
| 753 } |
| 754 |
| 755 void CPDFSDK_AnnotIterator::InsertSort(CFX_PtrArray& arrayList, |
| 756 AI_COMPARE pCompare) { |
| 757 for (int i = 1; i < arrayList.GetSize(); i++) { |
| 758 if (pCompare((CPDFSDK_Annot*)(arrayList[i]), |
| 759 (CPDFSDK_Annot*)(arrayList[i - 1])) < 0) { |
| 760 int j = i - 1; |
| 761 CPDFSDK_Annot* pTemp = (CPDFSDK_Annot*)arrayList[i]; |
| 762 |
| 763 do { |
| 764 arrayList[j + 1] = arrayList[j]; |
| 765 } while (--j >= 0 && pCompare(pTemp, (CPDFSDK_Annot*)arrayList[j]) < 0); |
| 766 |
| 767 arrayList[j + 1] = pTemp; |
| 768 } |
| 769 } |
| 770 } |
| 771 |
| 772 int LyOrderCompare(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) { |
| 773 if (p1->GetLayoutOrder() < p2->GetLayoutOrder()) |
| 774 return -1; |
| 775 if (p1->GetLayoutOrder() > p2->GetLayoutOrder()) |
| 776 return 1; |
| 777 return 0; |
| 778 } |
| 779 |
| 780 FX_BOOL CPDFSDK_AnnotIterator::InitIteratorAnnotList( |
| 781 CPDFSDK_PageView* pPageView, |
| 782 CFX_PtrArray* pAnnotList) { |
| 783 ASSERT(pPageView); |
| 784 |
| 785 if (pAnnotList == NULL) { |
| 786 pAnnotList = pPageView->GetAnnotList(); |
| 787 } |
| 788 |
| 789 m_pIteratorAnnotList.RemoveAll(); |
| 790 if (!pAnnotList) |
| 185 return FALSE; | 791 return FALSE; |
| 186 } | 792 |
| 187 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel(CPDFSDK_PageView * pPageView
, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) | 793 CPDFSDK_Annot* pTopMostAnnot = |
| 188 { | 794 (m_bIgnoreTopmost) ? NULL : pPageView->GetFocusAnnot(); |
| 189 ASSERT(pAnnot != NULL); | 795 |
| 190 | 796 int nCount = pAnnotList->GetSize(); |
| 191 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | 797 |
| 192 { | 798 for (int i = nCount - 1; i >= 0; i--) { |
| 193 return pAnnotHandler->OnMouseWheel(pPageView, pAnnot,nFlags,zDelta, poin
t); | 799 CPDFSDK_Annot* pReaderAnnot = (CPDFSDK_Annot*)pAnnotList->GetAt(i); |
| 194 } | 800 m_pIteratorAnnotList.Add(pReaderAnnot); |
| 195 return FALSE; | 801 } |
| 196 } | 802 |
| 197 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown(CPDFSDK_PageView * pPageVie
w, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | 803 InsertSort(m_pIteratorAnnotList, &LyOrderCompare); |
| 198 { | 804 |
| 199 ASSERT(pAnnot != NULL); | 805 if (pTopMostAnnot) { |
| 200 | 806 for (int i = 0; i < nCount; i++) { |
| 201 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | 807 CPDFSDK_Annot* pReaderAnnot = |
| 202 { | 808 (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(i); |
| 203 return pAnnotHandler->OnRButtonDown(pPageView, pAnnot, nFlags, point); | 809 if (pReaderAnnot == pTopMostAnnot) { |
| 204 } | 810 m_pIteratorAnnotList.RemoveAt(i); |
| 205 return FALSE; | 811 m_pIteratorAnnotList.InsertAt(0, pReaderAnnot); |
| 206 } | 812 break; |
| 207 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp(CPDFSDK_PageView * pPageView,
CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | 813 } |
| 208 { | 814 } |
| 209 ASSERT(pAnnot != NULL); | 815 } |
| 210 | 816 |
| 211 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | 817 return TRUE; |
| 212 { | 818 } |
| 213 return pAnnotHandler->OnRButtonUp(pPageView, pAnnot, nFlags, point); | |
| 214 } | |
| 215 return FALSE; | |
| 216 } | |
| 217 | |
| 218 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter(CPDFSDK_PageView * pPageView, C
PDFSDK_Annot* pAnnot, FX_DWORD nFlag) | |
| 219 { | |
| 220 ASSERT(pAnnot != NULL); | |
| 221 | |
| 222 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | |
| 223 { | |
| 224 pAnnotHandler->OnMouseEnter(pPageView, pAnnot, nFlag); | |
| 225 } | |
| 226 return ; | |
| 227 } | |
| 228 | |
| 229 void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit(CPDFSDK_PageView * pPageView, CP
DFSDK_Annot* pAnnot, FX_DWORD nFlag) | |
| 230 { | |
| 231 ASSERT(pAnnot != NULL); | |
| 232 | |
| 233 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | |
| 234 { | |
| 235 pAnnotHandler->OnMouseExit(pPageView, pAnnot, nFlag); | |
| 236 } | |
| 237 return; | |
| 238 } | |
| 239 | |
| 240 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nC
har, FX_DWORD nFlags) | |
| 241 { | |
| 242 | |
| 243 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | |
| 244 { | |
| 245 return pAnnotHandler->OnChar(pAnnot,nChar, nFlags); | |
| 246 } | |
| 247 return FALSE; | |
| 248 | |
| 249 } | |
| 250 | |
| 251 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot,
int nKeyCode, int nFlag) | |
| 252 { | |
| 253 | |
| 254 if (!m_pApp->FFI_IsCTRLKeyDown(nFlag) && !m_pApp->FFI_IsALTKeyDown(nFlag)) | |
| 255 { | |
| 256 CPDFSDK_PageView* pPage = pAnnot->GetPageView(); | |
| 257 CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot(); | |
| 258 if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) | |
| 259 { | |
| 260 CPDFSDK_Annot* pNext = GetNextAnnot(pFocusAnnot, !m_pApp->FFI_IsSHIF
TKeyDown(nFlag)); | |
| 261 | |
| 262 if(pNext && pNext != pFocusAnnot) | |
| 263 { | |
| 264 CPDFSDK_Document* pDocument = pPage->GetSDKDocument(); | |
| 265 pDocument->SetFocusAnnot(pNext); | |
| 266 return TRUE; | |
| 267 } | |
| 268 } | |
| 269 } | |
| 270 | |
| 271 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | |
| 272 { | |
| 273 return pAnnotHandler->OnKeyDown(pAnnot,nKeyCode, nFlag); | |
| 274 } | |
| 275 return FALSE; | |
| 276 } | |
| 277 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, in
t nKeyCode, int nFlag) | |
| 278 { | |
| 279 return FALSE; | |
| 280 } | |
| 281 | |
| 282 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus(CPDFSDK_Annot* pAnnot,
FX_DWORD nFlag) | |
| 283 { | |
| 284 ASSERT(pAnnot != NULL); | |
| 285 | |
| 286 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | |
| 287 { | |
| 288 if (pAnnotHandler->OnSetFocus(pAnnot, nFlag)) | |
| 289 { | |
| 290 CPDFSDK_PageView* pPage = pAnnot->GetPageView(); | |
| 291 pPage->GetSDKDocument(); | |
| 292 return TRUE; | |
| 293 } | |
| 294 } | |
| 295 return FALSE; | |
| 296 } | |
| 297 | |
| 298 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus(CPDFSDK_Annot* pAnnot
, FX_DWORD nFlag) | |
| 299 { | |
| 300 ASSERT(pAnnot); | |
| 301 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | |
| 302 return pAnnotHandler->OnKillFocus(pAnnot, nFlag); | |
| 303 | |
| 304 return FALSE; | |
| 305 } | |
| 306 | |
| 307 CPDF_Rect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox(CPDFSDK_PageView *pPage
View, CPDFSDK_Annot* pAnnot) | |
| 308 { | |
| 309 ASSERT(pAnnot); | |
| 310 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | |
| 311 return pAnnotHandler->GetViewBBox(pPageView, pAnnot); | |
| 312 | |
| 313 return pAnnot->GetRect(); | |
| 314 } | |
| 315 | |
| 316 FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView *pPageView, CP
DFSDK_Annot* pAnnot, const CPDF_Point& point) | |
| 317 { | |
| 318 ASSERT(pAnnot); | |
| 319 if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) | |
| 320 { | |
| 321 if (pAnnotHandler->CanAnswer(pAnnot)) | |
| 322 return pAnnotHandler->HitTest(pPageView, pAnnot, point); | |
| 323 } | |
| 324 return FALSE; | |
| 325 } | |
| 326 | |
| 327 CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,F
X_BOOL bNext) | |
| 328 { | |
| 329 CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), "Widget", ""); | |
| 330 return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot); | |
| 331 } | |
| 332 | |
| 333 FX_BOOL CPDFSDK_BFAnnotHandler::CanAnswer(CPDFSDK_Annot* pAnnot) | |
| 334 { | |
| 335 ASSERT(pAnnot->GetType() == "Widget"); | |
| 336 if (pAnnot->GetSubType() == BFFT_SIGNATURE) | |
| 337 return FALSE; | |
| 338 | |
| 339 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; | |
| 340 if (!pWidget->IsVisible()) | |
| 341 return FALSE; | |
| 342 | |
| 343 int nFieldFlags = pWidget->GetFieldFlags(); | |
| 344 if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY) | |
| 345 return FALSE; | |
| 346 | |
| 347 if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON) | |
| 348 return TRUE; | |
| 349 | |
| 350 CPDF_Page* pPage = pWidget->GetPDFPage(); | |
| 351 CPDF_Document* pDocument = pPage->m_pDocument; | |
| 352 FX_DWORD dwPermissions = pDocument->GetUserPermissions(); | |
| 353 return (dwPermissions & FPDFPERM_FILL_FORM) || | |
| 354 (dwPermissions & FPDFPERM_ANNOT_FORM); | |
| 355 } | |
| 356 | |
| 357 CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_Page
View* pPage) | |
| 358 { | |
| 359 CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument(); | |
| 360 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm(); | |
| 361 CPDF_FormControl* pCtrl = CPDFSDK_Widget::GetFormControl(pInterForm->GetInte
rForm(), pAnnot->GetAnnotDict()); | |
| 362 if (!pCtrl) | |
| 363 return nullptr; | |
| 364 | |
| 365 CPDFSDK_Widget* pWidget = new CPDFSDK_Widget(pAnnot, pPage, pInterForm); | |
| 366 pInterForm->AddMap(pCtrl, pWidget); | |
| 367 CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); | |
| 368 if (pPDFInterForm && pPDFInterForm->NeedConstructAP()) | |
| 369 pWidget->ResetAppearance(nullptr, FALSE); | |
| 370 | |
| 371 return pWidget; | |
| 372 } | |
| 373 | |
| 374 void CPDFSDK_BFAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) | |
| 375 { | |
| 376 ASSERT(pAnnot != NULL); | |
| 377 | |
| 378 if (m_pFormFiller) | |
| 379 m_pFormFiller->OnDelete(pAnnot); | |
| 380 | |
| 381 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; | |
| 382 CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm(); | |
| 383 ASSERT(pInterForm != NULL); | |
| 384 | |
| 385 CPDF_FormControl* pCtrol = pWidget->GetFormControl(); | |
| 386 pInterForm->RemoveMap(pCtrol); | |
| 387 | |
| 388 | |
| 389 delete pWidget; | |
| 390 } | |
| 391 | |
| 392 | |
| 393 void CPDFSDK_BFAnnotHandler::OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot*
pAnnot, CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, FX_DWORD dwFlags) | |
| 394 { | |
| 395 ASSERT(pAnnot != NULL); | |
| 396 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 397 | |
| 398 if (sSubType == BFFT_SIGNATURE) | |
| 399 { | |
| 400 pAnnot->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL); | |
| 401 } | |
| 402 else | |
| 403 { | |
| 404 if (m_pFormFiller) | |
| 405 { | |
| 406 m_pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFl
ags); | |
| 407 } | |
| 408 } | |
| 409 } | |
| 410 | |
| 411 void CPDFSDK_BFAnnotHandler::OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_A
nnot* pAnnot, FX_DWORD nFlag) | |
| 412 { | |
| 413 ASSERT(pAnnot != NULL); | |
| 414 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 415 | |
| 416 if (sSubType == BFFT_SIGNATURE) | |
| 417 { | |
| 418 } | |
| 419 else | |
| 420 { | |
| 421 if (m_pFormFiller) | |
| 422 m_pFormFiller->OnMouseEnter(pPageView, pAnnot, nFlag); | |
| 423 } | |
| 424 | |
| 425 | |
| 426 } | |
| 427 void CPDFSDK_BFAnnotHandler::OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_An
not* pAnnot, FX_DWORD nFlag) | |
| 428 { | |
| 429 ASSERT(pAnnot != NULL); | |
| 430 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 431 | |
| 432 if (sSubType == BFFT_SIGNATURE) | |
| 433 { | |
| 434 } | |
| 435 else | |
| 436 { | |
| 437 if (m_pFormFiller) | |
| 438 m_pFormFiller->OnMouseExit(pPageView, pAnnot, nFlag); | |
| 439 } | |
| 440 | |
| 441 } | |
| 442 FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFS
DK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | |
| 443 { | |
| 444 ASSERT(pAnnot != NULL); | |
| 445 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 446 | |
| 447 if (sSubType == BFFT_SIGNATURE) | |
| 448 { | |
| 449 } | |
| 450 else | |
| 451 { | |
| 452 if (m_pFormFiller) | |
| 453 return m_pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point
); | |
| 454 } | |
| 455 | |
| 456 return FALSE; | |
| 457 } | |
| 458 | |
| 459 FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK
_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | |
| 460 { | |
| 461 ASSERT(pAnnot != NULL); | |
| 462 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 463 | |
| 464 if (sSubType == BFFT_SIGNATURE) | |
| 465 { | |
| 466 } | |
| 467 else | |
| 468 { | |
| 469 if (m_pFormFiller) | |
| 470 return m_pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point); | |
| 471 } | |
| 472 | |
| 473 return FALSE; | |
| 474 } | |
| 475 | |
| 476 FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPD
FSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | |
| 477 { | |
| 478 ASSERT(pAnnot != NULL); | |
| 479 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 480 | |
| 481 if (sSubType == BFFT_SIGNATURE) | |
| 482 { | |
| 483 } | |
| 484 else | |
| 485 { | |
| 486 if (m_pFormFiller) | |
| 487 return m_pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, poi
nt); | |
| 488 } | |
| 489 | |
| 490 return FALSE; | |
| 491 } | |
| 492 | |
| 493 FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK
_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | |
| 494 { | |
| 495 ASSERT(pAnnot != NULL); | |
| 496 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 497 | |
| 498 if (sSubType == BFFT_SIGNATURE) | |
| 499 { | |
| 500 } | |
| 501 else | |
| 502 { | |
| 503 if (m_pFormFiller) | |
| 504 return m_pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point); | |
| 505 } | |
| 506 | |
| 507 return FALSE; | |
| 508 | |
| 509 } | |
| 510 | |
| 511 | |
| 512 FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSD
K_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) | |
| 513 { | |
| 514 ASSERT(pAnnot != NULL); | |
| 515 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 516 | |
| 517 if (sSubType == BFFT_SIGNATURE) | |
| 518 { | |
| 519 } | |
| 520 else | |
| 521 { | |
| 522 if (m_pFormFiller) | |
| 523 return m_pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta
,point); | |
| 524 } | |
| 525 | |
| 526 return FALSE; | |
| 527 } | |
| 528 | |
| 529 FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFS
DK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | |
| 530 { | |
| 531 ASSERT(pAnnot != NULL); | |
| 532 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 533 | |
| 534 if (sSubType == BFFT_SIGNATURE) | |
| 535 { | |
| 536 } | |
| 537 else | |
| 538 { | |
| 539 if (m_pFormFiller) | |
| 540 return m_pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point
); | |
| 541 } | |
| 542 | |
| 543 return FALSE; | |
| 544 } | |
| 545 FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK
_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) | |
| 546 { | |
| 547 ASSERT(pAnnot != NULL); | |
| 548 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 549 | |
| 550 if (sSubType == BFFT_SIGNATURE) | |
| 551 { | |
| 552 } | |
| 553 else | |
| 554 { | |
| 555 if (m_pFormFiller) | |
| 556 return m_pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point); | |
| 557 } | |
| 558 | |
| 559 return FALSE; | |
| 560 } | |
| 561 | |
| 562 FX_BOOL CPDFSDK_BFAnnotHandler::OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX
_DWORD nFlags) | |
| 563 { | |
| 564 ASSERT(pAnnot != NULL); | |
| 565 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 566 | |
| 567 if (sSubType == BFFT_SIGNATURE) | |
| 568 { | |
| 569 } | |
| 570 else | |
| 571 { | |
| 572 if (m_pFormFiller) | |
| 573 return m_pFormFiller->OnChar(pAnnot,nChar, nFlags); | |
| 574 } | |
| 575 | |
| 576 return FALSE; | |
| 577 } | |
| 578 | |
| 579 FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, i
nt nFlag) | |
| 580 { | |
| 581 ASSERT(pAnnot != NULL); | |
| 582 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 583 | |
| 584 if (sSubType == BFFT_SIGNATURE) | |
| 585 { | |
| 586 } | |
| 587 else | |
| 588 { | |
| 589 if (m_pFormFiller) | |
| 590 return m_pFormFiller->OnKeyDown(pAnnot,nKeyCode, nFlag); | |
| 591 } | |
| 592 | |
| 593 return FALSE; | |
| 594 } | |
| 595 | |
| 596 FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int
nFlag) | |
| 597 { | |
| 598 | |
| 599 return FALSE; | |
| 600 } | |
| 601 void CPDFSDK_BFAnnotHandler::OnCreate(CPDFSDK_Annot* pAnnot) | |
| 602 { | |
| 603 ASSERT(pAnnot != NULL); | |
| 604 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 605 | |
| 606 if (sSubType == BFFT_SIGNATURE) | |
| 607 { | |
| 608 } | |
| 609 else | |
| 610 { | |
| 611 if (m_pFormFiller) | |
| 612 m_pFormFiller->OnCreate(pAnnot); | |
| 613 } | |
| 614 } | |
| 615 | |
| 616 void CPDFSDK_BFAnnotHandler::OnLoad(CPDFSDK_Annot* pAnnot) | |
| 617 { | |
| 618 ASSERT(pAnnot != NULL); | |
| 619 | |
| 620 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 621 | |
| 622 if (sSubType == BFFT_SIGNATURE) | |
| 623 { | |
| 624 } | |
| 625 else | |
| 626 { | |
| 627 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; | |
| 628 if (!pWidget->IsAppearanceValid()) | |
| 629 pWidget->ResetAppearance(NULL, FALSE); | |
| 630 | |
| 631 int nFieldType = pWidget->GetFieldType(); | |
| 632 if (nFieldType == FIELDTYPE_TEXTFIELD || nFieldType == FIELDTYPE_COMBOBO
X) | |
| 633 { | |
| 634 FX_BOOL bFormated = FALSE; | |
| 635 CFX_WideString sValue = pWidget->OnFormat(bFormated); | |
| 636 if (bFormated && nFieldType == FIELDTYPE_COMBOBOX) | |
| 637 { | |
| 638 pWidget->ResetAppearance(sValue.c_str(), FALSE); | |
| 639 } | |
| 640 } | |
| 641 | |
| 642 if (m_pFormFiller) | |
| 643 m_pFormFiller->OnLoad(pAnnot); | |
| 644 } | |
| 645 } | |
| 646 | |
| 647 FX_BOOL CPDFSDK_BFAnnotHandler::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag
) | |
| 648 { | |
| 649 ASSERT(pAnnot != NULL); | |
| 650 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 651 | |
| 652 if (sSubType == BFFT_SIGNATURE) | |
| 653 { | |
| 654 } | |
| 655 else | |
| 656 { | |
| 657 if (m_pFormFiller) | |
| 658 return m_pFormFiller->OnSetFocus(pAnnot,nFlag); | |
| 659 } | |
| 660 | |
| 661 return TRUE; | |
| 662 } | |
| 663 FX_BOOL CPDFSDK_BFAnnotHandler::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFla
g) | |
| 664 { | |
| 665 ASSERT(pAnnot != NULL); | |
| 666 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 667 | |
| 668 if (sSubType == BFFT_SIGNATURE) | |
| 669 { | |
| 670 } | |
| 671 else | |
| 672 { | |
| 673 if (m_pFormFiller) | |
| 674 return m_pFormFiller->OnKillFocus(pAnnot,nFlag); | |
| 675 } | |
| 676 | |
| 677 return TRUE; | |
| 678 } | |
| 679 | |
| 680 CPDF_Rect CPDFSDK_BFAnnotHandler::GetViewBBox(CPDFSDK_PageView *pPageView, CPDFS
DK_Annot* pAnnot) | |
| 681 { | |
| 682 ASSERT(pAnnot != NULL); | |
| 683 CFX_ByteString sSubType = pAnnot->GetSubType(); | |
| 684 | |
| 685 if (sSubType == BFFT_SIGNATURE) | |
| 686 { | |
| 687 } | |
| 688 else | |
| 689 { | |
| 690 if (m_pFormFiller) | |
| 691 return m_pFormFiller->GetViewBBox(pPageView, pAnnot); | |
| 692 | |
| 693 } | |
| 694 | |
| 695 return CPDF_Rect(0,0,0,0); | |
| 696 } | |
| 697 | |
| 698 FX_BOOL CPDFSDK_BFAnnotHandler::HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Ann
ot* pAnnot, const CPDF_Point& point) | |
| 699 { | |
| 700 ASSERT(pPageView); | |
| 701 ASSERT(pAnnot); | |
| 702 | |
| 703 CPDF_Rect rect = GetViewBBox(pPageView, pAnnot); | |
| 704 return rect.Contains(point.x, point.y); | |
| 705 } | |
| 706 | |
| 707 //CReader_AnnotIteratorEx | |
| 708 | |
| 709 CPDFSDK_AnnotIterator::CPDFSDK_AnnotIterator(CPDFSDK_PageView * pPageView,FX_BOO
L bReverse, | |
| 710 FX_BOOL bIgnoreTopmost/*=FALSE*
/, | |
| 711 FX_BOOL bCircle/*=FALSE*/, | |
| 712 CFX_PtrArray *pList/*=NULL*/) | |
| 713 { | |
| 714 ASSERT(pPageView); | |
| 715 m_bReverse=bReverse; | |
| 716 m_bIgnoreTopmost= bIgnoreTopmost; | |
| 717 m_bCircle=bCircle; | |
| 718 m_pIteratorAnnotList.RemoveAll(); | |
| 719 InitIteratorAnnotList(pPageView,pList); | |
| 720 } | |
| 721 | |
| 722 CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot (const CPDFSDK_Annot* pCurrent) | |
| 723 { | |
| 724 | |
| 725 int index = -1; | |
| 726 int nCount = m_pIteratorAnnotList.GetSize(); | |
| 727 if (pCurrent) { | |
| 728 for(int i=0;i<nCount;i++){ | |
| 729 CPDFSDK_Annot * pReaderAnnot= (CPDFSDK_Annot *)m_pIteratorAnnotList.
GetAt(i); | |
| 730 if(pReaderAnnot ==pCurrent){ | |
| 731 index=i; | |
| 732 break; | |
| 733 } | |
| 734 } | |
| 735 } | |
| 736 return NextAnnot(index); | |
| 737 } | |
| 738 CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot (const CPDFSDK_Annot*pCurrent) | |
| 739 { | |
| 740 int index = -1; | |
| 741 int nCount = m_pIteratorAnnotList.GetSize(); | |
| 742 if(pCurrent){ | |
| 743 for(int i=0;i<nCount;i++){ | |
| 744 CPDFSDK_Annot * pReaderAnnot= (CPDFSDK_Annot*)m_pIteratorAnnotList.G
etAt(i); | |
| 745 if(pReaderAnnot ==pCurrent){ | |
| 746 index=i; | |
| 747 break; | |
| 748 } | |
| 749 } | |
| 750 } | |
| 751 return PrevAnnot(index); | |
| 752 } | |
| 753 CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot (int& index) | |
| 754 { | |
| 755 | |
| 756 int nCount=m_pIteratorAnnotList.GetSize(); | |
| 757 if(nCount<=0) index=-1; | |
| 758 else{ | |
| 759 if(index<0){ | |
| 760 index=0; | |
| 761 } | |
| 762 else{ | |
| 763 if(m_bCircle){ | |
| 764 index=( index <nCount-1) ? (index+1) :0; | |
| 765 } | |
| 766 else{ | |
| 767 index=( index <nCount-1) ? (index+1) :-1; | |
| 768 } | |
| 769 | |
| 770 } | |
| 771 } | |
| 772 return (index <0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index)
; | |
| 773 } | |
| 774 | |
| 775 | |
| 776 CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot (int& index) | |
| 777 { | |
| 778 | |
| 779 int nCount=m_pIteratorAnnotList.GetSize(); | |
| 780 if(nCount<=0) index=-1; | |
| 781 else{ | |
| 782 if(index<0){ | |
| 783 index=nCount-1; | |
| 784 } | |
| 785 else{ | |
| 786 if(m_bCircle){ | |
| 787 index = ( index >0) ? (index-1) :nCount-1; | |
| 788 } | |
| 789 else{ | |
| 790 index = ( index >0) ? (index-1) :-1; | |
| 791 } | |
| 792 } | |
| 793 } | |
| 794 return (index <0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index)
; | |
| 795 } | |
| 796 | |
| 797 | |
| 798 CPDFSDK_Annot*CPDFSDK_AnnotIterator::Next(const CPDFSDK_Annot* pCurrent) | |
| 799 { | |
| 800 | |
| 801 return (m_bReverse) ? PrevAnnot(pCurrent):NextAnnot(pCurrent); | |
| 802 | |
| 803 } | |
| 804 | |
| 805 CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(const CPDFSDK_Annot* pCurrent) | |
| 806 { | |
| 807 | |
| 808 return (m_bReverse) ? NextAnnot(pCurrent):PrevAnnot(pCurrent); | |
| 809 } | |
| 810 | |
| 811 CPDFSDK_Annot*CPDFSDK_AnnotIterator::Next(int& index ) | |
| 812 { | |
| 813 | |
| 814 return (m_bReverse) ? PrevAnnot(index):NextAnnot(index); | |
| 815 | |
| 816 } | |
| 817 | |
| 818 CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(int& index ) | |
| 819 { | |
| 820 | |
| 821 return (m_bReverse) ? NextAnnot(index):PrevAnnot(index); | |
| 822 } | |
| 823 | |
| 824 | |
| 825 void CPDFSDK_AnnotIterator::InsertSort(CFX_PtrArray &arrayList, AI_COMPARE pComp
are) | |
| 826 { | |
| 827 for (int i = 1; i < arrayList.GetSize(); i++) | |
| 828 { | |
| 829 if (pCompare((CPDFSDK_Annot*)(arrayList[i]) , (CPDFSDK_Annot*)(arrayList
[i-1])) < 0) | |
| 830 { | |
| 831 int j = i-1; | |
| 832 CPDFSDK_Annot* pTemp = (CPDFSDK_Annot*)arrayList[i]; | |
| 833 | |
| 834 do | |
| 835 { | |
| 836 arrayList[j + 1] = arrayList[j]; | |
| 837 } while (--j >= 0 && pCompare(pTemp, (CPDFSDK_Annot*)arrayList[j]) <
0); | |
| 838 | |
| 839 arrayList[j+1] = pTemp; | |
| 840 } | |
| 841 } | |
| 842 } | |
| 843 | |
| 844 int LyOrderCompare(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) | |
| 845 { | |
| 846 if (p1->GetLayoutOrder() < p2->GetLayoutOrder()) | |
| 847 return -1; | |
| 848 if (p1->GetLayoutOrder() > p2->GetLayoutOrder()) | |
| 849 return 1; | |
| 850 return 0; | |
| 851 } | |
| 852 | |
| 853 FX_BOOL CPDFSDK_AnnotIterator::InitIteratorAnnotList(CPDFSDK_PageView* pPageView
,CFX_PtrArray * pAnnotList) | |
| 854 { | |
| 855 ASSERT(pPageView); | |
| 856 | |
| 857 if(pAnnotList==NULL){ | |
| 858 pAnnotList=pPageView->GetAnnotList(); | |
| 859 } | |
| 860 | |
| 861 m_pIteratorAnnotList.RemoveAll(); | |
| 862 if(!pAnnotList) return FALSE; | |
| 863 | |
| 864 CPDFSDK_Annot * pTopMostAnnot= (m_bIgnoreTopmost) ? NULL : pPageView->GetFoc
usAnnot(); | |
| 865 | |
| 866 | |
| 867 int nCount =pAnnotList->GetSize(); | |
| 868 | |
| 869 for(int i = nCount- 1 ;i >= 0;i--) | |
| 870 { | |
| 871 CPDFSDK_Annot * pReaderAnnot= (CPDFSDK_Annot*)pAnnotList->GetAt(i); | |
| 872 m_pIteratorAnnotList.Add(pReaderAnnot); | |
| 873 } | |
| 874 | |
| 875 InsertSort(m_pIteratorAnnotList,&LyOrderCompare); | |
| 876 | |
| 877 if(pTopMostAnnot) | |
| 878 { | |
| 879 for(int i=0 ;i<nCount;i++) | |
| 880 { | |
| 881 CPDFSDK_Annot * pReaderAnnot = (CPDFSDK_Annot*)m_pIteratorAnnotList.
GetAt(i); | |
| 882 if(pReaderAnnot == pTopMostAnnot) | |
| 883 { | |
| 884 m_pIteratorAnnotList.RemoveAt(i); | |
| 885 m_pIteratorAnnotList.InsertAt(0, pReaderAnnot); | |
| 886 break; | |
| 887 } | |
| 888 } | |
| 889 } | |
| 890 | |
| 891 return TRUE; | |
| 892 } | |
| OLD | NEW |