1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/fpdfdoc/fpdf_doc.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_FormControl::CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict)
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pField = pField;
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pWidgetDict = pWidgetDict;
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pForm = m_pField->m_pForm;
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_FloatRect CPDF_FormControl::GetRect()
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_pWidgetDict->GetRect("Rect");
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPDF_FormControl::GetOnStateName()
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csOn;
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary* pAP = m_pWidgetDict->GetDict("AP");
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pAP == NULL) {
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return csOn;
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary* pN = pAP->GetDict("N");
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pN == NULL) {
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return csOn;
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_POSITION pos = pN->GetStartPos();
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    while (pos) {
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        pN->GetNextElement(pos, csOn);
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (csOn != "Off") {
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return csOn;
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return CFX_ByteString();
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDF_FormControl::SetOnStateName(const CFX_ByteString& csOn)
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csValue = csOn;
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (csValue.IsEmpty()) {
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        csValue = "Yes";
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (csValue == "Off") {
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        csValue = "Yes";
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csAS = m_pWidgetDict->GetString("AS", "Off");
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (csAS != "Off") {
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_pWidgetDict->SetAtName("AS", csValue);
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary* pAP = m_pWidgetDict->GetDict("AP");
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pAP == NULL) {
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return;
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_POSITION pos1 = pAP->GetStartPos();
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    while (pos1) {
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CFX_ByteString csKey1;
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_Object* pObj1 = pAP->GetNextElement(pos1, csKey1);
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (pObj1 == NULL) {
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            continue;
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_Object* pObjDirect1 = pObj1->GetDirect();
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (pObjDirect1->GetType() != PDFOBJ_DICTIONARY) {
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            continue;
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_Dictionary* pSubDict = (CPDF_Dictionary*)pObjDirect1;
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_POSITION pos2 = pSubDict->GetStartPos();
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        while (pos2) {
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            CFX_ByteString csKey2;
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            CPDF_Object* pObj2 = pSubDict->GetNextElement(pos2, csKey2);
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            if (pObj2 == NULL) {
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                continue;
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            }
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            if (csKey2 != "Off") {
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                pSubDict->ReplaceKey(csKey2, csValue);
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                break;
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            }
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPDF_FormControl::GetCheckedAPState()
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csOn = GetOnStateName();
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (GetType() == CPDF_FormField::RadioButton || GetType() == CPDF_FormField::CheckBox) {
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pField->m_pDict, "Opt");
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (pOpt != NULL && pOpt->GetType() == PDFOBJ_ARRAY) {
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            int iIndex = m_pField->GetControlIndex(this);
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            csOn.Format("%d", iIndex);
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (csOn.IsEmpty()) {
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        csOn = "Yes";
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return csOn;
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CPDF_FormControl::GetExportValue()
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csOn = GetOnStateName();
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (GetType() == CPDF_FormField::RadioButton || GetType() == CPDF_FormField::CheckBox) {
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pField->m_pDict, "Opt");
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (pOpt != NULL && pOpt->GetType() == PDFOBJ_ARRAY) {
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            int iIndex = m_pField->GetControlIndex(this);
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            csOn = ((CPDF_Array*)pOpt)->GetString(iIndex);
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (csOn.IsEmpty()) {
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        csOn = "Yes";
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_WideString csWOn = PDF_DecodeText(csOn);
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return csWOn;
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDF_FormControl::IsChecked()
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csOn = GetOnStateName();
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csAS = m_pWidgetDict->GetString("AS");
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return csAS == csOn;
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDF_FormControl::IsDefaultChecked()
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object* pDV = FPDF_GetFieldAttr(m_pField->m_pDict, "DV");
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pDV == NULL) {
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FALSE;
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csDV = pDV->GetString();
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csOn = GetOnStateName();
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return (csDV == csOn);
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDF_FormControl::CheckControl(FX_BOOL bChecked)
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csOn = GetOnStateName();
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csOldAS = m_pWidgetDict->GetString("AS", "Off");
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csAS = "Off";
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (bChecked) {
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        csAS = csOn;
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (csOldAS == csAS) {
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return;
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pWidgetDict->SetAtName("AS", csAS);
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    m_pForm->m_bUpdated = TRUE;
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Stream* FPDFDOC_GetAnnotAP(CPDF_Dictionary* pAnnotDict, CPDF_Annot::AppearanceMode mode);
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDF_FormControl::DrawControl(CFX_RenderDevice* pDevice, CFX_AffineMatrix* pMatrix, CPDF_Page* pPage,
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                   CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions)
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pWidgetDict->GetInteger("F") & ANNOTFLAG_HIDDEN) {
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return;
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Stream* pStream = FPDFDOC_GetAnnotAP(m_pWidgetDict, mode);
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pStream == NULL) {
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return;
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_FloatRect form_bbox = pStream->GetDict()->GetRect("BBox");
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_AffineMatrix form_matrix = pStream->GetDict()->GetMatrix("Matrix");
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    form_matrix.TransformRect(form_bbox);
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_FloatRect arect = m_pWidgetDict->GetRect("Rect");
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_AffineMatrix matrix;
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    matrix.MatchRect(arect, form_bbox);
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    matrix.Concat(*pMatrix);
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Form form(m_pField->m_pForm->m_pDocument, m_pField->m_pForm->m_pFormDict->GetDict("DR"), pStream);
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    form.ParseContent(NULL, NULL, NULL, NULL);
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_RenderContext context;
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    context.Create(pPage);
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    context.DrawObjectList(pDevice, &form, &matrix, pOptions);
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovconst FX_CHAR* g_sHighlightingMode[] = {"N", "I", "O", "P", "T", ""};
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_FormControl::HighlightingMode CPDF_FormControl::GetHighlightingMode()
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pWidgetDict == NULL) {
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return Invert;
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csH = m_pWidgetDict->GetString("H", "I");
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int i = 0;
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    while (g_sHighlightingMode[i][0] != '\0') {
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (csH.Equal(g_sHighlightingMode[i])) {
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return (HighlightingMode)i;
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        i ++;
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return Invert;
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_ApSettings CPDF_FormControl::GetMK(FX_BOOL bCreate)
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (!m_pWidgetDict) {
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return NULL;
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ApSettings mk = m_pWidgetDict->GetDict(FX_BSTRC("MK"));
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (!mk && bCreate) {
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        mk = CPDF_Dictionary::Create();
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (mk == NULL) {
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return NULL;
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_pWidgetDict->SetAt(FX_BSTRC("MK"), mk);
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return mk;
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDF_FormControl::HasMKEntry(CFX_ByteString csEntry)
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ApSettings mk = GetMK(FALSE);
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return mk.HasMKEntry(csEntry);
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CPDF_FormControl::GetRotation()
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ApSettings mk = GetMK(FALSE);
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return mk.GetRotation();
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_ARGB CPDF_FormControl::GetColor(int& iColorType, CFX_ByteString csEntry)
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ApSettings mk = GetMK(FALSE);
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return mk.GetColor(iColorType, csEntry);
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPDF_FormControl::GetOriginalColor(int index, CFX_ByteString csEntry)
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ApSettings mk = GetMK(FALSE);
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return mk.GetOriginalColor(index, csEntry);
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDF_FormControl::GetOriginalColor(int& iColorType, FX_FLOAT fc[4], CFX_ByteString csEntry)
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ApSettings mk = GetMK(FALSE);
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    mk.GetOriginalColor(iColorType, fc, csEntry);
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CPDF_FormControl::GetCaption(CFX_ByteString csEntry)
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ApSettings mk = GetMK(FALSE);
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return mk.GetCaption(csEntry);
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Stream* CPDF_FormControl::GetIcon(CFX_ByteString csEntry)
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ApSettings mk = GetMK(FALSE);
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return mk.GetIcon(csEntry);
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_IconFit CPDF_FormControl::GetIconFit()
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ApSettings mk = GetMK(FALSE);
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return mk.GetIconFit();
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CPDF_FormControl::GetTextPosition()
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ApSettings mk = GetMK(FALSE);
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return mk.GetTextPosition();
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Action CPDF_FormControl::GetAction()
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pWidgetDict == NULL) {
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return NULL;
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pWidgetDict->KeyExist("A")) {
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pWidgetDict->GetDict("A");
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else {
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "A");
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (pObj == NULL) {
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return NULL;
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return pObj->GetDict();
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_AAction CPDF_FormControl::GetAdditionalAction()
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pWidgetDict == NULL) {
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return NULL;
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pWidgetDict->KeyExist("AA")) {
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pWidgetDict->GetDict("AA");
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else {
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pField->GetAdditionalAction();
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_DefaultAppearance CPDF_FormControl::GetDefaultAppearance()
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pWidgetDict == NULL) {
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return CFX_ByteString();
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pWidgetDict->KeyExist("DA")) {
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pWidgetDict->GetString("DA");
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else {
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "DA");
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (pObj == NULL) {
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return m_pField->m_pForm->GetDefaultAppearance();
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return pObj->GetString();
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Font* CPDF_FormControl::GetDefaultControlFont()
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_DefaultAppearance cDA = GetDefaultAppearance();
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString csFontNameTag;
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT fFontSize;
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cDA.GetFont(csFontNameTag, fFontSize);
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (csFontNameTag.IsEmpty()) {
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return NULL;
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object* pObj = FPDF_GetFieldAttr(m_pWidgetDict, "DR");
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pObj != NULL && pObj->GetType() == PDFOBJ_DICTIONARY) {
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_Dictionary* pFonts = ((CPDF_Dictionary*)pObj)->GetDict("Font");
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (pFonts != NULL) {
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            CPDF_Dictionary *pElement = pFonts->GetDict(csFontNameTag);
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            CPDF_Font *pFont = m_pField->m_pForm->m_pDocument->LoadFont(pElement);
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            if (pFont != NULL) {
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                return pFont;
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            }
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Font *pFont = m_pField->m_pForm->GetFormFont(csFontNameTag);
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pFont != NULL) {
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return pFont;
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary *pPageDict = m_pWidgetDict->GetDict("P");
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    pObj = FPDF_GetFieldAttr(pPageDict, "Resources");
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pObj != NULL && pObj->GetType() == PDFOBJ_DICTIONARY) {
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_Dictionary* pFonts = ((CPDF_Dictionary*)pObj)->GetDict("Font");
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (pFonts != NULL) {
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            CPDF_Dictionary *pElement = pFonts->GetDict(csFontNameTag);
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            CPDF_Font *pFont = m_pField->m_pForm->m_pDocument->LoadFont(pElement);
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            if (pFont != NULL) {
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                return pFont;
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            }
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return NULL;
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CPDF_FormControl::GetControlAlignment()
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pWidgetDict == NULL) {
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 0;
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pWidgetDict->KeyExist("Q")) {
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pWidgetDict->GetInteger("Q", 0);
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else {
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "Q");
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (pObj == NULL) {
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return m_pField->m_pForm->GetFormAlignment();
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return pObj->GetInteger();
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDF_ApSettings::HasMKEntry(FX_BSTR csEntry)
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pDict == NULL) {
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return FALSE;
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_pDict->KeyExist(csEntry);
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CPDF_ApSettings::GetRotation()
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pDict == NULL) {
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 0;
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_pDict->GetInteger(FX_BSTRC("R"));
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_ARGB CPDF_ApSettings::GetColor(int& iColorType, FX_BSTR csEntry)
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    iColorType = COLORTYPE_TRANSPARENT;
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pDict == NULL) {
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 0;
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_ARGB color = 0;
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Array* pEntry = m_pDict->GetArray(csEntry);
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pEntry == NULL) {
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return color;
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD dwCount = pEntry->GetCount();
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (dwCount == 1) {
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        iColorType = COLORTYPE_GRAY;
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT g = pEntry->GetNumber(0) * 255;
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        color = ArgbEncode(255, (int)g, (int)g, (int)g);
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (dwCount == 3) {
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        iColorType = COLORTYPE_RGB;
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT r = pEntry->GetNumber(0) * 255;
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT g = pEntry->GetNumber(1) * 255;
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT b = pEntry->GetNumber(2) * 255;
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        color = ArgbEncode(255, (int)r, (int)g, (int)b);
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (dwCount == 4) {
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        iColorType = COLORTYPE_CMYK;
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT c = pEntry->GetNumber(0);
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT m = pEntry->GetNumber(1);
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT y = pEntry->GetNumber(2);
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT k = pEntry->GetNumber(3);
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        color = ArgbEncode(255, (int)(r * 255), (int)(g * 255), (int)(b * 255));
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return color;
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPDF_ApSettings::GetOriginalColor(int index, FX_BSTR csEntry)
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pDict == NULL) {
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return 0;
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Array* pEntry = m_pDict->GetArray(csEntry);
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pEntry != NULL) {
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return pEntry->GetNumber(index);
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return 0;
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDF_ApSettings::GetOriginalColor(int& iColorType, FX_FLOAT fc[4], FX_BSTR csEntry)
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    iColorType = COLORTYPE_TRANSPARENT;
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    for (int i = 0; i < 4; i ++) {
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        fc[i] = 0;
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pDict == NULL) {
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return;
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Array* pEntry = m_pDict->GetArray(csEntry);
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (pEntry == NULL) {
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return;
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD dwCount = pEntry->GetCount();
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (dwCount == 1) {
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        iColorType = COLORTYPE_GRAY;
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        fc[0] = pEntry->GetNumber(0);
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (dwCount == 3) {
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        iColorType = COLORTYPE_RGB;
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        fc[0] = pEntry->GetNumber(0);
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        fc[1] = pEntry->GetNumber(1);
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        fc[2] = pEntry->GetNumber(2);
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } else if (dwCount == 4) {
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        iColorType = COLORTYPE_CMYK;
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        fc[0] = pEntry->GetNumber(0);
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        fc[1] = pEntry->GetNumber(1);
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        fc[2] = pEntry->GetNumber(2);
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        fc[3] = pEntry->GetNumber(3);
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CPDF_ApSettings::GetCaption(FX_BSTR csEntry)
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_WideString csCaption;
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pDict == NULL) {
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return csCaption;
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_pDict->GetUnicodeText(csEntry);
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Stream* CPDF_ApSettings::GetIcon(FX_BSTR csEntry)
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pDict == NULL) {
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return NULL;
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_pDict->GetStream(csEntry);
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_IconFit CPDF_ApSettings::GetIconFit()
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pDict == NULL) {
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return NULL;
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_pDict->GetDict(FX_BSTRC("IF"));
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CPDF_ApSettings::GetTextPosition()
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (m_pDict == NULL) {
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return TEXTPOS_CAPTION;
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return m_pDict->GetInteger(FX_BSTRC("TP"), TEXTPOS_CAPTION);
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
462