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 "fpdfsdk/javascript/Field.h" | 7 #include "fpdfsdk/javascript/Field.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 std::vector<CPDF_FormField*> Field::GetFormFields( | 253 std::vector<CPDF_FormField*> Field::GetFormFields( |
254 const CFX_WideString& csFieldName) const { | 254 const CFX_WideString& csFieldName) const { |
255 return Field::GetFormFields(m_pDocument, csFieldName); | 255 return Field::GetFormFields(m_pDocument, csFieldName); |
256 } | 256 } |
257 | 257 |
258 void Field::UpdateFormField(CPDFSDK_Document* pDocument, | 258 void Field::UpdateFormField(CPDFSDK_Document* pDocument, |
259 CPDF_FormField* pFormField, | 259 CPDF_FormField* pFormField, |
260 FX_BOOL bChangeMark, | 260 FX_BOOL bChangeMark, |
261 FX_BOOL bResetAP, | 261 FX_BOOL bResetAP, |
262 FX_BOOL bRefresh) { | 262 FX_BOOL bRefresh) { |
263 std::vector<CPDFSDK_Widget*> widgets; | |
264 CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm(); | 263 CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm(); |
265 pInterForm->GetWidgets(pFormField, &widgets); | |
266 | 264 |
267 if (bResetAP) { | 265 if (bResetAP) { |
| 266 std::vector<CPDFSDK_Widget*> widgets; |
| 267 pInterForm->GetWidgets(pFormField, &widgets); |
| 268 |
268 int nFieldType = pFormField->GetFieldType(); | 269 int nFieldType = pFormField->GetFieldType(); |
269 if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD) { | 270 if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD) { |
270 for (CPDFSDK_Widget* pWidget : widgets) { | 271 for (CPDFSDK_Widget* pWidget : widgets) { |
271 FX_BOOL bFormatted = FALSE; | 272 FX_BOOL bFormatted = FALSE; |
272 CPDFSDK_Widget::Observer observer(&pWidget); | 273 CPDFSDK_Widget::Observer observer(&pWidget); |
273 CFX_WideString sValue = pWidget->OnFormat(bFormatted); | 274 CFX_WideString sValue = pWidget->OnFormat(bFormatted); |
274 if (pWidget) { | 275 if (pWidget) { |
275 pWidget->ResetAppearance(bFormatted ? sValue.c_str() : nullptr, | 276 pWidget->ResetAppearance(bFormatted ? sValue.c_str() : nullptr, |
276 FALSE); | 277 FALSE); |
277 } | 278 } |
278 } | 279 } |
279 } else { | 280 } else { |
280 for (CPDFSDK_Widget* pWidget : widgets) { | 281 for (CPDFSDK_Widget* pWidget : widgets) { |
281 pWidget->ResetAppearance(nullptr, FALSE); | 282 pWidget->ResetAppearance(nullptr, FALSE); |
282 } | 283 } |
283 } | 284 } |
284 } | 285 } |
285 | 286 |
286 if (bRefresh) { | 287 if (bRefresh) { |
| 288 // Refresh the widget list. The calls in |bResetAP| may have caused widgets |
| 289 // to be removed from the list. We need to call |GetWidgets| again to be |
| 290 // sure none of the widgets have been deleted. |
| 291 std::vector<CPDFSDK_Widget*> widgets; |
| 292 pInterForm->GetWidgets(pFormField, &widgets); |
| 293 |
287 for (CPDFSDK_Widget* pWidget : widgets) { | 294 for (CPDFSDK_Widget* pWidget : widgets) { |
288 CPDFSDK_Document* pDoc = pWidget->GetInterForm()->GetDocument(); | 295 CPDFSDK_Document* pDoc = pWidget->GetInterForm()->GetDocument(); |
289 pDoc->UpdateAllViews(nullptr, pWidget); | 296 pDoc->UpdateAllViews(nullptr, pWidget); |
290 } | 297 } |
291 } | 298 } |
292 | 299 |
293 if (bChangeMark) | 300 if (bChangeMark) |
294 pDocument->SetChangeMark(); | 301 pDocument->SetChangeMark(); |
295 } | 302 } |
296 | 303 |
(...skipping 3173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3470 } | 3477 } |
3471 } | 3478 } |
3472 | 3479 |
3473 void Field::AddField(CPDFSDK_Document* pDocument, | 3480 void Field::AddField(CPDFSDK_Document* pDocument, |
3474 int nPageIndex, | 3481 int nPageIndex, |
3475 int nFieldType, | 3482 int nFieldType, |
3476 const CFX_WideString& sName, | 3483 const CFX_WideString& sName, |
3477 const CFX_FloatRect& rcCoords) { | 3484 const CFX_FloatRect& rcCoords) { |
3478 // Not supported. | 3485 // Not supported. |
3479 } | 3486 } |
OLD | NEW |