OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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/cpdfsdk_interform.h" | 7 #include "fpdfsdk/cpdfsdk_interform.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 bool bNext) const { | 75 bool bNext) const { |
76 std::unique_ptr<CBA_AnnotIterator> pIterator(new CBA_AnnotIterator( | 76 std::unique_ptr<CBA_AnnotIterator> pIterator(new CBA_AnnotIterator( |
77 pWidget->GetPageView(), CPDF_Annot::Subtype::WIDGET)); | 77 pWidget->GetPageView(), CPDF_Annot::Subtype::WIDGET)); |
78 | 78 |
79 if (bNext) | 79 if (bNext) |
80 return static_cast<CPDFSDK_Widget*>(pIterator->GetNextAnnot(pWidget)); | 80 return static_cast<CPDFSDK_Widget*>(pIterator->GetNextAnnot(pWidget)); |
81 | 81 |
82 return static_cast<CPDFSDK_Widget*>(pIterator->GetPrevAnnot(pWidget)); | 82 return static_cast<CPDFSDK_Widget*>(pIterator->GetPrevAnnot(pWidget)); |
83 } | 83 } |
84 | 84 |
85 CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl, | 85 CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const { |
86 bool createIfNeeded) const { | |
87 if (!pControl || !m_pInterForm) | 86 if (!pControl || !m_pInterForm) |
88 return nullptr; | 87 return nullptr; |
89 | 88 |
90 CPDFSDK_Widget* pWidget = nullptr; | 89 CPDFSDK_Widget* pWidget = nullptr; |
91 const auto it = m_Map.find(pControl); | 90 const auto it = m_Map.find(pControl); |
92 if (it != m_Map.end()) | 91 if (it != m_Map.end()) |
93 pWidget = it->second; | 92 pWidget = it->second; |
94 if (pWidget) | 93 if (pWidget) |
95 return pWidget; | 94 return pWidget; |
96 if (!createIfNeeded) | |
97 return nullptr; | |
98 | 95 |
99 CPDF_Dictionary* pControlDict = pControl->GetWidget(); | 96 CPDF_Dictionary* pControlDict = pControl->GetWidget(); |
100 CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument(); | 97 CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument(); |
101 CPDFSDK_PageView* pPage = nullptr; | 98 CPDFSDK_PageView* pPage = nullptr; |
102 | 99 |
103 if (CPDF_Dictionary* pPageDict = pControlDict->GetDictFor("P")) { | 100 if (CPDF_Dictionary* pPageDict = pControlDict->GetDictFor("P")) { |
104 int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum()); | 101 int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum()); |
105 if (nPageIndex >= 0) | 102 if (nPageIndex >= 0) |
106 pPage = m_pFormFillEnv->GetPageView(nPageIndex); | 103 pPage = m_pFormFillEnv->GetPageView(nPageIndex); |
107 } | 104 } |
(...skipping 19 matching lines...) Expand all Loading... |
127 GetWidgets(pFormField, widgets); | 124 GetWidgets(pFormField, widgets); |
128 } | 125 } |
129 } | 126 } |
130 | 127 |
131 void CPDFSDK_InterForm::GetWidgets( | 128 void CPDFSDK_InterForm::GetWidgets( |
132 CPDF_FormField* pField, | 129 CPDF_FormField* pField, |
133 std::vector<CPDFSDK_Widget*>* widgets) const { | 130 std::vector<CPDFSDK_Widget*>* widgets) const { |
134 for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { | 131 for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { |
135 CPDF_FormControl* pFormCtrl = pField->GetControl(i); | 132 CPDF_FormControl* pFormCtrl = pField->GetControl(i); |
136 ASSERT(pFormCtrl); | 133 ASSERT(pFormCtrl); |
137 CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, true); | 134 CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl); |
138 if (pWidget) | 135 if (pWidget) |
139 widgets->push_back(pWidget); | 136 widgets->push_back(pWidget); |
140 } | 137 } |
141 } | 138 } |
142 | 139 |
143 int CPDFSDK_InterForm::GetPageIndexByAnnotDict( | 140 int CPDFSDK_InterForm::GetPageIndexByAnnotDict( |
144 CPDF_Document* pDocument, | 141 CPDF_Document* pDocument, |
145 CPDF_Dictionary* pAnnotDict) const { | 142 CPDF_Dictionary* pAnnotDict) const { |
146 ASSERT(pAnnotDict); | 143 ASSERT(pAnnotDict); |
147 | 144 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 return m_bXfaValidationsEnabled; | 203 return m_bXfaValidationsEnabled; |
207 } | 204 } |
208 void CPDFSDK_InterForm::XfaSetValidationsEnabled(bool bEnabled) { | 205 void CPDFSDK_InterForm::XfaSetValidationsEnabled(bool bEnabled) { |
209 m_bXfaValidationsEnabled = bEnabled; | 206 m_bXfaValidationsEnabled = bEnabled; |
210 } | 207 } |
211 | 208 |
212 void CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField, | 209 void CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField, |
213 bool bSynchronizeElse) { | 210 bool bSynchronizeElse) { |
214 for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { | 211 for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { |
215 CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); | 212 CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); |
216 if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, false)) | 213 if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) |
217 pWidget->Synchronize(bSynchronizeElse); | 214 pWidget->Synchronize(bSynchronizeElse); |
218 } | 215 } |
219 } | 216 } |
220 #endif // PDF_ENABLE_XFA | 217 #endif // PDF_ENABLE_XFA |
221 | 218 |
222 void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) { | 219 void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) { |
223 if (!m_pFormFillEnv->IsJSInitiated()) | 220 if (!m_pFormFillEnv->IsJSInitiated()) |
224 return; | 221 return; |
225 | 222 |
226 if (m_bBusy) | 223 if (m_bBusy) |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
315 | 312 |
316 return sValue; | 313 return sValue; |
317 } | 314 } |
318 | 315 |
319 void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField, | 316 void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField, |
320 const CFX_WideString* sValue, | 317 const CFX_WideString* sValue, |
321 bool bValueChanged) { | 318 bool bValueChanged) { |
322 for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { | 319 for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { |
323 CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); | 320 CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); |
324 ASSERT(pFormCtrl); | 321 ASSERT(pFormCtrl); |
325 if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, false)) | 322 if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) |
326 pWidget->ResetAppearance(sValue, bValueChanged); | 323 pWidget->ResetAppearance(sValue, bValueChanged); |
327 } | 324 } |
328 } | 325 } |
329 | 326 |
330 void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) { | 327 void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) { |
331 for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { | 328 for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { |
332 CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); | 329 CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); |
333 ASSERT(pFormCtrl); | 330 ASSERT(pFormCtrl); |
334 | 331 |
335 if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, false)) { | 332 if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) { |
336 UnderlyingPageType* pPage = pWidget->GetUnderlyingPage(); | 333 UnderlyingPageType* pPage = pWidget->GetUnderlyingPage(); |
337 CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage, false); | 334 CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage, false); |
338 FX_RECT rcBBox = m_pFormFillEnv->GetInteractiveFormFiller()->GetViewBBox( | 335 FX_RECT rcBBox = m_pFormFillEnv->GetInteractiveFormFiller()->GetViewBBox( |
339 pPageView, pWidget); | 336 pPageView, pWidget); |
340 | 337 |
341 m_pFormFillEnv->Invalidate(pPage, rcBBox.left, rcBBox.top, rcBBox.right, | 338 m_pFormFillEnv->Invalidate(pPage, rcBBox.left, rcBBox.top, rcBBox.right, |
342 rcBBox.bottom); | 339 rcBBox.bottom); |
343 } | 340 } |
344 } | 341 } |
345 } | 342 } |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects); | 389 std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects); |
393 | 390 |
394 bool bHide = action.GetHideStatus(); | 391 bool bHide = action.GetHideStatus(); |
395 bool bChanged = false; | 392 bool bChanged = false; |
396 | 393 |
397 for (CPDF_FormField* pField : fields) { | 394 for (CPDF_FormField* pField : fields) { |
398 for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { | 395 for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { |
399 CPDF_FormControl* pControl = pField->GetControl(i); | 396 CPDF_FormControl* pControl = pField->GetControl(i); |
400 ASSERT(pControl); | 397 ASSERT(pControl); |
401 | 398 |
402 if (CPDFSDK_Widget* pWidget = GetWidget(pControl, false)) { | 399 if (CPDFSDK_Widget* pWidget = GetWidget(pControl)) { |
403 uint32_t nFlags = pWidget->GetFlags(); | 400 uint32_t nFlags = pWidget->GetFlags(); |
404 nFlags &= ~ANNOTFLAG_INVISIBLE; | 401 nFlags &= ~ANNOTFLAG_INVISIBLE; |
405 nFlags &= ~ANNOTFLAG_NOVIEW; | 402 nFlags &= ~ANNOTFLAG_NOVIEW; |
406 if (bHide) | 403 if (bHide) |
407 nFlags |= ANNOTFLAG_HIDDEN; | 404 nFlags |= ANNOTFLAG_HIDDEN; |
408 else | 405 else |
409 nFlags &= ~ANNOTFLAG_HIDDEN; | 406 nFlags &= ~ANNOTFLAG_HIDDEN; |
410 pWidget->SetFlags(nFlags); | 407 pWidget->SetFlags(nFlags); |
411 pWidget->GetPageView()->UpdateView(pWidget); | 408 pWidget->GetPageView()->UpdateView(pWidget); |
412 bChanged = true; | 409 bChanged = true; |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
706 } | 703 } |
707 } | 704 } |
708 | 705 |
709 FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) { | 706 FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) { |
710 if (nFieldType < 0 || nFieldType > kNumFieldTypes) | 707 if (nFieldType < 0 || nFieldType > kNumFieldTypes) |
711 return FXSYS_RGB(255, 255, 255); | 708 return FXSYS_RGB(255, 255, 255); |
712 if (nFieldType == 0) | 709 if (nFieldType == 0) |
713 return m_aHighlightColor[0]; | 710 return m_aHighlightColor[0]; |
714 return m_aHighlightColor[nFieldType - 1]; | 711 return m_aHighlightColor[nFieldType - 1]; |
715 } | 712 } |
OLD | NEW |