| 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/fpdfdoc/cpdf_formfield.h" | 7 #include "core/fpdfdoc/cpdf_formfield.h" |
| 8 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 LoadDA(); | 154 LoadDA(); |
| 155 } else if (type_name == "Sig") { | 155 } else if (type_name == "Sig") { |
| 156 m_Type = Sign; | 156 m_Type = Sign; |
| 157 } | 157 } |
| 158 } | 158 } |
| 159 | 159 |
| 160 CFX_WideString CPDF_FormField::GetFullName() const { | 160 CFX_WideString CPDF_FormField::GetFullName() const { |
| 161 return FPDF_GetFullName(m_pDict); | 161 return FPDF_GetFullName(m_pDict); |
| 162 } | 162 } |
| 163 | 163 |
| 164 FX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify) { | 164 bool CPDF_FormField::ResetField(bool bNotify) { |
| 165 switch (m_Type) { | 165 switch (m_Type) { |
| 166 case CPDF_FormField::CheckBox: | 166 case CPDF_FormField::CheckBox: |
| 167 case CPDF_FormField::RadioButton: { | 167 case CPDF_FormField::RadioButton: { |
| 168 int iCount = CountControls(); | 168 int iCount = CountControls(); |
| 169 if (iCount) { | 169 if (iCount) { |
| 170 // TODO(weili): Check whether anything special needs to be done for | 170 // TODO(weili): Check whether anything special needs to be done for |
| 171 // unison field. Otherwise, merge these branches. | 171 // unison field. Otherwise, merge these branches. |
| 172 if (IsUnison(this)) { | 172 if (IsUnison(this)) { |
| 173 for (int i = 0; i < iCount; i++) | 173 for (int i = 0; i < iCount; i++) |
| 174 CheckControl(i, GetControl(i)->IsDefaultChecked(), FALSE); | 174 CheckControl(i, GetControl(i)->IsDefaultChecked(), false); |
| 175 } else { | 175 } else { |
| 176 for (int i = 0; i < iCount; i++) | 176 for (int i = 0; i < iCount; i++) |
| 177 CheckControl(i, GetControl(i)->IsDefaultChecked(), FALSE); | 177 CheckControl(i, GetControl(i)->IsDefaultChecked(), false); |
| 178 } | 178 } |
| 179 } | 179 } |
| 180 if (bNotify && m_pForm->m_pFormNotify) | 180 if (bNotify && m_pForm->m_pFormNotify) |
| 181 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); | 181 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); |
| 182 break; | 182 break; |
| 183 } | 183 } |
| 184 case CPDF_FormField::ComboBox: | 184 case CPDF_FormField::ComboBox: |
| 185 case CPDF_FormField::ListBox: { | 185 case CPDF_FormField::ListBox: { |
| 186 CFX_WideString csValue; | 186 CFX_WideString csValue; |
| 187 ClearSelection(); | 187 ClearSelection(); |
| 188 int iIndex = GetDefaultSelectedItem(); | 188 int iIndex = GetDefaultSelectedItem(); |
| 189 if (iIndex >= 0) | 189 if (iIndex >= 0) |
| 190 csValue = GetOptionLabel(iIndex); | 190 csValue = GetOptionLabel(iIndex); |
| 191 | 191 |
| 192 if (bNotify && !NotifyListOrComboBoxBeforeChange(csValue)) | 192 if (bNotify && !NotifyListOrComboBoxBeforeChange(csValue)) |
| 193 return FALSE; | 193 return false; |
| 194 | 194 |
| 195 SetItemSelection(iIndex, TRUE); | 195 SetItemSelection(iIndex, true); |
| 196 if (bNotify) | 196 if (bNotify) |
| 197 NotifyListOrComboBoxAfterChange(); | 197 NotifyListOrComboBoxAfterChange(); |
| 198 break; | 198 break; |
| 199 } | 199 } |
| 200 case CPDF_FormField::Text: | 200 case CPDF_FormField::Text: |
| 201 case CPDF_FormField::RichText: | 201 case CPDF_FormField::RichText: |
| 202 case CPDF_FormField::File: | 202 case CPDF_FormField::File: |
| 203 default: { | 203 default: { |
| 204 CPDF_Object* pDV = FPDF_GetFieldAttr(m_pDict, "DV"); | 204 CPDF_Object* pDV = FPDF_GetFieldAttr(m_pDict, "DV"); |
| 205 CFX_WideString csDValue; | 205 CFX_WideString csDValue; |
| 206 if (pDV) | 206 if (pDV) |
| 207 csDValue = pDV->GetUnicodeText(); | 207 csDValue = pDV->GetUnicodeText(); |
| 208 | 208 |
| 209 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); | 209 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); |
| 210 CFX_WideString csValue; | 210 CFX_WideString csValue; |
| 211 if (pV) | 211 if (pV) |
| 212 csValue = pV->GetUnicodeText(); | 212 csValue = pV->GetUnicodeText(); |
| 213 | 213 |
| 214 CPDF_Object* pRV = FPDF_GetFieldAttr(m_pDict, "RV"); | 214 CPDF_Object* pRV = FPDF_GetFieldAttr(m_pDict, "RV"); |
| 215 if (!pRV && (csDValue == csValue)) | 215 if (!pRV && (csDValue == csValue)) |
| 216 return FALSE; | 216 return false; |
| 217 | 217 |
| 218 if (bNotify && !NotifyBeforeValueChange(csDValue)) | 218 if (bNotify && !NotifyBeforeValueChange(csDValue)) |
| 219 return FALSE; | 219 return false; |
| 220 | 220 |
| 221 if (pDV) { | 221 if (pDV) { |
| 222 CPDF_Object* pClone = pDV->Clone(); | 222 CPDF_Object* pClone = pDV->Clone(); |
| 223 if (!pClone) | 223 if (!pClone) |
| 224 return FALSE; | 224 return false; |
| 225 | 225 |
| 226 m_pDict->SetFor("V", pClone); | 226 m_pDict->SetFor("V", pClone); |
| 227 if (pRV) { | 227 if (pRV) { |
| 228 CPDF_Object* pCloneR = pDV->Clone(); | 228 CPDF_Object* pCloneR = pDV->Clone(); |
| 229 m_pDict->SetFor("RV", pCloneR); | 229 m_pDict->SetFor("RV", pCloneR); |
| 230 } | 230 } |
| 231 } else { | 231 } else { |
| 232 m_pDict->RemoveFor("V"); | 232 m_pDict->RemoveFor("V"); |
| 233 m_pDict->RemoveFor("RV"); | 233 m_pDict->RemoveFor("RV"); |
| 234 } | 234 } |
| 235 if (bNotify) | 235 if (bNotify) |
| 236 NotifyAfterValueChange(); | 236 NotifyAfterValueChange(); |
| 237 break; | 237 break; |
| 238 } | 238 } |
| 239 } | 239 } |
| 240 return TRUE; | 240 return true; |
| 241 } | 241 } |
| 242 | 242 |
| 243 int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) const { | 243 int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) const { |
| 244 if (!pControl) | 244 if (!pControl) |
| 245 return -1; | 245 return -1; |
| 246 | 246 |
| 247 for (int i = 0; i < m_ControlList.GetSize(); i++) { | 247 for (int i = 0; i < m_ControlList.GetSize(); i++) { |
| 248 if (m_ControlList.GetAt(i) == pControl) | 248 if (m_ControlList.GetAt(i) == pControl) |
| 249 return i; | 249 return i; |
| 250 } | 250 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 CFX_ByteString CPDF_FormField::GetDefaultStyle() const { | 298 CFX_ByteString CPDF_FormField::GetDefaultStyle() const { |
| 299 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS"); | 299 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS"); |
| 300 return pObj ? pObj->GetString() : ""; | 300 return pObj ? pObj->GetString() : ""; |
| 301 } | 301 } |
| 302 | 302 |
| 303 CFX_WideString CPDF_FormField::GetRichTextString() const { | 303 CFX_WideString CPDF_FormField::GetRichTextString() const { |
| 304 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "RV"); | 304 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "RV"); |
| 305 return pObj ? pObj->GetUnicodeText() : L""; | 305 return pObj ? pObj->GetUnicodeText() : L""; |
| 306 } | 306 } |
| 307 | 307 |
| 308 CFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault) const { | 308 CFX_WideString CPDF_FormField::GetValue(bool bDefault) const { |
| 309 if (GetType() == CheckBox || GetType() == RadioButton) | 309 if (GetType() == CheckBox || GetType() == RadioButton) |
| 310 return GetCheckValue(bDefault); | 310 return GetCheckValue(bDefault); |
| 311 | 311 |
| 312 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V"); | 312 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V"); |
| 313 if (!pValue) { | 313 if (!pValue) { |
| 314 if (!bDefault) { | 314 if (!bDefault) { |
| 315 if (m_Type == RichText) | 315 if (m_Type == RichText) |
| 316 pValue = FPDF_GetFieldAttr(m_pDict, "V"); | 316 pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
| 317 if (!pValue && m_Type != Text) | 317 if (!pValue && m_Type != Text) |
| 318 pValue = FPDF_GetFieldAttr(m_pDict, "DV"); | 318 pValue = FPDF_GetFieldAttr(m_pDict, "DV"); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 330 if (pValue) | 330 if (pValue) |
| 331 return pValue->GetUnicodeText(); | 331 return pValue->GetUnicodeText(); |
| 332 break; | 332 break; |
| 333 default: | 333 default: |
| 334 break; | 334 break; |
| 335 } | 335 } |
| 336 return CFX_WideString(); | 336 return CFX_WideString(); |
| 337 } | 337 } |
| 338 | 338 |
| 339 CFX_WideString CPDF_FormField::GetValue() const { | 339 CFX_WideString CPDF_FormField::GetValue() const { |
| 340 return GetValue(FALSE); | 340 return GetValue(false); |
| 341 } | 341 } |
| 342 | 342 |
| 343 CFX_WideString CPDF_FormField::GetDefaultValue() const { | 343 CFX_WideString CPDF_FormField::GetDefaultValue() const { |
| 344 return GetValue(TRUE); | 344 return GetValue(true); |
| 345 } | 345 } |
| 346 | 346 |
| 347 FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, | 347 bool CPDF_FormField::SetValue(const CFX_WideString& value, |
| 348 FX_BOOL bDefault, | 348 bool bDefault, |
| 349 FX_BOOL bNotify) { | 349 bool bNotify) { |
| 350 switch (m_Type) { | 350 switch (m_Type) { |
| 351 case CheckBox: | 351 case CheckBox: |
| 352 case RadioButton: { | 352 case RadioButton: { |
| 353 SetCheckValue(value, bDefault, bNotify); | 353 SetCheckValue(value, bDefault, bNotify); |
| 354 return TRUE; | 354 return true; |
| 355 } | 355 } |
| 356 case File: | 356 case File: |
| 357 case RichText: | 357 case RichText: |
| 358 case Text: | 358 case Text: |
| 359 case ComboBox: { | 359 case ComboBox: { |
| 360 CFX_WideString csValue = value; | 360 CFX_WideString csValue = value; |
| 361 if (bNotify && !NotifyBeforeValueChange(csValue)) | 361 if (bNotify && !NotifyBeforeValueChange(csValue)) |
| 362 return FALSE; | 362 return false; |
| 363 | 363 |
| 364 int iIndex = FindOptionValue(csValue); | 364 int iIndex = FindOptionValue(csValue); |
| 365 if (iIndex < 0) { | 365 if (iIndex < 0) { |
| 366 CFX_ByteString bsEncodeText = PDF_EncodeText(csValue); | 366 CFX_ByteString bsEncodeText = PDF_EncodeText(csValue); |
| 367 m_pDict->SetStringFor(bDefault ? "DV" : "V", bsEncodeText); | 367 m_pDict->SetStringFor(bDefault ? "DV" : "V", bsEncodeText); |
| 368 if (m_Type == RichText && !bDefault) | 368 if (m_Type == RichText && !bDefault) |
| 369 m_pDict->SetStringFor("RV", bsEncodeText); | 369 m_pDict->SetStringFor("RV", bsEncodeText); |
| 370 m_pDict->RemoveFor("I"); | 370 m_pDict->RemoveFor("I"); |
| 371 } else { | 371 } else { |
| 372 m_pDict->SetStringFor(bDefault ? "DV" : "V", PDF_EncodeText(csValue)); | 372 m_pDict->SetStringFor(bDefault ? "DV" : "V", PDF_EncodeText(csValue)); |
| 373 if (!bDefault) { | 373 if (!bDefault) { |
| 374 ClearSelection(); | 374 ClearSelection(); |
| 375 SetItemSelection(iIndex, TRUE); | 375 SetItemSelection(iIndex, true); |
| 376 } | 376 } |
| 377 } | 377 } |
| 378 if (bNotify) | 378 if (bNotify) |
| 379 NotifyAfterValueChange(); | 379 NotifyAfterValueChange(); |
| 380 break; | 380 break; |
| 381 } | 381 } |
| 382 case ListBox: { | 382 case ListBox: { |
| 383 int iIndex = FindOptionValue(value); | 383 int iIndex = FindOptionValue(value); |
| 384 if (iIndex < 0) | 384 if (iIndex < 0) |
| 385 return FALSE; | 385 return false; |
| 386 | 386 |
| 387 if (bDefault && iIndex == GetDefaultSelectedItem()) | 387 if (bDefault && iIndex == GetDefaultSelectedItem()) |
| 388 return FALSE; | 388 return false; |
| 389 | 389 |
| 390 if (bNotify && !NotifyBeforeSelectionChange(value)) | 390 if (bNotify && !NotifyBeforeSelectionChange(value)) |
| 391 return FALSE; | 391 return false; |
| 392 | 392 |
| 393 if (!bDefault) { | 393 if (!bDefault) { |
| 394 ClearSelection(); | 394 ClearSelection(); |
| 395 SetItemSelection(iIndex, TRUE); | 395 SetItemSelection(iIndex, true); |
| 396 } | 396 } |
| 397 if (bNotify) | 397 if (bNotify) |
| 398 NotifyAfterSelectionChange(); | 398 NotifyAfterSelectionChange(); |
| 399 break; | 399 break; |
| 400 } | 400 } |
| 401 default: | 401 default: |
| 402 break; | 402 break; |
| 403 } | 403 } |
| 404 return TRUE; | 404 return true; |
| 405 } | 405 } |
| 406 | 406 |
| 407 FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, FX_BOOL bNotify) { | 407 bool CPDF_FormField::SetValue(const CFX_WideString& value, bool bNotify) { |
| 408 return SetValue(value, FALSE, bNotify); | 408 return SetValue(value, false, bNotify); |
| 409 } | 409 } |
| 410 | 410 |
| 411 int CPDF_FormField::GetMaxLen() const { | 411 int CPDF_FormField::GetMaxLen() const { |
| 412 if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen")) | 412 if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen")) |
| 413 return pObj->GetInteger(); | 413 return pObj->GetInteger(); |
| 414 | 414 |
| 415 for (int i = 0; i < m_ControlList.GetSize(); i++) { | 415 for (int i = 0; i < m_ControlList.GetSize(); i++) { |
| 416 CPDF_FormControl* pControl = m_ControlList.GetAt(i); | 416 CPDF_FormControl* pControl = m_ControlList.GetAt(i); |
| 417 if (!pControl) | 417 if (!pControl) |
| 418 continue; | 418 continue; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 if (csOpt == sel_value) | 469 if (csOpt == sel_value) |
| 470 return iOptIndex; | 470 return iOptIndex; |
| 471 } | 471 } |
| 472 for (int i = 0; i < CountOptions(); i++) { | 472 for (int i = 0; i < CountOptions(); i++) { |
| 473 if (sel_value == GetOptionValue(i)) | 473 if (sel_value == GetOptionValue(i)) |
| 474 return i; | 474 return i; |
| 475 } | 475 } |
| 476 return -1; | 476 return -1; |
| 477 } | 477 } |
| 478 | 478 |
| 479 FX_BOOL CPDF_FormField::ClearSelection(FX_BOOL bNotify) { | 479 bool CPDF_FormField::ClearSelection(bool bNotify) { |
| 480 if (bNotify && m_pForm->m_pFormNotify) { | 480 if (bNotify && m_pForm->m_pFormNotify) { |
| 481 CFX_WideString csValue; | 481 CFX_WideString csValue; |
| 482 int iIndex = GetSelectedIndex(0); | 482 int iIndex = GetSelectedIndex(0); |
| 483 if (iIndex >= 0) | 483 if (iIndex >= 0) |
| 484 csValue = GetOptionLabel(iIndex); | 484 csValue = GetOptionLabel(iIndex); |
| 485 | 485 |
| 486 if (!NotifyListOrComboBoxBeforeChange(csValue)) | 486 if (!NotifyListOrComboBoxBeforeChange(csValue)) |
| 487 return FALSE; | 487 return false; |
| 488 } | 488 } |
| 489 m_pDict->RemoveFor("V"); | 489 m_pDict->RemoveFor("V"); |
| 490 m_pDict->RemoveFor("I"); | 490 m_pDict->RemoveFor("I"); |
| 491 if (bNotify) | 491 if (bNotify) |
| 492 NotifyListOrComboBoxAfterChange(); | 492 NotifyListOrComboBoxAfterChange(); |
| 493 return TRUE; | 493 return true; |
| 494 } | 494 } |
| 495 | 495 |
| 496 FX_BOOL CPDF_FormField::IsItemSelected(int index) const { | 496 bool CPDF_FormField::IsItemSelected(int index) const { |
| 497 ASSERT(GetType() == ComboBox || GetType() == ListBox); | 497 ASSERT(GetType() == ComboBox || GetType() == ListBox); |
| 498 if (index < 0 || index >= CountOptions()) | 498 if (index < 0 || index >= CountOptions()) |
| 499 return FALSE; | 499 return false; |
| 500 if (IsOptionSelected(index)) | 500 if (IsOptionSelected(index)) |
| 501 return TRUE; | 501 return true; |
| 502 | 502 |
| 503 CFX_WideString opt_value = GetOptionValue(index); | 503 CFX_WideString opt_value = GetOptionValue(index); |
| 504 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); | 504 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
| 505 if (!pValue) { | 505 if (!pValue) { |
| 506 pValue = FPDF_GetFieldAttr(m_pDict, "I"); | 506 pValue = FPDF_GetFieldAttr(m_pDict, "I"); |
| 507 if (!pValue) | 507 if (!pValue) |
| 508 return FALSE; | 508 return false; |
| 509 } | 509 } |
| 510 | 510 |
| 511 if (pValue->IsString()) | 511 if (pValue->IsString()) |
| 512 return pValue->GetUnicodeText() == opt_value; | 512 return pValue->GetUnicodeText() == opt_value; |
| 513 | 513 |
| 514 if (pValue->IsNumber()) { | 514 if (pValue->IsNumber()) { |
| 515 if (pValue->GetString().IsEmpty()) | 515 if (pValue->GetString().IsEmpty()) |
| 516 return FALSE; | 516 return false; |
| 517 return (pValue->GetInteger() == index); | 517 return (pValue->GetInteger() == index); |
| 518 } | 518 } |
| 519 | 519 |
| 520 CPDF_Array* pArray = pValue->AsArray(); | 520 CPDF_Array* pArray = pValue->AsArray(); |
| 521 if (!pArray) | 521 if (!pArray) |
| 522 return FALSE; | 522 return false; |
| 523 | 523 |
| 524 int iPos = -1; | 524 int iPos = -1; |
| 525 for (int j = 0; j < CountSelectedOptions(); j++) { | 525 for (int j = 0; j < CountSelectedOptions(); j++) { |
| 526 if (GetSelectedOptionIndex(j) == index) { | 526 if (GetSelectedOptionIndex(j) == index) { |
| 527 iPos = j; | 527 iPos = j; |
| 528 break; | 528 break; |
| 529 } | 529 } |
| 530 } | 530 } |
| 531 for (int i = 0; i < static_cast<int>(pArray->GetCount()); i++) | 531 for (int i = 0; i < static_cast<int>(pArray->GetCount()); i++) |
| 532 if (pArray->GetDirectObjectAt(i)->GetUnicodeText() == opt_value && | 532 if (pArray->GetDirectObjectAt(i)->GetUnicodeText() == opt_value && |
| 533 i == iPos) { | 533 i == iPos) { |
| 534 return TRUE; | 534 return true; |
| 535 } | 535 } |
| 536 return FALSE; | 536 return false; |
| 537 } | 537 } |
| 538 | 538 |
| 539 FX_BOOL CPDF_FormField::SetItemSelection(int index, | 539 bool CPDF_FormField::SetItemSelection(int index, bool bSelected, bool bNotify) { |
| 540 FX_BOOL bSelected, | |
| 541 FX_BOOL bNotify) { | |
| 542 ASSERT(GetType() == ComboBox || GetType() == ListBox); | 540 ASSERT(GetType() == ComboBox || GetType() == ListBox); |
| 543 if (index < 0 || index >= CountOptions()) | 541 if (index < 0 || index >= CountOptions()) |
| 544 return FALSE; | 542 return false; |
| 545 | 543 |
| 546 CFX_WideString opt_value = GetOptionValue(index); | 544 CFX_WideString opt_value = GetOptionValue(index); |
| 547 if (bNotify && !NotifyListOrComboBoxBeforeChange(opt_value)) | 545 if (bNotify && !NotifyListOrComboBoxBeforeChange(opt_value)) |
| 548 return FALSE; | 546 return false; |
| 549 | 547 |
| 550 if (bSelected) { | 548 if (bSelected) { |
| 551 if (GetType() == ListBox) { | 549 if (GetType() == ListBox) { |
| 552 SelectOption(index, TRUE); | 550 SelectOption(index, true); |
| 553 if (!(m_Flags & kFormListMultiSelect)) { | 551 if (!(m_Flags & kFormListMultiSelect)) { |
| 554 m_pDict->SetStringFor("V", PDF_EncodeText(opt_value)); | 552 m_pDict->SetStringFor("V", PDF_EncodeText(opt_value)); |
| 555 } else { | 553 } else { |
| 556 CPDF_Array* pArray = new CPDF_Array; | 554 CPDF_Array* pArray = new CPDF_Array; |
| 557 for (int i = 0; i < CountOptions(); i++) { | 555 for (int i = 0; i < CountOptions(); i++) { |
| 558 if (i == index || IsItemSelected(i)) { | 556 if (i == index || IsItemSelected(i)) { |
| 559 opt_value = GetOptionValue(i); | 557 opt_value = GetOptionValue(i); |
| 560 pArray->AddString(PDF_EncodeText(opt_value)); | 558 pArray->AddString(PDF_EncodeText(opt_value)); |
| 561 } | 559 } |
| 562 } | 560 } |
| 563 m_pDict->SetFor("V", pArray); | 561 m_pDict->SetFor("V", pArray); |
| 564 } | 562 } |
| 565 } else { | 563 } else { |
| 566 m_pDict->SetStringFor("V", PDF_EncodeText(opt_value)); | 564 m_pDict->SetStringFor("V", PDF_EncodeText(opt_value)); |
| 567 CPDF_Array* pI = new CPDF_Array; | 565 CPDF_Array* pI = new CPDF_Array; |
| 568 pI->AddInteger(index); | 566 pI->AddInteger(index); |
| 569 m_pDict->SetFor("I", pI); | 567 m_pDict->SetFor("I", pI); |
| 570 } | 568 } |
| 571 } else { | 569 } else { |
| 572 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); | 570 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
| 573 if (pValue) { | 571 if (pValue) { |
| 574 if (GetType() == ListBox) { | 572 if (GetType() == ListBox) { |
| 575 SelectOption(index, FALSE); | 573 SelectOption(index, false); |
| 576 if (pValue->IsString()) { | 574 if (pValue->IsString()) { |
| 577 if (pValue->GetUnicodeText() == opt_value) | 575 if (pValue->GetUnicodeText() == opt_value) |
| 578 m_pDict->RemoveFor("V"); | 576 m_pDict->RemoveFor("V"); |
| 579 } else if (pValue->IsArray()) { | 577 } else if (pValue->IsArray()) { |
| 580 std::unique_ptr<CPDF_Array, ReleaseDeleter<CPDF_Array>> pArray( | 578 std::unique_ptr<CPDF_Array, ReleaseDeleter<CPDF_Array>> pArray( |
| 581 new CPDF_Array); | 579 new CPDF_Array); |
| 582 for (int i = 0; i < CountOptions(); i++) { | 580 for (int i = 0; i < CountOptions(); i++) { |
| 583 if (i != index && IsItemSelected(i)) { | 581 if (i != index && IsItemSelected(i)) { |
| 584 opt_value = GetOptionValue(i); | 582 opt_value = GetOptionValue(i); |
| 585 pArray->AddString(PDF_EncodeText(opt_value)); | 583 pArray->AddString(PDF_EncodeText(opt_value)); |
| 586 } | 584 } |
| 587 } | 585 } |
| 588 if (pArray->GetCount() > 0) | 586 if (pArray->GetCount() > 0) |
| 589 m_pDict->SetFor("V", pArray.release()); // std::move someday | 587 m_pDict->SetFor("V", pArray.release()); // std::move someday |
| 590 } | 588 } |
| 591 } else { | 589 } else { |
| 592 m_pDict->RemoveFor("V"); | 590 m_pDict->RemoveFor("V"); |
| 593 m_pDict->RemoveFor("I"); | 591 m_pDict->RemoveFor("I"); |
| 594 } | 592 } |
| 595 } | 593 } |
| 596 } | 594 } |
| 597 if (bNotify) | 595 if (bNotify) |
| 598 NotifyListOrComboBoxAfterChange(); | 596 NotifyListOrComboBoxAfterChange(); |
| 599 return TRUE; | 597 return true; |
| 600 } | 598 } |
| 601 | 599 |
| 602 FX_BOOL CPDF_FormField::IsItemDefaultSelected(int index) const { | 600 bool CPDF_FormField::IsItemDefaultSelected(int index) const { |
| 603 ASSERT(GetType() == ComboBox || GetType() == ListBox); | 601 ASSERT(GetType() == ComboBox || GetType() == ListBox); |
| 604 if (index < 0 || index >= CountOptions()) | 602 if (index < 0 || index >= CountOptions()) |
| 605 return FALSE; | 603 return false; |
| 606 int iDVIndex = GetDefaultSelectedItem(); | 604 int iDVIndex = GetDefaultSelectedItem(); |
| 607 return iDVIndex >= 0 && iDVIndex == index; | 605 return iDVIndex >= 0 && iDVIndex == index; |
| 608 } | 606 } |
| 609 | 607 |
| 610 int CPDF_FormField::GetDefaultSelectedItem() const { | 608 int CPDF_FormField::GetDefaultSelectedItem() const { |
| 611 ASSERT(GetType() == ComboBox || GetType() == ListBox); | 609 ASSERT(GetType() == ComboBox || GetType() == ListBox); |
| 612 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "DV"); | 610 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "DV"); |
| 613 if (!pValue) | 611 if (!pValue) |
| 614 return -1; | 612 return -1; |
| 615 CFX_WideString csDV = pValue->GetUnicodeText(); | 613 CFX_WideString csDV = pValue->GetUnicodeText(); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 for (int i = 0; i < CountOptions(); i++) { | 660 for (int i = 0; i < CountOptions(); i++) { |
| 663 if (GetOptionValue(i) == csOptValue) | 661 if (GetOptionValue(i) == csOptValue) |
| 664 return i; | 662 return i; |
| 665 } | 663 } |
| 666 return -1; | 664 return -1; |
| 667 } | 665 } |
| 668 | 666 |
| 669 #ifdef PDF_ENABLE_XFA | 667 #ifdef PDF_ENABLE_XFA |
| 670 int CPDF_FormField::InsertOption(CFX_WideString csOptLabel, | 668 int CPDF_FormField::InsertOption(CFX_WideString csOptLabel, |
| 671 int index, | 669 int index, |
| 672 FX_BOOL bNotify) { | 670 bool bNotify) { |
| 673 if (csOptLabel.IsEmpty()) | 671 if (csOptLabel.IsEmpty()) |
| 674 return -1; | 672 return -1; |
| 675 | 673 |
| 676 if (bNotify && !NotifyListOrComboBoxBeforeChange(csOptLabel)) | 674 if (bNotify && !NotifyListOrComboBoxBeforeChange(csOptLabel)) |
| 677 return -1; | 675 return -1; |
| 678 | 676 |
| 679 CFX_ByteString csStr = | 677 CFX_ByteString csStr = |
| 680 PDF_EncodeText(csOptLabel.c_str(), csOptLabel.GetLength()); | 678 PDF_EncodeText(csOptLabel.c_str(), csOptLabel.GetLength()); |
| 681 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt"); | 679 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt"); |
| 682 CPDF_Array* pOpt = ToArray(pValue); | 680 CPDF_Array* pOpt = ToArray(pValue); |
| 683 if (!pOpt) { | 681 if (!pOpt) { |
| 684 pOpt = new CPDF_Array; | 682 pOpt = new CPDF_Array; |
| 685 m_pDict->SetFor("Opt", pOpt); | 683 m_pDict->SetFor("Opt", pOpt); |
| 686 } | 684 } |
| 687 | 685 |
| 688 int iCount = pdfium::base::checked_cast<int, size_t>(pOpt->GetCount()); | 686 int iCount = pdfium::base::checked_cast<int, size_t>(pOpt->GetCount()); |
| 689 if (index >= iCount) { | 687 if (index >= iCount) { |
| 690 pOpt->AddString(csStr); | 688 pOpt->AddString(csStr); |
| 691 index = iCount; | 689 index = iCount; |
| 692 } else { | 690 } else { |
| 693 CPDF_String* pString = new CPDF_String(csStr, FALSE); | 691 CPDF_String* pString = new CPDF_String(csStr, false); |
| 694 pOpt->InsertAt(index, pString); | 692 pOpt->InsertAt(index, pString); |
| 695 } | 693 } |
| 696 | 694 |
| 697 if (bNotify) | 695 if (bNotify) |
| 698 NotifyListOrComboBoxAfterChange(); | 696 NotifyListOrComboBoxAfterChange(); |
| 699 return index; | 697 return index; |
| 700 } | 698 } |
| 701 | 699 |
| 702 FX_BOOL CPDF_FormField::ClearOptions(FX_BOOL bNotify) { | 700 bool CPDF_FormField::ClearOptions(bool bNotify) { |
| 703 if (bNotify && m_pForm->m_pFormNotify) { | 701 if (bNotify && m_pForm->m_pFormNotify) { |
| 704 CFX_WideString csValue; | 702 CFX_WideString csValue; |
| 705 int iIndex = GetSelectedIndex(0); | 703 int iIndex = GetSelectedIndex(0); |
| 706 if (iIndex >= 0) | 704 if (iIndex >= 0) |
| 707 csValue = GetOptionLabel(iIndex); | 705 csValue = GetOptionLabel(iIndex); |
| 708 if (!NotifyListOrComboBoxBeforeChange(csValue)) | 706 if (!NotifyListOrComboBoxBeforeChange(csValue)) |
| 709 return FALSE; | 707 return false; |
| 710 } | 708 } |
| 711 | 709 |
| 712 m_pDict->RemoveFor("Opt"); | 710 m_pDict->RemoveFor("Opt"); |
| 713 m_pDict->RemoveFor("V"); | 711 m_pDict->RemoveFor("V"); |
| 714 m_pDict->RemoveFor("DV"); | 712 m_pDict->RemoveFor("DV"); |
| 715 m_pDict->RemoveFor("I"); | 713 m_pDict->RemoveFor("I"); |
| 716 m_pDict->RemoveFor("TI"); | 714 m_pDict->RemoveFor("TI"); |
| 717 | 715 |
| 718 if (bNotify) | 716 if (bNotify) |
| 719 NotifyListOrComboBoxAfterChange(); | 717 NotifyListOrComboBoxAfterChange(); |
| 720 | 718 |
| 721 return TRUE; | 719 return true; |
| 722 } | 720 } |
| 723 #endif // PDF_ENABLE_XFA | 721 #endif // PDF_ENABLE_XFA |
| 724 | 722 |
| 725 FX_BOOL CPDF_FormField::CheckControl(int iControlIndex, | 723 bool CPDF_FormField::CheckControl(int iControlIndex, |
| 726 bool bChecked, | 724 bool bChecked, |
| 727 bool bNotify) { | 725 bool bNotify) { |
| 728 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 726 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
| 729 CPDF_FormControl* pControl = GetControl(iControlIndex); | 727 CPDF_FormControl* pControl = GetControl(iControlIndex); |
| 730 if (!pControl) | 728 if (!pControl) |
| 731 return FALSE; | 729 return false; |
| 732 if (!bChecked && pControl->IsChecked() == bChecked) | 730 if (!bChecked && pControl->IsChecked() == bChecked) |
| 733 return FALSE; | 731 return false; |
| 734 | 732 |
| 735 CFX_WideString csWExport = pControl->GetExportValue(); | 733 CFX_WideString csWExport = pControl->GetExportValue(); |
| 736 CFX_ByteString csBExport = PDF_EncodeText(csWExport); | 734 CFX_ByteString csBExport = PDF_EncodeText(csWExport); |
| 737 int iCount = CountControls(); | 735 int iCount = CountControls(); |
| 738 bool bUnison = IsUnison(this); | 736 bool bUnison = IsUnison(this); |
| 739 for (int i = 0; i < iCount; i++) { | 737 for (int i = 0; i < iCount; i++) { |
| 740 CPDF_FormControl* pCtrl = GetControl(i); | 738 CPDF_FormControl* pCtrl = GetControl(i); |
| 741 if (bUnison) { | 739 if (bUnison) { |
| 742 CFX_WideString csEValue = pCtrl->GetExportValue(); | 740 CFX_WideString csEValue = pCtrl->GetExportValue(); |
| 743 if (csEValue == csWExport) { | 741 if (csEValue == csWExport) { |
| 744 if (pCtrl->GetOnStateName() == pControl->GetOnStateName()) | 742 if (pCtrl->GetOnStateName() == pControl->GetOnStateName()) |
| 745 pCtrl->CheckControl(bChecked); | 743 pCtrl->CheckControl(bChecked); |
| 746 else if (bChecked) | 744 else if (bChecked) |
| 747 pCtrl->CheckControl(FALSE); | 745 pCtrl->CheckControl(false); |
| 748 } else if (bChecked) { | 746 } else if (bChecked) { |
| 749 pCtrl->CheckControl(FALSE); | 747 pCtrl->CheckControl(false); |
| 750 } | 748 } |
| 751 } else { | 749 } else { |
| 752 if (i == iControlIndex) | 750 if (i == iControlIndex) |
| 753 pCtrl->CheckControl(bChecked); | 751 pCtrl->CheckControl(bChecked); |
| 754 else if (bChecked) | 752 else if (bChecked) |
| 755 pCtrl->CheckControl(FALSE); | 753 pCtrl->CheckControl(false); |
| 756 } | 754 } |
| 757 } | 755 } |
| 758 | 756 |
| 759 CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); | 757 CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); |
| 760 if (!ToArray(pOpt)) { | 758 if (!ToArray(pOpt)) { |
| 761 if (bChecked) { | 759 if (bChecked) { |
| 762 m_pDict->SetNameFor("V", csBExport); | 760 m_pDict->SetNameFor("V", csBExport); |
| 763 } else { | 761 } else { |
| 764 CFX_ByteString csV; | 762 CFX_ByteString csV; |
| 765 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); | 763 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); |
| 766 if (pV) | 764 if (pV) |
| 767 csV = pV->GetString(); | 765 csV = pV->GetString(); |
| 768 if (csV == csBExport) | 766 if (csV == csBExport) |
| 769 m_pDict->SetNameFor("V", "Off"); | 767 m_pDict->SetNameFor("V", "Off"); |
| 770 } | 768 } |
| 771 } else if (bChecked) { | 769 } else if (bChecked) { |
| 772 CFX_ByteString csIndex; | 770 CFX_ByteString csIndex; |
| 773 csIndex.Format("%d", iControlIndex); | 771 csIndex.Format("%d", iControlIndex); |
| 774 m_pDict->SetNameFor("V", csIndex); | 772 m_pDict->SetNameFor("V", csIndex); |
| 775 } | 773 } |
| 776 if (bNotify && m_pForm->m_pFormNotify) | 774 if (bNotify && m_pForm->m_pFormNotify) |
| 777 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); | 775 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); |
| 778 return TRUE; | 776 return true; |
| 779 } | 777 } |
| 780 | 778 |
| 781 CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) const { | 779 CFX_WideString CPDF_FormField::GetCheckValue(bool bDefault) const { |
| 782 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 780 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
| 783 CFX_WideString csExport = L"Off"; | 781 CFX_WideString csExport = L"Off"; |
| 784 int iCount = CountControls(); | 782 int iCount = CountControls(); |
| 785 for (int i = 0; i < iCount; i++) { | 783 for (int i = 0; i < iCount; i++) { |
| 786 CPDF_FormControl* pControl = GetControl(i); | 784 CPDF_FormControl* pControl = GetControl(i); |
| 787 FX_BOOL bChecked = | 785 bool bChecked = |
| 788 bDefault ? pControl->IsDefaultChecked() : pControl->IsChecked(); | 786 bDefault ? pControl->IsDefaultChecked() : pControl->IsChecked(); |
| 789 if (bChecked) { | 787 if (bChecked) { |
| 790 csExport = pControl->GetExportValue(); | 788 csExport = pControl->GetExportValue(); |
| 791 break; | 789 break; |
| 792 } | 790 } |
| 793 } | 791 } |
| 794 return csExport; | 792 return csExport; |
| 795 } | 793 } |
| 796 | 794 |
| 797 FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value, | 795 bool CPDF_FormField::SetCheckValue(const CFX_WideString& value, |
| 798 FX_BOOL bDefault, | 796 bool bDefault, |
| 799 FX_BOOL bNotify) { | 797 bool bNotify) { |
| 800 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 798 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
| 801 int iCount = CountControls(); | 799 int iCount = CountControls(); |
| 802 for (int i = 0; i < iCount; i++) { | 800 for (int i = 0; i < iCount; i++) { |
| 803 CPDF_FormControl* pControl = GetControl(i); | 801 CPDF_FormControl* pControl = GetControl(i); |
| 804 CFX_WideString csExport = pControl->GetExportValue(); | 802 CFX_WideString csExport = pControl->GetExportValue(); |
| 805 bool val = csExport == value; | 803 bool val = csExport == value; |
| 806 if (!bDefault) | 804 if (!bDefault) |
| 807 CheckControl(GetControlIndex(pControl), val); | 805 CheckControl(GetControlIndex(pControl), val); |
| 808 if (val) | 806 if (val) |
| 809 break; | 807 break; |
| 810 } | 808 } |
| 811 if (bNotify && m_pForm->m_pFormNotify) | 809 if (bNotify && m_pForm->m_pFormNotify) |
| 812 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); | 810 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); |
| 813 return TRUE; | 811 return true; |
| 814 } | 812 } |
| 815 | 813 |
| 816 int CPDF_FormField::GetTopVisibleIndex() const { | 814 int CPDF_FormField::GetTopVisibleIndex() const { |
| 817 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); | 815 CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); |
| 818 return pObj ? pObj->GetInteger() : 0; | 816 return pObj ? pObj->GetInteger() : 0; |
| 819 } | 817 } |
| 820 | 818 |
| 821 int CPDF_FormField::CountSelectedOptions() const { | 819 int CPDF_FormField::CountSelectedOptions() const { |
| 822 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); | 820 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); |
| 823 return pArray ? pArray->GetCount() : 0; | 821 return pArray ? pArray->GetCount() : 0; |
| 824 } | 822 } |
| 825 | 823 |
| 826 int CPDF_FormField::GetSelectedOptionIndex(int index) const { | 824 int CPDF_FormField::GetSelectedOptionIndex(int index) const { |
| 827 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); | 825 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); |
| 828 if (!pArray) | 826 if (!pArray) |
| 829 return -1; | 827 return -1; |
| 830 | 828 |
| 831 int iCount = pArray->GetCount(); | 829 int iCount = pArray->GetCount(); |
| 832 if (iCount < 0 || index >= iCount) | 830 if (iCount < 0 || index >= iCount) |
| 833 return -1; | 831 return -1; |
| 834 return pArray->GetIntegerAt(index); | 832 return pArray->GetIntegerAt(index); |
| 835 } | 833 } |
| 836 | 834 |
| 837 FX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex) const { | 835 bool CPDF_FormField::IsOptionSelected(int iOptIndex) const { |
| 838 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); | 836 CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); |
| 839 if (!pArray) | 837 if (!pArray) |
| 840 return FALSE; | 838 return false; |
| 841 | 839 |
| 842 for (CPDF_Object* pObj : *pArray) { | 840 for (CPDF_Object* pObj : *pArray) { |
| 843 if (pObj->GetInteger() == iOptIndex) | 841 if (pObj->GetInteger() == iOptIndex) |
| 844 return TRUE; | 842 return true; |
| 845 } | 843 } |
| 846 return FALSE; | 844 return false; |
| 847 } | 845 } |
| 848 | 846 |
| 849 FX_BOOL CPDF_FormField::SelectOption(int iOptIndex, | 847 bool CPDF_FormField::SelectOption(int iOptIndex, bool bSelected, bool bNotify) { |
| 850 FX_BOOL bSelected, | |
| 851 FX_BOOL bNotify) { | |
| 852 CPDF_Array* pArray = m_pDict->GetArrayFor("I"); | 848 CPDF_Array* pArray = m_pDict->GetArrayFor("I"); |
| 853 if (!pArray) { | 849 if (!pArray) { |
| 854 if (!bSelected) | 850 if (!bSelected) |
| 855 return TRUE; | 851 return true; |
| 856 | 852 |
| 857 pArray = new CPDF_Array; | 853 pArray = new CPDF_Array; |
| 858 m_pDict->SetFor("I", pArray); | 854 m_pDict->SetFor("I", pArray); |
| 859 } | 855 } |
| 860 | 856 |
| 861 FX_BOOL bReturn = FALSE; | 857 bool bReturn = false; |
| 862 for (size_t i = 0; i < pArray->GetCount(); i++) { | 858 for (size_t i = 0; i < pArray->GetCount(); i++) { |
| 863 int iFind = pArray->GetIntegerAt(i); | 859 int iFind = pArray->GetIntegerAt(i); |
| 864 if (iFind == iOptIndex) { | 860 if (iFind == iOptIndex) { |
| 865 if (bSelected) | 861 if (bSelected) |
| 866 return TRUE; | 862 return true; |
| 867 | 863 |
| 868 if (bNotify && m_pForm->m_pFormNotify) { | 864 if (bNotify && m_pForm->m_pFormNotify) { |
| 869 CFX_WideString csValue = GetOptionLabel(iOptIndex); | 865 CFX_WideString csValue = GetOptionLabel(iOptIndex); |
| 870 if (!NotifyListOrComboBoxBeforeChange(csValue)) | 866 if (!NotifyListOrComboBoxBeforeChange(csValue)) |
| 871 return FALSE; | 867 return false; |
| 872 } | 868 } |
| 873 pArray->RemoveAt(i); | 869 pArray->RemoveAt(i); |
| 874 bReturn = TRUE; | 870 bReturn = true; |
| 875 break; | 871 break; |
| 876 } | 872 } |
| 877 | 873 |
| 878 if (iFind > iOptIndex) { | 874 if (iFind > iOptIndex) { |
| 879 if (!bSelected) | 875 if (!bSelected) |
| 880 continue; | 876 continue; |
| 881 | 877 |
| 882 if (bNotify && m_pForm->m_pFormNotify) { | 878 if (bNotify && m_pForm->m_pFormNotify) { |
| 883 CFX_WideString csValue = GetOptionLabel(iOptIndex); | 879 CFX_WideString csValue = GetOptionLabel(iOptIndex); |
| 884 if (!NotifyListOrComboBoxBeforeChange(csValue)) | 880 if (!NotifyListOrComboBoxBeforeChange(csValue)) |
| 885 return FALSE; | 881 return false; |
| 886 } | 882 } |
| 887 pArray->InsertAt(i, new CPDF_Number(iOptIndex)); | 883 pArray->InsertAt(i, new CPDF_Number(iOptIndex)); |
| 888 bReturn = TRUE; | 884 bReturn = true; |
| 889 break; | 885 break; |
| 890 } | 886 } |
| 891 } | 887 } |
| 892 if (!bReturn) { | 888 if (!bReturn) { |
| 893 if (bSelected) | 889 if (bSelected) |
| 894 pArray->AddInteger(iOptIndex); | 890 pArray->AddInteger(iOptIndex); |
| 895 | 891 |
| 896 if (pArray->IsEmpty()) | 892 if (pArray->IsEmpty()) |
| 897 m_pDict->RemoveFor("I"); | 893 m_pDict->RemoveFor("I"); |
| 898 } | 894 } |
| 899 if (bNotify) | 895 if (bNotify) |
| 900 NotifyListOrComboBoxAfterChange(); | 896 NotifyListOrComboBoxAfterChange(); |
| 901 | 897 |
| 902 return TRUE; | 898 return true; |
| 903 } | 899 } |
| 904 | 900 |
| 905 FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify) { | 901 bool CPDF_FormField::ClearSelectedOptions(bool bNotify) { |
| 906 if (bNotify && m_pForm->m_pFormNotify) { | 902 if (bNotify && m_pForm->m_pFormNotify) { |
| 907 CFX_WideString csValue; | 903 CFX_WideString csValue; |
| 908 int iIndex = GetSelectedIndex(0); | 904 int iIndex = GetSelectedIndex(0); |
| 909 if (iIndex >= 0) | 905 if (iIndex >= 0) |
| 910 csValue = GetOptionLabel(iIndex); | 906 csValue = GetOptionLabel(iIndex); |
| 911 | 907 |
| 912 if (!NotifyListOrComboBoxBeforeChange(csValue)) | 908 if (!NotifyListOrComboBoxBeforeChange(csValue)) |
| 913 return FALSE; | 909 return false; |
| 914 } | 910 } |
| 915 m_pDict->RemoveFor("I"); | 911 m_pDict->RemoveFor("I"); |
| 916 if (bNotify) | 912 if (bNotify) |
| 917 NotifyListOrComboBoxAfterChange(); | 913 NotifyListOrComboBoxAfterChange(); |
| 918 | 914 |
| 919 return TRUE; | 915 return true; |
| 920 } | 916 } |
| 921 | 917 |
| 922 void CPDF_FormField::LoadDA() { | 918 void CPDF_FormField::LoadDA() { |
| 923 CPDF_Dictionary* pFormDict = m_pForm->m_pFormDict; | 919 CPDF_Dictionary* pFormDict = m_pForm->m_pFormDict; |
| 924 if (!pFormDict) | 920 if (!pFormDict) |
| 925 return; | 921 return; |
| 926 | 922 |
| 927 CFX_ByteString DA; | 923 CFX_ByteString DA; |
| 928 if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DA")) | 924 if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DA")) |
| 929 DA = pObj->GetString(); | 925 DA = pObj->GetString(); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 994 case ListBox: | 990 case ListBox: |
| 995 NotifyAfterSelectionChange(); | 991 NotifyAfterSelectionChange(); |
| 996 break; | 992 break; |
| 997 case ComboBox: | 993 case ComboBox: |
| 998 NotifyAfterValueChange(); | 994 NotifyAfterValueChange(); |
| 999 break; | 995 break; |
| 1000 default: | 996 default: |
| 1001 break; | 997 break; |
| 1002 } | 998 } |
| 1003 } | 999 } |
| OLD | NEW |