CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) const { ASSERT(GetType() == CheckBox || GetType() == RadioButton); CFX_WideString csExport = L"Off"; int iCount = CountControls(); for (int i = 0; i < iCount; i++) { CPDF_FormControl* pControl = GetControl(i); FX_BOOL bChecked = bDefault ? pControl->IsDefaultChecked() : pControl->IsChecked(); if (bChecked) { csExport = pControl->GetExportValue(); break; } } return csExport; }
FX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify) { switch (m_Type) { case CPDF_FormField::CheckBox: case CPDF_FormField::RadioButton: { int iCount = CountControls(); if (iCount) { if (PDF_FormField_IsUnison(this)) { for (int i = 0; i < iCount; i++) { CheckControl(i, GetControl(i)->IsDefaultChecked(), FALSE); } } else { for (int i = 0; i < iCount; i++) { CPDF_FormControl* pControl = GetControl(i); FX_BOOL bChecked = pControl->IsDefaultChecked(); CheckControl(i, bChecked, FALSE); } } } if (bNotify && m_pForm->m_pFormNotify) { m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); } } break; case CPDF_FormField::ComboBox: { CFX_WideString csValue; ClearSelection(); int iIndex = GetDefaultSelectedItem(); if (iIndex >= 0) { csValue = GetOptionLabel(iIndex); } if (bNotify && m_pForm->m_pFormNotify) { int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); if (iRet < 0) { return FALSE; } } SetItemSelection(iIndex, TRUE); if (bNotify && m_pForm->m_pFormNotify) { m_pForm->m_pFormNotify->AfterValueChange(this); } } break; case CPDF_FormField::ListBox: { CFX_WideString csValue; ClearSelection(); int iIndex = GetDefaultSelectedItem(); if (iIndex >= 0) { csValue = GetOptionLabel(iIndex); } if (bNotify && m_pForm->m_pFormNotify) { int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); if (iRet < 0) { return FALSE; } } SetItemSelection(iIndex, TRUE); if (bNotify && m_pForm->m_pFormNotify) { m_pForm->m_pFormNotify->AfterSelectionChange(this); } } break; case CPDF_FormField::Text: case CPDF_FormField::RichText: case CPDF_FormField::File: default: { CPDF_Object* pDV = FPDF_GetFieldAttr(m_pDict, "DV"); CFX_WideString csDValue; if (pDV) { csDValue = pDV->GetUnicodeText(); } CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); CFX_WideString csValue; if (pV) { csValue = pV->GetUnicodeText(); } CPDF_Object* pRV = FPDF_GetFieldAttr(m_pDict, "RV"); if (!pRV && (csDValue == csValue)) { return FALSE; } if (bNotify && m_pForm->m_pFormNotify) { int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csDValue); if (iRet < 0) { return FALSE; } } if (pDV) { CPDF_Object* pClone = pDV->Clone(); if (!pClone) { return FALSE; } m_pDict->SetAt("V", pClone); if (pRV) { CPDF_Object* pCloneR = pDV->Clone(); m_pDict->SetAt("RV", pCloneR); } } else { m_pDict->RemoveAt("V"); m_pDict->RemoveAt("RV"); } if (bNotify && m_pForm->m_pFormNotify) { m_pForm->m_pFormNotify->AfterValueChange(this); } m_pForm->m_bUpdated = TRUE; } break; } return TRUE; }