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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
738 FX_BOOL bNotify) { | 738 FX_BOOL bNotify) { |
739 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 739 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
740 CPDF_FormControl* pControl = GetControl(iControlIndex); | 740 CPDF_FormControl* pControl = GetControl(iControlIndex); |
741 if (pControl == NULL) { | 741 if (pControl == NULL) { |
742 return FALSE; | 742 return FALSE; |
743 } | 743 } |
744 if (!bChecked && pControl->IsChecked() == bChecked) { | 744 if (!bChecked && pControl->IsChecked() == bChecked) { |
745 return FALSE; | 745 return FALSE; |
746 } | 746 } |
747 CFX_ByteArray statusArray; | 747 CFX_ByteArray statusArray; |
748 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 748 if (bNotify && m_pForm->m_pFormNotify) { |
749 SaveCheckedFieldStatus(this, statusArray); | 749 SaveCheckedFieldStatus(this, statusArray); |
750 } | 750 } |
751 CFX_WideString csWExport = pControl->GetExportValue(); | 751 CFX_WideString csWExport = pControl->GetExportValue(); |
752 CFX_ByteString csBExport = PDF_EncodeText(csWExport); | 752 CFX_ByteString csBExport = PDF_EncodeText(csWExport); |
753 int iCount = CountControls(); | 753 int iCount = CountControls(); |
754 FX_BOOL bUnison = PDF_FormField_IsUnison(this); | 754 FX_BOOL bUnison = PDF_FormField_IsUnison(this); |
755 for (int i = 0; i < iCount; i++) { | 755 for (int i = 0; i < iCount; i++) { |
756 CPDF_FormControl* pCtrl = GetControl(i); | 756 CPDF_FormControl* pCtrl = GetControl(i); |
757 if (bUnison) { | 757 if (bUnison) { |
758 CFX_WideString csEValue = pCtrl->GetExportValue(); | 758 CFX_WideString csEValue = pCtrl->GetExportValue(); |
(...skipping 14 matching lines...) Expand all Loading... |
773 } | 773 } |
774 } | 774 } |
775 } | 775 } |
776 CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); | 776 CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); |
777 if (!ToArray(pOpt)) { | 777 if (!ToArray(pOpt)) { |
778 if (bChecked) { | 778 if (bChecked) { |
779 m_pDict->SetAtName("V", csBExport); | 779 m_pDict->SetAtName("V", csBExport); |
780 } else { | 780 } else { |
781 CFX_ByteString csV; | 781 CFX_ByteString csV; |
782 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); | 782 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); |
783 if (pV != NULL) { | 783 if (pV) { |
784 csV = pV->GetString(); | 784 csV = pV->GetString(); |
785 } | 785 } |
786 if (csV == csBExport) { | 786 if (csV == csBExport) { |
787 m_pDict->SetAtName("V", "Off"); | 787 m_pDict->SetAtName("V", "Off"); |
788 } | 788 } |
789 } | 789 } |
790 } else if (bChecked) { | 790 } else if (bChecked) { |
791 CFX_ByteString csIndex; | 791 CFX_ByteString csIndex; |
792 csIndex.Format("%d", iControlIndex); | 792 csIndex.Format("%d", iControlIndex); |
793 m_pDict->SetAtName("V", csIndex); | 793 m_pDict->SetAtName("V", csIndex); |
794 } | 794 } |
795 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 795 if (bNotify && m_pForm->m_pFormNotify) { |
796 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); | 796 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); |
797 } | 797 } |
798 m_pForm->m_bUpdated = TRUE; | 798 m_pForm->m_bUpdated = TRUE; |
799 return TRUE; | 799 return TRUE; |
800 } | 800 } |
801 CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) { | 801 CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) { |
802 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 802 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
803 CFX_WideString csExport = L"Off"; | 803 CFX_WideString csExport = L"Off"; |
804 FX_BOOL bChecked; | 804 FX_BOOL bChecked; |
805 int iCount = CountControls(); | 805 int iCount = CountControls(); |
806 for (int i = 0; i < iCount; i++) { | 806 for (int i = 0; i < iCount; i++) { |
807 CPDF_FormControl* pControl = GetControl(i); | 807 CPDF_FormControl* pControl = GetControl(i); |
808 if (bDefault) { | 808 if (bDefault) { |
809 bChecked = pControl->IsDefaultChecked(); | 809 bChecked = pControl->IsDefaultChecked(); |
810 } else { | 810 } else { |
811 bChecked = pControl->IsChecked(); | 811 bChecked = pControl->IsChecked(); |
812 } | 812 } |
813 if (bChecked) { | 813 if (bChecked) { |
814 csExport = pControl->GetExportValue(); | 814 csExport = pControl->GetExportValue(); |
815 break; | 815 break; |
816 } | 816 } |
817 } | 817 } |
818 return csExport; | 818 return csExport; |
819 } | 819 } |
820 FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value, | 820 FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value, |
821 FX_BOOL bDefault, | 821 FX_BOOL bDefault, |
822 FX_BOOL bNotify) { | 822 FX_BOOL bNotify) { |
823 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 823 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
824 CFX_ByteArray statusArray; | 824 CFX_ByteArray statusArray; |
825 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 825 if (bNotify && m_pForm->m_pFormNotify) { |
826 SaveCheckedFieldStatus(this, statusArray); | 826 SaveCheckedFieldStatus(this, statusArray); |
827 } | 827 } |
828 int iCount = CountControls(); | 828 int iCount = CountControls(); |
829 for (int i = 0; i < iCount; i++) { | 829 for (int i = 0; i < iCount; i++) { |
830 CPDF_FormControl* pControl = GetControl(i); | 830 CPDF_FormControl* pControl = GetControl(i); |
831 CFX_WideString csExport = pControl->GetExportValue(); | 831 CFX_WideString csExport = pControl->GetExportValue(); |
832 if (csExport == value) { | 832 if (csExport == value) { |
833 if (bDefault) { | 833 if (bDefault) { |
834 } else { | 834 } else { |
835 CheckControl(GetControlIndex(pControl), TRUE); | 835 CheckControl(GetControlIndex(pControl), TRUE); |
836 } | 836 } |
837 break; | 837 break; |
838 } else { | 838 } else { |
839 if (bDefault) { | 839 if (bDefault) { |
840 } else { | 840 } else { |
841 CheckControl(GetControlIndex(pControl), FALSE); | 841 CheckControl(GetControlIndex(pControl), FALSE); |
842 } | 842 } |
843 } | 843 } |
844 } | 844 } |
845 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 845 if (bNotify && m_pForm->m_pFormNotify) { |
846 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); | 846 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); |
847 } | 847 } |
848 m_pForm->m_bUpdated = TRUE; | 848 m_pForm->m_bUpdated = TRUE; |
849 return TRUE; | 849 return TRUE; |
850 } | 850 } |
851 int CPDF_FormField::GetTopVisibleIndex() { | 851 int CPDF_FormField::GetTopVisibleIndex() { |
852 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); | 852 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); |
853 if (pObj == NULL) { | 853 if (pObj == NULL) { |
854 return 0; | 854 return 0; |
855 } | 855 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
912 } | 912 } |
913 m_pDict->SetAt("I", pArray); | 913 m_pDict->SetAt("I", pArray); |
914 } | 914 } |
915 FX_BOOL bReturn = FALSE; | 915 FX_BOOL bReturn = FALSE; |
916 for (int i = 0; i < (int)pArray->GetCount(); i++) { | 916 for (int i = 0; i < (int)pArray->GetCount(); i++) { |
917 int iFind = pArray->GetInteger(i); | 917 int iFind = pArray->GetInteger(i); |
918 if (iFind == iOptIndex) { | 918 if (iFind == iOptIndex) { |
919 if (bSelected) { | 919 if (bSelected) { |
920 return TRUE; | 920 return TRUE; |
921 } | 921 } |
922 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 922 if (bNotify && m_pForm->m_pFormNotify) { |
923 int iRet = 0; | 923 int iRet = 0; |
924 CFX_WideString csValue = GetOptionLabel(iOptIndex); | 924 CFX_WideString csValue = GetOptionLabel(iOptIndex); |
925 if (GetType() == ListBox) { | 925 if (GetType() == ListBox) { |
926 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); | 926 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); |
927 } | 927 } |
928 if (GetType() == ComboBox) { | 928 if (GetType() == ComboBox) { |
929 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); | 929 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); |
930 } | 930 } |
931 if (iRet < 0) { | 931 if (iRet < 0) { |
932 return FALSE; | 932 return FALSE; |
933 } | 933 } |
934 } | 934 } |
935 pArray->RemoveAt(i); | 935 pArray->RemoveAt(i); |
936 bReturn = TRUE; | 936 bReturn = TRUE; |
937 break; | 937 break; |
938 } else if (iFind > iOptIndex) { | 938 } else if (iFind > iOptIndex) { |
939 if (!bSelected) { | 939 if (!bSelected) { |
940 continue; | 940 continue; |
941 } | 941 } |
942 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 942 if (bNotify && m_pForm->m_pFormNotify) { |
943 int iRet = 0; | 943 int iRet = 0; |
944 CFX_WideString csValue = GetOptionLabel(iOptIndex); | 944 CFX_WideString csValue = GetOptionLabel(iOptIndex); |
945 if (GetType() == ListBox) { | 945 if (GetType() == ListBox) { |
946 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); | 946 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); |
947 } | 947 } |
948 if (GetType() == ComboBox) { | 948 if (GetType() == ComboBox) { |
949 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); | 949 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); |
950 } | 950 } |
951 if (iRet < 0) { | 951 if (iRet < 0) { |
952 return FALSE; | 952 return FALSE; |
953 } | 953 } |
954 } | 954 } |
955 CPDF_Number* pNum = CPDF_Number::Create(iOptIndex); | 955 CPDF_Number* pNum = CPDF_Number::Create(iOptIndex); |
956 if (pNum == NULL) { | 956 if (pNum == NULL) { |
957 return FALSE; | 957 return FALSE; |
958 } | 958 } |
959 pArray->InsertAt(i, pNum); | 959 pArray->InsertAt(i, pNum); |
960 bReturn = TRUE; | 960 bReturn = TRUE; |
961 break; | 961 break; |
962 } | 962 } |
963 } | 963 } |
964 if (!bReturn) { | 964 if (!bReturn) { |
965 if (bSelected) { | 965 if (bSelected) { |
966 pArray->AddInteger(iOptIndex); | 966 pArray->AddInteger(iOptIndex); |
967 } | 967 } |
968 if (pArray->GetCount() == 0) { | 968 if (pArray->GetCount() == 0) { |
969 m_pDict->RemoveAt("I"); | 969 m_pDict->RemoveAt("I"); |
970 } | 970 } |
971 } | 971 } |
972 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 972 if (bNotify && m_pForm->m_pFormNotify) { |
973 if (GetType() == ListBox) { | 973 if (GetType() == ListBox) { |
974 m_pForm->m_pFormNotify->AfterSelectionChange(this); | 974 m_pForm->m_pFormNotify->AfterSelectionChange(this); |
975 } | 975 } |
976 if (GetType() == ComboBox) { | 976 if (GetType() == ComboBox) { |
977 m_pForm->m_pFormNotify->AfterValueChange(this); | 977 m_pForm->m_pFormNotify->AfterValueChange(this); |
978 } | 978 } |
979 } | 979 } |
980 m_pForm->m_bUpdated = TRUE; | 980 m_pForm->m_bUpdated = TRUE; |
981 return TRUE; | 981 return TRUE; |
982 } | 982 } |
983 FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify) { | 983 FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify) { |
984 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 984 if (bNotify && m_pForm->m_pFormNotify) { |
985 int iRet = 0; | 985 int iRet = 0; |
986 CFX_WideString csValue; | 986 CFX_WideString csValue; |
987 int iIndex = GetSelectedIndex(0); | 987 int iIndex = GetSelectedIndex(0); |
988 if (iIndex >= 0) { | 988 if (iIndex >= 0) { |
989 csValue = GetOptionLabel(iIndex); | 989 csValue = GetOptionLabel(iIndex); |
990 } | 990 } |
991 if (GetType() == ListBox) { | 991 if (GetType() == ListBox) { |
992 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); | 992 iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); |
993 } | 993 } |
994 if (GetType() == ComboBox) { | 994 if (GetType() == ComboBox) { |
995 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); | 995 iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); |
996 } | 996 } |
997 if (iRet < 0) { | 997 if (iRet < 0) { |
998 return FALSE; | 998 return FALSE; |
999 } | 999 } |
1000 } | 1000 } |
1001 m_pDict->RemoveAt("I"); | 1001 m_pDict->RemoveAt("I"); |
1002 if (bNotify && m_pForm->m_pFormNotify != NULL) { | 1002 if (bNotify && m_pForm->m_pFormNotify) { |
1003 if (GetType() == ListBox) { | 1003 if (GetType() == ListBox) { |
1004 m_pForm->m_pFormNotify->AfterSelectionChange(this); | 1004 m_pForm->m_pFormNotify->AfterSelectionChange(this); |
1005 } | 1005 } |
1006 if (GetType() == ComboBox) { | 1006 if (GetType() == ComboBox) { |
1007 m_pForm->m_pFormNotify->AfterValueChange(this); | 1007 m_pForm->m_pFormNotify->AfterValueChange(this); |
1008 } | 1008 } |
1009 } | 1009 } |
1010 m_pForm->m_bUpdated = TRUE; | 1010 m_pForm->m_bUpdated = TRUE; |
1011 return TRUE; | 1011 return TRUE; |
1012 } | 1012 } |
(...skipping 16 matching lines...) Expand all Loading... |
1029 m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")) | 1029 m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")) |
1030 pFontDict = m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")->GetDict( | 1030 pFontDict = m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")->GetDict( |
1031 font_name); | 1031 font_name); |
1032 | 1032 |
1033 if (pFontDict == NULL) { | 1033 if (pFontDict == NULL) { |
1034 return; | 1034 return; |
1035 } | 1035 } |
1036 m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict); | 1036 m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict); |
1037 m_FontSize = FX_atof(syntax.GetWord()); | 1037 m_FontSize = FX_atof(syntax.GetWord()); |
1038 } | 1038 } |
OLD | NEW |