| Index: core/src/fpdfdoc/doc_formfield.cpp
|
| diff --git a/core/src/fpdfdoc/doc_formfield.cpp b/core/src/fpdfdoc/doc_formfield.cpp
|
| index 087eba8aa490fc1a8c80b7c383eea84a53cb7e90..8541d9c1448042de88931fcc61157b0dca0aaf82 100644
|
| --- a/core/src/fpdfdoc/doc_formfield.cpp
|
| +++ b/core/src/fpdfdoc/doc_formfield.cpp
|
| @@ -7,1100 +7,1068 @@
|
| #include "../../include/fpdfdoc/fpdf_doc.h"
|
| #include "doc_utils.h"
|
|
|
| -FX_BOOL PDF_FormField_IsUnison(CPDF_FormField *pField)
|
| -{
|
| - FX_BOOL bUnison = FALSE;
|
| - if (pField->GetType() == CPDF_FormField::CheckBox) {
|
| - bUnison = TRUE;
|
| +FX_BOOL PDF_FormField_IsUnison(CPDF_FormField* pField) {
|
| + FX_BOOL bUnison = FALSE;
|
| + if (pField->GetType() == CPDF_FormField::CheckBox) {
|
| + bUnison = TRUE;
|
| + } else {
|
| + FX_DWORD dwFlags = pField->GetFieldFlags();
|
| + bUnison = ((dwFlags & 0x2000000) != 0);
|
| + }
|
| + return bUnison;
|
| +}
|
| +CPDF_FormField::CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict) {
|
| + m_pDict = pDict;
|
| + m_Type = Unknown;
|
| + m_pForm = pForm;
|
| + m_pFont = NULL;
|
| + m_FontSize = 0;
|
| + SyncFieldFlags();
|
| +}
|
| +CPDF_FormField::~CPDF_FormField() {}
|
| +void CPDF_FormField::SyncFieldFlags() {
|
| + CFX_ByteString type_name = FPDF_GetFieldAttr(m_pDict, "FT")
|
| + ? FPDF_GetFieldAttr(m_pDict, "FT")->GetString()
|
| + : CFX_ByteString();
|
| + FX_DWORD flags = FPDF_GetFieldAttr(m_pDict, "Ff")
|
| + ? FPDF_GetFieldAttr(m_pDict, "Ff")->GetInteger()
|
| + : 0;
|
| + m_Flags = 0;
|
| + if (flags & 1) {
|
| + m_Flags |= FORMFIELD_READONLY;
|
| + }
|
| + if (flags & 2) {
|
| + m_Flags |= FORMFIELD_REQUIRED;
|
| + }
|
| + if (flags & 4) {
|
| + m_Flags |= FORMFIELD_NOEXPORT;
|
| + }
|
| + if (type_name == "Btn") {
|
| + if (flags & 0x8000) {
|
| + m_Type = RadioButton;
|
| + if (flags & 0x4000) {
|
| + m_Flags |= FORMRADIO_NOTOGGLEOFF;
|
| + }
|
| + if (flags & 0x2000000) {
|
| + m_Flags |= FORMRADIO_UNISON;
|
| + }
|
| + } else if (flags & 0x10000) {
|
| + m_Type = PushButton;
|
| } else {
|
| - FX_DWORD dwFlags = pField->GetFieldFlags();
|
| - bUnison = ((dwFlags & 0x2000000) != 0);
|
| + m_Type = CheckBox;
|
| }
|
| - return bUnison;
|
| -}
|
| -CPDF_FormField::CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict)
|
| -{
|
| - m_pDict = pDict;
|
| - m_Type = Unknown;
|
| - m_pForm = pForm;
|
| - m_pFont = NULL;
|
| - m_FontSize = 0;
|
| - SyncFieldFlags();
|
| + } else if (type_name == "Tx") {
|
| + if (flags & 0x100000) {
|
| + m_Type = File;
|
| + } else if (flags & 0x2000000) {
|
| + m_Type = RichText;
|
| + } else {
|
| + m_Type = Text;
|
| + if (flags & 0x1000) {
|
| + m_Flags |= FORMTEXT_MULTILINE;
|
| + }
|
| + if (flags & 0x2000) {
|
| + m_Flags |= FORMTEXT_PASSWORD;
|
| + }
|
| + if (flags & 0x800000) {
|
| + m_Flags |= FORMTEXT_NOSCROLL;
|
| + }
|
| + if (flags & 0x100000) {
|
| + m_Flags |= FORMTEXT_COMB;
|
| + }
|
| + }
|
| + LoadDA();
|
| + } else if (type_name == "Ch") {
|
| + if (flags & 0x20000) {
|
| + m_Type = ComboBox;
|
| + if (flags & 0x40000) {
|
| + m_Flags |= FORMCOMBO_EDIT;
|
| + }
|
| + } else {
|
| + m_Type = ListBox;
|
| + if (flags & 0x200000) {
|
| + m_Flags |= FORMLIST_MULTISELECT;
|
| + }
|
| + }
|
| + LoadDA();
|
| + } else if (type_name == "Sig") {
|
| + m_Type = Sign;
|
| + }
|
| }
|
| -CPDF_FormField::~CPDF_FormField()
|
| -{
|
| +CFX_WideString CPDF_FormField::GetFullName() {
|
| + return ::GetFullName(m_pDict);
|
| }
|
| -void CPDF_FormField::SyncFieldFlags()
|
| -{
|
| - CFX_ByteString type_name = FPDF_GetFieldAttr(m_pDict, "FT") ? FPDF_GetFieldAttr(m_pDict, "FT")->GetString() : CFX_ByteString();
|
| - FX_DWORD flags = FPDF_GetFieldAttr(m_pDict, "Ff")? FPDF_GetFieldAttr(m_pDict, "Ff")->GetInteger() : 0;
|
| - m_Flags = 0;
|
| - if (flags & 1) {
|
| - m_Flags |= FORMFIELD_READONLY;
|
| - }
|
| - if (flags & 2) {
|
| - m_Flags |= FORMFIELD_REQUIRED;
|
| - }
|
| - if (flags & 4) {
|
| - m_Flags |= FORMFIELD_NOEXPORT;
|
| - }
|
| - if (type_name == "Btn") {
|
| - if (flags & 0x8000) {
|
| - m_Type = RadioButton;
|
| - if (flags & 0x4000) {
|
| - m_Flags |= FORMRADIO_NOTOGGLEOFF;
|
| - }
|
| - if (flags & 0x2000000) {
|
| - m_Flags |= FORMRADIO_UNISON;
|
| - }
|
| - } else if (flags & 0x10000) {
|
| - m_Type = PushButton;
|
| +FX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify) {
|
| + switch (m_Type) {
|
| + case CPDF_FormField::CheckBox:
|
| + case CPDF_FormField::RadioButton: {
|
| + CFX_ByteArray statusArray;
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + SaveCheckedFieldStatus(this, statusArray);
|
| + }
|
| + int iCount = CountControls();
|
| + if (iCount) {
|
| + if (PDF_FormField_IsUnison(this)) {
|
| + for (int i = 0; i < iCount; i++) {
|
| + CheckControl(i, GetControl(i)->IsDefaultChecked(), FALSE);
|
| + }
|
| } else {
|
| - m_Type = CheckBox;
|
| + for (int i = 0; i < iCount; i++) {
|
| + CPDF_FormControl* pControl = GetControl(i);
|
| + FX_BOOL bChecked = pControl->IsDefaultChecked();
|
| + CheckControl(i, bChecked, FALSE);
|
| + }
|
| }
|
| - } else if (type_name == "Tx") {
|
| - if (flags & 0x100000) {
|
| - m_Type = File;
|
| - } else if (flags & 0x2000000) {
|
| - m_Type = RichText;
|
| - } else {
|
| - m_Type = Text;
|
| - if (flags & 0x1000) {
|
| - m_Flags |= FORMTEXT_MULTILINE;
|
| - }
|
| - if (flags & 0x2000) {
|
| - m_Flags |= FORMTEXT_PASSWORD;
|
| - }
|
| - if (flags & 0x800000) {
|
| - m_Flags |= FORMTEXT_NOSCROLL;
|
| - }
|
| - if (flags & 0x100000) {
|
| - m_Flags |= FORMTEXT_COMB;
|
| - }
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
|
| + }
|
| + } break;
|
| + case CPDF_FormField::ComboBox: {
|
| + CFX_WideString csValue;
|
| + ClearSelection();
|
| + int iIndex = GetDefaultSelectedItem();
|
| + if (iIndex >= 0) {
|
| + csValue = GetOptionLabel(iIndex);
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| + if (iRet < 0) {
|
| + return FALSE;
|
| }
|
| - LoadDA();
|
| - } else if (type_name == "Ch") {
|
| - if (flags & 0x20000) {
|
| - m_Type = ComboBox;
|
| - if (flags & 0x40000) {
|
| - m_Flags |= FORMCOMBO_EDIT;
|
| - }
|
| - } else {
|
| - m_Type = ListBox;
|
| - if (flags & 0x200000) {
|
| - m_Flags |= FORMLIST_MULTISELECT;
|
| - }
|
| + }
|
| + SetItemSelection(iIndex, TRUE);
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + 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 != NULL) {
|
| + int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| + if (iRet < 0) {
|
| + return FALSE;
|
| }
|
| - LoadDA();
|
| - } else if (type_name == "Sig") {
|
| - m_Type = Sign;
|
| - }
|
| -}
|
| -CFX_WideString CPDF_FormField::GetFullName()
|
| -{
|
| - return ::GetFullName(m_pDict);
|
| -}
|
| -FX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify)
|
| -{
|
| - switch (m_Type) {
|
| - case CPDF_FormField::CheckBox:
|
| - case CPDF_FormField::RadioButton: {
|
| - CFX_ByteArray statusArray;
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - SaveCheckedFieldStatus(this, statusArray);
|
| - }
|
| - 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 != NULL) {
|
| - m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
|
| - }
|
| - }
|
| - break;
|
| - case CPDF_FormField::ComboBox: {
|
| - CFX_WideString csValue;
|
| - ClearSelection();
|
| - int iIndex = GetDefaultSelectedItem();
|
| - if (iIndex >= 0) {
|
| - csValue = GetOptionLabel(iIndex);
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| - if (iRet < 0) {
|
| - return FALSE;
|
| - }
|
| - }
|
| - SetItemSelection(iIndex, TRUE);
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - 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 != NULL) {
|
| - int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| - if (iRet < 0) {
|
| - return FALSE;
|
| - }
|
| - }
|
| - SetItemSelection(iIndex, TRUE);
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - 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 != NULL) {
|
| - csDValue = pDV->GetUnicodeText();
|
| - }
|
| - CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V");
|
| - CFX_WideString csValue;
|
| - if (pV != NULL) {
|
| - csValue = pV->GetUnicodeText();
|
| - }
|
| - CPDF_Object* pRV = FPDF_GetFieldAttr(m_pDict, "RV");
|
| - if (!pRV && (csDValue == csValue)) {
|
| - return FALSE;
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csDValue);
|
| - if (iRet < 0) {
|
| - return FALSE;
|
| - }
|
| - }
|
| - if (pDV == NULL) {
|
| - m_pDict->RemoveAt("V");
|
| - m_pDict->RemoveAt("RV");
|
| - } else {
|
| - CPDF_Object* pClone = pDV->Clone();
|
| - if (pClone == NULL) {
|
| - return FALSE;
|
| - }
|
| - m_pDict->SetAt("V", pClone);
|
| - if(pRV) {
|
| - CPDF_Object* pCloneR = pDV->Clone();
|
| - m_pDict->SetAt("RV", pCloneR);
|
| - }
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - m_pForm->m_pFormNotify->AfterValueChange(this);
|
| - }
|
| - m_pForm->m_bUpdated = TRUE;
|
| - }
|
| - break;
|
| - }
|
| - return TRUE;
|
| -}
|
| -int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl)
|
| -{
|
| - if (pControl == NULL) {
|
| - return -1;
|
| - }
|
| - int iCount = m_ControlList.GetSize();
|
| - for (int i = 0; i < iCount; i ++) {
|
| - CPDF_FormControl* pFind = (CPDF_FormControl*)m_ControlList.GetAt(i);
|
| - if (pFind == pControl) {
|
| - return i;
|
| + }
|
| + SetItemSelection(iIndex, TRUE);
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + 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 != NULL) {
|
| + csDValue = pDV->GetUnicodeText();
|
| + }
|
| + CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V");
|
| + CFX_WideString csValue;
|
| + if (pV != NULL) {
|
| + csValue = pV->GetUnicodeText();
|
| + }
|
| + CPDF_Object* pRV = FPDF_GetFieldAttr(m_pDict, "RV");
|
| + if (!pRV && (csDValue == csValue)) {
|
| + return FALSE;
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csDValue);
|
| + if (iRet < 0) {
|
| + return FALSE;
|
| }
|
| - }
|
| + }
|
| + if (pDV == NULL) {
|
| + m_pDict->RemoveAt("V");
|
| + m_pDict->RemoveAt("RV");
|
| + } else {
|
| + CPDF_Object* pClone = pDV->Clone();
|
| + if (pClone == NULL) {
|
| + return FALSE;
|
| + }
|
| + m_pDict->SetAt("V", pClone);
|
| + if (pRV) {
|
| + CPDF_Object* pCloneR = pDV->Clone();
|
| + m_pDict->SetAt("RV", pCloneR);
|
| + }
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + m_pForm->m_pFormNotify->AfterValueChange(this);
|
| + }
|
| + m_pForm->m_bUpdated = TRUE;
|
| + } break;
|
| + }
|
| + return TRUE;
|
| +}
|
| +int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) {
|
| + if (pControl == NULL) {
|
| return -1;
|
| + }
|
| + int iCount = m_ControlList.GetSize();
|
| + for (int i = 0; i < iCount; i++) {
|
| + CPDF_FormControl* pFind = (CPDF_FormControl*)m_ControlList.GetAt(i);
|
| + if (pFind == pControl) {
|
| + return i;
|
| + }
|
| + }
|
| + return -1;
|
| }
|
| -int CPDF_FormField::GetFieldType()
|
| -{
|
| - switch (m_Type) {
|
| - case PushButton:
|
| - return FIELDTYPE_PUSHBUTTON;
|
| - case CheckBox:
|
| - return FIELDTYPE_CHECKBOX;
|
| - case RadioButton:
|
| - return FIELDTYPE_RADIOBUTTON;
|
| - case ComboBox:
|
| - return FIELDTYPE_COMBOBOX;
|
| - case ListBox:
|
| - return FIELDTYPE_LISTBOX;
|
| - case Text:
|
| - case RichText:
|
| - case File:
|
| - return FIELDTYPE_TEXTFIELD;
|
| - case Sign:
|
| - return FIELDTYPE_SIGNATURE;
|
| - default:
|
| - break;
|
| - }
|
| - return FIELDTYPE_UNKNOWN;
|
| +int CPDF_FormField::GetFieldType() {
|
| + switch (m_Type) {
|
| + case PushButton:
|
| + return FIELDTYPE_PUSHBUTTON;
|
| + case CheckBox:
|
| + return FIELDTYPE_CHECKBOX;
|
| + case RadioButton:
|
| + return FIELDTYPE_RADIOBUTTON;
|
| + case ComboBox:
|
| + return FIELDTYPE_COMBOBOX;
|
| + case ListBox:
|
| + return FIELDTYPE_LISTBOX;
|
| + case Text:
|
| + case RichText:
|
| + case File:
|
| + return FIELDTYPE_TEXTFIELD;
|
| + case Sign:
|
| + return FIELDTYPE_SIGNATURE;
|
| + default:
|
| + break;
|
| + }
|
| + return FIELDTYPE_UNKNOWN;
|
| }
|
| -CPDF_AAction CPDF_FormField::GetAdditionalAction()
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "AA");
|
| - if (pObj == NULL) {
|
| - return NULL;
|
| - }
|
| - return pObj->GetDict();
|
| +CPDF_AAction CPDF_FormField::GetAdditionalAction() {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "AA");
|
| + if (pObj == NULL) {
|
| + return NULL;
|
| + }
|
| + return pObj->GetDict();
|
| }
|
| -CFX_WideString CPDF_FormField::GetAlternateName()
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TU");
|
| - if (pObj == NULL) {
|
| - return L"";
|
| - }
|
| - return pObj->GetUnicodeText();
|
| +CFX_WideString CPDF_FormField::GetAlternateName() {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TU");
|
| + if (pObj == NULL) {
|
| + return L"";
|
| + }
|
| + return pObj->GetUnicodeText();
|
| }
|
| -CFX_WideString CPDF_FormField::GetMappingName()
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TM");
|
| - if (pObj == NULL) {
|
| - return L"";
|
| - }
|
| - return pObj->GetUnicodeText();
|
| +CFX_WideString CPDF_FormField::GetMappingName() {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TM");
|
| + if (pObj == NULL) {
|
| + return L"";
|
| + }
|
| + return pObj->GetUnicodeText();
|
| }
|
| -FX_DWORD CPDF_FormField::GetFieldFlags()
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "Ff");
|
| - if (pObj == NULL) {
|
| - return 0;
|
| - }
|
| - return pObj->GetInteger();
|
| +FX_DWORD CPDF_FormField::GetFieldFlags() {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "Ff");
|
| + if (pObj == NULL) {
|
| + return 0;
|
| + }
|
| + return pObj->GetInteger();
|
| }
|
| -CFX_ByteString CPDF_FormField::GetDefaultStyle()
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS");
|
| - if (pObj == NULL) {
|
| - return "";
|
| - }
|
| - return pObj->GetString();
|
| +CFX_ByteString CPDF_FormField::GetDefaultStyle() {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS");
|
| + if (pObj == NULL) {
|
| + return "";
|
| + }
|
| + return pObj->GetString();
|
| }
|
| -CFX_WideString CPDF_FormField::GetRichTextString()
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "RV");
|
| - if (pObj == NULL) {
|
| - return L"";
|
| - }
|
| - return pObj->GetUnicodeText();
|
| +CFX_WideString CPDF_FormField::GetRichTextString() {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "RV");
|
| + if (pObj == NULL) {
|
| + return L"";
|
| + }
|
| + return pObj->GetUnicodeText();
|
| }
|
| -CFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault)
|
| -{
|
| - if (GetType() == CheckBox || GetType() == RadioButton) {
|
| - return GetCheckValue(bDefault);
|
| +CFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault) {
|
| + if (GetType() == CheckBox || GetType() == RadioButton) {
|
| + return GetCheckValue(bDefault);
|
| + }
|
| + CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V");
|
| + if (pValue == NULL) {
|
| + if (!bDefault) {
|
| + if (m_Type == RichText) {
|
| + pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| + }
|
| + if (pValue == NULL && m_Type != Text) {
|
| + pValue = FPDF_GetFieldAttr(m_pDict, "DV");
|
| + }
|
| }
|
| - CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V");
|
| if (pValue == NULL) {
|
| - if (!bDefault) {
|
| - if (m_Type == RichText) {
|
| - pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| - }
|
| - if (pValue == NULL && m_Type != Text) {
|
| - pValue = FPDF_GetFieldAttr(m_pDict, "DV");
|
| - }
|
| - }
|
| - if (pValue == NULL) {
|
| - return CFX_WideString();
|
| - }
|
| - }
|
| - switch (pValue->GetType()) {
|
| - case PDFOBJ_STRING:
|
| - case PDFOBJ_STREAM:
|
| - return pValue->GetUnicodeText();
|
| - case PDFOBJ_ARRAY:
|
| - pValue = ((CPDF_Array*)pValue)->GetElementValue(0);
|
| - if (pValue) {
|
| - return pValue->GetUnicodeText();
|
| - }
|
| - break;
|
| - }
|
| - return CFX_WideString();
|
| + return CFX_WideString();
|
| + }
|
| + }
|
| + switch (pValue->GetType()) {
|
| + case PDFOBJ_STRING:
|
| + case PDFOBJ_STREAM:
|
| + return pValue->GetUnicodeText();
|
| + case PDFOBJ_ARRAY:
|
| + pValue = ((CPDF_Array*)pValue)->GetElementValue(0);
|
| + if (pValue) {
|
| + return pValue->GetUnicodeText();
|
| + }
|
| + break;
|
| + }
|
| + return CFX_WideString();
|
| }
|
| -CFX_WideString CPDF_FormField::GetValue()
|
| -{
|
| - return GetValue(FALSE);
|
| +CFX_WideString CPDF_FormField::GetValue() {
|
| + return GetValue(FALSE);
|
| }
|
| -CFX_WideString CPDF_FormField::GetDefaultValue()
|
| -{
|
| - return GetValue(TRUE);
|
| +CFX_WideString CPDF_FormField::GetDefaultValue() {
|
| + return GetValue(TRUE);
|
| }
|
| -FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify)
|
| -{
|
| - switch (m_Type) {
|
| - case CheckBox:
|
| - case RadioButton: {
|
| - SetCheckValue(value, bDefault, bNotify);
|
| - return TRUE;
|
| - }
|
| - case File:
|
| - case RichText:
|
| - case Text:
|
| - case ComboBox: {
|
| - CFX_WideString csValue = value;
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| - if (iRet < 0) {
|
| - return FALSE;
|
| - }
|
| - }
|
| - int iIndex = FindOptionValue(csValue);
|
| - if (iIndex < 0) {
|
| - CFX_ByteString bsEncodeText = PDF_EncodeText(csValue);
|
| - m_pDict->SetAtString(bDefault ? "DV" : "V", bsEncodeText);
|
| - if (m_Type == RichText && !bDefault) {
|
| - m_pDict->SetAtString("RV", bsEncodeText);
|
| - }
|
| - m_pDict->RemoveAt("I");
|
| - } else {
|
| - m_pDict->SetAtString(bDefault ? "DV" : "V", PDF_EncodeText(csValue));
|
| - if (bDefault) {
|
| - } else {
|
| - ClearSelection();
|
| - SetItemSelection(iIndex, TRUE);
|
| - }
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - m_pForm->m_pFormNotify->AfterValueChange(this);
|
| - }
|
| - m_pForm->m_bUpdated = TRUE;
|
| - }
|
| - break;
|
| - case ListBox: {
|
| - int iIndex = FindOptionValue(value);
|
| - if (iIndex < 0) {
|
| - return FALSE;
|
| - }
|
| - if (bDefault && iIndex == GetDefaultSelectedItem()) {
|
| - return FALSE;
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - CFX_WideString csValue = value;
|
| - int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| - if (iRet < 0) {
|
| - return FALSE;
|
| - }
|
| - }
|
| - if (bDefault) {
|
| - } else {
|
| - ClearSelection();
|
| - SetItemSelection(iIndex, TRUE);
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - m_pForm->m_pFormNotify->AfterSelectionChange(this);
|
| - }
|
| - m_pForm->m_bUpdated = TRUE;
|
| - break;
|
| - }
|
| - default:
|
| - break;
|
| - }
|
| - if (CPDF_InterForm::m_bUpdateAP) {
|
| - UpdateAP(NULL);
|
| - }
|
| - return TRUE;
|
| -}
|
| -FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, FX_BOOL bNotify)
|
| -{
|
| - return SetValue(value, FALSE, bNotify);
|
| -}
|
| -int CPDF_FormField::GetMaxLen()
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen");
|
| - if (pObj == NULL) {
|
| - int iCount = m_ControlList.GetSize();
|
| - for (int i = 0; i < iCount; i ++) {
|
| - CPDF_FormControl* pControl = (CPDF_FormControl*)m_ControlList.GetAt(i);
|
| - if (pControl == NULL) {
|
| - continue;
|
| - }
|
| - CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict;
|
| - if (pWidgetDict->KeyExist("MaxLen")) {
|
| - return pWidgetDict->GetInteger("MaxLen");
|
| - }
|
| +FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value,
|
| + FX_BOOL bDefault,
|
| + FX_BOOL bNotify) {
|
| + switch (m_Type) {
|
| + case CheckBox:
|
| + case RadioButton: {
|
| + SetCheckValue(value, bDefault, bNotify);
|
| + return TRUE;
|
| + }
|
| + case File:
|
| + case RichText:
|
| + case Text:
|
| + case ComboBox: {
|
| + CFX_WideString csValue = value;
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| + if (iRet < 0) {
|
| + return FALSE;
|
| }
|
| - return 0;
|
| - }
|
| - return pObj->GetInteger();
|
| -}
|
| -int CPDF_FormField::CountSelectedItems()
|
| -{
|
| - CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| - if (pValue == NULL) {
|
| - pValue = FPDF_GetFieldAttr(m_pDict, "I");
|
| - if (pValue == NULL) {
|
| - return 0;
|
| + }
|
| + int iIndex = FindOptionValue(csValue);
|
| + if (iIndex < 0) {
|
| + CFX_ByteString bsEncodeText = PDF_EncodeText(csValue);
|
| + m_pDict->SetAtString(bDefault ? "DV" : "V", bsEncodeText);
|
| + if (m_Type == RichText && !bDefault) {
|
| + m_pDict->SetAtString("RV", bsEncodeText);
|
| }
|
| - }
|
| - if (pValue->GetType() == PDFOBJ_STRING) {
|
| - if (pValue->GetString().IsEmpty()) {
|
| - return 0;
|
| + m_pDict->RemoveAt("I");
|
| + } else {
|
| + m_pDict->SetAtString(bDefault ? "DV" : "V", PDF_EncodeText(csValue));
|
| + if (bDefault) {
|
| + } else {
|
| + ClearSelection();
|
| + SetItemSelection(iIndex, TRUE);
|
| }
|
| - return 1;
|
| - }
|
| - if (pValue->GetType() == PDFOBJ_NUMBER) {
|
| - if (pValue->GetString().IsEmpty()) {
|
| - return 0;
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + m_pForm->m_pFormNotify->AfterValueChange(this);
|
| + }
|
| + m_pForm->m_bUpdated = TRUE;
|
| + } break;
|
| + case ListBox: {
|
| + int iIndex = FindOptionValue(value);
|
| + if (iIndex < 0) {
|
| + return FALSE;
|
| + }
|
| + if (bDefault && iIndex == GetDefaultSelectedItem()) {
|
| + return FALSE;
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + CFX_WideString csValue = value;
|
| + int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| + if (iRet < 0) {
|
| + return FALSE;
|
| }
|
| - return 1;
|
| - }
|
| - if (pValue->GetType() != PDFOBJ_ARRAY) {
|
| - return 0;
|
| - }
|
| - return ((CPDF_Array*)pValue)->GetCount();
|
| + }
|
| + if (bDefault) {
|
| + } else {
|
| + ClearSelection();
|
| + SetItemSelection(iIndex, TRUE);
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + m_pForm->m_pFormNotify->AfterSelectionChange(this);
|
| + }
|
| + m_pForm->m_bUpdated = TRUE;
|
| + break;
|
| + }
|
| + default:
|
| + break;
|
| + }
|
| + if (CPDF_InterForm::m_bUpdateAP) {
|
| + UpdateAP(NULL);
|
| + }
|
| + return TRUE;
|
| }
|
| -int CPDF_FormField::GetSelectedIndex(int index)
|
| -{
|
| - CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| +FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, FX_BOOL bNotify) {
|
| + return SetValue(value, FALSE, bNotify);
|
| +}
|
| +int CPDF_FormField::GetMaxLen() {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen");
|
| + if (pObj == NULL) {
|
| + int iCount = m_ControlList.GetSize();
|
| + for (int i = 0; i < iCount; i++) {
|
| + CPDF_FormControl* pControl = (CPDF_FormControl*)m_ControlList.GetAt(i);
|
| + if (pControl == NULL) {
|
| + continue;
|
| + }
|
| + CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict;
|
| + if (pWidgetDict->KeyExist("MaxLen")) {
|
| + return pWidgetDict->GetInteger("MaxLen");
|
| + }
|
| + }
|
| + return 0;
|
| + }
|
| + return pObj->GetInteger();
|
| +}
|
| +int CPDF_FormField::CountSelectedItems() {
|
| + CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| + if (pValue == NULL) {
|
| + pValue = FPDF_GetFieldAttr(m_pDict, "I");
|
| if (pValue == NULL) {
|
| - pValue = FPDF_GetFieldAttr(m_pDict, "I");
|
| - if (pValue == NULL) {
|
| - return -1;
|
| - }
|
| - }
|
| - if (pValue->GetType() == PDFOBJ_NUMBER) {
|
| - return pValue->GetInteger();
|
| - }
|
| - CFX_WideString sel_value;
|
| - if (pValue->GetType() == PDFOBJ_STRING) {
|
| - if (index != 0) {
|
| - return -1;
|
| - }
|
| - sel_value = pValue->GetUnicodeText();
|
| - } else {
|
| - if (pValue->GetType() != PDFOBJ_ARRAY) {
|
| - return -1;
|
| - }
|
| - if (index < 0) {
|
| - return -1;
|
| - }
|
| - CPDF_Object* elementValue = ((CPDF_Array*)pValue)->GetElementValue(index);
|
| - sel_value = elementValue ? elementValue->GetUnicodeText() : CFX_WideString();
|
| - }
|
| - if (index < CountSelectedOptions()) {
|
| - int iOptIndex = GetSelectedOptionIndex(index);
|
| - CFX_WideString csOpt = GetOptionValue(iOptIndex);
|
| - if (csOpt == sel_value) {
|
| - return iOptIndex;
|
| - }
|
| - }
|
| - int nOpts = CountOptions();
|
| - for (int i = 0; i < nOpts; i ++) {
|
| - if (sel_value == GetOptionValue(i)) {
|
| - return i;
|
| - }
|
| - }
|
| - return -1;
|
| + return 0;
|
| + }
|
| + }
|
| + if (pValue->GetType() == PDFOBJ_STRING) {
|
| + if (pValue->GetString().IsEmpty()) {
|
| + return 0;
|
| + }
|
| + return 1;
|
| + }
|
| + if (pValue->GetType() == PDFOBJ_NUMBER) {
|
| + if (pValue->GetString().IsEmpty()) {
|
| + return 0;
|
| + }
|
| + return 1;
|
| + }
|
| + if (pValue->GetType() != PDFOBJ_ARRAY) {
|
| + return 0;
|
| + }
|
| + return ((CPDF_Array*)pValue)->GetCount();
|
| }
|
| -FX_BOOL CPDF_FormField::ClearSelection(FX_BOOL bNotify)
|
| -{
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - int iRet = 0;
|
| - CFX_WideString csValue;
|
| - int iIndex = GetSelectedIndex(0);
|
| - if (iIndex >= 0) {
|
| - csValue = GetOptionLabel(iIndex);
|
| - }
|
| - if (GetType() == ListBox) {
|
| - iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| - }
|
| - if (GetType() == ComboBox) {
|
| - iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| - }
|
| - if (iRet < 0) {
|
| - return FALSE;
|
| - }
|
| - }
|
| - m_pDict->RemoveAt("V");
|
| - m_pDict->RemoveAt("I");
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - if (GetType() == ListBox) {
|
| - m_pForm->m_pFormNotify->AfterSelectionChange(this);
|
| - }
|
| - if (GetType() == ComboBox) {
|
| - m_pForm->m_pFormNotify->AfterValueChange(this);
|
| - }
|
| - }
|
| - if (CPDF_InterForm::m_bUpdateAP) {
|
| - UpdateAP(NULL);
|
| - }
|
| - m_pForm->m_bUpdated = TRUE;
|
| - return TRUE;
|
| +int CPDF_FormField::GetSelectedIndex(int index) {
|
| + CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| + if (pValue == NULL) {
|
| + pValue = FPDF_GetFieldAttr(m_pDict, "I");
|
| + if (pValue == NULL) {
|
| + return -1;
|
| + }
|
| + }
|
| + if (pValue->GetType() == PDFOBJ_NUMBER) {
|
| + return pValue->GetInteger();
|
| + }
|
| + CFX_WideString sel_value;
|
| + if (pValue->GetType() == PDFOBJ_STRING) {
|
| + if (index != 0) {
|
| + return -1;
|
| + }
|
| + sel_value = pValue->GetUnicodeText();
|
| + } else {
|
| + if (pValue->GetType() != PDFOBJ_ARRAY) {
|
| + return -1;
|
| + }
|
| + if (index < 0) {
|
| + return -1;
|
| + }
|
| + CPDF_Object* elementValue = ((CPDF_Array*)pValue)->GetElementValue(index);
|
| + sel_value =
|
| + elementValue ? elementValue->GetUnicodeText() : CFX_WideString();
|
| + }
|
| + if (index < CountSelectedOptions()) {
|
| + int iOptIndex = GetSelectedOptionIndex(index);
|
| + CFX_WideString csOpt = GetOptionValue(iOptIndex);
|
| + if (csOpt == sel_value) {
|
| + return iOptIndex;
|
| + }
|
| + }
|
| + int nOpts = CountOptions();
|
| + for (int i = 0; i < nOpts; i++) {
|
| + if (sel_value == GetOptionValue(i)) {
|
| + return i;
|
| + }
|
| + }
|
| + return -1;
|
| }
|
| -FX_BOOL CPDF_FormField::IsItemSelected(int index)
|
| -{
|
| - ASSERT(GetType() == ComboBox || GetType() == ListBox);
|
| - if (index < 0 || index >= CountOptions()) {
|
| - return FALSE;
|
| - }
|
| - if (IsOptionSelected(index)) {
|
| - return TRUE;
|
| - }
|
| - CFX_WideString opt_value = GetOptionValue(index);
|
| - CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| +FX_BOOL CPDF_FormField::ClearSelection(FX_BOOL bNotify) {
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + int iRet = 0;
|
| + CFX_WideString csValue;
|
| + int iIndex = GetSelectedIndex(0);
|
| + if (iIndex >= 0) {
|
| + csValue = GetOptionLabel(iIndex);
|
| + }
|
| + if (GetType() == ListBox) {
|
| + iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| + }
|
| + if (GetType() == ComboBox) {
|
| + iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| + }
|
| + if (iRet < 0) {
|
| + return FALSE;
|
| + }
|
| + }
|
| + m_pDict->RemoveAt("V");
|
| + m_pDict->RemoveAt("I");
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + if (GetType() == ListBox) {
|
| + m_pForm->m_pFormNotify->AfterSelectionChange(this);
|
| + }
|
| + if (GetType() == ComboBox) {
|
| + m_pForm->m_pFormNotify->AfterValueChange(this);
|
| + }
|
| + }
|
| + if (CPDF_InterForm::m_bUpdateAP) {
|
| + UpdateAP(NULL);
|
| + }
|
| + m_pForm->m_bUpdated = TRUE;
|
| + return TRUE;
|
| +}
|
| +FX_BOOL CPDF_FormField::IsItemSelected(int index) {
|
| + ASSERT(GetType() == ComboBox || GetType() == ListBox);
|
| + if (index < 0 || index >= CountOptions()) {
|
| + return FALSE;
|
| + }
|
| + if (IsOptionSelected(index)) {
|
| + return TRUE;
|
| + }
|
| + CFX_WideString opt_value = GetOptionValue(index);
|
| + CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| + if (pValue == NULL) {
|
| + pValue = FPDF_GetFieldAttr(m_pDict, "I");
|
| if (pValue == NULL) {
|
| - pValue = FPDF_GetFieldAttr(m_pDict, "I");
|
| - if (pValue == NULL) {
|
| - return FALSE;
|
| - }
|
| - }
|
| - if (pValue->GetType() == PDFOBJ_STRING) {
|
| - if (pValue->GetUnicodeText() == opt_value) {
|
| - return TRUE;
|
| - }
|
| - return FALSE;
|
| + return FALSE;
|
| }
|
| - if (pValue->GetType() == PDFOBJ_NUMBER) {
|
| - if (pValue->GetString().IsEmpty()) {
|
| - return FALSE;
|
| - }
|
| - if (pValue->GetInteger() == index) {
|
| - return TRUE;
|
| - }
|
| - return FALSE;
|
| + }
|
| + if (pValue->GetType() == PDFOBJ_STRING) {
|
| + if (pValue->GetUnicodeText() == opt_value) {
|
| + return TRUE;
|
| }
|
| - if (pValue->GetType() != PDFOBJ_ARRAY) {
|
| - return FALSE;
|
| + return FALSE;
|
| + }
|
| + if (pValue->GetType() == PDFOBJ_NUMBER) {
|
| + if (pValue->GetString().IsEmpty()) {
|
| + return FALSE;
|
| }
|
| - CPDF_Array* pArray = (CPDF_Array*)pValue;
|
| - int iPos = -1;
|
| - for (int j = 0; j < CountSelectedOptions(); j ++) {
|
| - if (GetSelectedOptionIndex(j) == index) {
|
| - iPos = j;
|
| - break;
|
| - }
|
| + if (pValue->GetInteger() == index) {
|
| + return TRUE;
|
| }
|
| - for (FX_DWORD i = 0; i < pArray->GetCount(); i ++)
|
| - if (pArray->GetElementValue(i)->GetUnicodeText() == opt_value && (int)i == iPos) {
|
| - return TRUE;
|
| - }
|
| return FALSE;
|
| + }
|
| + if (pValue->GetType() != PDFOBJ_ARRAY) {
|
| + return FALSE;
|
| + }
|
| + CPDF_Array* pArray = (CPDF_Array*)pValue;
|
| + int iPos = -1;
|
| + for (int j = 0; j < CountSelectedOptions(); j++) {
|
| + if (GetSelectedOptionIndex(j) == index) {
|
| + iPos = j;
|
| + break;
|
| + }
|
| + }
|
| + for (FX_DWORD i = 0; i < pArray->GetCount(); i++)
|
| + if (pArray->GetElementValue(i)->GetUnicodeText() == opt_value &&
|
| + (int)i == iPos) {
|
| + return TRUE;
|
| + }
|
| + return FALSE;
|
| }
|
| -FX_BOOL CPDF_FormField::SetItemSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify)
|
| -{
|
| - ASSERT(GetType() == ComboBox || GetType() == ListBox);
|
| - if (index < 0 || index >= CountOptions()) {
|
| - return FALSE;
|
| +FX_BOOL CPDF_FormField::SetItemSelection(int index,
|
| + FX_BOOL bSelected,
|
| + FX_BOOL bNotify) {
|
| + ASSERT(GetType() == ComboBox || GetType() == ListBox);
|
| + if (index < 0 || index >= CountOptions()) {
|
| + return FALSE;
|
| + }
|
| + CFX_WideString opt_value = GetOptionValue(index);
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + int iRet = 0;
|
| + if (GetType() == ListBox) {
|
| + iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, opt_value);
|
| }
|
| - CFX_WideString opt_value = GetOptionValue(index);
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - int iRet = 0;
|
| - if (GetType() == ListBox) {
|
| - iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, opt_value);
|
| - }
|
| - if (GetType() == ComboBox) {
|
| - iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, opt_value);
|
| - }
|
| - if (iRet < 0) {
|
| - return FALSE;
|
| - }
|
| + if (GetType() == ComboBox) {
|
| + iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, opt_value);
|
| }
|
| - if (!bSelected) {
|
| - CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| - if (pValue != NULL) {
|
| - if (m_Type == ListBox) {
|
| - SelectOption(index, FALSE);
|
| - if (pValue->GetType() == PDFOBJ_STRING) {
|
| - if (pValue->GetUnicodeText() == opt_value) {
|
| - m_pDict->RemoveAt("V");
|
| - }
|
| - } else if (pValue->GetType() == PDFOBJ_ARRAY) {
|
| - CPDF_Array* pArray = CPDF_Array::Create();
|
| - if (pArray == NULL) {
|
| - return FALSE;
|
| - }
|
| - int iCount = CountOptions();
|
| - for (int i = 0; i < iCount; i ++) {
|
| - if (i != index) {
|
| - if (IsItemSelected(i)) {
|
| - opt_value = GetOptionValue(i);
|
| - pArray->AddString(PDF_EncodeText(opt_value));
|
| - }
|
| - }
|
| - }
|
| - if (pArray->GetCount() < 1) {
|
| - pArray->Release();
|
| - } else {
|
| - m_pDict->SetAt("V", pArray);
|
| - }
|
| - }
|
| - } else if (m_Type == ComboBox) {
|
| - m_pDict->RemoveAt("V");
|
| - m_pDict->RemoveAt("I");
|
| - }
|
| - }
|
| - } else {
|
| - if (m_Type == ListBox) {
|
| - SelectOption(index, TRUE);
|
| - if (!(m_Flags & FORMLIST_MULTISELECT)) {
|
| - m_pDict->SetAtString("V", PDF_EncodeText(opt_value));
|
| - } else {
|
| - CPDF_Array* pArray = CPDF_Array::Create();
|
| - if (pArray == NULL) {
|
| - return FALSE;
|
| - }
|
| - FX_BOOL bSelected;
|
| - int iCount = CountOptions();
|
| - for (int i = 0; i < iCount; i ++) {
|
| - if (i != index) {
|
| - bSelected = IsItemSelected(i);
|
| - } else {
|
| - bSelected = TRUE;
|
| - }
|
| - if (bSelected) {
|
| - opt_value = GetOptionValue(i);
|
| - pArray->AddString(PDF_EncodeText(opt_value));
|
| - }
|
| - }
|
| - m_pDict->SetAt("V", pArray);
|
| - }
|
| - } else if (m_Type == ComboBox) {
|
| - m_pDict->SetAtString("V", PDF_EncodeText(opt_value));
|
| - CPDF_Array* pI = CPDF_Array::Create();
|
| - if (pI == NULL) {
|
| - return FALSE;
|
| + if (iRet < 0) {
|
| + return FALSE;
|
| + }
|
| + }
|
| + if (!bSelected) {
|
| + CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
|
| + if (pValue != NULL) {
|
| + if (m_Type == ListBox) {
|
| + SelectOption(index, FALSE);
|
| + if (pValue->GetType() == PDFOBJ_STRING) {
|
| + if (pValue->GetUnicodeText() == opt_value) {
|
| + m_pDict->RemoveAt("V");
|
| + }
|
| + } else if (pValue->GetType() == PDFOBJ_ARRAY) {
|
| + CPDF_Array* pArray = CPDF_Array::Create();
|
| + if (pArray == NULL) {
|
| + return FALSE;
|
| + }
|
| + int iCount = CountOptions();
|
| + for (int i = 0; i < iCount; i++) {
|
| + if (i != index) {
|
| + if (IsItemSelected(i)) {
|
| + opt_value = GetOptionValue(i);
|
| + pArray->AddString(PDF_EncodeText(opt_value));
|
| + }
|
| }
|
| - pI->AddInteger(index);
|
| - m_pDict->SetAt("I", pI);
|
| + }
|
| + if (pArray->GetCount() < 1) {
|
| + pArray->Release();
|
| + } else {
|
| + m_pDict->SetAt("V", pArray);
|
| + }
|
| }
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - if (GetType() == ListBox) {
|
| - m_pForm->m_pFormNotify->AfterSelectionChange(this);
|
| + } else if (m_Type == ComboBox) {
|
| + m_pDict->RemoveAt("V");
|
| + m_pDict->RemoveAt("I");
|
| + }
|
| + }
|
| + } else {
|
| + if (m_Type == ListBox) {
|
| + SelectOption(index, TRUE);
|
| + if (!(m_Flags & FORMLIST_MULTISELECT)) {
|
| + m_pDict->SetAtString("V", PDF_EncodeText(opt_value));
|
| + } else {
|
| + CPDF_Array* pArray = CPDF_Array::Create();
|
| + if (pArray == NULL) {
|
| + return FALSE;
|
| }
|
| - if (GetType() == ComboBox) {
|
| - m_pForm->m_pFormNotify->AfterValueChange(this);
|
| + FX_BOOL bSelected;
|
| + int iCount = CountOptions();
|
| + for (int i = 0; i < iCount; i++) {
|
| + if (i != index) {
|
| + bSelected = IsItemSelected(i);
|
| + } else {
|
| + bSelected = TRUE;
|
| + }
|
| + if (bSelected) {
|
| + opt_value = GetOptionValue(i);
|
| + pArray->AddString(PDF_EncodeText(opt_value));
|
| + }
|
| }
|
| - }
|
| - if (CPDF_InterForm::m_bUpdateAP) {
|
| - UpdateAP(NULL);
|
| - }
|
| - m_pForm->m_bUpdated = TRUE;
|
| - return TRUE;
|
| -}
|
| -FX_BOOL CPDF_FormField::IsItemDefaultSelected(int index)
|
| -{
|
| - ASSERT(GetType() == ComboBox || GetType() == ListBox);
|
| - if (index < 0 || index >= CountOptions()) {
|
| + m_pDict->SetAt("V", pArray);
|
| + }
|
| + } else if (m_Type == ComboBox) {
|
| + m_pDict->SetAtString("V", PDF_EncodeText(opt_value));
|
| + CPDF_Array* pI = CPDF_Array::Create();
|
| + if (pI == NULL) {
|
| return FALSE;
|
| - }
|
| - int iDVIndex = GetDefaultSelectedItem();
|
| - if (iDVIndex < 0) {
|
| - return FALSE;
|
| - }
|
| - return (iDVIndex == index);
|
| + }
|
| + pI->AddInteger(index);
|
| + m_pDict->SetAt("I", pI);
|
| + }
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + if (GetType() == ListBox) {
|
| + m_pForm->m_pFormNotify->AfterSelectionChange(this);
|
| + }
|
| + if (GetType() == ComboBox) {
|
| + m_pForm->m_pFormNotify->AfterValueChange(this);
|
| + }
|
| + }
|
| + if (CPDF_InterForm::m_bUpdateAP) {
|
| + UpdateAP(NULL);
|
| + }
|
| + m_pForm->m_bUpdated = TRUE;
|
| + return TRUE;
|
| }
|
| -int CPDF_FormField::GetDefaultSelectedItem()
|
| -{
|
| - ASSERT(GetType() == ComboBox || GetType() == ListBox);
|
| - CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "DV");
|
| - if (pValue == NULL) {
|
| - return -1;
|
| - }
|
| - CFX_WideString csDV = pValue->GetUnicodeText();
|
| - if (csDV.IsEmpty()) {
|
| - return -1;
|
| - }
|
| - int iCount = CountOptions();
|
| - for (int i = 0; i < iCount; i ++) {
|
| - if (csDV == GetOptionValue(i)) {
|
| - return i;
|
| - }
|
| - }
|
| +FX_BOOL CPDF_FormField::IsItemDefaultSelected(int index) {
|
| + ASSERT(GetType() == ComboBox || GetType() == ListBox);
|
| + if (index < 0 || index >= CountOptions()) {
|
| + return FALSE;
|
| + }
|
| + int iDVIndex = GetDefaultSelectedItem();
|
| + if (iDVIndex < 0) {
|
| + return FALSE;
|
| + }
|
| + return (iDVIndex == index);
|
| +}
|
| +int CPDF_FormField::GetDefaultSelectedItem() {
|
| + ASSERT(GetType() == ComboBox || GetType() == ListBox);
|
| + CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "DV");
|
| + if (pValue == NULL) {
|
| + return -1;
|
| + }
|
| + CFX_WideString csDV = pValue->GetUnicodeText();
|
| + if (csDV.IsEmpty()) {
|
| return -1;
|
| + }
|
| + int iCount = CountOptions();
|
| + for (int i = 0; i < iCount; i++) {
|
| + if (csDV == GetOptionValue(i)) {
|
| + return i;
|
| + }
|
| + }
|
| + return -1;
|
| }
|
| -void CPDF_FormField::UpdateAP(CPDF_FormControl* pControl)
|
| -{
|
| - if (m_Type == PushButton) {
|
| - return;
|
| - }
|
| - if (m_Type == RadioButton || m_Type == CheckBox) {
|
| - return;
|
| - }
|
| - if (!m_pForm->m_bGenerateAP) {
|
| - return;
|
| - }
|
| - for (int i = 0; i < CountControls(); i ++) {
|
| - CPDF_FormControl* pControl = GetControl(i);
|
| - FPDF_GenerateAP(m_pForm->m_pDocument, pControl->m_pWidgetDict);
|
| - }
|
| +void CPDF_FormField::UpdateAP(CPDF_FormControl* pControl) {
|
| + if (m_Type == PushButton) {
|
| + return;
|
| + }
|
| + if (m_Type == RadioButton || m_Type == CheckBox) {
|
| + return;
|
| + }
|
| + if (!m_pForm->m_bGenerateAP) {
|
| + return;
|
| + }
|
| + for (int i = 0; i < CountControls(); i++) {
|
| + CPDF_FormControl* pControl = GetControl(i);
|
| + FPDF_GenerateAP(m_pForm->m_pDocument, pControl->m_pWidgetDict);
|
| + }
|
| }
|
| -int CPDF_FormField::CountOptions()
|
| -{
|
| - CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt");
|
| - if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) {
|
| - return 0;
|
| - }
|
| - return ((CPDF_Array*)pValue)->GetCount();
|
| +int CPDF_FormField::CountOptions() {
|
| + CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt");
|
| + if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) {
|
| + return 0;
|
| + }
|
| + return ((CPDF_Array*)pValue)->GetCount();
|
| }
|
| -CFX_WideString CPDF_FormField::GetOptionText(int index, int sub_index)
|
| -{
|
| - CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt");
|
| - if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) {
|
| - return CFX_WideString();
|
| - }
|
| - CPDF_Object* pOption = ((CPDF_Array*)pValue)->GetElementValue(index);
|
| - if (pOption == NULL) {
|
| - return CFX_WideString();
|
| - }
|
| - if (pOption->GetType() == PDFOBJ_ARRAY) {
|
| - pOption = ((CPDF_Array*)pOption)->GetElementValue(sub_index);
|
| - }
|
| - if (pOption == NULL || pOption->GetType() != PDFOBJ_STRING) {
|
| - return CFX_WideString();
|
| - }
|
| - return ((CPDF_String*)pOption)->GetUnicodeText();
|
| -}
|
| -CFX_WideString CPDF_FormField::GetOptionLabel(int index)
|
| -{
|
| - return GetOptionText(index, 1);
|
| +CFX_WideString CPDF_FormField::GetOptionText(int index, int sub_index) {
|
| + CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt");
|
| + if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) {
|
| + return CFX_WideString();
|
| + }
|
| + CPDF_Object* pOption = ((CPDF_Array*)pValue)->GetElementValue(index);
|
| + if (pOption == NULL) {
|
| + return CFX_WideString();
|
| + }
|
| + if (pOption->GetType() == PDFOBJ_ARRAY) {
|
| + pOption = ((CPDF_Array*)pOption)->GetElementValue(sub_index);
|
| + }
|
| + if (pOption == NULL || pOption->GetType() != PDFOBJ_STRING) {
|
| + return CFX_WideString();
|
| + }
|
| + return ((CPDF_String*)pOption)->GetUnicodeText();
|
| }
|
| -CFX_WideString CPDF_FormField::GetOptionValue(int index)
|
| -{
|
| - return GetOptionText(index, 0);
|
| +CFX_WideString CPDF_FormField::GetOptionLabel(int index) {
|
| + return GetOptionText(index, 1);
|
| }
|
| -int CPDF_FormField::FindOption(CFX_WideString csOptLabel)
|
| -{
|
| - int iCount = CountOptions();
|
| - for (int i = 0; i < iCount; i ++) {
|
| - CFX_WideString csValue = GetOptionValue(i);
|
| - if (csValue == csOptLabel) {
|
| - return i;
|
| - }
|
| - }
|
| - return -1;
|
| +CFX_WideString CPDF_FormField::GetOptionValue(int index) {
|
| + return GetOptionText(index, 0);
|
| }
|
| -int CPDF_FormField::FindOptionValue(const CFX_WideString& csOptValue, int iStartIndex)
|
| -{
|
| - if (iStartIndex < 0) {
|
| - iStartIndex = 0;
|
| - }
|
| - int iCount = CountOptions();
|
| - for (; iStartIndex < iCount; iStartIndex ++) {
|
| - CFX_WideString csValue = GetOptionValue(iStartIndex);
|
| - if (csValue == csOptValue) {
|
| - return iStartIndex;
|
| - }
|
| - }
|
| - return -1;
|
| +int CPDF_FormField::FindOption(CFX_WideString csOptLabel) {
|
| + int iCount = CountOptions();
|
| + for (int i = 0; i < iCount; i++) {
|
| + CFX_WideString csValue = GetOptionValue(i);
|
| + if (csValue == csOptLabel) {
|
| + return i;
|
| + }
|
| + }
|
| + return -1;
|
| }
|
| -FX_BOOL CPDF_FormField::CheckControl(int iControlIndex, FX_BOOL bChecked, FX_BOOL bNotify)
|
| -{
|
| - ASSERT(GetType() == CheckBox || GetType() == RadioButton);
|
| - CPDF_FormControl* pControl = GetControl(iControlIndex);
|
| - if (pControl == NULL) {
|
| - return FALSE;
|
| - }
|
| - if (!bChecked && pControl->IsChecked() == bChecked) {
|
| - return FALSE;
|
| - }
|
| - CFX_ByteArray statusArray;
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - SaveCheckedFieldStatus(this, statusArray);
|
| - }
|
| - CFX_WideString csWExport = pControl->GetExportValue();
|
| - CFX_ByteString csBExport = PDF_EncodeText(csWExport);
|
| - int iCount = CountControls();
|
| - FX_BOOL bUnison = PDF_FormField_IsUnison(this);
|
| - for (int i = 0; i < iCount; i ++) {
|
| - CPDF_FormControl* pCtrl = GetControl(i);
|
| - if (bUnison) {
|
| - CFX_WideString csEValue = pCtrl->GetExportValue();
|
| - if (csEValue == csWExport) {
|
| - if (pCtrl->GetOnStateName() == pControl->GetOnStateName()) {
|
| - pCtrl->CheckControl(bChecked);
|
| - } else if (bChecked) {
|
| - pCtrl->CheckControl(FALSE);
|
| - }
|
| - } else if (bChecked) {
|
| - pCtrl->CheckControl(FALSE);
|
| - }
|
| - } else {
|
| - if (i == iControlIndex) {
|
| - pCtrl->CheckControl(bChecked);
|
| - } else if (bChecked) {
|
| - pCtrl->CheckControl(FALSE);
|
| - }
|
| - }
|
| - }
|
| - CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt");
|
| - if (pOpt == NULL || pOpt->GetType() != PDFOBJ_ARRAY) {
|
| - if (bChecked) {
|
| - m_pDict->SetAtName("V", csBExport);
|
| - } else {
|
| - CFX_ByteString csV;
|
| - CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V");
|
| - if (pV != NULL) {
|
| - csV = pV->GetString();
|
| - }
|
| - if (csV == csBExport) {
|
| - m_pDict->SetAtName("V", "Off");
|
| - }
|
| - }
|
| - } else if (bChecked) {
|
| - CFX_ByteString csIndex;
|
| - csIndex.Format("%d", iControlIndex);
|
| - m_pDict->SetAtName("V", csIndex);
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
|
| - }
|
| - m_pForm->m_bUpdated = TRUE;
|
| - return TRUE;
|
| +int CPDF_FormField::FindOptionValue(const CFX_WideString& csOptValue,
|
| + int iStartIndex) {
|
| + if (iStartIndex < 0) {
|
| + iStartIndex = 0;
|
| + }
|
| + int iCount = CountOptions();
|
| + for (; iStartIndex < iCount; iStartIndex++) {
|
| + CFX_WideString csValue = GetOptionValue(iStartIndex);
|
| + if (csValue == csOptValue) {
|
| + return iStartIndex;
|
| + }
|
| + }
|
| + return -1;
|
| }
|
| -CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault)
|
| -{
|
| - ASSERT(GetType() == CheckBox || GetType() == RadioButton);
|
| - CFX_WideString csExport = L"Off";
|
| - FX_BOOL bChecked;
|
| - int iCount = CountControls();
|
| - for (int i = 0; i < iCount; i ++) {
|
| - CPDF_FormControl* pControl = GetControl(i);
|
| - if (bDefault) {
|
| - bChecked = pControl->IsDefaultChecked();
|
| - } else {
|
| - bChecked = pControl->IsChecked();
|
| - }
|
| - if (bChecked) {
|
| - csExport = pControl->GetExportValue();
|
| - break;
|
| +FX_BOOL CPDF_FormField::CheckControl(int iControlIndex,
|
| + FX_BOOL bChecked,
|
| + FX_BOOL bNotify) {
|
| + ASSERT(GetType() == CheckBox || GetType() == RadioButton);
|
| + CPDF_FormControl* pControl = GetControl(iControlIndex);
|
| + if (pControl == NULL) {
|
| + return FALSE;
|
| + }
|
| + if (!bChecked && pControl->IsChecked() == bChecked) {
|
| + return FALSE;
|
| + }
|
| + CFX_ByteArray statusArray;
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + SaveCheckedFieldStatus(this, statusArray);
|
| + }
|
| + CFX_WideString csWExport = pControl->GetExportValue();
|
| + CFX_ByteString csBExport = PDF_EncodeText(csWExport);
|
| + int iCount = CountControls();
|
| + FX_BOOL bUnison = PDF_FormField_IsUnison(this);
|
| + for (int i = 0; i < iCount; i++) {
|
| + CPDF_FormControl* pCtrl = GetControl(i);
|
| + if (bUnison) {
|
| + CFX_WideString csEValue = pCtrl->GetExportValue();
|
| + if (csEValue == csWExport) {
|
| + if (pCtrl->GetOnStateName() == pControl->GetOnStateName()) {
|
| + pCtrl->CheckControl(bChecked);
|
| + } else if (bChecked) {
|
| + pCtrl->CheckControl(FALSE);
|
| }
|
| - }
|
| - return csExport;
|
| + } else if (bChecked) {
|
| + pCtrl->CheckControl(FALSE);
|
| + }
|
| + } else {
|
| + if (i == iControlIndex) {
|
| + pCtrl->CheckControl(bChecked);
|
| + } else if (bChecked) {
|
| + pCtrl->CheckControl(FALSE);
|
| + }
|
| + }
|
| + }
|
| + CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt");
|
| + if (pOpt == NULL || pOpt->GetType() != PDFOBJ_ARRAY) {
|
| + if (bChecked) {
|
| + m_pDict->SetAtName("V", csBExport);
|
| + } else {
|
| + CFX_ByteString csV;
|
| + CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V");
|
| + if (pV != NULL) {
|
| + csV = pV->GetString();
|
| + }
|
| + if (csV == csBExport) {
|
| + m_pDict->SetAtName("V", "Off");
|
| + }
|
| + }
|
| + } else if (bChecked) {
|
| + CFX_ByteString csIndex;
|
| + csIndex.Format("%d", iControlIndex);
|
| + m_pDict->SetAtName("V", csIndex);
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
|
| + }
|
| + m_pForm->m_bUpdated = TRUE;
|
| + return TRUE;
|
| }
|
| -FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify)
|
| -{
|
| - ASSERT(GetType() == CheckBox || GetType() == RadioButton);
|
| - CFX_ByteArray statusArray;
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - SaveCheckedFieldStatus(this, statusArray);
|
| - }
|
| - int iCount = CountControls();
|
| - for (int i = 0; i < iCount; i ++) {
|
| - CPDF_FormControl* pControl = GetControl(i);
|
| - CFX_WideString csExport = pControl->GetExportValue();
|
| - if (csExport == value) {
|
| - if (bDefault) {
|
| - } else {
|
| - CheckControl(GetControlIndex(pControl), TRUE);
|
| - }
|
| - break;
|
| - } else {
|
| - if (bDefault) {
|
| - } else {
|
| - CheckControl(GetControlIndex(pControl), FALSE);
|
| - }
|
| - }
|
| +CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) {
|
| + ASSERT(GetType() == CheckBox || GetType() == RadioButton);
|
| + CFX_WideString csExport = L"Off";
|
| + FX_BOOL bChecked;
|
| + int iCount = CountControls();
|
| + for (int i = 0; i < iCount; i++) {
|
| + CPDF_FormControl* pControl = GetControl(i);
|
| + if (bDefault) {
|
| + bChecked = pControl->IsDefaultChecked();
|
| + } else {
|
| + bChecked = pControl->IsChecked();
|
| }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
|
| + if (bChecked) {
|
| + csExport = pControl->GetExportValue();
|
| + break;
|
| }
|
| - m_pForm->m_bUpdated = TRUE;
|
| - return TRUE;
|
| + }
|
| + return csExport;
|
| }
|
| -int CPDF_FormField::GetTopVisibleIndex()
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI");
|
| - if (pObj == NULL) {
|
| - return 0;
|
| - }
|
| - return pObj->GetInteger();
|
| +FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value,
|
| + FX_BOOL bDefault,
|
| + FX_BOOL bNotify) {
|
| + ASSERT(GetType() == CheckBox || GetType() == RadioButton);
|
| + CFX_ByteArray statusArray;
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + SaveCheckedFieldStatus(this, statusArray);
|
| + }
|
| + int iCount = CountControls();
|
| + for (int i = 0; i < iCount; i++) {
|
| + CPDF_FormControl* pControl = GetControl(i);
|
| + CFX_WideString csExport = pControl->GetExportValue();
|
| + if (csExport == value) {
|
| + if (bDefault) {
|
| + } else {
|
| + CheckControl(GetControlIndex(pControl), TRUE);
|
| + }
|
| + break;
|
| + } else {
|
| + if (bDefault) {
|
| + } else {
|
| + CheckControl(GetControlIndex(pControl), FALSE);
|
| + }
|
| + }
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
|
| + }
|
| + m_pForm->m_bUpdated = TRUE;
|
| + return TRUE;
|
| }
|
| -int CPDF_FormField::CountSelectedOptions()
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
|
| - if (pObj == NULL) {
|
| - return 0;
|
| - }
|
| - CPDF_Array* pArray = pObj->GetArray();
|
| - if (pArray == NULL) {
|
| - return 0;
|
| - }
|
| - return (int)pArray->GetCount();
|
| +int CPDF_FormField::GetTopVisibleIndex() {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI");
|
| + if (pObj == NULL) {
|
| + return 0;
|
| + }
|
| + return pObj->GetInteger();
|
| }
|
| -int CPDF_FormField::GetSelectedOptionIndex(int index)
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
|
| - if (pObj == NULL) {
|
| - return -1;
|
| - }
|
| - CPDF_Array* pArray = pObj->GetArray();
|
| - if (pArray == NULL) {
|
| - return -1;
|
| - }
|
| - int iCount = (int)pArray->GetCount();
|
| - if (iCount > 0 && index < iCount) {
|
| - return pArray->GetInteger(index);
|
| - }
|
| +int CPDF_FormField::CountSelectedOptions() {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
|
| + if (pObj == NULL) {
|
| + return 0;
|
| + }
|
| + CPDF_Array* pArray = pObj->GetArray();
|
| + if (pArray == NULL) {
|
| + return 0;
|
| + }
|
| + return (int)pArray->GetCount();
|
| +}
|
| +int CPDF_FormField::GetSelectedOptionIndex(int index) {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
|
| + if (pObj == NULL) {
|
| + return -1;
|
| + }
|
| + CPDF_Array* pArray = pObj->GetArray();
|
| + if (pArray == NULL) {
|
| return -1;
|
| + }
|
| + int iCount = (int)pArray->GetCount();
|
| + if (iCount > 0 && index < iCount) {
|
| + return pArray->GetInteger(index);
|
| + }
|
| + return -1;
|
| }
|
| -FX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex)
|
| -{
|
| - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
|
| - if (pObj == NULL) {
|
| - return FALSE;
|
| - }
|
| - CPDF_Array* pArray = pObj->GetArray();
|
| - if (pArray == NULL) {
|
| - return FALSE;
|
| - }
|
| - int iCount = (int)pArray->GetCount();
|
| - for (int i = 0; i < iCount; i ++) {
|
| - if (pArray->GetInteger(i) == iOptIndex) {
|
| - return TRUE;
|
| - }
|
| - }
|
| +FX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex) {
|
| + CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
|
| + if (pObj == NULL) {
|
| return FALSE;
|
| + }
|
| + CPDF_Array* pArray = pObj->GetArray();
|
| + if (pArray == NULL) {
|
| + return FALSE;
|
| + }
|
| + int iCount = (int)pArray->GetCount();
|
| + for (int i = 0; i < iCount; i++) {
|
| + if (pArray->GetInteger(i) == iOptIndex) {
|
| + return TRUE;
|
| + }
|
| + }
|
| + return FALSE;
|
| }
|
| -FX_BOOL CPDF_FormField::SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify)
|
| -{
|
| - CPDF_Array* pArray = m_pDict->GetArray("I");
|
| - if (pArray == NULL) {
|
| - if (!bSelected) {
|
| - return TRUE;
|
| - }
|
| - pArray = CPDF_Array::Create();
|
| - if (pArray == NULL) {
|
| - return FALSE;
|
| - }
|
| - m_pDict->SetAt("I", pArray);
|
| - }
|
| - FX_BOOL bReturn = FALSE;
|
| - for (int i = 0; i < (int)pArray->GetCount(); i ++) {
|
| - int iFind = pArray->GetInteger(i);
|
| - if (iFind == iOptIndex) {
|
| - if (bSelected) {
|
| - return TRUE;
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - int iRet = 0;
|
| - CFX_WideString csValue = GetOptionLabel(iOptIndex);
|
| - if (GetType() == ListBox) {
|
| - iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| - }
|
| - if (GetType() == ComboBox) {
|
| - iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| - }
|
| - if (iRet < 0) {
|
| - return FALSE;
|
| - }
|
| - }
|
| - pArray->RemoveAt(i);
|
| - bReturn = TRUE;
|
| - break;
|
| - } else if (iFind > iOptIndex) {
|
| - if (!bSelected) {
|
| - continue;
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - int iRet = 0;
|
| - CFX_WideString csValue = GetOptionLabel(iOptIndex);
|
| - if (GetType() == ListBox) {
|
| - iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| - }
|
| - if (GetType() == ComboBox) {
|
| - iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| - }
|
| - if (iRet < 0) {
|
| - return FALSE;
|
| - }
|
| - }
|
| - CPDF_Number* pNum = CPDF_Number::Create(iOptIndex);
|
| - if (pNum == NULL) {
|
| - return FALSE;
|
| - }
|
| - pArray->InsertAt(i, pNum);
|
| - bReturn = TRUE;
|
| - break;
|
| - }
|
| - }
|
| - if (!bReturn) {
|
| - if (bSelected) {
|
| - pArray->AddInteger(iOptIndex);
|
| - }
|
| - if (pArray->GetCount() == 0) {
|
| - m_pDict->RemoveAt("I");
|
| - }
|
| - }
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| - if (GetType() == ListBox) {
|
| - m_pForm->m_pFormNotify->AfterSelectionChange(this);
|
| - }
|
| - if (GetType() == ComboBox) {
|
| - m_pForm->m_pFormNotify->AfterValueChange(this);
|
| - }
|
| +FX_BOOL CPDF_FormField::SelectOption(int iOptIndex,
|
| + FX_BOOL bSelected,
|
| + FX_BOOL bNotify) {
|
| + CPDF_Array* pArray = m_pDict->GetArray("I");
|
| + if (pArray == NULL) {
|
| + if (!bSelected) {
|
| + return TRUE;
|
| }
|
| - m_pForm->m_bUpdated = TRUE;
|
| - return TRUE;
|
| -}
|
| -FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify)
|
| -{
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + pArray = CPDF_Array::Create();
|
| + if (pArray == NULL) {
|
| + return FALSE;
|
| + }
|
| + m_pDict->SetAt("I", pArray);
|
| + }
|
| + FX_BOOL bReturn = FALSE;
|
| + for (int i = 0; i < (int)pArray->GetCount(); i++) {
|
| + int iFind = pArray->GetInteger(i);
|
| + if (iFind == iOptIndex) {
|
| + if (bSelected) {
|
| + return TRUE;
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| int iRet = 0;
|
| - CFX_WideString csValue;
|
| - int iIndex = GetSelectedIndex(0);
|
| - if (iIndex >= 0) {
|
| - csValue = GetOptionLabel(iIndex);
|
| - }
|
| + CFX_WideString csValue = GetOptionLabel(iOptIndex);
|
| if (GetType() == ListBox) {
|
| - iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| + iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| }
|
| if (GetType() == ComboBox) {
|
| - iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| + iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| }
|
| if (iRet < 0) {
|
| - return FALSE;
|
| + return FALSE;
|
| }
|
| - }
|
| - m_pDict->RemoveAt("I");
|
| - if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + }
|
| + pArray->RemoveAt(i);
|
| + bReturn = TRUE;
|
| + break;
|
| + } else if (iFind > iOptIndex) {
|
| + if (!bSelected) {
|
| + continue;
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + int iRet = 0;
|
| + CFX_WideString csValue = GetOptionLabel(iOptIndex);
|
| if (GetType() == ListBox) {
|
| - m_pForm->m_pFormNotify->AfterSelectionChange(this);
|
| + iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| }
|
| if (GetType() == ComboBox) {
|
| - m_pForm->m_pFormNotify->AfterValueChange(this);
|
| + iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| }
|
| - }
|
| - m_pForm->m_bUpdated = TRUE;
|
| - return TRUE;
|
| + if (iRet < 0) {
|
| + return FALSE;
|
| + }
|
| + }
|
| + CPDF_Number* pNum = CPDF_Number::Create(iOptIndex);
|
| + if (pNum == NULL) {
|
| + return FALSE;
|
| + }
|
| + pArray->InsertAt(i, pNum);
|
| + bReturn = TRUE;
|
| + break;
|
| + }
|
| + }
|
| + if (!bReturn) {
|
| + if (bSelected) {
|
| + pArray->AddInteger(iOptIndex);
|
| + }
|
| + if (pArray->GetCount() == 0) {
|
| + m_pDict->RemoveAt("I");
|
| + }
|
| + }
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + if (GetType() == ListBox) {
|
| + m_pForm->m_pFormNotify->AfterSelectionChange(this);
|
| + }
|
| + if (GetType() == ComboBox) {
|
| + m_pForm->m_pFormNotify->AfterValueChange(this);
|
| + }
|
| + }
|
| + m_pForm->m_bUpdated = TRUE;
|
| + return TRUE;
|
| }
|
| -void CPDF_FormField::LoadDA()
|
| -{
|
| - CFX_ByteString DA;
|
| - if (CPDF_Object* pObj_t = FPDF_GetFieldAttr(m_pDict, "DA")) {
|
| - DA = pObj_t->GetString();
|
| - }
|
| - if (DA.IsEmpty() && m_pForm->m_pFormDict) {
|
| - DA = m_pForm->m_pFormDict->GetString("DA");
|
| - }
|
| - if (DA.IsEmpty()) {
|
| - return;
|
| - }
|
| - CPDF_SimpleParser syntax(DA);
|
| - syntax.FindTagParam("Tf", 2);
|
| - CFX_ByteString font_name = syntax.GetWord();
|
| - CPDF_Dictionary* pFontDict = NULL;
|
| - if (m_pForm->m_pFormDict && m_pForm->m_pFormDict->GetDict("DR") &&
|
| - m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font") )
|
| - pFontDict = m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")->GetDict(font_name);
|
| +FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify) {
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + int iRet = 0;
|
| + CFX_WideString csValue;
|
| + int iIndex = GetSelectedIndex(0);
|
| + if (iIndex >= 0) {
|
| + csValue = GetOptionLabel(iIndex);
|
| + }
|
| + if (GetType() == ListBox) {
|
| + iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
|
| + }
|
| + if (GetType() == ComboBox) {
|
| + iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
|
| + }
|
| + if (iRet < 0) {
|
| + return FALSE;
|
| + }
|
| + }
|
| + m_pDict->RemoveAt("I");
|
| + if (bNotify && m_pForm->m_pFormNotify != NULL) {
|
| + if (GetType() == ListBox) {
|
| + m_pForm->m_pFormNotify->AfterSelectionChange(this);
|
| + }
|
| + if (GetType() == ComboBox) {
|
| + m_pForm->m_pFormNotify->AfterValueChange(this);
|
| + }
|
| + }
|
| + m_pForm->m_bUpdated = TRUE;
|
| + return TRUE;
|
| +}
|
| +void CPDF_FormField::LoadDA() {
|
| + CFX_ByteString DA;
|
| + if (CPDF_Object* pObj_t = FPDF_GetFieldAttr(m_pDict, "DA")) {
|
| + DA = pObj_t->GetString();
|
| + }
|
| + if (DA.IsEmpty() && m_pForm->m_pFormDict) {
|
| + DA = m_pForm->m_pFormDict->GetString("DA");
|
| + }
|
| + if (DA.IsEmpty()) {
|
| + return;
|
| + }
|
| + CPDF_SimpleParser syntax(DA);
|
| + syntax.FindTagParam("Tf", 2);
|
| + CFX_ByteString font_name = syntax.GetWord();
|
| + CPDF_Dictionary* pFontDict = NULL;
|
| + if (m_pForm->m_pFormDict && m_pForm->m_pFormDict->GetDict("DR") &&
|
| + m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font"))
|
| + pFontDict = m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")->GetDict(
|
| + font_name);
|
|
|
| - if (pFontDict == NULL) {
|
| - return;
|
| - }
|
| - m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict);
|
| - m_FontSize = FX_atof(syntax.GetWord());
|
| + if (pFontDict == NULL) {
|
| + return;
|
| + }
|
| + m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict);
|
| + m_FontSize = FX_atof(syntax.GetWord());
|
| }
|
|
|