Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: fpdfsdk/src/formfiller/FFL_IFormFiller.cpp

Issue 1265503005: clang-format all pdfium code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: sigh Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/formfiller/FFL_FormFiller.h" 7 #include "../../include/formfiller/FFL_FormFiller.h"
8 #include "../../include/formfiller/FFL_IFormFiller.h" 8 #include "../../include/formfiller/FFL_IFormFiller.h"
9 #include "../../include/formfiller/FFL_CheckBox.h" 9 #include "../../include/formfiller/FFL_CheckBox.h"
10 #include "../../include/formfiller/FFL_ComboBox.h" 10 #include "../../include/formfiller/FFL_ComboBox.h"
11 #include "../../include/formfiller/FFL_ListBox.h" 11 #include "../../include/formfiller/FFL_ListBox.h"
12 #include "../../include/formfiller/FFL_PushButton.h" 12 #include "../../include/formfiller/FFL_PushButton.h"
13 #include "../../include/formfiller/FFL_RadioButton.h" 13 #include "../../include/formfiller/FFL_RadioButton.h"
14 #include "../../include/formfiller/FFL_TextField.h" 14 #include "../../include/formfiller/FFL_TextField.h"
15 15
16 #define FFL_MAXLISTBOXHEIGHT 140.0f 16 #define FFL_MAXLISTBOXHEIGHT 140.0f
17 17
18 // HHOOK CFFL_IFormFiller::m_hookSheet = NULL; 18 // HHOOK CFFL_IFormFiller::m_hookSheet = NULL;
19 // MSG CFFL_IFormFiller::g_Msg; 19 // MSG CFFL_IFormFiller::g_Msg;
20 20
21 /* ----------------------------- CFFL_IFormFiller ----------------------------- */ 21 /* ----------------------------- CFFL_IFormFiller -----------------------------
22 22 */
23 CFFL_IFormFiller::CFFL_IFormFiller(CPDFDoc_Environment* pApp) : 23
24 m_pApp(pApp), 24 CFFL_IFormFiller::CFFL_IFormFiller(CPDFDoc_Environment* pApp)
25 m_bNotifying(FALSE) 25 : m_pApp(pApp), m_bNotifying(FALSE) {}
26 { 26
27 } 27 CFFL_IFormFiller::~CFFL_IFormFiller() {
28 28 for (auto& it : m_Maps)
29 CFFL_IFormFiller::~CFFL_IFormFiller() 29 delete it.second;
30 { 30 m_Maps.clear();
31 for (auto& it : m_Maps) 31 }
32 delete it.second; 32
33 m_Maps.clear(); 33 FX_BOOL CFFL_IFormFiller::Annot_HitTest(CPDFSDK_PageView* pPageView,
34 } 34 CPDFSDK_Annot* pAnnot,
35 35 CPDF_Point point) {
36 FX_BOOL CFFL_IFormFiller::Annot_HitTest(CPDFSDK_PageView* pPageView,CPDFSDK_Anno t* pAnnot, CPDF_Point point) 36 CPDF_Rect rc = pAnnot->GetRect();
37 { 37 if (rc.Contains(point.x, point.y))
38 CPDF_Rect rc = pAnnot->GetRect(); 38 return TRUE;
39 if(rc.Contains(point.x, point.y)) 39 return FALSE;
40 }
41
42 FX_RECT CFFL_IFormFiller::GetViewBBox(CPDFSDK_PageView* pPageView,
43 CPDFSDK_Annot* pAnnot) {
44 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
45 return pFormFiller->GetViewBBox(pPageView, pAnnot);
46
47 ASSERT(pPageView != NULL);
48
49 CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
50 CPDF_Rect rcAnnot;
51 pPDFAnnot->GetRect(rcAnnot);
52
53 CPDF_Rect rcWin = CPWL_Utils::InflateRect(rcAnnot, 1);
54 return rcWin.GetOutterRect();
55 }
56
57 void CFFL_IFormFiller::OnDraw(CPDFSDK_PageView* pPageView,
58 /*HDC hDC,*/ CPDFSDK_Annot* pAnnot,
59 CFX_RenderDevice* pDevice,
60 CPDF_Matrix* pUser2Device,
61 /*const CRect& rcWindow,*/ FX_DWORD dwFlags) {
62 ASSERT(pPageView != NULL);
63 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
64
65 if (IsVisible(pWidget)) {
66 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
67 if (pFormFiller->IsValid()) {
68 pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
69 pAnnot->GetPDFPage();
70
71 CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument();
72 if (pDocument->GetFocusAnnot() == pAnnot) {
73 CPDF_Rect rcFocus = pFormFiller->GetFocusBox(pPageView);
74 if (!rcFocus.IsEmpty()) {
75 CFX_PathData path;
76 path.SetPointCount(5);
77 path.SetPoint(0, rcFocus.left, rcFocus.top, FXPT_MOVETO);
78 path.SetPoint(1, rcFocus.left, rcFocus.bottom, FXPT_LINETO);
79 path.SetPoint(2, rcFocus.right, rcFocus.bottom, FXPT_LINETO);
80 path.SetPoint(3, rcFocus.right, rcFocus.top, FXPT_LINETO);
81 path.SetPoint(4, rcFocus.left, rcFocus.top, FXPT_LINETO);
82
83 CFX_GraphStateData gsd;
84 gsd.SetDashCount(1);
85 gsd.m_DashArray[0] = 1.0f;
86 gsd.m_DashPhase = 0;
87 gsd.m_LineWidth = 1.0f;
88 pDevice->DrawPath(&path, pUser2Device, &gsd, 0,
89 ArgbEncode(255, 0, 0, 0), FXFILL_ALTERNATE);
90 }
91 }
92 return;
93 }
94 }
95
96 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
97 pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, pUser2Device,
98 dwFlags);
99 else
100 pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
101
102 if (!IsReadOnly(pWidget) && IsFillingAllowed(pWidget))
103 pWidget->DrawShadow(pDevice, pPageView);
104 }
105 }
106
107 void CFFL_IFormFiller::OnCreate(CPDFSDK_Annot* pAnnot) {
108 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
109 pFormFiller->OnCreate(pAnnot);
110 }
111 }
112
113 void CFFL_IFormFiller::OnLoad(CPDFSDK_Annot* pAnnot) {
114 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
115 pFormFiller->OnLoad(pAnnot);
116 }
117 }
118
119 void CFFL_IFormFiller::OnDelete(CPDFSDK_Annot* pAnnot) {
120 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
121 pFormFiller->OnDelete(pAnnot);
122 }
123
124 UnRegisterFormFiller(pAnnot);
125 }
126
127 void CFFL_IFormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView,
128 CPDFSDK_Annot* pAnnot,
129 FX_UINT nFlag) {
130 ASSERT(pAnnot != NULL);
131 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
132
133 if (!m_bNotifying) {
134 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
135 if (pWidget->GetAAction(CPDF_AAction::CursorEnter)) {
136 m_bNotifying = TRUE;
137
138 int nValueAge = pWidget->GetValueAge();
139
140 pWidget->ClearAppModified();
141
142 ASSERT(pPageView != NULL);
143
144 PDFSDK_FieldAction fa;
145 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
146 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
147 pWidget->OnAAction(CPDF_AAction::CursorEnter, fa, pPageView);
148 m_bNotifying = FALSE;
149
150 // if ( !IsValidAnnot(pPageView, pAnnot) ) return;
151
152 if (pWidget->IsAppModified()) {
153 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
154 pFormFiller->ResetPDFWindow(pPageView,
155 pWidget->GetValueAge() == nValueAge);
156 }
157 }
158 }
159 }
160
161 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) {
162 pFormFiller->OnMouseEnter(pPageView, pAnnot);
163 }
164 }
165
166 void CFFL_IFormFiller::OnMouseExit(CPDFSDK_PageView* pPageView,
167 CPDFSDK_Annot* pAnnot,
168 FX_UINT nFlag) {
169 ASSERT(pAnnot != NULL);
170 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
171
172 if (!m_bNotifying) {
173 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
174 if (pWidget->GetAAction(CPDF_AAction::CursorExit)) {
175 m_bNotifying = TRUE;
176 pWidget->GetAppearanceAge();
177 int nValueAge = pWidget->GetValueAge();
178 pWidget->ClearAppModified();
179
180 ASSERT(pPageView != NULL);
181
182 PDFSDK_FieldAction fa;
183 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
184 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
185
186 pWidget->OnAAction(CPDF_AAction::CursorExit, fa, pPageView);
187 m_bNotifying = FALSE;
188
189 // if (!IsValidAnnot(pPageView, pAnnot)) return;
190
191 if (pWidget->IsAppModified()) {
192 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
193 pFormFiller->ResetPDFWindow(pPageView,
194 nValueAge == pWidget->GetValueAge());
195 }
196 }
197 }
198 }
199
200 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
201 pFormFiller->OnMouseExit(pPageView, pAnnot);
202 }
203 }
204
205 FX_BOOL CFFL_IFormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView,
206 CPDFSDK_Annot* pAnnot,
207 FX_UINT nFlags,
208 const CPDF_Point& point) {
209 ASSERT(pAnnot != NULL);
210 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
211
212 if (!m_bNotifying) {
213 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
214 if (Annot_HitTest(pPageView, pAnnot, point) &&
215 pWidget->GetAAction(CPDF_AAction::ButtonDown)) {
216 m_bNotifying = TRUE;
217 pWidget->GetAppearanceAge();
218 int nValueAge = pWidget->GetValueAge();
219 pWidget->ClearAppModified();
220
221 ASSERT(pPageView != NULL);
222
223 PDFSDK_FieldAction fa;
224 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlags);
225 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlags);
226 pWidget->OnAAction(CPDF_AAction::ButtonDown, fa, pPageView);
227 m_bNotifying = FALSE;
228
229 if (!IsValidAnnot(pPageView, pAnnot))
40 return TRUE; 230 return TRUE;
41 return FALSE; 231
42 } 232 if (pWidget->IsAppModified()) {
43 233 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
44 FX_RECT CFFL_IFormFiller::GetViewBBox(CPDFSDK_PageView* pPageView, CPDFSDK_Annot * pAnnot) 234 pFormFiller->ResetPDFWindow(pPageView,
45 { 235 nValueAge == pWidget->GetValueAge());
46 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 236 }
47 return pFormFiller->GetViewBBox(pPageView, pAnnot); 237 }
48 238 }
49 ASSERT(pPageView != NULL); 239 }
50 240
51 CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot(); 241 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
52 CPDF_Rect rcAnnot; 242 return pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point);
53 pPDFAnnot->GetRect(rcAnnot); 243 }
54 244
55 CPDF_Rect rcWin = CPWL_Utils::InflateRect(rcAnnot, 1); 245 return FALSE;
56 return rcWin.GetOutterRect(); 246 }
57 } 247
58 248 FX_BOOL CFFL_IFormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView,
59 void CFFL_IFormFiller::OnDraw(CPDFSDK_PageView* pPageView, /*HDC hDC,*/ CPDFSDK_ Annot* pAnnot, 249 CPDFSDK_Annot* pAnnot,
60 CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, 250 FX_UINT nFlags,
61 /*const CRect& rcWindow,*/ FX_DWORD dwFlags) 251 const CPDF_Point& point) {
62 { 252 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
63 ASSERT(pPageView != NULL); 253 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
64 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 254 CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument();
65 255
66 if (IsVisible(pWidget)) 256 switch (pWidget->GetFieldType()) {
67 {
68 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
69 {
70 if (pFormFiller->IsValid())
71 {
72 pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dw Flags);
73 pAnnot->GetPDFPage();
74
75 CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument();
76 if (pDocument->GetFocusAnnot() == pAnnot)
77 {
78 CPDF_Rect rcFocus = pFormFiller->GetFocusBox(pPageView);
79 if (!rcFocus.IsEmpty())
80 {
81 CFX_PathData path;
82 path.SetPointCount(5);
83 path.SetPoint(0, rcFocus.left, rcFocus.top, FXPT_MOVETO );
84 path.SetPoint(1, rcFocus.left, rcFocus.bottom, FXPT_LIN ETO);
85 path.SetPoint(2, rcFocus.right, rcFocus.bottom, FXPT_LI NETO);
86 path.SetPoint(3, rcFocus.right, rcFocus.top, FXPT_LINET O);
87 path.SetPoint(4, rcFocus.left, rcFocus.top, FXPT_LINETO );
88
89 CFX_GraphStateData gsd;
90 gsd.SetDashCount(1);
91 gsd.m_DashArray[0] = 1.0f;
92 gsd.m_DashPhase = 0;
93 gsd.m_LineWidth = 1.0f;
94 pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEnco de(255,0,0,0), FXFILL_ALTERNATE);
95 }
96 }
97 return;
98 }
99 }
100
101 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
102 pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, pUser2Device , dwFlags);
103 else
104 pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, N ULL);
105
106 if (!IsReadOnly(pWidget) && IsFillingAllowed(pWidget))
107 pWidget->DrawShadow(pDevice, pPageView);
108 }
109 }
110
111 void CFFL_IFormFiller::OnCreate(CPDFSDK_Annot* pAnnot)
112 {
113 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
114 {
115 pFormFiller->OnCreate(pAnnot);
116 }
117 }
118
119 void CFFL_IFormFiller::OnLoad(CPDFSDK_Annot* pAnnot)
120 {
121 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
122 {
123 pFormFiller->OnLoad(pAnnot);
124 }
125 }
126
127 void CFFL_IFormFiller::OnDelete(CPDFSDK_Annot* pAnnot)
128 {
129 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
130 {
131 pFormFiller->OnDelete(pAnnot);
132 }
133
134 UnRegisterFormFiller(pAnnot);
135 }
136
137 void CFFL_IFormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag)
138 {
139 ASSERT(pAnnot != NULL);
140 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
141
142 if (!m_bNotifying)
143 {
144 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
145 if (pWidget->GetAAction(CPDF_AAction::CursorEnter))
146 {
147 m_bNotifying = TRUE;
148
149 int nValueAge = pWidget->GetValueAge();
150
151 pWidget->ClearAppModified();
152
153 ASSERT(pPageView != NULL);
154
155
156
157 PDFSDK_FieldAction fa;
158 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
159 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
160 pWidget->OnAAction(CPDF_AAction::CursorEnter, fa, pPageView );
161 m_bNotifying = FALSE;
162
163 //if ( !IsValidAnnot(pPageView, pAnnot) ) return;
164
165 if (pWidget->IsAppModified())
166 {
167 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE) )
168 {
169 pFormFiller->ResetPDFWindow(pPageView, pWidget->GetValueAge( ) == nValueAge);
170 }
171 }
172 }
173 }
174
175 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE))
176 {
177 pFormFiller->OnMouseEnter(pPageView, pAnnot);
178 }
179 }
180
181 void CFFL_IFormFiller::OnMouseExit(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* p Annot, FX_UINT nFlag)
182 {
183 ASSERT(pAnnot != NULL);
184 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
185
186 if (!m_bNotifying)
187 {
188 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
189 if (pWidget->GetAAction(CPDF_AAction::CursorExit))
190 {
191 m_bNotifying = TRUE;
192 pWidget->GetAppearanceAge();
193 int nValueAge = pWidget->GetValueAge();
194 pWidget->ClearAppModified();
195
196 ASSERT(pPageView != NULL);
197
198
199
200 PDFSDK_FieldAction fa;
201 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
202 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
203
204 pWidget->OnAAction(CPDF_AAction::CursorExit, fa, pPageView);
205 m_bNotifying = FALSE;
206
207 //if (!IsValidAnnot(pPageView, pAnnot)) return;
208
209 if (pWidget->IsAppModified())
210 {
211 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE) )
212 {
213 pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget- >GetValueAge());
214 }
215 }
216 }
217 }
218
219 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
220 {
221 pFormFiller->OnMouseExit(pPageView, pAnnot);
222 }
223 }
224
225 FX_BOOL CFFL_IFormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView, CPDFSDK_Ann ot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
226 {
227 ASSERT(pAnnot != NULL);
228 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
229
230 if (!m_bNotifying)
231 {
232 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
233 if (Annot_HitTest(pPageView, pAnnot, point) && pWidget->GetAAction(CPDF_ AAction::ButtonDown))
234 {
235 m_bNotifying = TRUE;
236 pWidget->GetAppearanceAge();
237 int nValueAge = pWidget->GetValueAge();
238 pWidget->ClearAppModified();
239
240 ASSERT(pPageView != NULL);
241
242
243
244 PDFSDK_FieldAction fa;
245 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlags);
246 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlags);
247 pWidget->OnAAction(CPDF_AAction::ButtonDown, fa, pPageView);
248 m_bNotifying = FALSE;
249
250 if (!IsValidAnnot(pPageView, pAnnot)) return TRUE;
251
252 if (pWidget->IsAppModified())
253 {
254 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE) )
255 {
256 pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget- >GetValueAge());
257 }
258 }
259 }
260 }
261
262 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
263 {
264 return pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point);
265 }
266
267 return FALSE;
268 }
269
270 FX_BOOL CFFL_IFormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView, CPDFSDK_Annot * pAnnot, FX_UINT nFlags, const CPDF_Point& point)
271 {
272 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
273 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
274 CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument();
275
276 switch (pWidget->GetFieldType())
277 {
278 case FIELDTYPE_PUSHBUTTON: 257 case FIELDTYPE_PUSHBUTTON:
279 case FIELDTYPE_CHECKBOX: 258 case FIELDTYPE_CHECKBOX:
280 case FIELDTYPE_RADIOBUTTON: 259 case FIELDTYPE_RADIOBUTTON:
281 if (GetViewBBox(pPageView, pAnnot).Contains((int)point.x, (int)point.y)) 260 if (GetViewBBox(pPageView, pAnnot).Contains((int)point.x, (int)point.y))
282 pDocument->SetFocusAnnot(pAnnot); 261 pDocument->SetFocusAnnot(pAnnot);
283 break; 262 break;
284 default: 263 default:
285 pDocument->SetFocusAnnot(pAnnot); 264 pDocument->SetFocusAnnot(pAnnot);
286 break; 265 break;
287 } 266 }
288 267
289 FX_BOOL bRet = FALSE; 268 FX_BOOL bRet = FALSE;
290 269
291 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 270 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
292 { 271 bRet = pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point);
293 bRet = pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point); 272 }
294 } 273
295 274 if (pDocument->GetFocusAnnot() == pAnnot) {
296 if (pDocument->GetFocusAnnot() == pAnnot) 275 FX_BOOL bExit = FALSE;
297 { 276 FX_BOOL bReset = FALSE;
298 FX_BOOL bExit = FALSE; 277 OnButtonUp(pWidget, pPageView, bReset, bExit, nFlags);
299 FX_BOOL bReset = FALSE; 278 if (bExit)
300 OnButtonUp(pWidget, pPageView, bReset, bExit,nFlags); 279 return TRUE;
301 if (bExit) return TRUE; 280 }
302 } 281 return bRet;
303 return bRet; 282 }
304 } 283
305 284 void CFFL_IFormFiller::OnButtonUp(CPDFSDK_Widget* pWidget,
306 void CFFL_IFormFiller::OnButtonUp(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPa geView, FX_BOOL& bReset, FX_BOOL& bExit,FX_UINT nFlag) 285 CPDFSDK_PageView* pPageView,
307 { 286 FX_BOOL& bReset,
308 ASSERT(pWidget != NULL); 287 FX_BOOL& bExit,
309 288 FX_UINT nFlag) {
310 if (!m_bNotifying) 289 ASSERT(pWidget != NULL);
311 { 290
312 if (pWidget->GetAAction(CPDF_AAction::ButtonUp)) 291 if (!m_bNotifying) {
313 { 292 if (pWidget->GetAAction(CPDF_AAction::ButtonUp)) {
314 m_bNotifying = TRUE; 293 m_bNotifying = TRUE;
315 int nAge = pWidget->GetAppearanceAge(); 294 int nAge = pWidget->GetAppearanceAge();
316 int nValueAge = pWidget->GetValueAge(); 295 int nValueAge = pWidget->GetValueAge();
317 296
318 ASSERT(pPageView != NULL); 297 ASSERT(pPageView != NULL);
319 // CReader_DocView* pDocView = pPageView->GetDocView(); 298 // CReader_DocView* pDocView = pPageView->GetDocView();
320 // ASSERT(pDocView != NULL); 299 // ASSERT(pDocView != NULL);
321 300
322 301 PDFSDK_FieldAction fa;
323 302 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
324 PDFSDK_FieldAction fa; 303 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
325 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 304
326 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 305 pWidget->OnAAction(CPDF_AAction::ButtonUp, fa, pPageView);
327 306 m_bNotifying = FALSE;
328 pWidget->OnAAction(CPDF_AAction::ButtonUp, fa, pPageView); 307
329 m_bNotifying = FALSE; 308 if (!IsValidAnnot(pPageView, pWidget)) {
330 309 bExit = TRUE;
331 if (!IsValidAnnot(pPageView, pWidget)) 310 return;
332 { 311 }
333 bExit = TRUE; 312
334 return; 313 if (nAge != pWidget->GetAppearanceAge()) {
335 } 314 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
336 315 pFormFiller->ResetPDFWindow(pPageView,
337 if (nAge != pWidget->GetAppearanceAge()) 316 nValueAge == pWidget->GetValueAge());
338 { 317 }
339 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE) ) 318
340 { 319 bReset = TRUE;
341 pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget- >GetValueAge()); 320 }
342 } 321 }
343 322 }
344 bReset = TRUE; 323 }
345 } 324
346 } 325 FX_BOOL CFFL_IFormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView,
347 } 326 CPDFSDK_Annot* pAnnot,
348 } 327 FX_UINT nFlags,
349 328 const CPDF_Point& point) {
350 FX_BOOL CFFL_IFormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView, CPDFSDK_A nnot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) 329 ASSERT(pAnnot != NULL);
351 { 330 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
352 ASSERT(pAnnot != NULL); 331
353 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 332 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
354 333 return pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
355 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 334 }
356 { 335
357 return pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point); 336 return FALSE;
358 } 337 }
359 338
339 FX_BOOL CFFL_IFormFiller::OnMouseMove(CPDFSDK_PageView* pPageView,
340 CPDFSDK_Annot* pAnnot,
341 FX_UINT nFlags,
342 const CPDF_Point& point) {
343 ASSERT(pAnnot != NULL);
344 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
345
346 // change cursor
347 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) {
348 return pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point);
349 }
350
351 return FALSE;
352 }
353
354 FX_BOOL CFFL_IFormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView,
355 CPDFSDK_Annot* pAnnot,
356 FX_UINT nFlags,
357 short zDelta,
358 const CPDF_Point& point) {
359 ASSERT(pAnnot != NULL);
360 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
361
362 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
363 return pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point);
364 }
365
366 return FALSE;
367 }
368
369 FX_BOOL CFFL_IFormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView,
370 CPDFSDK_Annot* pAnnot,
371 FX_UINT nFlags,
372 const CPDF_Point& point) {
373 ASSERT(pAnnot != NULL);
374 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
375
376 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
377 return pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point);
378 }
379
380 return FALSE;
381 }
382
383 FX_BOOL CFFL_IFormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView,
384 CPDFSDK_Annot* pAnnot,
385 FX_UINT nFlags,
386 const CPDF_Point& point) {
387 ASSERT(pAnnot != NULL);
388 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
389
390 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
391 return pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point);
392 }
393
394 return FALSE;
395 }
396
397 FX_BOOL CFFL_IFormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot,
398 FX_UINT nKeyCode,
399 FX_UINT nFlags) {
400 ASSERT(pAnnot != NULL);
401 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
402
403 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
404 return pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlags);
405 }
406
407 return FALSE;
408 }
409
410 FX_BOOL CFFL_IFormFiller::OnChar(CPDFSDK_Annot* pAnnot,
411 FX_UINT nChar,
412 FX_UINT nFlags) {
413 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
414 if (nChar == FWL_VKEY_Tab)
415 return TRUE;
416
417 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
418 return pFormFiller->OnChar(pAnnot, nChar, nFlags);
419
420 return FALSE;
421 }
422
423 FX_BOOL CFFL_IFormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
424 if (!pAnnot)
360 return FALSE; 425 return FALSE;
361 } 426
362 427 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
363 FX_BOOL CFFL_IFormFiller::OnMouseMove(CPDFSDK_PageView* pPageView, CPDFSDK_Annot * pAnnot, FX_UINT nFlags, const CPDF_Point& point) 428
364 { 429 if (!m_bNotifying) {
365 ASSERT(pAnnot != NULL); 430 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
366 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 431 if (pWidget->GetAAction(CPDF_AAction::GetFocus)) {
367 432 m_bNotifying = TRUE;
368 //change cursor 433 pWidget->GetAppearanceAge();
369 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) 434
370 { 435 int nValueAge = pWidget->GetValueAge();
371 return pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point); 436 pWidget->ClearAppModified();
372 } 437
373 438 CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
439 ASSERT(pPageView != NULL);
440
441 PDFSDK_FieldAction fa;
442 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
443 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
444
445 CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, TRUE);
446 if (!pFormFiller)
447 return FALSE;
448 pFormFiller->GetActionData(pPageView, CPDF_AAction::GetFocus, fa);
449 pWidget->OnAAction(CPDF_AAction::GetFocus, fa, pPageView);
450 m_bNotifying = FALSE;
451
452 if (pWidget->IsAppModified()) {
453 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
454 pFormFiller->ResetPDFWindow(pPageView,
455 nValueAge == pWidget->GetValueAge());
456 }
457 }
458 }
459 }
460
461 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE))
462 return pFormFiller->OnSetFocus(pAnnot, nFlag);
463
464 return TRUE;
465 }
466
467 FX_BOOL CFFL_IFormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
468 if (!pAnnot)
374 return FALSE; 469 return FALSE;
375 } 470 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
376 471
377 FX_BOOL CFFL_IFormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView, CPDFSDK_Anno t* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point) 472 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
378 { 473 if (pFormFiller->OnKillFocus(pAnnot, nFlag)) {
379 ASSERT(pAnnot != NULL); 474 if (!m_bNotifying) {
380 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
381
382 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
383 {
384 return pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, poin t);
385 }
386
387 return FALSE;
388 }
389
390 FX_BOOL CFFL_IFormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView, CPDFSDK_Ann ot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
391 {
392 ASSERT(pAnnot != NULL);
393 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
394
395 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
396 {
397 return pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point);
398 }
399
400 return FALSE;
401 }
402
403 FX_BOOL CFFL_IFormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView, CPDFSDK_Annot * pAnnot, FX_UINT nFlags, const CPDF_Point& point)
404 {
405 ASSERT(pAnnot != NULL);
406 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
407
408 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
409 {
410 return pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point);
411 }
412
413 return FALSE;
414 }
415
416 FX_BOOL CFFL_IFormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_ UINT nFlags)
417 {
418 ASSERT(pAnnot != NULL);
419 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
420
421 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
422 {
423 return pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlags);
424 }
425
426 return FALSE;
427 }
428
429 FX_BOOL CFFL_IFormFiller::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT n Flags)
430 {
431 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
432 if (nChar == FWL_VKEY_Tab)
433 return TRUE;
434
435 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
436 return pFormFiller->OnChar(pAnnot, nChar, nFlags);
437
438 return FALSE;
439 }
440
441 FX_BOOL CFFL_IFormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag)
442 {
443 if (!pAnnot)
444 return FALSE;
445
446 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
447
448 if (!m_bNotifying)
449 {
450 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 475 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
451 if (pWidget->GetAAction(CPDF_AAction::GetFocus)) 476 if (pWidget->GetAAction(CPDF_AAction::LoseFocus)) {
452 { 477 m_bNotifying = TRUE;
453 m_bNotifying = TRUE; 478 pWidget->ClearAppModified();
454 pWidget->GetAppearanceAge(); 479
455 480 CPDFSDK_PageView* pPageView = pWidget->GetPageView();
456 int nValueAge = pWidget->GetValueAge(); 481 ASSERT(pPageView != NULL);
457 pWidget->ClearAppModified(); 482
458 483 PDFSDK_FieldAction fa;
459 CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); 484 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
460 ASSERT(pPageView != NULL); 485 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
461 486
462 PDFSDK_FieldAction fa; 487 pFormFiller->GetActionData(pPageView, CPDF_AAction::LoseFocus, fa);
463 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 488
464 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 489 pWidget->OnAAction(CPDF_AAction::LoseFocus, fa, pPageView);
465 490 m_bNotifying = FALSE;
466 CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, TRUE); 491 }
467 if(!pFormFiller) return FALSE; 492 }
468 pFormFiller->GetActionData(pPageView, CPDF_AAction::GetFocus, fa); 493 } else
469 pWidget->OnAAction(CPDF_AAction::GetFocus, fa, pPageView); 494 return FALSE;
470 m_bNotifying = FALSE; 495 }
471 496
472 if (pWidget->IsAppModified()) 497 return TRUE;
473 { 498 }
474 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE) ) 499
475 { 500 FX_BOOL CFFL_IFormFiller::IsVisible(CPDFSDK_Widget* pWidget) {
476 pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget- >GetValueAge()); 501 return pWidget->IsVisible();
477 } 502 }
478 } 503
479 } 504 FX_BOOL CFFL_IFormFiller::IsReadOnly(CPDFSDK_Widget* pWidget) {
480 } 505 ASSERT(pWidget != NULL);
481 506
482 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) 507 int nFieldFlags = pWidget->GetFieldFlags();
483 return pFormFiller->OnSetFocus(pAnnot, nFlag); 508
484 509 return (nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY;
510 }
511
512 FX_BOOL CFFL_IFormFiller::IsFillingAllowed(CPDFSDK_Widget* pWidget) {
513 ASSERT(pWidget != NULL);
514
515 if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON)
485 return TRUE; 516 return TRUE;
486 } 517 else {
487 518 CPDF_Page* pPage = pWidget->GetPDFPage();
488 FX_BOOL CFFL_IFormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag) 519 ASSERT(pPage != NULL);
489 { 520
490 if(!pAnnot) return FALSE; 521 CPDF_Document* pDocument = pPage->m_pDocument;
491 ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget"); 522 ASSERT(pDocument != NULL);
492 523
493 if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) 524 FX_DWORD dwPermissions = pDocument->GetUserPermissions();
494 { 525 return (dwPermissions & FPDFPERM_FILL_FORM) ||
495 if (pFormFiller->OnKillFocus(pAnnot, nFlag)) 526 (dwPermissions & FPDFPERM_ANNOT_FORM) ||
496 { 527 (dwPermissions & FPDFPERM_MODIFY);
497 if (!m_bNotifying) 528 }
498 { 529 return TRUE;
499 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 530 }
500 if (pWidget->GetAAction(CPDF_AAction::LoseFocus)) 531
501 { 532 CFFL_FormFiller* CFFL_IFormFiller::GetFormFiller(CPDFSDK_Annot* pAnnot,
502 m_bNotifying = TRUE; 533 FX_BOOL bRegister) {
503 pWidget->ClearAppModified(); 534 auto it = m_Maps.find(pAnnot);
504 535 if (it != m_Maps.end())
505 CPDFSDK_PageView* pPageView = pWidget->GetPageView(); 536 return it->second;
506 ASSERT(pPageView != NULL); 537
507 538 if (!bRegister)
508 PDFSDK_FieldAction fa; 539 return nullptr;
509 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 540
510 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 541 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
511 542 int nFieldType = pWidget->GetFieldType();
512 pFormFiller->GetActionData(pPageView, CPDF_AAction::LoseFocu s, fa); 543 CFFL_FormFiller* pFormFiller;
513 544 switch (nFieldType) {
514 pWidget->OnAAction(CPDF_AAction::LoseFocus, fa, pPageView); 545 case FIELDTYPE_PUSHBUTTON:
515 m_bNotifying = FALSE; 546 pFormFiller = new CFFL_PushButton(m_pApp, pWidget);
516 547 break;
517 } 548 case FIELDTYPE_CHECKBOX:
518 } 549 pFormFiller = new CFFL_CheckBox(m_pApp, pWidget);
519 } 550 break;
520 else 551 case FIELDTYPE_RADIOBUTTON:
521 return FALSE; 552 pFormFiller = new CFFL_RadioButton(m_pApp, pWidget);
522 } 553 break;
523 554 case FIELDTYPE_TEXTFIELD:
524 return TRUE; 555 pFormFiller = new CFFL_TextField(m_pApp, pWidget);
525 } 556 break;
526 557 case FIELDTYPE_LISTBOX:
527 FX_BOOL CFFL_IFormFiller::IsVisible(CPDFSDK_Widget* pWidget) 558 pFormFiller = new CFFL_ListBox(m_pApp, pWidget);
528 { 559 break;
529 return pWidget->IsVisible(); 560 case FIELDTYPE_COMBOBOX:
530 } 561 pFormFiller = new CFFL_ComboBox(m_pApp, pWidget);
531 562 break;
532 FX_BOOL CFFL_IFormFiller::IsReadOnly(CPDFSDK_Widget* pWidget) 563 case FIELDTYPE_UNKNOWN:
533 { 564 default:
534 ASSERT(pWidget != NULL); 565 pFormFiller = nullptr;
535 566 break;
536 int nFieldFlags = pWidget->GetFieldFlags(); 567 }
537 568
538 return (nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY; 569 if (!pFormFiller)
539 } 570 return nullptr;
540 571
541 FX_BOOL CFFL_IFormFiller::IsFillingAllowed(CPDFSDK_Widget* pWidget) 572 m_Maps[pAnnot] = pFormFiller;
542 { 573 return pFormFiller;
543 ASSERT(pWidget != NULL); 574 }
544 575
545 if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON) 576 void CFFL_IFormFiller::RemoveFormFiller(CPDFSDK_Annot* pAnnot) {
546 return TRUE; 577 if (pAnnot != NULL) {
547 else 578 UnRegisterFormFiller(pAnnot);
548 { 579 }
549 CPDF_Page* pPage = pWidget->GetPDFPage(); 580 }
550 ASSERT(pPage != NULL); 581
551 582 void CFFL_IFormFiller::UnRegisterFormFiller(CPDFSDK_Annot* pAnnot) {
552 CPDF_Document* pDocument = pPage->m_pDocument; 583 auto it = m_Maps.find(pAnnot);
553 ASSERT(pDocument != NULL); 584 if (it == m_Maps.end())
554 585 return;
555 FX_DWORD dwPermissions = pDocument->GetUserPermissions(); 586
556 return (dwPermissions&FPDFPERM_FILL_FORM) || 587 delete it->second;
557 (dwPermissions&FPDFPERM_ANNOT_FORM) || 588 m_Maps.erase(it);
558 (dwPermissions&FPDFPERM_MODIFY); 589 }
559 } 590
560 return TRUE; 591 void CFFL_IFormFiller::QueryWherePopup(void* pPrivateData,
561 } 592 FX_FLOAT fPopupMin,
562 593 FX_FLOAT fPopupMax,
563 CFFL_FormFiller* CFFL_IFormFiller::GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister) 594 int32_t& nRet,
564 { 595 FX_FLOAT& fPopupRet) {
565 auto it = m_Maps.find(pAnnot); 596 ASSERT(pPrivateData != NULL);
566 if (it != m_Maps.end()) 597
567 return it->second; 598 CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
568 599
569 if (!bRegister) 600 CPDF_Rect rcPageView(0, 0, 0, 0);
570 return nullptr; 601 rcPageView.right = pData->pWidget->GetPDFPage()->GetPageWidth();
571 602 rcPageView.bottom = pData->pWidget->GetPDFPage()->GetPageHeight();
572 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 603 rcPageView.Normalize();
573 int nFieldType = pWidget->GetFieldType(); 604
574 CFFL_FormFiller* pFormFiller; 605 ASSERT(pData->pWidget != NULL);
575 switch (nFieldType) { 606 CPDF_Rect rcAnnot = pData->pWidget->GetRect();
576 case FIELDTYPE_PUSHBUTTON: 607
577 pFormFiller = new CFFL_PushButton(m_pApp, pWidget); 608 FX_FLOAT fTop = 0.0f;
578 break; 609 FX_FLOAT fBottom = 0.0f;
579 case FIELDTYPE_CHECKBOX: 610
580 pFormFiller = new CFFL_CheckBox(m_pApp, pWidget); 611 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pData->pWidget;
581 break; 612 switch (pWidget->GetRotate() / 90) {
582 case FIELDTYPE_RADIOBUTTON:
583 pFormFiller = new CFFL_RadioButton(m_pApp, pWidget);
584 break;
585 case FIELDTYPE_TEXTFIELD:
586 pFormFiller = new CFFL_TextField(m_pApp, pWidget);
587 break;
588 case FIELDTYPE_LISTBOX:
589 pFormFiller = new CFFL_ListBox(m_pApp, pWidget);
590 break;
591 case FIELDTYPE_COMBOBOX:
592 pFormFiller = new CFFL_ComboBox(m_pApp, pWidget);
593 break;
594 case FIELDTYPE_UNKNOWN:
595 default:
596 pFormFiller = nullptr;
597 break;
598 }
599
600 if (!pFormFiller)
601 return nullptr;
602
603 m_Maps[pAnnot] = pFormFiller;
604 return pFormFiller;
605 }
606
607 void CFFL_IFormFiller::RemoveFormFiller(CPDFSDK_Annot* pAnnot)
608 {
609 if ( pAnnot != NULL )
610 {
611 UnRegisterFormFiller( pAnnot );
612 }
613 }
614
615 void CFFL_IFormFiller::UnRegisterFormFiller(CPDFSDK_Annot* pAnnot)
616 {
617 auto it = m_Maps.find(pAnnot);
618 if (it == m_Maps.end())
619 return;
620
621 delete it->second;
622 m_Maps.erase(it);
623 }
624
625 void CFFL_IFormFiller::QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX _FLOAT fPopupMax, int32_t & nRet, FX_FLOAT & fPopupRet)
626 {
627 ASSERT(pPrivateData != NULL);
628
629 CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
630
631
632
633
634 CPDF_Rect rcPageView(0,0,0,0);
635 rcPageView.right = pData->pWidget->GetPDFPage()->GetPageWidth();
636 rcPageView.bottom = pData->pWidget->GetPDFPage()->GetPageHeight();
637 rcPageView.Normalize();
638
639
640 ASSERT(pData->pWidget != NULL);
641 CPDF_Rect rcAnnot = pData->pWidget->GetRect();
642
643 FX_FLOAT fTop = 0.0f;
644 FX_FLOAT fBottom = 0.0f;
645
646 CPDFSDK_Widget * pWidget = (CPDFSDK_Widget*)pData->pWidget;
647 switch (pWidget->GetRotate() / 90)
648 {
649 default: 613 default:
650 case 0: 614 case 0:
651 fTop = rcPageView.top - rcAnnot.top; 615 fTop = rcPageView.top - rcAnnot.top;
652 fBottom = rcAnnot.bottom - rcPageView.bottom; 616 fBottom = rcAnnot.bottom - rcPageView.bottom;
653 break; 617 break;
654 case 1: 618 case 1:
655 fTop = rcAnnot.left - rcPageView.left; 619 fTop = rcAnnot.left - rcPageView.left;
656 fBottom = rcPageView.right - rcAnnot.right; 620 fBottom = rcPageView.right - rcAnnot.right;
657 break; 621 break;
658 case 2: 622 case 2:
659 fTop = rcAnnot.bottom - rcPageView.bottom; 623 fTop = rcAnnot.bottom - rcPageView.bottom;
660 fBottom = rcPageView.top - rcAnnot.top; 624 fBottom = rcPageView.top - rcAnnot.top;
661 break; 625 break;
662 case 3: 626 case 3:
663 fTop = rcPageView.right - rcAnnot.right; 627 fTop = rcPageView.right - rcAnnot.right;
664 fBottom = rcAnnot.left - rcPageView.left; 628 fBottom = rcAnnot.left - rcPageView.left;
665 break; 629 break;
666 } 630 }
667 631
668 FX_FLOAT fFactHeight = 0; 632 FX_FLOAT fFactHeight = 0;
669 FX_BOOL bBottom = TRUE; 633 FX_BOOL bBottom = TRUE;
670 FX_FLOAT fMaxListBoxHeight = 0; 634 FX_FLOAT fMaxListBoxHeight = 0;
671 if (fPopupMax > FFL_MAXLISTBOXHEIGHT) 635 if (fPopupMax > FFL_MAXLISTBOXHEIGHT) {
672 { 636 if (fPopupMin > FFL_MAXLISTBOXHEIGHT) {
673 if (fPopupMin > FFL_MAXLISTBOXHEIGHT) 637 fMaxListBoxHeight = fPopupMin;
674 { 638 } else {
675 fMaxListBoxHeight = fPopupMin; 639 fMaxListBoxHeight = FFL_MAXLISTBOXHEIGHT;
676 } 640 }
677 else 641 } else
678 { 642 fMaxListBoxHeight = fPopupMax;
679 fMaxListBoxHeight = FFL_MAXLISTBOXHEIGHT; 643
680 } 644 if (fBottom > fMaxListBoxHeight) {
681 } 645 fFactHeight = fMaxListBoxHeight;
682 else 646 bBottom = TRUE;
683 fMaxListBoxHeight = fPopupMax; 647 } else {
684 648 if (fTop > fMaxListBoxHeight) {
685 if (fBottom > fMaxListBoxHeight) 649 fFactHeight = fMaxListBoxHeight;
686 { 650 bBottom = FALSE;
687 fFactHeight = fMaxListBoxHeight; 651 } else {
652 if (fTop > fBottom) {
653 fFactHeight = fTop;
654 bBottom = FALSE;
655 } else {
656 fFactHeight = fBottom;
688 bBottom = TRUE; 657 bBottom = TRUE;
689 } 658 }
690 else 659 }
691 { 660 }
692 if (fTop > fMaxListBoxHeight) 661
693 { 662 nRet = bBottom ? 0 : 1;
694 fFactHeight = fMaxListBoxHeight; 663 fPopupRet = fFactHeight;
695 bBottom = FALSE; 664 }
696 } 665
697 else 666 void CFFL_IFormFiller::OnKeyStrokeCommit(CPDFSDK_Widget* pWidget,
698 { 667 CPDFSDK_PageView* pPageView,
699 if (fTop > fBottom) 668 FX_BOOL& bRC,
700 { 669 FX_BOOL& bExit,
701 fFactHeight = fTop; 670 FX_DWORD nFlag) {
702 bBottom = FALSE; 671 if (!m_bNotifying) {
703 } 672 ASSERT(pWidget != NULL);
704 else 673 if (pWidget->GetAAction(CPDF_AAction::KeyStroke)) {
705 { 674 m_bNotifying = TRUE;
706 fFactHeight = fBottom; 675 pWidget->ClearAppModified();
707 bBottom = TRUE; 676
708 } 677 ASSERT(pPageView != NULL);
709 } 678
710 } 679 PDFSDK_FieldAction fa;
711 680 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
712 nRet = bBottom ? 0 : 1; 681 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
713 fPopupRet = fFactHeight; 682 fa.bWillCommit = TRUE;
714 } 683 fa.bKeyDown = TRUE;
715 684 fa.bRC = TRUE;
716 void CFFL_IFormFiller::OnKeyStrokeCommit(CPDFSDK_Widget* pWidget, CPDFSDK_PageVi ew* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag) 685
717 { 686 CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE);
718 if (!m_bNotifying) 687 ASSERT(pFormFiller != NULL);
719 { 688
720 ASSERT(pWidget != NULL); 689 pFormFiller->GetActionData(pPageView, CPDF_AAction::KeyStroke, fa);
721 if (pWidget->GetAAction(CPDF_AAction::KeyStroke)) 690 pFormFiller->SaveState(pPageView);
722 { 691
723 m_bNotifying = TRUE; 692 PDFSDK_FieldAction faOld = fa;
724 pWidget->ClearAppModified(); 693 pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pPageView);
725 694
726 ASSERT(pPageView != NULL); 695 bRC = fa.bRC;
727 696 // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView,
728 PDFSDK_FieldAction fa; 697 // pWidget);
729 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 698
730 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 699 m_bNotifying = FALSE;
731 fa.bWillCommit = TRUE; 700 }
732 fa.bKeyDown = TRUE; 701 }
733 fa.bRC = TRUE; 702 }
734 703
735 CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE); 704 void CFFL_IFormFiller::OnValidate(CPDFSDK_Widget* pWidget,
736 ASSERT(pFormFiller != NULL); 705 CPDFSDK_PageView* pPageView,
737 706 FX_BOOL& bRC,
738 pFormFiller->GetActionData(pPageView, CPDF_AAction::KeyStroke, fa); 707 FX_BOOL& bExit,
739 pFormFiller->SaveState(pPageView); 708 FX_DWORD nFlag) {
740 709 if (!m_bNotifying) {
741 PDFSDK_FieldAction faOld = fa; 710 ASSERT(pWidget != NULL);
742 pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pPageView); 711 if (pWidget->GetAAction(CPDF_AAction::Validate)) {
743 712 m_bNotifying = TRUE;
744 bRC = fa.bRC; 713 pWidget->ClearAppModified();
745 // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidge t); 714
746 715 ASSERT(pPageView != NULL);
747 m_bNotifying = FALSE; 716 // CReader_DocView* pDocView = pPageView->GetDocView();
748 } 717 // ASSERT(pDocView != NULL);
749 } 718
750 } 719 PDFSDK_FieldAction fa;
751 720 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
752 void CFFL_IFormFiller::OnValidate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPa geView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag) 721 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
753 { 722 fa.bKeyDown = TRUE;
754 if (!m_bNotifying) 723 fa.bRC = TRUE;
755 { 724
756 ASSERT(pWidget != NULL); 725 CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE);
757 if (pWidget->GetAAction(CPDF_AAction::Validate)) 726 ASSERT(pFormFiller != NULL);
758 { 727
759 m_bNotifying = TRUE; 728 pFormFiller->GetActionData(pPageView, CPDF_AAction::Validate, fa);
760 pWidget->ClearAppModified(); 729 pFormFiller->SaveState(pPageView);
761 730
762 ASSERT(pPageView != NULL); 731 PDFSDK_FieldAction faOld = fa;
763 // CReader_DocView* pDocView = pPageView->GetDocView(); 732 pWidget->OnAAction(CPDF_AAction::Validate, fa, pPageView);
764 // ASSERT(pDocView != NULL); 733
765 734 bRC = fa.bRC;
766 735 // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView,
767 736 // pWidget);
768 PDFSDK_FieldAction fa; 737
769 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 738 m_bNotifying = FALSE;
770 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 739 }
771 fa.bKeyDown = TRUE; 740 }
772 fa.bRC = TRUE; 741 }
773 742
774 CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE); 743 void CFFL_IFormFiller::OnCalculate(CPDFSDK_Widget* pWidget,
775 ASSERT(pFormFiller != NULL); 744 CPDFSDK_PageView* pPageView,
776 745 FX_BOOL& bExit,
777 pFormFiller->GetActionData(pPageView, CPDF_AAction::Validate, fa); 746 FX_DWORD nFlag) {
778 pFormFiller->SaveState(pPageView); 747 if (!m_bNotifying) {
779 748 ASSERT(pWidget != NULL);
780 PDFSDK_FieldAction faOld = fa;
781 pWidget->OnAAction(CPDF_AAction::Validate, fa, pPageView);
782
783 bRC = fa.bRC;
784 // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidge t);
785
786 m_bNotifying = FALSE;
787 }
788 }
789 }
790
791 void CFFL_IFormFiller::OnCalculate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pP ageView, FX_BOOL& bExit, FX_DWORD nFlag)
792 {
793 if (!m_bNotifying)
794 {
795 ASSERT(pWidget != NULL);
796 ASSERT(pPageView != NULL);
797 // CReader_DocView* pDocView = pPageView->GetDocView();
798 // ASSERT(pDocView != NULL);
799 CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
800 ASSERT(pDocument != NULL);
801
802 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterF orm();
803 ASSERT(pInterForm != NULL);
804
805 pInterForm->OnCalculate(pWidget->GetFormField());
806
807 // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget);
808
809 m_bNotifying = FALSE;
810 }
811 }
812
813 void CFFL_IFormFiller::OnFormat(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPage View, FX_BOOL& bExit, FX_DWORD nFlag)
814 {
815 if (!m_bNotifying)
816 {
817 ASSERT(pWidget != NULL);
818 ASSERT(pPageView != NULL);
819 // CReader_DocView* pDocView = pPageView->GetDocView();
820 // ASSERT(pDocView != NULL);
821 CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
822 ASSERT(pDocument != NULL);
823
824 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterF orm();
825 ASSERT(pInterForm != NULL);
826
827 FX_BOOL bFormated = FALSE;
828 CFX_WideString sValue = pInterForm->OnFormat(pWidget->GetFormField(), bF ormated);
829
830 // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget);
831
832 if (bExit) return;
833
834 if (bFormated)
835 {
836 pInterForm->ResetFieldAppearance(pWidget->GetFormField(), sValue.c_s tr(), TRUE);
837 pInterForm->UpdateField(pWidget->GetFormField());
838 }
839
840 m_bNotifying = FALSE;
841 }
842 }
843
844 FX_BOOL CFFL_IFormFiller::IsValidAnnot(CPDFSDK_PageView* pPageView, CPDFSDK_Anno t* pAnnot)
845 {
846
847 ASSERT(pPageView != NULL); 749 ASSERT(pPageView != NULL);
848 ASSERT(pAnnot != NULL); 750 // CReader_DocView* pDocView = pPageView->GetDocView();
849 751 // ASSERT(pDocView != NULL);
850 if(pPageView) 752 CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
851 return pPageView->IsValidAnnot(pAnnot->GetPDFAnnot()); 753 ASSERT(pDocument != NULL);
852 else 754
853 return FALSE; 755 CPDFSDK_InterForm* pInterForm =
854 } 756 (CPDFSDK_InterForm*)pDocument->GetInterForm();
855 757 ASSERT(pInterForm != NULL);
856 void CFFL_IFormFiller::OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData , int32_t nKeyCode, 758
857 CFX_WideString & strChange, const CFX_WideString& strChangeEx, 759 pInterForm->OnCalculate(pWidget->GetFormField());
858 int nSelStart, int nSelEnd, 760
859 FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag) 761 // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView,
860 { 762 // pWidget);
861 ASSERT(pPrivateData != NULL); 763
862 CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; 764 m_bNotifying = FALSE;
863 ASSERT(pData->pWidget != NULL); 765 }
864 766 }
865 CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); 767
866 ASSERT(pFormFiller != NULL); 768 void CFFL_IFormFiller::OnFormat(CPDFSDK_Widget* pWidget,
867 769 CPDFSDK_PageView* pPageView,
868 if (!m_bNotifying) 770 FX_BOOL& bExit,
869 { 771 FX_DWORD nFlag) {
870 if (pData->pWidget->GetAAction(CPDF_AAction::KeyStroke)) 772 if (!m_bNotifying) {
871 { 773 ASSERT(pWidget != NULL);
872 m_bNotifying = TRUE; 774 ASSERT(pPageView != NULL);
873 int nAge = pData->pWidget->GetAppearanceAge(); 775 // CReader_DocView* pDocView = pPageView->GetDocView();
874 int nValueAge = pData->pWidget->GetValueAge(); 776 // ASSERT(pDocView != NULL);
875 777 CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
876 ASSERT(pData->pPageView != NULL); 778 ASSERT(pDocument != NULL);
877 CPDFSDK_Document* pDocument = pData->pPageView->GetSDKDocument(); 779
878 780 CPDFSDK_InterForm* pInterForm =
879 PDFSDK_FieldAction fa; 781 (CPDFSDK_InterForm*)pDocument->GetInterForm();
880 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag); 782 ASSERT(pInterForm != NULL);
881 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag); 783
882 fa.sChange = strChange; 784 FX_BOOL bFormated = FALSE;
883 fa.sChangeEx = strChangeEx; 785 CFX_WideString sValue =
884 fa.bKeyDown = bKeyDown; 786 pInterForm->OnFormat(pWidget->GetFormField(), bFormated);
885 fa.bWillCommit = FALSE; 787
886 fa.bRC = TRUE; 788 // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView,
887 fa.nSelStart = nSelStart; 789 // pWidget);
888 fa.nSelEnd = nSelEnd; 790
889 791 if (bExit)
890 792 return;
891 pFormFiller->GetActionData(pData->pPageView, CPDF_AAction::KeyStroke , fa); 793
892 pFormFiller->SaveState(pData->pPageView); 794 if (bFormated) {
893 795 pInterForm->ResetFieldAppearance(pWidget->GetFormField(), sValue.c_str(),
894 if (pData->pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pData->pP ageView)) 796 TRUE);
895 { 797 pInterForm->UpdateField(pWidget->GetFormField());
896 if (!IsValidAnnot(pData->pPageView, pData->pWidget)) 798 }
897 { 799
898 bExit = TRUE; 800 m_bNotifying = FALSE;
899 m_bNotifying = FALSE; 801 }
900 return; 802 }
901 } 803
902 804 FX_BOOL CFFL_IFormFiller::IsValidAnnot(CPDFSDK_PageView* pPageView,
903 if (nAge != pData->pWidget->GetAppearanceAge()) 805 CPDFSDK_Annot* pAnnot) {
904 { 806 ASSERT(pPageView != NULL);
905 CPWL_Wnd* pWnd = pFormFiller->ResetPDFWindow(pData->pPageVie w, nValueAge == pData->pWidget->GetValueAge()); 807 ASSERT(pAnnot != NULL);
906 pData = (CFFL_PrivateData*)pWnd->GetAttachedData(); 808
907 bExit = TRUE; 809 if (pPageView)
908 } 810 return pPageView->IsValidAnnot(pAnnot->GetPDFAnnot());
909 811 else
910 if (fa.bRC) 812 return FALSE;
911 { 813 }
912 pFormFiller->SetActionData(pData->pPageView, CPDF_AAction::K eyStroke, fa); 814
913 bRC = FALSE; 815 void CFFL_IFormFiller::OnBeforeKeyStroke(FX_BOOL bEditOrList,
914 } 816 void* pPrivateData,
915 else 817 int32_t nKeyCode,
916 { 818 CFX_WideString& strChange,
917 pFormFiller->RestoreState(pData->pPageView); 819 const CFX_WideString& strChangeEx,
918 bRC = FALSE; 820 int nSelStart,
919 } 821 int nSelEnd,
920 822 FX_BOOL bKeyDown,
921 if (pDocument->GetFocusAnnot() != pData->pWidget) 823 FX_BOOL& bRC,
922 { 824 FX_BOOL& bExit,
923 pFormFiller->CommitData(pData->pPageView,nFlag); 825 FX_DWORD nFlag) {
924 bExit = TRUE; 826 ASSERT(pPrivateData != NULL);
925 } 827 CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
926 } 828 ASSERT(pData->pWidget != NULL);
927 else 829
928 { 830 CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE);
929 if (!IsValidAnnot(pData->pPageView, pData->pWidget)) 831 ASSERT(pFormFiller != NULL);
930 { 832
931 bExit = TRUE; 833 if (!m_bNotifying) {
932 m_bNotifying = FALSE; 834 if (pData->pWidget->GetAAction(CPDF_AAction::KeyStroke)) {
933 return; 835 m_bNotifying = TRUE;
934 } 836 int nAge = pData->pWidget->GetAppearanceAge();
935 } 837 int nValueAge = pData->pWidget->GetValueAge();
936 838
937 m_bNotifying = FALSE; 839 ASSERT(pData->pPageView != NULL);
938 } 840 CPDFSDK_Document* pDocument = pData->pPageView->GetSDKDocument();
939 } 841
940 } 842 PDFSDK_FieldAction fa;
941 843 fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
942 void CFFL_IFormFiller::OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateDa ta, FX_BOOL & bExit,FX_DWORD nFlag) 844 fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
943 { 845 fa.sChange = strChange;
944 ASSERT(pPrivateData != NULL); 846 fa.sChangeEx = strChangeEx;
945 CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData; 847 fa.bKeyDown = bKeyDown;
946 ASSERT(pData->pWidget != NULL); 848 fa.bWillCommit = FALSE;
947 849 fa.bRC = TRUE;
948 CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE); 850 fa.nSelStart = nSelStart;
949 ASSERT(pFormFiller != NULL); 851 fa.nSelEnd = nSelEnd;
950 852
951 if (!bEditOrList) 853 pFormFiller->GetActionData(pData->pPageView, CPDF_AAction::KeyStroke, fa);
952 pFormFiller->OnKeyStroke(bExit); 854 pFormFiller->SaveState(pData->pPageView);
953 } 855
856 if (pData->pWidget->OnAAction(CPDF_AAction::KeyStroke, fa,
857 pData->pPageView)) {
858 if (!IsValidAnnot(pData->pPageView, pData->pWidget)) {
859 bExit = TRUE;
860 m_bNotifying = FALSE;
861 return;
862 }
863
864 if (nAge != pData->pWidget->GetAppearanceAge()) {
865 CPWL_Wnd* pWnd = pFormFiller->ResetPDFWindow(
866 pData->pPageView, nValueAge == pData->pWidget->GetValueAge());
867 pData = (CFFL_PrivateData*)pWnd->GetAttachedData();
868 bExit = TRUE;
869 }
870
871 if (fa.bRC) {
872 pFormFiller->SetActionData(pData->pPageView, CPDF_AAction::KeyStroke,
873 fa);
874 bRC = FALSE;
875 } else {
876 pFormFiller->RestoreState(pData->pPageView);
877 bRC = FALSE;
878 }
879
880 if (pDocument->GetFocusAnnot() != pData->pWidget) {
881 pFormFiller->CommitData(pData->pPageView, nFlag);
882 bExit = TRUE;
883 }
884 } else {
885 if (!IsValidAnnot(pData->pPageView, pData->pWidget)) {
886 bExit = TRUE;
887 m_bNotifying = FALSE;
888 return;
889 }
890 }
891
892 m_bNotifying = FALSE;
893 }
894 }
895 }
896
897 void CFFL_IFormFiller::OnAfterKeyStroke(FX_BOOL bEditOrList,
898 void* pPrivateData,
899 FX_BOOL& bExit,
900 FX_DWORD nFlag) {
901 ASSERT(pPrivateData != NULL);
902 CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
903 ASSERT(pData->pWidget != NULL);
904
905 CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE);
906 ASSERT(pFormFiller != NULL);
907
908 if (!bEditOrList)
909 pFormFiller->OnKeyStroke(bExit);
910 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698