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