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/fpdfapi/fpdf_parser/include/cfdf_document.h" | 7 #include "core/fpdfapi/fpdf_parser/include/cfdf_document.h" |
8 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" | 8 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" |
9 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" | 9 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" |
10 #include "core/fpdfapi/fpdf_parser/include/cpdf_number.h" | 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_number.h" |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 m_Type = ListBox; | 98 m_Type = ListBox; |
99 if (flags & 0x200000) { | 99 if (flags & 0x200000) { |
100 m_Flags |= FORMLIST_MULTISELECT; | 100 m_Flags |= FORMLIST_MULTISELECT; |
101 } | 101 } |
102 } | 102 } |
103 LoadDA(); | 103 LoadDA(); |
104 } else if (type_name == "Sig") { | 104 } else if (type_name == "Sig") { |
105 m_Type = Sign; | 105 m_Type = Sign; |
106 } | 106 } |
107 } | 107 } |
108 CFX_WideString CPDF_FormField::GetFullName() { | 108 CFX_WideString CPDF_FormField::GetFullName() const { |
109 return ::GetFullName(m_pDict); | 109 return ::GetFullName(m_pDict); |
110 } | 110 } |
111 | 111 |
112 FX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify) { | 112 FX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify) { |
113 switch (m_Type) { | 113 switch (m_Type) { |
114 case CPDF_FormField::CheckBox: | 114 case CPDF_FormField::CheckBox: |
115 case CPDF_FormField::RadioButton: { | 115 case CPDF_FormField::RadioButton: { |
116 int iCount = CountControls(); | 116 int iCount = CountControls(); |
117 if (iCount) { | 117 if (iCount) { |
118 // TODO(weili): Check whether anything special needs to be done for | 118 // TODO(weili): Check whether anything special needs to be done for |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 m_pDict->RemoveAt("V"); | 181 m_pDict->RemoveAt("V"); |
182 m_pDict->RemoveAt("RV"); | 182 m_pDict->RemoveAt("RV"); |
183 } | 183 } |
184 if (bNotify) | 184 if (bNotify) |
185 NotifyAfterValueChange(); | 185 NotifyAfterValueChange(); |
186 } break; | 186 } break; |
187 } | 187 } |
188 return TRUE; | 188 return TRUE; |
189 } | 189 } |
190 | 190 |
191 int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) { | 191 int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) const { |
192 if (!pControl) | 192 if (!pControl) |
193 return -1; | 193 return -1; |
194 | 194 |
195 for (int i = 0; i < m_ControlList.GetSize(); i++) { | 195 for (int i = 0; i < m_ControlList.GetSize(); i++) { |
196 if (m_ControlList.GetAt(i) == pControl) | 196 if (m_ControlList.GetAt(i) == pControl) |
197 return i; | 197 return i; |
198 } | 198 } |
199 return -1; | 199 return -1; |
200 } | 200 } |
201 int CPDF_FormField::GetFieldType() { | 201 |
| 202 int CPDF_FormField::GetFieldType() const { |
202 switch (m_Type) { | 203 switch (m_Type) { |
203 case PushButton: | 204 case PushButton: |
204 return FIELDTYPE_PUSHBUTTON; | 205 return FIELDTYPE_PUSHBUTTON; |
205 case CheckBox: | 206 case CheckBox: |
206 return FIELDTYPE_CHECKBOX; | 207 return FIELDTYPE_CHECKBOX; |
207 case RadioButton: | 208 case RadioButton: |
208 return FIELDTYPE_RADIOBUTTON; | 209 return FIELDTYPE_RADIOBUTTON; |
209 case ComboBox: | 210 case ComboBox: |
210 return FIELDTYPE_COMBOBOX; | 211 return FIELDTYPE_COMBOBOX; |
211 case ListBox: | 212 case ListBox: |
212 return FIELDTYPE_LISTBOX; | 213 return FIELDTYPE_LISTBOX; |
213 case Text: | 214 case Text: |
214 case RichText: | 215 case RichText: |
215 case File: | 216 case File: |
216 return FIELDTYPE_TEXTFIELD; | 217 return FIELDTYPE_TEXTFIELD; |
217 case Sign: | 218 case Sign: |
218 return FIELDTYPE_SIGNATURE; | 219 return FIELDTYPE_SIGNATURE; |
219 default: | 220 default: |
220 break; | 221 break; |
221 } | 222 } |
222 return FIELDTYPE_UNKNOWN; | 223 return FIELDTYPE_UNKNOWN; |
223 } | 224 } |
224 | 225 |
225 CPDF_AAction CPDF_FormField::GetAdditionalAction() { | 226 CPDF_AAction CPDF_FormField::GetAdditionalAction() const { |
226 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "AA"); | 227 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "AA"); |
227 return CPDF_AAction(pObj ? pObj->GetDict() : nullptr); | 228 return CPDF_AAction(pObj ? pObj->GetDict() : nullptr); |
228 } | 229 } |
229 | 230 |
230 CFX_WideString CPDF_FormField::GetAlternateName() { | 231 CFX_WideString CPDF_FormField::GetAlternateName() const { |
231 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TU"); | 232 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TU"); |
232 if (!pObj) { | 233 if (!pObj) { |
233 return L""; | 234 return L""; |
234 } | 235 } |
235 return pObj->GetUnicodeText(); | 236 return pObj->GetUnicodeText(); |
236 } | 237 } |
237 CFX_WideString CPDF_FormField::GetMappingName() { | 238 CFX_WideString CPDF_FormField::GetMappingName() const { |
238 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TM"); | 239 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TM"); |
239 if (!pObj) { | 240 if (!pObj) { |
240 return L""; | 241 return L""; |
241 } | 242 } |
242 return pObj->GetUnicodeText(); | 243 return pObj->GetUnicodeText(); |
243 } | 244 } |
244 uint32_t CPDF_FormField::GetFieldFlags() { | 245 uint32_t CPDF_FormField::GetFieldFlags() const { |
245 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "Ff"); | 246 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "Ff"); |
246 if (!pObj) { | 247 if (!pObj) { |
247 return 0; | 248 return 0; |
248 } | 249 } |
249 return pObj->GetInteger(); | 250 return pObj->GetInteger(); |
250 } | 251 } |
251 CFX_ByteString CPDF_FormField::GetDefaultStyle() { | 252 CFX_ByteString CPDF_FormField::GetDefaultStyle() const { |
252 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS"); | 253 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS"); |
253 if (!pObj) { | 254 if (!pObj) { |
254 return ""; | 255 return ""; |
255 } | 256 } |
256 return pObj->GetString(); | 257 return pObj->GetString(); |
257 } | 258 } |
258 CFX_WideString CPDF_FormField::GetRichTextString() { | 259 CFX_WideString CPDF_FormField::GetRichTextString() const { |
259 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "RV"); | 260 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "RV"); |
260 if (!pObj) { | 261 if (!pObj) { |
261 return L""; | 262 return L""; |
262 } | 263 } |
263 return pObj->GetUnicodeText(); | 264 return pObj->GetUnicodeText(); |
264 } | 265 } |
265 CFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault) { | 266 CFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault) const { |
266 if (GetType() == CheckBox || GetType() == RadioButton) | 267 if (GetType() == CheckBox || GetType() == RadioButton) |
267 return GetCheckValue(bDefault); | 268 return GetCheckValue(bDefault); |
268 | 269 |
269 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V"); | 270 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V"); |
270 if (!pValue) { | 271 if (!pValue) { |
271 if (!bDefault) { | 272 if (!bDefault) { |
272 if (m_Type == RichText) { | 273 if (m_Type == RichText) { |
273 pValue = FPDF_GetFieldAttr(m_pDict, "V"); | 274 pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
274 } | 275 } |
275 if (!pValue && m_Type != Text) { | 276 if (!pValue && m_Type != Text) { |
(...skipping 11 matching lines...) Expand all Loading... |
287 pValue = pValue->AsArray()->GetDirectObjectAt(0); | 288 pValue = pValue->AsArray()->GetDirectObjectAt(0); |
288 if (pValue) | 289 if (pValue) |
289 return pValue->GetUnicodeText(); | 290 return pValue->GetUnicodeText(); |
290 break; | 291 break; |
291 default: | 292 default: |
292 break; | 293 break; |
293 } | 294 } |
294 return CFX_WideString(); | 295 return CFX_WideString(); |
295 } | 296 } |
296 | 297 |
297 CFX_WideString CPDF_FormField::GetValue() { | 298 CFX_WideString CPDF_FormField::GetValue() const { |
298 return GetValue(FALSE); | 299 return GetValue(FALSE); |
299 } | 300 } |
300 | 301 |
301 CFX_WideString CPDF_FormField::GetDefaultValue() { | 302 CFX_WideString CPDF_FormField::GetDefaultValue() const { |
302 return GetValue(TRUE); | 303 return GetValue(TRUE); |
303 } | 304 } |
304 | 305 |
305 FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, | 306 FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, |
306 FX_BOOL bDefault, | 307 FX_BOOL bDefault, |
307 FX_BOOL bNotify) { | 308 FX_BOOL bNotify) { |
308 switch (m_Type) { | 309 switch (m_Type) { |
309 case CheckBox: | 310 case CheckBox: |
310 case RadioButton: { | 311 case RadioButton: { |
311 SetCheckValue(value, bDefault, bNotify); | 312 SetCheckValue(value, bDefault, bNotify); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 default: | 359 default: |
359 break; | 360 break; |
360 } | 361 } |
361 return TRUE; | 362 return TRUE; |
362 } | 363 } |
363 | 364 |
364 FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, FX_BOOL bNotify) { | 365 FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, FX_BOOL bNotify) { |
365 return SetValue(value, FALSE, bNotify); | 366 return SetValue(value, FALSE, bNotify); |
366 } | 367 } |
367 | 368 |
368 int CPDF_FormField::GetMaxLen() { | 369 int CPDF_FormField::GetMaxLen() const { |
369 if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen")) | 370 if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen")) |
370 return pObj->GetInteger(); | 371 return pObj->GetInteger(); |
371 | 372 |
372 for (int i = 0; i < m_ControlList.GetSize(); i++) { | 373 for (int i = 0; i < m_ControlList.GetSize(); i++) { |
373 CPDF_FormControl* pControl = m_ControlList.GetAt(i); | 374 CPDF_FormControl* pControl = m_ControlList.GetAt(i); |
374 if (!pControl) | 375 if (!pControl) |
375 continue; | 376 continue; |
376 | 377 |
377 CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict; | 378 CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict; |
378 if (pWidgetDict->KeyExist("MaxLen")) | 379 if (pWidgetDict->KeyExist("MaxLen")) |
379 return pWidgetDict->GetIntegerBy("MaxLen"); | 380 return pWidgetDict->GetIntegerBy("MaxLen"); |
380 } | 381 } |
381 return 0; | 382 return 0; |
382 } | 383 } |
383 | 384 |
384 int CPDF_FormField::CountSelectedItems() { | 385 int CPDF_FormField::CountSelectedItems() const { |
385 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); | 386 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
386 if (!pValue) { | 387 if (!pValue) { |
387 pValue = FPDF_GetFieldAttr(m_pDict, "I"); | 388 pValue = FPDF_GetFieldAttr(m_pDict, "I"); |
388 if (!pValue) | 389 if (!pValue) |
389 return 0; | 390 return 0; |
390 } | 391 } |
391 | 392 |
392 if (pValue->IsString() || pValue->IsNumber()) | 393 if (pValue->IsString() || pValue->IsNumber()) |
393 return pValue->GetString().IsEmpty() ? 0 : 1; | 394 return pValue->GetString().IsEmpty() ? 0 : 1; |
394 if (CPDF_Array* pArray = pValue->AsArray()) | 395 if (CPDF_Array* pArray = pValue->AsArray()) |
395 return pArray->GetCount(); | 396 return pArray->GetCount(); |
396 return 0; | 397 return 0; |
397 } | 398 } |
398 | 399 |
399 int CPDF_FormField::GetSelectedIndex(int index) { | 400 int CPDF_FormField::GetSelectedIndex(int index) const { |
400 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); | 401 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
401 if (!pValue) { | 402 if (!pValue) { |
402 pValue = FPDF_GetFieldAttr(m_pDict, "I"); | 403 pValue = FPDF_GetFieldAttr(m_pDict, "I"); |
403 if (!pValue) | 404 if (!pValue) |
404 return -1; | 405 return -1; |
405 } | 406 } |
406 if (pValue->IsNumber()) | 407 if (pValue->IsNumber()) |
407 return pValue->GetInteger(); | 408 return pValue->GetInteger(); |
408 | 409 |
409 CFX_WideString sel_value; | 410 CFX_WideString sel_value; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 if (!NotifyListOrComboBoxBeforeChange(csValue)) | 445 if (!NotifyListOrComboBoxBeforeChange(csValue)) |
445 return FALSE; | 446 return FALSE; |
446 } | 447 } |
447 m_pDict->RemoveAt("V"); | 448 m_pDict->RemoveAt("V"); |
448 m_pDict->RemoveAt("I"); | 449 m_pDict->RemoveAt("I"); |
449 if (bNotify) | 450 if (bNotify) |
450 NotifyListOrComboBoxAfterChange(); | 451 NotifyListOrComboBoxAfterChange(); |
451 return TRUE; | 452 return TRUE; |
452 } | 453 } |
453 | 454 |
454 FX_BOOL CPDF_FormField::IsItemSelected(int index) { | 455 FX_BOOL CPDF_FormField::IsItemSelected(int index) const { |
455 ASSERT(GetType() == ComboBox || GetType() == ListBox); | 456 ASSERT(GetType() == ComboBox || GetType() == ListBox); |
456 if (index < 0 || index >= CountOptions()) { | 457 if (index < 0 || index >= CountOptions()) { |
457 return FALSE; | 458 return FALSE; |
458 } | 459 } |
459 if (IsOptionSelected(index)) { | 460 if (IsOptionSelected(index)) { |
460 return TRUE; | 461 return TRUE; |
461 } | 462 } |
462 CFX_WideString opt_value = GetOptionValue(index); | 463 CFX_WideString opt_value = GetOptionValue(index); |
463 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); | 464 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
464 if (!pValue) { | 465 if (!pValue) { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 m_pDict->RemoveAt("V"); | 554 m_pDict->RemoveAt("V"); |
554 m_pDict->RemoveAt("I"); | 555 m_pDict->RemoveAt("I"); |
555 } | 556 } |
556 } | 557 } |
557 } | 558 } |
558 if (bNotify) | 559 if (bNotify) |
559 NotifyListOrComboBoxAfterChange(); | 560 NotifyListOrComboBoxAfterChange(); |
560 return TRUE; | 561 return TRUE; |
561 } | 562 } |
562 | 563 |
563 FX_BOOL CPDF_FormField::IsItemDefaultSelected(int index) { | 564 FX_BOOL CPDF_FormField::IsItemDefaultSelected(int index) const { |
564 ASSERT(GetType() == ComboBox || GetType() == ListBox); | 565 ASSERT(GetType() == ComboBox || GetType() == ListBox); |
565 if (index < 0 || index >= CountOptions()) | 566 if (index < 0 || index >= CountOptions()) |
566 return FALSE; | 567 return FALSE; |
567 int iDVIndex = GetDefaultSelectedItem(); | 568 int iDVIndex = GetDefaultSelectedItem(); |
568 return iDVIndex >= 0 && iDVIndex == index; | 569 return iDVIndex >= 0 && iDVIndex == index; |
569 } | 570 } |
570 | 571 |
571 int CPDF_FormField::GetDefaultSelectedItem() { | 572 int CPDF_FormField::GetDefaultSelectedItem() const { |
572 ASSERT(GetType() == ComboBox || GetType() == ListBox); | 573 ASSERT(GetType() == ComboBox || GetType() == ListBox); |
573 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "DV"); | 574 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "DV"); |
574 if (!pValue) | 575 if (!pValue) |
575 return -1; | 576 return -1; |
576 CFX_WideString csDV = pValue->GetUnicodeText(); | 577 CFX_WideString csDV = pValue->GetUnicodeText(); |
577 if (csDV.IsEmpty()) | 578 if (csDV.IsEmpty()) |
578 return -1; | 579 return -1; |
579 for (int i = 0; i < CountOptions(); i++) { | 580 for (int i = 0; i < CountOptions(); i++) { |
580 if (csDV == GetOptionValue(i)) | 581 if (csDV == GetOptionValue(i)) |
581 return i; | 582 return i; |
582 } | 583 } |
583 return -1; | 584 return -1; |
584 } | 585 } |
585 | 586 |
586 int CPDF_FormField::CountOptions() { | 587 int CPDF_FormField::CountOptions() const { |
587 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "Opt")); | 588 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "Opt")); |
588 return pArray ? pArray->GetCount() : 0; | 589 return pArray ? pArray->GetCount() : 0; |
589 } | 590 } |
590 | 591 |
591 CFX_WideString CPDF_FormField::GetOptionText(int index, int sub_index) { | 592 CFX_WideString CPDF_FormField::GetOptionText(int index, int sub_index) const { |
592 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "Opt")); | 593 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "Opt")); |
593 if (!pArray) | 594 if (!pArray) |
594 return CFX_WideString(); | 595 return CFX_WideString(); |
595 | 596 |
596 CPDF_Object* pOption = pArray->GetDirectObjectAt(index); | 597 CPDF_Object* pOption = pArray->GetDirectObjectAt(index); |
597 if (!pOption) | 598 if (!pOption) |
598 return CFX_WideString(); | 599 return CFX_WideString(); |
599 if (CPDF_Array* pOptionArray = pOption->AsArray()) | 600 if (CPDF_Array* pOptionArray = pOption->AsArray()) |
600 pOption = pOptionArray->GetDirectObjectAt(sub_index); | 601 pOption = pOptionArray->GetDirectObjectAt(sub_index); |
601 | 602 |
602 CPDF_String* pString = ToString(pOption); | 603 CPDF_String* pString = ToString(pOption); |
603 return pString ? pString->GetUnicodeText() : CFX_WideString(); | 604 return pString ? pString->GetUnicodeText() : CFX_WideString(); |
604 } | 605 } |
605 CFX_WideString CPDF_FormField::GetOptionLabel(int index) { | 606 CFX_WideString CPDF_FormField::GetOptionLabel(int index) const { |
606 return GetOptionText(index, 1); | 607 return GetOptionText(index, 1); |
607 } | 608 } |
608 CFX_WideString CPDF_FormField::GetOptionValue(int index) { | 609 CFX_WideString CPDF_FormField::GetOptionValue(int index) const { |
609 return GetOptionText(index, 0); | 610 return GetOptionText(index, 0); |
610 } | 611 } |
611 | 612 |
612 int CPDF_FormField::FindOption(CFX_WideString csOptLabel) { | 613 int CPDF_FormField::FindOption(CFX_WideString csOptLabel) const { |
613 for (int i = 0; i < CountOptions(); i++) { | 614 for (int i = 0; i < CountOptions(); i++) { |
614 if (GetOptionValue(i) == csOptLabel) | 615 if (GetOptionValue(i) == csOptLabel) |
615 return i; | 616 return i; |
616 } | 617 } |
617 return -1; | 618 return -1; |
618 } | 619 } |
619 | 620 |
620 int CPDF_FormField::FindOptionValue(const CFX_WideString& csOptValue) { | 621 int CPDF_FormField::FindOptionValue(const CFX_WideString& csOptValue) const { |
621 for (int i = 0; i < CountOptions(); i++) { | 622 for (int i = 0; i < CountOptions(); i++) { |
622 if (GetOptionValue(i) == csOptValue) | 623 if (GetOptionValue(i) == csOptValue) |
623 return i; | 624 return i; |
624 } | 625 } |
625 return -1; | 626 return -1; |
626 } | 627 } |
627 | 628 |
628 #ifdef PDF_ENABLE_XFA | 629 #ifdef PDF_ENABLE_XFA |
629 int CPDF_FormField::InsertOption(CFX_WideString csOptLabel, | 630 int CPDF_FormField::InsertOption(CFX_WideString csOptLabel, |
630 int index, | 631 int index, |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 } else if (bChecked) { | 735 } else if (bChecked) { |
735 CFX_ByteString csIndex; | 736 CFX_ByteString csIndex; |
736 csIndex.Format("%d", iControlIndex); | 737 csIndex.Format("%d", iControlIndex); |
737 m_pDict->SetAtName("V", csIndex); | 738 m_pDict->SetAtName("V", csIndex); |
738 } | 739 } |
739 if (bNotify && m_pForm->m_pFormNotify) | 740 if (bNotify && m_pForm->m_pFormNotify) |
740 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); | 741 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); |
741 return TRUE; | 742 return TRUE; |
742 } | 743 } |
743 | 744 |
744 CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) { | 745 CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) const { |
745 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 746 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
746 CFX_WideString csExport = L"Off"; | 747 CFX_WideString csExport = L"Off"; |
747 int iCount = CountControls(); | 748 int iCount = CountControls(); |
748 for (int i = 0; i < iCount; i++) { | 749 for (int i = 0; i < iCount; i++) { |
749 CPDF_FormControl* pControl = GetControl(i); | 750 CPDF_FormControl* pControl = GetControl(i); |
750 FX_BOOL bChecked = | 751 FX_BOOL bChecked = |
751 bDefault ? pControl->IsDefaultChecked() : pControl->IsChecked(); | 752 bDefault ? pControl->IsDefaultChecked() : pControl->IsChecked(); |
752 if (bChecked) { | 753 if (bChecked) { |
753 csExport = pControl->GetExportValue(); | 754 csExport = pControl->GetExportValue(); |
754 break; | 755 break; |
(...skipping 14 matching lines...) Expand all Loading... |
769 if (!bDefault) | 770 if (!bDefault) |
770 CheckControl(GetControlIndex(pControl), val); | 771 CheckControl(GetControlIndex(pControl), val); |
771 if (val) | 772 if (val) |
772 break; | 773 break; |
773 } | 774 } |
774 if (bNotify && m_pForm->m_pFormNotify) | 775 if (bNotify && m_pForm->m_pFormNotify) |
775 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); | 776 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); |
776 return TRUE; | 777 return TRUE; |
777 } | 778 } |
778 | 779 |
779 int CPDF_FormField::GetTopVisibleIndex() { | 780 int CPDF_FormField::GetTopVisibleIndex() const { |
780 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); | 781 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); |
781 return pObj ? pObj->GetInteger() : 0; | 782 return pObj ? pObj->GetInteger() : 0; |
782 } | 783 } |
783 | 784 |
784 int CPDF_FormField::CountSelectedOptions() { | 785 int CPDF_FormField::CountSelectedOptions() const { |
785 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); | 786 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); |
786 return pArray ? pArray->GetCount() : 0; | 787 return pArray ? pArray->GetCount() : 0; |
787 } | 788 } |
788 | 789 |
789 int CPDF_FormField::GetSelectedOptionIndex(int index) { | 790 int CPDF_FormField::GetSelectedOptionIndex(int index) const { |
790 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); | 791 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); |
791 if (!pArray) | 792 if (!pArray) |
792 return -1; | 793 return -1; |
793 | 794 |
794 int iCount = pArray->GetCount(); | 795 int iCount = pArray->GetCount(); |
795 if (iCount < 0 || index >= iCount) | 796 if (iCount < 0 || index >= iCount) |
796 return -1; | 797 return -1; |
797 return pArray->GetIntegerAt(index); | 798 return pArray->GetIntegerAt(index); |
798 } | 799 } |
799 | 800 |
800 FX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex) { | 801 FX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex) const { |
801 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); | 802 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); |
802 if (!pArray) | 803 if (!pArray) |
803 return FALSE; | 804 return FALSE; |
804 | 805 |
805 for (CPDF_Object* pObj : *pArray) { | 806 for (CPDF_Object* pObj : *pArray) { |
806 if (pObj->GetInteger() == iOptIndex) | 807 if (pObj->GetInteger() == iOptIndex) |
807 return TRUE; | 808 return TRUE; |
808 } | 809 } |
809 return FALSE; | 810 return FALSE; |
810 } | 811 } |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
957 case ListBox: | 958 case ListBox: |
958 NotifyAfterSelectionChange(); | 959 NotifyAfterSelectionChange(); |
959 break; | 960 break; |
960 case ComboBox: | 961 case ComboBox: |
961 NotifyAfterValueChange(); | 962 NotifyAfterValueChange(); |
962 break; | 963 break; |
963 default: | 964 default: |
964 break; | 965 break; |
965 } | 966 } |
966 } | 967 } |
OLD | NEW |