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 "core/include/fpdfdoc/fpdf_doc.h" | 7 #include "core/include/fpdfdoc/fpdf_doc.h" |
8 #include "doc_utils.h" | 8 #include "doc_utils.h" |
9 | 9 |
10 FX_BOOL PDF_FormField_IsUnison(CPDF_FormField* pField) { | 10 FX_BOOL PDF_FormField_IsUnison(CPDF_FormField* pField) { |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 } | 96 } |
97 } | 97 } |
98 CFX_WideString CPDF_FormField::GetFullName() { | 98 CFX_WideString CPDF_FormField::GetFullName() { |
99 return ::GetFullName(m_pDict); | 99 return ::GetFullName(m_pDict); |
100 } | 100 } |
101 FX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify) { | 101 FX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify) { |
102 switch (m_Type) { | 102 switch (m_Type) { |
103 case CPDF_FormField::CheckBox: | 103 case CPDF_FormField::CheckBox: |
104 case CPDF_FormField::RadioButton: { | 104 case CPDF_FormField::RadioButton: { |
105 CFX_ByteArray statusArray; | 105 CFX_ByteArray statusArray; |
106 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 106 if (bNotify && m_pForm->m_pFormNotify) { |
107 SaveCheckedFieldStatus(this, statusArray); | 107 SaveCheckedFieldStatus(this, statusArray); |
108 } | 108 } |
109 int iCount = CountControls(); | 109 int iCount = CountControls(); |
110 if (iCount) { | 110 if (iCount) { |
111 if (PDF_FormField_IsUnison(this)) { | 111 if (PDF_FormField_IsUnison(this)) { |
112 for (int i = 0; i < iCount; i++) { | 112 for (int i = 0; i < iCount; i++) { |
113 CheckControl(i, GetControl(i)->IsDefaultChecked(), FALSE); | 113 CheckControl(i, GetControl(i)->IsDefaultChecked(), FALSE); |
114 } | 114 } |
115 } else { | 115 } else { |
116 for (int i = 0; i < iCount; i++) { | 116 for (int i = 0; i < iCount; i++) { |
117 CPDF_FormControl* pControl = GetControl(i); | 117 CPDF_FormControl* pControl = GetControl(i); |
118 FX_BOOL bChecked = pControl->IsDefaultChecked(); | 118 FX_BOOL bChecked = pControl->IsDefaultChecked(); |
119 CheckControl(i, bChecked, FALSE); | 119 CheckControl(i, bChecked, FALSE); |
120 } | 120 } |
121 } | 121 } |
122 } | 122 } |
123 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 123 if (bNotify && m_pForm->m_pFormNotify) { |
124 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); | 124 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); |
125 } | 125 } |
126 } break; | 126 } break; |
127 case CPDF_FormField::ComboBox: { | 127 case CPDF_FormField::ComboBox: { |
128 CFX_WideString csValue; | 128 CFX_WideString csValue; |
129 ClearSelection(); | 129 ClearSelection(); |
130 int iIndex = GetDefaultSelectedItem(); | 130 int iIndex = GetDefaultSelectedItem(); |
131 if (iIndex >= 0) { | 131 if (iIndex >= 0) { |
132 csValue = GetOptionLabel(iIndex); | 132 csValue = GetOptionLabel(iIndex); |
133 } | 133 } |
134 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 134 if (bNotify && m_pForm->m_pFormNotify) { |
135 int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); | 135 int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); |
136 if (iRet < 0) { | 136 if (iRet < 0) { |
137 return FALSE; | 137 return FALSE; |
138 } | 138 } |
139 } | 139 } |
140 SetItemSelection(iIndex, TRUE); | 140 SetItemSelection(iIndex, TRUE); |
141 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 141 if (bNotify && m_pForm->m_pFormNotify) { |
142 m_pForm->m_pFormNotify->AfterValueChange(this); | 142 m_pForm->m_pFormNotify->AfterValueChange(this); |
143 } | 143 } |
144 } break; | 144 } break; |
145 case CPDF_FormField::ListBox: { | 145 case CPDF_FormField::ListBox: { |
146 CFX_WideString csValue; | 146 CFX_WideString csValue; |
147 ClearSelection(); | 147 ClearSelection(); |
148 int iIndex = GetDefaultSelectedItem(); | 148 int iIndex = GetDefaultSelectedItem(); |
149 if (iIndex >= 0) { | 149 if (iIndex >= 0) { |
150 csValue = GetOptionLabel(iIndex); | 150 csValue = GetOptionLabel(iIndex); |
151 } | 151 } |
152 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 152 if (bNotify && m_pForm->m_pFormNotify) { |
153 int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); | 153 int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); |
154 if (iRet < 0) { | 154 if (iRet < 0) { |
155 return FALSE; | 155 return FALSE; |
156 } | 156 } |
157 } | 157 } |
158 SetItemSelection(iIndex, TRUE); | 158 SetItemSelection(iIndex, TRUE); |
159 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 159 if (bNotify && m_pForm->m_pFormNotify) { |
160 m_pForm->m_pFormNotify->AfterSelectionChange(this); | 160 m_pForm->m_pFormNotify->AfterSelectionChange(this); |
161 } | 161 } |
162 } break; | 162 } break; |
163 case CPDF_FormField::Text: | 163 case CPDF_FormField::Text: |
164 case CPDF_FormField::RichText: | 164 case CPDF_FormField::RichText: |
165 case CPDF_FormField::File: | 165 case CPDF_FormField::File: |
166 default: { | 166 default: { |
167 CPDF_Object* pDV = FPDF_GetFieldAttr(m_pDict, "DV"); | 167 CPDF_Object* pDV = FPDF_GetFieldAttr(m_pDict, "DV"); |
168 CFX_WideString csDValue; | 168 CFX_WideString csDValue; |
169 if (pDV != NULL) { | 169 if (pDV) { |
170 csDValue = pDV->GetUnicodeText(); | 170 csDValue = pDV->GetUnicodeText(); |
171 } | 171 } |
172 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); | 172 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); |
173 CFX_WideString csValue; | 173 CFX_WideString csValue; |
174 if (pV != NULL) { | 174 if (pV) { |
175 csValue = pV->GetUnicodeText(); | 175 csValue = pV->GetUnicodeText(); |
176 } | 176 } |
177 CPDF_Object* pRV = FPDF_GetFieldAttr(m_pDict, "RV"); | 177 CPDF_Object* pRV = FPDF_GetFieldAttr(m_pDict, "RV"); |
178 if (!pRV && (csDValue == csValue)) { | 178 if (!pRV && (csDValue == csValue)) { |
179 return FALSE; | 179 return FALSE; |
180 } | 180 } |
181 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 181 if (bNotify && m_pForm->m_pFormNotify) { |
182 int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csDValue); | 182 int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csDValue); |
183 if (iRet < 0) { | 183 if (iRet < 0) { |
184 return FALSE; | 184 return FALSE; |
185 } | 185 } |
186 } | 186 } |
187 if (pDV == NULL) { | 187 if (pDV == NULL) { |
188 m_pDict->RemoveAt("V"); | 188 m_pDict->RemoveAt("V"); |
189 m_pDict->RemoveAt("RV"); | 189 m_pDict->RemoveAt("RV"); |
190 } else { | 190 } else { |
191 CPDF_Object* pClone = pDV->Clone(); | 191 CPDF_Object* pClone = pDV->Clone(); |
192 if (pClone == NULL) { | 192 if (pClone == NULL) { |
193 return FALSE; | 193 return FALSE; |
194 } | 194 } |
195 m_pDict->SetAt("V", pClone); | 195 m_pDict->SetAt("V", pClone); |
196 if (pRV) { | 196 if (pRV) { |
197 CPDF_Object* pCloneR = pDV->Clone(); | 197 CPDF_Object* pCloneR = pDV->Clone(); |
198 m_pDict->SetAt("RV", pCloneR); | 198 m_pDict->SetAt("RV", pCloneR); |
199 } | 199 } |
200 } | 200 } |
201 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 201 if (bNotify && m_pForm->m_pFormNotify) { |
202 m_pForm->m_pFormNotify->AfterValueChange(this); | 202 m_pForm->m_pFormNotify->AfterValueChange(this); |
203 } | 203 } |
204 m_pForm->m_bUpdated = TRUE; | 204 m_pForm->m_bUpdated = TRUE; |
205 } break; | 205 } break; |
206 } | 206 } |
207 return TRUE; | 207 return TRUE; |
208 } | 208 } |
209 int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) { | 209 int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) { |
210 if (!pControl) { | 210 if (!pControl) { |
211 return -1; | 211 return -1; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 case CheckBox: | 324 case CheckBox: |
325 case RadioButton: { | 325 case RadioButton: { |
326 SetCheckValue(value, bDefault, bNotify); | 326 SetCheckValue(value, bDefault, bNotify); |
327 return TRUE; | 327 return TRUE; |
328 } | 328 } |
329 case File: | 329 case File: |
330 case RichText: | 330 case RichText: |
331 case Text: | 331 case Text: |
332 case ComboBox: { | 332 case ComboBox: { |
333 CFX_WideString csValue = value; | 333 CFX_WideString csValue = value; |
334 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 334 if (bNotify && m_pForm->m_pFormNotify) { |
335 int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); | 335 int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); |
336 if (iRet < 0) { | 336 if (iRet < 0) { |
337 return FALSE; | 337 return FALSE; |
338 } | 338 } |
339 } | 339 } |
340 int iIndex = FindOptionValue(csValue); | 340 int iIndex = FindOptionValue(csValue); |
341 if (iIndex < 0) { | 341 if (iIndex < 0) { |
342 CFX_ByteString bsEncodeText = PDF_EncodeText(csValue); | 342 CFX_ByteString bsEncodeText = PDF_EncodeText(csValue); |
343 m_pDict->SetAtString(bDefault ? "DV" : "V", bsEncodeText); | 343 m_pDict->SetAtString(bDefault ? "DV" : "V", bsEncodeText); |
344 if (m_Type == RichText && !bDefault) { | 344 if (m_Type == RichText && !bDefault) { |
345 m_pDict->SetAtString("RV", bsEncodeText); | 345 m_pDict->SetAtString("RV", bsEncodeText); |
346 } | 346 } |
347 m_pDict->RemoveAt("I"); | 347 m_pDict->RemoveAt("I"); |
348 } else { | 348 } else { |
349 m_pDict->SetAtString(bDefault ? "DV" : "V", PDF_EncodeText(csValue)); | 349 m_pDict->SetAtString(bDefault ? "DV" : "V", PDF_EncodeText(csValue)); |
350 if (bDefault) { | 350 if (bDefault) { |
351 } else { | 351 } else { |
352 ClearSelection(); | 352 ClearSelection(); |
353 SetItemSelection(iIndex, TRUE); | 353 SetItemSelection(iIndex, TRUE); |
354 } | 354 } |
355 } | 355 } |
356 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 356 if (bNotify && m_pForm->m_pFormNotify) { |
357 m_pForm->m_pFormNotify->AfterValueChange(this); | 357 m_pForm->m_pFormNotify->AfterValueChange(this); |
358 } | 358 } |
359 m_pForm->m_bUpdated = TRUE; | 359 m_pForm->m_bUpdated = TRUE; |
360 } break; | 360 } break; |
361 case ListBox: { | 361 case ListBox: { |
362 int iIndex = FindOptionValue(value); | 362 int iIndex = FindOptionValue(value); |
363 if (iIndex < 0) { | 363 if (iIndex < 0) { |
364 return FALSE; | 364 return FALSE; |
365 } | 365 } |
366 if (bDefault && iIndex == GetDefaultSelectedItem()) { | 366 if (bDefault && iIndex == GetDefaultSelectedItem()) { |
367 return FALSE; | 367 return FALSE; |
368 } | 368 } |
369 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 369 if (bNotify && m_pForm->m_pFormNotify) { |
370 CFX_WideString csValue = value; | 370 CFX_WideString csValue = value; |
371 int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); | 371 int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); |
372 if (iRet < 0) { | 372 if (iRet < 0) { |
373 return FALSE; | 373 return FALSE; |
374 } | 374 } |
375 } | 375 } |
376 if (bDefault) { | 376 if (bDefault) { |
377 } else { | 377 } else { |
378 ClearSelection(); | 378 ClearSelection(); |
379 SetItemSelection(iIndex, TRUE); | 379 SetItemSelection(iIndex, TRUE); |
380 } | 380 } |
381 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 381 if (bNotify && m_pForm->m_pFormNotify) { |
382 m_pForm->m_pFormNotify->AfterSelectionChange(this); | 382 m_pForm->m_pFormNotify->AfterSelectionChange(this); |
383 } | 383 } |
384 m_pForm->m_bUpdated = TRUE; | 384 m_pForm->m_bUpdated = TRUE; |
385 break; | 385 break; |
386 } | 386 } |
387 default: | 387 default: |
388 break; | 388 break; |
389 } | 389 } |
390 if (CPDF_InterForm::m_bUpdateAP) { | 390 if (CPDF_InterForm::m_bUpdateAP) { |
391 UpdateAP(NULL); | 391 UpdateAP(NULL); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 } | 457 } |
458 int nOpts = CountOptions(); | 458 int nOpts = CountOptions(); |
459 for (int i = 0; i < nOpts; i++) { | 459 for (int i = 0; i < nOpts; i++) { |
460 if (sel_value == GetOptionValue(i)) { | 460 if (sel_value == GetOptionValue(i)) { |
461 return i; | 461 return i; |
462 } | 462 } |
463 } | 463 } |
464 return -1; | 464 return -1; |
465 } | 465 } |
466 FX_BOOL CPDF_FormField::ClearSelection(FX_BOOL bNotify) { | 466 FX_BOOL CPDF_FormField::ClearSelection(FX_BOOL bNotify) { |
467 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 467 if (bNotify && m_pForm->m_pFormNotify) { |
468 int iRet = 0; | 468 int iRet = 0; |
469 CFX_WideString csValue; | 469 CFX_WideString csValue; |
470 int iIndex = GetSelectedIndex(0); | 470 int iIndex = GetSelectedIndex(0); |
471 if (iIndex >= 0) { | 471 if (iIndex >= 0) { |
472 csValue = GetOptionLabel(iIndex); | 472 csValue = GetOptionLabel(iIndex); |
473 } | 473 } |
474 if (GetType() == ListBox) { | 474 if (GetType() == ListBox) { |
475 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); | 475 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); |
476 } | 476 } |
477 if (GetType() == ComboBox) { | 477 if (GetType() == ComboBox) { |
478 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); | 478 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); |
479 } | 479 } |
480 if (iRet < 0) { | 480 if (iRet < 0) { |
481 return FALSE; | 481 return FALSE; |
482 } | 482 } |
483 } | 483 } |
484 m_pDict->RemoveAt("V"); | 484 m_pDict->RemoveAt("V"); |
485 m_pDict->RemoveAt("I"); | 485 m_pDict->RemoveAt("I"); |
486 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 486 if (bNotify && m_pForm->m_pFormNotify) { |
487 if (GetType() == ListBox) { | 487 if (GetType() == ListBox) { |
488 m_pForm->m_pFormNotify->AfterSelectionChange(this); | 488 m_pForm->m_pFormNotify->AfterSelectionChange(this); |
489 } | 489 } |
490 if (GetType() == ComboBox) { | 490 if (GetType() == ComboBox) { |
491 m_pForm->m_pFormNotify->AfterValueChange(this); | 491 m_pForm->m_pFormNotify->AfterValueChange(this); |
492 } | 492 } |
493 } | 493 } |
494 if (CPDF_InterForm::m_bUpdateAP) { | 494 if (CPDF_InterForm::m_bUpdateAP) { |
495 UpdateAP(NULL); | 495 UpdateAP(NULL); |
496 } | 496 } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 return FALSE; | 542 return FALSE; |
543 } | 543 } |
544 FX_BOOL CPDF_FormField::SetItemSelection(int index, | 544 FX_BOOL CPDF_FormField::SetItemSelection(int index, |
545 FX_BOOL bSelected, | 545 FX_BOOL bSelected, |
546 FX_BOOL bNotify) { | 546 FX_BOOL bNotify) { |
547 ASSERT(GetType() == ComboBox || GetType() == ListBox); | 547 ASSERT(GetType() == ComboBox || GetType() == ListBox); |
548 if (index < 0 || index >= CountOptions()) { | 548 if (index < 0 || index >= CountOptions()) { |
549 return FALSE; | 549 return FALSE; |
550 } | 550 } |
551 CFX_WideString opt_value = GetOptionValue(index); | 551 CFX_WideString opt_value = GetOptionValue(index); |
552 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 552 if (bNotify && m_pForm->m_pFormNotify) { |
553 int iRet = 0; | 553 int iRet = 0; |
554 if (GetType() == ListBox) { | 554 if (GetType() == ListBox) { |
555 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, opt_value); | 555 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, opt_value); |
556 } | 556 } |
557 if (GetType() == ComboBox) { | 557 if (GetType() == ComboBox) { |
558 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, opt_value); | 558 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, opt_value); |
559 } | 559 } |
560 if (iRet < 0) { | 560 if (iRet < 0) { |
561 return FALSE; | 561 return FALSE; |
562 } | 562 } |
563 } | 563 } |
564 if (!bSelected) { | 564 if (!bSelected) { |
565 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); | 565 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
566 if (pValue != NULL) { | 566 if (pValue) { |
567 if (m_Type == ListBox) { | 567 if (m_Type == ListBox) { |
568 SelectOption(index, FALSE); | 568 SelectOption(index, FALSE); |
569 if (pValue->IsString()) { | 569 if (pValue->IsString()) { |
570 if (pValue->GetUnicodeText() == opt_value) { | 570 if (pValue->GetUnicodeText() == opt_value) { |
571 m_pDict->RemoveAt("V"); | 571 m_pDict->RemoveAt("V"); |
572 } | 572 } |
573 } else if (pValue->IsArray()) { | 573 } else if (pValue->IsArray()) { |
574 CPDF_Array* pArray = CPDF_Array::Create(); | 574 CPDF_Array* pArray = CPDF_Array::Create(); |
575 int iCount = CountOptions(); | 575 int iCount = CountOptions(); |
576 for (int i = 0; i < iCount; i++) { | 576 for (int i = 0; i < iCount; i++) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
620 } else if (m_Type == ComboBox) { | 620 } else if (m_Type == ComboBox) { |
621 m_pDict->SetAtString("V", PDF_EncodeText(opt_value)); | 621 m_pDict->SetAtString("V", PDF_EncodeText(opt_value)); |
622 CPDF_Array* pI = CPDF_Array::Create(); | 622 CPDF_Array* pI = CPDF_Array::Create(); |
623 if (pI == NULL) { | 623 if (pI == NULL) { |
624 return FALSE; | 624 return FALSE; |
625 } | 625 } |
626 pI->AddInteger(index); | 626 pI->AddInteger(index); |
627 m_pDict->SetAt("I", pI); | 627 m_pDict->SetAt("I", pI); |
628 } | 628 } |
629 } | 629 } |
630 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 630 if (bNotify && m_pForm->m_pFormNotify) { |
631 if (GetType() == ListBox) { | 631 if (GetType() == ListBox) { |
632 m_pForm->m_pFormNotify->AfterSelectionChange(this); | 632 m_pForm->m_pFormNotify->AfterSelectionChange(this); |
633 } | 633 } |
634 if (GetType() == ComboBox) { | 634 if (GetType() == ComboBox) { |
635 m_pForm->m_pFormNotify->AfterValueChange(this); | 635 m_pForm->m_pFormNotify->AfterValueChange(this); |
636 } | 636 } |
637 } | 637 } |
638 if (CPDF_InterForm::m_bUpdateAP) { | 638 if (CPDF_InterForm::m_bUpdateAP) { |
639 UpdateAP(NULL); | 639 UpdateAP(NULL); |
640 } | 640 } |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
817 FX_BOOL bNotify) { | 817 FX_BOOL bNotify) { |
818 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 818 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
819 CPDF_FormControl* pControl = GetControl(iControlIndex); | 819 CPDF_FormControl* pControl = GetControl(iControlIndex); |
820 if (pControl == NULL) { | 820 if (pControl == NULL) { |
821 return FALSE; | 821 return FALSE; |
822 } | 822 } |
823 if (!bChecked && pControl->IsChecked() == bChecked) { | 823 if (!bChecked && pControl->IsChecked() == bChecked) { |
824 return FALSE; | 824 return FALSE; |
825 } | 825 } |
826 CFX_ByteArray statusArray; | 826 CFX_ByteArray statusArray; |
827 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 827 if (bNotify && m_pForm->m_pFormNotify) { |
828 SaveCheckedFieldStatus(this, statusArray); | 828 SaveCheckedFieldStatus(this, statusArray); |
829 } | 829 } |
830 CFX_WideString csWExport = pControl->GetExportValue(); | 830 CFX_WideString csWExport = pControl->GetExportValue(); |
831 CFX_ByteString csBExport = PDF_EncodeText(csWExport); | 831 CFX_ByteString csBExport = PDF_EncodeText(csWExport); |
832 int iCount = CountControls(); | 832 int iCount = CountControls(); |
833 FX_BOOL bUnison = PDF_FormField_IsUnison(this); | 833 FX_BOOL bUnison = PDF_FormField_IsUnison(this); |
834 for (int i = 0; i < iCount; i++) { | 834 for (int i = 0; i < iCount; i++) { |
835 CPDF_FormControl* pCtrl = GetControl(i); | 835 CPDF_FormControl* pCtrl = GetControl(i); |
836 if (bUnison) { | 836 if (bUnison) { |
837 CFX_WideString csEValue = pCtrl->GetExportValue(); | 837 CFX_WideString csEValue = pCtrl->GetExportValue(); |
(...skipping 14 matching lines...) Expand all Loading... |
852 } | 852 } |
853 } | 853 } |
854 } | 854 } |
855 CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); | 855 CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); |
856 if (!ToArray(pOpt)) { | 856 if (!ToArray(pOpt)) { |
857 if (bChecked) { | 857 if (bChecked) { |
858 m_pDict->SetAtName("V", csBExport); | 858 m_pDict->SetAtName("V", csBExport); |
859 } else { | 859 } else { |
860 CFX_ByteString csV; | 860 CFX_ByteString csV; |
861 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); | 861 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); |
862 if (pV != NULL) { | 862 if (pV) { |
863 csV = pV->GetString(); | 863 csV = pV->GetString(); |
864 } | 864 } |
865 if (csV == csBExport) { | 865 if (csV == csBExport) { |
866 m_pDict->SetAtName("V", "Off"); | 866 m_pDict->SetAtName("V", "Off"); |
867 } | 867 } |
868 } | 868 } |
869 } else if (bChecked) { | 869 } else if (bChecked) { |
870 CFX_ByteString csIndex; | 870 CFX_ByteString csIndex; |
871 csIndex.Format("%d", iControlIndex); | 871 csIndex.Format("%d", iControlIndex); |
872 m_pDict->SetAtName("V", csIndex); | 872 m_pDict->SetAtName("V", csIndex); |
873 } | 873 } |
874 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 874 if (bNotify && m_pForm->m_pFormNotify) { |
875 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); | 875 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); |
876 } | 876 } |
877 m_pForm->m_bUpdated = TRUE; | 877 m_pForm->m_bUpdated = TRUE; |
878 return TRUE; | 878 return TRUE; |
879 } | 879 } |
880 CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) { | 880 CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) { |
881 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 881 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
882 CFX_WideString csExport = L"Off"; | 882 CFX_WideString csExport = L"Off"; |
883 FX_BOOL bChecked; | 883 FX_BOOL bChecked; |
884 int iCount = CountControls(); | 884 int iCount = CountControls(); |
885 for (int i = 0; i < iCount; i++) { | 885 for (int i = 0; i < iCount; i++) { |
886 CPDF_FormControl* pControl = GetControl(i); | 886 CPDF_FormControl* pControl = GetControl(i); |
887 if (bDefault) { | 887 if (bDefault) { |
888 bChecked = pControl->IsDefaultChecked(); | 888 bChecked = pControl->IsDefaultChecked(); |
889 } else { | 889 } else { |
890 bChecked = pControl->IsChecked(); | 890 bChecked = pControl->IsChecked(); |
891 } | 891 } |
892 if (bChecked) { | 892 if (bChecked) { |
893 csExport = pControl->GetExportValue(); | 893 csExport = pControl->GetExportValue(); |
894 break; | 894 break; |
895 } | 895 } |
896 } | 896 } |
897 return csExport; | 897 return csExport; |
898 } | 898 } |
899 FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value, | 899 FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value, |
900 FX_BOOL bDefault, | 900 FX_BOOL bDefault, |
901 FX_BOOL bNotify) { | 901 FX_BOOL bNotify) { |
902 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 902 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
903 CFX_ByteArray statusArray; | 903 CFX_ByteArray statusArray; |
904 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 904 if (bNotify && m_pForm->m_pFormNotify) { |
905 SaveCheckedFieldStatus(this, statusArray); | 905 SaveCheckedFieldStatus(this, statusArray); |
906 } | 906 } |
907 int iCount = CountControls(); | 907 int iCount = CountControls(); |
908 for (int i = 0; i < iCount; i++) { | 908 for (int i = 0; i < iCount; i++) { |
909 CPDF_FormControl* pControl = GetControl(i); | 909 CPDF_FormControl* pControl = GetControl(i); |
910 CFX_WideString csExport = pControl->GetExportValue(); | 910 CFX_WideString csExport = pControl->GetExportValue(); |
911 if (csExport == value) { | 911 if (csExport == value) { |
912 if (bDefault) { | 912 if (bDefault) { |
913 } else { | 913 } else { |
914 CheckControl(GetControlIndex(pControl), TRUE); | 914 CheckControl(GetControlIndex(pControl), TRUE); |
915 } | 915 } |
916 break; | 916 break; |
917 } else { | 917 } else { |
918 if (bDefault) { | 918 if (bDefault) { |
919 } else { | 919 } else { |
920 CheckControl(GetControlIndex(pControl), FALSE); | 920 CheckControl(GetControlIndex(pControl), FALSE); |
921 } | 921 } |
922 } | 922 } |
923 } | 923 } |
924 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 924 if (bNotify && m_pForm->m_pFormNotify) { |
925 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); | 925 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); |
926 } | 926 } |
927 m_pForm->m_bUpdated = TRUE; | 927 m_pForm->m_bUpdated = TRUE; |
928 return TRUE; | 928 return TRUE; |
929 } | 929 } |
930 int CPDF_FormField::GetTopVisibleIndex() { | 930 int CPDF_FormField::GetTopVisibleIndex() { |
931 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); | 931 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); |
932 if (pObj == NULL) { | 932 if (pObj == NULL) { |
933 return 0; | 933 return 0; |
934 } | 934 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
991 } | 991 } |
992 m_pDict->SetAt("I", pArray); | 992 m_pDict->SetAt("I", pArray); |
993 } | 993 } |
994 FX_BOOL bReturn = FALSE; | 994 FX_BOOL bReturn = FALSE; |
995 for (int i = 0; i < (int)pArray->GetCount(); i++) { | 995 for (int i = 0; i < (int)pArray->GetCount(); i++) { |
996 int iFind = pArray->GetInteger(i); | 996 int iFind = pArray->GetInteger(i); |
997 if (iFind == iOptIndex) { | 997 if (iFind == iOptIndex) { |
998 if (bSelected) { | 998 if (bSelected) { |
999 return TRUE; | 999 return TRUE; |
1000 } | 1000 } |
1001 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 1001 if (bNotify && m_pForm->m_pFormNotify) { |
1002 int iRet = 0; | 1002 int iRet = 0; |
1003 CFX_WideString csValue = GetOptionLabel(iOptIndex); | 1003 CFX_WideString csValue = GetOptionLabel(iOptIndex); |
1004 if (GetType() == ListBox) { | 1004 if (GetType() == ListBox) { |
1005 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); | 1005 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); |
1006 } | 1006 } |
1007 if (GetType() == ComboBox) { | 1007 if (GetType() == ComboBox) { |
1008 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); | 1008 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); |
1009 } | 1009 } |
1010 if (iRet < 0) { | 1010 if (iRet < 0) { |
1011 return FALSE; | 1011 return FALSE; |
1012 } | 1012 } |
1013 } | 1013 } |
1014 pArray->RemoveAt(i); | 1014 pArray->RemoveAt(i); |
1015 bReturn = TRUE; | 1015 bReturn = TRUE; |
1016 break; | 1016 break; |
1017 } else if (iFind > iOptIndex) { | 1017 } else if (iFind > iOptIndex) { |
1018 if (!bSelected) { | 1018 if (!bSelected) { |
1019 continue; | 1019 continue; |
1020 } | 1020 } |
1021 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 1021 if (bNotify && m_pForm->m_pFormNotify) { |
1022 int iRet = 0; | 1022 int iRet = 0; |
1023 CFX_WideString csValue = GetOptionLabel(iOptIndex); | 1023 CFX_WideString csValue = GetOptionLabel(iOptIndex); |
1024 if (GetType() == ListBox) { | 1024 if (GetType() == ListBox) { |
1025 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); | 1025 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); |
1026 } | 1026 } |
1027 if (GetType() == ComboBox) { | 1027 if (GetType() == ComboBox) { |
1028 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); | 1028 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); |
1029 } | 1029 } |
1030 if (iRet < 0) { | 1030 if (iRet < 0) { |
1031 return FALSE; | 1031 return FALSE; |
1032 } | 1032 } |
1033 } | 1033 } |
1034 CPDF_Number* pNum = CPDF_Number::Create(iOptIndex); | 1034 CPDF_Number* pNum = CPDF_Number::Create(iOptIndex); |
1035 if (pNum == NULL) { | 1035 if (pNum == NULL) { |
1036 return FALSE; | 1036 return FALSE; |
1037 } | 1037 } |
1038 pArray->InsertAt(i, pNum); | 1038 pArray->InsertAt(i, pNum); |
1039 bReturn = TRUE; | 1039 bReturn = TRUE; |
1040 break; | 1040 break; |
1041 } | 1041 } |
1042 } | 1042 } |
1043 if (!bReturn) { | 1043 if (!bReturn) { |
1044 if (bSelected) { | 1044 if (bSelected) { |
1045 pArray->AddInteger(iOptIndex); | 1045 pArray->AddInteger(iOptIndex); |
1046 } | 1046 } |
1047 if (pArray->GetCount() == 0) { | 1047 if (pArray->GetCount() == 0) { |
1048 m_pDict->RemoveAt("I"); | 1048 m_pDict->RemoveAt("I"); |
1049 } | 1049 } |
1050 } | 1050 } |
1051 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 1051 if (bNotify && m_pForm->m_pFormNotify) { |
1052 if (GetType() == ListBox) { | 1052 if (GetType() == ListBox) { |
1053 m_pForm->m_pFormNotify->AfterSelectionChange(this); | 1053 m_pForm->m_pFormNotify->AfterSelectionChange(this); |
1054 } | 1054 } |
1055 if (GetType() == ComboBox) { | 1055 if (GetType() == ComboBox) { |
1056 m_pForm->m_pFormNotify->AfterValueChange(this); | 1056 m_pForm->m_pFormNotify->AfterValueChange(this); |
1057 } | 1057 } |
1058 } | 1058 } |
1059 m_pForm->m_bUpdated = TRUE; | 1059 m_pForm->m_bUpdated = TRUE; |
1060 return TRUE; | 1060 return TRUE; |
1061 } | 1061 } |
1062 FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify) { | 1062 FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify) { |
1063 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 1063 if (bNotify && m_pForm->m_pFormNotify) { |
1064 int iRet = 0; | 1064 int iRet = 0; |
1065 CFX_WideString csValue; | 1065 CFX_WideString csValue; |
1066 int iIndex = GetSelectedIndex(0); | 1066 int iIndex = GetSelectedIndex(0); |
1067 if (iIndex >= 0) { | 1067 if (iIndex >= 0) { |
1068 csValue = GetOptionLabel(iIndex); | 1068 csValue = GetOptionLabel(iIndex); |
1069 } | 1069 } |
1070 if (GetType() == ListBox) { | 1070 if (GetType() == ListBox) { |
1071 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); | 1071 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); |
1072 } | 1072 } |
1073 if (GetType() == ComboBox) { | 1073 if (GetType() == ComboBox) { |
1074 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); | 1074 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); |
1075 } | 1075 } |
1076 if (iRet < 0) { | 1076 if (iRet < 0) { |
1077 return FALSE; | 1077 return FALSE; |
1078 } | 1078 } |
1079 } | 1079 } |
1080 m_pDict->RemoveAt("I"); | 1080 m_pDict->RemoveAt("I"); |
1081 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 1081 if (bNotify && m_pForm->m_pFormNotify) { |
1082 if (GetType() == ListBox) { | 1082 if (GetType() == ListBox) { |
1083 m_pForm->m_pFormNotify->AfterSelectionChange(this); | 1083 m_pForm->m_pFormNotify->AfterSelectionChange(this); |
1084 } | 1084 } |
1085 if (GetType() == ComboBox) { | 1085 if (GetType() == ComboBox) { |
1086 m_pForm->m_pFormNotify->AfterValueChange(this); | 1086 m_pForm->m_pFormNotify->AfterValueChange(this); |
1087 } | 1087 } |
1088 } | 1088 } |
1089 m_pForm->m_bUpdated = TRUE; | 1089 m_pForm->m_bUpdated = TRUE; |
1090 return TRUE; | 1090 return TRUE; |
1091 } | 1091 } |
(...skipping 16 matching lines...) Expand all Loading... |
1108 m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")) | 1108 m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")) |
1109 pFontDict = m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")->GetDict( | 1109 pFontDict = m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")->GetDict( |
1110 font_name); | 1110 font_name); |
1111 | 1111 |
1112 if (pFontDict == NULL) { | 1112 if (pFontDict == NULL) { |
1113 return; | 1113 return; |
1114 } | 1114 } |
1115 m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict); | 1115 m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict); |
1116 m_FontSize = FX_atof(syntax.GetWord()); | 1116 m_FontSize = FX_atof(syntax.GetWord()); |
1117 } | 1117 } |
OLD | NEW |