1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfdoc/fpdf_doc.h" 8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "doc_utils.h" 9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL PDF_FormField_IsUnison(CPDF_FormField* pField) { 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bUnison = FALSE; 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pField->GetType() == CPDF_FormField::CheckBox) { 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bUnison = TRUE; 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD dwFlags = pField->GetFieldFlags(); 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bUnison = ((dwFlags & 0x2000000) != 0); 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return bUnison; 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_FormField::CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict) { 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict = pDict; 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type = Unknown; 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm = pForm; 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pFont = NULL; 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_FontSize = 0; 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SyncFieldFlags(); 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_FormField::~CPDF_FormField() {} 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_FormField::SyncFieldFlags() { 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString type_name = FPDF_GetFieldAttr(m_pDict, "FT") 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? FPDF_GetFieldAttr(m_pDict, "FT")->GetString() 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : CFX_ByteString(); 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD flags = FPDF_GetFieldAttr(m_pDict, "Ff") 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? FPDF_GetFieldAttr(m_pDict, "Ff")->GetInteger() 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : 0; 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags = 0; 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 1) { 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMFIELD_READONLY; 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 2) { 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMFIELD_REQUIRED; 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 4) { 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMFIELD_NOEXPORT; 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (type_name == "Btn") { 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x8000) { 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type = RadioButton; 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x4000) { 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMRADIO_NOTOGGLEOFF; 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x2000000) { 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMRADIO_UNISON; 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (flags & 0x10000) { 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type = PushButton; 57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } else { 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type = CheckBox; 59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (type_name == "Tx") { 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x100000) { 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type = File; 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (flags & 0x2000000) { 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type = RichText; 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type = Text; 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x1000) { 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMTEXT_MULTILINE; 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x2000) { 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMTEXT_PASSWORD; 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x800000) { 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMTEXT_NOSCROLL; 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x100000) { 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMTEXT_COMB; 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann LoadDA(); 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (type_name == "Ch") { 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x20000) { 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type = ComboBox; 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x40000) { 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMCOMBO_EDIT; 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type = ListBox; 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flags & 0x200000) { 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Flags |= FORMLIST_MULTISELECT; 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann LoadDA(); 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (type_name == "Sig") { 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type = Sign; 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetFullName() { 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return ::GetFullName(m_pDict); 100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify) { 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_Type) { 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CPDF_FormField::CheckBox: 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CPDF_FormField::RadioButton: { 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteArray statusArray; 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SaveCheckedFieldStatus(this, statusArray); 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = CountControls(); 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iCount) { 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (PDF_FormField_IsUnison(this)) { 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CheckControl(i, GetControl(i)->IsDefaultChecked(), FALSE); 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } else { 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FormControl* pControl = GetControl(i); 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bChecked = pControl->IsDefaultChecked(); 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CheckControl(i, bChecked, FALSE); 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CPDF_FormField::ComboBox: { 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue; 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ClearSelection(); 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iIndex = GetDefaultSelectedItem(); 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iIndex >= 0) { 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csValue = GetOptionLabel(iIndex); 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iRet < 0) { 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetItemSelection(iIndex, TRUE); 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterValueChange(this); 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CPDF_FormField::ListBox: { 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue; 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ClearSelection(); 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iIndex = GetDefaultSelectedItem(); 149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iIndex >= 0) { 150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csValue = GetOptionLabel(iIndex); 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iRet < 0) { 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetItemSelection(iIndex, TRUE); 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterSelectionChange(this); 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CPDF_FormField::Text: 164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CPDF_FormField::RichText: 165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CPDF_FormField::File: 166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: { 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pDV = FPDF_GetFieldAttr(m_pDict, "DV"); 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csDValue; 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pDV) { 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csDValue = pDV->GetUnicodeText(); 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); 173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue; 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pV) { 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csValue = pV->GetUnicodeText(); 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pRV = FPDF_GetFieldAttr(m_pDict, "RV"); 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pRV && (csDValue == csValue)) { 179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csDValue); 183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iRet < 0) { 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pDV) { 188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pClone = pDV->Clone(); 189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pClone) { 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAt("V", pClone); 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pRV) { 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pCloneR = pDV->Clone(); 195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAt("RV", pCloneR); 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("V"); 199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("RV"); 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterValueChange(this); 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) { 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pControl) { 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < m_ControlList.GetSize(); i++) { 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ControlList.GetAt(i) == pControl) 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return i; 216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::GetFieldType() { 220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_Type) { 221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PushButton: 222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FIELDTYPE_PUSHBUTTON; 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CheckBox: 224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FIELDTYPE_CHECKBOX; 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case RadioButton: 226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FIELDTYPE_RADIOBUTTON; 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case ComboBox: 228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FIELDTYPE_COMBOBOX; 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case ListBox: 230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FIELDTYPE_LISTBOX; 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case Text: 232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case RichText: 233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case File: 234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FIELDTYPE_TEXTFIELD; 235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case Sign: 236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FIELDTYPE_SIGNATURE; 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FIELDTYPE_UNKNOWN; 241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_AAction CPDF_FormField::GetAdditionalAction() { 243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "AA"); 244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pObj->GetDict(); 248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetAlternateName() { 250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TU"); 251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return L""; 253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pObj->GetUnicodeText(); 255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetMappingName() { 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TM"); 258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return L""; 260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pObj->GetUnicodeText(); 262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD CPDF_FormField::GetFieldFlags() { 264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "Ff"); 265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pObj->GetInteger(); 269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPDF_FormField::GetDefaultStyle() { 271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS"); 272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return ""; 274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pObj->GetString(); 276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetRichTextString() { 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "RV"); 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return L""; 281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pObj->GetUnicodeText(); 283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault) { 285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == CheckBox || GetType() == RadioButton) { 286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetCheckValue(bDefault); 287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V"); 289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pValue) { 290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bDefault) { 291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Type == RichText) { 292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pValue = FPDF_GetFieldAttr(m_pDict, "V"); 293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pValue && m_Type != Text) { 295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pValue = FPDF_GetFieldAttr(m_pDict, "DV"); 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pValue) { 299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CFX_WideString(); 300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (pValue->GetType()) { 303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PDFOBJ_STRING: 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PDFOBJ_STREAM: 305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pValue->GetUnicodeText(); 306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PDFOBJ_ARRAY: 307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pValue = pValue->AsArray()->GetElementValue(0); 308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pValue) 309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pValue->GetUnicodeText(); 310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CFX_WideString(); 313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetValue() { 315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetValue(FALSE); 316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetDefaultValue() { 318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetValue(TRUE); 319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, 321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bDefault, 322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bNotify) { 323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_Type) { 324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case CheckBox: 325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case RadioButton: { 326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetCheckValue(value, bDefault, bNotify); 327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case File: 330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case RichText: 331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case Text: 332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case ComboBox: { 333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue = value; 334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); 336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (iRet < 0) { 337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iIndex = FindOptionValue(csValue); 341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iIndex < 0) { 342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString bsEncodeText = PDF_EncodeText(csValue); 343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAtString(bDefault ? "DV" : "V", bsEncodeText); 344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Type == RichText && !bDefault) { 345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAtString("RV", bsEncodeText); 346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("I"); 348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAtString(bDefault ? "DV" : "V", PDF_EncodeText(csValue)); 350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bDefault) { 351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ClearSelection(); 353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetItemSelection(iIndex, TRUE); 354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterValueChange(this); 358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case ListBox: { 362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iIndex = FindOptionValue(value); 363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iIndex < 0) { 364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bDefault && iIndex == GetDefaultSelectedItem()) { 367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue = value; 371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); 372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iRet < 0) { 373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bDefault) { 377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ClearSelection(); 379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetItemSelection(iIndex, TRUE); 380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterSelectionChange(this); 383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_InterForm::m_bUpdateAP) { 391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann UpdateAP(NULL); 392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, FX_BOOL bNotify) { 396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return SetValue(value, FALSE, bNotify); 397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::GetMaxLen() { 399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen")) 400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pObj->GetInteger(); 401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < m_ControlList.GetSize(); i++) { 403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FormControl* pControl = m_ControlList.GetAt(i); 404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pControl) 405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict; 408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWidgetDict->KeyExist("MaxLen")) 409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pWidgetDict->GetInteger("MaxLen"); 410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::CountSelectedItems() { 414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); 415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pValue) { 416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pValue = FPDF_GetFieldAttr(m_pDict, "I"); 417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pValue) 418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pValue->IsString() || pValue->IsNumber()) 422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pValue->GetString().IsEmpty() ? 0 : 1; 423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_Array* pArray = pValue->AsArray()) 424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pArray->GetCount(); 425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::GetSelectedIndex(int index) { 428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); 429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pValue) { 430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pValue = FPDF_GetFieldAttr(m_pDict, "I"); 431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pValue) 432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pValue->IsNumber()) 435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pValue->GetInteger(); 436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString sel_value; 438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pValue->IsString()) { 439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index != 0) 440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sel_value = pValue->GetUnicodeText(); 442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = pValue->AsArray(); 444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pArray || index < 0) 445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* elementValue = pArray->GetElementValue(index); 448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sel_value = 449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann elementValue ? elementValue->GetUnicodeText() : CFX_WideString(); 450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index < CountSelectedOptions()) { 452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iOptIndex = GetSelectedOptionIndex(index); 453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csOpt = GetOptionValue(iOptIndex); 454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csOpt == sel_value) { 455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return iOptIndex; 456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nOpts = CountOptions(); 459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < nOpts; i++) { 460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (sel_value == GetOptionValue(i)) { 461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return i; 462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::ClearSelection(FX_BOOL bNotify) { 467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = 0; 469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue; 470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iIndex = GetSelectedIndex(0); 471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iIndex >= 0) { 472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csValue = GetOptionLabel(iIndex); 473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) { 475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); 476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) { 478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); 479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iRet < 0) { 481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("V"); 485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("I"); 486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) { 488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterSelectionChange(this); 489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) { 491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterValueChange(this); 492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_InterForm::m_bUpdateAP) { 495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann UpdateAP(NULL); 496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::IsItemSelected(int index) { 501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ASSERT(GetType() == ComboBox || GetType() == ListBox); 502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index < 0 || index >= CountOptions()) { 503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsOptionSelected(index)) { 506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString opt_value = GetOptionValue(index); 509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); 510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pValue) { 511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pValue = FPDF_GetFieldAttr(m_pDict, "I"); 512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pValue) { 513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pValue->IsString()) 518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pValue->GetUnicodeText() == opt_value; 519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pValue->IsNumber()) { 521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pValue->GetString().IsEmpty()) 522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (pValue->GetInteger() == index); 524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = pValue->AsArray(); 527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pArray) 528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iPos = -1; 531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int j = 0; j < CountSelectedOptions(); j++) { 532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetSelectedOptionIndex(j) == index) { 533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iPos = j; 534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (FX_DWORD i = 0; i < pArray->GetCount(); i++) 538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pArray->GetElementValue(i)->GetUnicodeText() == opt_value && 539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (int)i == iPos) { 540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::SetItemSelection(int index, 545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bSelected, 546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bNotify) { 547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ASSERT(GetType() == ComboBox || GetType() == ListBox); 548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index < 0 || index >= CountOptions()) { 549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString opt_value = GetOptionValue(index); 552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = 0; 554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) { 555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, opt_value); 556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) { 558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, opt_value); 559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iRet < 0) { 561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bSelected) { 565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); 566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pValue) { 567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Type == ListBox) { 568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SelectOption(index, FALSE); 569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pValue->IsString()) { 570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pValue->GetUnicodeText() == opt_value) { 571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("V"); 572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (pValue->IsArray()) { 574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = new CPDF_Array; 575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = CountOptions(); 576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (i != index) { 578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsItemSelected(i)) { 579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann opt_value = GetOptionValue(i); 580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pArray->AddString(PDF_EncodeText(opt_value)); 581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pArray->GetCount() < 1) { 585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pArray->Release(); 586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAt("V", pArray); 588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (m_Type == ComboBox) { 591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("V"); 592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("I"); 593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Type == ListBox) { 597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SelectOption(index, TRUE); 598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!(m_Flags & FORMLIST_MULTISELECT)) { 599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAtString("V", PDF_EncodeText(opt_value)); 600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = new CPDF_Array; 602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = CountOptions(); 603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bSelected; 605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (i != index) { 606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bSelected = IsItemSelected(i); 607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bSelected = TRUE; 609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bSelected) { 611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann opt_value = GetOptionValue(i); 612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pArray->AddString(PDF_EncodeText(opt_value)); 613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAt("V", pArray); 616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (m_Type == ComboBox) { 618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAtString("V", PDF_EncodeText(opt_value)); 619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pI = new CPDF_Array; 620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pI->AddInteger(index); 621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAt("I", pI); 622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) { 626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterSelectionChange(this); 627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) { 629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterValueChange(this); 630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_InterForm::m_bUpdateAP) { 633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann UpdateAP(NULL); 634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::IsItemDefaultSelected(int index) { 639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ASSERT(GetType() == ComboBox || GetType() == ListBox); 640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index < 0 || index >= CountOptions()) { 641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iDVIndex = GetDefaultSelectedItem(); 644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iDVIndex < 0) { 645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (iDVIndex == index); 648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::GetDefaultSelectedItem() { 650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ASSERT(GetType() == ComboBox || GetType() == ListBox); 651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "DV"); 652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pValue) { 653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return -1; 654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csDV = pValue->GetUnicodeText(); 656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csDV.IsEmpty()) { 657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = CountOptions(); 660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csDV == GetOptionValue(i)) { 662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return i; 663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_FormField::UpdateAP(CPDF_FormControl* pControl) { 668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Type == PushButton) { 669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Type == RadioButton || m_Type == CheckBox) { 672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pForm->m_bGenerateAP) { 675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < CountControls(); i++) { 678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FormControl* pControl = GetControl(i); 679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FPDF_GenerateAP(m_pForm->m_pDocument, pControl->m_pWidgetDict); 680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::CountOptions() { 683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "Opt")); 684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pArray ? pArray->GetCount() : 0; 685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetOptionText(int index, int sub_index) { 687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "Opt")); 688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pArray) 689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CFX_WideString(); 690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pOption = pArray->GetElementValue(index); 692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pOption) 693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CFX_WideString(); 694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_Array* pOptionArray = pOption->AsArray()) 695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pOption = pOptionArray->GetElementValue(sub_index); 696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_String* pString = ToString(pOption); 698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pString ? pString->GetUnicodeText() : CFX_WideString(); 699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetOptionLabel(int index) { 701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetOptionText(index, 1); 702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetOptionValue(int index) { 704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetOptionText(index, 0); 705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::FindOption(CFX_WideString csOptLabel) { 707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = CountOptions(); 708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue = GetOptionValue(i); 710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csValue == csOptLabel) { 711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return i; 712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::FindOptionValue(const CFX_WideString& csOptValue, 717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iStartIndex) { 718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iStartIndex < 0) { 719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iStartIndex = 0; 720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = CountOptions(); 722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (; iStartIndex < iCount; iStartIndex++) { 723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue = GetOptionValue(iStartIndex); 724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csValue == csOptValue) { 725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return iStartIndex; 726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA 731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::InsertOption(CFX_WideString csOptLabel, 732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int index, 733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bNotify) { 734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csOptLabel.IsEmpty()) 735e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return -1; 736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = 0; 739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) 740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csOptLabel); 741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) 742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csOptLabel); 743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iRet < 0) 744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csStr = PDF_EncodeText(csOptLabel, csOptLabel.GetLength()); 748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt"); 749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pOpt = ToArray(pValue); 750ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pOpt) { 751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pOpt = new CPDF_Array; 752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAt("Opt", pOpt); 753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = (int)pOpt->GetCount(); 756ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index < 0 || index >= iCount) { 757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pOpt->AddString(csStr); 758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann index = iCount; 759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_String* pString = new CPDF_String(csStr, FALSE); 761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pOpt->InsertAt(index, pString); 762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 764ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) 766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterSelectionChange(this); 767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) 768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterValueChange(this); 769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 771ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return index; 772e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::ClearOptions(FX_BOOL bNotify) { 774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = 0; 776ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue; 777ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iIndex = GetSelectedIndex(0); 778ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iIndex >= 0) 779ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csValue = GetOptionLabel(iIndex); 780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) 781ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); 782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) 783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); 784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iRet < 0) 785ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 787ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("Opt"); 789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("V"); 790ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("DV"); 791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("I"); 792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("TI"); 793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 794ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 795ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) 796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterSelectionChange(this); 797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) 798ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterValueChange(this); 799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 802ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 803e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 804ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif // PDF_ENABLE_XFA 805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::CheckControl(int iControlIndex, 806ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bChecked, 807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bNotify) { 808ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ASSERT(GetType() == CheckBox || GetType() == RadioButton); 809ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FormControl* pControl = GetControl(iControlIndex); 810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pControl) { 811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bChecked && pControl->IsChecked() == bChecked) { 814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 816ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteArray statusArray; 817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 818ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SaveCheckedFieldStatus(this, statusArray); 819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csWExport = pControl->GetExportValue(); 821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csBExport = PDF_EncodeText(csWExport); 822ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = CountControls(); 823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bUnison = PDF_FormField_IsUnison(this); 824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FormControl* pCtrl = GetControl(i); 826ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bUnison) { 827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csEValue = pCtrl->GetExportValue(); 828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csEValue == csWExport) { 829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pCtrl->GetOnStateName() == pControl->GetOnStateName()) { 830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCtrl->CheckControl(bChecked); 831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (bChecked) { 832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCtrl->CheckControl(FALSE); 833e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (bChecked) { 835ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCtrl->CheckControl(FALSE); 836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (i == iControlIndex) { 839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCtrl->CheckControl(bChecked); 840ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (bChecked) { 841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCtrl->CheckControl(FALSE); 842ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 844ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); 846ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!ToArray(pOpt)) { 847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bChecked) { 848ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAtName("V", csBExport); 849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 850ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csV; 851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); 852ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pV) { 853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csV = pV->GetString(); 854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csV == csBExport) { 856ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAtName("V", "Off"); 857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 858ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 859ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (bChecked) { 860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csIndex; 861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csIndex.Format("%d", iControlIndex); 862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAtName("V", csIndex); 863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 864ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); 866ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 867ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 868ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 869e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 870ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) { 871ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ASSERT(GetType() == CheckBox || GetType() == RadioButton); 872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csExport = L"Off"; 873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bChecked; 874ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = CountControls(); 875ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FormControl* pControl = GetControl(i); 877ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bDefault) { 878ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bChecked = pControl->IsDefaultChecked(); 879ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 880ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bChecked = pControl->IsChecked(); 881e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 882ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bChecked) { 883ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csExport = pControl->GetExportValue(); 884ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 885e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 887ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return csExport; 888e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 889ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value, 890ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bDefault, 891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bNotify) { 892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ASSERT(GetType() == CheckBox || GetType() == RadioButton); 893ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteArray statusArray; 894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 895ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SaveCheckedFieldStatus(this, statusArray); 896ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 897ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = CountControls(); 898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FormControl* pControl = GetControl(i); 900ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csExport = pControl->GetExportValue(); 901ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (csExport == value) { 902ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bDefault) { 903ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CheckControl(GetControlIndex(pControl), TRUE); 905ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 907ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bDefault) { 909ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 910ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CheckControl(GetControlIndex(pControl), FALSE); 911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 915ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray); 916ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 917ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 918ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 919e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::GetTopVisibleIndex() { 921ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); 922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 923ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 925ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pObj->GetInteger(); 926e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 927ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::CountSelectedOptions() { 928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I"); 929ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 931ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 932ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = pObj->GetArray(); 933ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pArray) { 934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 935ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (int)pArray->GetCount(); 937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 938ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_FormField::GetSelectedOptionIndex(int index) { 939ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I"); 940ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 941e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return -1; 942ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 943ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = pObj->GetArray(); 944ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pArray) { 945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 947ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = (int)pArray->GetCount(); 948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iCount > 0 && index < iCount) { 949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pArray->GetInteger(index); 950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 951ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return -1; 952e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 953ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex) { 954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I"); 955ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj) { 956e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 957ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 958ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = pObj->GetArray(); 959ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pArray) { 960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 961ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 962ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iCount = (int)pArray->GetCount(); 963ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < iCount; i++) { 964ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pArray->GetInteger(i) == iOptIndex) { 965ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 966ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 967ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 968ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 969e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 970ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::SelectOption(int iOptIndex, 971ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bSelected, 972ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bNotify) { 973ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = m_pDict->GetArray("I"); 974ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pArray) { 975ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bSelected) { 976ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 977ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 978ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pArray = new CPDF_Array; 979ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->SetAt("I", pArray); 980ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 981ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bReturn = FALSE; 982ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < (int)pArray->GetCount(); i++) { 983ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iFind = pArray->GetInteger(i); 984ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iFind == iOptIndex) { 985ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bSelected) { 986ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 987ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 988ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 989e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int iRet = 0; 990ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue = GetOptionLabel(iOptIndex); 991e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (GetType() == ListBox) { 992ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); 993e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 994e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (GetType() == ComboBox) { 995ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); 996e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 997e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (iRet < 0) { 998ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 999e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1000ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1001ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pArray->RemoveAt(i); 1002ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bReturn = TRUE; 1003ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1004ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (iFind > iOptIndex) { 1005ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bSelected) { 1006ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 1007ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1008ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 1009ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = 0; 1010ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue = GetOptionLabel(iOptIndex); 1011e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (GetType() == ListBox) { 1012ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); 1013e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1014e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (GetType() == ComboBox) { 1015ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); 1016e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1017ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iRet < 0) { 1018ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 1019ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1020ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1021ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Number* pNum = new CPDF_Number(iOptIndex); 1022ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pArray->InsertAt(i, pNum); 1023ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bReturn = TRUE; 1024ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1025ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1026ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1027ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!bReturn) { 1028ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bSelected) { 1029ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pArray->AddInteger(iOptIndex); 1030ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1031ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pArray->GetCount() == 0) { 1032ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("I"); 1033ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1034ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1035ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 1036ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) { 1037ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterSelectionChange(this); 1038ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1039ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) { 1040ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterValueChange(this); 1041ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1042ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1043ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 1044ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 1045e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1046ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify) { 1047ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 1048ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iRet = 0; 1049ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString csValue; 1050ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iIndex = GetSelectedIndex(0); 1051ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iIndex >= 0) { 1052ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann csValue = GetOptionLabel(iIndex); 1053ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1054ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) { 1055ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue); 1056ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1057ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) { 1058ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue); 1059ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1060ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iRet < 0) { 1061ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 1062ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1063ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1064ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDict->RemoveAt("I"); 1065ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bNotify && m_pForm->m_pFormNotify) { 1066ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ListBox) { 1067ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterSelectionChange(this); 1068ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1069ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetType() == ComboBox) { 1070ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormNotify->AfterValueChange(this); 1071ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1072ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1073ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_bUpdated = TRUE; 1074ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 1075ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1076ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_FormField::LoadDA() { 1077ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString DA; 1078ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_Object* pObj_t = FPDF_GetFieldAttr(m_pDict, "DA")) { 1079ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann DA = pObj_t->GetString(); 1080ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1081ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (DA.IsEmpty() && m_pForm->m_pFormDict) { 1082ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann DA = m_pForm->m_pFormDict->GetString("DA"); 1083ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1084ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (DA.IsEmpty()) { 1085ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1086ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1087ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_SimpleParser syntax(DA); 1088ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann syntax.FindTagParam("Tf", 2); 1089ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString font_name = syntax.GetWord(); 1090ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFontDict = NULL; 1091ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pForm->m_pFormDict && m_pForm->m_pFormDict->GetDict("DR") && 1092ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")) 1093ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFontDict = m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")->GetDict( 1094ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann font_name); 1095e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1096ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFontDict) { 1097ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1098ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1099ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict); 1100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_FontSize = FX_atof(syntax.GetWord()); 1101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1102